/* * @file AppBridge.cpp * @brief Implementation of nBus Slave. * @date Nov 27, 2025 * @author Juraj Dudak, Matus Necas */ #include void NbusSlave::setCommunicator(NbusCommunicator *nbus_comm) { _communicator = nbus_comm; } void NbusSlave::setModuleAddress(uint8_t addr) { _pdu.ma = addr; } uint8_t NbusSlave::getModuleAddress() { return _pdu.ma; } bool NbusSlave::isActive() { return _communicator != nullptr && _pdu.ma != 0; } DataFrame *NbusSlave::cmdProcessAnyRequest(DataFrame *slave_frame) { return _communicator->sendAndReceiveSlave(slave_frame); } DataFrame *NbusSlave::cmdGetData() { return _communicator->sendAndReceiveSlave(_makePacket(FC_DATA)); } DataFrame *NbusSlave::cmdGetFormat() { return _communicator->sendAndReceiveSlave(_makePacket(FC_SENSOR_FORMAT)); } Nbus_SensorCnt_t NbusSlave::cmdGetSensorCnt(bool check_hw) { if (check_hw == true) { DataFrame *df = _communicator->sendAndReceiveSlave(_makePacket(FC_SENSOR_CNT)); _sensor_count.read_only_count = NBUS_RX_DATA0(df->GetFrame() + 1); // without length byte _sensor_count.read_write_count = NBUS_RX_DATA0(df->GetFrame() + 2); } return _sensor_count; } DataFrame* NbusSlave::_makePacket(Nbus_FC_e fc) { _cache_frame.Init(); _cache_frame.AddUint8(_pdu.ma); _cache_frame.AddUint8(NBUS_BROADCAST_ADDRESS); _cache_frame.AddUint8(fc); _cache_frame.Commit(); return &_cache_frame; }