diff --git a/P25Control.cpp b/P25Control.cpp index 09ec8e7..690aea3 100644 --- a/P25Control.cpp +++ b/P25Control.cpp @@ -135,7 +135,7 @@ bool CP25Control::writeModem(unsigned char* data, unsigned int len) m_nid.encode(data + 2U, P25_DUID_HEADER); // Add the dummy header - m_netData.processHeader(data + 2U); + m_netData.encodeHeader(data + 2U); // Add busy bits addBusyBits(data + 2U, P25_HDR_FRAME_LENGTH_BITS, false, true); @@ -226,8 +226,8 @@ bool CP25Control::writeModem(unsigned char* data, unsigned int len) // Regenerate NID m_nid.encode(data + 2U, P25_DUID_LDU2); - // Regenerate the LDU2 data - m_rfData.processLDU2(data + 2U); + // Add the dummy LDU2 data + m_rfData.encodeLDU2(data + 2U); // Regenerate the Low Speed Data m_rfLSD.process(data + 2U); @@ -328,7 +328,7 @@ void CP25Control::writeNetwork() ::memcpy(m_netLDU1 + 0U, data, 22U); return; case 0x63U: - ::memcpy(m_netLDU1 + 25U, data, 13U); + ::memcpy(m_netLDU1 + 25U, data, 14U); return; case 0x64U: ::memcpy(m_netLDU1 + 50U, data, 17U); @@ -357,7 +357,7 @@ void CP25Control::writeNetwork() ::memcpy(m_netLDU2 + 0U, data, 22U); return; case 0x6CU: - ::memcpy(m_netLDU2 + 25U, data, 13U); + ::memcpy(m_netLDU2 + 25U, data, 14U); return; case 0x6DU: ::memcpy(m_netLDU2 + 50U, data, 17U); @@ -605,7 +605,7 @@ void CP25Control::createLDU2() // Add the NID m_nid.encode(buffer + 2U, P25_DUID_LDU2); - // Add the LDU2 data + // Add the dummy LDU2 data m_netData.encodeLDU2(buffer + 2U); // Add the Audio diff --git a/P25Data.cpp b/P25Data.cpp index bf355df..d15228d 100644 --- a/P25Data.cpp +++ b/P25Data.cpp @@ -35,6 +35,11 @@ const unsigned char DUMMY_HEADER[] = { 0xE3U, 0x28U, 0xB0U, 0xB7U, 0x73U, 0x76U, 0x1EU, 0x26U, 0x0CU, 0x75U, 0x5BU, 0xF7U, 0x4DU, 0x5FU, 0x5AU, 0x37U, 0x18U}; +const unsigned char DUMMY_LDU2[] = { + 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x80U, 0x00U, 0x00U, 0xACU, 0xB8U, 0xA4U, 0x9BU, + 0xDCU, 0x75U +}; + const unsigned char BIT_MASK_TABLE[] = { 0x80U, 0x40U, 0x20U, 0x10U, 0x08U, 0x04U, 0x02U, 0x01U }; #define WRITE_BIT(p,i,b) p[(i)>>3] = (b) ? (p[(i)>>3] | BIT_MASK_TABLE[(i)&7]) : (p[(i)>>3] & ~BIT_MASK_TABLE[(i)&7]) @@ -43,14 +48,13 @@ const unsigned char BIT_MASK_TABLE[] = { 0x80U, 0x40U, 0x20U, 0x10U, 0x08U, 0x04 CP25Data::CP25Data() : m_mi(NULL), m_mfId(0U), -m_algId(0U), +m_algId(0x80U), m_kId(0U), m_lcf(0x00U), m_emergency(false), m_srcId(0U), m_dstId(0U), -m_rs241213(), -m_rs24169() +m_rs241213() { m_mi = new unsigned char[P25_MI_LENGTH_BYTES]; } @@ -60,20 +64,6 @@ CP25Data::~CP25Data() delete[] m_mi; } -void CP25Data::processHeader(unsigned char* data) -{ - assert(data != NULL); - - unsigned char raw[81U]; - CP25Utils::decode(data, raw, 114U, 780U); - - // CUtils::dump(1U, "P25, raw header", raw, 81U); - - // XXX Need to add FEC code - - CP25Utils::encode(DUMMY_HEADER, data, 114U, 780U); -} - void CP25Data::encodeHeader(unsigned char* data) { assert(data != NULL); @@ -129,7 +119,7 @@ void CP25Data::processLDU1(unsigned char* data) break; } - // m_rs241213.encode(rs); + m_rs241213.encode(rs); // CUtils::dump(1U, "P25, LDU1 Data after", rs, 18U); @@ -208,97 +198,27 @@ void CP25Data::encodeLDU1(unsigned char* data) CP25Utils::encode(raw, data, 1356U, 1398U); } -void CP25Data::processLDU2(unsigned char* data) -{ - assert(data != NULL); - - unsigned char rs[18U]; - - unsigned char raw[5U]; - CP25Utils::decode(data, raw, 410U, 452U); - decodeLDUHamming(raw, rs + 0U); - - CP25Utils::decode(data, raw, 600U, 640U); - decodeLDUHamming(raw, rs + 3U); - - CP25Utils::decode(data, raw, 788U, 830U); - decodeLDUHamming(raw, rs + 6U); - - CP25Utils::decode(data, raw, 978U, 1020U); - decodeLDUHamming(raw, rs + 9U); - - CP25Utils::decode(data, raw, 1168U, 1208U); - decodeLDUHamming(raw, rs + 12U); - - CP25Utils::decode(data, raw, 1356U, 1398U); - decodeLDUHamming(raw, rs + 15U); - - // CUtils::dump(1U, "P25, LDU2 Data before", rs, 18U); - - m_rs24169.decode(rs); - - ::memcpy(m_mi, rs + 0U, P25_MI_LENGTH_BYTES); - m_algId = rs[9U]; - m_kId = (rs[10U] << 8) + rs[11U]; - - // m_rs24169.encode(rs); - - // CUtils::dump(1U, "P25, LDU2 Data after", rs, 18U); - - encodeLDUHamming(raw, rs + 0U); - CP25Utils::encode(raw, data, 410U, 452U); - - encodeLDUHamming(raw, rs + 3U); - CP25Utils::encode(raw, data, 600U, 640U); - - encodeLDUHamming(raw, rs + 6U); - CP25Utils::encode(raw, data, 788U, 830U); - - encodeLDUHamming(raw, rs + 9U); - CP25Utils::encode(raw, data, 978U, 1020U); - - encodeLDUHamming(raw, rs + 12U); - CP25Utils::encode(raw, data, 1168U, 1208U); - - encodeLDUHamming(raw, rs + 15U); - CP25Utils::encode(raw, data, 1356U, 1398U); -} - void CP25Data::encodeLDU2(unsigned char* data) { assert(data != NULL); - unsigned char rs[18U]; - ::memset(rs, 0x00U, 18U); - - ::memcpy(rs + 0U, m_mi, P25_MI_LENGTH_BYTES); - - rs[9U] = m_algId; - - rs[10U] = (m_kId >> 8) & 0xFFU; - rs[11U] = (m_kId >> 0) & 0xFFU; - - // m_rs24169.encode(rs); - - // CUtils::dump(1U, "P25, LDU2 Data", rs, 18U); - unsigned char raw[5U]; - encodeLDUHamming(raw, rs + 0U); + encodeLDUHamming(raw, DUMMY_LDU2 + 0U); CP25Utils::encode(raw, data, 410U, 452U); - encodeLDUHamming(raw, rs + 3U); + encodeLDUHamming(raw, DUMMY_LDU2 + 3U); CP25Utils::encode(raw, data, 600U, 640U); - encodeLDUHamming(raw, rs + 6U); + encodeLDUHamming(raw, DUMMY_LDU2 + 6U); CP25Utils::encode(raw, data, 788U, 830U); - encodeLDUHamming(raw, rs + 9U); + encodeLDUHamming(raw, DUMMY_LDU2 + 9U); CP25Utils::encode(raw, data, 978U, 1020U); - encodeLDUHamming(raw, rs + 12U); + encodeLDUHamming(raw, DUMMY_LDU2 + 12U); CP25Utils::encode(raw, data, 1168U, 1208U); - encodeLDUHamming(raw, rs + 15U); + encodeLDUHamming(raw, DUMMY_LDU2 + 15U); CP25Utils::encode(raw, data, 1356U, 1398U); } diff --git a/P25Data.h b/P25Data.h index c1c9389..6786c62 100644 --- a/P25Data.h +++ b/P25Data.h @@ -26,13 +26,11 @@ public: CP25Data(); ~CP25Data(); - void processHeader(unsigned char* data); void encodeHeader(unsigned char* data); void processLDU1(unsigned char* data); void encodeLDU1(unsigned char* data); - void processLDU2(unsigned char* data); void encodeLDU2(unsigned char* data); void setMI(const unsigned char* mi); @@ -71,7 +69,6 @@ private: unsigned int m_srcId; unsigned int m_dstId; CRS241213 m_rs241213; - CRS24169 m_rs24169; void decodeLDUHamming(const unsigned char* raw, unsigned char* data); void encodeLDUHamming(unsigned char* data, const unsigned char* raw);