From 5b45767fea6e331f8404f28dac6007b1597a5043 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Tue, 20 Mar 2018 20:36:23 +0000 Subject: [PATCH] Revert "Rework the LICH parity." This reverts commit 5a22b3d0a6310201882ffd2b6b00b7ce863a2107. --- NXDNCRC.cpp | 30 ------------------------------ NXDNCRC.h | 4 ---- NXDNLICH.cpp | 32 ++++++++++++++++++++------------ 3 files changed, 20 insertions(+), 46 deletions(-) diff --git a/NXDNCRC.cpp b/NXDNCRC.cpp index 861ee7d1c..60278aeef 100644 --- a/NXDNCRC.cpp +++ b/NXDNCRC.cpp @@ -133,25 +133,6 @@ void CNXDNCRC::encodeCRC15(unsigned char* in, unsigned int length) } } -bool CNXDNCRC::checkLICHParity(unsigned char in) -{ - bool newParity = createLICHParity(in); - - bool oldParity = (in & 0x01U) == 0x01U; - - return newParity == oldParity; -} - -void CNXDNCRC::encodeLICHParity(unsigned char& in) -{ - bool parity = createLICHParity(in); - - if (parity) - in |= 0x01U; - else - in &= 0xFEU; -} - uint8_t CNXDNCRC::createCRC6(const unsigned char* in, unsigned int length) { uint8_t crc = 0x3FU; @@ -202,14 +183,3 @@ uint16_t CNXDNCRC::createCRC15(const unsigned char* in, unsigned int length) return crc & 0x7FFFU; } - -bool CNXDNCRC::createLICHParity(unsigned char in) -{ - switch (in & 0xF0U) { - case 0x80U: - case 0xB0U: - return true; - default: - return false; - } -} diff --git a/NXDNCRC.h b/NXDNCRC.h index 97842a519..12e2e408c 100644 --- a/NXDNCRC.h +++ b/NXDNCRC.h @@ -33,14 +33,10 @@ class CNXDNCRC static bool checkCRC15(const unsigned char* in, unsigned int length); static void encodeCRC15(unsigned char* in, unsigned int length); - static bool checkLICHParity(unsigned char in); - static void encodeLICHParity(unsigned char& in); - private: static uint8_t createCRC6(const unsigned char* in, unsigned int length); static uint16_t createCRC12(const unsigned char* in, unsigned int length); static uint16_t createCRC15(const unsigned char* in, unsigned int length); - static bool createLICHParity(unsigned char in); }; #endif diff --git a/NXDNLICH.cpp b/NXDNLICH.cpp index 40a739217..a61c72bb7 100644 --- a/NXDNLICH.cpp +++ b/NXDNLICH.cpp @@ -18,7 +18,6 @@ #include "NXDNDefines.h" #include "NXDNLICH.h" -#include "NXDNCRC.h" #include #include @@ -51,26 +50,37 @@ bool CNXDNLICH::decode(const unsigned char* bytes) { assert(bytes != NULL); - unsigned int offset = NXDN_FSW_LENGTH_BITS; - for (unsigned int i = 0U; i < (NXDN_LICH_LENGTH_BITS / 2U); i++, offset += 2U) { - bool b = READ_BIT1(bytes, offset); - WRITE_BIT1(m_lich, i, b); + bool b[8U]; + unsigned int offset1 = NXDN_FSW_LENGTH_BITS; + unsigned int offset2 = 7U; + for (unsigned int i = 0U; i < (NXDN_LICH_LENGTH_BITS / 2U); i++, offset1 += 2U, offset2--) { + b[offset2] = READ_BIT1(bytes, offset1); + WRITE_BIT1(m_lich, i, b[offset2]); } - return CNXDNCRC::checkLICHParity(m_lich[0U]); + bool parity = b[7U] ^ b[6U] ^ b[5U] ^ b[4U]; + + if (parity != b[0U]) + return false; + + return true; } void CNXDNLICH::encode(unsigned char* bytes) { assert(bytes != NULL); - CNXDNCRC::encodeLICHParity(m_lich[0U]); + bool b[8U]; + unsigned int offset = 7U; + for (unsigned int i = 0U; i < (NXDN_LICH_LENGTH_BITS / 2U); i++, offset--) + b[offset] = READ_BIT1(m_lich, i); + + b[0U] = b[7U] ^ b[6U] ^ b[5U] ^ b[4U]; unsigned int offset1 = NXDN_FSW_LENGTH_BITS; unsigned int offset2 = 7U; for (unsigned int i = 0U; i < (NXDN_LICH_LENGTH_BITS / 2U); i++, offset2--) { - bool b = READ_BIT1(m_lich, offset2); - WRITE_BIT1(bytes, offset1, b); + WRITE_BIT1(bytes, offset1, b[offset2]); offset1++; WRITE_BIT1(bytes, offset1, true); offset1++; @@ -99,8 +109,6 @@ unsigned char CNXDNLICH::getDirection() const unsigned char CNXDNLICH::getRaw() const { - CNXDNCRC::encodeLICHParity(m_lich[0U]); - return m_lich[0U]; } @@ -119,7 +127,7 @@ void CNXDNLICH::setFCT(unsigned char usc) void CNXDNLICH::setOption(unsigned char option) { m_lich[0U] &= 0xF3U; - m_lich[0U] |= (option << 2) & 0x0CU; + m_lich[0u] |= (option << 2) & 0x0CU; } void CNXDNLICH::setDirection(unsigned char direction)