|
|
@@ -11,7 +11,28 @@ volatile int32_t flag_data_received = -1;
|
|
|
|
|
|
NbusCommunicator::NbusCommunicator(UART_HandleTypeDef* uartUbus) {
|
|
|
_packet_tx = new DataFrame (_data_packet_tx, sizeof(_data_packet_tx), TYPE_PLAIN, CRC_ON);
|
|
|
- _packet_rx = new DataFrame (_data_packet_rx, sizeof(_data_packet_rx), TYPE_PLAIN, CRC_ON);
|
|
|
+ if(_packet_tx == NULL)
|
|
|
+ {
|
|
|
+ while(1){
|
|
|
+ __NOP();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ _packet_rx = new DataFrame (_data_packet_rx, sizeof(_data_packet_rx), TYPE_PLAIN, CRC_ON);\
|
|
|
+ if(_packet_rx == NULL)
|
|
|
+ {
|
|
|
+ while(1){
|
|
|
+ __NOP();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(uartUbus == NULL)
|
|
|
+ {
|
|
|
+ while(1){
|
|
|
+ __NOP();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
_uart_nbus = uartUbus;
|
|
|
|
|
|
}
|
|
|
@@ -21,6 +42,29 @@ NbusCommunicator::~NbusCommunicator() {
|
|
|
}
|
|
|
|
|
|
|
|
|
+void NbusCommunicator::_receive(){
|
|
|
+ flag_data_received = -1;
|
|
|
+ HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET);
|
|
|
+ HAL_UARTEx_ReceiveToIdle_DMA(_uart_nbus, _data_packet_comm, NBUS_MAX_FRAME_SIZE);
|
|
|
+ uint32_t stop_receive = HAL_GetTick() + 2;
|
|
|
+
|
|
|
+ while(flag_data_received < 0 && HAL_GetTick() < stop_receive);
|
|
|
+ HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET);
|
|
|
+ _packet_rx->Init();
|
|
|
+ if(flag_data_received > 0){
|
|
|
+ _packet_rx->AddArray(_data_packet_comm, flag_data_received);
|
|
|
+ }
|
|
|
+ _packet_rx->Commit();
|
|
|
+
|
|
|
+ flag_data_received = 0;
|
|
|
+}
|
|
|
+
|
|
|
+void NbusCommunicator::transmit(uint8_t *frame, uint8_t length){
|
|
|
+ HAL_UART_Transmit(_uart_nbus, frame, length, 100);
|
|
|
+
|
|
|
+ HAL_UARTEx_ReceiveToIdle_DMA(_uart_nbus, _data_packet_rx, 64);
|
|
|
+}
|
|
|
+
|
|
|
DataFrame* NbusCommunicator::send(Nbus_pdu *pdu, uint8_t *data, uint8_t data_len){
|
|
|
_packet_tx->Init();
|
|
|
_packet_tx->AddInt8(pdu->ma); // Module address
|
|
|
@@ -35,17 +79,7 @@ DataFrame* NbusCommunicator::send(Nbus_pdu *pdu, uint8_t *data, uint8_t data_len
|
|
|
HAL_UART_Transmit(_uart_nbus, _packet_tx->GetFrame(), length, 100);
|
|
|
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET);
|
|
|
|
|
|
- flag_data_received = -1;
|
|
|
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET);
|
|
|
- HAL_UARTEx_ReceiveToIdle_DMA(_uart_nbus, _data_packet_comm, 32);
|
|
|
- while(flag_data_received < 0);
|
|
|
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET);
|
|
|
- _packet_rx->Init();
|
|
|
- _packet_rx->AddArray(_data_packet_comm, flag_data_received);
|
|
|
- length = _packet_rx->Commit();
|
|
|
-
|
|
|
- flag_data_received = 0;
|
|
|
-
|
|
|
+ this->_receive();
|
|
|
return _packet_rx;
|
|
|
|
|
|
}
|