Adapt channel comparison for 8.33 kHz spacing

Related to #186
This commit is contained in:
Lars Toenning
2023-02-06 00:23:26 +01:00
parent ebe59bcae5
commit a96d792e25
6 changed files with 25 additions and 48 deletions

View File

@@ -633,11 +633,11 @@ namespace BlackGui::Components
if (!station.getCallsign().isEmpty()) if (!station.getCallsign().isEmpty())
{ {
const CSimulatedAircraft ownAircraft(this->getOwnAircraft()); const CSimulatedAircraft ownAircraft(this->getOwnAircraft());
if (ownAircraft.getCom1System().isActiveFrequencyWithinChannelSpacing(station.getFrequency())) if (ownAircraft.getCom1System().isActiveFrequencySameFrequency(station.getFrequency()))
{ {
return this->getTabWidget(TextMessagesCom1); return this->getTabWidget(TextMessagesCom1);
} }
else if (ownAircraft.getCom2System().isActiveFrequencyWithinChannelSpacing(station.getFrequency())) else if (ownAircraft.getCom2System().isActiveFrequencySameFrequency(station.getFrequency()))
{ {
return this->getTabWidget(TextMessagesCom2); return this->getTabWidget(TextMessagesCom2);
} }

View File

@@ -287,12 +287,12 @@ namespace BlackMisc::Aviation
bool CAtcStation::isComUnitTunedInChannelSpacing(const CComSystem &comUnit) const bool CAtcStation::isComUnitTunedInChannelSpacing(const CComSystem &comUnit) const
{ {
return comUnit.isActiveFrequencyWithinChannelSpacing(this->getFrequency()); return comUnit.isActiveFrequencySameFrequency(this->getFrequency());
} }
bool CAtcStation::isFrequencyWithinChannelSpacing(const CFrequency &frequency, CComSystem::ChannelSpacing spacing) const bool CAtcStation::isFrequencyWithinChannelSpacing(const CFrequency &frequency, CComSystem::ChannelSpacing spacing) const
{ {
return CComSystem::isWithinChannelSpacing(frequency, this->getFrequency(), spacing); return CComSystem::isSameFrequency(frequency, this->getFrequency());
} }
CTime CAtcStation::bookedWhen() const CTime CAtcStation::bookedWhen() const

View File

@@ -55,24 +55,9 @@ namespace BlackMisc::Aviation
this->CModulator::setFrequencyStandby(fRounded); this->CModulator::setFrequencyStandby(fRounded);
} }
bool CComSystem::isActiveFrequencyWithin8_33kHzChannel(const CFrequency &comFrequency) const bool CComSystem::isActiveFrequencySameFrequency(const CFrequency &comFrequency) const
{ {
return isWithinChannelSpacing(this->getFrequencyActive(), comFrequency, ChannelSpacing8_33KHz); return isSameFrequency(this->getFrequencyActive(), comFrequency);
}
bool CComSystem::isActiveFrequencyWithin25kHzChannel(const CFrequency &comFrequency) const
{
return isWithinChannelSpacing(this->getFrequencyActive(), comFrequency, ChannelSpacing25KHz);
}
bool CComSystem::isActiveFrequencyWithin50kHzChannel(const CFrequency &comFrequency) const
{
return isWithinChannelSpacing(this->getFrequencyActive(), comFrequency, ChannelSpacing50KHz);
}
bool CComSystem::isActiveFrequencyWithinChannelSpacing(const CFrequency &comFrequency) const
{
return isWithinChannelSpacing(this->getFrequencyActive(), comFrequency, m_channelSpacing);
} }
void CComSystem::setActiveUnicom() void CComSystem::setActiveUnicom()
@@ -194,15 +179,16 @@ namespace BlackMisc::Aviation
return end == 0 || end == 25 || end == 50 || end == 75; return end == 0 || end == 25 || end == 50 || end == 75;
} }
bool CComSystem::isWithinChannelSpacing(const CFrequency &setFrequency, const CFrequency &compareFrequency, CComSystem::ChannelSpacing channelSpacing) bool CComSystem::isSameFrequency(const CFrequency &freq1, const CFrequency &freq2)
{ {
if (setFrequency.isNull() || compareFrequency.isNull()) { return false; } if (freq1.isNull() || freq2.isNull()) { return false; }
if (setFrequency == compareFrequency) { return true; } // shortcut for many of such comparisons if (freq1 == freq2) { return true; } // shortcut for many of such comparisons
const double channelSpacingKHz = 0.5 * CComSystem::channelSpacingToFrequencyKHz(channelSpacing); // .x20 == .x25 and .x70 == .x75
const double compareFrequencyKHz = compareFrequency.value(CFrequencyUnit::kHz()); const int freq1End = static_cast<int>(freq1.value(CFrequencyUnit::kHz())) % 100;
const double setFrequencyKHz = setFrequency.value(CFrequencyUnit::kHz()); const int freq2End = static_cast<int>(freq2.value(CFrequencyUnit::kHz())) % 100;
return (setFrequencyKHz - channelSpacingKHz < compareFrequencyKHz) && if (freq1End != 20 && freq1End != 25 && freq1End != 70 && freq1End != 75) { return false; }
(setFrequencyKHz + channelSpacingKHz > compareFrequencyKHz); if (freq2End != 20 && freq2End != 25 && freq2End != 70 && freq2End != 75) { return false; }
return std::abs(freq1End - freq2End) == 5;
} }
CFrequency CComSystem::parseComFrequency(const QString &input, CPqString::SeparatorMode sep) CFrequency CComSystem::parseComFrequency(const QString &input, CPqString::SeparatorMode sep)

View File

@@ -85,17 +85,8 @@ namespace BlackMisc::Aviation
//! \remarks will be rounded to channel spacing //! \remarks will be rounded to channel spacing
void setFrequencyStandby(const PhysicalQuantities::CFrequency &frequency); void setFrequencyStandby(const PhysicalQuantities::CFrequency &frequency);
//! Is active frequency within 8.3383kHz channel? //! Is active frequency the same frequency
bool isActiveFrequencyWithin8_33kHzChannel(const PhysicalQuantities::CFrequency &comFrequency) const; bool isActiveFrequencySameFrequency(const PhysicalQuantities::CFrequency &comFrequency) const;
//! Is active frequency within 25kHz channel?
bool isActiveFrequencyWithin25kHzChannel(const PhysicalQuantities::CFrequency &comFrequency) const;
//! Is active frequency within 25kHz channel?
bool isActiveFrequencyWithin50kHzChannel(const PhysicalQuantities::CFrequency &comFrequency) const;
//! Is active frequency within the channel spacing?
bool isActiveFrequencyWithinChannelSpacing(const PhysicalQuantities::CFrequency &comFrequency) const;
//! Set UNICOM frequency as active //! Set UNICOM frequency as active
void setActiveUnicom(); void setActiveUnicom();
@@ -136,10 +127,10 @@ namespace BlackMisc::Aviation
static void roundToChannelSpacing(PhysicalQuantities::CFrequency &frequency, static void roundToChannelSpacing(PhysicalQuantities::CFrequency &frequency,
ChannelSpacing channelSpacing); ChannelSpacing channelSpacing);
//! Is compareFrequency within channel spacing of setFrequency //! Compare frequencies under consideration that on VATSIM
static bool isWithinChannelSpacing(const PhysicalQuantities::CFrequency &setFrequency, //! frequencies .x20/.x25 and .x70/.x75 are the same
const PhysicalQuantities::CFrequency &compareFrequency, static bool isSameFrequency(const PhysicalQuantities::CFrequency &freq1,
ChannelSpacing channelSpacing); const PhysicalQuantities::CFrequency &freq2);
//! Is passed frequency in kHz a valid 8.33 channel. This does not check if //! Is passed frequency in kHz a valid 8.33 channel. This does not check if
//! the frequency is within the correct bounds. //! the frequency is within the correct bounds.

View File

@@ -493,11 +493,11 @@ namespace BlackMisc::Simulation::Settings
const CFrequency f(msg.getFrequency()); const CFrequency f(msg.getFrequency());
if (mt.testFlag(TextMessagesCom1)) if (mt.testFlag(TextMessagesCom1))
{ {
if (aircraft.getCom1System().isActiveFrequencyWithin8_33kHzChannel(f)) { return true; } if (aircraft.getCom1System().isActiveFrequencySameFrequency(f)) { return true; }
} }
if (mt.testFlag(TextMessagesCom2)) if (mt.testFlag(TextMessagesCom2))
{ {
if (aircraft.getCom2System().isActiveFrequencyWithin8_33kHzChannel(f)) { return true; } if (aircraft.getCom2System().isActiveFrequencySameFrequency(f)) { return true; }
} }
} }
return false; return false;

View File

@@ -577,8 +577,8 @@ namespace BlackMisc::Simulation
bool CSimulatedAircraft::isActiveFrequencyWithinChannelSpacing(const CFrequency &comFrequency) const bool CSimulatedAircraft::isActiveFrequencyWithinChannelSpacing(const CFrequency &comFrequency) const
{ {
return m_com1system.isActiveFrequencyWithinChannelSpacing(comFrequency) || return m_com1system.isActiveFrequencySameFrequency(comFrequency) ||
m_com2system.isActiveFrequencyWithinChannelSpacing(comFrequency); m_com2system.isActiveFrequencySameFrequency(comFrequency);
} }
bool CSimulatedAircraft::setTransponderMode(CTransponder::TransponderMode mode) bool CSimulatedAircraft::setTransponderMode(CTransponder::TransponderMode mode)