mirror of
https://github.com/g4klx/MMDVMHost
synced 2025-12-23 00:35:53 +08:00
More work on constructing RF P25 from network data.
This commit is contained in:
78
P25Data.cpp
78
P25Data.cpp
@@ -23,6 +23,21 @@
|
||||
#include "Utils.h"
|
||||
#include "Log.h"
|
||||
|
||||
#include <cstdio>
|
||||
#include <cassert>
|
||||
|
||||
const unsigned char DUMMY_HEADER[] = {
|
||||
0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U,
|
||||
0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x08U, 0xDCU, 0x60U,
|
||||
0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x02U, 0x93U, 0xE7U, 0x73U, 0x77U, 0x57U, 0xD6U, 0xD3U, 0xCFU, 0x77U,
|
||||
0xEEU, 0x82U, 0x93U, 0xE2U, 0x2FU, 0xF3U, 0xD5U, 0xF5U, 0xBEU, 0xBCU, 0x54U, 0x0DU, 0x9CU, 0x29U, 0x3EU, 0x46U,
|
||||
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,16 +58,27 @@ CP25Data::~CP25Data()
|
||||
|
||||
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);
|
||||
// CUtils::dump(1U, "P25, raw header", raw, 81U);
|
||||
|
||||
// XXX Need to add FEC code
|
||||
}
|
||||
|
||||
void CP25Data::createHeader(unsigned char* data)
|
||||
{
|
||||
assert(data != NULL);
|
||||
|
||||
CP25Utils::encode(DUMMY_HEADER, data, 114U, 780U);
|
||||
}
|
||||
|
||||
void CP25Data::processLDU1(unsigned char* data)
|
||||
{
|
||||
assert(data != NULL);
|
||||
|
||||
unsigned char rs[18U];
|
||||
|
||||
unsigned char raw[5U];
|
||||
@@ -76,7 +102,7 @@ void CP25Data::processLDU1(unsigned char* data)
|
||||
|
||||
m_rs241213.decode(rs);
|
||||
|
||||
CUtils::dump(1U, "P25, LDU1 Data", rs, 9U);
|
||||
// CUtils::dump(1U, "P25, LDU1 Data", rs, 9U);
|
||||
|
||||
switch (rs[0U]) {
|
||||
case P25_LCF_GROUP:
|
||||
@@ -113,8 +139,15 @@ void CP25Data::processLDU1(unsigned char* data)
|
||||
CP25Utils::encode(raw, data, 1356U, 1398U);
|
||||
}
|
||||
|
||||
void CP25Data::createLDU1(unsigned char* data)
|
||||
{
|
||||
assert(data != NULL);
|
||||
}
|
||||
|
||||
void CP25Data::processLDU2(unsigned char* data)
|
||||
{
|
||||
assert(data != NULL);
|
||||
|
||||
unsigned char rs[18U];
|
||||
|
||||
unsigned char raw[5U];
|
||||
@@ -138,7 +171,7 @@ void CP25Data::processLDU2(unsigned char* data)
|
||||
|
||||
m_rs24169.decode(rs);
|
||||
|
||||
CUtils::dump(1U, "P25, LDU2 Data", rs, 12U);
|
||||
// CUtils::dump(1U, "P25, LDU2 Data", rs, 18U);
|
||||
|
||||
encodeLDUHamming(raw, rs + 0U);
|
||||
CP25Utils::encode(raw, data, 410U, 452U);
|
||||
@@ -159,14 +192,33 @@ void CP25Data::processLDU2(unsigned char* data)
|
||||
CP25Utils::encode(raw, data, 1356U, 1398U);
|
||||
}
|
||||
|
||||
void CP25Data::processTerminator(unsigned char* data)
|
||||
void CP25Data::createLDU2(unsigned char* data)
|
||||
{
|
||||
unsigned char raw[36U];
|
||||
CP25Utils::decode(data, raw, 114U, 210U);
|
||||
assert(data != NULL);
|
||||
|
||||
CUtils::dump(1U, "P25, raw terminator", raw, 36U);
|
||||
unsigned char raw[5U];
|
||||
encodeLDUHamming(raw, DUMMY_LDU2 + 0U);
|
||||
CP25Utils::encode(raw, data, 410U, 452U);
|
||||
|
||||
// XXX Need to add FEC code, or do we?
|
||||
encodeLDUHamming(raw, DUMMY_LDU2 + 3U);
|
||||
CP25Utils::encode(raw, data, 600U, 640U);
|
||||
|
||||
encodeLDUHamming(raw, DUMMY_LDU2 + 6U);
|
||||
CP25Utils::encode(raw, data, 788U, 830U);
|
||||
|
||||
encodeLDUHamming(raw, DUMMY_LDU2 + 9U);
|
||||
CP25Utils::encode(raw, data, 978U, 1020U);
|
||||
|
||||
encodeLDUHamming(raw, DUMMY_LDU2 + 12U);
|
||||
CP25Utils::encode(raw, data, 1168U, 1208U);
|
||||
|
||||
encodeLDUHamming(raw, DUMMY_LDU2 + 15U);
|
||||
CP25Utils::encode(raw, data, 1356U, 1398U);
|
||||
}
|
||||
|
||||
void CP25Data::setSource(unsigned int source)
|
||||
{
|
||||
m_source = source;
|
||||
}
|
||||
|
||||
unsigned int CP25Data::getSource() const
|
||||
@@ -174,11 +226,21 @@ unsigned int CP25Data::getSource() const
|
||||
return m_source;
|
||||
}
|
||||
|
||||
void CP25Data::setGroup(bool yes)
|
||||
{
|
||||
m_group = yes;
|
||||
}
|
||||
|
||||
bool CP25Data::getGroup() const
|
||||
{
|
||||
return m_group;
|
||||
}
|
||||
|
||||
void CP25Data::setDest(unsigned int dest)
|
||||
{
|
||||
m_dest = dest;
|
||||
}
|
||||
|
||||
unsigned int CP25Data::getDest() const
|
||||
{
|
||||
return m_dest;
|
||||
|
||||
Reference in New Issue
Block a user