NbusSlave.cpp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  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. _communicator = NULL;
  10. _pdu.ma = 0;
  11. _pdu.sa = 0;
  12. }
  13. NbusSlave::NbusSlave(uint8_t address, NbusCommunicator *comm) {
  14. _communicator = comm;
  15. _pdu.ma = address;
  16. }
  17. NbusSlave::~NbusSlave() {
  18. // empty
  19. }
  20. void NbusSlave::setCommunicator(NbusCommunicator* comm){
  21. _communicator = comm;
  22. }
  23. void NbusSlave::setAddress(uint8_t address){
  24. _pdu.ma = address;
  25. }
  26. uint8_t NbusSlave::getModuleAddress(){
  27. return _pdu.ma;
  28. }
  29. uint8_t NbusSlave::getSensorAddress(){
  30. return _pdu.sa;
  31. }
  32. bool NbusSlave::isActive(){
  33. // return _communicator != NULL;
  34. return _communicator != NULL && _pdu.ma != 0;
  35. }
  36. DataFrame* NbusSlave::nbus_echo(uint8_t *echo_data, uint8_t size) {
  37. _pdu.sa = SLAVE_ADDRESS_MODULE;
  38. _pdu.fc = FC_ECHO;
  39. for(uint32_t i=0;i<size;i++){
  40. _sensor_cache[i] = echo_data[i];
  41. }
  42. _sensor_count = 0;
  43. return _communicator->sendAndReceive(&_pdu, _sensor_cache, 4);
  44. }
  45. uint8_t NbusSlave::nbus_get_sensor_count(bool check_hw) {
  46. if (_sensor_count == 0 || check_hw == true) {
  47. nbus_sensor_count();
  48. }
  49. return _sensor_count;
  50. }
  51. DataFrame* NbusSlave::nbus_sensor_count() {
  52. _pdu.sa = SLAVE_ADDRESS_MODULE;
  53. _pdu.fc = FC_SENSOR_CNT;
  54. DataFrame* df = _communicator->sendAndReceive(&_pdu, _sensor_cache, 0);
  55. _sensor_count = df->GetFrame()[3];
  56. return df;
  57. }
  58. DataFrame* NbusSlave::nbus_sensor_type(uint8_t sensor_index) {
  59. _pdu.sa = sensor_index;
  60. _pdu.fc = FC_SENSOR_TYPE;
  61. return _communicator->sendAndReceive(&_pdu, _sensor_cache, 0);
  62. }
  63. DataFrame* NbusSlave::nbus_module_info() {
  64. _pdu.sa = SLAVE_ADDRESS_MODULE;
  65. _pdu.fc = FC_INFO;
  66. return _communicator->sendAndReceive(&_pdu, _sensor_cache, 0);
  67. }
  68. DataFrame* NbusSlave::nbus_sensor_format(uint8_t sensor_index) {
  69. _pdu.sa = sensor_index;
  70. _pdu.fc = FC_SENSOR_FORMAT;
  71. return _communicator->sendAndReceive(&_pdu, _sensor_cache, 0);
  72. }
  73. DataFrame* NbusSlave::nbus_sensor_getData(uint8_t sensor_address) {
  74. _pdu.sa = sensor_address;
  75. _pdu.fc = FC_DATA;
  76. return _communicator->sendAndReceive(&_pdu, _sensor_cache, 0);
  77. }
  78. DataFrame* NbusSlave::nbus_sensor_parameter(uint8_t sensor_address, uint8_t parameter) {
  79. _pdu.sa = sensor_address;
  80. _pdu.fc = FC_PARAM;
  81. _sensor_cache[0] = parameter;
  82. return _communicator->sendAndReceive(&_pdu, _sensor_cache, 1);
  83. }
  84. DataFrame* NbusSlave::nbus_sensor_parameters(uint8_t sensor_address) {
  85. _pdu.sa = sensor_address;
  86. _pdu.fc = FC_PARAM;
  87. return _communicator->sendAndReceive(&_pdu, _sensor_cache, 0);
  88. }