NbusSlave.cpp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. /*
  2. * @file AppBridge.cpp
  3. * @brief Implemetnácia modulu nBus Slave z pohľadu nBus Bridge
  4. * @date Mar 2, 2025
  5. * @author Juraj Dudak
  6. */
  7. #include <NbusSlave.h>
  8. NbusSlave::NbusSlave() {
  9. _address = 0;
  10. _communicator = NULL;
  11. _pdu.ma = 0;
  12. }
  13. NbusSlave::NbusSlave(uint8_t address, NbusCommunicator *comm) {
  14. _address = address;
  15. _communicator = comm;
  16. _pdu.ma = address;
  17. }
  18. NbusSlave::~NbusSlave() {
  19. // empty
  20. }
  21. void NbusSlave::setCommunicator(NbusCommunicator* comm){
  22. _communicator = comm;
  23. }
  24. void NbusSlave::setAddress(uint8_t address){
  25. _address = address;
  26. _pdu.ma = _address;
  27. }
  28. bool NbusSlave::isActive(){
  29. return _communicator != NULL && _address != 0;
  30. }
  31. DataFrame* NbusSlave::nbus_echo() {
  32. _pdu.sa = SLAVE_ADDRESS_MODULE;
  33. _pdu.fc = FC_ECHO;
  34. _sensor_cache[0] = 60 + _pdu.ma;
  35. _sensor_cache[1] = 61 + _pdu.ma;
  36. _sensor_cache[2] = 62 + _pdu.ma;
  37. _sensor_cache[3] = 63 + _pdu.ma;
  38. _sensor_count = 0;
  39. return _communicator->send(&_pdu, _sensor_cache, 4);
  40. }
  41. uint8_t NbusSlave::nbus_get_sensor_count(bool check_hw) {
  42. if (_sensor_count == 0 || check_hw == true) {
  43. nbus_sensor_count();
  44. }
  45. return _sensor_count;
  46. }
  47. DataFrame* NbusSlave::nbus_sensor_count() {
  48. _pdu.sa = SLAVE_ADDRESS_MODULE;
  49. _pdu.fc = FC_SENSOR_CNT;
  50. DataFrame* df = _communicator->send(&_pdu, _sensor_cache, 0);
  51. _sensor_count = df->GetFrame()[3];
  52. return df;
  53. }
  54. DataFrame* NbusSlave::nbus_sensor_type(uint8_t sensor_address) {
  55. _pdu.sa = sensor_address;
  56. _pdu.fc = FC_SENSOR_TYPE;
  57. return _communicator->send(&_pdu, _sensor_cache, 0);
  58. }
  59. DataFrame* NbusSlave::nbus_module_info() {
  60. _pdu.sa = SLAVE_ADDRESS_MODULE;
  61. _pdu.fc = FC_INFO;
  62. return _communicator->send(&_pdu, _sensor_cache, 0);
  63. }
  64. DataFrame* NbusSlave::nbus_sensors_parameters() {
  65. return nbus_sensor_parameters(0);
  66. }
  67. DataFrame* NbusSlave::nbus_sensor_parameters(uint8_t sensor_address) {
  68. _pdu.sa = sensor_address;
  69. _pdu.fc = FC_SENSOR_FORMAT;
  70. return _communicator->send(&_pdu, _sensor_cache, 0);
  71. }
  72. DataFrame* NbusSlave::nbus_sensor_parameter(uint8_t sensor_address, uint8_t parameter) {
  73. _pdu.sa = sensor_address;
  74. _pdu.fc = FC_SENSOR_FORMAT;
  75. _sensor_cache[0] = parameter;
  76. return _communicator->send(&_pdu, _sensor_cache, 1);
  77. }
  78. DataFrame* NbusSlave::nbus_sensor_getData(uint8_t sensor_address) {
  79. _pdu.sa = sensor_address;
  80. _pdu.fc = FC_DATA;
  81. return _communicator->send(&_pdu, _sensor_cache, 0);
  82. }