|
@@ -391,28 +391,28 @@ std::string PackingCommand(CommandParam &cmdPara, std::string data, const int &d
|
|
|
bool TheFirstPart(CommandParam& cmdPara, std::string data)
|
|
|
{
|
|
|
if (data.size() == NoneOptLen) {
|
|
|
- if (data[0] == cmdPara._rtnCode) {
|
|
|
+ if ((byte)data[0] == cmdPara._rtnCode) {
|
|
|
// 长度;
|
|
|
- int nPackageLen = data[1];
|
|
|
+ int nPackageLen = (byte)data[1];
|
|
|
if (nPackageLen != NoneOptLen) {
|
|
|
- cmdPara._rtnError = _dprintf("None长度错误:%ld", data[1]);
|
|
|
+ cmdPara._rtnError = _dprintf("None长度错误:%ld", (byte)data[1]);
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
// 执行状态;
|
|
|
- cmdPara._rtnStatus = data[2];
|
|
|
+ cmdPara._rtnStatus = (byte)data[2];
|
|
|
_dprintf(_T("rtnStatus=%02X"), cmdPara._rtnStatus);
|
|
|
|
|
|
// 校验crc;
|
|
|
- unsigned short usCRCValue = CRC16Calculate((unsigned char*)data.data(), nPackageLen - 2);
|
|
|
- if (((usCRCValue >> 8) & 0xFF) != (unsigned char)data[nPackageLen - 2] || (usCRCValue & 0xFF) != (unsigned char)data[nPackageLen - 1])
|
|
|
+ unsigned short usCRCValue = CRC16Calculate((byte*)data.data(), nPackageLen - 2);
|
|
|
+ if (((usCRCValue >> 8) & 0xFF) != (byte)data[nPackageLen - 2] || (usCRCValue & 0xFF) != (byte)data[nPackageLen - 1])
|
|
|
{
|
|
|
- cmdPara._rtnError = _dprintf("CRC校验错误:计算[%02% %02X] != 接收[%02X %02X]", (usCRCValue >> 8) & 0xFF, usCRCValue & 0xFF, data[nPackageLen - 2], data[nPackageLen - 1]);
|
|
|
+ cmdPara._rtnError = _dprintf("CRC校验错误:计算[%02% %02X] != 接收[%02X %02X]", (usCRCValue >> 8) & 0xFF, usCRCValue & 0xFF, (byte)data[nPackageLen - 2], (byte)data[nPackageLen - 1]);
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
|
- cmdPara._rtnError = _dprintf("返回码错误:%02X", data[0]);
|
|
|
+ cmdPara._rtnError = _dprintf("返回码错误:%02X", (byte)data[0]);
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
@@ -428,11 +428,11 @@ bool TheSecondPart(CommandParam& cmdPara, std::string data)
|
|
|
{
|
|
|
int nDataPos = 0;
|
|
|
int nPackageLen = 0;
|
|
|
- if (data[0] == cmdPara._rtnCode) {
|
|
|
+ if ((byte)data[0] == cmdPara._rtnCode) {
|
|
|
// 获取长度;
|
|
|
- if ( data[1] == 0xFE ) {
|
|
|
+ if ( (byte)data[1] == 0xFE ) {
|
|
|
nDataPos = 4;
|
|
|
- nPackageLen = data[2] << 8 | data[3];
|
|
|
+ nPackageLen = (byte)data[2] << 8 | (byte)data[3];
|
|
|
if ( data.size() < 255 && data[2] != 0 ) {
|
|
|
cmdPara._rtnError = _dprintf(_T("长度异常"));
|
|
|
return false;
|
|
@@ -441,7 +441,7 @@ bool TheSecondPart(CommandParam& cmdPara, std::string data)
|
|
|
else
|
|
|
{
|
|
|
nDataPos = 2;
|
|
|
- nPackageLen = data[1];
|
|
|
+ nPackageLen = (byte)data[1];
|
|
|
#if 0 // 如果数据包含有非协议包内的数据,会判断异常;
|
|
|
if ( data.size() > 255 ){
|
|
|
//nPackageLen = data[1] << 8 | data[2];
|
|
@@ -457,15 +457,20 @@ bool TheSecondPart(CommandParam& cmdPara, std::string data)
|
|
|
return false;
|
|
|
#endif
|
|
|
|
|
|
+ if (_tcsicmp(cmdPara.code.c_str(), ByteToChars((byte)data[nDataPos]-1).c_str()) != 0) {
|
|
|
+ cmdPara._rtnError = _dprintf(_T("返回的指令错误, %s, %02X"), cmdPara.head.c_str(),(byte)data[nDataPos]);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
// 执行状态;
|
|
|
- cmdPara._rtnData = data.substr(nDataPos, nPackageLen - nDataPos - 2); //2=crc;
|
|
|
- _dprintf(_T("rtnData=%s"), cmdPara._rtnData.c_str());
|
|
|
+ cmdPara._rtnData = data.substr(nDataPos+1, nPackageLen - nDataPos - 3); //3 = crc + 返回指令码;
|
|
|
+ _dprintf(_T("rtnData=%s"), BytesToHexString((byte*)cmdPara._rtnData.c_str(), cmdPara._rtnData.size(), ' ').c_str());
|
|
|
|
|
|
// 校验crc;
|
|
|
- unsigned short usCRCValue = CRC16Calculate((unsigned char*)data.data(), nPackageLen - 2);
|
|
|
- if (((usCRCValue >> 8) & 0xFF) != (unsigned char)data[nPackageLen - 2] || (usCRCValue & 0xFF) != (unsigned char)data[nPackageLen - 1])
|
|
|
+ unsigned short usCRCValue = CRC16Calculate((byte*)data.data(), nPackageLen - 2);
|
|
|
+ if (((usCRCValue >> 8) & 0xFF) != (byte)data[nPackageLen - 2] || (usCRCValue & 0xFF) != (byte)data[nPackageLen - 1])
|
|
|
{
|
|
|
- cmdPara._rtnError = _dprintf("CRC校验错误:计算[%02% %02X] != 接收[%02X %02X]", (usCRCValue >> 8) & 0xFF, usCRCValue & 0xFF, data[nPackageLen - 2], data[nPackageLen - 1]);
|
|
|
+ cmdPara._rtnError = _dprintf("CRC校验错误:计算[%02% %02X] != 接收[%02X %02X]", (usCRCValue >> 8) & 0xFF, usCRCValue & 0xFF, (byte)data[nPackageLen - 2], (byte)data[nPackageLen - 1]);
|
|
|
return false;
|
|
|
}
|
|
|
|
|
@@ -475,7 +480,7 @@ bool TheSecondPart(CommandParam& cmdPara, std::string data)
|
|
|
#endif
|
|
|
}
|
|
|
else {
|
|
|
- cmdPara._rtnError = _dprintf("返回码错误:%02X", data[0]);
|
|
|
+ cmdPara._rtnError = _dprintf("返回码错误:%02X", (byte)data[0]);
|
|
|
return false;
|
|
|
}
|
|
|
|