implement appropriate channel structuring and handle determining number of control sequences from that structure;

pull/12/head
Bryan Biedenkapp 4 years ago
parent e4d135849a
commit ee0ea95337

@ -118,7 +118,7 @@ Control::Control(uint32_t ran, uint32_t callHang, uint32_t queueSize, uint32_t t
m_rfTGHang(1000U, tgHang),
m_netTimeout(1000U, timeout),
m_networkWatchdog(1000U, 0U, 1500U),
m_ccPacketInterval(1000U, 0U, 40U),
m_ccPacketInterval(1000U, 0U, 80U),
m_ccFrameCnt(0U),
m_ccSeq(0U),
m_siteData(),
@ -678,7 +678,8 @@ bool Control::writeRF_ControlData()
return false;
}
const uint8_t maxSeq = 6U;
const uint8_t maxSeq = m_trunk->m_rfLC.getBcchCnt() + (m_trunk->m_rfLC.getCcchPagingCnt() + m_trunk->m_rfLC.getCcchMultiCnt()) *
m_trunk->m_rfLC.getRcchGroupingCnt() * m_trunk->m_rfLC.getRcchIterateCount();
if (m_ccSeq == maxSeq) {
m_ccSeq = 0U;
}

@ -229,6 +229,11 @@ RCCH::RCCH(SiteData siteData) :
m_transmissionMode(TRANSMISSION_MODE_4800),
m_siteData(siteData),
m_siteIdenEntry(),
m_bcchCnt(1U),
m_rcchGroupingCnt(1U),
m_ccchPagingCnt(2U),
m_ccchMultiCnt(2U),
m_rcchIterateCnt(2U),
m_data(NULL)
{
m_data = new uint8_t[NXDN_RCCH_LC_LENGTH_BYTES];
@ -373,12 +378,12 @@ void RCCH::encodeLC(uint8_t* data)
m_data[1U] = (m_siteData.locId() >> 16) & 0xFFU; // Location ID
m_data[2U] = (m_siteData.locId() >> 8) & 0xFFU; // ...
m_data[3U] = (m_siteData.locId() >> 0) & 0xFFU; // ...
// bryanb: this is currently fixed -- maybe dynamic in the future
m_data[4U] = (2 << 6) + // Channel Structure - Number of BCCH (2)
(1 << 3) + // ... - Number of Grouping (1)
(2 << 0); // ... - Number of Paging Frames (2)
m_data[5U] = (3 << 0); // ... - Number of Iteration (3)
m_data[4U] = ((m_bcchCnt & 0x03U) << 6) + // Channel Structure - Number of BCCH
((m_rcchGroupingCnt & 0x07U) << 3) + // ... - Number of Grouping
(((m_ccchPagingCnt >> 1) & 0x07U) << 0); // ... - Number of Paging Frames
m_data[5U] = ((m_ccchPagingCnt & 0x01U) << 7) + // ... - Number of Paging Frames
((m_ccchMultiCnt & 0x07U) << 4) + // ... - Number of Multipurpose Frames
((m_rcchIterateCnt & 0x0FU) << 0); // ... - Number of Iteration
m_data[6U] = m_siteData.serviceClass(); // Service Information
m_data[7U] = (m_siteData.netActive() ? NXDN_SIF2_IP_NETWORK : 0x00U); // ...
@ -468,5 +473,11 @@ void RCCH::copy(const RCCH& data)
m_siteCallsign = callsign;
m_bcchCnt = data.m_bcchCnt;
m_rcchGroupingCnt = data.m_rcchGroupingCnt;
m_ccchPagingCnt = data.m_ccchPagingCnt;
m_ccchMultiCnt = data.m_ccchMultiCnt;
m_rcchIterateCnt = data.m_rcchIterateCnt;
decodeLC(m_data);
}

@ -121,6 +121,18 @@ namespace nxdn
/// <summary>Local Site Identity Entry.</summary>
__PROPERTY_PLAIN(lookups::IdenTable, siteIdenEntry, siteIdenEntry);
/** Channel Structure Data */
/// <summary>Count of BCCH frames per RCCH superframe.</summary>
__PROPERTY(uint8_t, bcchCnt, BcchCnt);
/// <summary>Count of RCCH frame groupings per RCCH superframe.</summary>
__PROPERTY(uint8_t, rcchGroupingCnt, RcchGroupingCnt);
/// <summary>Count of CCCH/UPCH paging frames per RCCH superframe.</summary>
__PROPERTY(uint8_t, ccchPagingCnt, CcchPagingCnt);
/// <summary>Count of CCCH/UPCH multi-purpose frames per RCCH superframe.</summary>
__PROPERTY(uint8_t, ccchMultiCnt, CcchMultiCnt);
/// <summary>Count of group iterations per RCCH superframe.</summary>
__PROPERTY(uint8_t, rcchIterateCnt, RcchIterateCount);
private:
/// <summary>Initializes a new instance of the RCCH class.</summary>
RCCH();

@ -354,7 +354,6 @@ void Trunk::writeRF_ControlData(uint8_t frameCnt, uint8_t n, bool adjSS)
switch (n)
{
case 1:
case 0:
writeRF_CC_Message_Site_Info();
break;
@ -708,7 +707,7 @@ void Trunk::writeRF_CC_Message_Site_Info()
channel::CAC cac;
cac.setVerbose(m_dumpRCCH);
cac.setRAN(m_nxdn->m_ran);
cac.setStructure(NXDN_SR_RCCH_SINGLE);
cac.setStructure(NXDN_SR_RCCH_HEAD_SINGLE);
cac.setData(buffer);
cac.encode(data + 2U);

Loading…
Cancel
Save

Powered by TurnKey Linux.