Add more scaffolding code to the channel codecs.

This commit is contained in:
Jonathan Naylor 2018-01-25 19:19:54 +00:00
parent 80d97e94ec
commit 059ad7d824
5 changed files with 38 additions and 18 deletions

View file

@ -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 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]) #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() CNXDNFACCH1::~CNXDNFACCH1()
{ {
delete[] m_data;
} }
bool CNXDNFACCH1::decode(const unsigned char* 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 void CNXDNFACCH1::getData(unsigned char* data) const
{ {
assert(data != NULL); assert(data != NULL);
::memcpy(data, m_data, 10U);
} }
void CNXDNFACCH1::setData(const unsigned char* data) void CNXDNFACCH1::setData(const unsigned char* data)
{ {
assert(data != NULL); assert(data != NULL);
::memcpy(m_data, data, 10U);
} }
CNXDNFACCH1& CNXDNFACCH1::operator=(const CNXDNFACCH1& facch1) CNXDNFACCH1& CNXDNFACCH1::operator=(const CNXDNFACCH1& facch1)
{ {
if (&facch1 != this)
::memcpy(m_data, facch1.m_data, 10U + 2U);
return *this; return *this;
} }

View file

@ -35,6 +35,7 @@ public:
CNXDNFACCH1& operator=(const CNXDNFACCH1& facch); CNXDNFACCH1& operator=(const CNXDNFACCH1& facch);
private: private:
unsigned char* m_data;
}; };
#endif #endif

View file

@ -35,14 +35,14 @@ const unsigned char BIT_MASK_TABLE[] = { 0x80U, 0x40U, 0x20U, 0x10U, 0x08U, 0x04
CNXDNFACCH2::CNXDNFACCH2(const CNXDNFACCH2& facch2) : CNXDNFACCH2::CNXDNFACCH2(const CNXDNFACCH2& facch2) :
m_data(NULL) m_data(NULL)
{ {
m_data = new unsigned char[25U]; m_data = new unsigned char[23U];
::memcpy(m_data, facch2.m_data, 25U); ::memcpy(m_data, facch2.m_data, 23U);
} }
CNXDNFACCH2::CNXDNFACCH2() : CNXDNFACCH2::CNXDNFACCH2() :
m_data(NULL) m_data(NULL)
{ {
m_data = new unsigned char[25U]; m_data = new unsigned char[23U];
} }
CNXDNFACCH2::~CNXDNFACCH2() CNXDNFACCH2::~CNXDNFACCH2()
@ -84,11 +84,7 @@ void CNXDNFACCH2::getData(unsigned char* data) const
{ {
assert(data != NULL); assert(data != NULL);
unsigned int offset = 8U; ::memcpy(data, m_data + 1U, 22U);
for (unsigned int i = 0U; i < 168U; i++, offset++) {
bool b = READ_BIT1(m_data, offset);
WRITE_BIT1(data, i, b);
}
} }
void CNXDNFACCH2::setRAN(unsigned char ran) void CNXDNFACCH2::setRAN(unsigned char ran)
@ -101,17 +97,13 @@ void CNXDNFACCH2::setData(const unsigned char* data)
{ {
assert(data != NULL); assert(data != NULL);
unsigned int offset = 8U; ::memcpy(m_data + 1U, data, 22U);
for (unsigned int i = 0U; i < 168U; i++, offset++) {
bool b = READ_BIT1(data, i);
WRITE_BIT1(m_data, offset, b);
}
} }
CNXDNFACCH2& CNXDNFACCH2::operator=(const CNXDNFACCH2& facch2) CNXDNFACCH2& CNXDNFACCH2::operator=(const CNXDNFACCH2& facch2)
{ {
if (&facch2 != this) if (&facch2 != this)
::memcpy(m_data, facch2.m_data, 25U); ::memcpy(m_data, facch2.m_data, 23U);
return *this; return *this;
} }

View file

@ -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 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]) #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() CNXDNUDCH::~CNXDNUDCH()
{ {
delete[] m_data;
} }
bool CNXDNUDCH::decode(const unsigned char* 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 void CNXDNUDCH::getData(unsigned char* data) const
{ {
assert(data != NULL); assert(data != NULL);
::memcpy(data, m_data, 23U);
} }
void CNXDNUDCH::setData(const unsigned char* data) void CNXDNUDCH::setData(const unsigned char* data)
{ {
assert(data != NULL); assert(data != NULL);
::memcpy(m_data, data, 23U);
} }
CNXDNUDCH& CNXDNUDCH::operator=(const CNXDNUDCH& udch) CNXDNUDCH& CNXDNUDCH::operator=(const CNXDNUDCH& udch)
{ {
if (&udch != this)
::memcpy(m_data, udch.m_data, 23U + 2U);
return *this; return *this;
} }

View file

@ -36,6 +36,7 @@ public:
CNXDNUDCH& operator=(const CNXDNUDCH& udch); CNXDNUDCH& operator=(const CNXDNUDCH& udch);
private: private:
unsigned char* m_data;
}; };
#endif #endif