correct long lingering frequency rounding error when calculating freq in MHz;

pull/72/head
Bryan Biedenkapp 1 year ago
parent ac6518abe5
commit fe66aff8ab

@ -106,11 +106,11 @@ void CSBK_BROADCAST::encode(uint8_t* data)
case BroadcastAnncType::CHAN_FREQ:
{
uint32_t calcSpace = (uint32_t)(m_siteIdenEntry.chSpaceKhz() / 0.125);
float calcTxOffset = m_siteIdenEntry.txOffsetMhz() * 1000000;
float calcTxOffset = m_siteIdenEntry.txOffsetMhz() * 1000000.0;
const uint32_t multiple = 100000;
// calculate Rx frequency
uint32_t rxFrequency = (uint32_t)((m_siteIdenEntry.baseFrequency() + ((calcSpace * 125) * m_logicalCh1)) + calcTxOffset);
uint32_t rxFrequency = (uint32_t)((m_siteIdenEntry.baseFrequency() + ((calcSpace * 125) * m_logicalCh1)) + (uint32_t)calcTxOffset);
// generate frequency in mhz
uint32_t rxFreqMhz = rxFrequency + multiple / 2;

@ -52,10 +52,10 @@ void OSP_SNDCP_CH_ANN::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
ulong64_t tsbkValue = 0U;
uint32_t calcSpace = (uint32_t)(m_siteIdenEntry.chSpaceKhz() / 0.125);
float calcTxOffset = m_siteIdenEntry.txOffsetMhz() * 1000000;
float calcTxOffset = m_siteIdenEntry.txOffsetMhz() * 1000000.0;
uint32_t txFrequency = (uint32_t)((m_siteIdenEntry.baseFrequency() + ((calcSpace * 125) * m_siteData.channelNo())));
uint32_t rxFrequency = (uint32_t)(txFrequency + calcTxOffset);
uint32_t rxFrequency = (uint32_t)(txFrequency + (uint32_t)calcTxOffset);
uint32_t rootFreq = rxFrequency - m_siteIdenEntry.baseFrequency();
uint32_t rxChNo = rootFreq / (m_siteIdenEntry.chSpaceKhz() * 1000);

@ -50,10 +50,10 @@ void OSP_SNDCP_CH_GNT::encode(uint8_t* data, bool rawTSBK, bool noTrellis)
ulong64_t tsbkValue = 0U;
uint32_t calcSpace = (uint32_t)(m_siteIdenEntry.chSpaceKhz() / 0.125);
float calcTxOffset = m_siteIdenEntry.txOffsetMhz() * 1000000;
float calcTxOffset = m_siteIdenEntry.txOffsetMhz() * 1000000.0;
uint32_t txFrequency = (uint32_t)((m_siteIdenEntry.baseFrequency() + ((calcSpace * 125) * m_dataChannelNo)));
uint32_t rxFrequency = (uint32_t)(txFrequency + calcTxOffset);
uint32_t rxFrequency = (uint32_t)(txFrequency + (uint32_t)calcTxOffset);
uint32_t rootFreq = rxFrequency - m_siteIdenEntry.baseFrequency();
uint32_t rxChNo = rootFreq / (m_siteIdenEntry.chSpaceKhz() * 1000);

@ -167,10 +167,10 @@ bool Host::readParams()
}
uint32_t calcSpace = (uint32_t)(entry.chSpaceKhz() / 0.125);
float calcTxOffset = entry.txOffsetMhz() * 1000000;
float calcTxOffset = entry.txOffsetMhz() * 1000000.0;
m_txFrequency = (uint32_t)((entry.baseFrequency() + ((calcSpace * 125) * m_channelNo)));
m_rxFrequency = (uint32_t)(m_txFrequency + calcTxOffset);
m_rxFrequency = (uint32_t)(m_txFrequency + (uint32_t)calcTxOffset);
if (calcTxOffset < 0.0f && m_rxFrequency < entry.baseFrequency()) {
::LogWarning(LOG_HOST, "Channel Id %u Channel No $%04X has an invalid frequency. Rx Frequency (%u) is less then the base frequency (%u), this may result in incorrect trunking behavior.", m_channelId, m_channelNo,

@ -631,9 +631,9 @@ bool HostSetup::calculateRxTxFreq(bool consoleDisplay)
}
uint32_t calcSpace = (uint32_t)(entry.chSpaceKhz() / 0.125);
float calcTxOffset = entry.txOffsetMhz() * 1000000;
float calcTxOffset = entry.txOffsetMhz() * 1000000.0;
m_rxFrequency = (uint32_t)((entry.baseFrequency() + ((calcSpace * 125) * m_channelNo)) + calcTxOffset);
m_rxFrequency = (uint32_t)((entry.baseFrequency() + ((calcSpace * 125) * m_channelNo)) + (uint32_t)calcTxOffset);
m_txFrequency = (uint32_t)((entry.baseFrequency() + ((calcSpace * 125) * m_channelNo)));
}
else {

@ -250,18 +250,18 @@ private:
m_chanNo.setText(__INT_STR(m_channelId) + "-" + __INT_STR(m_channelNo));
uint32_t calcSpace = (uint32_t)(entry.chSpaceKhz() / 0.125);
float calcTxOffset = entry.txOffsetMhz() * 1000000;
float calcTxOffset = entry.txOffsetMhz() * 1000000.0;
uint32_t rxFrequency = (uint32_t)((entry.baseFrequency() + ((calcSpace * 125) * m_channelNo)) + calcTxOffset);
uint32_t rxFrequency = (uint32_t)((entry.baseFrequency() + ((calcSpace * 125) * m_channelNo)) + (uint32_t)calcTxOffset);
uint32_t txFrequency = (uint32_t)((entry.baseFrequency() + ((calcSpace * 125) * m_channelNo)));
std::stringstream ss;
ss << std::fixed << std::setprecision(5) << (float)(txFrequency / 1000000.0f);
ss << std::fixed << std::setprecision(5) << (double)(txFrequency / 1000000.0);
m_txFreq.setText(ss.str());
ss.str(std::string());
ss << std::fixed << std::setprecision(5) << (float)(rxFrequency / 1000000.0f);
ss << std::fixed << std::setprecision(5) << (double)(rxFrequency / 1000000.0);
m_rxFreq.setText(ss.str());

@ -80,18 +80,18 @@ public:
m_chanNo.setText(__INT_STR(channelId) + "-" + __INT_STR(channelNo));
uint32_t calcSpace = (uint32_t)(entry.chSpaceKhz() / 0.125);
float calcTxOffset = entry.txOffsetMhz() * 1000000;
float calcTxOffset = entry.txOffsetMhz() * 1000000.0;
uint32_t rxFrequency = (uint32_t)((entry.baseFrequency() + ((calcSpace * 125) * channelNo)) + calcTxOffset);
uint32_t rxFrequency = (uint32_t)((entry.baseFrequency() + ((calcSpace * 125) * channelNo)) + (uint32_t)calcTxOffset);
uint32_t txFrequency = (uint32_t)((entry.baseFrequency() + ((calcSpace * 125) * channelNo)));
std::stringstream ss;
ss << std::fixed << std::setprecision(5) << (float)(txFrequency / 1000000.0f);
ss << std::fixed << std::setprecision(5) << (double)(txFrequency / 1000000.0);
m_txFreq.setText(ss.str());
ss.str(std::string());
ss << std::fixed << std::setprecision(5) << (float)(rxFrequency / 1000000.0f);
ss << std::fixed << std::setprecision(5) << (double)(rxFrequency / 1000000.0);
m_rxFreq.setText(ss.str());

Loading…
Cancel
Save

Powered by TurnKey Linux.