Ref T778, fix getRemoteAircraftData

* send waterFlags as DBus int
* waterFlags.clear()
* CDBusMessage::appendArgument(const std::vector<bool> &array)

squash! Ref T778, fix getRemoteAircraftData
This commit is contained in:
Klaus Basan
2020-04-11 04:50:51 +02:00
committed by Mat Sutcliffe
parent b5d100b71b
commit 6ceb91ac4f
4 changed files with 31 additions and 4 deletions

View File

@@ -159,13 +159,19 @@ namespace BlackSimPlugin
if (!reply.isError())
{
const QStringList callsigns = reply.argumentAt<0>();
const QList<double> latitudesDeg = reply.argumentAt<1>();
const QList<double> latitudesDeg = reply.argumentAt<1>();
const QList<double> longitudesDeg = reply.argumentAt<2>();
const QList<double> elevationsM = reply.argumentAt<3>();
const QList<bool> waterFlags = reply.argumentAt<4>();
const QList<double> elevationsM = reply.argumentAt<3>();
const QList<bool> waterFlags = reply.argumentAt<4>();
const QList<double> verticalOffsets = reply.argumentAt<5>();
setter(callsigns, latitudesDeg, longitudesDeg, elevationsM, waterFlags, verticalOffsets);
}
else
{
const QString errorMsg = reply.error().message();
CLogMessage(this).warning(u"XSwiftBus DBus error getRemoteAircraftData: %1") << errorMsg;
}
watcher->deleteLater();
};
m_dbusInterface->callDBusAsync(QLatin1String("getRemoteAircraftData"), callback, callsigns);

View File

@@ -109,6 +109,24 @@ namespace XSwiftBus
dbus_message_iter_append_basic(&m_messageIterator, DBUS_TYPE_DOUBLE, &value);
}
void CDBusMessage::appendArgument(const std::vector<bool> &array)
{
// array.data() not existing for bool
// changing dbus_message_iter_open_container here affects DBus signature
// using int16 creates signature "n", mismatch on swift side
// using int32 creates signature "i"
// there are also xml files for the signature: src/xswiftbus/org.swift_project.xswiftbus.traffic.xml
// discussion: https://discordapp.com/channels/539048679160676382/539925070550794240/698552502831939676
DBusMessageIter arrayIterator;
dbus_message_iter_open_container(&m_messageIterator, DBUS_TYPE_ARRAY, DBUS_TYPE_BOOLEAN_AS_STRING, &arrayIterator);
const std::vector<unsigned> ints(array.begin(), array.end());
const unsigned *ptr = ints.data();
dbus_message_iter_append_fixed_array(&arrayIterator, DBUS_TYPE_BOOLEAN, &ptr, static_cast<int>(array.size()));
dbus_message_iter_close_container(&m_messageIterator, &arrayIterator);
}
void CDBusMessage::appendArgument(const std::vector<double> &array)
{
DBusMessageIter arrayIterator;

View File

@@ -76,6 +76,7 @@ namespace XSwiftBus
void appendArgument(const std::string &value);
void appendArgument(int value);
void appendArgument(double value);
void appendArgument(const std::vector<bool> &array);
void appendArgument(const std::vector<double> &array);
void appendArgument(const std::vector<std::string> &array);
//! @}

View File

@@ -498,6 +498,7 @@ namespace XSwiftBus
longitudesDeg.clear();
elevationsM.clear();
verticalOffsets.clear();
waterFlags.clear();
for (const auto &requestedCallsign : requestedCallsigns)
{
@@ -800,7 +801,7 @@ namespace XSwiftBus
std::vector<double> latitudesDeg;
std::vector<double> longitudesDeg;
std::vector<double> elevationsM;
std::vector<bool> waterFlags;
std::vector<bool> waterFlags;
std::vector<double> verticalOffsets;
getRemoteAircraftData(callsigns, latitudesDeg, longitudesDeg, elevationsM, waterFlags, verticalOffsets);
CDBusMessage reply = CDBusMessage::createReply(sender, serial);
@@ -809,6 +810,7 @@ namespace XSwiftBus
reply.appendArgument(latitudesDeg);
reply.appendArgument(longitudesDeg);
reply.appendArgument(elevationsM);
reply.appendArgument(waterFlags);
reply.appendArgument(verticalOffsets);
sendDBusMessage(reply);
});