fix issue where messageType on RTCH was not being set properly; cleanup and properly comment code; use appropriate SACCH and FACCH1 for Tx_REL;

pull/12/head
Bryan Biedenkapp 4 years ago
parent 936481f76b
commit e79663687c

@ -32,7 +32,8 @@
#include "nxdn/NXDNDefines.h" #include "nxdn/NXDNDefines.h"
#include "nxdn/Control.h" #include "nxdn/Control.h"
#include "nxdn/acl/AccessControl.h" #include "nxdn/acl/AccessControl.h"
#include "nxdn/channel/UDCH.h" #include "nxdn/channel/SACCH.h"
#include "nxdn/channel/FACCH1.h"
#include "nxdn/lc/RTCH.h" #include "nxdn/lc/RTCH.h"
#include "nxdn/Sync.h" #include "nxdn/Sync.h"
#include "edac/AMBEFEC.h" #include "edac/AMBEFEC.h"
@ -467,6 +468,8 @@ void Control::clock(uint32_t ms)
} }
if (m_ccPrevRunning && !m_ccRunning) { if (m_ccPrevRunning && !m_ccRunning) {
m_queue.clear();
m_ccPacketInterval.stop();
m_ccPrevRunning = m_ccRunning; m_ccPrevRunning = m_ccRunning;
} }
} }
@ -705,10 +708,11 @@ void Control::writeRF_Message_Tx_Rel(bool noNetwork)
Sync::addNXDNSync(data + 2U); Sync::addNXDNSync(data + 2U);
// generate the LICH
channel::LICH lich; channel::LICH lich;
lich.setRFCT(NXDN_LICH_RFCT_RDCH); lich.setRFCT(NXDN_LICH_RFCT_RTCH);
lich.setFCT(NXDN_LICH_USC_UDCH); lich.setFCT(NXDN_LICH_USC_SACCH_NS);
lich.setOption(NXDN_LICH_USC_UDCH); lich.setOption(NXDN_LICH_STEAL_FACCH);
lich.setOutbound(true); lich.setOutbound(true);
lich.encode(data + 2U); lich.encode(data + 2U);
@ -718,10 +722,18 @@ void Control::writeRF_Message_Tx_Rel(bool noNetwork)
m_rfLC.setMessageType(RTCH_MESSAGE_TYPE_TX_REL); m_rfLC.setMessageType(RTCH_MESSAGE_TYPE_TX_REL);
m_rfLC.encode(buffer, NXDN_UDCH_LENGTH_BITS); m_rfLC.encode(buffer, NXDN_UDCH_LENGTH_BITS);
channel::UDCH udch; // generate the SACCH
udch.setRAN(m_ran); channel::SACCH sacch;
udch.setData(buffer); sacch.setData(SACCH_IDLE);
udch.encode(data + 2U); sacch.setRAN(m_ran);
sacch.setStructure(NXDN_SR_SINGLE);
sacch.encode(data + 2U);
// generate the FACCH1
channel::FACCH1 facch;
facch.setData(buffer);
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] = modem::TAG_DATA; data[0U] = modem::TAG_DATA;
data[1U] = 0x00U; data[1U] = 0x00U;

@ -359,7 +359,7 @@ bool RTCH::decodeLC(const uint8_t* data)
/// <param name="rs"></param> /// <param name="rs"></param>
void RTCH::encodeLC(uint8_t* data) void RTCH::encodeLC(uint8_t* data)
{ {
m_messageType = m_data[0U] & 0x3FU; // Message Type m_data[0U] = m_messageType & 0x3FU; // Message Type
// message type opcodes // message type opcodes
switch (m_messageType) { switch (m_messageType) {

@ -384,10 +384,11 @@ void Trunk::writeRF_Message(bool noNetwork, bool clearBeforeWrite)
Sync::addNXDNSync(data + 2U); Sync::addNXDNSync(data + 2U);
// generate the LICH
channel::LICH lich; channel::LICH lich;
lich.setRFCT(NXDN_LICH_RFCT_RCCH); lich.setRFCT(NXDN_LICH_RFCT_RCCH);
lich.setFCT(NXDN_LICH_CAC_OUTBOUND); lich.setFCT(NXDN_LICH_CAC_OUTBOUND);
lich.setOption(NXDN_LICH_DATA_NORMAL); lich.setOption(NXDN_LICH_DATA_COMMON);
lich.setOutbound(true); lich.setOutbound(true);
lich.encode(data + 2U); lich.encode(data + 2U);
@ -396,9 +397,11 @@ void Trunk::writeRF_Message(bool noNetwork, bool clearBeforeWrite)
m_rfLC.encode(buffer, NXDN_RCCH_LC_LENGTH_BITS); m_rfLC.encode(buffer, NXDN_RCCH_LC_LENGTH_BITS);
// generate the CAC
channel::CAC cac; channel::CAC cac;
cac.setVerbose(m_dumpRCCH); cac.setVerbose(m_dumpRCCH);
cac.setRAN(m_nxdn->m_ran); cac.setRAN(m_nxdn->m_ran);
cac.setStructure(NXDN_SR_RCCH_SINGLE);
cac.setData(buffer); cac.setData(buffer);
cac.encode(data + 2U); cac.encode(data + 2U);
@ -685,6 +688,7 @@ void Trunk::writeRF_CC_Message_Site_Info()
Sync::addNXDNSync(data + 2U); Sync::addNXDNSync(data + 2U);
// generate the LICH
channel::LICH lich; channel::LICH lich;
lich.setRFCT(NXDN_LICH_RFCT_RCCH); lich.setRFCT(NXDN_LICH_RFCT_RCCH);
lich.setFCT(NXDN_LICH_CAC_OUTBOUND); lich.setFCT(NXDN_LICH_CAC_OUTBOUND);
@ -698,6 +702,7 @@ void Trunk::writeRF_CC_Message_Site_Info()
m_rfLC.setMessageType(RCCH_MESSAGE_TYPE_SITE_INFO); m_rfLC.setMessageType(RCCH_MESSAGE_TYPE_SITE_INFO);
m_rfLC.encode(buffer, NXDN_RCCH_LC_LENGTH_BITS); m_rfLC.encode(buffer, NXDN_RCCH_LC_LENGTH_BITS);
// generate the CAC
channel::CAC cac; channel::CAC cac;
cac.setVerbose(m_dumpRCCH); cac.setVerbose(m_dumpRCCH);
cac.setRAN(m_nxdn->m_ran); cac.setRAN(m_nxdn->m_ran);
@ -729,6 +734,7 @@ void Trunk::writeRF_CC_Message_Service_Info()
Sync::addNXDNSync(data + 2U); Sync::addNXDNSync(data + 2U);
// generate the LICH
channel::LICH lich; channel::LICH lich;
lich.setRFCT(NXDN_LICH_RFCT_RCCH); lich.setRFCT(NXDN_LICH_RFCT_RCCH);
lich.setFCT(NXDN_LICH_CAC_OUTBOUND); lich.setFCT(NXDN_LICH_CAC_OUTBOUND);
@ -742,6 +748,7 @@ void Trunk::writeRF_CC_Message_Service_Info()
m_rfLC.setMessageType(MESSAGE_TYPE_SRV_INFO); m_rfLC.setMessageType(MESSAGE_TYPE_SRV_INFO);
m_rfLC.encode(buffer, NXDN_RCCH_LC_LENGTH_BITS); m_rfLC.encode(buffer, NXDN_RCCH_LC_LENGTH_BITS);
// generate the CAC
channel::CAC cac; channel::CAC cac;
cac.setVerbose(m_dumpRCCH); cac.setVerbose(m_dumpRCCH);
cac.setRAN(m_nxdn->m_ran); cac.setRAN(m_nxdn->m_ran);

Loading…
Cancel
Save

Powered by TurnKey Linux.