From 8290db81fdb2e7d888f41cf0f598197441899cc7 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Mon, 19 Feb 2018 22:06:04 +0000 Subject: [PATCH] Opionally allow the checksum to be copied. --- NXDNFACCH1.cpp | 10 ++++++++-- NXDNFACCH1.h | 2 +- NXDNSACCH.cpp | 15 ++++++++++----- NXDNSACCH.h | 2 +- NXDNUDCH.cpp | 10 ++++++++-- NXDNUDCH.h | 2 +- 6 files changed, 29 insertions(+), 12 deletions(-) diff --git a/NXDNFACCH1.cpp b/NXDNFACCH1.cpp index 2cc2c42..7f9c7c3 100644 --- a/NXDNFACCH1.cpp +++ b/NXDNFACCH1.cpp @@ -148,11 +148,17 @@ void CNXDNFACCH1::encode(unsigned char* data, unsigned int offset) const } } -void CNXDNFACCH1::getData(unsigned char* data) const +void CNXDNFACCH1::getData(unsigned char* data, bool checksum) const { assert(data != NULL); - ::memcpy(data, m_data, 10U); + if (checksum) { + ::memset(data, 0x00U, 12U); + ::memcpy(data, m_data, 10U); + CNXDNCRC::encodeCRC12(data, 80U); + } else { + ::memcpy(data, m_data, 10U); + } } void CNXDNFACCH1::setData(const unsigned char* data) diff --git a/NXDNFACCH1.h b/NXDNFACCH1.h index adb4112..0a9a881 100644 --- a/NXDNFACCH1.h +++ b/NXDNFACCH1.h @@ -29,7 +29,7 @@ public: void encode(unsigned char* data, unsigned int offset) const; - void getData(unsigned char* data) const; + void getData(unsigned char* data, bool checksum = false) const; void setData(const unsigned char* data); diff --git a/NXDNSACCH.cpp b/NXDNSACCH.cpp index c273799..6c94bad 100755 --- a/NXDNSACCH.cpp +++ b/NXDNSACCH.cpp @@ -155,14 +155,19 @@ unsigned char CNXDNSACCH::getStructure() const return (m_data[0U] >> 6) & 0x03U; } -void CNXDNSACCH::getData(unsigned char* data) const +void CNXDNSACCH::getData(unsigned char* data, bool checksum) const { assert(data != NULL); - unsigned int offset = 8U; - for (unsigned int i = 0U; i < 18U; i++, offset++) { - bool b = READ_BIT1(m_data, offset); - WRITE_BIT1(data, i, b); + if (checksum) { + ::memcpy(data, m_data, 4U); + CNXDNCRC::encodeCRC6(data, 26U); + } else { + unsigned int offset = 8U; + for (unsigned int i = 0U; i < 18U; i++, offset++) { + bool b = READ_BIT1(m_data, offset); + WRITE_BIT1(data, i, b); + } } } diff --git a/NXDNSACCH.h b/NXDNSACCH.h index c3d7490..c208745 100644 --- a/NXDNSACCH.h +++ b/NXDNSACCH.h @@ -32,7 +32,7 @@ public: unsigned char getRAN() const; unsigned char getStructure() const; - void getData(unsigned char* data) const; + void getData(unsigned char* data, bool checksum = false) const; void setRAN(unsigned char ran); void setStructure(unsigned char structure); diff --git a/NXDNUDCH.cpp b/NXDNUDCH.cpp index c9b3246..47d8413 100644 --- a/NXDNUDCH.cpp +++ b/NXDNUDCH.cpp @@ -174,11 +174,17 @@ unsigned char CNXDNUDCH::getRAN() const return m_data[0U] & 0x3FU; } -void CNXDNUDCH::getData(unsigned char* data) const +void CNXDNUDCH::getData(unsigned char* data, bool checksum) const { assert(data != NULL); - ::memcpy(data, m_data + 1U, 22U); + if (checksum) { + ::memset(data, 0x00U, 25U); + ::memcpy(data, m_data, 23U); + CNXDNCRC::encodeCRC15(data, 184U); + } else { + ::memcpy(data, m_data + 1U, 22U); + } } void CNXDNUDCH::setRAN(unsigned char ran) diff --git a/NXDNUDCH.h b/NXDNUDCH.h index 366cd09..738c469 100644 --- a/NXDNUDCH.h +++ b/NXDNUDCH.h @@ -31,7 +31,7 @@ public: unsigned char getRAN() const; - void getData(unsigned char* data) const; + void getData(unsigned char* data, bool checksum = false) const; void setRAN(unsigned char ran);