/** * @file AppBridge.h * @brief nBus Slave module declaration. * @date Nov 26, 2025 * @author Juraj Dudak, Matus Necas */ #ifndef SRC_APPSLAVE_H_ #define SRC_APPSLAVE_H_ #include "inttypes.h" #include "dataframe.h" #include "NbusCommunicator.h" /** @brief Class for nBus slave communication */ class NbusSlave { public: /** Set nBus communicator. * @param nbus_comm: communicator to set */ void setCommunicator(NbusCommunicator* nbus_comm); /** Set nBus address. * @param addr: address to set */ void setModuleAddress(uint8_t addr); /** Get slave active status. * @return: active status (1 = active, 0 = inactive) */ bool isActive(); /** Get nBus module address. * @return: actual address (0 if not set) */ uint8_t getModuleAddress(); /** Send any nBus request and get response. * @param slave_frame: data to send * @return: response data frame */ DataFrame* cmdProcessAnyRequest(DataFrame *slave_frame); /** Send nBus request and get sensor data. * @return: response data frame */ DataFrame* cmdGetData(); /** Send nBus request and get sensor format. * @return: response data frame */ DataFrame* cmdGetFormat(); /** Send nBus request and get sensor count. * @param check_hw: 1 = load from bus, 0 = use local cache * @return: number of sensors / actuators */ Nbus_SensorCnt_t cmdGetSensorCnt(bool check_hw); private: /** Make nBus packet for selected function code. * @param fc: function code * @return: _slave_cache */ DataFrame* _makePacket(Nbus_FC_e fc); NbusCommunicator* _communicator{nullptr}; ///< hardware bus communicator Nbus_SensorCnt_t _sensor_count{0, 0}; ///< number of sensors / actuators Nbus_PDU_t _pdu{0, 0, FC_ECHO}; ///< slave PDU uint8_t _slave_cache[NBUS_SLAVE_CACHE_SIZE]{0}; ///< slave temporary data DataFrame _cache_frame{_slave_cache, NBUS_SLAVE_CACHE_SIZE, TYPE_PLAIN, CRC_ON}; ///< data frame of _slave_cache }; #endif /* SRC_APPSLAVE_H_ */