Add M17 Codec 1600 mode on RX and remove the remains of M17 packet mode

support.
This commit is contained in:
Jonathan Naylor 2021-08-10 19:54:14 +01:00
parent bfacdee8e2
commit e2e5ddf4c8
14 changed files with 94 additions and 107 deletions

View file

@ -50,7 +50,7 @@ bool CDMRControl::processWakeup(const unsigned char* data)
assert(data != NULL);
// Wakeups always come in on slot 1
if (data[0U] != TAG_DATA1 || data[1U] != (DMR_IDLE_RX | DMR_SYNC_DATA | DT_CSBK))
if (data[0U] != TAG_DATA || data[1U] != (DMR_IDLE_RX | DMR_SYNC_DATA | DT_CSBK))
return false;
CDMRCSBK csbk;

View file

@ -19,7 +19,7 @@
#if !defined(DMRDefines_H)
#define DMRDefines_H
#include "Defines.h" // For TAG_DATA1
#include "Defines.h" // For TAG_DATA
const unsigned int DMR_FRAME_LENGTH_BITS = 264U;
const unsigned int DMR_FRAME_LENGTH_BYTES = 33U;
@ -54,13 +54,13 @@ const unsigned char DIRECT_SLOT2_DATA_SYNC[] = {0x0DU, 0x75U, 0x57U, 0xF5U, 0xF
const unsigned char SYNC_MASK[] = {0x0FU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xF0U};
// The PR FILL and Data Sync pattern.
const unsigned char DMR_IDLE_DATA[] = {TAG_DATA1, 0x00U,
const unsigned char DMR_IDLE_DATA[] = {TAG_DATA, 0x00U,
0x53U, 0xC2U, 0x5EU, 0xABU, 0xA8U, 0x67U, 0x1DU, 0xC7U, 0x38U, 0x3BU, 0xD9U,
0x36U, 0x00U, 0x0DU, 0xFFU, 0x57U, 0xD7U, 0x5DU, 0xF5U, 0xD0U, 0x03U, 0xF6U,
0xE4U, 0x65U, 0x17U, 0x1BU, 0x48U, 0xCAU, 0x6DU, 0x4FU, 0xC6U, 0x10U, 0xB4U};
// A silence frame only
const unsigned char DMR_SILENCE_DATA[] = {TAG_DATA1, 0x00U,
const unsigned char DMR_SILENCE_DATA[] = {TAG_DATA, 0x00U,
0xB9U, 0xE8U, 0x81U, 0x52U, 0x61U, 0x73U, 0x00U, 0x2AU, 0x6BU, 0xB9U, 0xE8U,
0x81U, 0x52U, 0x60U, 0x00U, 0x00U, 0x00U, 0x00U, 0x00U, 0x01U, 0x73U, 0x00U,
0x2AU, 0x6BU, 0xB9U, 0xE8U, 0x81U, 0x52U, 0x61U, 0x73U, 0x00U, 0x2AU, 0x6BU};

View file

@ -257,7 +257,7 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len)
// Convert the Data Sync to be from the BS or MS as needed
CSync::addDMRDataSync(data + 2U, m_duplex);
data[0U] = TAG_DATA1;
data[0U] = TAG_DATA;
data[1U] = 0x00U;
m_rfTimeoutTimer.start();
@ -317,7 +317,7 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len)
bptc.decode(data + 2U, payload);
bptc.encode(payload, data + 2U);
data[0U] = TAG_DATA1;
data[0U] = TAG_DATA;
data[1U] = 0x00U;
if (m_duplex)
@ -408,7 +408,7 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len)
// Convert the Data Sync to be from the BS or MS as needed
CSync::addDMRDataSync(data + 2U, m_duplex);
data[0U] = m_rfFrames == 0U ? TAG_EOT : TAG_DATA1;
data[0U] = m_rfFrames == 0U ? TAG_EOT : TAG_DATA;
data[1U] = 0x00U;
if (m_duplex)
@ -478,7 +478,7 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len)
// Convert the Data Sync to be from the BS or MS as needed
CSync::addDMRDataSync(data + 2U, m_duplex);
data[0U] = TAG_DATA1;
data[0U] = TAG_DATA;
data[1U] = 0x00U;
if (m_duplex)
@ -551,7 +551,7 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len)
m_rfFrames--;
data[0U] = m_rfFrames == 0U ? TAG_EOT : TAG_DATA1;
data[0U] = m_rfFrames == 0U ? TAG_EOT : TAG_DATA;
data[1U] = 0x00U;
if (m_duplex)
@ -592,7 +592,7 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len)
m_display->writeDMRRSSI(m_slotNo, m_rssi);
if (!m_rfTimeout) {
data[0U] = TAG_DATA1;
data[0U] = TAG_DATA;
data[1U] = 0x00U;
if (m_duplex)
@ -758,7 +758,7 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len)
emb.getData(data + 2U);
if (!m_rfTimeout) {
data[0U] = TAG_DATA1;
data[0U] = TAG_DATA;
data[1U] = 0x00U;
writeNetworkRF(data, DT_VOICE, errors);
@ -836,7 +836,7 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len)
slotType.setDataType(DT_VOICE_LC_HEADER);
slotType.getData(start + 2U);
start[0U] = TAG_DATA1;
start[0U] = TAG_DATA;
start[1U] = 0x00U;
m_rfTimeoutTimer.start();
@ -888,7 +888,7 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len)
m_rfBits += 141U;
m_rfFrames++;
data[0U] = TAG_DATA1;
data[0U] = TAG_DATA;
data[1U] = 0x00U;
if (m_duplex)
@ -1096,7 +1096,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
// Convert the Data Sync to be from the BS or MS as needed
CSync::addDMRDataSync(data + 2U, m_duplex);
data[0U] = TAG_DATA1;
data[0U] = TAG_DATA;
data[1U] = 0x00U;
m_lastFrameValid = false;
@ -1185,7 +1185,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
slotType.setDataType(DT_VOICE_LC_HEADER);
slotType.getData(start + 2U);
start[0U] = TAG_DATA1;
start[0U] = TAG_DATA;
start[1U] = 0x00U;
if (m_duplex) {
@ -1232,7 +1232,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
bptc.decode(data + 2U, payload);
bptc.encode(payload, data + 2U);
data[0U] = TAG_DATA1;
data[0U] = TAG_DATA;
data[1U] = 0x00U;
writeQueueNet(data);
@ -1312,7 +1312,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
// Convert the Data Sync to be from the BS or MS as needed
CSync::addDMRDataSync(data + 2U, m_duplex);
data[0U] = m_netFrames == 0U ? TAG_EOT : TAG_DATA1;
data[0U] = m_netFrames == 0U ? TAG_EOT : TAG_DATA;
data[1U] = 0x00U;
// Put a small delay into starting transmission
@ -1382,7 +1382,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
slotType.setDataType(DT_VOICE_LC_HEADER);
slotType.getData(start + 2U);
start[0U] = TAG_DATA1;
start[0U] = TAG_DATA;
start[1U] = 0x00U;
if (m_duplex) {
@ -1425,7 +1425,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
m_netErrs += m_fec.regenerateDMR(data + 2U);
m_netBits += 141U;
data[0U] = TAG_DATA1;
data[0U] = TAG_DATA;
data[1U] = 0x00U;
// Convert the Audio Sync to be from the BS or MS as needed
@ -1580,7 +1580,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
emb.setLCSS(lcss);
emb.getData(data + 2U);
data[0U] = TAG_DATA1;
data[0U] = TAG_DATA;
data[1U] = 0x00U;
// Initialise the lost packet data
@ -1641,7 +1641,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
// Convert the Data Sync to be from the BS or MS as needed
CSync::addDMRDataSync(data + 2U, m_duplex);
data[0U] = TAG_DATA1;
data[0U] = TAG_DATA;
data[1U] = 0x00U;
if (csbko == CSBKO_PRECCSBK && csbk.getDataContent()) {
@ -1740,7 +1740,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
m_netFrames--;
data[0U] = m_netFrames == 0U ? TAG_EOT : TAG_DATA1;
data[0U] = m_netFrames == 0U ? TAG_EOT : TAG_DATA;
data[1U] = 0x00U;
#if defined(DUMP_DMR)

View file

@ -432,7 +432,7 @@ bool CDStarControl::writeModem(unsigned char *data, unsigned int len)
}
return false;
} else if (type == TAG_DATA1) {
} else if (type == TAG_DATA) {
if (m_rfState == RS_RF_REJECTED) {
return true;
} else if (m_rfState == RS_RF_INVALID) {
@ -780,13 +780,13 @@ void CDStarControl::writeNetwork()
LogMessage("D-Star, received network end of transmission from %8.8s/%4.4s to %8.8s, %.1f seconds, %u%% packet loss, BER: %.1f%%", my1, my2, your, float(m_netFrames) / 50.0F, (m_netLost * 100U) / m_netFrames, float(m_netErrs * 100U) / float(m_netBits));
writeEndNet();
} else if (type == TAG_DATA1) {
} else if (type == TAG_DATA) {
if (m_netState != RS_NET_AUDIO)
return;
unsigned char n = data[1U];
data[1U] = TAG_DATA1;
data[1U] = TAG_DATA;
unsigned int errors = 0U;
if (!m_netHeader.isDataPacket())

View file

@ -35,8 +35,8 @@ const unsigned char DSTAR_NULL_SLOW_SYNC_BYTES[] = { 0x55, 0x2D, 0x16 };
// Note that these are already scrambled, 0x66 0x66 0x66 otherwise
const unsigned char DSTAR_NULL_SLOW_DATA_BYTES[] = { 0x16, 0x29, 0xF5 };
const unsigned char DSTAR_NULL_FRAME_SYNC_BYTES[] = { TAG_DATA1, 0x9E, 0x8D, 0x32, 0x88, 0x26, 0x1A, 0x3F, 0x61, 0xE8, 0x55, 0x2D, 0x16 };
const unsigned char DSTAR_NULL_FRAME_DATA_BYTES[] = { TAG_DATA1, 0x9E, 0x8D, 0x32, 0x88, 0x26, 0x1A, 0x3F, 0x61, 0xE8, 0x16, 0x29, 0xF5 };
const unsigned char DSTAR_NULL_FRAME_SYNC_BYTES[] = { TAG_DATA, 0x9E, 0x8D, 0x32, 0x88, 0x26, 0x1A, 0x3F, 0x61, 0xE8, 0x55, 0x2D, 0x16 };
const unsigned char DSTAR_NULL_FRAME_DATA_BYTES[] = { TAG_DATA, 0x9E, 0x8D, 0x32, 0x88, 0x26, 0x1A, 0x3F, 0x61, 0xE8, 0x16, 0x29, 0xF5 };
const unsigned int DSTAR_VOICE_FRAME_LENGTH_BYTES = 9U;
const unsigned int DSTAR_DATA_FRAME_LENGTH_BYTES = 3U;

View file

@ -263,7 +263,7 @@ void CDStarNetwork::clock(unsigned int ms)
m_inId = 0U;
ctrl[1U] = TAG_EOT;
} else {
ctrl[1U] = TAG_DATA1;
ctrl[1U] = TAG_DATA;
}
ctrl[2U] = buffer[7] & 0x3FU;
@ -299,7 +299,7 @@ unsigned int CDStarNetwork::read(unsigned char* data, unsigned int length)
switch (buffer[0U]) {
case TAG_HEADER:
case TAG_DATA1:
case TAG_DATA:
case TAG_EOT:
::memcpy(data, buffer, c);
return c;

View file

@ -36,10 +36,9 @@ const unsigned char MODE_ERROR = 100U;
const unsigned char MODE_QUIT = 110U;
const unsigned char TAG_HEADER = 0x00U;
const unsigned char TAG_DATA1 = 0x01U;
const unsigned char TAG_DATA2 = 0x02U;
const unsigned char TAG_LOST = 0x03U;
const unsigned char TAG_EOT = 0x04U;
const unsigned char TAG_DATA = 0x01U;
const unsigned char TAG_LOST = 0x02U;
const unsigned char TAG_EOT = 0x03U;
const unsigned int DSTAR_MODEM_DATA_LEN = 220U;
@ -62,6 +61,7 @@ enum RPT_RF_STATE {
RS_RF_LISTENING,
RS_RF_LATE_ENTRY,
RS_RF_AUDIO,
RS_RF_DATA_AUDIO,
RS_RF_DATA,
RS_RF_REJECTED,
RS_RF_INVALID
@ -70,6 +70,7 @@ enum RPT_RF_STATE {
enum RPT_NET_STATE {
RS_NET_IDLE,
RS_NET_AUDIO,
RS_NET_DATA_AUDIO,
RS_NET_DATA
};

View file

@ -81,7 +81,7 @@ bool CFMControl::writeModem(const unsigned char* data, unsigned int length)
if (data[0U] == TAG_EOT)
return m_network->writeEnd();
if (data[0U] != TAG_DATA1)
if (data[0U] != TAG_DATA)
return false;
m_incomingRFAudio.addData(data + 1U, length - 1U);

View file

@ -108,7 +108,7 @@ bool CM17Control::writeModem(unsigned char* data, unsigned int len)
unsigned char type = data[0U];
if (type == TAG_LOST && m_rfState == RS_RF_AUDIO) {
if (type == TAG_LOST && (m_rfState == RS_RF_AUDIO || m_rfState == RS_RF_DATA_AUDIO)) {
std::string source = m_rfLSF.getSource();
std::string dest = m_rfLSF.getDest();
@ -135,12 +135,6 @@ bool CM17Control::writeModem(unsigned char* data, unsigned int len)
return false;
}
// Ignore packet data
if (type == TAG_DATA2) {
m_rfState = RS_RF_LISTENING;
return false;
}
// Have we got RSSI bytes on the end?
if (len == (M17_FRAME_LENGTH_BYTES + 4U)) {
uint16_t raw = 0U;
@ -208,12 +202,12 @@ bool CM17Control::writeModem(unsigned char* data, unsigned int len)
}
}
if (m_rfState == RS_RF_LISTENING && data[0U] == TAG_DATA1) {
if (m_rfState == RS_RF_LISTENING && data[0U] == TAG_DATA) {
m_rfState = RS_RF_LATE_ENTRY;
m_rfLSF.reset();
}
if (m_rfState == RS_RF_LATE_ENTRY && data[0U] == TAG_DATA1) {
if (m_rfState == RS_RF_LATE_ENTRY && data[0U] == TAG_DATA) {
unsigned int lich1, lich2, lich3, lich4;
bool valid1 = CGolay24128::decode24128(data + 2U + M17_SYNC_LENGTH_BYTES + 0U, lich1);
bool valid2 = CGolay24128::decode24128(data + 2U + M17_SYNC_LENGTH_BYTES + 3U, lich2);
@ -256,7 +250,7 @@ bool CM17Control::writeModem(unsigned char* data, unsigned int len)
}
}
if (m_rfState == RS_RF_AUDIO && data[0U] == TAG_DATA1) {
if ((m_rfState == RS_RF_AUDIO || m_rfState == RS_RF_DATA_AUDIO) && data[0U] == TAG_DATA) {
#if defined(DUMP_M17)
writeFile(data + 2U);
#endif
@ -273,8 +267,14 @@ bool CM17Control::writeModem(unsigned char* data, unsigned int len)
frame[0U] = (m_rfFN >> 8) & 0xFFU;
frame[1U] = (m_rfFN >> 0) & 0xFFU;
::memcpy(frame + 2U + 0U, M17_3200_SILENCE, 8U);
::memcpy(frame + 2U + 8U, M17_3200_SILENCE, 8U);
if (m_rfState == RS_RF_AUDIO) {
::memcpy(frame + 2U + 0U, M17_3200_SILENCE, 8U);
::memcpy(frame + 2U + 8U, M17_3200_SILENCE, 8U);
} else {
::memcpy(frame + 2U + 0U, M17_1600_SILENCE, 4U);
::memcpy(frame + 2U + 4U, M17_1600_SILENCE, 4U);
::memset(frame + 2U + 8U, 0x00U, 8U);
}
} else {
m_rfFN = (frame[0U] << 8) + (frame[1U] << 0);
}
@ -290,7 +290,7 @@ bool CM17Control::writeModem(unsigned char* data, unsigned int len)
if (m_duplex) {
unsigned char rfData[2U + M17_FRAME_LENGTH_BYTES];
rfData[0U] = TAG_DATA1;
rfData[0U] = TAG_DATA;
rfData[1U] = 0x00U;
// Generate the sync
@ -451,7 +451,7 @@ void CM17Control::writeNetwork()
break;
case M17_DATA_TYPE_VOICE_DATA:
LogMessage("M17, received network voice + data transmission from %s to %s", source.c_str(), dest.c_str());
m_netState = RS_NET_AUDIO;
m_netState = RS_NET_DATA_AUDIO;
break;
default:
LogMessage("M17, received network unknown transmission from %s to %s", source.c_str(), dest.c_str());
@ -490,10 +490,10 @@ void CM17Control::writeNetwork()
writeQueueNet(start);
}
if (m_netState == RS_NET_AUDIO) {
if (m_netState == RS_NET_AUDIO || m_netState == RS_NET_DATA_AUDIO) {
unsigned char data[M17_FRAME_LENGTH_BYTES + 2U];
data[0U] = TAG_DATA1;
data[0U] = TAG_DATA;
data[1U] = 0x00U;
// Generate the sync
@ -591,7 +591,7 @@ bool CM17Control::processRFHeader(bool lateEntry)
break;
case M17_DATA_TYPE_VOICE_DATA:
LogMessage("M17, received RF%svoice + data transmission from %s to %s", lateEntry ? " late entry " : " ", source.c_str(), dest.c_str());
m_rfState = RS_RF_AUDIO;
m_rfState = RS_RF_DATA_AUDIO;
break;
default:
LogMessage("M17, received RF%sunknown transmission from %s to %s", lateEntry ? " late entry " : " ", source.c_str(), dest.c_str());
@ -636,7 +636,7 @@ void CM17Control::clock(unsigned int ms)
m_rfTimeoutTimer.clock(ms);
m_netTimeoutTimer.clock(ms);
if (m_netState == RS_NET_AUDIO) {
if (m_netState == RS_NET_AUDIO || m_netState == RS_NET_DATA_AUDIO) {
m_networkWatchdog.clock(ms);
if (m_networkWatchdog.hasExpired()) {

View file

@ -481,7 +481,7 @@ void CModem::clock(unsigned int ms)
unsigned char data = m_length - m_offset + 1U;
m_rxDStarData.addData(&data, 1U);
data = TAG_DATA1;
data = TAG_DATA;
m_rxDStarData.addData(&data, 1U);
m_rxDStarData.addData(m_buffer + m_offset, m_length - m_offset);
@ -522,7 +522,7 @@ void CModem::clock(unsigned int ms)
if (m_buffer[3U] == (DMR_SYNC_DATA | DT_TERMINATOR_WITH_LC))
data = TAG_EOT;
else
data = TAG_DATA1;
data = TAG_DATA;
m_rxDMRData1.addData(&data, 1U);
m_rxDMRData1.addData(m_buffer + m_offset, m_length - m_offset);
@ -539,7 +539,7 @@ void CModem::clock(unsigned int ms)
if (m_buffer[3U] == (DMR_SYNC_DATA | DT_TERMINATOR_WITH_LC))
data = TAG_EOT;
else
data = TAG_DATA1;
data = TAG_DATA;
m_rxDMRData2.addData(&data, 1U);
m_rxDMRData2.addData(m_buffer + m_offset, m_length - m_offset);
@ -577,7 +577,7 @@ void CModem::clock(unsigned int ms)
unsigned char data = m_length - m_offset + 1U;
m_rxYSFData.addData(&data, 1U);
data = TAG_DATA1;
data = TAG_DATA;
m_rxYSFData.addData(&data, 1U);
m_rxYSFData.addData(m_buffer + m_offset, m_length - m_offset);
@ -617,7 +617,7 @@ void CModem::clock(unsigned int ms)
unsigned char data = m_length - m_offset + 1U;
m_rxP25Data.addData(&data, 1U);
data = TAG_DATA1;
data = TAG_DATA;
m_rxP25Data.addData(&data, 1U);
m_rxP25Data.addData(m_buffer + m_offset, m_length - m_offset);
@ -643,7 +643,7 @@ void CModem::clock(unsigned int ms)
unsigned char data = m_length - m_offset + 1U;
m_rxNXDNData.addData(&data, 1U);
data = TAG_DATA1;
data = TAG_DATA;
m_rxNXDNData.addData(&data, 1U);
m_rxNXDNData.addData(m_buffer + m_offset, m_length - m_offset);
@ -683,21 +683,7 @@ void CModem::clock(unsigned int ms)
unsigned char data = m_length - 2U;
m_rxM17Data.addData(&data, 1U);
data = TAG_DATA1;
m_rxM17Data.addData(&data, 1U);
m_rxM17Data.addData(m_buffer + 3U, m_length - 3U);
}
break;
case MMDVM_M17_PACKET: {
if (m_trace)
CUtils::dump(1U, "RX M17 Packet Data", m_buffer, m_length);
unsigned char data = m_length - 2U;
m_rxM17Data.addData(&data, 1U);
data = TAG_DATA2;
data = TAG_DATA;
m_rxM17Data.addData(&data, 1U);
m_rxM17Data.addData(m_buffer + 3U, m_length - 3U);
@ -723,7 +709,7 @@ void CModem::clock(unsigned int ms)
unsigned int data1 = m_length - m_offset + 1U;
m_rxFMData.addData((unsigned char*)&data1, sizeof(unsigned int));
unsigned char data2 = TAG_DATA1;
unsigned char data2 = TAG_DATA;
m_rxFMData.addData(&data2, 1U);
m_rxFMData.addData(m_buffer + m_offset, m_length - m_offset);
@ -1336,7 +1322,7 @@ bool CModem::writeDStarData(const unsigned char* data, unsigned int length)
case TAG_HEADER:
buffer[2U] = MMDVM_DSTAR_HEADER;
break;
case TAG_DATA1:
case TAG_DATA:
buffer[2U] = MMDVM_DSTAR_DATA;
break;
case TAG_EOT:
@ -1375,7 +1361,7 @@ bool CModem::writeDMRData1(const unsigned char* data, unsigned int length)
assert(data != NULL);
assert(length > 0U);
if (data[0U] != TAG_DATA1 && data[0U] != TAG_EOT)
if (data[0U] != TAG_DATA && data[0U] != TAG_EOT)
return false;
unsigned char buffer[40U];
@ -1398,7 +1384,7 @@ bool CModem::writeDMRData2(const unsigned char* data, unsigned int length)
assert(data != NULL);
assert(length > 0U);
if (data[0U] != TAG_DATA1 && data[0U] != TAG_EOT)
if (data[0U] != TAG_DATA && data[0U] != TAG_EOT)
return false;
unsigned char buffer[40U];
@ -1428,7 +1414,7 @@ bool CModem::writeYSFData(const unsigned char* data, unsigned int length)
assert(data != NULL);
assert(length > 0U);
if (data[0U] != TAG_DATA1 && data[0U] != TAG_EOT)
if (data[0U] != TAG_DATA && data[0U] != TAG_EOT)
return false;
unsigned char buffer[130U];
@ -1458,7 +1444,7 @@ bool CModem::writeP25Data(const unsigned char* data, unsigned int length)
assert(data != NULL);
assert(length > 0U);
if (data[0U] != TAG_HEADER && data[0U] != TAG_DATA1 && data[0U] != TAG_EOT)
if (data[0U] != TAG_HEADER && data[0U] != TAG_DATA && data[0U] != TAG_EOT)
return false;
unsigned char buffer[250U];
@ -1488,7 +1474,7 @@ bool CModem::writeNXDNData(const unsigned char* data, unsigned int length)
assert(data != NULL);
assert(length > 0U);
if (data[0U] != TAG_DATA1 && data[0U] != TAG_EOT)
if (data[0U] != TAG_DATA && data[0U] != TAG_EOT)
return false;
unsigned char buffer[130U];
@ -1518,7 +1504,7 @@ bool CModem::writeM17Data(const unsigned char* data, unsigned int length)
assert(data != NULL);
assert(length > 0U);
if (data[0U] != TAG_HEADER && data[0U] != TAG_DATA1 && data[0U] != TAG_EOT)
if (data[0U] != TAG_HEADER && data[0U] != TAG_DATA && data[0U] != TAG_EOT)
return false;
unsigned char buffer[130U];

View file

@ -223,7 +223,7 @@ bool CNXDNControl::processVoice(unsigned char usc, unsigned char option, unsigne
m_rfLayer3 = layer3;
data[0U] = type == NXDN_MESSAGE_TYPE_TX_REL ? TAG_EOT : TAG_DATA1;
data[0U] = type == NXDN_MESSAGE_TYPE_TX_REL ? TAG_EOT : TAG_DATA;
data[1U] = 0x00U;
CSync::addNXDNSync(data + 2U);
@ -401,7 +401,7 @@ bool CNXDNControl::processVoice(unsigned char usc, unsigned char option, unsigne
// Create a dummy start message
unsigned char start[NXDN_FRAME_LENGTH_BYTES + 2U];
start[0U] = TAG_DATA1;
start[0U] = TAG_DATA;
start[1U] = 0x00U;
// Generate the sync
@ -539,7 +539,7 @@ bool CNXDNControl::processVoice(unsigned char usc, unsigned char option, unsigne
facch12.getRaw(netData + 5U + 14U);
}
data[0U] = TAG_DATA1;
data[0U] = TAG_DATA;
data[1U] = 0x00U;
scrambler(data + 2U);
@ -638,12 +638,12 @@ bool CNXDNControl::processData(unsigned char option, unsigned char *data)
if (validUDCH) {
type = layer3.getMessageType();
data[0U] = type == NXDN_MESSAGE_TYPE_TX_REL ? TAG_EOT : TAG_DATA1;
data[0U] = type == NXDN_MESSAGE_TYPE_TX_REL ? TAG_EOT : TAG_DATA;
udch.setRAN(m_ran);
udch.encode(data + 2U);
} else {
data[0U] = TAG_DATA1;
data[0U] = TAG_DATA;
data[1U] = 0x00U;
}
@ -785,7 +785,7 @@ void CNXDNControl::writeNetwork()
}
if (m_netState == RS_NET_DATA) {
data[0U] = type == NXDN_MESSAGE_TYPE_TX_REL ? TAG_EOT : TAG_DATA1;
data[0U] = type == NXDN_MESSAGE_TYPE_TX_REL ? TAG_EOT : TAG_DATA;
data[1U] = 0x00U;
CNXDNUDCH udch;
@ -826,7 +826,7 @@ void CNXDNControl::writeNetwork()
facch.encode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_LENGTH_BITS);
facch.encode(data + 2U, NXDN_FSW_LENGTH_BITS + NXDN_LICH_LENGTH_BITS + NXDN_SACCH_LENGTH_BITS + NXDN_FACCH1_LENGTH_BITS);
data[0U] = type == NXDN_MESSAGE_TYPE_TX_REL ? TAG_EOT : TAG_DATA1;
data[0U] = type == NXDN_MESSAGE_TYPE_TX_REL ? TAG_EOT : TAG_DATA;
data[1U] = 0x00U;
scrambler(data + 2U);
@ -907,7 +907,7 @@ void CNXDNControl::writeNetwork()
// Create a dummy start message
unsigned char start[NXDN_FRAME_LENGTH_BYTES + 2U];
start[0U] = TAG_DATA1;
start[0U] = TAG_DATA;
start[1U] = 0x00U;
// Generate the sync
@ -942,7 +942,7 @@ void CNXDNControl::writeNetwork()
m_netFrames++;
data[0U] = TAG_DATA1;
data[0U] = TAG_DATA;
data[1U] = 0x00U;
CNXDNSACCH sacch;

View file

@ -303,7 +303,7 @@ bool CP25Control::writeModem(unsigned char* data, unsigned int len)
::memcpy(m_rfLDU, data + 2U, P25_LDU_FRAME_LENGTH_BYTES);
if (m_duplex) {
data[0U] = TAG_DATA1;
data[0U] = TAG_DATA;
data[1U] = 0x00U;
writeQueueRF(data, P25_LDU_FRAME_LENGTH_BYTES + 2U);
}
@ -349,7 +349,7 @@ bool CP25Control::writeModem(unsigned char* data, unsigned int len)
::memcpy(m_rfLDU, data + 2U, P25_LDU_FRAME_LENGTH_BYTES);
if (m_duplex) {
data[0U] = TAG_DATA1;
data[0U] = TAG_DATA;
data[1U] = 0x00U;
writeQueueRF(data, P25_LDU_FRAME_LENGTH_BYTES + 2U);
}
@ -399,7 +399,7 @@ bool CP25Control::writeModem(unsigned char* data, unsigned int len)
setBusyBits(data + 2U, P25_SS0_START, true, true);
if (m_duplex) {
data[0U] = TAG_DATA1;
data[0U] = TAG_DATA;
data[1U] = 0x00U;
writeQueueRF(data, P25_TSDU_FRAME_LENGTH_BYTES + 2U);
@ -425,7 +425,7 @@ bool CP25Control::writeModem(unsigned char* data, unsigned int len)
setBusyBits(data + 2U, P25_SS0_START, true, true);
if (m_duplex) {
data[0U] = TAG_DATA1;
data[0U] = TAG_DATA;
data[1U] = 0x00U;
writeQueueRF(data, P25_TSDU_FRAME_LENGTH_BYTES + 2U);
@ -569,7 +569,7 @@ bool CP25Control::writeModem(unsigned char* data, unsigned int len)
addBusyBits(pdu + 2U, newBitLength, false, true);
if (m_duplex) {
pdu[0U] = TAG_DATA1;
pdu[0U] = TAG_DATA;
pdu[1U] = 0x00U;
writeQueueRF(pdu, newByteLength + 2U);
}
@ -1010,7 +1010,7 @@ void CP25Control::createNetLDU1()
unsigned char buffer[P25_LDU_FRAME_LENGTH_BYTES + 2U];
::memset(buffer, 0x00U, P25_LDU_FRAME_LENGTH_BYTES + 2U);
buffer[0U] = TAG_DATA1;
buffer[0U] = TAG_DATA;
buffer[1U] = 0x00U;
// Add the sync
@ -1058,7 +1058,7 @@ void CP25Control::createNetLDU2()
unsigned char buffer[P25_LDU_FRAME_LENGTH_BYTES + 2U];
::memset(buffer, 0x00U, P25_LDU_FRAME_LENGTH_BYTES + 2U);
buffer[0U] = TAG_DATA1;
buffer[0U] = TAG_DATA;
buffer[1U] = 0x00U;
// Add the sync

View file

@ -19,6 +19,6 @@
#if !defined(VERSION_H)
#define VERSION_H
const char* VERSION = "20210708";
const char* VERSION = "20210810";
#endif

View file

@ -265,7 +265,7 @@ bool CYSFControl::processVWData(bool valid, unsigned char *data)
fich.encode(data + 2U);
data[0U] = TAG_DATA1;
data[0U] = TAG_DATA;
data[1U] = 0x00U;
writeNetwork(data, m_rfFrames % 128U);
@ -358,7 +358,7 @@ bool CYSFControl::processVWData(bool valid, unsigned char *data)
fich.encode(data + 2U);
data[0U] = TAG_DATA1;
data[0U] = TAG_DATA;
data[1U] = 0x00U;
writeNetwork(data, m_rfFrames % 128U);
@ -434,7 +434,7 @@ bool CYSFControl::processDNData(bool valid, unsigned char *data)
fich.encode(data + 2U);
data[0U] = TAG_DATA1;
data[0U] = TAG_DATA;
data[1U] = 0x00U;
writeNetwork(data, m_rfFrames % 128U);
@ -540,7 +540,7 @@ bool CYSFControl::processDNData(bool valid, unsigned char *data)
fich.encode(data + 2U);
data[0U] = TAG_DATA1;
data[0U] = TAG_DATA;
data[1U] = 0x00U;
writeNetwork(data, m_rfFrames % 128U);
@ -636,7 +636,7 @@ bool CYSFControl::processDNData(bool valid, unsigned char *data)
CYSFPayload payload;
payload.writeHeader(buffer + 2U, csd1, csd2);
buffer[0U] = TAG_DATA1;
buffer[0U] = TAG_DATA;
buffer[1U] = 0x00U;
writeNetwork(buffer, m_rfFrames % 128U);
@ -660,7 +660,7 @@ bool CYSFControl::processDNData(bool valid, unsigned char *data)
fich.encode(data + 2U);
data[0U] = TAG_DATA1;
data[0U] = TAG_DATA;
data[1U] = 0x00U;
writeNetwork(data, m_rfFrames % 128U);
@ -733,7 +733,7 @@ bool CYSFControl::processFRData(bool valid, unsigned char *data)
fich.encode(data + 2U);
data[0U] = TAG_DATA1;
data[0U] = TAG_DATA;
data[1U] = 0x00U;
writeNetwork(data, m_rfFrames % 128U);
@ -814,7 +814,7 @@ bool CYSFControl::processFRData(bool valid, unsigned char *data)
fich.encode(data + 2U);
data[0U] = TAG_DATA1;
data[0U] = TAG_DATA;
data[1U] = 0x00U;
writeNetwork(data, m_rfFrames % 128U);
@ -949,7 +949,7 @@ void CYSFControl::writeNetwork()
return;
}
data[33U] = end ? TAG_EOT : TAG_DATA1;
data[33U] = end ? TAG_EOT : TAG_DATA;
data[34U] = 0x00U;
if (valid) {