Browse Source

canbus接收器 增加包完整性检测功能

master
zhaohe 1 year ago
parent
commit
8d31fb795a
  1. 25
      sdk/components/zcancmder/zcanreceiver.cpp

25
sdk/components/zcancmder/zcanreceiver.cpp

@ -119,7 +119,6 @@ void ZCanReceiver::registerListener(IZCanReceiverListener *listener) { m_listene
// return buf;
// }
void ZCanReceiver::sendPacket(uint8_t *packet, size_t len) {
/**
* @brief
*/
@ -342,6 +341,7 @@ void ZCanReceiver::STM32_HAL_onCAN_RxFifo0MsgPending(CAN_HandleTypeDef *canHandl
rxbuf->m_canPacketNum++;
}
if (nframe == frameId + 1) {
rxbuf->m_npacket = nframe;
rxbuf->dataIsReady = true;
}
}
@ -357,16 +357,21 @@ void ZCanReceiver::STM32_HAL_onCAN_Error(CAN_HandleTypeDef *canHandle) {
void ZCanReceiver::loop() {
CanPacketRxBuffer *rxbuf = &m_canPacketRxBuffer[0];
if (rxbuf->dataIsReady) {
int dataoff = 0;
for (size_t i = 0; i < rxbuf->m_canPacketNum; i++) {
memcpy(rxbuf->rxdata + dataoff, rxbuf->m_canPacket[i].aData, rxbuf->m_canPacket[i].dlc);
dataoff += rxbuf->m_canPacket[i].dlc;
}
rxbuf->rxdataSize = dataoff;
// ZLOGI(TAG,"rx packet");
for (auto &var : m_listenerList) {
if (var) var->onRceivePacket(rxbuf->get_cmdheader(), rxbuf->get_params(), rxbuf->get_params_len());
if (rxbuf->m_canPacketNum != rxbuf->m_npacket) {
ZLOGE(TAG, "lost packet");
} else {
int dataoff = 0;
for (size_t i = 0; i < rxbuf->m_canPacketNum; i++) {
memcpy(rxbuf->rxdata + dataoff, rxbuf->m_canPacket[i].aData, rxbuf->m_canPacket[i].dlc);
dataoff += rxbuf->m_canPacket[i].dlc;
}
rxbuf->rxdataSize = dataoff;
// ZLOGI(TAG,"rx packet");
for (auto &var : m_listenerList) {
if (var) var->onRceivePacket(rxbuf->get_cmdheader(), rxbuf->get_params(), rxbuf->get_params_len());
}
}
rxbuf->dataIsReady = false;
}
}

Loading…
Cancel
Save