|
|
@ -9,7 +9,6 @@ using namespace zscanprotocol; |
|
|
|
|
|
|
|
#define TAG "ZScanProtocolCom"
|
|
|
|
|
|
|
|
|
|
|
|
void ZSCanProtocolCom::initialize(const char *canname, int baudrate, bool enableLoopBack) { //
|
|
|
|
m_channel = make_shared<SocketCan>(); |
|
|
|
m_channel->initialize(canname, baudrate, enableLoopBack); |
|
|
@ -73,7 +72,7 @@ void ZSCanProtocolCom::sendframe(int32_t from, int32_t to, uint8_t *frame, size_ |
|
|
|
|
|
|
|
int npacket = len / 8 + (len % 8 == 0 ? 0 : 1); |
|
|
|
if (npacket > 255) { |
|
|
|
THROW_APP_EXCEPTION(err::kerr_invalid_param, "param error: packet too long"); |
|
|
|
THROW_APP_EXCEPTION(err::kerr_invalid_param, "param error: packet too long"); |
|
|
|
} |
|
|
|
int finalpacketlen = len % 8 == 0 ? 8 : len % 8; |
|
|
|
|
|
|
@ -140,7 +139,7 @@ CanPacketRxBuffer *ZSCanProtocolCom::findRxBuff(int deviceId) { |
|
|
|
return nullptr; |
|
|
|
} |
|
|
|
|
|
|
|
shared_ptr<Receipt> ZSCanProtocolCom::callcmd(int32_t to, int32_t cmdid, uint8_t *param, int32_t paramLen, int32_t overtime) { |
|
|
|
shared_ptr<Receipt> ZSCanProtocolCom::base_callcmd(int32_t to, int32_t cmdid, uint8_t *param, int32_t paramLen, int32_t overtime) { |
|
|
|
m_txindex++; |
|
|
|
if (m_txindex < 200) m_txindex = 200; |
|
|
|
|
|
|
@ -193,6 +192,24 @@ shared_ptr<Receipt> ZSCanProtocolCom::callcmd(int32_t to, int32_t cmdid, uint8_t |
|
|
|
receipt->receiptLen = m_receipt_len; |
|
|
|
return receipt; |
|
|
|
} |
|
|
|
|
|
|
|
shared_ptr<Receipt> ZSCanProtocolCom::callcmd(int32_t to, int32_t cmdid, uint8_t *param, int32_t paramLen, int32_t overtime) { |
|
|
|
shared_ptr<Receipt> receipt; |
|
|
|
|
|
|
|
for (size_t i = 0; i <= 3; i++) { |
|
|
|
try { |
|
|
|
if (i != 0) logger->warn("callcmd overtime, retry %d", i); |
|
|
|
receipt = base_callcmd(to, cmdid, param, paramLen, overtime); |
|
|
|
} catch (const appexception &e) { |
|
|
|
if (e.ecode() == err::kerr_overtime) { |
|
|
|
continue; |
|
|
|
} |
|
|
|
throw; |
|
|
|
} |
|
|
|
} |
|
|
|
if(receipt == nullptr) THROW_APP_EXCEPTION(err::kerr_overtime, "overtime"); |
|
|
|
return receipt; |
|
|
|
} |
|
|
|
shared_ptr<Receipt> ZSCanProtocolCom::callcmd0(int32_t to, int32_t cmdid, int32_t overtime) { return callcmd(to, cmdid, nullptr, 0, overtime); } |
|
|
|
shared_ptr<Receipt> ZSCanProtocolCom::callcmd1(int32_t device_id, int32_t cmdid, int32_t param0, int32_t overtime) { |
|
|
|
int32_t param[4]; |
|
|
|