NbusSlave.cpp 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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. Nbus_SensorCnt_t NbusSlave::cmdGetSensorCnt(bool check_hw)
  37. {
  38. if (check_hw == true)
  39. {
  40. DataFrame *df = _communicator->sendAndReceiveSlave(_makePacket(FC_SENSOR_CNT));
  41. _sensor_count.read_only_count = NBUS_RX_DATA0(df->GetFrame() + 1); // without length byte
  42. _sensor_count.read_write_count = NBUS_RX_DATA0(df->GetFrame() + 2);
  43. }
  44. return _sensor_count;
  45. }
  46. DataFrame* NbusSlave::_makePacket(Nbus_FC_e fc)
  47. {
  48. _cache_frame.Init();
  49. _cache_frame.AddUint8(_pdu.ma);
  50. _cache_frame.AddUint8(NBUS_BROADCAST_ADDRESS);
  51. _cache_frame.AddUint8(fc);
  52. _cache_frame.Commit();
  53. return &_cache_frame;
  54. }