|
|
@ -166,6 +166,9 @@ int32_t ZCanCommnaderMaster::sendCmdAndReceiveBuf(int32_t cmdid, int32_t subModu |
|
|
|
return errocode; |
|
|
|
} |
|
|
|
|
|
|
|
void ZCanCommnaderMaster::sendRawPacket(uint8_t *packet, size_t len) { sendPacket(packet, len); } |
|
|
|
void ZCanCommnaderMaster::regRawPacketListener(rawpacket_t rawpacketcb) { m_rawpacketcb = rawpacketcb; } |
|
|
|
|
|
|
|
int32_t ZCanCommnaderMaster::sendCmd(int32_t cmdid, int32_t subModuleid, int32_t *param, size_t npara, int32_t *ack, size_t nack, int overtime_ms) { |
|
|
|
zcr_cmd_header_t *cmdheader = (zcr_cmd_header_t *)txbuff; |
|
|
|
cmdheader->packetType = kptv2_cmd; |
|
|
@ -263,6 +266,10 @@ bool ZCanCommnaderMaster::isListenerReg(uint16_t index) { |
|
|
|
void ZCanCommnaderMaster::callListener(CanPacketRxBuffer *report) { |
|
|
|
uint16_t index = report->get_cmdheader()->packetindex; |
|
|
|
|
|
|
|
if (m_rawpacketcb) { |
|
|
|
m_rawpacketcb(report->get_data(), report->get_datalen()); |
|
|
|
} |
|
|
|
|
|
|
|
if (report->get_cmdheader()->packetType == kptv2_ack || report->get_cmdheader()->packetType == kptv2_error_ack) { |
|
|
|
zlock_guard l(m_on_packet_map_lock); |
|
|
|
auto it = m_on_packet_map.find(index); |
|
|
@ -454,7 +461,7 @@ void ZCanCommnaderMaster::STM32_HAL_onCAN_RxFifo0MsgPending(CAN_HandleTypeDef *c |
|
|
|
rxbuf->lastrxtime = zos_get_tick(); |
|
|
|
|
|
|
|
if (rxbuf->m_canPacketNum < ZARRAY_SIZE(rxbuf->m_canPacket)) { |
|
|
|
rxbuf->m_canPacket[rxbuf->m_canPacketNum].pHeader = pHeader; |
|
|
|
rxbuf->m_canPacket[rxbuf->m_canPacketNum].dlc = pHeader.DLC; |
|
|
|
memcpy(rxbuf->m_canPacket[rxbuf->m_canPacketNum].aData, aData, 8); |
|
|
|
rxbuf->m_canPacketNum++; |
|
|
|
} |
|
|
@ -479,8 +486,8 @@ void ZCanCommnaderMaster::STM32_HAL_onCAN_Error(CAN_HandleTypeDef *canHandle) { |
|
|
|
void ZCanCommnaderMaster::processReadyPacket(CanPacketRxBuffer *rxbuf) { |
|
|
|
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].pHeader.DLC); |
|
|
|
dataoff += rxbuf->m_canPacket[i].pHeader.DLC; |
|
|
|
memcpy(rxbuf->rxdata + dataoff, rxbuf->m_canPacket[i].aData, rxbuf->m_canPacket[i].dlc); |
|
|
|
dataoff += rxbuf->m_canPacket[i].dlc; |
|
|
|
rxbuf->rxdataSize = dataoff; |
|
|
|
} |
|
|
|
if (rxbuf->lostpacket) { |
|
|
|