diff --git a/YSF2DMR/WiresX.cpp b/YSF2DMR/WiresX.cpp index b2d50e1..80136f5 100644 --- a/YSF2DMR/WiresX.cpp +++ b/YSF2DMR/WiresX.cpp @@ -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; } } diff --git a/YSF2NXDN/WiresX.cpp b/YSF2NXDN/WiresX.cpp index 722fe5a..d5b5666 100644 --- a/YSF2NXDN/WiresX.cpp +++ b/YSF2NXDN/WiresX.cpp @@ -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; } } diff --git a/YSF2P25/WiresX.cpp b/YSF2P25/WiresX.cpp index 722fe5a..d5b5666 100644 --- a/YSF2P25/WiresX.cpp +++ b/YSF2P25/WiresX.cpp @@ -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; } }