Skip to content

Commit

Permalink
feat: Add ICAOEQ capability to FSD client
Browse files Browse the repository at this point in the history
  • Loading branch information
ltoenning committed Dec 28, 2023
1 parent 272e2ed commit 186d1e3
Show file tree
Hide file tree
Showing 20 changed files with 744 additions and 893 deletions.
6 changes: 6 additions & 0 deletions resources/share/shared/bootstrap/bootstrap.json
Original file line number Diff line number Diff line change
Expand Up @@ -71,5 +71,11 @@
}
]
},
"comNavEquipmentHelpUrl": {
"url": "https://en.wikipedia.org/wiki/Equipment_codes#Radio_communication,_navigation_and_approach_aid_equipment_and_capabilities"
},
"ssrEquipmentHelpUrl": {
"url": "https://en.wikipedia.org/wiki/Equipment_codes#Surveillance_equipment_codes"
},
"wasLoadedFromFile": false
}
2 changes: 1 addition & 1 deletion src/blackcore/context/contextnetworkimpl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -283,7 +283,7 @@ namespace BlackCore::Context
}

m_fsdClient->setClientIdAndKey(static_cast<quint16>(clientId), clientKey.toLocal8Bit());
m_fsdClient->setClientCapabilities(Capabilities::AircraftInfo | Capabilities::FastPos | Capabilities::VisPos | Capabilities::AtcInfo | Capabilities::AircraftConfig);
m_fsdClient->setClientCapabilities(Capabilities::AircraftInfo | Capabilities::FastPos | Capabilities::VisPos | Capabilities::AtcInfo | Capabilities::AircraftConfig | Capabilities::IcaoEquipment);
m_fsdClient->setServer(server);

m_fsdClient->setPilotRating(PilotRating::Student);
Expand Down
10 changes: 10 additions & 0 deletions src/blackcore/data/globalsetup.h
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,12 @@ namespace BlackCore::Data
//! NCEP GFS Forecasts (0.25 degree grid) data url
BlackMisc::Network::CUrl getNcepGlobalForecastSystemUrl25() const { return m_ncepGlobalForecastSystemUrl25; }

//! COM/NAV equipment code help URL
BlackMisc::Network::CUrl getComNavEquipmentHelpUrl() const { return m_comNavEquipmentHelpUrl; }

//! SSR equipment code help URL
BlackMisc::Network::CUrl getSsrEquipmentHelpUrl() const { return m_ssrEquipmentHelpUrl; }

//! \copydoc BlackMisc::Mixin::String::toQString
QString convertToQString(bool i18n = false) const;

Expand Down Expand Up @@ -252,6 +258,8 @@ namespace BlackCore::Data
BlackMisc::Network::CServerList m_predefinedServers; //!< Predefined servers loaded from setup file
BlackMisc::Network::CUrl m_ncepGlobalForecastSystemUrl; //!< NCEP GFS url 0.5 degree resolution
BlackMisc::Network::CUrl m_ncepGlobalForecastSystemUrl25; //!< NCEP GFS url 0.25 degree resolution
BlackMisc::Network::CUrl m_comNavEquipmentHelpUrl; //!< Help URL for COM/NAV equipment codes
BlackMisc::Network::CUrl m_ssrEquipmentHelpUrl; //!< Help URL for SSR equipment codes

// transient members, to be switched on/off via GUI or set from reader
bool m_dbDebugFlag = false; //!< can trigger DEBUG on the server, so you need to know what you are doing
Expand Down Expand Up @@ -281,6 +289,8 @@ namespace BlackCore::Data
BLACK_METAMEMBER(mappingMinimumVersion),
BLACK_METAMEMBER(ncepGlobalForecastSystemUrl),
BLACK_METAMEMBER(ncepGlobalForecastSystemUrl25),
BLACK_METAMEMBER(comNavEquipmentHelpUrl),
BLACK_METAMEMBER(ssrEquipmentHelpUrl),
BLACK_METAMEMBER(dbDebugFlag, BlackMisc::DisabledForJson)
);
};
Expand Down
5 changes: 4 additions & 1 deletion src/blackcore/fsd/enums.h
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,10 @@ namespace BlackCore::Fsd
Stealth = (1 << 8),

/*! Aircraft Config */
AircraftConfig = (1 << 9)
AircraftConfig = (1 << 9),

/*! Process aircraft ICAO in flightplan as ICAO equipment code (e.g. B737/M-SDE2E3FGHIRWXY/LB1) */
IcaoEquipment = (1 << 10)
};

//! @{
Expand Down
2 changes: 1 addition & 1 deletion src/blackcore/fsd/flightplan.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ namespace BlackCore::Fsd
//! @{
//! Properties
FlightType m_flightType {};
QString m_aircraftIcaoType;
QString m_aircraftIcaoType; //!< Contains the full equipment string in FAA or ICAO format, depending on the server
int m_trueCruisingSpeed = 0;
QString m_depAirport;
int m_estimatedDepTime = 0;
Expand Down
19 changes: 15 additions & 4 deletions src/blackcore/fsd/fsdclient.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -706,11 +706,21 @@ namespace BlackCore::Fsd
const QString alt = flightPlan.getCruiseAltitude().asFpVatsimAltitudeString();
// const QString alt = flightPlan.getCruiseAltitude().asFpAltitudeString();

QString act = flightPlan.getCombinedPrefixIcaoSuffix();
if (act.isEmpty()) { act = flightPlan.getAircraftIcao().getDesignator(); } // fallback

FlightType flightType = getFlightType(flightPlan.getFlightRules());

QString act;

if (m_server.getFsdSetup().shouldSendFlightPlanEquipmentInIcaoFormat())
{
act = flightPlan.getAircraftInfo().asIcaoString();
}
else
{
act = flightPlan.getAircraftInfo().asFaaString();
}

Q_ASSERT_X(!act.isEmpty(), Q_FUNC_INFO, "Aircraft type must not be empty");

const QList<int> timePartsEnroute = flightPlan.getEnrouteTime().getHrsMinSecParts();
const QList<int> timePartsFuel = flightPlan.getFuelTime().getHrsMinSecParts();
const FlightPlan fp(getOwnCallsignAsString(), "SERVER", flightType, act,
Expand Down Expand Up @@ -909,6 +919,7 @@ namespace BlackCore::Fsd
if (m_capabilities & Capabilities::VisPos) responseData.push_back(toQString(Capabilities::VisPos) % "=1");
if (m_capabilities & Capabilities::Stealth) responseData.push_back(toQString(Capabilities::Stealth) % "=1");
if (m_capabilities & Capabilities::AircraftConfig) responseData.push_back(toQString(Capabilities::AircraftConfig) % "=1");
if (m_capabilities & Capabilities::IcaoEquipment) responseData.push_back(toQString(Capabilities::IcaoEquipment) % "=1");
const ClientResponse clientResponse(ownCallsign, receiver, ClientQueryType::Capabilities, responseData);
sendQueudedMessage(clientResponse);
}
Expand Down Expand Up @@ -1382,7 +1393,7 @@ namespace BlackCore::Fsd
const CCallsign callsign(fp.sender(), CCallsign::Aircraft);
const CFlightPlan flightPlan(
callsign,
fp.m_aircraftIcaoType,
CFlightPlanAircraftInfo(fp.m_aircraftIcaoType),
fp.m_depAirport,
fp.m_destAirport,
fp.m_altAirport,
Expand Down
3 changes: 3 additions & 0 deletions src/blackcore/fsd/serializer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -453,6 +453,7 @@ namespace BlackCore::Fsd
case Capabilities::FastPos: return "FASTPOS";
case Capabilities::Stealth: return "STEALTH";
case Capabilities::AircraftConfig: return "ACCONFIG";
case Capabilities::IcaoEquipment: return "ICAOEQ";
}

return {};
Expand All @@ -479,6 +480,8 @@ namespace BlackCore::Fsd
return Capabilities::Stealth;
else if (str == "ACCONFIG")
return Capabilities::AircraftConfig;
else if (str == "ICAOEQ")
return Capabilities::IcaoEquipment;

return Capabilities::None;
}
Expand Down
8 changes: 4 additions & 4 deletions src/blackcore/vatsim/vatsimdatafilereader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -305,11 +305,11 @@ namespace BlackCore::Vatsim
const CSpeed groundspeed(pilot["groundspeed"].toInt(), CSpeedUnit::kts());
const CAircraftSituation situation(callsign, position, heading, {}, {}, groundspeed);
CSimulatedAircraft aircraft(callsign, user, situation);
const QString icaoAndEquipment(pilot["flight_plan"]["aircraft"].toString().trimmed());
const QString icao(CFlightPlan::aircraftIcaoCodeFromEquipmentCode(icaoAndEquipment));
if (CAircraftIcaoCode::isValidDesignator(icao))
const QString icaoAndEquipment(pilot["flight_plan"]["aircraft"].toString().trimmed()); // in ICAO format
CFlightPlanAircraftInfo info(icaoAndEquipment);
if (info.getAircraftIcao().hasValidDesignator())
{
aircraft.setAircraftIcaoCode(icao);
aircraft.setAircraftIcaoCode(info.getAircraftIcao());
}
else if (!icaoAndEquipment.isEmpty())
{
Expand Down
Loading

0 comments on commit 186d1e3

Please sign in to comment.