NbusSlave.cpp 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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. uint8_t NbusSlave::getModuleAddress(){
  29. return _pdu.ma;
  30. }
  31. uint8_t NbusSlave::getSensorAddress(){
  32. return _pdu.sa;
  33. }
  34. bool NbusSlave::isActive(){
  35. return _communicator != NULL && _address != 0;
  36. }
  37. DataFrame* NbusSlave::nbus_echo() {
  38. _pdu.sa = SLAVE_ADDRESS_MODULE;
  39. _pdu.fc = FC_ECHO;
  40. _sensor_cache[0] = 60 + _pdu.ma;
  41. _sensor_cache[1] = 61 + _pdu.ma;
  42. _sensor_cache[2] = 62 + _pdu.ma;
  43. _sensor_cache[3] = 63 + _pdu.ma;
  44. _sensor_count = 0;
  45. return _communicator->sendAndReceive(&_pdu, _sensor_cache, 4);
  46. }
  47. uint8_t NbusSlave::nbus_get_sensor_count(bool check_hw) {
  48. if (_sensor_count == 0 || check_hw == true) {
  49. nbus_sensor_count();
  50. }
  51. return _sensor_count;
  52. }
  53. DataFrame* NbusSlave::nbus_sensor_count() {
  54. _pdu.sa = SLAVE_ADDRESS_MODULE;
  55. _pdu.fc = FC_SENSOR_CNT;
  56. DataFrame* df = _communicator->sendAndReceive(&_pdu, _sensor_cache, 0);
  57. _sensor_count = df->GetFrame()[3];
  58. return df;
  59. }
  60. DataFrame* NbusSlave::nbus_sensor_type(uint8_t sensor_index) {
  61. _pdu.sa = sensor_index;
  62. _pdu.fc = FC_SENSOR_TYPE;
  63. return _communicator->sendAndReceive(&_pdu, _sensor_cache, 0);
  64. }
  65. DataFrame* NbusSlave::nbus_module_info() {
  66. _pdu.sa = SLAVE_ADDRESS_MODULE;
  67. _pdu.fc = FC_INFO;
  68. return _communicator->sendAndReceive(&_pdu, _sensor_cache, 0);
  69. }
  70. DataFrame* NbusSlave::nbus_sensor_format(uint8_t sensor_index) {
  71. _pdu.sa = sensor_index;
  72. _pdu.fc = FC_SENSOR_FORMAT;
  73. return _communicator->sendAndReceive(&_pdu, _sensor_cache, 0);
  74. }
  75. DataFrame* NbusSlave::nbus_sensor_getData(uint8_t sensor_address) {
  76. _pdu.sa = sensor_address;
  77. _pdu.fc = FC_DATA;
  78. return _communicator->sendAndReceive(&_pdu, _sensor_cache, 0);
  79. }
  80. DataFrame* NbusSlave::nbus_sensor_parameter(uint8_t sensor_address, uint8_t parameter) {
  81. _pdu.sa = sensor_address;
  82. _pdu.fc = FC_PARAM;
  83. _sensor_cache[0] = parameter;
  84. return _communicator->sendAndReceive(&_pdu, _sensor_cache, 1);
  85. }
  86. DataFrame* NbusSlave::nbus_sensor_parameters(uint8_t sensor_address) {
  87. _pdu.sa = sensor_address;
  88. _pdu.fc = FC_PARAM;
  89. return _communicator->sendAndReceive(&_pdu, _sensor_cache, 0);
  90. }