add support to send SNDCP disabled annoucement messages properly;

pull/61/head
Bryan Biedenkapp 2 years ago
parent dc0838e0c3
commit 3861559f87

@ -28,6 +28,7 @@ using namespace p25::lc::tsbk;
/// Initializes a new instance of the OSP_SNDCP_CH_ANN class.
/// </summary>
OSP_SNDCP_CH_ANN::OSP_SNDCP_CH_ANN() : TSBK(),
m_implicitChannel(false),
m_sndcpAutoAccess(true),
m_sndcpDAC(1U)
{
@ -76,10 +77,21 @@ void OSP_SNDCP_CH_ANN::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
tsbkValue = (tsbkValue << 8) +
(m_sndcpAutoAccess ? 0x80U : 0x00U) + // Autonomous Access
(m_sndcpAutoAccess ? 0x40U : 0x00U); // Requested Access
tsbkValue = (tsbkValue << 4) + m_siteData.channelId(); // Channel (T) ID
tsbkValue = (tsbkValue << 12) + m_siteData.channelNo(); // Channel (T) Number
tsbkValue = (tsbkValue << 4) + m_siteData.channelId(); // Channel (R) ID
tsbkValue = (tsbkValue << 12) + (rxChNo & 0xFFFU); // Channel (R) Number
if (m_implicitChannel) {
tsbkValue = (tsbkValue << 16) + 0xFFFFU;
} else {
tsbkValue = (tsbkValue << 4) + m_siteData.channelId(); // Channel (T) ID
tsbkValue = (tsbkValue << 12) + m_siteData.channelNo(); // Channel (T) Number
}
if (m_implicitChannel) {
tsbkValue = (tsbkValue << 16) + 0xFFFFU;
} else {
tsbkValue = (tsbkValue << 4) + m_siteData.channelId(); // Channel (R) ID
tsbkValue = (tsbkValue << 12) + (rxChNo & 0xFFFU); // Channel (R) Number
}
tsbkValue = (tsbkValue << 16) + m_sndcpDAC; // Data Access Control
std::unique_ptr<uint8_t[]> tsbk = TSBK::fromValue(tsbkValue);

@ -7,7 +7,7 @@
* @package DVM / Common Library
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
* Copyright (C) 2022 Bryan Biedenkapp, N2PLL
* Copyright (C) 2022,2024 Bryan Biedenkapp, N2PLL
*
*/
#if !defined(__P25_LC_TSBK__OSP_SNDCP_CH_ANN_H__)
@ -40,6 +40,10 @@ namespace p25
/// <summary>Returns a string that represents the current TSBK.</summary>
std::string toString(bool isp = false) override;
public:
/// <summary>Flag indicating explicit channel frequncies should not be transmitted.</summary>
__PROPERTY(bool, implicitChannel, ImplicitChannel);
private:
bool m_sndcpAutoAccess;
uint16_t m_sndcpDAC;

@ -2051,11 +2051,17 @@ void ControlSignaling::queueRF_TSBK_Ctrl(uint8_t lco)
}
break;
case TSBKO::OSP_SNDCP_CH_ANN:
{
// transmit SNDCP announcement
tsbk = std::make_unique<OSP_SNDCP_CH_ANN>();
tsbk->siteIdenEntry(m_p25->m_idenEntry);
std::unique_ptr<OSP_SNDCP_CH_ANN> osp = std::make_unique<OSP_SNDCP_CH_ANN>();
osp->siteIdenEntry(m_p25->m_idenEntry);
if (!m_p25->m_sndcpSupport) {
osp->setImplicitChannel(true);
}
tsbk = std::move(osp);
DEBUG_LOG_TSBK(tsbk->toString());
break;
}
break;
case TSBKO::OSP_SYNC_BCAST:
{
// transmit sync broadcast

Loading…
Cancel
Save

Powered by TurnKey Linux.