NbusCommunicator.cpp 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. /*
  2. * @file NbusCommunicator.cpp
  3. *
  4. * @date: Mar 7, 2025
  5. * @author: juraj
  6. */
  7. #include "NbusCommunicator.h"
  8. volatile int32_t flag_data_received = -1;
  9. NbusCommunicator::NbusCommunicator(UART_HandleTypeDef* uartUbus) {
  10. _packet_tx = new DataFrame (_data_packet_tx, sizeof(_data_packet_tx), TYPE_PLAIN, CRC_ON);
  11. _packet_rx = new DataFrame (_data_packet_rx, sizeof(_data_packet_rx), TYPE_PLAIN, CRC_ON);
  12. _uart_nbus = uartUbus;
  13. }
  14. NbusCommunicator::~NbusCommunicator() {
  15. // TODO Auto-generated destructor stub
  16. }
  17. DataFrame* NbusCommunicator::send(Nbus_pdu *pdu, uint8_t *data, uint8_t data_len){
  18. _packet_tx->Init();
  19. _packet_tx->AddInt8(pdu->ma); // Module address
  20. _packet_tx->AddInt8(pdu->sa); // Slave address
  21. _packet_tx->AddInt8(pdu->fc); // ECHO
  22. for(int i = 0 ; i< data_len ; i++){
  23. _packet_tx->AddInt8(data[i]);
  24. }
  25. int length = _packet_tx->Commit();
  26. HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET);
  27. HAL_UART_Transmit(_uart_nbus, _packet_tx->GetFrame(), length, 100);
  28. HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET);
  29. flag_data_received = -1;
  30. HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET);
  31. HAL_UARTEx_ReceiveToIdle_DMA(_uart_nbus, _data_packet_comm, 32);
  32. while(flag_data_received < 0);
  33. HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET);
  34. _packet_rx->Init();
  35. _packet_rx->AddArray(_data_packet_comm, flag_data_received);
  36. length = _packet_rx->Commit();
  37. flag_data_received = 0;
  38. return _packet_rx;
  39. }
  40. // Application callbacks
  41. void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size){
  42. flag_data_received = Size;
  43. }