NbusSlave.cpp 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. /*
  2. * @file AppBridge.cpp
  3. * @brief Implementation of nBus Slave.
  4. * @date Nov 27, 2025
  5. * @author Juraj Dudak, Matus Necas
  6. */
  7. #include <NbusSlave.h>
  8. void NbusSlave::setCommunicator(NbusCommunicator *nbus_comm)
  9. {
  10. _communicator = nbus_comm;
  11. }
  12. void NbusSlave::setModuleAddress(uint8_t addr)
  13. {
  14. _pdu.ma = addr;
  15. }
  16. uint8_t NbusSlave::getModuleAddress()
  17. {
  18. return _pdu.ma;
  19. }
  20. bool NbusSlave::isActive()
  21. {
  22. return _communicator != nullptr && _pdu.ma != 0;
  23. }
  24. DataFrame *NbusSlave::cmdProcessAnyRequest(DataFrame *slave_frame)
  25. {
  26. return _communicator->sendAndReceiveSlave(slave_frame);
  27. }
  28. DataFrame *NbusSlave::cmdGetData()
  29. {
  30. return _communicator->sendAndReceiveSlave(_makePacket(FC_DATA));
  31. }
  32. DataFrame *NbusSlave::cmdGetFormat()
  33. {
  34. return _communicator->sendAndReceiveSlave(_makePacket(FC_SENSOR_FORMAT));
  35. }
  36. uint8_t NbusSlave::cmdGetSensorCnt(bool check_hw)
  37. {
  38. if (_sensor_count == 0 || check_hw == true)
  39. {
  40. DataFrame *df = _communicator->sendAndReceiveSlave(_makePacket(FC_SENSOR_CNT));
  41. _sensor_count = NBUS_RX_DATA0(df->GetFrame() + 1);
  42. }
  43. return _sensor_count;
  44. }
  45. DataFrame* NbusSlave::_makePacket(Nbus_FC_e fc)
  46. {
  47. _cache_frame.Init();
  48. _cache_frame.AddUint8(_pdu.ma);
  49. _cache_frame.AddUint8(NBUS_BROADCAST_ADDRESS);
  50. _cache_frame.AddUint8(fc);
  51. _cache_frame.Commit();
  52. return &_cache_frame;
  53. }