From 8d31fb795a905be1ad2b35e4b6eeaef47266b59b Mon Sep 17 00:00:00 2001 From: zhaohe Date: Sat, 27 Jul 2024 14:33:54 +0800 Subject: [PATCH] =?UTF-8?q?canbus=E6=8E=A5=E6=94=B6=E5=99=A8=20=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=8C=85=E5=AE=8C=E6=95=B4=E6=80=A7=E6=A3=80=E6=B5=8B?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sdk/components/zcancmder/zcanreceiver.cpp | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/sdk/components/zcancmder/zcanreceiver.cpp b/sdk/components/zcancmder/zcanreceiver.cpp index 82bb7fe..581e398 100644 --- a/sdk/components/zcancmder/zcanreceiver.cpp +++ b/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; } }