Fix for decoding long Wires-X commands

This commit is contained in:
Andy CA6JAU 2018-07-29 20:01:58 -04:00
parent 4b643a2a8b
commit 496e705536
3 changed files with 15 additions and 12 deletions

View File

@ -212,11 +212,11 @@ WX_STATUS CWiresX::process(const unsigned char* data, const unsigned char* sourc
if (!valid)
return WXS_NONE;
} else {
bool valid = payload.readDataFRModeData1(data, m_command + (fn - 1U) * 20U + 0U);
bool valid = payload.readDataFRModeData1(data, m_command + (fn - 2U) * 40U + 20U);
if (!valid)
return WXS_NONE;
valid = payload.readDataFRModeData2(data, m_command + (fn - 1U) * 20U + 20U);
valid = payload.readDataFRModeData2(data, m_command + (fn - 2U) * 40U + 40U);
if (!valid)
return WXS_NONE;
}
@ -225,7 +225,8 @@ WX_STATUS CWiresX::process(const unsigned char* data, const unsigned char* sourc
bool valid = false;
// Find the end marker
for (unsigned int i = fn * 20U; i > 0U; i--) {
unsigned int cmd_len = (fn - 1U) * 40U + 20U;
for (unsigned int i = cmd_len; i > 0U; i--) {
if (m_command[i] == 0x03U) {
unsigned char crc = CCRC::addCRC(m_command, i + 1U);
if (crc == m_command[i + 1U])
@ -249,7 +250,7 @@ WX_STATUS CWiresX::process(const unsigned char* data, const unsigned char* sourc
processDisconnect(source);
return WXS_DISCONNECT;
} else {
//CUtils::dump("Unknown Wires-X command", m_command, fn * 20U);
//CUtils::dump("Unknown Wires-X command", m_command, cmd_len);
return WXS_FAIL;
}
}

View File

@ -210,11 +210,11 @@ WX_STATUS CWiresX::process(const unsigned char* data, const unsigned char* sourc
if (!valid)
return WXS_NONE;
} else {
bool valid = payload.readDataFRModeData1(data, m_command + (fn - 1U) * 20U + 0U);
bool valid = payload.readDataFRModeData1(data, m_command + (fn - 2U) * 40U + 20U);
if (!valid)
return WXS_NONE;
valid = payload.readDataFRModeData2(data, m_command + (fn - 1U) * 20U + 20U);
valid = payload.readDataFRModeData2(data, m_command + (fn - 2U) * 40U + 40U);
if (!valid)
return WXS_NONE;
}
@ -223,7 +223,8 @@ WX_STATUS CWiresX::process(const unsigned char* data, const unsigned char* sourc
bool valid = false;
// Find the end marker
for (unsigned int i = fn * 20U; i > 0U; i--) {
unsigned int cmd_len = (fn - 1U) * 40U + 20U;
for (unsigned int i = cmd_len; i > 0U; i--) {
if (m_command[i] == 0x03U) {
unsigned char crc = CCRC::addCRC(m_command, i + 1U);
if (crc == m_command[i + 1U])
@ -247,7 +248,7 @@ WX_STATUS CWiresX::process(const unsigned char* data, const unsigned char* sourc
processDisconnect(source);
return WXS_DISCONNECT;
} else {
//CUtils::dump("Unknown Wires-X command", m_command, fn * 20U);
//CUtils::dump("Unknown Wires-X command", m_command, cmd_len);
return WXS_FAIL;
}
}

View File

@ -210,11 +210,11 @@ WX_STATUS CWiresX::process(const unsigned char* data, const unsigned char* sourc
if (!valid)
return WXS_NONE;
} else {
bool valid = payload.readDataFRModeData1(data, m_command + (fn - 1U) * 20U + 0U);
bool valid = payload.readDataFRModeData1(data, m_command + (fn - 2U) * 40U + 20U);
if (!valid)
return WXS_NONE;
valid = payload.readDataFRModeData2(data, m_command + (fn - 1U) * 20U + 20U);
valid = payload.readDataFRModeData2(data, m_command + (fn - 2U) * 40U + 40U);
if (!valid)
return WXS_NONE;
}
@ -223,7 +223,8 @@ WX_STATUS CWiresX::process(const unsigned char* data, const unsigned char* sourc
bool valid = false;
// Find the end marker
for (unsigned int i = fn * 20U; i > 0U; i--) {
unsigned int cmd_len = (fn - 1U) * 40U + 20U;
for (unsigned int i = cmd_len; i > 0U; i--) {
if (m_command[i] == 0x03U) {
unsigned char crc = CCRC::addCRC(m_command, i + 1U);
if (crc == m_command[i + 1U])
@ -247,7 +248,7 @@ WX_STATUS CWiresX::process(const unsigned char* data, const unsigned char* sourc
processDisconnect(source);
return WXS_DISCONNECT;
} else {
//CUtils::dump("Unknown Wires-X command", m_command, fn * 20U);
//CUtils::dump("Unknown Wires-X command", m_command, cmd_len);
return WXS_FAIL;
}
}