Change the DMR sync bytes when in DMO mode.
This commit is contained in:
parent
d84b3cbd7d
commit
e16c27be61
133
DMRSlot.cpp
133
DMRSlot.cpp
|
@ -167,8 +167,11 @@ void CDMRSlot::writeModem(unsigned char *data, unsigned int len)
|
|||
// Regenerate the Slot Type
|
||||
slotType.getData(data + 2U);
|
||||
|
||||
// Convert the Data Sync to be from the BS
|
||||
CSync::addDMRDataSync(data + 2U);
|
||||
// Convert the Data Sync to be from the BS or MS as needed
|
||||
if (m_duplex)
|
||||
CSync::addDMRBSDataSync(data + 2U);
|
||||
else
|
||||
CSync::addDMRMSDataSync(data + 2U);
|
||||
|
||||
data[0U] = TAG_DATA;
|
||||
data[1U] = 0x00U;
|
||||
|
@ -209,8 +212,11 @@ void CDMRSlot::writeModem(unsigned char *data, unsigned int len)
|
|||
// Regenerate the Slot Type
|
||||
slotType.getData(data + 2U);
|
||||
|
||||
// Convert the Data Sync to be from the BS
|
||||
CSync::addDMRDataSync(data + 2U);
|
||||
// Convert the Data Sync to be from the BS or MS as needed
|
||||
if (m_duplex)
|
||||
CSync::addDMRBSDataSync(data + 2U);
|
||||
else
|
||||
CSync::addDMRMSDataSync(data + 2U);
|
||||
|
||||
// Regenerate the payload
|
||||
CBPTC19696 bptc;
|
||||
|
@ -236,8 +242,11 @@ void CDMRSlot::writeModem(unsigned char *data, unsigned int len)
|
|||
// Regenerate the Slot Type
|
||||
slotType.getData(data + 2U);
|
||||
|
||||
// Set the Data Sync to be from the BS
|
||||
CSync::addDMRDataSync(data + 2U);
|
||||
// Convert the Data Sync to be from the BS or MS as needed
|
||||
if (m_duplex)
|
||||
CSync::addDMRBSDataSync(data + 2U);
|
||||
else
|
||||
CSync::addDMRMSDataSync(data + 2U);
|
||||
|
||||
data[0U] = TAG_EOT;
|
||||
data[1U] = 0x00U;
|
||||
|
@ -282,8 +291,11 @@ void CDMRSlot::writeModem(unsigned char *data, unsigned int len)
|
|||
// Regenerate the Slot Type
|
||||
slotType.getData(data + 2U);
|
||||
|
||||
// Convert the Data Sync to be from the BS
|
||||
CSync::addDMRDataSync(data + 2U);
|
||||
// Convert the Data Sync to be from the BS or MS as needed
|
||||
if (m_duplex)
|
||||
CSync::addDMRBSDataSync(data + 2U);
|
||||
else
|
||||
CSync::addDMRMSDataSync(data + 2U);
|
||||
|
||||
data[0U] = m_rfFrames == 0U ? TAG_EOT : TAG_DATA;
|
||||
data[1U] = 0x00U;
|
||||
|
@ -329,8 +341,11 @@ void CDMRSlot::writeModem(unsigned char *data, unsigned int len)
|
|||
// Regenerate the Slot Type
|
||||
slotType.getData(data + 2U);
|
||||
|
||||
// Convert the Data Sync to be from the BS
|
||||
CSync::addDMRDataSync(data + 2U);
|
||||
// Convert the Data Sync to be from the BS or MS as needed
|
||||
if (m_duplex)
|
||||
CSync::addDMRBSDataSync(data + 2U);
|
||||
else
|
||||
CSync::addDMRMSDataSync(data + 2U);
|
||||
|
||||
m_rfSeqNo = 0U;
|
||||
|
||||
|
@ -387,8 +402,11 @@ void CDMRSlot::writeModem(unsigned char *data, unsigned int len)
|
|||
// Regenerate the Slot Type
|
||||
slotType.getData(data + 2U);
|
||||
|
||||
// Convert the Data Sync to be from the BS
|
||||
CSync::addDMRDataSync(data + 2U);
|
||||
// Convert the Data Sync to be from the BS or MS as needed
|
||||
if (m_duplex)
|
||||
CSync::addDMRBSDataSync(data + 2U);
|
||||
else
|
||||
CSync::addDMRMSDataSync(data + 2U);
|
||||
|
||||
m_rfFrames--;
|
||||
|
||||
|
@ -405,8 +423,11 @@ void CDMRSlot::writeModem(unsigned char *data, unsigned int len)
|
|||
}
|
||||
} else if (audioSync) {
|
||||
if (m_rfState == RS_RF_AUDIO) {
|
||||
// Convert the Audio Sync to be from the BS
|
||||
CSync::addDMRAudioSync(data + 2U);
|
||||
// Convert the Audio Sync to be from the BS or MS as needed
|
||||
if (m_duplex)
|
||||
CSync::addDMRBSAudioSync(data + 2U);
|
||||
else
|
||||
CSync::addDMRMSAudioSync(data + 2U);
|
||||
|
||||
unsigned int errors = 0U;
|
||||
unsigned char fid = m_rfLC->getFID();
|
||||
|
@ -490,7 +511,10 @@ void CDMRSlot::writeModem(unsigned char *data, unsigned int len)
|
|||
// Create a dummy start frame to replace the received frame
|
||||
unsigned char start[DMR_FRAME_LENGTH_BYTES + 2U];
|
||||
|
||||
CSync::addDMRDataSync(data + 2U);
|
||||
if (m_duplex)
|
||||
CSync::addDMRBSDataSync(start + 2U);
|
||||
else
|
||||
CSync::addDMRMSDataSync(start + 2U);
|
||||
|
||||
CDMRFullLC fullLC;
|
||||
fullLC.encode(*m_rfLC, start + 2U, DT_VOICE_LC_HEADER);
|
||||
|
@ -589,7 +613,10 @@ void CDMRSlot::endOfRFData()
|
|||
if (m_duplex) {
|
||||
unsigned char bytes[DMR_FRAME_LENGTH_BYTES + 2U];
|
||||
|
||||
CSync::addDMRDataSync(bytes + 2U);
|
||||
if (m_duplex)
|
||||
CSync::addDMRBSDataSync(bytes + 2U);
|
||||
else
|
||||
CSync::addDMRMSDataSync(bytes + 2U);
|
||||
|
||||
CDMRSlotType slotType;
|
||||
slotType.setDataType(DT_TERMINATOR_WITH_LC);
|
||||
|
@ -629,7 +656,10 @@ void CDMRSlot::writeEndRF(bool writeEnd)
|
|||
// Create a dummy start end frame
|
||||
unsigned char data[DMR_FRAME_LENGTH_BYTES + 2U];
|
||||
|
||||
CSync::addDMRDataSync(data + 2U);
|
||||
if (m_duplex)
|
||||
CSync::addDMRBSDataSync(data + 2U);
|
||||
else
|
||||
CSync::addDMRMSDataSync(data + 2U);
|
||||
|
||||
CDMRFullLC fullLC;
|
||||
fullLC.encode(*m_rfLC, data + 2U, DT_TERMINATOR_WITH_LC);
|
||||
|
@ -658,7 +688,10 @@ void CDMRSlot::endOfNetData()
|
|||
if (m_duplex) {
|
||||
unsigned char bytes[DMR_FRAME_LENGTH_BYTES + 2U];
|
||||
|
||||
CSync::addDMRDataSync(bytes + 2U);
|
||||
if (m_duplex)
|
||||
CSync::addDMRBSDataSync(bytes + 2U);
|
||||
else
|
||||
CSync::addDMRMSDataSync(bytes + 2U);
|
||||
|
||||
CDMRSlotType slotType;
|
||||
slotType.setDataType(DT_TERMINATOR_WITH_LC);
|
||||
|
@ -702,7 +735,10 @@ void CDMRSlot::writeEndNet(bool writeEnd)
|
|||
// Create a dummy start end frame
|
||||
unsigned char data[DMR_FRAME_LENGTH_BYTES + 2U];
|
||||
|
||||
CSync::addDMRDataSync(data + 2U);
|
||||
if (m_duplex)
|
||||
CSync::addDMRBSDataSync(data + 2U);
|
||||
else
|
||||
CSync::addDMRMSDataSync(data + 2U);
|
||||
|
||||
CDMRFullLC fullLC;
|
||||
fullLC.encode(*m_netLC, data + 2U, DT_TERMINATOR_WITH_LC);
|
||||
|
@ -772,8 +808,11 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
|
|||
slotType.setDataType(DT_VOICE_LC_HEADER);
|
||||
slotType.getData(data + 2U);
|
||||
|
||||
// Convert the Data Sync to be from the BS
|
||||
CSync::addDMRDataSync(data + 2U);
|
||||
// Convert the Data Sync to be from the BS or MS as needed
|
||||
if (m_duplex)
|
||||
CSync::addDMRBSDataSync(data + 2U);
|
||||
else
|
||||
CSync::addDMRMSDataSync(data + 2U);
|
||||
|
||||
data[0U] = TAG_DATA;
|
||||
data[1U] = 0x00U;
|
||||
|
@ -831,8 +870,11 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
|
|||
slotType.setDataType(DT_VOICE_PI_HEADER);
|
||||
slotType.getData(data + 2U);
|
||||
|
||||
// Convert the Data Sync to be from the BS
|
||||
CSync::addDMRDataSync(data + 2U);
|
||||
// Convert the Data Sync to be from the BS or MS as needed
|
||||
if (m_duplex)
|
||||
CSync::addDMRBSDataSync(data + 2U);
|
||||
else
|
||||
CSync::addDMRMSDataSync(data + 2U);
|
||||
|
||||
// Regenerate the payload
|
||||
CBPTC19696 bptc;
|
||||
|
@ -867,8 +909,11 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
|
|||
slotType.setDataType(DT_TERMINATOR_WITH_LC);
|
||||
slotType.getData(data + 2U);
|
||||
|
||||
// Convert the Data Sync to be from the BS
|
||||
CSync::addDMRDataSync(data + 2U);
|
||||
// Convert the Data Sync to be from the BS or MS as needed
|
||||
if (m_duplex)
|
||||
CSync::addDMRBSDataSync(data + 2U);
|
||||
else
|
||||
CSync::addDMRMSDataSync(data + 2U);
|
||||
|
||||
data[0U] = TAG_EOT;
|
||||
data[1U] = 0x00U;
|
||||
|
@ -920,8 +965,11 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
|
|||
slotType.setDataType(DT_DATA_HEADER);
|
||||
slotType.getData(data + 2U);
|
||||
|
||||
// Convert the Data Sync to be from the BS
|
||||
CSync::addDMRDataSync(data + 2U);
|
||||
// Convert the Data Sync to be from the BS or MS as needed
|
||||
if (m_duplex)
|
||||
CSync::addDMRBSDataSync(data + 2U);
|
||||
else
|
||||
CSync::addDMRMSDataSync(data + 2U);
|
||||
|
||||
data[0U] = m_netFrames == 0U ? TAG_EOT : TAG_DATA;
|
||||
data[1U] = 0x00U;
|
||||
|
@ -971,7 +1019,10 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
|
|||
// Create a dummy start frame
|
||||
unsigned char start[DMR_FRAME_LENGTH_BYTES + 2U];
|
||||
|
||||
CSync::addDMRDataSync(start + 2U);
|
||||
if (m_duplex)
|
||||
CSync::addDMRBSDataSync(start + 2U);
|
||||
else
|
||||
CSync::addDMRMSDataSync(start + 2U);
|
||||
|
||||
CDMRFullLC fullLC;
|
||||
fullLC.encode(*m_netLC, start + 2U, DT_VOICE_LC_HEADER);
|
||||
|
@ -1017,8 +1068,11 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
|
|||
data[0U] = TAG_DATA;
|
||||
data[1U] = 0x00U;
|
||||
|
||||
// Convert the Audio Sync to be from the BS
|
||||
CSync::addDMRAudioSync(data + 2U);
|
||||
// Convert the Audio Sync to be from the BS or MS as needed
|
||||
if (m_duplex)
|
||||
CSync::addDMRBSAudioSync(data + 2U);
|
||||
else
|
||||
CSync::addDMRMSAudioSync(data + 2U);
|
||||
|
||||
// Initialise the lost packet data
|
||||
if (m_netFrames == 0U) {
|
||||
|
@ -1124,8 +1178,11 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
|
|||
slotType.setColorCode(m_colorCode);
|
||||
slotType.getData(data + 2U);
|
||||
|
||||
// Convert the Data Sync to be from the BS
|
||||
CSync::addDMRDataSync(data + 2U);
|
||||
// Convert the Data Sync to be from the BS or MS as needed
|
||||
if (m_duplex)
|
||||
CSync::addDMRBSDataSync(data + 2U);
|
||||
else
|
||||
CSync::addDMRMSDataSync(data + 2U);
|
||||
|
||||
data[0U] = TAG_DATA;
|
||||
data[1U] = 0x00U;
|
||||
|
@ -1182,8 +1239,11 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
|
|||
slotType.setColorCode(m_colorCode);
|
||||
slotType.getData(data + 2U);
|
||||
|
||||
// Convert the Data Sync to be from the BS
|
||||
CSync::addDMRDataSync(data + 2U);
|
||||
// Convert the Data Sync to be from the BS or MS as needed
|
||||
if (m_duplex)
|
||||
CSync::addDMRBSDataSync(data + 2U);
|
||||
else
|
||||
CSync::addDMRMSDataSync(data + 2U);
|
||||
|
||||
m_netFrames--;
|
||||
|
||||
|
@ -1562,7 +1622,10 @@ void CDMRSlot::insertSilence(unsigned int count)
|
|||
}
|
||||
|
||||
if (n == 0U) {
|
||||
CSync::addDMRAudioSync(data + 2U);
|
||||
if (m_duplex)
|
||||
CSync::addDMRBSAudioSync(data + 2U);
|
||||
else
|
||||
CSync::addDMRMSAudioSync(data + 2U);
|
||||
} else {
|
||||
unsigned char lcss = m_netEmbeddedLC.getData(data + 2U, n);
|
||||
|
||||
|
|
20
Sync.cpp
20
Sync.cpp
|
@ -34,7 +34,7 @@ void CSync::addDStarSync(unsigned char* data)
|
|||
::memcpy(data + DSTAR_VOICE_FRAME_LENGTH_BYTES, DSTAR_SYNC_BYTES, DSTAR_DATA_FRAME_LENGTH_BYTES);
|
||||
}
|
||||
|
||||
void CSync::addDMRDataSync(unsigned char* data)
|
||||
void CSync::addDMRBSDataSync(unsigned char* data)
|
||||
{
|
||||
assert(data != NULL);
|
||||
|
||||
|
@ -42,7 +42,7 @@ void CSync::addDMRDataSync(unsigned char* data)
|
|||
data[i + 13U] = (data[i + 13U] & ~SYNC_MASK[i]) | BS_SOURCED_DATA_SYNC[i];
|
||||
}
|
||||
|
||||
void CSync::addDMRAudioSync(unsigned char* data)
|
||||
void CSync::addDMRBSAudioSync(unsigned char* data)
|
||||
{
|
||||
assert(data != NULL);
|
||||
|
||||
|
@ -50,6 +50,22 @@ void CSync::addDMRAudioSync(unsigned char* data)
|
|||
data[i + 13U] = (data[i + 13U] & ~SYNC_MASK[i]) | BS_SOURCED_AUDIO_SYNC[i];
|
||||
}
|
||||
|
||||
void CSync::addDMRMSDataSync(unsigned char* data)
|
||||
{
|
||||
assert(data != NULL);
|
||||
|
||||
for (unsigned int i = 0U; i < 7U; i++)
|
||||
data[i + 13U] = (data[i + 13U] & ~SYNC_MASK[i]) | MS_SOURCED_DATA_SYNC[i];
|
||||
}
|
||||
|
||||
void CSync::addDMRMSAudioSync(unsigned char* data)
|
||||
{
|
||||
assert(data != NULL);
|
||||
|
||||
for (unsigned int i = 0U; i < 7U; i++)
|
||||
data[i + 13U] = (data[i + 13U] & ~SYNC_MASK[i]) | MS_SOURCED_AUDIO_SYNC[i];
|
||||
}
|
||||
|
||||
void CSync::addYSFSync(unsigned char* data)
|
||||
{
|
||||
assert(data != NULL);
|
||||
|
|
7
Sync.h
7
Sync.h
|
@ -24,8 +24,11 @@ class CSync
|
|||
public:
|
||||
static void addDStarSync(unsigned char* data);
|
||||
|
||||
static void addDMRDataSync(unsigned char* data);
|
||||
static void addDMRAudioSync(unsigned char* data);
|
||||
static void addDMRBSDataSync(unsigned char* data);
|
||||
static void addDMRBSAudioSync(unsigned char* data);
|
||||
|
||||
static void addDMRMSDataSync(unsigned char* data);
|
||||
static void addDMRMSAudioSync(unsigned char* data);
|
||||
|
||||
static void addYSFSync(unsigned char* data);
|
||||
|
||||
|
|
Loading…
Reference in a new issue