Files
pilotclient/src/xswiftbus/service.h
Roland Rossgotterer 55c2e2e559 [XSwiftBus] Add getVersionNumber to DBus API
This allows to get the version number of XSwiftBus itself. It maintains the same version as swift (e.g. 0.8.7 without the time stamp) and can be used to compare it for compatibility reasons.

ref T394
2018-11-29 20:54:26 +01:00

302 lines
13 KiB
C++

/* Copyright (C) 2013
* swift Project Community / Contributors
*
* This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level
* directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project,
* including this file, may be copied, modified, propagated, or distributed except according to the terms
* contained in the LICENSE file.
*/
#ifndef BLACKSIM_XSWIFTBUS_SERVICE_H
#define BLACKSIM_XSWIFTBUS_SERVICE_H
//! \file
#ifndef NOMINMAX
#define NOMINMAX
#endif
#include "dbusobject.h"
#include "datarefs.h"
#include "messages.h"
#include "navdatareference.h"
#include <XPLM/XPLMNavigation.h>
#include <string>
#include <chrono>
//! \cond PRIVATE
#define XSWIFTBUS_SERVICE_INTERFACENAME "org.swift_project.xswiftbus.service"
#define XSWIFTBUS_SERVICE_OBJECTPATH "/xswiftbus/service"
//! \endcond
namespace XSwiftBus
{
/*!
* XSwiftBus service object which is accessible through DBus
*/
class CService : public CDBusObject
{
public:
//! Constructor
CService();
//! Destructor
~CService() override = default;
//! DBus interface name
static const std::string &InterfaceName()
{
static const std::string s(XSWIFTBUS_SERVICE_INTERFACENAME);
return s;
}
//! DBus object path
static const std::string &ObjectPath()
{
static const std::string s(XSWIFTBUS_SERVICE_OBJECTPATH);
return s;
}
//! Called by XPluginReceiveMessage when the model changes.
void onAircraftModelChanged();
//! Returns the XSwiftBus version number
std::string getVersionNumber() const { return XSWIFTBUS_VERSION; }
//! Add a text message to the on-screen display, with RGB components in the range [0,1]
void addTextMessage(const std::string &text, double red, double green, double blue);
//! Called by newly connected client to cause airportsInRangeUpdated to be emitted.
void updateAirportsInRange();
//! Get full path to current aircraft model
std::string getAircraftModelPath() const;
//! Get base filename of current aircraft model
std::string getAircraftModelFilename() const;
//! Get canonical swift model string of current aircraft model
std::string getAircraftModelString() const;
//! Get name of current aircraft model
std::string getAircraftName() const;
//! Get current aircraft livery
std::string getAircraftLivery() const;
//! Get the ICAO code of the current aircraft model
std::string getAircraftIcaoCode() const { return m_icao.get(); }
//! Get the description of the current aircraft model
std::string getAircraftDescription() const { return m_descrip.get(); }
//! Get major version number
int getXPlaneVersionMajor() const;
//! Get minor version number
int getXPlaneVersionMinor() const;
//! Get root of X-Plane install path
std::string getXPlaneInstallationPath() const;
//! Get full path to X-Plane preferences file
std::string getXPlanePreferencesPath() const;
//! True if sim is paused
bool isPaused() const { return m_paused.get(); }
//! True if sim time is tracking operating system time
bool isUsingRealTime() const { return m_useSystemTime.get(); }
//! Get aircraft latitude in degrees
double getLatitudeDeg() const { return m_latitude.get(); }
//! Get aircraft longitude in degrees
double getLongitudeDeg() const { return m_longitude.get(); }
//! Get aircraft altitude in meters
double getAltitudeMslM() const { return m_elevation.get(); }
//! Get aircraft height in meters
double getHeightAglM() const { return m_agl.get(); }
//! Get aircraft groundspeed in meters per second
double getGroundSpeedMps() const { return m_groundSpeed.get(); }
//! Get aircraft IAS in knots
double getIndicatedAirspeedKias() const { return m_indicatedAirspeed.get(); }
//! Get aircraft TAS in meters per second
double getTrueAirspeedKias() const { return m_trueAirspeed.get(); }
//! Get aircraft pitch in degrees above horizon
double getPitchDeg() const { return m_pitch.get(); }
//! Get aircraft roll in degrees
double getRollDeg() const { return m_roll.get(); }
//! Get aircraft true heading in degrees
double getTrueHeadingDeg() const { return m_heading.get(); }
//! Get whether any wheel is on the ground
bool getAnyWheelOnGround() const { return m_onGroundAny.get(); }
//! Get whether all wheels are on the ground
bool getAllWheelsOnGround() const { return m_onGroundAll.get(); }
//! Get the current COM1 active frequency in kHz
int getCom1ActiveKhz() const { return m_com1Active.get() * 10; }
//! Get the current COM1 standby frequency in kHz
int getCom1StandbyKhz() const { return m_com1Standby.get() * 10; }
//! Get the current COM2 active frequency in kHz
int getCom2ActiveKhz() const { return m_com2Active.get() * 10; }
//! Get the current COM2 standby frequency in kHz
int getCom2StandbyKhz() const { return m_com2Standby.get() * 10; }
//! Get the current transponder code in decimal
int getTransponderCode() const { return m_xpdrCode.get(); }
//! Get the current transponder mode (depends on the aircraft, 0 and 1 usually mean standby, >1 active)
int getTransponderMode() const { return m_xpdrMode.get(); }
//! Get whether we are currently squawking ident
bool getTransponderIdent() const { return m_xpdrIdent.get(); }
//! Get whether beacon lights are on
bool getBeaconLightsOn() const { return m_beaconLightsOn.get(); }
//! Get whether landing lights are on
bool getLandingLightsOn() const { return m_landingLightsOn.get(); }
//! Get whether nav lights are on
bool getNavLightsOn() const { return m_navLightsOn.get(); }
//! Get whether strobe lights are on
bool getStrobeLightsOn() const { return m_strobeLightsOn.get(); }
//! Get whether taxi lights are on
bool getTaxiLightsOn() const { return m_taxiLightsOn.get(); }
//! Get barometric pressure at sea level in inches of mercury.
double getQNHInHg() const { return m_qnhInhg.get(); }
//! Set the current COM1 active frequency in kHz
void setCom1ActiveKhz(int freq) { m_com1Active.set(freq / 10); }
//! Set the current COM1 standby frequency in kHz
void setCom1StandbyKhz(int freq) { m_com1Standby.set(freq / 10); }
//! Set the current COM2 active frequency in kHz
void setCom2ActiveKhz(int freq) { m_com2Active.set(freq / 10); }
//! Set the current COM2 standby frequency in kHz
void setCom2StandbyKhz(int freq) { m_com2Standby.set(freq / 10); }
//! Set the current transponder code in decimal
void setTransponderCode(int code) { m_xpdrCode.set(code); }
//! Set the current transponder mode (depends on the aircraft, 0 and 1 usually mean standby, >1 active)
void setTransponderMode(int mode) { m_xpdrMode.set(mode); }
//! Get flaps deploy ratio, where 0.0 is flaps fully retracted, and 1.0 is flaps fully extended.
double getFlapsDeployRatio() const { return m_flapsReployRatio.get(); }
//! Get gear deploy ratio, where 0 is up and 1 is down
double getGearDeployRatio() const { return m_gearReployRatio.get(); }
//! Get the number of engines of current aircraft
int getNumberOfEngines() const { return m_numberOfEngines.get(); }
//! Get the N1 speed as percent of max (per engine)
std::vector<double> getEngineN1Percentage() const
{
std::vector<double> list;
const auto number = static_cast<unsigned int>(getNumberOfEngines());
list.reserve(number);
for (unsigned int engineNumber = 0; engineNumber < number; ++engineNumber)
{
list.push_back(m_enginesN1Percentage.getAt(engineNumber));
}
return list;
}
//! Get the ratio how much the speedbrakes surfaces are extended (0.0 is fully retracted, and 1.0 is fully extended)
double getSpeedBrakeRatio() const { return m_speedBrakeRatio.get(); }
//! \copydoc XSwiftBus::CMessageBoxControl::toggle
void toggleMessageBoxVisibility() { m_messages.toggle(); }
//! Enable/disable message window popping up for new messages
void setPopupMessageWindow(bool enabled) { m_popupMessageWindow = enabled; }
//! Enable/disable message window disappearing again after 5 seconds
void setDisappearMessageWindow(bool enabled) { m_disappearMessageWindow = enabled; }
//! Perform generic processing
int process();
protected:
DBusHandlerResult dbusMessageHandler(const CDBusMessage &message) override;
private:
void emitAircraftModelChanged(const std::string &path, const std::string &filename, const std::string &livery,
const std::string &icao, const std::string &modelString, const std::string &name,
const std::string &description);
void emitAirportsInRangeUpdated(const std::vector<std::string> &icaoCodes, const std::vector<std::string> &names,
const std::vector<double> &lats, const std::vector<double> &lons, const std::vector<double> &alts);
CMessageBoxControl m_messages { 16, 16, 16 };
bool m_popupMessageWindow = true;
bool m_disappearMessageWindow = true;
std::chrono::system_clock::time_point m_disappearMessageWindowTime;
std::vector<CNavDataReference> m_airports;
void readAirportsDatabase();
std::vector<CNavDataReference> findClosestAirports(int number, double latitude, double longitude);
StringDataRef<xplane::data::sim::aircraft::view::acf_livery_path> m_liveryPath;
StringDataRef<xplane::data::sim::aircraft::view::acf_ICAO> m_icao;
StringDataRef<xplane::data::sim::aircraft::view::acf_descrip> m_descrip;
DataRef<xplane::data::sim::time::paused> m_paused;
DataRef<xplane::data::sim::time::use_system_time> m_useSystemTime;
DataRef<xplane::data::sim::flightmodel::position::latitude> m_latitude;
DataRef<xplane::data::sim::flightmodel::position::longitude> m_longitude;
DataRef<xplane::data::sim::flightmodel::position::elevation> m_elevation;
DataRef<xplane::data::sim::flightmodel::position::y_agl> m_agl;
DataRef<xplane::data::sim::flightmodel::position::groundspeed> m_groundSpeed;
DataRef<xplane::data::sim::flightmodel::position::indicated_airspeed2> m_indicatedAirspeed;
DataRef<xplane::data::sim::flightmodel::position::true_airspeed> m_trueAirspeed;
DataRef<xplane::data::sim::flightmodel::position::theta> m_pitch;
DataRef<xplane::data::sim::flightmodel::position::phi> m_roll;
DataRef<xplane::data::sim::flightmodel::position::psi> m_heading;
DataRef<xplane::data::sim::flightmodel::failures::onground_any> m_onGroundAny;
DataRef<xplane::data::sim::flightmodel::failures::onground_all> m_onGroundAll;
DataRef<xplane::data::sim::cockpit::radios::com1_freq_hz> m_com1Active;
DataRef<xplane::data::sim::cockpit::radios::com1_stdby_freq_hz> m_com1Standby;
DataRef<xplane::data::sim::cockpit::radios::com2_freq_hz> m_com2Active;
DataRef<xplane::data::sim::cockpit::radios::com2_stdby_freq_hz> m_com2Standby;
DataRef<xplane::data::sim::cockpit::radios::transponder_code> m_xpdrCode;
DataRef<xplane::data::sim::cockpit::radios::transponder_mode> m_xpdrMode;
DataRef<xplane::data::sim::cockpit::radios::transponder_id> m_xpdrIdent;
DataRef<xplane::data::sim::cockpit::electrical::beacon_lights_on> m_beaconLightsOn;
DataRef<xplane::data::sim::cockpit::electrical::landing_lights_on> m_landingLightsOn;
DataRef<xplane::data::sim::cockpit::electrical::nav_lights_on> m_navLightsOn;
DataRef<xplane::data::sim::cockpit::electrical::strobe_lights_on> m_strobeLightsOn;
DataRef<xplane::data::sim::cockpit::electrical::taxi_light_on> m_taxiLightsOn;
DataRef<xplane::data::sim::flightmodel2::controls::flap_handle_deploy_ratio> m_flapsReployRatio;
DataRef<xplane::data::sim::flightmodel2::gear::deploy_ratio> m_gearReployRatio;
DataRef<xplane::data::sim::aircraft::engine::acf_num_engines> m_numberOfEngines;
ArrayDataRef<xplane::data::sim::flightmodel::engine::ENGN_N1_> m_enginesN1Percentage;
DataRef<xplane::data::sim::flightmodel2::controls::speedbrake_ratio> m_speedBrakeRatio;
DataRef<xplane::data::sim::weather::barometer_sealevel_inhg> m_qnhInhg;
};
}
#endif // guard