/** * @file NbusCommunicator.h * @brief Declaration of hardware communication interface. * @date Nov 28, 2025 * @author Juraj Dudak, Matus Necas */ #ifndef SRC_NBUSCOMMUNICATOR_H_ #define SRC_NBUSCOMMUNICATOR_H_ #include "inttypes.h" #include "dataframe.h" #include "nbus_config.h" #include "nbus_defines.h" #include "stm32l4xx_hal.h" /** @brief Class for NBus Communicator handle. */ class NbusCommunicator { public: /** Constructor. * @param uart_nbus: pointer to UART nBus instance * @param uart_master: pointer to UART master instance */ NbusCommunicator(UART_HandleTypeDef *uart_nbus, UART_HandleTypeDef *uart_master); /** Send data to master. * @param master_frame: data frame to send */ void sendToMaster(DataFrame *master_frame); /** Send data to slave. * @param slave_frame: data frame to send */ void sendToSlave(DataFrame *slave_frame); /** Send data to slave and receive response. * @param slave_frame: data frame to send * @return: response data frame */ DataFrame* sendAndReceiveSlave(DataFrame *slave_frame); private: /** Receive data from slave. */ void _receiveFromSlave(); uint8_t _data_packet_tx[NBUS_COMM_MAX_FRAME_SIZE]{0}; ///< raw TX data packet uint8_t _data_packet_comm[NBUS_COMM_MAX_FRAME_SIZE]{0}; ///< raw common data packet uint8_t _data_packet_rx[NBUS_COMM_MAX_FRAME_SIZE]{0}; ///< raw RX data packet DataFrame _packet_tx{_data_packet_tx, NBUS_COMM_MAX_FRAME_SIZE, TYPE_PLAIN, CRC_ON}; ///< TX data frame DataFrame _packet_rx{_data_packet_rx, NBUS_COMM_MAX_FRAME_SIZE, TYPE_PLAIN, CRC_OFF}; ///< RX data frame UART_HandleTypeDef *_uart_nbus{nullptr}; ///< pointer to UART nBus UART_HandleTypeDef *_uart_master{nullptr}; ///< pointer to UART master }; #endif /* SRC_NBUSCOMMUNICATOR_H_ */