diff --git a/src/blackmisc/simulation/xplane/xswiftbusconfigwriter.cpp b/src/blackmisc/simulation/xplane/xswiftbusconfigwriter.cpp index 41b6c6bd2..d86467d5e 100644 --- a/src/blackmisc/simulation/xplane/xswiftbusconfigwriter.cpp +++ b/src/blackmisc/simulation/xplane/xswiftbusconfigwriter.cpp @@ -36,6 +36,11 @@ namespace BlackMisc } + void CXSwiftBusConfigWriter::setDebugMode(bool on) + { + m_debug = on; + } + void CXSwiftBusConfigWriter::updateInAllXPlaneVersions() { updateInXPlane9(); @@ -77,6 +82,9 @@ namespace BlackMisc ts << endl; ts << "# DBus server port - relevant for P2P mode only" << endl; ts << "dbusPort = " << m_dbusPort << endl; + ts << endl; + ts << "# Render phase debugging - to help diagnose crashes" << endl; + ts << "debug = " << boolToOnOff(m_debug) << endl; } } } // ns diff --git a/src/blackmisc/simulation/xplane/xswiftbusconfigwriter.h b/src/blackmisc/simulation/xplane/xswiftbusconfigwriter.h index 772e1df5f..16b1c0295 100644 --- a/src/blackmisc/simulation/xplane/xswiftbusconfigwriter.h +++ b/src/blackmisc/simulation/xplane/xswiftbusconfigwriter.h @@ -33,6 +33,9 @@ namespace BlackMisc //! Set new DBus address void setDBusAddress(const QString &dBusAddress); + //! Set debug on/off + void setDebugMode(bool on); + //! Update xswiftbus.conf in all known X-Plane versions (XP9 - XP11 are supported) void updateInAllXPlaneVersions(); @@ -52,6 +55,7 @@ namespace BlackMisc QString m_dbusMode = "p2p"; QString m_dbusAddress = "127.0.0.1"; QString m_dbusPort = "45001"; + bool m_debug = false; }; } } diff --git a/src/xswiftbus/config.cpp b/src/xswiftbus/config.cpp index 74a5717d6..605eb00b3 100644 --- a/src/xswiftbus/config.cpp +++ b/src/xswiftbus/config.cpp @@ -59,6 +59,7 @@ namespace XSwiftBus if (stringCompareCaseInsensitive(key, "dbusMode")) { valid = parseDBusMode(value); } else if (stringCompareCaseInsensitive(key, "dbusAddress")) { valid = parseDBusAddress(value); } else if (stringCompareCaseInsensitive(key, "dbusPort")) { valid = parseDBusPort(value); } + else if (stringCompareCaseInsensitive(key, "debug")) { valid = parseDebug(value); } else { WARNING_LOG("xswiftbus.conf line " + std::to_string(lineNo) + ": Unknown variable " + value + "!"); @@ -115,6 +116,19 @@ namespace XSwiftBus return true; } + bool CConfig::parseDebug(const std::string &value) + { + if (stringCompareCaseInsensitive(value, "on")) + { + m_debug = true; + } + else + { + m_debug = false; + } + return true; + } + std::string CConfig::dbusModeToString(DBusMode mode) { switch (mode) diff --git a/src/xswiftbus/config.h b/src/xswiftbus/config.h index 551a92c40..2a1a6901c 100644 --- a/src/xswiftbus/config.h +++ b/src/xswiftbus/config.h @@ -50,10 +50,14 @@ namespace XSwiftBus //! Get current DBus server port int getDBusPort() const { return m_dbusPort; } + //! Get debug on/off + bool getDebugMode() const { return m_debug; } + private: bool parseDBusMode(const std::string &value); bool parseDBusAddress(const std::string &value); bool parseDBusPort(const std::string &value); + bool parseDebug(const std::string &value); static std::string dbusModeToString(DBusMode mode); @@ -61,6 +65,7 @@ namespace XSwiftBus DBusMode m_dbusMode = DBusP2P; std::string m_dbusAddress = "127.0.0.1"; int m_dbusPort = 45001; + bool m_debug = false; }; } // ns diff --git a/src/xswiftbus/plugin.h b/src/xswiftbus/plugin.h index 5b5bba165..f5aac87a4 100644 --- a/src/xswiftbus/plugin.h +++ b/src/xswiftbus/plugin.h @@ -62,6 +62,9 @@ namespace XSwiftBus //! Should stop bool shouldStop() const { return m_shouldStop; } + //! \copydoc XSwiftBus::CSettingsProvider::getConfig + virtual const CConfig &getConfig() const override { return m_pluginConfig; } + private: CConfig m_pluginConfig; CDBusDispatcher m_dbusDispatcher; diff --git a/src/xswiftbus/settings.cpp b/src/xswiftbus/settings.cpp index aa67aef85..5f2eb38f0 100644 --- a/src/xswiftbus/settings.cpp +++ b/src/xswiftbus/settings.cpp @@ -45,5 +45,10 @@ namespace XSwiftBus { m_provider->setSettings(settings); } + + const CConfig& CSettingsAware::getConfig() const + { + return m_provider->getConfig(); + } } // ns diff --git a/src/xswiftbus/settings.h b/src/xswiftbus/settings.h index 6ea61fc34..957837dfd 100644 --- a/src/xswiftbus/settings.h +++ b/src/xswiftbus/settings.h @@ -10,6 +10,7 @@ #define BLACKMISC_XSWIFTBUS_CSETTINGS_H #include "blackmisc/simulation/settings/xswiftbussettingsqtfree.h" +#include "config.h" #include #include @@ -41,6 +42,9 @@ namespace XSwiftBus //! \threadsafe void setSettings(const CSettings &settings); + //! Get settings from xswiftbus.conf (needed during plugin initialization) + virtual const CConfig &getConfig() const = 0; + private: mutable std::mutex m_settingsMutex; CSettings m_pluginSettings; //!< owner of the settings @@ -62,6 +66,9 @@ namespace XSwiftBus //! \copydoc CSettingsProvider::setSettings void setSettings(const CSettings &settings); + //! \copydoc CSettingsProvider::getConfig + const CConfig &getConfig() const; + private: CSettingsProvider *m_provider = nullptr; }; diff --git a/src/xswiftbus/traffic.cpp b/src/xswiftbus/traffic.cpp index 47aa6d745..30cbf8e0d 100644 --- a/src/xswiftbus/traffic.cpp +++ b/src/xswiftbus/traffic.cpp @@ -251,6 +251,10 @@ namespace XSwiftBus // whether or not async loading is enabled: 1 means enabled, 0 means disabled return 1; } + else if (strcmp(section, "debug") == 0 && strcmp(name, "render_phases") == 0) + { + return s_instance->getConfig().getDebugMode() ? 1 : 0; + } return def; } diff --git a/src/xswiftbus/xswiftbus.conf b/src/xswiftbus/xswiftbus.conf index ca5753f21..a165a1904 100644 --- a/src/xswiftbus/xswiftbus.conf +++ b/src/xswiftbus/xswiftbus.conf @@ -6,3 +6,6 @@ dbusAddress = 127.0.0.1 # DBus server port - relevant for P2P mode only dbusPort = 45001 + +# Render phase debugging - to help diagnose crashes +debug = off