Upgrade the Embedded Data regeneration.
This commit is contained in:
parent
42a24de4fc
commit
dfa359565a
|
@ -16,7 +16,7 @@
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "DMREmbeddedLC.h"
|
#include "DMREmbeddedData.h"
|
||||||
|
|
||||||
#include "Hamming.h"
|
#include "Hamming.h"
|
||||||
#include "Utils.h"
|
#include "Utils.h"
|
||||||
|
@ -26,8 +26,7 @@
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
CDMREmbeddedLC::CDMREmbeddedLC(unsigned int slotNo) :
|
CDMREmbeddedData::CDMREmbeddedData() :
|
||||||
m_slotNo(slotNo),
|
|
||||||
m_raw(NULL),
|
m_raw(NULL),
|
||||||
m_state(LCS_NONE),
|
m_state(LCS_NONE),
|
||||||
m_data(NULL),
|
m_data(NULL),
|
||||||
|
@ -38,14 +37,14 @@ m_valid(false)
|
||||||
m_data = new bool[72U];
|
m_data = new bool[72U];
|
||||||
}
|
}
|
||||||
|
|
||||||
CDMREmbeddedLC::~CDMREmbeddedLC()
|
CDMREmbeddedData::~CDMREmbeddedData()
|
||||||
{
|
{
|
||||||
delete[] m_raw;
|
delete[] m_raw;
|
||||||
delete[] m_data;
|
delete[] m_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add LC data (which may consist of 4 blocks) to the data store
|
// Add LC data (which may consist of 4 blocks) to the data store
|
||||||
bool CDMREmbeddedLC::addData(const unsigned char* data, unsigned char lcss)
|
bool CDMREmbeddedData::addData(const unsigned char* data, unsigned char lcss)
|
||||||
{
|
{
|
||||||
assert(data != NULL);
|
assert(data != NULL);
|
||||||
|
|
||||||
|
@ -64,6 +63,7 @@ bool CDMREmbeddedLC::addData(const unsigned char* data, unsigned char lcss)
|
||||||
// Show we are ready for the next LC block
|
// Show we are ready for the next LC block
|
||||||
m_state = LCS_FIRST;
|
m_state = LCS_FIRST;
|
||||||
m_valid = false;
|
m_valid = false;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,6 +74,7 @@ bool CDMREmbeddedLC::addData(const unsigned char* data, unsigned char lcss)
|
||||||
|
|
||||||
// Show we are ready for the next LC block
|
// Show we are ready for the next LC block
|
||||||
m_state = LCS_SECOND;
|
m_state = LCS_SECOND;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -84,6 +85,7 @@ bool CDMREmbeddedLC::addData(const unsigned char* data, unsigned char lcss)
|
||||||
|
|
||||||
// Show we are ready for the final LC block
|
// Show we are ready for the final LC block
|
||||||
m_state = LCS_THIRD;
|
m_state = LCS_THIRD;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,24 +94,34 @@ bool CDMREmbeddedLC::addData(const unsigned char* data, unsigned char lcss)
|
||||||
for (unsigned int a = 0U; a < 32U; a++)
|
for (unsigned int a = 0U; a < 32U; a++)
|
||||||
m_raw[a + 96U] = rawData[a + 4U];
|
m_raw[a + 96U] = rawData[a + 4U];
|
||||||
|
|
||||||
|
// Show that we're not ready for any more data
|
||||||
|
m_state = LCS_NONE;
|
||||||
|
|
||||||
// Process the complete data block
|
// Process the complete data block
|
||||||
return processEmbeddedData();
|
decodeEmbeddedData();
|
||||||
}
|
if (m_valid)
|
||||||
|
encodeEmbeddedData();
|
||||||
|
|
||||||
// Is this a single block embedded LC
|
return m_valid;
|
||||||
if (lcss == 0U)
|
}
|
||||||
return false;
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CDMREmbeddedLC::setData(const CDMRLC& lc)
|
void CDMREmbeddedData::setLC(const CDMRLC& lc)
|
||||||
{
|
{
|
||||||
bool lcData[72U];
|
lc.getData(m_data);
|
||||||
lc.getData(lcData);
|
|
||||||
|
|
||||||
|
m_FLCO = lc.getFLCO();
|
||||||
|
m_valid = true;
|
||||||
|
|
||||||
|
encodeEmbeddedData();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CDMREmbeddedData::encodeEmbeddedData()
|
||||||
|
{
|
||||||
unsigned int crc;
|
unsigned int crc;
|
||||||
CCRC::encodeFiveBit(lcData, crc);
|
CCRC::encodeFiveBit(m_data, crc);
|
||||||
|
|
||||||
bool data[128U];
|
bool data[128U];
|
||||||
::memset(data, 0x00U, 128U * sizeof(bool));
|
::memset(data, 0x00U, 128U * sizeof(bool));
|
||||||
|
@ -122,19 +134,19 @@ void CDMREmbeddedLC::setData(const CDMRLC& lc)
|
||||||
|
|
||||||
unsigned int b = 0U;
|
unsigned int b = 0U;
|
||||||
for (unsigned int a = 0U; a < 11U; a++, b++)
|
for (unsigned int a = 0U; a < 11U; a++, b++)
|
||||||
data[a] = lcData[b];
|
data[a] = m_data[b];
|
||||||
for (unsigned int a = 16U; a < 27U; a++, b++)
|
for (unsigned int a = 16U; a < 27U; a++, b++)
|
||||||
data[a] = lcData[b];
|
data[a] = m_data[b];
|
||||||
for (unsigned int a = 32U; a < 42U; a++, b++)
|
for (unsigned int a = 32U; a < 42U; a++, b++)
|
||||||
data[a] = lcData[b];
|
data[a] = m_data[b];
|
||||||
for (unsigned int a = 48U; a < 58U; a++, b++)
|
for (unsigned int a = 48U; a < 58U; a++, b++)
|
||||||
data[a] = lcData[b];
|
data[a] = m_data[b];
|
||||||
for (unsigned int a = 64U; a < 74U; a++, b++)
|
for (unsigned int a = 64U; a < 74U; a++, b++)
|
||||||
data[a] = lcData[b];
|
data[a] = m_data[b];
|
||||||
for (unsigned int a = 80U; a < 90U; a++, b++)
|
for (unsigned int a = 80U; a < 90U; a++, b++)
|
||||||
data[a] = lcData[b];
|
data[a] = m_data[b];
|
||||||
for (unsigned int a = 96U; a < 106U; a++, b++)
|
for (unsigned int a = 96U; a < 106U; a++, b++)
|
||||||
data[a] = lcData[b];
|
data[a] = m_data[b];
|
||||||
|
|
||||||
// Hamming (16,11,4) check each row except the last one
|
// Hamming (16,11,4) check each row except the last one
|
||||||
for (unsigned int a = 0U; a < 112U; a += 16U)
|
for (unsigned int a = 0U; a < 112U; a += 16U)
|
||||||
|
@ -154,7 +166,7 @@ void CDMREmbeddedLC::setData(const CDMRLC& lc)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned char CDMREmbeddedLC::getData(unsigned char* data, unsigned char n) const
|
unsigned char CDMREmbeddedData::getData(unsigned char* data, unsigned char n) const
|
||||||
{
|
{
|
||||||
assert(data != NULL);
|
assert(data != NULL);
|
||||||
|
|
||||||
|
@ -198,7 +210,7 @@ unsigned char CDMREmbeddedLC::getData(unsigned char* data, unsigned char n) cons
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unpack and error check an embedded LC
|
// Unpack and error check an embedded LC
|
||||||
bool CDMREmbeddedLC::processEmbeddedData()
|
void CDMREmbeddedData::decodeEmbeddedData()
|
||||||
{
|
{
|
||||||
// The data is unpacked downwards in columns
|
// The data is unpacked downwards in columns
|
||||||
bool data[128U];
|
bool data[128U];
|
||||||
|
@ -215,14 +227,14 @@ bool CDMREmbeddedLC::processEmbeddedData()
|
||||||
// Hamming (16,11,4) check each row except the last one
|
// Hamming (16,11,4) check each row except the last one
|
||||||
for (unsigned int a = 0U; a < 112U; a += 16U) {
|
for (unsigned int a = 0U; a < 112U; a += 16U) {
|
||||||
if (!CHamming::decode16114(data + a))
|
if (!CHamming::decode16114(data + a))
|
||||||
return false;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check the parity bits
|
// Check the parity bits
|
||||||
for (unsigned int a = 0U; a < 16U; a++) {
|
for (unsigned int a = 0U; a < 16U; a++) {
|
||||||
bool parity = data[a + 0U] ^ data[a + 16U] ^ data[a + 32U] ^ data[a + 48U] ^ data[a + 64U] ^ data[a + 80U] ^ data[a + 96U] ^ data[a + 112U];
|
bool parity = data[a + 0U] ^ data[a + 16U] ^ data[a + 32U] ^ data[a + 48U] ^ data[a + 64U] ^ data[a + 80U] ^ data[a + 96U] ^ data[a + 112U];
|
||||||
if (parity)
|
if (parity)
|
||||||
return false;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// We have passed the Hamming check so extract the actual payload
|
// We have passed the Hamming check so extract the actual payload
|
||||||
|
@ -252,7 +264,7 @@ bool CDMREmbeddedLC::processEmbeddedData()
|
||||||
|
|
||||||
// Now CRC check this
|
// Now CRC check this
|
||||||
if (!CCRC::checkFiveBit(m_data, crc))
|
if (!CCRC::checkFiveBit(m_data, crc))
|
||||||
return false;
|
return;
|
||||||
|
|
||||||
m_valid = true;
|
m_valid = true;
|
||||||
|
|
||||||
|
@ -260,44 +272,9 @@ bool CDMREmbeddedLC::processEmbeddedData()
|
||||||
unsigned char flco;
|
unsigned char flco;
|
||||||
CUtils::bitsToByteBE(m_data + 0U, flco);
|
CUtils::bitsToByteBE(m_data + 0U, flco);
|
||||||
m_FLCO = FLCO(flco & 0x3FU);
|
m_FLCO = FLCO(flco & 0x3FU);
|
||||||
|
|
||||||
char text[80U];
|
|
||||||
|
|
||||||
// Only generate the LC when it's the correct FLCO
|
|
||||||
switch (m_FLCO) {
|
|
||||||
case FLCO_GROUP:
|
|
||||||
case FLCO_USER_USER:
|
|
||||||
// ::sprintf(text, "DMR Slot %u, Embedded LC Data", m_slotNo);
|
|
||||||
// CUtils::dump(1U, text, m_data, 72U);
|
|
||||||
return true;
|
|
||||||
case FLCO_GPS_INFO:
|
|
||||||
::sprintf(text, "DMR Slot %u, Embedded GPS Info", m_slotNo);
|
|
||||||
CUtils::dump(1U, text, m_data, 72U);
|
|
||||||
return true;
|
|
||||||
case FLCO_TALKER_ALIAS_HEADER:
|
|
||||||
::sprintf(text, "DMR Slot %u, Embedded Talker Alias Header", m_slotNo);
|
|
||||||
CUtils::dump(1U, text, m_data, 72U);
|
|
||||||
return true;
|
|
||||||
case FLCO_TALKER_ALIAS_BLOCK1:
|
|
||||||
::sprintf(text, "DMR Slot %u, Embedded Talker Alias Block 1", m_slotNo);
|
|
||||||
CUtils::dump(1U, text, m_data, 72U);
|
|
||||||
return true;
|
|
||||||
case FLCO_TALKER_ALIAS_BLOCK2:
|
|
||||||
::sprintf(text, "DMR Slot %u, Embedded Talker Alias Block 2", m_slotNo);
|
|
||||||
CUtils::dump(1U, text, m_data, 72U);
|
|
||||||
return true;
|
|
||||||
case FLCO_TALKER_ALIAS_BLOCK3:
|
|
||||||
::sprintf(text, "DMR Slot %u, Embedded Talker Alias Block 3", m_slotNo);
|
|
||||||
CUtils::dump(1U, text, m_data, 72U);
|
|
||||||
return true;
|
|
||||||
default:
|
|
||||||
::sprintf(text, "DMR Slot %u, Unknown Embedded Data", m_slotNo);
|
|
||||||
CUtils::dump(1U, text, m_data, 72U);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CDMRLC* CDMREmbeddedLC::getLC() const
|
CDMRLC* CDMREmbeddedData::getLC() const
|
||||||
{
|
{
|
||||||
if (!m_valid)
|
if (!m_valid)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -308,8 +285,38 @@ CDMRLC* CDMREmbeddedLC::getLC() const
|
||||||
return new CDMRLC(m_data);
|
return new CDMRLC(m_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CDMREmbeddedLC::reset()
|
bool CDMREmbeddedData::isValid() const
|
||||||
|
{
|
||||||
|
return m_valid;
|
||||||
|
}
|
||||||
|
|
||||||
|
FLCO CDMREmbeddedData::getFLCO() const
|
||||||
|
{
|
||||||
|
return m_FLCO;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CDMREmbeddedData::reset()
|
||||||
{
|
{
|
||||||
m_state = LCS_NONE;
|
m_state = LCS_NONE;
|
||||||
m_valid = false;
|
m_valid = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CDMREmbeddedData::getRawData(unsigned char* data) const
|
||||||
|
{
|
||||||
|
assert(data != NULL);
|
||||||
|
|
||||||
|
if (!m_valid)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
CUtils::bitsToByteBE(m_data + 0U, data[0U]);
|
||||||
|
CUtils::bitsToByteBE(m_data + 8U, data[1U]);
|
||||||
|
CUtils::bitsToByteBE(m_data + 16U, data[2U]);
|
||||||
|
CUtils::bitsToByteBE(m_data + 24U, data[3U]);
|
||||||
|
CUtils::bitsToByteBE(m_data + 32U, data[4U]);
|
||||||
|
CUtils::bitsToByteBE(m_data + 40U, data[5U]);
|
||||||
|
CUtils::bitsToByteBE(m_data + 48U, data[6U]);
|
||||||
|
CUtils::bitsToByteBE(m_data + 56U, data[7U]);
|
||||||
|
CUtils::bitsToByteBE(m_data + 65U, data[8U]);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
|
@ -16,8 +16,8 @@
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef DMREmbeddedLC_H
|
#ifndef DMREmbeddedData_H
|
||||||
#define DMREmbeddedLC_H
|
#define DMREmbeddedData_H
|
||||||
|
|
||||||
#include "DMRDefines.h"
|
#include "DMRDefines.h"
|
||||||
#include "DMRLC.h"
|
#include "DMRLC.h"
|
||||||
|
@ -29,30 +29,35 @@ enum LC_STATE {
|
||||||
LCS_THIRD
|
LCS_THIRD
|
||||||
};
|
};
|
||||||
|
|
||||||
class CDMREmbeddedLC
|
class CDMREmbeddedData
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CDMREmbeddedLC(unsigned int slotNo);
|
CDMREmbeddedData();
|
||||||
~CDMREmbeddedLC();
|
~CDMREmbeddedData();
|
||||||
|
|
||||||
bool addData(const unsigned char* data, unsigned char lcss);
|
bool addData(const unsigned char* data, unsigned char lcss);
|
||||||
CDMRLC* getLC() const;
|
|
||||||
|
|
||||||
void setData(const CDMRLC& lc);
|
CDMRLC* getLC() const;
|
||||||
|
void setLC(const CDMRLC& lc);
|
||||||
|
|
||||||
unsigned char getData(unsigned char* data, unsigned char n) const;
|
unsigned char getData(unsigned char* data, unsigned char n) const;
|
||||||
|
|
||||||
|
bool getRawData(unsigned char* data) const;
|
||||||
|
|
||||||
|
bool isValid() const;
|
||||||
|
FLCO getFLCO() const;
|
||||||
|
|
||||||
void reset();
|
void reset();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
unsigned int m_slotNo;
|
|
||||||
bool* m_raw;
|
bool* m_raw;
|
||||||
LC_STATE m_state;
|
LC_STATE m_state;
|
||||||
bool* m_data;
|
bool* m_data;
|
||||||
FLCO m_FLCO;
|
FLCO m_FLCO;
|
||||||
bool m_valid;
|
bool m_valid;
|
||||||
|
|
||||||
bool processEmbeddedData();
|
void decodeEmbeddedData();
|
||||||
|
void encodeEmbeddedData();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
186
DMRSlot.cpp
186
DMRSlot.cpp
|
@ -59,8 +59,14 @@ m_slotNo(slotNo),
|
||||||
m_queue(5000U, "DMR Slot"),
|
m_queue(5000U, "DMR Slot"),
|
||||||
m_rfState(RS_RF_LISTENING),
|
m_rfState(RS_RF_LISTENING),
|
||||||
m_netState(RS_NET_IDLE),
|
m_netState(RS_NET_IDLE),
|
||||||
m_rfEmbeddedLC(slotNo),
|
m_rfEmbeddedLC(),
|
||||||
m_netEmbeddedLC(slotNo),
|
m_rfEmbeddedData(NULL),
|
||||||
|
m_rfEmbeddedReadN(0U),
|
||||||
|
m_rfEmbeddedWriteN(1U),
|
||||||
|
m_netEmbeddedLC(),
|
||||||
|
m_netEmbeddedData(NULL),
|
||||||
|
m_netEmbeddedReadN(0U),
|
||||||
|
m_netEmbeddedWriteN(1U),
|
||||||
m_rfLC(NULL),
|
m_rfLC(NULL),
|
||||||
m_netLC(NULL),
|
m_netLC(NULL),
|
||||||
m_rfDataHeader(),
|
m_rfDataHeader(),
|
||||||
|
@ -94,11 +100,16 @@ m_fp(NULL)
|
||||||
{
|
{
|
||||||
m_lastFrame = new unsigned char[DMR_FRAME_LENGTH_BYTES + 2U];
|
m_lastFrame = new unsigned char[DMR_FRAME_LENGTH_BYTES + 2U];
|
||||||
|
|
||||||
|
m_rfEmbeddedData = new CDMREmbeddedData[2U];
|
||||||
|
m_netEmbeddedData = new CDMREmbeddedData[2U];
|
||||||
|
|
||||||
m_interval.start();
|
m_interval.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
CDMRSlot::~CDMRSlot()
|
CDMRSlot::~CDMRSlot()
|
||||||
{
|
{
|
||||||
|
delete[] m_rfEmbeddedData;
|
||||||
|
delete[] m_netEmbeddedData;
|
||||||
delete[] m_lastFrame;
|
delete[] m_lastFrame;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -186,6 +197,11 @@ void CDMRSlot::writeModem(unsigned char *data, unsigned int len)
|
||||||
|
|
||||||
m_rfLC = lc;
|
m_rfLC = lc;
|
||||||
|
|
||||||
|
// The standby LC data
|
||||||
|
m_rfEmbeddedLC.setLC(*m_rfLC);
|
||||||
|
m_rfEmbeddedData[0U].setLC(*m_rfLC);
|
||||||
|
m_rfEmbeddedData[1U].setLC(*m_rfLC);
|
||||||
|
|
||||||
// Regenerate the LC data
|
// Regenerate the LC data
|
||||||
fullLC.encode(*m_rfLC, data + 2U, DT_VOICE_LC_HEADER);
|
fullLC.encode(*m_rfLC, data + 2U, DT_VOICE_LC_HEADER);
|
||||||
|
|
||||||
|
@ -199,12 +215,13 @@ void CDMRSlot::writeModem(unsigned char *data, unsigned int len)
|
||||||
data[1U] = 0x00U;
|
data[1U] = 0x00U;
|
||||||
|
|
||||||
m_rfTimeoutTimer.start();
|
m_rfTimeoutTimer.start();
|
||||||
m_rfEmbeddedLC.reset();
|
|
||||||
|
|
||||||
m_rfFrames = 0U;
|
m_rfFrames = 0U;
|
||||||
m_rfSeqNo = 0U;
|
m_rfSeqNo = 0U;
|
||||||
m_rfBits = 1U;
|
m_rfBits = 1U;
|
||||||
m_rfErrs = 0U;
|
m_rfErrs = 0U;
|
||||||
|
m_rfEmbeddedReadN = 0U;
|
||||||
|
m_rfEmbeddedWriteN = 1U;
|
||||||
|
|
||||||
m_minRSSI = m_rssi;
|
m_minRSSI = m_rssi;
|
||||||
m_maxRSSI = m_rssi;
|
m_maxRSSI = m_rssi;
|
||||||
|
@ -471,13 +488,15 @@ void CDMRSlot::writeModem(unsigned char *data, unsigned int len)
|
||||||
}
|
}
|
||||||
|
|
||||||
m_rfBits += 141U;
|
m_rfBits += 141U;
|
||||||
|
|
||||||
m_rfFrames++;
|
m_rfFrames++;
|
||||||
|
|
||||||
data[0U] = TAG_DATA;
|
data[0U] = TAG_DATA;
|
||||||
data[1U] = 0x00U;
|
data[1U] = 0x00U;
|
||||||
|
|
||||||
m_rfEmbeddedLC.reset();
|
m_rfEmbeddedReadN = (m_rfEmbeddedReadN + 1U) % 2U;
|
||||||
|
m_rfEmbeddedWriteN = (m_rfEmbeddedWriteN + 1U) % 2U;
|
||||||
|
|
||||||
|
m_rfEmbeddedData[m_rfEmbeddedWriteN].reset();
|
||||||
|
|
||||||
if (m_duplex)
|
if (m_duplex)
|
||||||
writeQueueRF(data);
|
writeQueueRF(data);
|
||||||
|
@ -493,12 +512,6 @@ void CDMRSlot::writeModem(unsigned char *data, unsigned int len)
|
||||||
if (m_rfState == RS_RF_AUDIO) {
|
if (m_rfState == RS_RF_AUDIO) {
|
||||||
m_rfN = data[1U] & 0x0FU;
|
m_rfN = data[1U] & 0x0FU;
|
||||||
|
|
||||||
// Regenerate the EMB
|
|
||||||
CDMREMB emb;
|
|
||||||
emb.putData(data + 2U);
|
|
||||||
emb.setColorCode(m_colorCode);
|
|
||||||
emb.getData(data + 2U);
|
|
||||||
|
|
||||||
unsigned int errors = 0U;
|
unsigned int errors = 0U;
|
||||||
unsigned char fid = m_rfLC->getFID();
|
unsigned char fid = m_rfLC->getFID();
|
||||||
if (fid == FID_ETSI || fid == FID_DMRA) {
|
if (fid == FID_ETSI || fid == FID_DMRA) {
|
||||||
|
@ -507,12 +520,67 @@ void CDMRSlot::writeModem(unsigned char *data, unsigned int len)
|
||||||
m_rfErrs += errors;
|
m_rfErrs += errors;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_rfEmbeddedLC.addData(data + 2U, emb.getLCSS());
|
|
||||||
|
|
||||||
m_rfBits += 141U;
|
m_rfBits += 141U;
|
||||||
|
|
||||||
m_rfFrames++;
|
m_rfFrames++;
|
||||||
|
|
||||||
|
// Get the LCSS from the EMB
|
||||||
|
CDMREMB emb;
|
||||||
|
emb.putData(data + 2U);
|
||||||
|
unsigned char lcss = emb.getLCSS();
|
||||||
|
|
||||||
|
// Dump any interesting Embedded Data
|
||||||
|
bool ret = m_rfEmbeddedData[m_rfEmbeddedWriteN].addData(data + 2U, lcss);
|
||||||
|
if (ret) {
|
||||||
|
FLCO flco = m_rfEmbeddedData[m_rfEmbeddedWriteN].getFLCO();
|
||||||
|
|
||||||
|
unsigned char data[9U];
|
||||||
|
m_rfEmbeddedData[m_rfEmbeddedWriteN].getRawData(data);
|
||||||
|
|
||||||
|
char text[80U];
|
||||||
|
switch (flco) {
|
||||||
|
case FLCO_GROUP:
|
||||||
|
case FLCO_USER_USER:
|
||||||
|
// ::sprintf(text, "DMR Slot %u, Embedded LC", m_slotNo);
|
||||||
|
// CUtils::dump(1U, text, data, 9U);
|
||||||
|
break;
|
||||||
|
case FLCO_GPS_INFO:
|
||||||
|
::sprintf(text, "DMR Slot %u, Embedded GPS Info", m_slotNo);
|
||||||
|
CUtils::dump(1U, text, data, 9U);
|
||||||
|
break;
|
||||||
|
case FLCO_TALKER_ALIAS_HEADER:
|
||||||
|
::sprintf(text, "DMR Slot %u, Embedded Talker Alias Header", m_slotNo);
|
||||||
|
CUtils::dump(1U, text, data, 9U);
|
||||||
|
break;
|
||||||
|
case FLCO_TALKER_ALIAS_BLOCK1:
|
||||||
|
::sprintf(text, "DMR Slot %u, Embedded Talker Alias Block 1", m_slotNo);
|
||||||
|
CUtils::dump(1U, text, data, 9U);
|
||||||
|
break;
|
||||||
|
case FLCO_TALKER_ALIAS_BLOCK2:
|
||||||
|
::sprintf(text, "DMR Slot %u, Embedded Talker Alias Block 2", m_slotNo);
|
||||||
|
CUtils::dump(1U, text, data, 9U);
|
||||||
|
break;
|
||||||
|
case FLCO_TALKER_ALIAS_BLOCK3:
|
||||||
|
::sprintf(text, "DMR Slot %u, Embedded Talker Alias Block 3", m_slotNo);
|
||||||
|
CUtils::dump(1U, text, data, 9U);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
::sprintf(text, "DMR Slot %u, Unknown Embedded Data", m_slotNo);
|
||||||
|
CUtils::dump(1U, text, data, 9U);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Regenerate the previous super blocks Embedded Data or substitude the LC for it
|
||||||
|
if (m_rfEmbeddedData[m_rfEmbeddedReadN].isValid())
|
||||||
|
lcss = m_rfEmbeddedData[m_rfEmbeddedReadN].getData(data + 2U, m_rfN);
|
||||||
|
else
|
||||||
|
lcss = m_rfEmbeddedLC.getData(data + 2U, m_rfN);
|
||||||
|
|
||||||
|
// Regenerate the EMB
|
||||||
|
emb.setColorCode(m_colorCode);
|
||||||
|
emb.setLCSS(lcss);
|
||||||
|
emb.getData(data + 2U);
|
||||||
|
|
||||||
data[0U] = TAG_DATA;
|
data[0U] = TAG_DATA;
|
||||||
data[1U] = 0x00U;
|
data[1U] = 0x00U;
|
||||||
|
|
||||||
|
@ -550,6 +618,11 @@ void CDMRSlot::writeModem(unsigned char *data, unsigned int len)
|
||||||
|
|
||||||
m_rfLC = lc;
|
m_rfLC = lc;
|
||||||
|
|
||||||
|
// The standby LC data
|
||||||
|
m_rfEmbeddedLC.setLC(*m_rfLC);
|
||||||
|
m_rfEmbeddedData[0U].setLC(*m_rfLC);
|
||||||
|
m_rfEmbeddedData[1U].setLC(*m_rfLC);
|
||||||
|
|
||||||
// Create a dummy start frame to replace the received frame
|
// Create a dummy start frame to replace the received frame
|
||||||
unsigned char start[DMR_FRAME_LENGTH_BYTES + 2U];
|
unsigned char start[DMR_FRAME_LENGTH_BYTES + 2U];
|
||||||
|
|
||||||
|
@ -567,12 +640,13 @@ void CDMRSlot::writeModem(unsigned char *data, unsigned int len)
|
||||||
start[1U] = 0x00U;
|
start[1U] = 0x00U;
|
||||||
|
|
||||||
m_rfTimeoutTimer.start();
|
m_rfTimeoutTimer.start();
|
||||||
m_rfEmbeddedLC.reset();
|
|
||||||
|
|
||||||
m_rfFrames = 0U;
|
m_rfFrames = 0U;
|
||||||
m_rfSeqNo = 0U;
|
m_rfSeqNo = 0U;
|
||||||
m_rfBits = 1U;
|
m_rfBits = 1U;
|
||||||
m_rfErrs = 0U;
|
m_rfErrs = 0U;
|
||||||
|
m_rfEmbeddedReadN = 0U;
|
||||||
|
m_rfEmbeddedWriteN = 1U;
|
||||||
|
|
||||||
m_minRSSI = m_rssi;
|
m_minRSSI = m_rssi;
|
||||||
m_maxRSSI = m_rssi;
|
m_maxRSSI = m_rssi;
|
||||||
|
@ -605,7 +679,6 @@ void CDMRSlot::writeModem(unsigned char *data, unsigned int len)
|
||||||
}
|
}
|
||||||
|
|
||||||
m_rfBits += 141U;
|
m_rfBits += 141U;
|
||||||
|
|
||||||
m_rfFrames++;
|
m_rfFrames++;
|
||||||
|
|
||||||
data[0U] = TAG_DATA;
|
data[0U] = TAG_DATA;
|
||||||
|
@ -826,6 +899,11 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
|
||||||
|
|
||||||
m_netLC = lc;
|
m_netLC = lc;
|
||||||
|
|
||||||
|
// The standby LC data
|
||||||
|
m_netEmbeddedLC.setLC(*m_netLC);
|
||||||
|
m_netEmbeddedData[0U].setLC(*m_netLC);
|
||||||
|
m_netEmbeddedData[1U].setLC(*m_netLC);
|
||||||
|
|
||||||
// Regenerate the LC data
|
// Regenerate the LC data
|
||||||
fullLC.encode(*m_netLC, data + 2U, DT_VOICE_LC_HEADER);
|
fullLC.encode(*m_netLC, data + 2U, DT_VOICE_LC_HEADER);
|
||||||
|
|
||||||
|
@ -844,13 +922,13 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
|
||||||
m_lastFrameValid = false;
|
m_lastFrameValid = false;
|
||||||
|
|
||||||
m_netTimeoutTimer.start();
|
m_netTimeoutTimer.start();
|
||||||
m_netEmbeddedLC.reset();
|
|
||||||
|
|
||||||
m_netFrames = 0U;
|
m_netFrames = 0U;
|
||||||
m_netLost = 0U;
|
m_netLost = 0U;
|
||||||
|
|
||||||
m_netBits = 1U;
|
m_netBits = 1U;
|
||||||
m_netErrs = 0U;
|
m_netErrs = 0U;
|
||||||
|
m_netEmbeddedReadN = 0U;
|
||||||
|
m_netEmbeddedWriteN = 1U;
|
||||||
|
|
||||||
if (m_duplex) {
|
if (m_duplex) {
|
||||||
m_queue.clear();
|
m_queue.clear();
|
||||||
|
@ -890,7 +968,6 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
|
||||||
m_lastFrameValid = false;
|
m_lastFrameValid = false;
|
||||||
|
|
||||||
m_netTimeoutTimer.start();
|
m_netTimeoutTimer.start();
|
||||||
m_netEmbeddedLC.reset();
|
|
||||||
|
|
||||||
if (m_duplex) {
|
if (m_duplex) {
|
||||||
m_queue.clear();
|
m_queue.clear();
|
||||||
|
@ -1062,6 +1139,11 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
|
||||||
|
|
||||||
m_netLC = lc;
|
m_netLC = lc;
|
||||||
|
|
||||||
|
// The standby LC data
|
||||||
|
m_netEmbeddedLC.setLC(*m_netLC);
|
||||||
|
m_netEmbeddedData[0U].setLC(*m_netLC);
|
||||||
|
m_netEmbeddedData[1U].setLC(*m_netLC);
|
||||||
|
|
||||||
m_lastFrameValid = false;
|
m_lastFrameValid = false;
|
||||||
|
|
||||||
m_netTimeoutTimer.start();
|
m_netTimeoutTimer.start();
|
||||||
|
@ -1101,6 +1183,8 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
|
||||||
m_netLost = 0U;
|
m_netLost = 0U;
|
||||||
m_netBits = 1U;
|
m_netBits = 1U;
|
||||||
m_netErrs = 0U;
|
m_netErrs = 0U;
|
||||||
|
m_netEmbeddedReadN = 0U;
|
||||||
|
m_netEmbeddedWriteN = 1U;
|
||||||
|
|
||||||
m_netState = RS_NET_AUDIO;
|
m_netState = RS_NET_AUDIO;
|
||||||
|
|
||||||
|
@ -1139,7 +1223,11 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
|
||||||
|
|
||||||
writeQueueNet(data);
|
writeQueueNet(data);
|
||||||
|
|
||||||
m_netEmbeddedLC.reset();
|
m_netEmbeddedReadN = (m_netEmbeddedReadN + 1U) % 2U;
|
||||||
|
m_netEmbeddedWriteN = (m_netEmbeddedWriteN + 1U) % 2U;
|
||||||
|
|
||||||
|
m_netEmbeddedData[m_netEmbeddedWriteN].reset();
|
||||||
|
|
||||||
m_packetTimer.start();
|
m_packetTimer.start();
|
||||||
m_elapsed.start();
|
m_elapsed.start();
|
||||||
|
|
||||||
|
@ -1162,13 +1250,63 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
|
||||||
m_netErrs += m_fec.regenerateDMR(data + 2U);
|
m_netErrs += m_fec.regenerateDMR(data + 2U);
|
||||||
m_netBits += 141U;
|
m_netBits += 141U;
|
||||||
|
|
||||||
// Change the color code in the EMB
|
// Get the LCSS from the EMB
|
||||||
CDMREMB emb;
|
CDMREMB emb;
|
||||||
emb.putData(data + 2U);
|
emb.putData(data + 2U);
|
||||||
emb.setColorCode(m_colorCode);
|
unsigned char lcss = emb.getLCSS();
|
||||||
emb.getData(data + 2U);
|
|
||||||
|
|
||||||
m_netEmbeddedLC.addData(data + 2U, emb.getLCSS());
|
// Dump any interesting Embedded Data
|
||||||
|
bool ret = m_netEmbeddedData[m_netEmbeddedWriteN].addData(data + 2U, lcss);
|
||||||
|
if (ret) {
|
||||||
|
FLCO flco = m_netEmbeddedData[m_netEmbeddedWriteN].getFLCO();
|
||||||
|
|
||||||
|
unsigned char data[9U];
|
||||||
|
m_netEmbeddedData[m_netEmbeddedWriteN].getRawData(data);
|
||||||
|
|
||||||
|
char text[80U];
|
||||||
|
switch (flco) {
|
||||||
|
case FLCO_GROUP:
|
||||||
|
case FLCO_USER_USER:
|
||||||
|
// ::sprintf(text, "DMR Slot %u, Embedded LC", m_slotNo);
|
||||||
|
// CUtils::dump(1U, text, data, 9U);
|
||||||
|
break;
|
||||||
|
case FLCO_GPS_INFO:
|
||||||
|
::sprintf(text, "DMR Slot %u, Embedded GPS Info", m_slotNo);
|
||||||
|
CUtils::dump(1U, text, data, 9U);
|
||||||
|
break;
|
||||||
|
case FLCO_TALKER_ALIAS_HEADER:
|
||||||
|
::sprintf(text, "DMR Slot %u, Embedded Talker Alias Header", m_slotNo);
|
||||||
|
CUtils::dump(1U, text, data, 9U);
|
||||||
|
break;
|
||||||
|
case FLCO_TALKER_ALIAS_BLOCK1:
|
||||||
|
::sprintf(text, "DMR Slot %u, Embedded Talker Alias Block 1", m_slotNo);
|
||||||
|
CUtils::dump(1U, text, data, 9U);
|
||||||
|
break;
|
||||||
|
case FLCO_TALKER_ALIAS_BLOCK2:
|
||||||
|
::sprintf(text, "DMR Slot %u, Embedded Talker Alias Block 2", m_slotNo);
|
||||||
|
CUtils::dump(1U, text, data, 9U);
|
||||||
|
break;
|
||||||
|
case FLCO_TALKER_ALIAS_BLOCK3:
|
||||||
|
::sprintf(text, "DMR Slot %u, Embedded Talker Alias Block 3", m_slotNo);
|
||||||
|
CUtils::dump(1U, text, data, 9U);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
::sprintf(text, "DMR Slot %u, Unknown Embedded Data", m_slotNo);
|
||||||
|
CUtils::dump(1U, text, data, 9U);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Regenerate the previous super blocks Embedded Data or substitude the LC for it
|
||||||
|
if (m_netEmbeddedData[m_netEmbeddedReadN].isValid())
|
||||||
|
lcss = m_netEmbeddedData[m_netEmbeddedReadN].getData(data + 2U, dmrData.getN());
|
||||||
|
else
|
||||||
|
lcss = m_netEmbeddedLC.getData(data + 2U, dmrData.getN());
|
||||||
|
|
||||||
|
// Regenerate the EMB
|
||||||
|
emb.setColorCode(m_colorCode);
|
||||||
|
emb.setLCSS(lcss);
|
||||||
|
emb.getData(data + 2U);
|
||||||
|
|
||||||
data[0U] = TAG_DATA;
|
data[0U] = TAG_DATA;
|
||||||
data[1U] = 0x00U;
|
data[1U] = 0x00U;
|
||||||
|
|
12
DMRSlot.h
12
DMRSlot.h
|
@ -20,7 +20,7 @@
|
||||||
#define DMRSlot_H
|
#define DMRSlot_H
|
||||||
|
|
||||||
#include "RSSIInterpolator.h"
|
#include "RSSIInterpolator.h"
|
||||||
#include "DMREmbeddedLC.h"
|
#include "DMREmbeddedData.h"
|
||||||
#include "DMRDataHeader.h"
|
#include "DMRDataHeader.h"
|
||||||
#include "DMRNetwork.h"
|
#include "DMRNetwork.h"
|
||||||
#include "RingBuffer.h"
|
#include "RingBuffer.h"
|
||||||
|
@ -57,8 +57,14 @@ private:
|
||||||
CRingBuffer<unsigned char> m_queue;
|
CRingBuffer<unsigned char> m_queue;
|
||||||
RPT_RF_STATE m_rfState;
|
RPT_RF_STATE m_rfState;
|
||||||
RPT_NET_STATE m_netState;
|
RPT_NET_STATE m_netState;
|
||||||
CDMREmbeddedLC m_rfEmbeddedLC;
|
CDMREmbeddedData m_rfEmbeddedLC;
|
||||||
CDMREmbeddedLC m_netEmbeddedLC;
|
CDMREmbeddedData* m_rfEmbeddedData;
|
||||||
|
unsigned int m_rfEmbeddedReadN;
|
||||||
|
unsigned int m_rfEmbeddedWriteN;
|
||||||
|
CDMREmbeddedData m_netEmbeddedLC;
|
||||||
|
CDMREmbeddedData* m_netEmbeddedData;
|
||||||
|
unsigned int m_netEmbeddedReadN;
|
||||||
|
unsigned int m_netEmbeddedWriteN;
|
||||||
CDMRLC* m_rfLC;
|
CDMRLC* m_rfLC;
|
||||||
CDMRLC* m_netLC;
|
CDMRLC* m_netLC;
|
||||||
CDMRDataHeader m_rfDataHeader;
|
CDMRDataHeader m_rfDataHeader;
|
||||||
|
|
|
@ -160,7 +160,7 @@
|
||||||
<ClInclude Include="DMRDataHeader.h" />
|
<ClInclude Include="DMRDataHeader.h" />
|
||||||
<ClInclude Include="DMRDefines.h" />
|
<ClInclude Include="DMRDefines.h" />
|
||||||
<ClInclude Include="DMREMB.h" />
|
<ClInclude Include="DMREMB.h" />
|
||||||
<ClInclude Include="DMREmbeddedLC.h" />
|
<ClInclude Include="DMREmbeddedData.h" />
|
||||||
<ClInclude Include="DMRFullLC.h" />
|
<ClInclude Include="DMRFullLC.h" />
|
||||||
<ClInclude Include="DMRLC.h" />
|
<ClInclude Include="DMRLC.h" />
|
||||||
<ClInclude Include="DMRNetwork.h" />
|
<ClInclude Include="DMRNetwork.h" />
|
||||||
|
@ -230,7 +230,7 @@
|
||||||
<ClCompile Include="DMRData.cpp" />
|
<ClCompile Include="DMRData.cpp" />
|
||||||
<ClCompile Include="DMRDataHeader.cpp" />
|
<ClCompile Include="DMRDataHeader.cpp" />
|
||||||
<ClCompile Include="DMREMB.cpp" />
|
<ClCompile Include="DMREMB.cpp" />
|
||||||
<ClCompile Include="DMREmbeddedLC.cpp" />
|
<ClCompile Include="DMREmbeddedData.cpp" />
|
||||||
<ClCompile Include="DMRFullLC.cpp" />
|
<ClCompile Include="DMRFullLC.cpp" />
|
||||||
<ClCompile Include="DMRLC.cpp" />
|
<ClCompile Include="DMRLC.cpp" />
|
||||||
<ClCompile Include="DMRLookup.cpp" />
|
<ClCompile Include="DMRLookup.cpp" />
|
||||||
|
|
|
@ -131,7 +131,7 @@
|
||||||
<ClInclude Include="DMREMB.h">
|
<ClInclude Include="DMREMB.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="DMREmbeddedLC.h">
|
<ClInclude Include="DMREmbeddedData.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="DMRFullLC.h">
|
<ClInclude Include="DMRFullLC.h">
|
||||||
|
@ -325,7 +325,7 @@
|
||||||
<ClCompile Include="DMREMB.cpp">
|
<ClCompile Include="DMREMB.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="DMREmbeddedLC.cpp">
|
<ClCompile Include="DMREmbeddedData.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="DMRFullLC.cpp">
|
<ClCompile Include="DMRFullLC.cpp">
|
||||||
|
|
2
Makefile
2
Makefile
|
@ -7,7 +7,7 @@ LIBS = -lpthread
|
||||||
LDFLAGS = -g
|
LDFLAGS = -g
|
||||||
|
|
||||||
OBJECTS = \
|
OBJECTS = \
|
||||||
AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedLC.o DMRFullLC.o DMRLookup.o DMRLC.o \
|
AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedData.o DMRFullLC.o DMRLookup.o DMRLC.o \
|
||||||
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
|
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
|
||||||
Golay24128.o Hamming.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o Nextion.o NullDisplay.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o \
|
Golay24128.o Hamming.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o Nextion.o NullDisplay.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o \
|
||||||
P25Network.o P25NID.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o Sync.o TFTSerial.o Thread.o \
|
P25Network.o P25NID.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o Sync.o TFTSerial.o Thread.o \
|
||||||
|
|
|
@ -7,7 +7,7 @@ LIBS = -lwiringPi -lwiringPiDev -lpthread
|
||||||
LDFLAGS = -g -L/usr/local/lib
|
LDFLAGS = -g -L/usr/local/lib
|
||||||
|
|
||||||
OBJECTS = \
|
OBJECTS = \
|
||||||
AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedLC.o DMRFullLC.o DMRLookup.o DMRLC.o \
|
AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedData.o DMRFullLC.o DMRLookup.o DMRLC.o \
|
||||||
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
|
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
|
||||||
Golay24128.o Hamming.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o Nextion.o NullDisplay.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o \
|
Golay24128.o Hamming.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o Nextion.o NullDisplay.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o \
|
||||||
P25Network.o P25NID.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o Sync.o TFTSerial.o Thread.o \
|
P25Network.o P25NID.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o Sync.o TFTSerial.o Thread.o \
|
||||||
|
|
|
@ -7,7 +7,7 @@ LIBS = -lwiringPi -lwiringPiDev -lpthread
|
||||||
LDFLAGS = -g -L/usr/local/lib
|
LDFLAGS = -g -L/usr/local/lib
|
||||||
|
|
||||||
OBJECTS = \
|
OBJECTS = \
|
||||||
AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedLC.o DMRFullLC.o DMRLookup.o DMRLC.o \
|
AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedData.o DMRFullLC.o DMRLookup.o DMRLC.o \
|
||||||
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
|
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
|
||||||
Golay24128.o Hamming.o HD44780.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o Nextion.o NullDisplay.o P25Audio.o P25Control.o P25Data.o \
|
Golay24128.o Hamming.o HD44780.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o Nextion.o NullDisplay.o P25Audio.o P25Control.o P25Data.o \
|
||||||
P25LowSpeedData.o P25Network.o P25NID.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o Sync.o \
|
P25LowSpeedData.o P25Network.o P25NID.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o Sync.o \
|
||||||
|
|
|
@ -7,7 +7,7 @@ LIBS = -lwiringPi -lwiringPiDev -lpthread
|
||||||
LDFLAGS = -g -L/usr/local/lib
|
LDFLAGS = -g -L/usr/local/lib
|
||||||
|
|
||||||
OBJECTS = \
|
OBJECTS = \
|
||||||
AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedLC.o DMRFullLC.o DMRLookup.o DMRLC.o \
|
AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedData.o DMRFullLC.o DMRLookup.o DMRLC.o \
|
||||||
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
|
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
|
||||||
Golay24128.o Hamming.o HD44780.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o Nextion.o NullDisplay.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o \
|
Golay24128.o Hamming.o HD44780.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o Nextion.o NullDisplay.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o \
|
||||||
P25Network.o P25NID.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o Sync.o TFTSerial.o Thread.o \
|
P25Network.o P25NID.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o Sync.o TFTSerial.o Thread.o \
|
||||||
|
|
|
@ -7,7 +7,7 @@ LIBS = -lArduiPi_OLED -lpthread
|
||||||
LDFLAGS = -g -L/usr/local/lib
|
LDFLAGS = -g -L/usr/local/lib
|
||||||
|
|
||||||
OBJECTS = \
|
OBJECTS = \
|
||||||
AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedLC.o DMRFullLC.o DMRLookup.o DMRLC.o \
|
AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedData.o DMRFullLC.o DMRLookup.o DMRLC.o \
|
||||||
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
|
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
|
||||||
Golay24128.o Hamming.o OLED.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o Nextion.o NullDisplay.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o \
|
Golay24128.o Hamming.o OLED.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o Nextion.o NullDisplay.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o \
|
||||||
P25Network.o P25NID.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o Sync.o TFTSerial.o Thread.o \
|
P25Network.o P25NID.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o Sync.o TFTSerial.o Thread.o \
|
||||||
|
|
|
@ -7,7 +7,7 @@ LIBS = -lwiringPi -lwiringPiDev -lpthread
|
||||||
LDFLAGS = -g -L/usr/local/lib
|
LDFLAGS = -g -L/usr/local/lib
|
||||||
|
|
||||||
OBJECTS = \
|
OBJECTS = \
|
||||||
AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedLC.o DMRFullLC.o DMRLookup.o DMRLC.o \
|
AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedData.o DMRFullLC.o DMRLookup.o DMRLC.o \
|
||||||
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
|
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
|
||||||
Golay24128.o Hamming.o HD44780.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o Nextion.o NullDisplay.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o \
|
Golay24128.o Hamming.o HD44780.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o Nextion.o NullDisplay.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o \
|
||||||
P25Network.o P25NID.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o Sync.o TFTSerial.o Thread.o \
|
P25Network.o P25NID.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o Sync.o TFTSerial.o Thread.o \
|
||||||
|
|
|
@ -7,7 +7,7 @@ LIBS = -lpthread -lsocket
|
||||||
LDFLAGS = -g
|
LDFLAGS = -g
|
||||||
|
|
||||||
OBJECTS = \
|
OBJECTS = \
|
||||||
AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedLC.o DMRFullLC.o DMRLookup.o DMRLC.o \
|
AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedData.o DMRFullLC.o DMRLookup.o DMRLC.o \
|
||||||
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
|
DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o DStarSlowData.o Golay2087.o \
|
||||||
Golay24128.o Hamming.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o Nextion.o NullDisplay.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o \
|
Golay24128.o Hamming.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o Nextion.o NullDisplay.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o \
|
||||||
P25Network.o P25NID.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o Sync.o TFTSerial.o Thread.o \
|
P25Network.o P25NID.o P25Utils.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o Sync.o TFTSerial.o Thread.o \
|
||||||
|
|
Loading…
Reference in a new issue