remove DFSI opcode, this will be handled a different way;

pull/12/head
Bryan Biedenkapp 4 years ago
parent d79be88bc9
commit f5684879ca

@ -138,11 +138,6 @@ enum HOST_STATE {
HOST_STATE_QUIT = 255U,
};
const uint8_t TAG_HEADER = 0x00U;
const uint8_t TAG_DATA = 0x01U;
const uint8_t TAG_LOST = 0x02U;
const uint8_t TAG_EOT = 0x03U;
enum RPT_RF_STATE {
RS_RF_LISTENING,
RS_RF_LATE_ENTRY,

@ -185,7 +185,7 @@ bool Control::processWakeup(const uint8_t* data)
assert(data != NULL);
// wakeups always come in on slot 1
if (data[0U] != TAG_DATA || data[1U] != (DMR_IDLE_RX | DMR_SYNC_DATA | DT_CSBK))
if (data[0U] != modem::TAG_DATA || data[1U] != (DMR_IDLE_RX | DMR_SYNC_DATA | DT_CSBK))
return false;
// generate a new CSBK and check validity

@ -131,7 +131,7 @@ bool ControlPacket::process(uint8_t* data, uint32_t len)
m_slot->m_rfSeqNo = 0U;
data[0U] = TAG_DATA;
data[0U] = modem::TAG_DATA;
data[1U] = 0x00U;
if (m_slot->m_duplex)
@ -262,7 +262,7 @@ void ControlPacket::processNetwork(const data::Data & dmrData)
// Convert the Data Sync to be from the BS or MS as needed
Sync::addDMRDataSync(data + 2U, m_slot->m_duplex);
data[0U] = TAG_DATA;
data[0U] = modem::TAG_DATA;
data[1U] = 0x00U;
if (csbko == CSBKO_PRECCSBK && csbk.getDataContent()) {
@ -421,7 +421,7 @@ void ControlPacket::writeRF_Ext_Func(uint32_t func, uint32_t arg, uint32_t dstId
m_slot->m_rfSeqNo = 0U;
data[0U] = TAG_DATA;
data[0U] = modem::TAG_DATA;
data[1U] = 0x00U;
if (m_slot->m_duplex)
@ -469,7 +469,7 @@ void ControlPacket::writeRF_Call_Alrt(uint32_t srcId, uint32_t dstId)
m_slot->m_rfSeqNo = 0U;
data[0U] = TAG_DATA;
data[0U] = modem::TAG_DATA;
data[1U] = 0x00U;
if (m_slot->m_duplex)
@ -536,7 +536,7 @@ void ControlPacket::writeRF_TSCC_Aloha()
m_slot->m_rfSeqNo = 0U;
data[0U] = TAG_DATA;
data[0U] = modem::TAG_DATA;
data[1U] = 0x00U;
if (m_slot->m_duplex)
@ -583,7 +583,7 @@ void ControlPacket::writeRF_TSCC_Bcast_Ann_Wd(uint32_t channelNo, bool annWd)
// Convert the Data Sync to be from the BS or MS as needed
Sync::addDMRDataSync(data + 2U, m_slot->m_duplex);
data[0U] = TAG_DATA;
data[0U] = modem::TAG_DATA;
data[1U] = 0x00U;
if (m_slot->m_duplex)
@ -624,7 +624,7 @@ void ControlPacket::writeRF_TSCC_Bcast_Sys_Parm()
m_slot->m_rfSeqNo = 0U;
data[0U] = TAG_DATA;
data[0U] = modem::TAG_DATA;
data[1U] = 0x00U;
if (m_slot->m_duplex)

@ -88,13 +88,13 @@ namespace dmr
const uint8_t SYNC_MASK[] = { 0x0FU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xFFU, 0xF0U };
// The PR FILL and Data Sync pattern.
const uint8_t DMR_IDLE_DATA[] = { TAG_DATA, 0x00U,
const uint8_t DMR_IDLE_DATA[] = { 0x01U, 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 uint8_t DMR_SILENCE_DATA[] = { TAG_DATA, 0x00U,
const uint8_t DMR_SILENCE_DATA[] = { 0x01U, 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 };

@ -97,7 +97,7 @@ bool DataPacket::process(uint8_t* data, uint32_t len)
Sync::addDMRDataSync(data + 2U, m_slot->m_duplex);
if (!m_slot->m_rfTimeout) {
data[0U] = TAG_EOT;
data[0U] = modem::TAG_EOT;
data[1U] = 0x00U;
m_slot->writeNetworkRF(data, DT_TERMINATOR_WITH_LC);
@ -180,7 +180,7 @@ bool DataPacket::process(uint8_t* data, uint32_t len)
// Convert the Data Sync to be from the BS or MS as needed
Sync::addDMRDataSync(data + 2U, m_slot->m_duplex);
data[0U] = m_slot->m_rfFrames == 0U ? TAG_EOT : TAG_DATA;
data[0U] = m_slot->m_rfFrames == 0U ? modem::TAG_EOT : modem::TAG_DATA;
data[1U] = 0x00U;
if (m_slot->m_duplex && m_repeatDataPacket)
@ -254,7 +254,7 @@ bool DataPacket::process(uint8_t* data, uint32_t len)
m_slot->m_rfFrames--;
data[0U] = m_slot->m_rfFrames == 0U ? TAG_EOT : TAG_DATA;
data[0U] = m_slot->m_rfFrames == 0U ? modem::TAG_EOT : modem::TAG_DATA;
data[1U] = 0x00U;
// regenerate the Slot Type
@ -325,7 +325,7 @@ void DataPacket::processNetwork(const data::Data& dmrData)
Sync::addDMRDataSync(data + 2U, m_slot->m_duplex);
if (!m_slot->m_netTimeout) {
data[0U] = TAG_EOT;
data[0U] = modem::TAG_EOT;
data[1U] = 0x00U;
if (m_slot->m_duplex) {
@ -383,7 +383,7 @@ void DataPacket::processNetwork(const data::Data& dmrData)
// Convert the Data Sync to be from the BS or MS as needed
Sync::addDMRDataSync(data + 2U, m_slot->m_duplex);
data[0U] = m_slot->m_netFrames == 0U ? TAG_EOT : TAG_DATA;
data[0U] = m_slot->m_netFrames == 0U ? modem::TAG_EOT : modem::TAG_DATA;
data[1U] = 0x00U;
// Put a small delay into starting transmission
@ -466,7 +466,7 @@ void DataPacket::processNetwork(const data::Data& dmrData)
// convert the Data Sync to be from the BS or MS as needed
Sync::addDMRDataSync(data + 2U, m_slot->m_duplex);
data[0U] = m_slot->m_netFrames == 0U ? TAG_EOT : TAG_DATA;
data[0U] = m_slot->m_netFrames == 0U ? modem::TAG_EOT : modem::TAG_DATA;
data[1U] = 0x00U;
m_slot->writeQueueNet(data);

@ -186,7 +186,7 @@ bool Slot::processFrame(uint8_t *data, uint32_t len)
{
assert(data != NULL);
if (data[0U] == TAG_LOST && m_rfState == RS_RF_AUDIO) {
if (data[0U] == modem::TAG_LOST && m_rfState == RS_RF_AUDIO) {
if (m_rssi != 0U) {
::ActivityLog("DMR", true, "Slot %u RF voice transmission lost, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm",
m_slotNo, float(m_rfFrames) / 16.667F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount);
@ -209,13 +209,13 @@ bool Slot::processFrame(uint8_t *data, uint32_t len)
}
}
if (data[0U] == TAG_LOST && m_rfState == RS_RF_DATA) {
if (data[0U] == modem::TAG_LOST && m_rfState == RS_RF_DATA) {
::ActivityLog("DMR", true, "Slot %u, RF data transmission lost", m_slotNo);
writeEndRF();
return false;
}
if (data[0U] == TAG_LOST) {
if (data[0U] == modem::TAG_LOST) {
m_rfState = RS_RF_LISTENING;
m_rfLastDstId = 0U;
m_rfTGHang.stop();
@ -757,7 +757,7 @@ void Slot::writeEndRF(bool writeEnd)
slotType.setDataType(DT_TERMINATOR_WITH_LC);
slotType.encode(data + 2U);
data[0U] = TAG_EOT;
data[0U] = modem::TAG_EOT;
data[1U] = 0x00U;
for (uint32_t i = 0U; i < m_hangCount; i++)
@ -814,7 +814,7 @@ void Slot::writeEndNet(bool writeEnd)
slotType.setDataType(DT_TERMINATOR_WITH_LC);
slotType.encode(data + 2U);
data[0U] = TAG_EOT;
data[0U] = modem::TAG_EOT;
data[1U] = 0x00U;
if (m_duplex) {

@ -158,7 +158,7 @@ bool VoicePacket::process(uint8_t* data, uint32_t len)
// Convert the Data Sync to be from the BS or MS as needed
Sync::addDMRDataSync(data + 2U, m_slot->m_duplex);
data[0U] = TAG_DATA;
data[0U] = modem::TAG_DATA;
data[1U] = 0x00U;
m_slot->m_rfTimeoutTimer.start();
@ -225,7 +225,7 @@ bool VoicePacket::process(uint8_t* data, uint32_t len)
// Convert the Data Sync to be from the BS or MS as needed
Sync::addDMRDataSync(data + 2U, m_slot->m_duplex);
data[0U] = TAG_DATA;
data[0U] = modem::TAG_DATA;
data[1U] = 0x00U;
if (m_slot->m_duplex)
@ -280,7 +280,7 @@ bool VoicePacket::process(uint8_t* data, uint32_t len)
m_rfEmbeddedData[m_rfEmbeddedWriteN].reset();
if (!m_slot->m_rfTimeout) {
data[0U] = TAG_DATA;
data[0U] = modem::TAG_DATA;
data[1U] = 0x00U;
if (m_slot->m_duplex)
@ -435,7 +435,7 @@ bool VoicePacket::process(uint8_t* data, uint32_t len)
emb.encode(data + 2U);
if (!m_slot->m_rfTimeout) {
data[0U] = TAG_DATA;
data[0U] = modem::TAG_DATA;
data[1U] = 0x00U;
m_slot->writeNetworkRF(data, DT_VOICE, errors);
@ -514,7 +514,7 @@ bool VoicePacket::process(uint8_t* data, uint32_t len)
slotType.setDataType(DT_VOICE_LC_HEADER);
slotType.encode(start + 2U);
start[0U] = TAG_DATA;
start[0U] = modem::TAG_DATA;
start[1U] = 0x00U;
m_slot->m_rfTimeoutTimer.start();
@ -585,7 +585,7 @@ bool VoicePacket::process(uint8_t* data, uint32_t len)
m_slot->m_rfBits += 141U;
m_slot->m_rfFrames++;
data[0U] = TAG_DATA;
data[0U] = modem::TAG_DATA;
data[1U] = 0x00U;
if (m_slot->m_duplex)
@ -667,7 +667,7 @@ void VoicePacket::processNetwork(const data::Data& dmrData)
// Convert the Data Sync to be from the BS or MS as needed
Sync::addDMRDataSync(data + 2U, m_slot->m_duplex);
data[0U] = TAG_DATA;
data[0U] = modem::TAG_DATA;
data[1U] = 0x00U;
m_slot->m_voice->m_lastFrameValid = false;
@ -749,7 +749,7 @@ void VoicePacket::processNetwork(const data::Data& dmrData)
slotType.setDataType(DT_VOICE_LC_HEADER);
slotType.encode(start + 2U);
start[0U] = TAG_DATA;
start[0U] = modem::TAG_DATA;
start[1U] = 0x00U;
if (m_slot->m_duplex) {
@ -797,7 +797,7 @@ void VoicePacket::processNetwork(const data::Data& dmrData)
// Convert the Data Sync to be from the BS or MS as needed
Sync::addDMRDataSync(data + 2U, m_slot->m_duplex);
data[0U] = TAG_DATA;
data[0U] = modem::TAG_DATA;
data[1U] = 0x00U;
m_slot->writeQueueNet(data);
@ -846,7 +846,7 @@ void VoicePacket::processNetwork(const data::Data& dmrData)
slotType.setDataType(DT_VOICE_LC_HEADER);
slotType.encode(start + 2U);
start[0U] = TAG_DATA;
start[0U] = modem::TAG_DATA;
start[1U] = 0x00U;
if (m_slot->m_duplex) {
@ -887,7 +887,7 @@ void VoicePacket::processNetwork(const data::Data& dmrData)
}
m_slot->m_netBits += 141U;
data[0U] = TAG_DATA;
data[0U] = modem::TAG_DATA;
data[1U] = 0x00U;
// Convert the Audio Sync to be from the BS or MS as needed
@ -1022,7 +1022,7 @@ void VoicePacket::processNetwork(const data::Data& dmrData)
emb.setLCSS(lcss);
emb.encode(data + 2U);
data[0U] = TAG_DATA;
data[0U] = modem::TAG_DATA;
data[1U] = 0x00U;
// Initialise the lost packet data

@ -654,32 +654,6 @@ void Modem::clock(uint32_t ms)
}
break;
/** DFSI */
case CMD_DFSI_DATA:
{
if (!m_useDFSI) {
LogError(LOG_MODEM, "CMD_DFSI_DATA, without being in P25 DFSI mode?; useDFSI = %u", m_useDFSI);
break;
}
//if (m_trace)
// Utils::dump(1U, "RX P25 DFSI Data", m_buffer, m_length);
if (m_rspDoubleLength) {
LogError(LOG_MODEM, "CMD_DFSI_DATA double length?; len = %u", m_length);
break;
}
uint8_t data = m_length - 2U;
m_rxP25Data.addData(&data, 1U);
data = TAG_DATA;
m_rxP25Data.addData(&data, 1U);
m_rxP25Data.addData(m_buffer + 3U, m_length - 3U);
}
break;
/** General */
case CMD_GET_STATUS:
{
@ -1065,6 +1039,11 @@ void Modem::injectDMRData1(const uint8_t* data, uint32_t length)
assert(data != NULL);
assert(length > 0U);
if (m_useDFSI) {
LogWarning(LOG_MODEM, "Cannot inject DMR Slot 1 Data in DFSI mode");
return;
}
if (m_trace)
Utils::dump(1U, "Injected DMR Slot 1 Data", data, length);
@ -1089,6 +1068,11 @@ void Modem::injectDMRData2(const uint8_t* data, uint32_t length)
assert(data != NULL);
assert(length > 0U);
if (m_useDFSI) {
LogWarning(LOG_MODEM, "Cannot inject DMr Slot 2 Data in DFSI mode");
return;
}
if (m_trace)
Utils::dump(1U, "Injected DMR Slot 2 Data", data, length);
@ -1203,7 +1187,7 @@ bool Modem::writeP25Data(const uint8_t* data, uint32_t length)
buffer[0U] = DVM_FRAME_START;
buffer[1U] = length + 2U;
buffer[2U] = (m_useDFSI) ? CMD_DFSI_DATA : CMD_P25_DATA;
buffer[2U] = CMD_P25_DATA;
::memcpy(buffer + 3U, data + 1U, length - 1U);

@ -136,6 +136,15 @@ namespace modem
CMD_DEBUG_DUMP = 0xFAU,
};
enum CMD_TAGS {
TAG_HEADER = 0x00U,
TAG_DATA = 0x01U,
TAG_LOST = 0x02U,
TAG_EOT = 0x03U,
};
enum CMD_REASON_CODE {
RSN_OK = 0U,
RSN_NAK = 1U,

@ -316,7 +316,7 @@ bool Control::processFrame(uint8_t* data, uint32_t len)
bool sync = data[1U] == 0x01U;
if (data[0U] == TAG_LOST && m_rfState == RS_RF_AUDIO) {
if (data[0U] == modem::TAG_LOST && m_rfState == RS_RF_AUDIO) {
if (m_rssi != 0U) {
::ActivityLog("P25", true, "transmission lost, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm",
float(m_voice->m_rfFrames) / 5.56F, float(m_voice->m_rfErrs * 100U) / float(m_voice->m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount);
@ -352,7 +352,7 @@ bool Control::processFrame(uint8_t* data, uint32_t len)
return false;
}
if (data[0U] == TAG_LOST && m_rfState == RS_RF_DATA) {
if (data[0U] == modem::TAG_LOST && m_rfState == RS_RF_DATA) {
m_rfState = RS_RF_LISTENING;
m_rfLastDstId = 0U;
m_rfTGHang.stop();
@ -367,7 +367,7 @@ bool Control::processFrame(uint8_t* data, uint32_t len)
return false;
}
if (data[0U] == TAG_LOST) {
if (data[0U] == modem::TAG_LOST) {
m_rfState = RS_RF_LISTENING;
m_voice->resetRF();
@ -835,7 +835,7 @@ void Control::writeRF_Nulls()
uint8_t data[NULLS_LENGTH_BYTES + 2U];
::memset(data + 2U, 0x00U, NULLS_LENGTH_BYTES);
data[0U] = TAG_EOT;
data[0U] = modem::TAG_EOT;
data[1U] = 0x00U;
if (m_debug) {
@ -899,7 +899,7 @@ void Control::writeRF_TDU(bool noNetwork)
m_voice->writeNetworkRF(data + 2U, P25_DUID_TDU);
if (m_duplex) {
data[0U] = TAG_EOT;
data[0U] = modem::TAG_EOT;
data[1U] = 0x00U;
writeQueueRF(data, P25_TDU_FRAME_LENGTH_BYTES + 2U);

@ -622,7 +622,7 @@ void DataPacket::writeRF_PDU(const uint8_t* pdu, uint32_t bitLength, bool noNull
m_p25->addBusyBits(data + 2U, newBitLength, false, true);
if (m_p25->m_duplex) {
data[0U] = TAG_DATA;
data[0U] = modem::TAG_DATA;
data[1U] = 0x00U;
m_p25->writeQueueRF(data, newByteLength + 2U);
}

@ -1477,7 +1477,7 @@ void TrunkPacket::writeRF_TDULC(lc::TDULC lc, bool noNetwork)
writeNetworkRF(data + 2U, P25_DUID_TDULC);
if (m_p25->m_duplex) {
data[0U] = TAG_EOT;
data[0U] = modem::TAG_EOT;
data[1U] = 0x00U;
m_p25->writeQueueRF(data, P25_TDULC_FRAME_LENGTH_BYTES + 2U);
@ -1598,7 +1598,7 @@ void TrunkPacket::writeRF_TSDU_SBF(bool noNetwork, bool clearBeforeWrite, bool f
}
if (m_p25->m_duplex) {
data[0U] = TAG_DATA;
data[0U] = modem::TAG_DATA;
data[1U] = 0x00U;
m_p25->writeQueueRF(data, P25_TSDU_FRAME_LENGTH_BYTES + 2U);
@ -1692,7 +1692,7 @@ void TrunkPacket::writeRF_TSDU_MBF(bool clearBeforeWrite)
// Add idle bits
addIdleBits(data + 2U, P25_TSDU_TRIPLE_FRAME_LENGTH_BITS, true, true);
data[0U] = TAG_DATA;
data[0U] = modem::TAG_DATA;
data[1U] = 0x00U;
if (clearBeforeWrite) {
@ -2475,7 +2475,7 @@ void TrunkPacket::writeNet_TDULC(lc::TDULC lc)
uint8_t buffer[P25_TDULC_FRAME_LENGTH_BYTES + 2U];
::memset(buffer, 0x00U, P25_TDULC_FRAME_LENGTH_BYTES + 2U);
buffer[0U] = TAG_EOT;
buffer[0U] = modem::TAG_EOT;
buffer[1U] = 0x00U;
// Generate Sync
@ -2521,7 +2521,7 @@ void TrunkPacket::writeNet_TSDU()
uint8_t buffer[P25_TSDU_FRAME_LENGTH_BYTES + 2U];
::memset(buffer, 0x00U, P25_TSDU_FRAME_LENGTH_BYTES + 2U);
buffer[0U] = TAG_DATA;
buffer[0U] = modem::TAG_DATA;
buffer[1U] = 0x00U;
// Generate Sync

@ -399,7 +399,7 @@ bool VoicePacket::process(uint8_t* data, uint32_t len)
writeNetworkRF(buffer, P25_DUID_HDU);
if (m_p25->m_duplex) {
buffer[0U] = TAG_DATA;
buffer[0U] = modem::TAG_DATA;
buffer[1U] = 0x00U;
m_p25->writeQueueRF(buffer, P25_HDU_FRAME_LENGTH_BYTES + 2U);
}
@ -524,7 +524,7 @@ bool VoicePacket::process(uint8_t* data, uint32_t len)
writeNetworkRF(data + 2U, P25_DUID_LDU1);
if (m_p25->m_duplex) {
data[0U] = TAG_DATA;
data[0U] = modem::TAG_DATA;
data[1U] = 0x00U;
m_p25->writeQueueRF(data, P25_LDU_FRAME_LENGTH_BYTES + 2U);
}
@ -602,7 +602,7 @@ bool VoicePacket::process(uint8_t* data, uint32_t len)
writeNetworkRF(data + 2U, P25_DUID_LDU2);
if (m_p25->m_duplex) {
data[0U] = TAG_DATA;
data[0U] = modem::TAG_DATA;
data[1U] = 0x00U;
m_p25->writeQueueRF(data, P25_LDU_FRAME_LENGTH_BYTES + 2U);
}
@ -999,7 +999,7 @@ void VoicePacket::writeNet_TDU()
uint8_t buffer[P25_TDU_FRAME_LENGTH_BYTES + 2U];
::memset(buffer, 0x00U, P25_TDU_FRAME_LENGTH_BYTES + 2U);
buffer[0U] = TAG_EOT;
buffer[0U] = modem::TAG_EOT;
buffer[1U] = 0x00U;
// Generate Sync
@ -1254,7 +1254,7 @@ void VoicePacket::writeNet_LDU1()
// Add busy bits
m_p25->addBusyBits(buffer + 2U, P25_HDU_FRAME_LENGTH_BITS, false, true);
buffer[0U] = TAG_DATA;
buffer[0U] = modem::TAG_DATA;
buffer[1U] = 0x00U;
m_p25->writeQueueNet(buffer, P25_HDU_FRAME_LENGTH_BYTES + 2U);
@ -1312,7 +1312,7 @@ void VoicePacket::writeNet_LDU1()
// Add busy bits
m_p25->addBusyBits(buffer + 2U, P25_LDU_FRAME_LENGTH_BITS, false, true);
buffer[0U] = TAG_DATA;
buffer[0U] = modem::TAG_DATA;
buffer[1U] = 0x00U;
m_p25->writeQueueNet(buffer, P25_LDU_FRAME_LENGTH_BYTES + 2U);
@ -1416,7 +1416,7 @@ void VoicePacket::writeNet_LDU2()
// Add busy bits
m_p25->addBusyBits(buffer + 2U, P25_LDU_FRAME_LENGTH_BITS, false, true);
buffer[0U] = TAG_DATA;
buffer[0U] = modem::TAG_DATA;
buffer[1U] = 0x00U;
m_p25->writeQueueNet(buffer, P25_LDU_FRAME_LENGTH_BYTES + 2U);

Loading…
Cancel
Save

Powered by TurnKey Linux.