Fix some compiler warnings
This commit is contained in:
parent
78f7a07cd9
commit
ab00b4493f
12 changed files with 214 additions and 225 deletions
|
@ -102,6 +102,7 @@ HEADERS += \
|
||||||
Golay24128.h \
|
Golay24128.h \
|
||||||
M17Convolution.h \
|
M17Convolution.h \
|
||||||
M17Defines.h \
|
M17Defines.h \
|
||||||
|
MMDVMDefines.h \
|
||||||
SHA256.h \
|
SHA256.h \
|
||||||
YSFConvolution.h \
|
YSFConvolution.h \
|
||||||
YSFFICH.h \
|
YSFFICH.h \
|
||||||
|
|
108
MMDVMDefines.h
Normal file
108
MMDVMDefines.h
Normal file
|
@ -0,0 +1,108 @@
|
||||||
|
#ifndef MMDVMDEFINES_H
|
||||||
|
#define MMDVMDEFINES_H
|
||||||
|
|
||||||
|
enum HW_TYPE {
|
||||||
|
HWT_MMDVM,
|
||||||
|
HWT_DVMEGA,
|
||||||
|
HWT_MMDVM_ZUMSPOT,
|
||||||
|
HWT_MMDVM_HS_HAT,
|
||||||
|
HWT_NANO_HOTSPOT,
|
||||||
|
HWT_MMDVM_HS,
|
||||||
|
HWT_UNKNOWN
|
||||||
|
};
|
||||||
|
|
||||||
|
enum RPT_RF_STATE {
|
||||||
|
RS_RF_LISTENING,
|
||||||
|
RS_RF_LATE_ENTRY,
|
||||||
|
RS_RF_AUDIO,
|
||||||
|
RS_RF_DATA,
|
||||||
|
RS_RF_REJECTED,
|
||||||
|
RS_RF_INVALID
|
||||||
|
};
|
||||||
|
|
||||||
|
enum RPT_NET_STATE {
|
||||||
|
RS_NET_IDLE,
|
||||||
|
RS_NET_AUDIO,
|
||||||
|
RS_NET_DATA
|
||||||
|
};
|
||||||
|
|
||||||
|
enum B_STATUS {
|
||||||
|
BS_NO_DATA,
|
||||||
|
BS_DATA,
|
||||||
|
BS_MISSING
|
||||||
|
};
|
||||||
|
|
||||||
|
const unsigned char MMDVM_FRAME_START = 0xE0U;
|
||||||
|
|
||||||
|
const unsigned char MMDVM_GET_VERSION = 0x00U;
|
||||||
|
const unsigned char MMDVM_GET_STATUS = 0x01U;
|
||||||
|
const unsigned char MMDVM_SET_CONFIG = 0x02U;
|
||||||
|
const unsigned char MMDVM_SET_MODE = 0x03U;
|
||||||
|
const unsigned char MMDVM_SET_FREQ = 0x04U;
|
||||||
|
|
||||||
|
const unsigned char MMDVM_SEND_CWID = 0x0AU;
|
||||||
|
|
||||||
|
const unsigned char MMDVM_DSTAR_HEADER = 0x10U;
|
||||||
|
const unsigned char MMDVM_DSTAR_DATA = 0x11U;
|
||||||
|
const unsigned char MMDVM_DSTAR_LOST = 0x12U;
|
||||||
|
const unsigned char MMDVM_DSTAR_EOT = 0x13U;
|
||||||
|
|
||||||
|
const unsigned char MMDVM_DMR_DATA1 = 0x18U;
|
||||||
|
const unsigned char MMDVM_DMR_LOST1 = 0x19U;
|
||||||
|
const unsigned char MMDVM_DMR_DATA2 = 0x1AU;
|
||||||
|
const unsigned char MMDVM_DMR_LOST2 = 0x1BU;
|
||||||
|
const unsigned char MMDVM_DMR_SHORTLC = 0x1CU;
|
||||||
|
const unsigned char MMDVM_DMR_START = 0x1DU;
|
||||||
|
const unsigned char MMDVM_DMR_ABORT = 0x1EU;
|
||||||
|
|
||||||
|
const unsigned char MMDVM_YSF_DATA = 0x20U;
|
||||||
|
const unsigned char MMDVM_YSF_LOST = 0x21U;
|
||||||
|
|
||||||
|
const unsigned char MMDVM_P25_HDR = 0x30U;
|
||||||
|
const unsigned char MMDVM_P25_LDU = 0x31U;
|
||||||
|
const unsigned char MMDVM_P25_LOST = 0x32U;
|
||||||
|
|
||||||
|
const unsigned char MMDVM_NXDN_DATA = 0x40U;
|
||||||
|
const unsigned char MMDVM_NXDN_LOST = 0x41U;
|
||||||
|
|
||||||
|
const unsigned char MMDVM_M17_LINK_SETUP = 0x45U;
|
||||||
|
const unsigned char MMDVM_M17_STREAM = 0x46U;
|
||||||
|
const unsigned char MMDVM_M17_PACKET = 0x47U;
|
||||||
|
const unsigned char MMDVM_M17_LOST = 0x48U;
|
||||||
|
const unsigned char MMDVM_M17_EOT = 0x49U;
|
||||||
|
|
||||||
|
const unsigned char MMDVM_POCSAG_DATA = 0x50U;
|
||||||
|
|
||||||
|
const unsigned char MMDVM_FM_PARAMS1 = 0x60U;
|
||||||
|
const unsigned char MMDVM_FM_PARAMS2 = 0x61U;
|
||||||
|
const unsigned char MMDVM_FM_PARAMS3 = 0x62U;
|
||||||
|
|
||||||
|
const unsigned char MMDVM_ACK = 0x70U;
|
||||||
|
const unsigned char MMDVM_NAK = 0x7FU;
|
||||||
|
|
||||||
|
const unsigned char MMDVM_SERIAL = 0x80U;
|
||||||
|
|
||||||
|
const unsigned char MMDVM_TRANSPARENT = 0x90U;
|
||||||
|
const unsigned char MMDVM_QSO_INFO = 0x91U;
|
||||||
|
|
||||||
|
const unsigned char MMDVM_DEBUG1 = 0xF1U;
|
||||||
|
const unsigned char MMDVM_DEBUG2 = 0xF2U;
|
||||||
|
const unsigned char MMDVM_DEBUG3 = 0xF3U;
|
||||||
|
const unsigned char MMDVM_DEBUG4 = 0xF4U;
|
||||||
|
const unsigned char MMDVM_DEBUG5 = 0xF5U;
|
||||||
|
|
||||||
|
const unsigned int MAX_RESPONSES = 30U;
|
||||||
|
|
||||||
|
const unsigned int BUFFER_LENGTH = 2000U;
|
||||||
|
const unsigned char MODE_IDLE = 0U;
|
||||||
|
const unsigned char MODE_DSTAR = 1U;
|
||||||
|
const unsigned char MODE_DMR = 2U;
|
||||||
|
const unsigned char MODE_YSF = 3U;
|
||||||
|
const unsigned char MODE_P25 = 4U;
|
||||||
|
const unsigned char MODE_NXDN = 5U;
|
||||||
|
const unsigned char MODE_M17 = 7U;
|
||||||
|
const unsigned char MODE_CW = 98U;
|
||||||
|
const unsigned char MODE_LOCKOUT = 99U;
|
||||||
|
const unsigned char MODE_ERROR = 100U;
|
||||||
|
|
||||||
|
#endif // MMDVMDEFINES_H
|
|
@ -55,7 +55,7 @@ QStringList AndroidSerialPort::discover_devices()
|
||||||
int AndroidSerialPort::open(int p)
|
int AndroidSerialPort::open(int p)
|
||||||
{
|
{
|
||||||
qDebug() << serialJavaObject.callObjectMethod("setup_serial", "(Landroid/content/Context;)Ljava/lang/String;", QtAndroid::androidContext().object()).toString();
|
qDebug() << serialJavaObject.callObjectMethod("setup_serial", "(Landroid/content/Context;)Ljava/lang/String;", QtAndroid::androidContext().object()).toString();
|
||||||
return 1;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
int AndroidSerialPort::write(char *data, int s)
|
int AndroidSerialPort::write(char *data, int s)
|
||||||
|
|
117
cbptc19696.cpp
117
cbptc19696.cpp
|
@ -35,7 +35,7 @@ CBPTC19696::~CBPTC19696()
|
||||||
}
|
}
|
||||||
|
|
||||||
// The main decode function
|
// The main decode function
|
||||||
void CBPTC19696::decode(const unsigned char* in, unsigned char* out)
|
void CBPTC19696::decode(const uint8_t* in, uint8_t* out)
|
||||||
{
|
{
|
||||||
assert(in != NULL);
|
assert(in != NULL);
|
||||||
assert(out != NULL);
|
assert(out != NULL);
|
||||||
|
@ -54,7 +54,7 @@ void CBPTC19696::decode(const unsigned char* in, unsigned char* out)
|
||||||
}
|
}
|
||||||
|
|
||||||
// The main encode function
|
// The main encode function
|
||||||
void CBPTC19696::encode(const unsigned char* in, unsigned char* out)
|
void CBPTC19696::encode(const uint8_t* in, uint8_t* out)
|
||||||
{
|
{
|
||||||
assert(in != NULL);
|
assert(in != NULL);
|
||||||
assert(out != NULL);
|
assert(out != NULL);
|
||||||
|
@ -72,7 +72,7 @@ void CBPTC19696::encode(const unsigned char* in, unsigned char* out)
|
||||||
encodeExtractBinary(out);
|
encodeExtractBinary(out);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CBPTC19696::byteToBitsBE(unsigned char byte, bool* bits)
|
void CBPTC19696::byteToBitsBE(uint8_t byte, bool* bits)
|
||||||
{
|
{
|
||||||
assert(bits != NULL);
|
assert(bits != NULL);
|
||||||
|
|
||||||
|
@ -86,7 +86,7 @@ void CBPTC19696::byteToBitsBE(unsigned char byte, bool* bits)
|
||||||
bits[7U] = (byte & 0x01U) == 0x01U;
|
bits[7U] = (byte & 0x01U) == 0x01U;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CBPTC19696::bitsToByteBE(bool* bits, unsigned char& byte)
|
void CBPTC19696::bitsToByteBE(bool* bits, uint8_t& byte)
|
||||||
{
|
{
|
||||||
assert(bits != NULL);
|
assert(bits != NULL);
|
||||||
|
|
||||||
|
@ -100,7 +100,7 @@ void CBPTC19696::bitsToByteBE(bool* bits, unsigned char& byte)
|
||||||
byte |= bits[7U] ? 0x01U : 0x00U;
|
byte |= bits[7U] ? 0x01U : 0x00U;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CBPTC19696::decodeExtractBinary(const unsigned char* in)
|
void CBPTC19696::decodeExtractBinary(const uint8_t* in)
|
||||||
{
|
{
|
||||||
// First block
|
// First block
|
||||||
byteToBitsBE(in[0U], m_rawData + 0U);
|
byteToBitsBE(in[0U], m_rawData + 0U);
|
||||||
|
@ -141,13 +141,13 @@ void CBPTC19696::decodeExtractBinary(const unsigned char* in)
|
||||||
// Deinterleave the raw data
|
// Deinterleave the raw data
|
||||||
void CBPTC19696::decodeDeInterleave()
|
void CBPTC19696::decodeDeInterleave()
|
||||||
{
|
{
|
||||||
for (unsigned int i = 0U; i < 196U; i++)
|
for (uint32_t i = 0U; i < 196U; i++)
|
||||||
m_deInterData[i] = false;
|
m_deInterData[i] = false;
|
||||||
|
|
||||||
// The first bit is R(3) which is not used so can be ignored
|
// The first bit is R(3) which is not used so can be ignored
|
||||||
for (unsigned int a = 0U; a < 196U; a++) {
|
for (uint32_t a = 0U; a < 196U; a++) {
|
||||||
// Calculate the interleave sequence
|
// Calculate the interleave sequence
|
||||||
unsigned int interleaveSequence = (a * 181U) % 196U;
|
uint32_t interleaveSequence = (a * 181U) % 196U;
|
||||||
// Shuffle the data
|
// Shuffle the data
|
||||||
m_deInterData[a] = m_rawData[interleaveSequence];
|
m_deInterData[a] = m_rawData[interleaveSequence];
|
||||||
}
|
}
|
||||||
|
@ -157,22 +157,22 @@ void CBPTC19696::decodeDeInterleave()
|
||||||
void CBPTC19696::decodeErrorCheck()
|
void CBPTC19696::decodeErrorCheck()
|
||||||
{
|
{
|
||||||
bool fixing;
|
bool fixing;
|
||||||
unsigned int count = 0U;
|
uint32_t count = 0U;
|
||||||
do {
|
do {
|
||||||
fixing = false;
|
fixing = false;
|
||||||
|
|
||||||
// Run through each of the 15 columns
|
// Run through each of the 15 columns
|
||||||
bool col[13U];
|
bool col[13U];
|
||||||
for (unsigned int c = 0U; c < 15U; c++) {
|
for (uint32_t c = 0U; c < 15U; c++) {
|
||||||
unsigned int pos = c + 1U;
|
uint32_t pos = c + 1U;
|
||||||
for (unsigned int a = 0U; a < 13U; a++) {
|
for (uint32_t a = 0U; a < 13U; a++) {
|
||||||
col[a] = m_deInterData[pos];
|
col[a] = m_deInterData[pos];
|
||||||
pos = pos + 15U;
|
pos = pos + 15U;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CHamming::decode1393(col)) {
|
if (CHamming::decode1393(col)) {
|
||||||
unsigned int pos = c + 1U;
|
uint32_t pos = c + 1U;
|
||||||
for (unsigned int a = 0U; a < 13U; a++) {
|
for (uint32_t a = 0U; a < 13U; a++) {
|
||||||
m_deInterData[pos] = col[a];
|
m_deInterData[pos] = col[a];
|
||||||
pos = pos + 15U;
|
pos = pos + 15U;
|
||||||
}
|
}
|
||||||
|
@ -182,8 +182,8 @@ void CBPTC19696::decodeErrorCheck()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Run through each of the 9 rows containing data
|
// Run through each of the 9 rows containing data
|
||||||
for (unsigned int r = 0U; r < 9U; r++) {
|
for (uint32_t r = 0U; r < 9U; r++) {
|
||||||
unsigned int pos = (r * 15U) + 1U;
|
uint32_t pos = (r * 15U) + 1U;
|
||||||
if (CHamming::decode15113_2(m_deInterData + pos))
|
if (CHamming::decode15113_2(m_deInterData + pos))
|
||||||
fixing = true;
|
fixing = true;
|
||||||
}
|
}
|
||||||
|
@ -193,36 +193,37 @@ void CBPTC19696::decodeErrorCheck()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Extract the 96 bits of payload
|
// Extract the 96 bits of payload
|
||||||
void CBPTC19696::decodeExtractData(unsigned char* data)
|
void CBPTC19696::decodeExtractData(uint8_t* data)
|
||||||
{
|
{
|
||||||
bool bData[96U];
|
bool bData[96U];
|
||||||
unsigned int pos = 0U;
|
uint32_t pos = 0U;
|
||||||
for (unsigned int a = 4U; a <= 11U; a++, pos++)
|
for(uint32_t a = 4U; a <= 11U; a++, pos++){
|
||||||
bData[pos] = m_deInterData[a];
|
bData[pos] = m_deInterData[a];
|
||||||
|
}
|
||||||
for (unsigned int a = 16U; a <= 26U; a++, pos++)
|
for(uint32_t a = 16U; a <= 26U; a++, pos++){
|
||||||
bData[pos] = m_deInterData[a];
|
bData[pos] = m_deInterData[a];
|
||||||
|
}
|
||||||
for (unsigned int a = 31U; a <= 41U; a++, pos++)
|
for(uint32_t a = 31U; a <= 41U; a++, pos++){
|
||||||
bData[pos] = m_deInterData[a];
|
bData[pos] = m_deInterData[a];
|
||||||
|
}
|
||||||
for (unsigned int a = 46U; a <= 56U; a++, pos++)
|
for(uint32_t a = 46U; a <= 56U; a++, pos++){
|
||||||
bData[pos] = m_deInterData[a];
|
bData[pos] = m_deInterData[a];
|
||||||
|
}
|
||||||
for (unsigned int a = 61U; a <= 71U; a++, pos++)
|
for(uint32_t a = 61U; a <= 71U; a++, pos++){
|
||||||
bData[pos] = m_deInterData[a];
|
bData[pos] = m_deInterData[a];
|
||||||
|
}
|
||||||
for (unsigned int a = 76U; a <= 86U; a++, pos++)
|
for(uint32_t a = 76U; a <= 86U; a++, pos++){
|
||||||
bData[pos] = m_deInterData[a];
|
bData[pos] = m_deInterData[a];
|
||||||
|
}
|
||||||
for (unsigned int a = 91U; a <= 101U; a++, pos++)
|
for(uint32_t a = 91U; a <= 101U; a++, pos++){
|
||||||
bData[pos] = m_deInterData[a];
|
bData[pos] = m_deInterData[a];
|
||||||
|
}
|
||||||
for (unsigned int a = 106U; a <= 116U; a++, pos++)
|
for(uint32_t a = 106U; a <= 116U; a++, pos++){
|
||||||
bData[pos] = m_deInterData[a];
|
bData[pos] = m_deInterData[a];
|
||||||
|
}
|
||||||
for (unsigned int a = 121U; a <= 131U; a++, pos++)
|
for(uint32_t a = 121U; a <= 131U; a++, pos++){
|
||||||
bData[pos] = m_deInterData[a];
|
bData[pos] = m_deInterData[a];
|
||||||
|
}
|
||||||
|
|
||||||
bitsToByteBE(bData + 0U, data[0U]);
|
bitsToByteBE(bData + 0U, data[0U]);
|
||||||
bitsToByteBE(bData + 8U, data[1U]);
|
bitsToByteBE(bData + 8U, data[1U]);
|
||||||
|
@ -239,7 +240,7 @@ void CBPTC19696::decodeExtractData(unsigned char* data)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Extract the 96 bits of payload
|
// Extract the 96 bits of payload
|
||||||
void CBPTC19696::encodeExtractData(const unsigned char* in)
|
void CBPTC19696::encodeExtractData(const uint8_t* in)
|
||||||
{
|
{
|
||||||
bool bData[96U];
|
bool bData[96U];
|
||||||
byteToBitsBE(in[0U], bData + 0U);
|
byteToBitsBE(in[0U], bData + 0U);
|
||||||
|
@ -255,35 +256,35 @@ void CBPTC19696::encodeExtractData(const unsigned char* in)
|
||||||
byteToBitsBE(in[10U], bData + 80U);
|
byteToBitsBE(in[10U], bData + 80U);
|
||||||
byteToBitsBE(in[11U], bData + 88U);
|
byteToBitsBE(in[11U], bData + 88U);
|
||||||
|
|
||||||
for (unsigned int i = 0U; i < 196U; i++)
|
for (uint32_t i = 0U; i < 196U; i++)
|
||||||
m_deInterData[i] = false;
|
m_deInterData[i] = false;
|
||||||
|
|
||||||
unsigned int pos = 0U;
|
uint32_t pos = 0U;
|
||||||
for (unsigned int a = 4U; a <= 11U; a++, pos++)
|
for (uint32_t a = 4U; a <= 11U; a++, pos++)
|
||||||
m_deInterData[a] = bData[pos];
|
m_deInterData[a] = bData[pos];
|
||||||
|
|
||||||
for (unsigned int a = 16U; a <= 26U; a++, pos++)
|
for (uint32_t a = 16U; a <= 26U; a++, pos++)
|
||||||
m_deInterData[a] = bData[pos];
|
m_deInterData[a] = bData[pos];
|
||||||
|
|
||||||
for (unsigned int a = 31U; a <= 41U; a++, pos++)
|
for (uint32_t a = 31U; a <= 41U; a++, pos++)
|
||||||
m_deInterData[a] = bData[pos];
|
m_deInterData[a] = bData[pos];
|
||||||
|
|
||||||
for (unsigned int a = 46U; a <= 56U; a++, pos++)
|
for (uint32_t a = 46U; a <= 56U; a++, pos++)
|
||||||
m_deInterData[a] = bData[pos];
|
m_deInterData[a] = bData[pos];
|
||||||
|
|
||||||
for (unsigned int a = 61U; a <= 71U; a++, pos++)
|
for (uint32_t a = 61U; a <= 71U; a++, pos++)
|
||||||
m_deInterData[a] = bData[pos];
|
m_deInterData[a] = bData[pos];
|
||||||
|
|
||||||
for (unsigned int a = 76U; a <= 86U; a++, pos++)
|
for (uint32_t a = 76U; a <= 86U; a++, pos++)
|
||||||
m_deInterData[a] = bData[pos];
|
m_deInterData[a] = bData[pos];
|
||||||
|
|
||||||
for (unsigned int a = 91U; a <= 101U; a++, pos++)
|
for (uint32_t a = 91U; a <= 101U; a++, pos++)
|
||||||
m_deInterData[a] = bData[pos];
|
m_deInterData[a] = bData[pos];
|
||||||
|
|
||||||
for (unsigned int a = 106U; a <= 116U; a++, pos++)
|
for (uint32_t a = 106U; a <= 116U; a++, pos++)
|
||||||
m_deInterData[a] = bData[pos];
|
m_deInterData[a] = bData[pos];
|
||||||
|
|
||||||
for (unsigned int a = 121U; a <= 131U; a++, pos++)
|
for (uint32_t a = 121U; a <= 131U; a++, pos++)
|
||||||
m_deInterData[a] = bData[pos];
|
m_deInterData[a] = bData[pos];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -292,16 +293,16 @@ void CBPTC19696::encodeErrorCheck()
|
||||||
{
|
{
|
||||||
|
|
||||||
// Run through each of the 9 rows containing data
|
// Run through each of the 9 rows containing data
|
||||||
for (unsigned int r = 0U; r < 9U; r++) {
|
for (uint32_t r = 0U; r < 9U; r++) {
|
||||||
unsigned int pos = (r * 15U) + 1U;
|
uint32_t pos = (r * 15U) + 1U;
|
||||||
CHamming::encode15113_2(m_deInterData + pos);
|
CHamming::encode15113_2(m_deInterData + pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Run through each of the 15 columns
|
// Run through each of the 15 columns
|
||||||
bool col[13U];
|
bool col[13U];
|
||||||
for (unsigned int c = 0U; c < 15U; c++) {
|
for (uint32_t c = 0U; c < 15U; c++) {
|
||||||
unsigned int pos = c + 1U;
|
uint32_t pos = c + 1U;
|
||||||
for (unsigned int a = 0U; a < 13U; a++) {
|
for (uint32_t a = 0U; a < 13U; a++) {
|
||||||
col[a] = m_deInterData[pos];
|
col[a] = m_deInterData[pos];
|
||||||
pos = pos + 15U;
|
pos = pos + 15U;
|
||||||
}
|
}
|
||||||
|
@ -309,7 +310,7 @@ void CBPTC19696::encodeErrorCheck()
|
||||||
CHamming::encode1393(col);
|
CHamming::encode1393(col);
|
||||||
|
|
||||||
pos = c + 1U;
|
pos = c + 1U;
|
||||||
for (unsigned int a = 0U; a < 13U; a++) {
|
for (uint32_t a = 0U; a < 13U; a++) {
|
||||||
m_deInterData[pos] = col[a];
|
m_deInterData[pos] = col[a];
|
||||||
pos = pos + 15U;
|
pos = pos + 15U;
|
||||||
}
|
}
|
||||||
|
@ -319,19 +320,19 @@ void CBPTC19696::encodeErrorCheck()
|
||||||
// Interleave the raw data
|
// Interleave the raw data
|
||||||
void CBPTC19696::encodeInterleave()
|
void CBPTC19696::encodeInterleave()
|
||||||
{
|
{
|
||||||
for (unsigned int i = 0U; i < 196U; i++)
|
for (uint32_t i = 0U; i < 196U; i++)
|
||||||
m_rawData[i] = false;
|
m_rawData[i] = false;
|
||||||
|
|
||||||
// The first bit is R(3) which is not used so can be ignored
|
// The first bit is R(3) which is not used so can be ignored
|
||||||
for (unsigned int a = 0U; a < 196U; a++) {
|
for (uint32_t a = 0U; a < 196U; a++) {
|
||||||
// Calculate the interleave sequence
|
// Calculate the interleave sequence
|
||||||
unsigned int interleaveSequence = (a * 181U) % 196U;
|
uint32_t interleaveSequence = (a * 181U) % 196U;
|
||||||
// Unshuffle the data
|
// Unshuffle the data
|
||||||
m_rawData[interleaveSequence] = m_deInterData[a];
|
m_rawData[interleaveSequence] = m_deInterData[a];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CBPTC19696::encodeExtractBinary(unsigned char* data)
|
void CBPTC19696::encodeExtractBinary(uint8_t* data)
|
||||||
{
|
{
|
||||||
// First block
|
// First block
|
||||||
bitsToByteBE(m_rawData + 0U, data[0U]);
|
bitsToByteBE(m_rawData + 0U, data[0U]);
|
||||||
|
@ -348,7 +349,7 @@ void CBPTC19696::encodeExtractBinary(unsigned char* data)
|
||||||
bitsToByteBE(m_rawData + 88U, data[11U]);
|
bitsToByteBE(m_rawData + 88U, data[11U]);
|
||||||
|
|
||||||
// Handle the two bits
|
// Handle the two bits
|
||||||
unsigned char byte;
|
uint8_t byte;
|
||||||
bitsToByteBE(m_rawData + 96U, byte);
|
bitsToByteBE(m_rawData + 96U, byte);
|
||||||
data[12U] = (data[12U] & 0x3FU) | ((byte >> 0) & 0xC0U);
|
data[12U] = (data[12U] & 0x3FU) | ((byte >> 0) & 0xC0U);
|
||||||
data[20U] = (data[20U] & 0xFCU) | ((byte >> 4) & 0x03U);
|
data[20U] = (data[20U] & 0xFCU) | ((byte >> 4) & 0x03U);
|
||||||
|
|
17
cbptc19696.h
17
cbptc19696.h
|
@ -18,6 +18,7 @@
|
||||||
|
|
||||||
#if !defined(BPTC19696_H)
|
#if !defined(BPTC19696_H)
|
||||||
#define BPTC19696_H
|
#define BPTC19696_H
|
||||||
|
#include <cinttypes>
|
||||||
|
|
||||||
class CBPTC19696
|
class CBPTC19696
|
||||||
{
|
{
|
||||||
|
@ -25,25 +26,25 @@ public:
|
||||||
CBPTC19696();
|
CBPTC19696();
|
||||||
~CBPTC19696();
|
~CBPTC19696();
|
||||||
|
|
||||||
void decode(const unsigned char* in, unsigned char* out);
|
void decode(const uint8_t* in, uint8_t* out);
|
||||||
|
|
||||||
void encode(const unsigned char* in, unsigned char* out);
|
void encode(const uint8_t* in, uint8_t* out);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool m_rawData[196];
|
bool m_rawData[196];
|
||||||
bool m_deInterData[196];
|
bool m_deInterData[196];
|
||||||
|
|
||||||
void decodeExtractBinary(const unsigned char* in);
|
void decodeExtractBinary(const uint8_t* in);
|
||||||
void decodeErrorCheck();
|
void decodeErrorCheck();
|
||||||
void decodeDeInterleave();
|
void decodeDeInterleave();
|
||||||
void decodeExtractData(unsigned char* data);
|
void decodeExtractData(uint8_t* data);
|
||||||
|
|
||||||
void encodeExtractData(const unsigned char* in);
|
void encodeExtractData(const uint8_t* in);
|
||||||
void encodeInterleave();
|
void encodeInterleave();
|
||||||
void encodeErrorCheck();
|
void encodeErrorCheck();
|
||||||
void encodeExtractBinary(unsigned char* data);
|
void encodeExtractBinary(uint8_t* data);
|
||||||
void byteToBitsBE(unsigned char byte, bool* bits);
|
void byteToBitsBE(uint8_t byte, bool* bits);
|
||||||
void bitsToByteBE(bool* bits, unsigned char& byte);
|
void bitsToByteBE(bool* bits, uint8_t& byte);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
14
dcscodec.cpp
14
dcscodec.cpp
|
@ -18,14 +18,10 @@
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include "dcscodec.h"
|
#include "dcscodec.h"
|
||||||
#include "CRCenc.h"
|
#include "CRCenc.h"
|
||||||
|
#include "MMDVMDefines.h"
|
||||||
|
|
||||||
//#define DEBUG
|
//#define DEBUG
|
||||||
|
|
||||||
const unsigned char MMDVM_DSTAR_HEADER = 0x10U;
|
|
||||||
const unsigned char MMDVM_DSTAR_DATA = 0x11U;
|
|
||||||
const unsigned char MMDVM_DSTAR_LOST = 0x12U;
|
|
||||||
const unsigned char MMDVM_DSTAR_EOT = 0x13U;
|
|
||||||
|
|
||||||
DCSCodec::DCSCodec(QString callsign, QString hostname, char module, QString host, int port, bool ipv6, QString vocoder, QString modem, QString audioin, QString audioout) :
|
DCSCodec::DCSCodec(QString callsign, QString hostname, char module, QString host, int port, bool ipv6, QString vocoder, QString modem, QString audioin, QString audioout) :
|
||||||
Codec(callsign, module, hostname, host, port, ipv6, vocoder, modem, audioin, audioout)
|
Codec(callsign, module, hostname, host, port, ipv6, vocoder, modem, audioin, audioout)
|
||||||
{
|
{
|
||||||
|
@ -133,7 +129,7 @@ void DCSCodec::process_udp()
|
||||||
|
|
||||||
if(m_modem){
|
if(m_modem){
|
||||||
uint8_t out[44];
|
uint8_t out[44];
|
||||||
out[0] = 0xe0;
|
out[0] = MMDVM_FRAME_START;
|
||||||
out[1] = 44;
|
out[1] = 44;
|
||||||
out[2] = MMDVM_DSTAR_HEADER;
|
out[2] = MMDVM_DSTAR_HEADER;
|
||||||
out[3] = 0x40;
|
out[3] = 0x40;
|
||||||
|
@ -217,14 +213,14 @@ void DCSCodec::process_udp()
|
||||||
emit update(m_modeinfo);
|
emit update(m_modeinfo);
|
||||||
m_modeinfo.streamid = 0;
|
m_modeinfo.streamid = 0;
|
||||||
if(m_modem){
|
if(m_modem){
|
||||||
m_rxmodemq.append(0xe0);
|
m_rxmodemq.append(MMDVM_FRAME_START);
|
||||||
m_rxmodemq.append(3);
|
m_rxmodemq.append(3);
|
||||||
m_rxmodemq.append(MMDVM_DSTAR_EOT);
|
m_rxmodemq.append(MMDVM_DSTAR_EOT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(m_modeinfo.stream_state == STREAMING){
|
else if(m_modeinfo.stream_state == STREAMING){
|
||||||
if(m_modem){
|
if(m_modem){
|
||||||
m_rxmodemq.append(0xe0);
|
m_rxmodemq.append(MMDVM_FRAME_START);
|
||||||
m_rxmodemq.append(15);
|
m_rxmodemq.append(15);
|
||||||
m_rxmodemq.append(MMDVM_DSTAR_DATA);
|
m_rxmodemq.append(MMDVM_DSTAR_DATA);
|
||||||
for(int i = 0; i < 12; ++i){
|
for(int i = 0; i < 12; ++i){
|
||||||
|
@ -568,7 +564,7 @@ void DCSCodec::process_rx_data()
|
||||||
if(m_rxmodemq.size() > 2){
|
if(m_rxmodemq.size() > 2){
|
||||||
QByteArray out;
|
QByteArray out;
|
||||||
int s = m_rxmodemq[1];
|
int s = m_rxmodemq[1];
|
||||||
if((m_rxmodemq[0] == 0xe0) && (m_rxmodemq.size() >= s)){
|
if((m_rxmodemq[0] == MMDVM_FRAME_START) && (m_rxmodemq.size() >= s)){
|
||||||
for(int i = 0; i < s; ++i){
|
for(int i = 0; i < s; ++i){
|
||||||
out.append(m_rxmodemq.dequeue());
|
out.append(m_rxmodemq.dequeue());
|
||||||
}
|
}
|
||||||
|
|
15
dmrcodec.cpp
15
dmrcodec.cpp
|
@ -22,17 +22,10 @@
|
||||||
#include "crs129.h"
|
#include "crs129.h"
|
||||||
#include "SHA256.h"
|
#include "SHA256.h"
|
||||||
#include "CRCenc.h"
|
#include "CRCenc.h"
|
||||||
|
#include "MMDVMDefines.h"
|
||||||
|
|
||||||
//#define DEBUG
|
//#define DEBUG
|
||||||
|
|
||||||
const unsigned char MMDVM_DMR_DATA1 = 0x18U;
|
|
||||||
const unsigned char MMDVM_DMR_LOST1 = 0x19U;
|
|
||||||
const unsigned char MMDVM_DMR_DATA2 = 0x1AU;
|
|
||||||
const unsigned char MMDVM_DMR_LOST2 = 0x1BU;
|
|
||||||
const unsigned char MMDVM_DMR_SHORTLC = 0x1CU;
|
|
||||||
const unsigned char MMDVM_DMR_START = 0x1DU;
|
|
||||||
const unsigned char MMDVM_DMR_ABORT = 0x1EU;
|
|
||||||
|
|
||||||
const uint32_t ENCODING_TABLE_1676[] =
|
const uint32_t ENCODING_TABLE_1676[] =
|
||||||
{0x0000U, 0x0273U, 0x04E5U, 0x0696U, 0x09C9U, 0x0BBAU, 0x0D2CU, 0x0F5FU, 0x11E2U, 0x1391U, 0x1507U, 0x1774U,
|
{0x0000U, 0x0273U, 0x04E5U, 0x0696U, 0x09C9U, 0x0BBAU, 0x0D2CU, 0x0F5FU, 0x11E2U, 0x1391U, 0x1507U, 0x1774U,
|
||||||
0x182BU, 0x1A58U, 0x1CCEU, 0x1EBDU, 0x21B7U, 0x23C4U, 0x2552U, 0x2721U, 0x287EU, 0x2A0DU, 0x2C9BU, 0x2EE8U,
|
0x182BU, 0x1A58U, 0x1CCEU, 0x1EBDU, 0x21B7U, 0x23C4U, 0x2552U, 0x2721U, 0x287EU, 0x2A0DU, 0x2C9BU, 0x2EE8U,
|
||||||
|
@ -221,7 +214,7 @@ void DMRCodec::process_udp()
|
||||||
qDebug() << "New DMR stream from " << m_modeinfo.srcid << " to " << m_modeinfo.dstid;
|
qDebug() << "New DMR stream from " << m_modeinfo.srcid << " to " << m_modeinfo.dstid;
|
||||||
}
|
}
|
||||||
if(m_modem){
|
if(m_modem){
|
||||||
m_rxmodemq.append(0xe0);
|
m_rxmodemq.append(MMDVM_FRAME_START);
|
||||||
m_rxmodemq.append(0x25);
|
m_rxmodemq.append(0x25);
|
||||||
m_rxmodemq.append(MMDVM_DMR_DATA2);
|
m_rxmodemq.append(MMDVM_DMR_DATA2);
|
||||||
m_rxmodemq.append(t);
|
m_rxmodemq.append(t);
|
||||||
|
@ -274,7 +267,7 @@ void DMRCodec::process_udp()
|
||||||
uint8_t t = ((uint8_t)buf.data()[15] & 0x0f);
|
uint8_t t = ((uint8_t)buf.data()[15] & 0x0f);
|
||||||
if(!t) t = 0x20;
|
if(!t) t = 0x20;
|
||||||
|
|
||||||
m_rxmodemq.append(0xe0);
|
m_rxmodemq.append(MMDVM_FRAME_START);
|
||||||
m_rxmodemq.append(0x25);
|
m_rxmodemq.append(0x25);
|
||||||
m_rxmodemq.append(MMDVM_DMR_DATA2);
|
m_rxmodemq.append(MMDVM_DMR_DATA2);
|
||||||
m_rxmodemq.append(t);
|
m_rxmodemq.append(t);
|
||||||
|
@ -939,7 +932,7 @@ void DMRCodec::process_rx_data()
|
||||||
if((m_rxmodemq.size() > 2) && (++cnt >= 3)){
|
if((m_rxmodemq.size() > 2) && (++cnt >= 3)){
|
||||||
QByteArray out;
|
QByteArray out;
|
||||||
int s = m_rxmodemq[1];
|
int s = m_rxmodemq[1];
|
||||||
if((m_rxmodemq[0] == 0xe0) && (m_rxmodemq.size() >= s)){
|
if((m_rxmodemq[0] == MMDVM_FRAME_START) && (m_rxmodemq.size() >= s)){
|
||||||
for(int i = 0; i < s; ++i){
|
for(int i = 0; i < s; ++i){
|
||||||
out.append(m_rxmodemq.dequeue());
|
out.append(m_rxmodemq.dequeue());
|
||||||
}
|
}
|
||||||
|
|
23
m17codec.cpp
23
m17codec.cpp
|
@ -18,6 +18,7 @@
|
||||||
|
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include "MMDVMDefines.h"
|
||||||
#include "m17codec.h"
|
#include "m17codec.h"
|
||||||
#include "M17Defines.h"
|
#include "M17Defines.h"
|
||||||
#include "M17Convolution.h"
|
#include "M17Convolution.h"
|
||||||
|
@ -411,9 +412,9 @@ void M17Codec::send_modem_data(QByteArray d)
|
||||||
interleave(txframe, tmp);
|
interleave(txframe, tmp);
|
||||||
decorrelate(tmp, txframe);
|
decorrelate(tmp, txframe);
|
||||||
|
|
||||||
m_rxmodemq.append(0xe0);
|
m_rxmodemq.append(MMDVM_FRAME_START);
|
||||||
m_rxmodemq.append(M17_FRAME_LENGTH_BYTES + 4);
|
m_rxmodemq.append(M17_FRAME_LENGTH_BYTES + 4);
|
||||||
m_rxmodemq.append(0x45);
|
m_rxmodemq.append(MMDVM_M17_LINK_SETUP);
|
||||||
m_rxmodemq.append('\x00');
|
m_rxmodemq.append('\x00');
|
||||||
|
|
||||||
for(uint32_t i = 0; i < M17_FRAME_LENGTH_BYTES; ++i){
|
for(uint32_t i = 0; i < M17_FRAME_LENGTH_BYTES; ++i){
|
||||||
|
@ -444,9 +445,9 @@ void M17Codec::send_modem_data(QByteArray d)
|
||||||
interleave(txframe, tmp);
|
interleave(txframe, tmp);
|
||||||
decorrelate(tmp, txframe);
|
decorrelate(tmp, txframe);
|
||||||
|
|
||||||
m_rxmodemq.append(0xe0);
|
m_rxmodemq.append(MMDVM_FRAME_START);
|
||||||
m_rxmodemq.append(M17_FRAME_LENGTH_BYTES + 4);
|
m_rxmodemq.append(M17_FRAME_LENGTH_BYTES + 4);
|
||||||
m_rxmodemq.append(0x46);
|
m_rxmodemq.append(MMDVM_M17_STREAM);
|
||||||
m_rxmodemq.append('\x00');
|
m_rxmodemq.append('\x00');
|
||||||
|
|
||||||
for(uint32_t i = 0; i < M17_FRAME_LENGTH_BYTES; ++i){
|
for(uint32_t i = 0; i < M17_FRAME_LENGTH_BYTES; ++i){
|
||||||
|
@ -470,13 +471,13 @@ void M17Codec::process_modem_data(QByteArray d)
|
||||||
}
|
}
|
||||||
uint8_t *p = (uint8_t *)d.data();
|
uint8_t *p = (uint8_t *)d.data();
|
||||||
|
|
||||||
if((d.data()[2] == 0x45) || (d.data()[2] == 0x46)){
|
if((d.data()[2] == MMDVM_M17_LINK_SETUP) || (d.data()[2] == MMDVM_M17_STREAM)){
|
||||||
p += 4;
|
p += 4;
|
||||||
decorrelate(p, tmp);
|
decorrelate(p, tmp);
|
||||||
interleave(tmp, p);
|
interleave(tmp, p);
|
||||||
}
|
}
|
||||||
|
|
||||||
if((d.data()[2] == 0x48) || (d.data()[2] == 0x49)){
|
if((d.data()[2] == MMDVM_M17_LOST) || (d.data()[2] == MMDVM_M17_EOT)){
|
||||||
txstreamid = 0;
|
txstreamid = 0;
|
||||||
if(m_modeinfo.host == "MMDVM_DIRECT"){
|
if(m_modeinfo.host == "MMDVM_DIRECT"){
|
||||||
m_modeinfo.streamid = 0;
|
m_modeinfo.streamid = 0;
|
||||||
|
@ -484,9 +485,9 @@ void M17Codec::process_modem_data(QByteArray d)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else if(d.data()[2] == 0x45){
|
else if(d.data()[2] == MMDVM_M17_LINK_SETUP){
|
||||||
::memset(lsf, 0x00U, M17_LSF_LENGTH_BYTES);
|
::memset(lsf, 0x00U, M17_LSF_LENGTH_BYTES);
|
||||||
uint32_t ber = conv.decodeLinkSetup(p + M17_SYNC_LENGTH_BYTES, lsf);
|
conv.decodeLinkSetup(p + M17_SYNC_LENGTH_BYTES, lsf);
|
||||||
bool valid = checkCRC16(lsf, M17_LSF_LENGTH_BYTES);
|
bool valid = checkCRC16(lsf, M17_LSF_LENGTH_BYTES);
|
||||||
txstreamid = static_cast<uint16_t>((::rand() & 0xFFFF));
|
txstreamid = static_cast<uint16_t>((::rand() & 0xFFFF));
|
||||||
qDebug() << "LSF valid == " << valid;
|
qDebug() << "LSF valid == " << valid;
|
||||||
|
@ -501,9 +502,9 @@ void M17Codec::process_modem_data(QByteArray d)
|
||||||
m_modeinfo.src = QString((char *)cs);
|
m_modeinfo.src = QString((char *)cs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(d.data()[2] == 0x46){
|
else if(d.data()[2] == MMDVM_M17_STREAM){
|
||||||
uint8_t frame[M17_FN_LENGTH_BYTES + M17_PAYLOAD_LENGTH_BYTES];
|
uint8_t frame[M17_FN_LENGTH_BYTES + M17_PAYLOAD_LENGTH_BYTES];
|
||||||
uint32_t errors = conv.decodeData(p + M17_SYNC_LENGTH_BYTES + M17_LICH_FRAGMENT_FEC_LENGTH_BYTES, frame);
|
conv.decodeData(p + M17_SYNC_LENGTH_BYTES + M17_LICH_FRAGMENT_FEC_LENGTH_BYTES, frame);
|
||||||
//uint16_t fn = (frame[0U] << 8) + (frame[1U] << 0);
|
//uint16_t fn = (frame[0U] << 8) + (frame[1U] << 0);
|
||||||
|
|
||||||
uint8_t netframe[M17_LSF_LENGTH_BYTES + M17_FN_LENGTH_BYTES + M17_PAYLOAD_LENGTH_BYTES + M17_CRC_LENGTH_BYTES];
|
uint8_t netframe[M17_LSF_LENGTH_BYTES + M17_FN_LENGTH_BYTES + M17_PAYLOAD_LENGTH_BYTES + M17_CRC_LENGTH_BYTES];
|
||||||
|
@ -806,7 +807,7 @@ void M17Codec::process_rx_data()
|
||||||
if((m_rxmodemq.size() > 2) && (++cnt >= 2)){
|
if((m_rxmodemq.size() > 2) && (++cnt >= 2)){
|
||||||
QByteArray out;
|
QByteArray out;
|
||||||
int s = m_rxmodemq[1];
|
int s = m_rxmodemq[1];
|
||||||
if((m_rxmodemq[0] == 0xe0) && (m_rxmodemq.size() >= s)){
|
if((m_rxmodemq[0] == MMDVM_FRAME_START) && (m_rxmodemq.size() >= s)){
|
||||||
for(int i = 0; i < s; ++i){
|
for(int i = 0; i < s; ++i){
|
||||||
out.append(m_rxmodemq.dequeue());
|
out.append(m_rxmodemq.dequeue());
|
||||||
}
|
}
|
||||||
|
|
|
@ -233,9 +233,9 @@ void SerialAMBE::encode(int16_t *audio)
|
||||||
packet [(i*2)+7] = (audio[i] >> 8) & 0xff;
|
packet [(i*2)+7] = (audio[i] >> 8) & 0xff;
|
||||||
packet [(i*2)+8] = audio[i] & 0xff;
|
packet [(i*2)+8] = audio[i] & 0xff;
|
||||||
}
|
}
|
||||||
int r = m_serial->write((char *)packet, 327);
|
m_serial->write((char *)packet, 327);
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
fprintf(stderr, "SENDHW:%d: ", r);
|
fprintf(stderr, "SENDHW: ");
|
||||||
for(int i = 0; i < 326; ++i){
|
for(int i = 0; i < 326; ++i){
|
||||||
//if((d.data()[i] == 0x61) && (data.data()[i+1] == 0x01) && (data.data()[i+2] == 0x42) && (data.data()[i+3] == 0x02)){
|
//if((d.data()[i] == 0x61) && (data.data()[i+1] == 0x01) && (data.data()[i+2] == 0x42) && (data.data()[i+3] == 0x02)){
|
||||||
// i+= 6;
|
// i+= 6;
|
||||||
|
|
113
serialmodem.cpp
113
serialmodem.cpp
|
@ -19,120 +19,9 @@
|
||||||
#include <QThread>
|
#include <QThread>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include "serialmodem.h"
|
#include "serialmodem.h"
|
||||||
|
#include "MMDVMDefines.h"
|
||||||
|
|
||||||
//#define DEBUGHW
|
//#define DEBUGHW
|
||||||
#define ENDLINE "\n"
|
|
||||||
|
|
||||||
const unsigned char MODE_IDLE = 0U;
|
|
||||||
const unsigned char MODE_DSTAR = 1U;
|
|
||||||
const unsigned char MODE_DMR = 2U;
|
|
||||||
const unsigned char MODE_YSF = 3U;
|
|
||||||
const unsigned char MODE_P25 = 4U;
|
|
||||||
const unsigned char MODE_NXDN = 5U;
|
|
||||||
const unsigned char MODE_M17 = 7U;
|
|
||||||
const unsigned char MODE_CW = 98U;
|
|
||||||
const unsigned char MODE_LOCKOUT = 99U;
|
|
||||||
const unsigned char MODE_ERROR = 100U;
|
|
||||||
|
|
||||||
const unsigned char TAG_HEADER = 0x00U;
|
|
||||||
const unsigned char TAG_DATA = 0x01U;
|
|
||||||
const unsigned char TAG_LOST = 0x02U;
|
|
||||||
const unsigned char TAG_EOT = 0x03U;
|
|
||||||
const unsigned char TAG_NODATA = 0x04U;
|
|
||||||
|
|
||||||
enum HW_TYPE {
|
|
||||||
HWT_MMDVM,
|
|
||||||
HWT_DVMEGA,
|
|
||||||
HWT_MMDVM_ZUMSPOT,
|
|
||||||
HWT_MMDVM_HS_HAT,
|
|
||||||
HWT_NANO_HOTSPOT,
|
|
||||||
HWT_MMDVM_HS,
|
|
||||||
HWT_UNKNOWN
|
|
||||||
};
|
|
||||||
|
|
||||||
enum RPT_RF_STATE {
|
|
||||||
RS_RF_LISTENING,
|
|
||||||
RS_RF_LATE_ENTRY,
|
|
||||||
RS_RF_AUDIO,
|
|
||||||
RS_RF_DATA,
|
|
||||||
RS_RF_REJECTED,
|
|
||||||
RS_RF_INVALID
|
|
||||||
};
|
|
||||||
|
|
||||||
enum RPT_NET_STATE {
|
|
||||||
RS_NET_IDLE,
|
|
||||||
RS_NET_AUDIO,
|
|
||||||
RS_NET_DATA
|
|
||||||
};
|
|
||||||
|
|
||||||
enum B_STATUS {
|
|
||||||
BS_NO_DATA,
|
|
||||||
BS_DATA,
|
|
||||||
BS_MISSING
|
|
||||||
};
|
|
||||||
|
|
||||||
const unsigned char MMDVM_FRAME_START = 0xE0U;
|
|
||||||
|
|
||||||
const unsigned char MMDVM_GET_VERSION = 0x00U;
|
|
||||||
const unsigned char MMDVM_GET_STATUS = 0x01U;
|
|
||||||
const unsigned char MMDVM_SET_CONFIG = 0x02U;
|
|
||||||
const unsigned char MMDVM_SET_MODE = 0x03U;
|
|
||||||
const unsigned char MMDVM_SET_FREQ = 0x04U;
|
|
||||||
|
|
||||||
const unsigned char MMDVM_SEND_CWID = 0x0AU;
|
|
||||||
|
|
||||||
const unsigned char MMDVM_DSTAR_HEADER = 0x10U;
|
|
||||||
const unsigned char MMDVM_DSTAR_DATA = 0x11U;
|
|
||||||
const unsigned char MMDVM_DSTAR_LOST = 0x12U;
|
|
||||||
const unsigned char MMDVM_DSTAR_EOT = 0x13U;
|
|
||||||
|
|
||||||
const unsigned char MMDVM_DMR_DATA1 = 0x18U;
|
|
||||||
const unsigned char MMDVM_DMR_LOST1 = 0x19U;
|
|
||||||
const unsigned char MMDVM_DMR_DATA2 = 0x1AU;
|
|
||||||
const unsigned char MMDVM_DMR_LOST2 = 0x1BU;
|
|
||||||
const unsigned char MMDVM_DMR_SHORTLC = 0x1CU;
|
|
||||||
const unsigned char MMDVM_DMR_START = 0x1DU;
|
|
||||||
const unsigned char MMDVM_DMR_ABORT = 0x1EU;
|
|
||||||
|
|
||||||
const unsigned char MMDVM_YSF_DATA = 0x20U;
|
|
||||||
const unsigned char MMDVM_YSF_LOST = 0x21U;
|
|
||||||
|
|
||||||
const unsigned char MMDVM_P25_HDR = 0x30U;
|
|
||||||
const unsigned char MMDVM_P25_LDU = 0x31U;
|
|
||||||
const unsigned char MMDVM_P25_LOST = 0x32U;
|
|
||||||
|
|
||||||
const unsigned char MMDVM_NXDN_DATA = 0x40U;
|
|
||||||
const unsigned char MMDVM_NXDN_LOST = 0x41U;
|
|
||||||
|
|
||||||
const unsigned char MMDVM_M17_LINK_SETUP = 0x45U;
|
|
||||||
const unsigned char MMDVM_M17_STREAM = 0x46U;
|
|
||||||
const unsigned char MMDVM_M17_PACKET = 0x47U;
|
|
||||||
const unsigned char MMDVM_M17_LOST = 0x48U;
|
|
||||||
const unsigned char MMDVM_M17_EOT = 0x49U;
|
|
||||||
|
|
||||||
const unsigned char MMDVM_POCSAG_DATA = 0x50U;
|
|
||||||
|
|
||||||
const unsigned char MMDVM_FM_PARAMS1 = 0x60U;
|
|
||||||
const unsigned char MMDVM_FM_PARAMS2 = 0x61U;
|
|
||||||
const unsigned char MMDVM_FM_PARAMS3 = 0x62U;
|
|
||||||
|
|
||||||
const unsigned char MMDVM_ACK = 0x70U;
|
|
||||||
const unsigned char MMDVM_NAK = 0x7FU;
|
|
||||||
|
|
||||||
const unsigned char MMDVM_SERIAL = 0x80U;
|
|
||||||
|
|
||||||
const unsigned char MMDVM_TRANSPARENT = 0x90U;
|
|
||||||
const unsigned char MMDVM_QSO_INFO = 0x91U;
|
|
||||||
|
|
||||||
const unsigned char MMDVM_DEBUG1 = 0xF1U;
|
|
||||||
const unsigned char MMDVM_DEBUG2 = 0xF2U;
|
|
||||||
const unsigned char MMDVM_DEBUG3 = 0xF3U;
|
|
||||||
const unsigned char MMDVM_DEBUG4 = 0xF4U;
|
|
||||||
const unsigned char MMDVM_DEBUG5 = 0xF5U;
|
|
||||||
|
|
||||||
const unsigned int MAX_RESPONSES = 30U;
|
|
||||||
|
|
||||||
const unsigned int BUFFER_LENGTH = 2000U;
|
|
||||||
|
|
||||||
SerialModem::SerialModem(QString protocol)
|
SerialModem::SerialModem(QString protocol)
|
||||||
{
|
{
|
||||||
|
|
12
xrfcodec.cpp
12
xrfcodec.cpp
|
@ -19,14 +19,10 @@
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include "xrfcodec.h"
|
#include "xrfcodec.h"
|
||||||
#include "CRCenc.h"
|
#include "CRCenc.h"
|
||||||
|
#include "MMDVMDefines.h"
|
||||||
|
|
||||||
//#define DEBUG
|
//#define DEBUG
|
||||||
|
|
||||||
const unsigned char MMDVM_DSTAR_HEADER = 0x10U;
|
|
||||||
const unsigned char MMDVM_DSTAR_DATA = 0x11U;
|
|
||||||
const unsigned char MMDVM_DSTAR_LOST = 0x12U;
|
|
||||||
const unsigned char MMDVM_DSTAR_EOT = 0x13U;
|
|
||||||
|
|
||||||
XRFCodec::XRFCodec(QString callsign, QString hostname, char module, QString host, int port, bool ipv6, QString vocoder, QString modem, QString audioin, QString audioout) :
|
XRFCodec::XRFCodec(QString callsign, QString hostname, char module, QString host, int port, bool ipv6, QString vocoder, QString modem, QString audioin, QString audioout) :
|
||||||
Codec(callsign, module, hostname, host, port, ipv6, vocoder, modem, audioin, audioout)
|
Codec(callsign, module, hostname, host, port, ipv6, vocoder, modem, audioin, audioout)
|
||||||
{
|
{
|
||||||
|
@ -120,7 +116,7 @@ void XRFCodec::process_udp()
|
||||||
|
|
||||||
if(m_modem){
|
if(m_modem){
|
||||||
uint8_t out[44];
|
uint8_t out[44];
|
||||||
out[0] = 0xe0;
|
out[0] = MMDVM_FRAME_START;
|
||||||
out[1] = 44;
|
out[1] = 44;
|
||||||
out[2] = MMDVM_DSTAR_HEADER;
|
out[2] = MMDVM_DSTAR_HEADER;
|
||||||
out[3] = 0x40;
|
out[3] = 0x40;
|
||||||
|
@ -182,7 +178,7 @@ void XRFCodec::process_udp()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(m_modem){
|
else if(m_modem){
|
||||||
m_rxmodemq.append(0xe0);
|
m_rxmodemq.append(MMDVM_FRAME_START);
|
||||||
m_rxmodemq.append(15);
|
m_rxmodemq.append(15);
|
||||||
m_rxmodemq.append(MMDVM_DSTAR_DATA);
|
m_rxmodemq.append(MMDVM_DSTAR_DATA);
|
||||||
for(int i = 0; i < 12; ++i){
|
for(int i = 0; i < 12; ++i){
|
||||||
|
@ -593,7 +589,7 @@ void XRFCodec::process_rx_data()
|
||||||
if(m_rxmodemq.size() > 2){
|
if(m_rxmodemq.size() > 2){
|
||||||
QByteArray out;
|
QByteArray out;
|
||||||
int s = m_rxmodemq[1];
|
int s = m_rxmodemq[1];
|
||||||
if((m_rxmodemq[0] == 0xe0) && (m_rxmodemq.size() >= s)){
|
if((m_rxmodemq[0] == MMDVM_FRAME_START) && (m_rxmodemq.size() >= s)){
|
||||||
for(int i = 0; i < s; ++i){
|
for(int i = 0; i < s; ++i){
|
||||||
out.append(m_rxmodemq.dequeue());
|
out.append(m_rxmodemq.dequeue());
|
||||||
}
|
}
|
||||||
|
|
11
ysfcodec.cpp
11
ysfcodec.cpp
|
@ -20,6 +20,7 @@
|
||||||
#include "CRCenc.h"
|
#include "CRCenc.h"
|
||||||
#include "Golay24128.h"
|
#include "Golay24128.h"
|
||||||
#include "chamming.h"
|
#include "chamming.h"
|
||||||
|
#include "MMDVMDefines.h"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
|
@ -193,9 +194,9 @@ void YSFCodec::process_udp()
|
||||||
m_modeinfo.gw = QString(ysftag);
|
m_modeinfo.gw = QString(ysftag);
|
||||||
p_data = (uint8_t *)buf.data() + 35;
|
p_data = (uint8_t *)buf.data() + 35;
|
||||||
if(m_modem){
|
if(m_modem){
|
||||||
m_rxmodemq.append(0xe0);
|
m_rxmodemq.append(MMDVM_FRAME_START);
|
||||||
m_rxmodemq.append(124);
|
m_rxmodemq.append(124);
|
||||||
m_rxmodemq.append(0x20);
|
m_rxmodemq.append(MMDVM_YSF_DATA);
|
||||||
m_rxmodemq.append('\x00');
|
m_rxmodemq.append('\x00');
|
||||||
|
|
||||||
for(int i = 0; i < 120; ++i){
|
for(int i = 0; i < 120; ++i){
|
||||||
|
@ -609,7 +610,8 @@ void YSFCodec::process_modem_data(QByteArray d)
|
||||||
{
|
{
|
||||||
QByteArray txdata;
|
QByteArray txdata;
|
||||||
uint8_t *p_frame = (uint8_t *)(d.data());
|
uint8_t *p_frame = (uint8_t *)(d.data());
|
||||||
if(m_fcs){
|
|
||||||
|
if(m_fcs && d.size() >= 130){
|
||||||
::memset(p_frame + 120U, 0, 10U);
|
::memset(p_frame + 120U, 0, 10U);
|
||||||
::memcpy(p_frame + 121U, m_fcsname.c_str(), 8);
|
::memcpy(p_frame + 121U, m_fcsname.c_str(), 8);
|
||||||
}
|
}
|
||||||
|
@ -621,6 +623,7 @@ void YSFCodec::process_modem_data(QByteArray d)
|
||||||
m_ysfFrame[34U] = (m_txcnt & 0x7f) << 1;
|
m_ysfFrame[34U] = (m_txcnt & 0x7f) << 1;
|
||||||
::memcpy(m_ysfFrame + 35U, p_frame + 4U, 120);
|
::memcpy(m_ysfFrame + 35U, p_frame + 4U, 120);
|
||||||
}
|
}
|
||||||
|
|
||||||
++m_txcnt;
|
++m_txcnt;
|
||||||
txdata.append((char *)m_ysfFrame, 155);
|
txdata.append((char *)m_ysfFrame, 155);
|
||||||
m_udp->writeDatagram(txdata, m_address, m_modeinfo.port);
|
m_udp->writeDatagram(txdata, m_address, m_modeinfo.port);
|
||||||
|
@ -1288,7 +1291,7 @@ void YSFCodec::process_rx_data()
|
||||||
if((m_rxmodemq.size() > 2) && (++cnt >= 5)){
|
if((m_rxmodemq.size() > 2) && (++cnt >= 5)){
|
||||||
QByteArray out;
|
QByteArray out;
|
||||||
int s = m_rxmodemq[1];
|
int s = m_rxmodemq[1];
|
||||||
if((m_rxmodemq[0] == 0xe0) && (m_rxmodemq.size() >= s)){
|
if((m_rxmodemq[0] == MMDVM_FRAME_START) && (m_rxmodemq.size() >= s)){
|
||||||
for(int i = 0; i < s; ++i){
|
for(int i = 0; i < s; ++i){
|
||||||
out.append(m_rxmodemq.dequeue());
|
out.append(m_rxmodemq.dequeue());
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue