|
@ -24,6 +24,15 @@ void ZCanReceiverHost::registerListener(onpacket_t onpacket) { m_onpacket = onpa |
|
|
shared_ptr<ZCanReceiverCMD> ZCanReceiverHost::sendcmdblock(shared_ptr<ZCanReceiverCMD> cmd, int overtime_ms) { //
|
|
|
shared_ptr<ZCanReceiverCMD> ZCanReceiverHost::sendcmdblock(shared_ptr<ZCanReceiverCMD> cmd, int overtime_ms) { //
|
|
|
lock_guard<mutex> lock(m_txblocklock); |
|
|
lock_guard<mutex> lock(m_txblocklock); |
|
|
|
|
|
|
|
|
|
|
|
m_index++; |
|
|
|
|
|
if (m_index == 0) { |
|
|
|
|
|
m_index = 1; |
|
|
|
|
|
} |
|
|
|
|
|
if (m_index == UINT16_MAX) { |
|
|
|
|
|
m_index = 1; |
|
|
|
|
|
} |
|
|
|
|
|
cmd->packetindex = m_index; |
|
|
|
|
|
|
|
|
{ |
|
|
{ |
|
|
lock_guard<mutex> lock(m_txContextLock); |
|
|
lock_guard<mutex> lock(m_txContextLock); |
|
|
m_txContext.txcmdcache = cmd; |
|
|
m_txContext.txcmdcache = cmd; |
|
@ -52,15 +61,7 @@ shared_ptr<ZCanReceiverCMD> ZCanReceiverHost::sendcmdblock(shared_ptr<ZCanReceiv |
|
|
|
|
|
|
|
|
void ZCanReceiverHost::sendcmd(uint16_t packetindex, uint16_t cmdid, uint8_t subcmdid, uint8_t *data, size_t len) { |
|
|
void ZCanReceiverHost::sendcmd(uint16_t packetindex, uint16_t cmdid, uint8_t subcmdid, uint8_t *data, size_t len) { |
|
|
Cmdheader_t *header = (Cmdheader_t *)m_sendbuf; |
|
|
Cmdheader_t *header = (Cmdheader_t *)m_sendbuf; |
|
|
|
|
|
|
|
|
m_index++; |
|
|
|
|
|
if (m_index == 0) { |
|
|
|
|
|
m_index = 1; |
|
|
|
|
|
} |
|
|
|
|
|
if (m_index == UINT16_MAX) { |
|
|
|
|
|
m_index = 1; |
|
|
|
|
|
} |
|
|
|
|
|
header->packetindex = m_index; |
|
|
|
|
|
|
|
|
header->packetindex = packetindex; |
|
|
header->cmdid = cmdid; |
|
|
header->cmdid = cmdid; |
|
|
header->subcmdid = subcmdid; |
|
|
header->subcmdid = subcmdid; |
|
|
header->packetType = 0x00; |
|
|
header->packetType = 0x00; |
|
@ -88,7 +89,7 @@ void ZCanReceiverHost::sendPacket(uint8_t *packet, size_t len) { |
|
|
suc = sendPacketSub(npacket, i, packet + i * 8, 8, OVER_TIME_MS); |
|
|
suc = sendPacketSub(npacket, i, packet + i * 8, 8, OVER_TIME_MS); |
|
|
} |
|
|
} |
|
|
if (!suc) { |
|
|
if (!suc) { |
|
|
printf("sendPacket fail, packet(%d:%d)\n", npacket, i); |
|
|
|
|
|
|
|
|
logger->warn("sendPacket fail, packet(%d:%d)\n", npacket, i); |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
@ -123,9 +124,12 @@ void ZCanReceiverHost::processOnePacket(CanPacketRxBuffer *rxbuf, uint8_t *packe |
|
|
/**
|
|
|
/**
|
|
|
* @brief 匹配下发的命令 |
|
|
* @brief 匹配下发的命令 |
|
|
*/ |
|
|
*/ |
|
|
|
|
|
logger->debug("processOnePacket(index {}, packetType {} ,cmd {},subcmd {}),rx(index {})", header->packetindex, header->packetType, header->cmdid, |
|
|
|
|
|
header->subcmdid, rx->packetindex); |
|
|
if (header->packetType == kpt_ack || header->packetType == kpt_error_ack) { |
|
|
if (header->packetType == kpt_ack || header->packetType == kpt_error_ack) { |
|
|
if (header->packetindex == m_txContext.txcmdcache->packetindex) { |
|
|
if (header->packetindex == m_txContext.txcmdcache->packetindex) { |
|
|
lock_guard<mutex> lock(m_txContextLock); |
|
|
lock_guard<mutex> lock(m_txContextLock); |
|
|
|
|
|
logger->debug("rx ack"); |
|
|
m_txContext.rx = rx; |
|
|
m_txContext.rx = rx; |
|
|
m_txContext.isReady = true; |
|
|
m_txContext.isReady = true; |
|
|
} |
|
|
} |
|
|