From 059ad7d8243dd21507efdacf699b509a5ab24234 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Thu, 25 Jan 2018 19:19:54 +0000 Subject: [PATCH] Add more scaffolding code to the channel codecs. --- NXDNFACCH1.cpp | 17 +++++++++++++++-- NXDNFACCH1.h | 1 + NXDNFACCH2.cpp | 20 ++++++-------------- NXDNUDCH.cpp | 17 +++++++++++++++-- NXDNUDCH.h | 1 + 5 files changed, 38 insertions(+), 18 deletions(-) diff --git a/NXDNFACCH1.cpp b/NXDNFACCH1.cpp index 89ae008..f548a8d 100644 --- a/NXDNFACCH1.cpp +++ b/NXDNFACCH1.cpp @@ -33,16 +33,22 @@ const unsigned char BIT_MASK_TABLE[] = { 0x80U, 0x40U, 0x20U, 0x10U, 0x08U, 0x04 #define WRITE_BIT1(p,i,b) p[(i)>>3] = (b) ? (p[(i)>>3] | BIT_MASK_TABLE[(i)&7]) : (p[(i)>>3] & ~BIT_MASK_TABLE[(i)&7]) #define READ_BIT1(p,i) (p[(i)>>3] & BIT_MASK_TABLE[(i)&7]) -CNXDNFACCH1::CNXDNFACCH1(const CNXDNFACCH1& facch1) +CNXDNFACCH1::CNXDNFACCH1(const CNXDNFACCH1& facch1) : +m_data(NULL) { + m_data = new unsigned char[10U + 2U]; + ::memcpy(m_data, facch1.m_data, 10U + 2U); } -CNXDNFACCH1::CNXDNFACCH1() +CNXDNFACCH1::CNXDNFACCH1() : +m_data(NULL) { + m_data = new unsigned char[10U + 2U]; } CNXDNFACCH1::~CNXDNFACCH1() { + delete[] m_data; } bool CNXDNFACCH1::decode(const unsigned char* data) @@ -60,14 +66,21 @@ void CNXDNFACCH1::encode(unsigned char* data) const void CNXDNFACCH1::getData(unsigned char* data) const { assert(data != NULL); + + ::memcpy(data, m_data, 10U); } void CNXDNFACCH1::setData(const unsigned char* data) { assert(data != NULL); + + ::memcpy(m_data, data, 10U); } CNXDNFACCH1& CNXDNFACCH1::operator=(const CNXDNFACCH1& facch1) { + if (&facch1 != this) + ::memcpy(m_data, facch1.m_data, 10U + 2U); + return *this; } diff --git a/NXDNFACCH1.h b/NXDNFACCH1.h index dfa41ca..3c9c664 100644 --- a/NXDNFACCH1.h +++ b/NXDNFACCH1.h @@ -35,6 +35,7 @@ public: CNXDNFACCH1& operator=(const CNXDNFACCH1& facch); private: + unsigned char* m_data; }; #endif diff --git a/NXDNFACCH2.cpp b/NXDNFACCH2.cpp index 1c7dfb9..ac705fa 100644 --- a/NXDNFACCH2.cpp +++ b/NXDNFACCH2.cpp @@ -35,14 +35,14 @@ const unsigned char BIT_MASK_TABLE[] = { 0x80U, 0x40U, 0x20U, 0x10U, 0x08U, 0x04 CNXDNFACCH2::CNXDNFACCH2(const CNXDNFACCH2& facch2) : m_data(NULL) { - m_data = new unsigned char[25U]; - ::memcpy(m_data, facch2.m_data, 25U); + m_data = new unsigned char[23U]; + ::memcpy(m_data, facch2.m_data, 23U); } CNXDNFACCH2::CNXDNFACCH2() : m_data(NULL) { - m_data = new unsigned char[25U]; + m_data = new unsigned char[23U]; } CNXDNFACCH2::~CNXDNFACCH2() @@ -84,11 +84,7 @@ void CNXDNFACCH2::getData(unsigned char* data) const { assert(data != NULL); - unsigned int offset = 8U; - for (unsigned int i = 0U; i < 168U; i++, offset++) { - bool b = READ_BIT1(m_data, offset); - WRITE_BIT1(data, i, b); - } + ::memcpy(data, m_data + 1U, 22U); } void CNXDNFACCH2::setRAN(unsigned char ran) @@ -101,17 +97,13 @@ void CNXDNFACCH2::setData(const unsigned char* data) { assert(data != NULL); - unsigned int offset = 8U; - for (unsigned int i = 0U; i < 168U; i++, offset++) { - bool b = READ_BIT1(data, i); - WRITE_BIT1(m_data, offset, b); - } + ::memcpy(m_data + 1U, data, 22U); } CNXDNFACCH2& CNXDNFACCH2::operator=(const CNXDNFACCH2& facch2) { if (&facch2 != this) - ::memcpy(m_data, facch2.m_data, 25U); + ::memcpy(m_data, facch2.m_data, 23U); return *this; } diff --git a/NXDNUDCH.cpp b/NXDNUDCH.cpp index 05b861a..1d194b9 100644 --- a/NXDNUDCH.cpp +++ b/NXDNUDCH.cpp @@ -33,16 +33,22 @@ const unsigned char BIT_MASK_TABLE[] = { 0x80U, 0x40U, 0x20U, 0x10U, 0x08U, 0x04 #define WRITE_BIT1(p,i,b) p[(i)>>3] = (b) ? (p[(i)>>3] | BIT_MASK_TABLE[(i)&7]) : (p[(i)>>3] & ~BIT_MASK_TABLE[(i)&7]) #define READ_BIT1(p,i) (p[(i)>>3] & BIT_MASK_TABLE[(i)&7]) -CNXDNUDCH::CNXDNUDCH(const CNXDNUDCH& udch) +CNXDNUDCH::CNXDNUDCH(const CNXDNUDCH& udch) : +m_data(NULL) { + m_data = new unsigned char[23U + 2U]; + ::memcpy(m_data, udch.m_data, 23U + 2U); } -CNXDNUDCH::CNXDNUDCH() +CNXDNUDCH::CNXDNUDCH() : +m_data(NULL) { + m_data = new unsigned char[23U + 2U]; } CNXDNUDCH::~CNXDNUDCH() { + delete[] m_data; } bool CNXDNUDCH::decode(const unsigned char* data) @@ -60,14 +66,21 @@ void CNXDNUDCH::encode(unsigned char* data) const void CNXDNUDCH::getData(unsigned char* data) const { assert(data != NULL); + + ::memcpy(data, m_data, 23U); } void CNXDNUDCH::setData(const unsigned char* data) { assert(data != NULL); + + ::memcpy(m_data, data, 23U); } CNXDNUDCH& CNXDNUDCH::operator=(const CNXDNUDCH& udch) { + if (&udch != this) + ::memcpy(m_data, udch.m_data, 23U + 2U); + return *this; } diff --git a/NXDNUDCH.h b/NXDNUDCH.h index 5b28ac9..6847c9c 100644 --- a/NXDNUDCH.h +++ b/NXDNUDCH.h @@ -36,6 +36,7 @@ public: CNXDNUDCH& operator=(const CNXDNUDCH& udch); private: + unsigned char* m_data; }; #endif