|
@@ -446,7 +446,8 @@ bool TCLCommand::TheSecondPart(CommandParam& cmdPara, std::string data)
|
|
|
utils::_dprintf("[%s] 带有脏数据:%s", __FUNCTION__, data.substr(nPacketLen));
|
|
|
#endif
|
|
|
}
|
|
|
- else {
|
|
|
+ else
|
|
|
+ {
|
|
|
#if _MSC_VER >= 1200 && _MSC_VER < 1500
|
|
|
cmdPara._rtnError = utils::_dprintf("返回码错误:%02X", (byte)data[0]);
|
|
|
#elif _MSC_VER >= 1500
|
|
@@ -458,6 +459,113 @@ bool TCLCommand::TheSecondPart(CommandParam& cmdPara, std::string data)
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+bool TCLCommand::TheSecondPartFireTV(CommandParam& cmdPara, std::string data)
|
|
|
+{
|
|
|
+
|
|
|
+ int nDataPos = 0;
|
|
|
+
|
|
|
+ int nPacketLen = 0;
|
|
|
+ if ((byte)data[0] == cmdPara._rtnCode) {
|
|
|
+
|
|
|
+ if ((byte)data[1] == 0xFE) {
|
|
|
+ nDataPos = 4;
|
|
|
+ nPacketLen = (byte)data[2] << 8 | (byte)data[3];
|
|
|
+ if (data.size() < 255 && data[2] != 0) {
|
|
|
+#if _MSC_VER >= 1200 && _MSC_VER < 1500
|
|
|
+ cmdPara._rtnError = utils::_dprintf(_T("返回数据长度异常"));
|
|
|
+#elif _MSC_VER >= 1500
|
|
|
+ cmdPara._rtnError = utils::_dprintf(_T("[%s] 返回数据长度异常"), __FUNCTION__);
|
|
|
+#endif
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ nDataPos = 2;
|
|
|
+ nPacketLen = (byte)data[1];
|
|
|
+#if 0
|
|
|
+ if (data.size() > 255) {
|
|
|
+
|
|
|
+ cmdPara._rtnError = _dprintf(_T("长度异常"));
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+#endif
|
|
|
+ }
|
|
|
+
|
|
|
+#if 1
|
|
|
+
|
|
|
+ if (nPacketLen > data.size())
|
|
|
+ {
|
|
|
+ cmdPara._rtnError = utils::_dprintf(_T("[%s] 返回的数据长度错误, 计算:%d > 实际:%d"), __FUNCTION__, nPacketLen, data.size());
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+#endif
|
|
|
+
|
|
|
+
|
|
|
+ if (_tcsicmp(cmdPara.code.c_str(), utils::ByteToChars((byte)data[nDataPos]).c_str()) != 0) {
|
|
|
+#if _MSC_VER >= 1200 && _MSC_VER < 1500
|
|
|
+ cmdPara._rtnError = utils::_dprintf(_T("返回的指令码错误, 正确:%02X, 当前:%02X"), utils::TwoHexCharToInteger(cmdPara.code[0],cmdPara.code[1]), (byte)data[nDataPos]);
|
|
|
+#elif _MSC_VER >= 1500
|
|
|
+ cmdPara._rtnError = utils::_dprintf(_T("[%s] 返回的指令码错误, 正确:%02X, 当前:%02X"), __FUNCTION__, utils::TwoHexCharToInteger(cmdPara.code[0],cmdPara.code[1]), (byte)data[nDataPos]);
|
|
|
+#endif
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ ++nDataPos;
|
|
|
+#if 0
|
|
|
+ if (cmdPara.returnParam) {
|
|
|
+
|
|
|
+ std::string rtnParam = data.substr(nDataPos, cmdPara.param.size()/2);
|
|
|
+ rtnParam = utils::BytesToHexString((byte*)rtnParam.c_str(), rtnParam.size());
|
|
|
+ if (_tcsicmp(cmdPara.param.c_str(), rtnParam.c_str()) != 0) {
|
|
|
+#if _MSC_VER >= 1200 && _MSC_VER < 1500
|
|
|
+ cmdPara._rtnError = utils::_dprintf(_T("返回的指令参数错误, %s, %s"), cmdPara.param.c_str(), rtnParam.c_str());
|
|
|
+#elif _MSC_VER >= 1500
|
|
|
+ cmdPara._rtnError = utils::_dprintf(_T("[%s] 返回的指令参数错误, %s, %s"), __FUNCTION__, cmdPara.param.c_str(), rtnParam.c_str());
|
|
|
+#endif
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ nDataPos += rtnParam.size()/2;
|
|
|
+ }
|
|
|
+#endif
|
|
|
+
|
|
|
+ cmdPara._rtnData = data.substr(nDataPos, nPacketLen - nDataPos - 2);
|
|
|
+ utils::_dprintf(_T("rtnData=%s"), utils::BytesToHexString((byte*)cmdPara._rtnData.c_str(), cmdPara._rtnData.size(), ' ').c_str());
|
|
|
+
|
|
|
+
|
|
|
+ unsigned short usCRCValue = utils::CRC16Calculate((byte*)data.data(), nPacketLen - 2);
|
|
|
+ if (((usCRCValue >> 8) & 0xFF) != (byte)data[nPacketLen - 2] || (usCRCValue & 0xFF) != (byte)data[nPacketLen - 1])
|
|
|
+ {
|
|
|
+#if _MSC_VER >= 1200 && _MSC_VER < 1500
|
|
|
+ cmdPara._rtnError = utils::_dprintf("CRC校验错误:计算[%02X %02X] != 接收[%02X %02X]", (usCRCValue >> 8) & 0xFF, usCRCValue & 0xFF, (byte)data[nPacketLen - 2], (byte)data[nPacketLen - 1]);
|
|
|
+#elif _MSC_VER >= 1500
|
|
|
+ cmdPara._rtnError = utils::_dprintf("[%s] CRC校验错误:计算[%02X %02X] != 接收[%02X %02X]", __FUNCTION__, (usCRCValue >> 8) & 0xFF, usCRCValue & 0xFF, (byte)data[nPacketLen - 2], (byte)data[nPacketLen - 1]);
|
|
|
+#endif
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (data.size() > nPacketLen)
|
|
|
+#if _MSC_VER >= 1200 && _MSC_VER < 1500
|
|
|
+ utils::_dprintf(_T("带有脏数据:%s"), data.substr(nPacketLen));
|
|
|
+#elif _MSC_VER >= 1500
|
|
|
+ utils::_dprintf("[%s] 带有脏数据:%s", __FUNCTION__, data.substr(nPacketLen));
|
|
|
+#endif
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+#if _MSC_VER >= 1200 && _MSC_VER < 1500
|
|
|
+ cmdPara._rtnError = utils::_dprintf("返回码错误:%02X", (byte)data[0]);
|
|
|
+#elif _MSC_VER >= 1500
|
|
|
+ cmdPara._rtnError = utils::_dprintf("[%s] 返回码错误:%02X", __FUNCTION__, (byte)data[0]);
|
|
|
+#endif
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+}
|
|
|
+
|
|
|
void TCLCommand::PackingCommand(CommandParam& cmdPara, LPVOID data, const int& dataLen)
|
|
|
{
|
|
|
|