|
@@ -166,36 +166,40 @@ EXIT:
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
+int TCLCommand::parse_cmd_from_string(std::string str, std::vector<CommandParam>& vtCommandParams)
|
|
|
+{
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
bool TCLCommand::TheFirstPart(CommandParam& cmdPara, std::string data)
|
|
|
{
|
|
|
if (data.size() == NoneOptLen) {
|
|
|
if ((byte)data[0] == cmdPara._rtnCode) {
|
|
|
// 长度;
|
|
|
- int nPackageLen = (byte)data[1];
|
|
|
- if (nPackageLen != NoneOptLen) {
|
|
|
- cmdPara._rtnError = utils::_dprintf("长度错误:%ld", (byte)data[1]);
|
|
|
+ int nPacketLen = (byte)data[1];
|
|
|
+ if (nPacketLen != NoneOptLen) {
|
|
|
+ cmdPara._rtnError = utils::_dprintf("[%s] 返回数据长度错误:%ld", __FUNCTION__, (byte)data[1]);
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
// 执行状态;
|
|
|
cmdPara._rtnStatus = (byte)data[2];
|
|
|
- utils::_dprintf(_T("rtnStatus=%02X"), cmdPara._rtnStatus);
|
|
|
+ //utils::_dprintf(_T("[%s] rtnStatus=%02X"), __FUNCTION__, cmdPara._rtnStatus);
|
|
|
|
|
|
// 校验crc;
|
|
|
- unsigned short usCRCValue = utils::CRC16Calculate((byte*)data.data(), nPackageLen - 2);
|
|
|
- if (((usCRCValue >> 8) & 0xFF) != (byte)data[nPackageLen - 2] || (usCRCValue & 0xFF) != (byte)data[nPackageLen - 1])
|
|
|
- {
|
|
|
- cmdPara._rtnError = utils::_dprintf("CRC校验错误:计算[%02% %02X] != 接收[%02X %02X]", (usCRCValue >> 8) & 0xFF, usCRCValue & 0xFF, (byte)data[nPackageLen - 2], (byte)data[nPackageLen - 1]);
|
|
|
+ unsigned short usCRCValue = utils::CRC16Calculate((byte*)data.data(), nPacketLen - 2);
|
|
|
+ if (((usCRCValue >> 8) & 0xFF) != (byte)data[nPacketLen - 2] || (usCRCValue & 0xFF) != (byte)data[nPacketLen - 1]) {
|
|
|
+ cmdPara._rtnError = utils::_dprintf("[%s] CRC校验错误:计算[%02% %02X] != 接收[%02X %02X]", __FUNCTION__, (usCRCValue >> 8) & 0xFF, usCRCValue & 0xFF, (byte)data[nPacketLen - 2], (byte)data[nPacketLen - 1]);
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
|
- cmdPara._rtnError = utils::_dprintf("返回码错误:%02X", (byte)data[0]);
|
|
|
+ cmdPara._rtnError = utils::_dprintf("[%s] 返回码错误:%02X", __FUNCTION__, (byte)data[0]);
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
|
- cmdPara._rtnError = utils::_dprintf("长度对不上:Option.None");
|
|
|
+ cmdPara._rtnError = utils::_dprintf("[%s] 返回数据长度错误", __FUNCTION__);
|
|
|
return false;
|
|
|
}
|
|
|
|
|
@@ -207,21 +211,21 @@ bool TCLCommand::TheSecondPart(CommandParam& cmdPara, std::string data)
|
|
|
// 数据起始位;
|
|
|
int nDataPos = 0;
|
|
|
// 数据包长度;
|
|
|
- int nPackageLen = 0;
|
|
|
+ int nPacketLen = 0;
|
|
|
if ((byte)data[0] == cmdPara._rtnCode) {
|
|
|
// 获取长度;
|
|
|
if ((byte)data[1] == 0xFE) {
|
|
|
nDataPos = 4;
|
|
|
- nPackageLen = (byte)data[2] << 8 | (byte)data[3];
|
|
|
+ nPacketLen = (byte)data[2] << 8 | (byte)data[3];
|
|
|
if (data.size() < 255 && data[2] != 0) {
|
|
|
- cmdPara._rtnError = utils::_dprintf(_T("长度异常"));
|
|
|
+ cmdPara._rtnError = utils::_dprintf(_T("[%s] 返回数据长度异常"), __FUNCTION__);
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
nDataPos = 2;
|
|
|
- nPackageLen = (byte)data[1];
|
|
|
+ nPacketLen = (byte)data[1];
|
|
|
#if 0 // 如果数据包含有非协议包内的数据,会判断异常;
|
|
|
if (data.size() > 255) {
|
|
|
//nPackageLen = data[1] << 8 | data[2];
|
|
@@ -238,7 +242,7 @@ bool TCLCommand::TheSecondPart(CommandParam& cmdPara, std::string data)
|
|
|
#endif
|
|
|
|
|
|
if (_tcsicmp(cmdPara.code.c_str(), utils::ByteToChars((byte)data[nDataPos] - 1).c_str()) != 0) {
|
|
|
- cmdPara._rtnError = utils::_dprintf(_T("返回的指令错误, %s, %02X"), cmdPara.head.c_str(), (byte)data[nDataPos]);
|
|
|
+ cmdPara._rtnError = utils::_dprintf(_T("[%s] 返回的指令错误, %s, %02X"), __FUNCTION__, cmdPara.head.c_str(), (byte)data[nDataPos]);
|
|
|
return false;
|
|
|
}
|
|
|
|
|
@@ -246,31 +250,29 @@ bool TCLCommand::TheSecondPart(CommandParam& cmdPara, std::string data)
|
|
|
++nDataPos;// 返回码占一字节;
|
|
|
if (cmdPara.bMulticode) {
|
|
|
if (_tcsicmp(cmdPara.param.c_str(), utils::ByteToChars((byte)data[nDataPos]).c_str()) != 0) {
|
|
|
- cmdPara._rtnError = utils::_dprintf(_T("返回的指令参数错误, %s, %02X"), cmdPara.param.c_str(), (byte)data[nDataPos]);
|
|
|
+ cmdPara._rtnError = utils::_dprintf(_T("[%s] 返回的指令参数错误, %s, %02X"), __FUNCTION__, cmdPara.param.c_str(), (byte)data[nDataPos]);
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
++nDataPos;// 指令参数码占一字节;
|
|
|
}
|
|
|
|
|
|
- cmdPara._rtnData = data.substr(nDataPos, nPackageLen - nDataPos - 2); //2 = crc;
|
|
|
+ cmdPara._rtnData = data.substr(nDataPos, nPacketLen - nDataPos - 2); //2 = crc;
|
|
|
utils::_dprintf(_T("rtnData=%s"), utils::BytesToHexString((byte*)cmdPara._rtnData.c_str(), cmdPara._rtnData.size(), ' ').c_str());
|
|
|
|
|
|
// 校验crc;
|
|
|
- unsigned short usCRCValue = utils::CRC16Calculate((byte*)data.data(), nPackageLen - 2);
|
|
|
- if (((usCRCValue >> 8) & 0xFF) != (byte)data[nPackageLen - 2] || (usCRCValue & 0xFF) != (byte)data[nPackageLen - 1])
|
|
|
+ unsigned short usCRCValue = utils::CRC16Calculate((byte*)data.data(), nPacketLen - 2);
|
|
|
+ if (((usCRCValue >> 8) & 0xFF) != (byte)data[nPacketLen - 2] || (usCRCValue & 0xFF) != (byte)data[nPacketLen - 1])
|
|
|
{
|
|
|
- cmdPara._rtnError = utils::_dprintf("CRC校验错误:计算[%02X %02X] != 接收[%02X %02X]", (usCRCValue >> 8) & 0xFF, usCRCValue & 0xFF, (byte)data[nPackageLen - 2], (byte)data[nPackageLen - 1]);
|
|
|
+ cmdPara._rtnError = utils::_dprintf("[%s] CRC校验错误:计算[%02X %02X] != 接收[%02X %02X]", __FUNCTION__, (usCRCValue >> 8) & 0xFF, usCRCValue & 0xFF, (byte)data[nPacketLen - 2], (byte)data[nPacketLen - 1]);
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
-#if 1
|
|
|
- if (data.size() > nPackageLen)
|
|
|
- utils::_dprintf("带有脏数据:%s", data.substr(nPackageLen));
|
|
|
-#endif
|
|
|
+ if (data.size() > nPacketLen)
|
|
|
+ utils::_dprintf("[%s] 带有脏数据:%s", __FUNCTION__, data.substr(nPacketLen));
|
|
|
}
|
|
|
else {
|
|
|
- cmdPara._rtnError = utils::_dprintf("返回码错误:%02X", (byte)data[0]);
|
|
|
+ cmdPara._rtnError = utils::_dprintf("[%s] 返回码错误:%02X", __FUNCTION__, (byte)data[0]);
|
|
|
return false;
|
|
|
}
|
|
|
|
|
@@ -329,7 +331,8 @@ std::string TCLCommand::PackingCommand(CommandParam& cmdPara, std::string data,
|
|
|
szcrc[1] = usCRCValue & 0xFF;
|
|
|
command.append((char*)szcrc, 2);
|
|
|
|
|
|
- utils::_dprintf(_T("指令:%s"), utils::BytesToHexString((byte*)command.c_str(), command.size(), ' ').c_str());
|
|
|
+ cmdPara._cmdContext = utils::BytesToHexString((byte*)command.c_str(), command.size(), ' ');
|
|
|
+ utils::_dprintf(_T("指令:%s"), cmdPara._cmdContext.c_str());
|
|
|
|
|
|
return command;
|
|
|
}
|
|
@@ -341,7 +344,7 @@ void TCLCommand::ParseResultString(CommandParam& cmdPara, std::string data, cons
|
|
|
return;
|
|
|
|
|
|
if (cmdPara._rtnStatus != 0x0A) {
|
|
|
- utils::_dprintf("执行结果错误:%02X", cmdPara._rtnStatus);
|
|
|
+ utils::_dprintf("[%s] 执行结果错误:%02X", __FUNCTION__, cmdPara._rtnStatus);
|
|
|
return;
|
|
|
}
|
|
|
|