NbusCommunicator.h 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. /**
  2. * @file NbusCommunicator.h
  3. * @brief Declaration of hardware communication interface.
  4. * @date Nov 27, 2025
  5. * @author Juraj Dudak, Matus Necas
  6. */
  7. #ifndef SRC_NBUSCOMMUNICATOR_H_
  8. #define SRC_NBUSCOMMUNICATOR_H_
  9. #include "inttypes.h"
  10. #include "dataframe.h"
  11. #include "nbus_structs.h"
  12. #include "stm32l4xx_hal.h"
  13. /* DEFINES BEGIN */
  14. /** Macro for frame size of nBus Communicator. */
  15. #define NBUS_COMM_MAX_FRAME_SIZE 64
  16. /** Macro for receive timeout in ms. */
  17. #define NBUS_COMM_UART_RX_TIMEOUT 5
  18. /** Macro for transfer timeout in ms. */
  19. #define NBUS_COMM_UART_TX_TIMEOUT 10
  20. /* DEFINES END */
  21. /** @brief Class for NBus Communicator handle.
  22. */
  23. class NbusCommunicator
  24. {
  25. public:
  26. /** Constructor.
  27. * @param uart_nbus: pointer to UART nBus instance
  28. * @param uart_master: pointer to UART master instance
  29. */
  30. NbusCommunicator(UART_HandleTypeDef *uart_nbus, UART_HandleTypeDef *uart_master);
  31. /** Send data to master.
  32. * @param master_frame: data frame to send
  33. */
  34. void sendToMaster(DataFrame *master_frame);
  35. /** Send data to slave.
  36. * @param slave_frame: data frame to send
  37. */
  38. void sendToSlave(DataFrame *slave_frame);
  39. /** Send data to slave and receive response.
  40. * @param slave_frame: data frame to send
  41. * @return: response data frame
  42. */
  43. DataFrame* sendAndReceiveSlave(DataFrame *slave_frame);
  44. private:
  45. /** Receive data from slave.
  46. */
  47. void _receiveFromSlave();
  48. uint8_t _data_packet_tx[NBUS_COMM_MAX_FRAME_SIZE]{0}; ///< raw TX data packet
  49. uint8_t _data_packet_comm[NBUS_COMM_MAX_FRAME_SIZE]{0}; ///< raw common data packet
  50. uint8_t _data_packet_rx[NBUS_COMM_MAX_FRAME_SIZE]{0}; ///< raw RX data packet
  51. DataFrame _packet_tx{_data_packet_tx, NBUS_COMM_MAX_FRAME_SIZE, TYPE_PLAIN, CRC_ON}; ///< TX data frame
  52. DataFrame _packet_rx{_data_packet_rx, NBUS_COMM_MAX_FRAME_SIZE, TYPE_PLAIN, CRC_OFF}; ///< RX data frame
  53. UART_HandleTypeDef *_uart_nbus{nullptr}; ///< pointer to UART nBus
  54. UART_HandleTypeDef *_uart_master{nullptr}; ///< pointer to UART master
  55. };
  56. #endif /* SRC_NBUSCOMMUNICATOR_H_ */