diff --git a/doc/img/ADSBDemod_plugin_table.png b/doc/img/ADSBDemod_plugin_table.png index 97d70921d..70d566d47 100644 Binary files a/doc/img/ADSBDemod_plugin_table.png and b/doc/img/ADSBDemod_plugin_table.png differ diff --git a/plugins/channelrx/demodadsb/CMakeLists.txt b/plugins/channelrx/demodadsb/CMakeLists.txt index 4cff3eb67..a3e4e4f58 100644 --- a/plugins/channelrx/demodadsb/CMakeLists.txt +++ b/plugins/channelrx/demodadsb/CMakeLists.txt @@ -1,3 +1,7 @@ +if(WIN32) + link_directories(${BOOST_LIBRARYDIR}) +endif() + project(adsb) set(adsb_SOURCES @@ -6,6 +10,7 @@ set(adsb_SOURCES adsbdemodwebapiadapter.cpp adsbplugin.cpp adsbdemodsink.cpp + adsbdemodsinkworker.cpp adsbdemodbaseband.cpp adsbdemodreport.cpp adsbdemodworker.cpp @@ -17,14 +22,17 @@ set(adsb_HEADERS adsbdemodwebapiadapter.h adsbplugin.h adsbdemodsink.h + absddemodsinkworker.h adsbdemodbaseband.h adsbdemodreport.h adsbdemodworker.h + adsbdemodstats.h adsb.h ) include_directories( ${CMAKE_SOURCE_DIR}/swagger/sdrangel/code/qt5/client + ${Boost_INCLUDE_DIRS} ) if(NOT SERVER_MODE) @@ -32,10 +40,24 @@ if(NOT SERVER_MODE) ${adsb_SOURCES} adsbdemodgui.cpp adsbdemodgui.ui + adsbdemodfeeddialog.cpp + adsbdemodfeeddialog.ui + adsbdemoddisplaydialog.cpp + adsbdemoddisplaydialog.ui + csv.cpp + airlinelogos.qrc + flags.qrc + map.qrc + icons.qrc ) set(adsb_HEADERS ${adsb_HEADERS} adsbdemodgui.h + adsbdemodfeeddialog.h + adsbdemoddisplaydialog.h + ourairports.h + osndb.h + csv.h ) set(TARGET_NAME demodadsb) @@ -66,5 +88,5 @@ install(TARGETS ${TARGET_NAME} DESTINATION ${INSTALL_FOLDER}) if(WIN32) # Run deployqt for QtQuick etc include(DeployQt) - windeployqt(${TARGET_NAME} ${SDRANGEL_BINARY_BIN_DIR} ${PROJECT_SOURCE_DIR}/../../../sdrgui/resources) + windeployqt(${TARGET_NAME} ${SDRANGEL_BINARY_BIN_DIR} ${PROJECT_SOURCE_DIR}/map) endif() diff --git a/plugins/channelrx/demodadsb/adsbdemod.cpp b/plugins/channelrx/demodadsb/adsbdemod.cpp index 46e4e46b7..61518dfd9 100644 --- a/plugins/channelrx/demodadsb/adsbdemod.cpp +++ b/plugins/channelrx/demodadsb/adsbdemod.cpp @@ -17,6 +17,8 @@ // along with this program. If not, see . // /////////////////////////////////////////////////////////////////////////////////// +#include + #include #include @@ -288,13 +290,13 @@ void ADSBDemod::webapiUpdateChannelSettings( settings.m_removeTimeout = response.getAdsbDemodSettings()->getRemoveTimeout(); } if (channelSettingsKeys.contains("beastEnabled")) { - settings.m_beastEnabled = response.getAdsbDemodSettings()->getBeastEnabled() != 0; + settings.m_feedEnabled = response.getAdsbDemodSettings()->getBeastEnabled() != 0; } if (channelSettingsKeys.contains("beastHost")) { - settings.m_beastHost = *response.getAdsbDemodSettings()->getBeastHost(); + settings.m_feedHost = *response.getAdsbDemodSettings()->getBeastHost(); } if (channelSettingsKeys.contains("beastPort")) { - settings.m_beastPort = response.getAdsbDemodSettings()->getBeastPort(); + settings.m_feedPort = response.getAdsbDemodSettings()->getBeastPort(); } if (channelSettingsKeys.contains("rgbColor")) { settings.m_rgbColor = response.getAdsbDemodSettings()->getRgbColor(); @@ -340,9 +342,9 @@ void ADSBDemod::webapiFormatChannelSettings(SWGSDRangel::SWGChannelSettings& res response.getAdsbDemodSettings()->setCorrelationThreshold(settings.m_correlationThreshold); response.getAdsbDemodSettings()->setSamplesPerBit(settings.m_samplesPerBit); response.getAdsbDemodSettings()->setRemoveTimeout(settings.m_removeTimeout); - response.getAdsbDemodSettings()->setBeastEnabled(settings.m_beastEnabled ? 1 : 0); - response.getAdsbDemodSettings()->setBeastHost(new QString(settings.m_beastHost)); - response.getAdsbDemodSettings()->setBeastPort(settings.m_beastPort); + response.getAdsbDemodSettings()->setBeastEnabled(settings.m_feedEnabled ? 1 : 0); + response.getAdsbDemodSettings()->setBeastHost(new QString(settings.m_feedHost)); + response.getAdsbDemodSettings()->setBeastPort(settings.m_feedPort); response.getAdsbDemodSettings()->setRgbColor(settings.m_rgbColor); if (response.getAdsbDemodSettings()->getTitle()) { @@ -408,13 +410,13 @@ void ADSBDemod::webapiReverseSendSettings(QList& channelSettingsKeys, c swgADSBDemodSettings->setRemoveTimeout(settings.m_removeTimeout); } if (channelSettingsKeys.contains("beastEnabled") || force) { - swgADSBDemodSettings->setBeastEnabled(settings.m_beastEnabled ? 1 : 0); + swgADSBDemodSettings->setBeastEnabled(settings.m_feedEnabled ? 1 : 0); } if (channelSettingsKeys.contains("beastHost") || force) { - swgADSBDemodSettings->setBeastHost(new QString(settings.m_beastHost)); + swgADSBDemodSettings->setBeastHost(new QString(settings.m_feedHost)); } if (channelSettingsKeys.contains("beastPort") || force) { - swgADSBDemodSettings->setBeastPort(settings.m_beastPort); + swgADSBDemodSettings->setBeastPort(settings.m_feedPort); } if (channelSettingsKeys.contains("rgbColor") || force) { swgADSBDemodSettings->setRgbColor(settings.m_rgbColor); diff --git a/plugins/channelrx/demodadsb/adsbdemoddisplaydialog.cpp b/plugins/channelrx/demodadsb/adsbdemoddisplaydialog.cpp new file mode 100644 index 000000000..b43a13c53 --- /dev/null +++ b/plugins/channelrx/demodadsb/adsbdemoddisplaydialog.cpp @@ -0,0 +1,66 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2020 Jon Beniston, M7RCE // +// // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include +#include + +#include "adsbdemoddisplaydialog.h" + +ADSBDemodDisplayDialog::ADSBDemodDisplayDialog +(int removeTimeout, float airportRange, ADSBDemodSettings::AirportType airportMinimumSize, + bool displayHeliports, bool siUnits, QString fontName, int fontSize, bool displayDemodStats, QWidget* parent) : + QDialog(parent), + ui(new Ui::ADSBDemodDisplayDialog), + m_fontName(fontName), + m_fontSize(fontSize) +{ + ui->setupUi(this); + ui->timeout->setValue(removeTimeout); + ui->airportRange->setValue(airportRange); + ui->airportSize->setCurrentIndex((int)airportMinimumSize); + ui->heliports->setChecked(displayHeliports); + ui->units->setCurrentIndex((int)siUnits); + ui->displayStats->setChecked(displayDemodStats); +} + +ADSBDemodDisplayDialog::~ADSBDemodDisplayDialog() +{ + delete ui; +} + +void ADSBDemodDisplayDialog::accept() +{ + m_removeTimeout = ui->timeout->value(); + m_airportRange = ui->airportRange->value(); + m_airportMinimumSize = (ADSBDemodSettings::AirportType)ui->airportSize->currentIndex(); + m_displayHeliports = ui->heliports->isChecked(); + m_siUnits = ui->units->currentIndex() == 0 ? false : true; + m_displayDemodStats = ui->displayStats->isChecked(); + QDialog::accept(); +} + +void ADSBDemodDisplayDialog::on_font_clicked(bool checked) +{ + bool ok; + QFont font = QFontDialog::getFont(&ok, QFont(m_fontName, m_fontSize), this); + if (ok) + { + qDebug() << font; + m_fontName = font.family(); + m_fontSize = font.pointSize(); + } +} diff --git a/plugins/channelrx/demodadsb/adsbdemoddisplaydialog.h b/plugins/channelrx/demodadsb/adsbdemoddisplaydialog.h new file mode 100644 index 000000000..a8c3099c7 --- /dev/null +++ b/plugins/channelrx/demodadsb/adsbdemoddisplaydialog.h @@ -0,0 +1,50 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2020 Jon Beniston, M7RCE // +// // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef INCLUDE_ADSBDEMODDISPLAYDIALOG_H +#define INCLUDE_ADSBDEMODDISPLAYDIALOG_H + +#include "ui_adsbdemoddisplaydialog.h" +#include "adsbdemodsettings.h" + +class ADSBDemodDisplayDialog : public QDialog { + Q_OBJECT + +public: + explicit ADSBDemodDisplayDialog(int removeTimeout, float airportRange, ADSBDemodSettings::AirportType airportMinimumSize, + bool displayHeliports, bool siUnits, QString fontName, int fontSize, bool displayDemodStats +, QWidget* parent = 0); + ~ADSBDemodDisplayDialog(); + + int m_removeTimeout; + float m_airportRange; + ADSBDemodSettings::AirportType m_airportMinimumSize; + bool m_displayHeliports; + bool m_siUnits; + QString m_fontName; + int m_fontSize; + bool m_displayDemodStats; + +private slots: + void accept(); + void on_font_clicked(bool checked = false); + +private: + Ui::ADSBDemodDisplayDialog* ui; +}; + +#endif // INCLUDE_ADSBDEMODDISPLAYDIALOG_H diff --git a/plugins/channelrx/demodadsb/adsbdemoddisplaydialog.ui b/plugins/channelrx/demodadsb/adsbdemoddisplaydialog.ui new file mode 100644 index 000000000..128192f74 --- /dev/null +++ b/plugins/channelrx/demodadsb/adsbdemoddisplaydialog.ui @@ -0,0 +1,200 @@ + + + ADSBDemodDisplayDialog + + + + 0 + 0 + 351 + 275 + + + + + Liberation Sans + 9 + + + + Display Settings + + + + + + + + + Units + + + + + + + The units to use for altitude, speed and climb rate + + + + ft, kn, ft/min + + + + + m, kph, m/s + + + + + + + + Display airports with size + + + + + + + Sets the minimum airport size that will be displayed on the map + + + + Small + + + + + Medium + + + + + Large + + + + + + + + When checked, heliports are displayed on the map + + + Display heliports + + + + + + + Airport display range (nm) + + + + + + + Displays airports within the specified range in nautical miles from My Position + + + 20000 + + + + + + + Aircraft timeout (s) + + + + + + + How long in seconds after not receving any frames will an aircraft be removed from the table and map + + + 1000000 + + + + + + + Table font + + + + + + + Select a font for the table + + + Select... + + + + + + + Display demodulator statistics + + + Display demodulator statistics + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + buttonBox + accepted() + ADSBDemodDisplayDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + ADSBDemodDisplayDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/plugins/channelrx/demodadsb/adsbdemodfeeddialog.cpp b/plugins/channelrx/demodadsb/adsbdemodfeeddialog.cpp new file mode 100644 index 000000000..4eaaac506 --- /dev/null +++ b/plugins/channelrx/demodadsb/adsbdemodfeeddialog.cpp @@ -0,0 +1,60 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2020 Jon Beniston, M7RCE // +// // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include + +#include "adsbdemodfeeddialog.h" +#include "adsbdemodsettings.h" + +ADSBDemodFeedDialog::ADSBDemodFeedDialog(QString& feedHost, int feedPort, ADSBDemodSettings::FeedFormat feedFormat, QWidget* parent) : + QDialog(parent), + ui(new Ui::ADSBDemodFeedDialog) +{ + ui->setupUi(this); + ui->host->lineEdit()->setText(feedHost); + ui->port->setValue(feedPort); + ui->format->setCurrentIndex((int)feedFormat); +} + +ADSBDemodFeedDialog::~ADSBDemodFeedDialog() +{ + delete ui; +} + +void ADSBDemodFeedDialog::accept() +{ + m_feedHost = ui->host->currentText(); + m_feedPort = ui->port->value(); + m_feedFormat = (ADSBDemodSettings::FeedFormat )ui->format->currentIndex(); + QDialog::accept(); +} + +void ADSBDemodFeedDialog::on_host_currentIndexChanged(int value) +{ + if (value == 0) + { + ui->host->lineEdit()->setText("feed.adsbexchange.com"); + ui->port->setValue(30005); + ui->format->setCurrentIndex(0); + } + else if (value == 1) + { + ui->host->lineEdit()->setText("data.adsbhub.org"); + ui->port->setValue(5002); + ui->format->setCurrentIndex(1); + } +} diff --git a/plugins/channelrx/demodadsb/adsbdemodfeeddialog.h b/plugins/channelrx/demodadsb/adsbdemodfeeddialog.h new file mode 100644 index 000000000..64af99183 --- /dev/null +++ b/plugins/channelrx/demodadsb/adsbdemodfeeddialog.h @@ -0,0 +1,43 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2020 Jon Beniston, M7RCE // +// // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef INCLUDE_ADSBDEMODFEEDDIALOG_H +#define INCLUDE_ADSBDEMODFEEDDIALOG_H + +#include "ui_adsbdemodfeeddialog.h" +#include "adsbdemodsettings.h" + +class ADSBDemodFeedDialog : public QDialog { + Q_OBJECT + +public: + explicit ADSBDemodFeedDialog(QString& feedHost, int feedPort, ADSBDemodSettings::FeedFormat feedFormat, QWidget* parent = 0); + ~ADSBDemodFeedDialog(); + + QString m_feedHost; + int m_feedPort; + ADSBDemodSettings::FeedFormat m_feedFormat; + +private slots: + void accept(); + void on_host_currentIndexChanged(int value); + +private: + Ui::ADSBDemodFeedDialog* ui; +}; + +#endif // INCLUDE_ADSBDEMODFEEDDIALOG_H diff --git a/plugins/channelrx/demodadsb/adsbdemodfeeddialog.ui b/plugins/channelrx/demodadsb/adsbdemodfeeddialog.ui new file mode 100644 index 000000000..786c2c4ac --- /dev/null +++ b/plugins/channelrx/demodadsb/adsbdemodfeeddialog.ui @@ -0,0 +1,150 @@ + + + ADSBDemodFeedDialog + + + + 0 + 0 + 351 + 138 + + + + + Liberation Sans + 9 + + + + Feed Settings + + + + + + + + + Server hostname + + + + + + + Port number + + + + + + + The TCP port number the server is listening on + + + 1024 + + + 65535 + + + + + + + Format to feed the data to the server in + + + + Beast binary + + + + + Beast hex + + + + + + + + Format + + + + + + + Hostname of server to feed ADS-B data to + + + true + + + + feed.adsbexchange.com + + + + + data.adsbhub.org + + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + port + + + + + buttonBox + accepted() + ADSBDemodFeedDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + ADSBDemodFeedDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/plugins/channelrx/demodadsb/adsbdemodgui.cpp b/plugins/channelrx/demodadsb/adsbdemodgui.cpp index f2d38561b..9d9fffd87 100644 --- a/plugins/channelrx/demodadsb/adsbdemodgui.cpp +++ b/plugins/channelrx/demodadsb/adsbdemodgui.cpp @@ -30,6 +30,7 @@ #include #include "ui_adsbdemodgui.h" +#include "channel/channelwebapiutils.h" #include "plugin/pluginapi.h" #include "util/simpleserializer.h" #include "util/db.h" @@ -42,24 +43,34 @@ #include "adsbdemodreport.h" #include "adsbdemod.h" #include "adsbdemodgui.h" +#include "adsbdemodfeeddialog.h" +#include "adsbdemoddisplaydialog.h" #include "adsb.h" // ADS-B table columns #define ADSB_COL_ICAO 0 #define ADSB_COL_FLIGHT 1 -#define ADSB_COL_LATITUDE 2 -#define ADSB_COL_LONGITUDE 3 +#define ADSB_COL_MODEL 2 +#define ADSB_COL_AIRLINE 3 #define ADSB_COL_ALTITUDE 4 #define ADSB_COL_SPEED 5 #define ADSB_COL_HEADING 6 #define ADSB_COL_VERTICALRATE 7 -#define ADSB_COL_CATEGORY 8 -#define ADSB_COL_STATUS 9 -#define ADSB_COL_RANGE 10 -#define ADSB_COL_AZEL 11 -#define ADSB_COL_TIME 12 -#define ADSB_COL_FRAMECOUNT 13 -#define ADSB_COL_CORRELATION 14 +#define ADSB_COL_RANGE 8 +#define ADSB_COL_AZEL 9 +#define ADSB_COL_LATITUDE 10 +#define ADSB_COL_LONGITUDE 11 +#define ADSB_COL_CATEGORY 12 +#define ADSB_COL_STATUS 13 +#define ADSB_COL_REGISTRATION 14 +#define ADSB_COL_COUNTRY 15 +#define ADSB_COL_REGISTERED 16 +#define ADSB_COL_MANUFACTURER 17 +#define ADSB_COL_OWNER 18 +#define ADSB_COL_OPERATOR_ICAO 19 +#define ADSB_COL_TIME 20 +#define ADSB_COL_FRAMECOUNT 21 +#define ADSB_COL_CORRELATION 22 const char *Aircraft::m_speedTypeNames[] = { "GS", "TAS", "IAS" @@ -91,6 +102,7 @@ QByteArray ADSBDemodGUI::serialize() const bool ADSBDemodGUI::deserialize(const QByteArray& data) { if(m_settings.deserialize(data)) { + updateDeviceSetList(); displaySettings(); applySettings(true); return true; @@ -101,13 +113,13 @@ bool ADSBDemodGUI::deserialize(const QByteArray& data) } // Longitude zone (returns value in range [1,59] -static int cprNL(Real lat) +static int cprNL(double lat) { - if (lat == 0.0f) + if (lat == 0.0) return 59; - else if ((lat == 87.0f) || (lat == -87.0f)) + else if ((lat == 87.0) || (lat == -87.0)) return 2; - else if ((lat > 87.0f) || (lat < -87.0f)) + else if ((lat > 87.0) || (lat < -87.0)) return 1; else { @@ -118,7 +130,7 @@ static int cprNL(Real lat) } } -static int cprN(Real lat, int odd) +static int cprN(double lat, int odd) { int nl = cprNL(lat) - odd; if (nl > 1) @@ -129,11 +141,36 @@ static int cprN(Real lat, int odd) static Real feetToMetres(Real feet) { - return feet * 0.3048; + return feet * 0.3048f; } -// Can't use std::fmod, as that works differently for negative numbers -static Real modulus(Real x, Real y) +static int feetToMetresInt(Real feet) +{ + return (int)std::round(feetToMetres(feet)); +} + +static Real knotsToKPH(Real knots) +{ + return knots * 1.852f; +} + +static int knotsToKPHInt(Real knots) +{ + return (int)std::round(knotsToKPH(knots)); +} + +static Real feetPerMinToMetresPerSecond(Real fpm) +{ + return fpm * 0.00508f; +} + +static int feetPerMinToMetresPerSecondInt(Real fpm) +{ + return (int)std::round(feetPerMinToMetresPerSecond(fpm)); +} + +// Can't use std::fmod, as that works differently for negative numbers (See C.2.6.2) +static Real modulus(double x, double y) { return x - y * std::floor(x/y); } @@ -149,7 +186,7 @@ QVariant AircraftModel::data(const QModelIndex &index, int role) const QGeoCoordinate coords; coords.setLatitude(m_aircrafts[row]->m_latitude); coords.setLongitude(m_aircrafts[row]->m_longitude); - coords.setAltitude(m_aircrafts[row]->m_altitude * 0.3048); // Convert feet to metres + coords.setAltitude(feetToMetres(m_aircrafts[row]->m_altitude)); return QVariant::fromValue(coords); } else if (role == AircraftModel::headingRole) @@ -169,28 +206,57 @@ QVariant AircraftModel::data(const QModelIndex &index, int role) const { list.append(QString("ICAO: %1").arg(m_aircrafts[row]->m_icao, 1, 16)); } - if (m_aircrafts[row]->m_altitudeValid) + if (m_aircrafts[row]->m_showAll || m_aircrafts[row]->m_isHighlighted) { - list.append(QString("Altitude: %1 (ft)").arg(m_aircrafts[row]->m_altitude)); - } - if (m_aircrafts[row]->m_speedValid) - { - list.append(QString("%1: %2 (kn)").arg(m_aircrafts[row]->m_speedTypeNames[m_aircrafts[row]->m_speedType]).arg(m_aircrafts[row]->m_speed)); - } - if (m_aircrafts[row]->m_verticalRateValid) - { - QString desc; - if (m_aircrafts[row]->m_verticalRate == 0) - desc = "Level flight"; - else if (m_aircrafts[row]->m_verticalRate > 0) - desc = QString("Climbing: %1 (ft/min)").arg(m_aircrafts[row]->m_verticalRate); - else - desc = QString("Descending: %1 (ft/min)").arg(m_aircrafts[row]->m_verticalRate); - list.append(QString(desc)); - } - if ((m_aircrafts[row]->m_status.length() > 0) && m_aircrafts[row]->m_status.compare("No emergency")) - { - list.append(m_aircrafts[row]->m_status); + if (m_aircrafts[row]->m_aircraftInfo != nullptr) + { + if (m_aircrafts[row]->m_aircraftInfo->m_model.size() > 0) + { + list.append(QString("Aircraft: %1").arg(m_aircrafts[row]->m_aircraftInfo->m_model)); + } + } + if (m_aircrafts[row]->m_altitudeValid) + { + if (m_aircrafts[row]->m_gui->useSIUints()) + list.append(QString("Altitude: %1 (m)").arg(feetToMetresInt(m_aircrafts[row]->m_altitude))); + else + list.append(QString("Altitude: %1 (ft)").arg(m_aircrafts[row]->m_altitude)); + } + if (m_aircrafts[row]->m_speedValid) + { + if (m_aircrafts[row]->m_gui->useSIUints()) + list.append(QString("%1: %2 (kph)").arg(m_aircrafts[row]->m_speedTypeNames[m_aircrafts[row]->m_speedType]).arg(knotsToKPHInt(m_aircrafts[row]->m_speed))); + else + list.append(QString("%1: %2 (kn)").arg(m_aircrafts[row]->m_speedTypeNames[m_aircrafts[row]->m_speedType]).arg(m_aircrafts[row]->m_speed)); + } + if (m_aircrafts[row]->m_verticalRateValid) + { + QString desc; + Real rate; + QString units; + + if (m_aircrafts[row]->m_gui->useSIUints()) + { + rate = feetPerMinToMetresPerSecondInt(m_aircrafts[row]->m_verticalRate); + units = QString("m/s"); + } + else + { + rate = m_aircrafts[row]->m_verticalRate; + units = QString("ft/min"); + } + if (m_aircrafts[row]->m_verticalRate == 0) + desc = "Level flight"; + else if (rate > 0) + desc = QString("Climbing: %1 (%2)").arg(rate).arg(units); + else + desc = QString("Descending: %1 (%2)").arg(rate).arg(units); + list.append(QString(desc)); + } + if ((m_aircrafts[row]->m_status.length() > 0) && m_aircrafts[row]->m_status.compare("No emergency")) + { + list.append(m_aircrafts[row]->m_status); + } } QString data = list.join("\n"); return QVariant::fromValue(data); @@ -220,7 +286,7 @@ QVariant AircraftModel::data(const QModelIndex &index, int role) const return QVariant::fromValue(QString("aircraft_drone.png")); else if (!m_aircrafts[row]->m_emitterCategory.compare("Emergency vehicle") || !m_aircrafts[row]->m_emitterCategory.compare("Service vehicle")) - return QVariant::fromValue(QString("map_truck.png")); + return QVariant::fromValue(QString("truck.png")); else return QVariant::fromValue(QString("aircraft_2engine.png")); } @@ -230,16 +296,154 @@ QVariant AircraftModel::data(const QModelIndex &index, int role) const else if (role == AircraftModel::bubbleColourRole) { // Select a background colour for the text bubble next to the aircraft - if (m_aircrafts[row]->m_isBeingTracked) + if (m_aircrafts[row]->m_isTarget) return QVariant::fromValue(QColor("lightgreen")); + else if (m_aircrafts[row]->m_isHighlighted) + return QVariant::fromValue(QColor("orange")); else if ((m_aircrafts[row]->m_status.length() > 0) && m_aircrafts[row]->m_status.compare("No emergency")) - return QVariant::fromValue(QColor("lightred")); + return QVariant::fromValue(QColor("lightred")); else - return QVariant::fromValue(QColor("lightblue")); + return QVariant::fromValue(QColor("lightblue")); + } + else if (role == AircraftModel::aircraftPathRole) + { + if (m_flightPaths) + return m_aircrafts[row]->m_coordinates; + else + return QVariantList(); + } + else if (role == AircraftModel::showAllRole) + return QVariant::fromValue(m_aircrafts[row]->m_showAll); + else if (role == AircraftModel::highlightedRole) + return QVariant::fromValue(m_aircrafts[row]->m_isHighlighted); + else if (role == AircraftModel::targetRole) + return QVariant::fromValue(m_aircrafts[row]->m_isTarget); + return QVariant(); +} + +bool AircraftModel::setData(const QModelIndex &index, const QVariant& value, int role) +{ + int row = index.row(); + if ((row < 0) || (row >= m_aircrafts.count())) + return false; + if (role == AircraftModel::showAllRole) + { + bool showAll = value.toBool(); + if (showAll != m_aircrafts[row]->m_showAll) + { + m_aircrafts[row]->m_showAll = showAll; + emit dataChanged(index, index); + } + return true; + } + else if (role == AircraftModel::highlightedRole) + { + bool highlight = value.toBool(); + if (highlight != m_aircrafts[row]->m_isHighlighted) + { + m_aircrafts[row]->m_gui->highlightAircraft(m_aircrafts[row]); + emit dataChanged(index, index); + } + return true; + } + else if (role == AircraftModel::targetRole) + { + bool target = value.toBool(); + if (target != m_aircrafts[row]->m_isTarget) + { + m_aircrafts[row]->m_gui->targetAircraft(m_aircrafts[row]); + emit dataChanged(index, index); + } + return true; + } + return true; +} + +QVariant AirportModel::data(const QModelIndex &index, int role) const +{ + int row = index.row(); + if ((row < 0) || (row >= m_airports.count())) + return QVariant(); + if (role == AirportModel::positionRole) + { + // Coordinates to display the airport icon at + QGeoCoordinate coords; + coords.setLatitude(m_airports[row]->m_latitude); + coords.setLongitude(m_airports[row]->m_longitude); + coords.setAltitude(feetToMetres(m_airports[row]->m_elevation)); + return QVariant::fromValue(coords); + } + else if (role == AirportModel::airportDataRole) + { + if (m_showFreq[row]) + return QVariant::fromValue(m_airportDataFreq[row]); + else + return QVariant::fromValue(m_airports[row]->m_ident); + } + else if (role == AirportModel::airportDataRowsRole) + { + if (m_showFreq[row]) + return QVariant::fromValue(m_airportDataFreqRows[row]); + else + return 1; + } + else if (role == AirportModel::airportImageRole) + { + // Select an image to use for the airport + if (m_airports[row]->m_type == ADSBDemodSettings::AirportType::Large) + return QVariant::fromValue(QString("airport_large.png")); + else if (m_airports[row]->m_type == ADSBDemodSettings::AirportType::Medium) + return QVariant::fromValue(QString("airport_medium.png")); + else if (m_airports[row]->m_type == ADSBDemodSettings::AirportType::Heliport) + return QVariant::fromValue(QString("heliport.png")); + else + return QVariant::fromValue(QString("airport_small.png")); + } + else if (role == AirportModel::bubbleColourRole) + { + // Select a background colour for the text bubble next to the airport + return QVariant::fromValue(QColor("lightyellow")); + } + else if (role == AirportModel::showFreqRole) + { + return QVariant::fromValue(m_showFreq[row]); } return QVariant(); } +bool AirportModel::setData(const QModelIndex &index, const QVariant& value, int role) +{ + int row = index.row(); + if ((row < 0) || (row >= m_airports.count())) + return false; + if (role == AirportModel::showFreqRole) + { + bool showFreq = value.toBool(); + if (showFreq != m_showFreq[row]) + { + m_showFreq[row] = showFreq; + emit dataChanged(index, index); + } + return true; + } + else if (role == AirportModel::selectedFreqRole) + { + int idx = value.toInt(); + if ((idx >= 0) && (idx < m_airports[row]->m_frequencies.size())) + m_gui->setFrequency(m_airports[row]->m_frequencies[idx]->m_frequency * 1000000); + else + qDebug() << "AirportModel::setData unexpected idx " << idx << " frequencies.size() " << m_airports[row]->m_frequencies.size(); + return true; + } + return true; +} + +// Set selected device to the given centre frequency (used to tune to ATC selected from airports on map) +bool ADSBDemodGUI::setFrequency(float targetFrequencyHz) +{ + return ChannelWebAPIUtils::setCenterFrequency(m_settings.m_deviceIndex, targetFrequencyHz); +} + // Called when we have both lat & long void ADSBDemodGUI::updatePosition(Aircraft *aircraft) { @@ -258,13 +462,75 @@ void ADSBDemodGUI::updatePosition(Aircraft *aircraft) aircraft->m_range = m_azEl.getDistance(); aircraft->m_azimuth = m_azEl.getAzimuth(); aircraft->m_elevation = m_azEl.getElevation(); - aircraft->m_rangeItem->setText(QString("%1").arg(aircraft->m_range/1000.0, 0, 'f', 1)); + aircraft->m_rangeItem->setText(QString::number(aircraft->m_range/1000.0, 'f', 1)); aircraft->m_azElItem->setText(QString("%1/%2").arg(std::round(aircraft->m_azimuth)).arg(std::round(aircraft->m_elevation))); if (aircraft == m_trackAircraft) m_adsbDemod->setTarget(aircraft->m_azimuth, aircraft->m_elevation); } -void ADSBDemodGUI::handleADSB(const QByteArray data, const QDateTime dateTime, float correlationOnes, float correlationZeros) +// Try to find an airline logo based on ICAO +QIcon *ADSBDemodGUI::getAirlineIcon(const QString &operatorICAO) +{ + if (m_airlineIcons.contains(operatorICAO)) + return m_airlineIcons.value(operatorICAO); + else + { + QIcon *icon = nullptr; + QString endPath = QString("/airlinelogos/%1.bmp").arg(operatorICAO); + // Try in user directory first, so they can customise + QString userIconPath = getDataDir() + endPath; + QFile file(userIconPath); + if (file.exists()) + { + icon = new QIcon(userIconPath); + m_airlineIcons.insert(operatorICAO, icon); + } + else + { + // Try in resources + QResource resourceIconPath(QString(":%1").arg(endPath)); + if (resourceIconPath.isValid()) + { + icon = new QIcon(":" + endPath); + m_airlineIcons.insert(operatorICAO, icon); + } + } + return icon; + } +} + +// Try to find an flag logo based on a country +QIcon *ADSBDemodGUI::getFlagIcon(const QString &country) +{ + if (m_flagIcons.contains(country)) + return m_flagIcons.value(country); + else + { + QIcon *icon = nullptr; + QString endPath = QString("/flags/%1.bmp").arg(country); + // Try in user directory first, so they can customise + QString userIconPath = getDataDir() + endPath; + QFile file(userIconPath); + if (file.exists()) + { + icon = new QIcon(userIconPath); + m_flagIcons.insert(country, icon); + } + else + { + // Try in resources + QResource resourceIconPath(QString(":%1").arg(endPath)); + if (resourceIconPath.isValid()) + { + icon = new QIcon(":" + endPath); + m_flagIcons.insert(country, icon); + } + } + return icon; + } +} + +void ADSBDemodGUI::handleADSB(const QByteArray data, const QDateTime dateTime, float correlation) { const char idMap[] = "?ABCDEFGHIJKLMNOPQRSTUVWXYZ????? ???????????????0123456789??????"; const QString categorySetA[] = { @@ -322,288 +588,391 @@ void ADSBDemodGUI::handleADSB(const QByteArray data, const QDateTime dateTime, f else { // Add new aircraft - aircraft = new Aircraft; + aircraft = new Aircraft(this); aircraft->m_icao = icao; m_aircraft.insert(icao, aircraft); - aircraft->m_icaoItem->setText(QString("%1").arg(aircraft->m_icao, 1, 16)); + // Check for TIS-B addresses + if ((df == 18) && !((df == 18) && ((ca == 0) || (ca == 1) || (ca == 6)))) + aircraft->m_icaoItem->setText(QString("TIS-B %1").arg(aircraft->m_icao, 1, 16)); + else + aircraft->m_icaoItem->setText(QString("%1").arg(aircraft->m_icao, 1, 16)); + ui->adsbData->setSortingEnabled(false); int row = ui->adsbData->rowCount(); ui->adsbData->setRowCount(row + 1); ui->adsbData->setItem(row, ADSB_COL_ICAO, aircraft->m_icaoItem); ui->adsbData->setItem(row, ADSB_COL_FLIGHT, aircraft->m_flightItem); - ui->adsbData->setItem(row, ADSB_COL_LATITUDE, aircraft->m_latitudeItem); - ui->adsbData->setItem(row, ADSB_COL_LONGITUDE, aircraft->m_longitudeItem); + ui->adsbData->setItem(row, ADSB_COL_MODEL, aircraft->m_modelItem); + ui->adsbData->setItem(row, ADSB_COL_AIRLINE, aircraft->m_airlineItem); ui->adsbData->setItem(row, ADSB_COL_ALTITUDE, aircraft->m_altitudeItem); ui->adsbData->setItem(row, ADSB_COL_SPEED, aircraft->m_speedItem); ui->adsbData->setItem(row, ADSB_COL_HEADING, aircraft->m_headingItem); ui->adsbData->setItem(row, ADSB_COL_VERTICALRATE, aircraft->m_verticalRateItem); - ui->adsbData->setItem(row, ADSB_COL_CATEGORY, aircraft->m_emitterCategoryItem); - ui->adsbData->setItem(row, ADSB_COL_STATUS, aircraft->m_statusItem); ui->adsbData->setItem(row, ADSB_COL_RANGE, aircraft->m_rangeItem); ui->adsbData->setItem(row, ADSB_COL_AZEL, aircraft->m_azElItem); + ui->adsbData->setItem(row, ADSB_COL_LATITUDE, aircraft->m_latitudeItem); + ui->adsbData->setItem(row, ADSB_COL_LONGITUDE, aircraft->m_longitudeItem); + ui->adsbData->setItem(row, ADSB_COL_CATEGORY, aircraft->m_emitterCategoryItem); + ui->adsbData->setItem(row, ADSB_COL_STATUS, aircraft->m_statusItem); + ui->adsbData->setItem(row, ADSB_COL_REGISTRATION, aircraft->m_registrationItem); + ui->adsbData->setItem(row, ADSB_COL_COUNTRY, aircraft->m_countryItem); + ui->adsbData->setItem(row, ADSB_COL_REGISTERED, aircraft->m_registeredItem); + ui->adsbData->setItem(row, ADSB_COL_MANUFACTURER, aircraft->m_manufacturerNameItem); + ui->adsbData->setItem(row, ADSB_COL_OWNER, aircraft->m_ownerItem); + ui->adsbData->setItem(row, ADSB_COL_OPERATOR_ICAO, aircraft->m_operatorICAOItem); ui->adsbData->setItem(row, ADSB_COL_TIME, aircraft->m_timeItem); ui->adsbData->setItem(row, ADSB_COL_FRAMECOUNT, aircraft->m_adsbFrameCountItem); ui->adsbData->setItem(row, ADSB_COL_CORRELATION, aircraft->m_correlationItem); + // Look aircraft up in database + if (m_aircraftInfo != nullptr) + { + if (m_aircraftInfo->contains(icao)) + { + aircraft->m_aircraftInfo = m_aircraftInfo->value(icao); + aircraft->m_modelItem->setText(aircraft->m_aircraftInfo->m_model); + aircraft->m_registrationItem->setText(aircraft->m_aircraftInfo->m_registration); + aircraft->m_manufacturerNameItem->setText(aircraft->m_aircraftInfo->m_manufacturerName); + aircraft->m_ownerItem->setText(aircraft->m_aircraftInfo->m_owner); + aircraft->m_operatorICAOItem->setText(aircraft->m_aircraftInfo->m_operatorICAO); + aircraft->m_registeredItem->setText(aircraft->m_aircraftInfo->m_registered); + // Try loading an airline logo based on operator ICAO + QIcon *icon = nullptr; + if (aircraft->m_aircraftInfo->m_operatorICAO.size() > 0) + { + icon = getAirlineIcon(aircraft->m_aircraftInfo->m_operatorICAO); + if (icon != nullptr) + { + aircraft->m_airlineItem->setSizeHint(QSize(85, 20)); + aircraft->m_airlineItem->setIcon(*icon); + } + } + if (icon == nullptr) + { + if (aircraft->m_aircraftInfo->m_operator.size() > 0) + aircraft->m_airlineItem->setText(aircraft->m_aircraftInfo->m_operator); + else + aircraft->m_airlineItem->setText(aircraft->m_aircraftInfo->m_owner); + } + // Try loading a flag based on registration + if ((aircraft->m_aircraftInfo->m_registration.size() > 0) && (m_prefixMap != nullptr)) + { + QString flag; + int idx = aircraft->m_aircraftInfo->m_registration.indexOf('-'); + if (idx >= 0) + { + QString prefix; + + // Some countries use AA-A - try these first as first letters are common + prefix = aircraft->m_aircraftInfo->m_registration.left(idx + 2); + if (m_prefixMap->contains(prefix)) + flag = m_prefixMap->value(prefix); + else + { + // Try letters before '-' + prefix = aircraft->m_aircraftInfo->m_registration.left(idx); + if (m_prefixMap->contains(prefix)) + flag = m_prefixMap->value(prefix); + } + } + else + { + // No '-' Could be military + if ((m_militaryMap != nullptr) && (m_militaryMap->contains(aircraft->m_aircraftInfo->m_operator))) + flag = m_militaryMap->value(aircraft->m_aircraftInfo->m_operator); + } + if (flag != "") + { + icon = getFlagIcon(flag); + if (icon != nullptr) + { + aircraft->m_countryItem->setSizeHint(QSize(40, 20)); + aircraft->m_countryItem->setIcon(*icon); + } + } + } + } + } + ui->adsbData->setSortingEnabled(true); } aircraft->m_time = dateTime; QTime time = dateTime.time(); aircraft->m_timeItem->setText(QString("%1:%2:%3").arg(time.hour(), 2, 10, QLatin1Char('0')).arg(time.minute(), 2, 10, QLatin1Char('0')).arg(time.second(), 2, 10, QLatin1Char('0'))); aircraft->m_adsbFrameCount++; - aircraft->m_adsbFrameCountItem->setText(QString("%1").arg(aircraft->m_adsbFrameCount)); + aircraft->m_adsbFrameCountItem->setData(Qt::DisplayRole, aircraft->m_adsbFrameCount); - m_correlationZerosAvg(correlationZeros); - aircraft->m_minCorrelation = m_correlationZerosAvg.instantAverage(); - if (correlationOnes > aircraft->m_maxCorrelation) - aircraft->m_maxCorrelation = correlationOnes; - m_correlationOnesAvg(correlationOnes); - aircraft->m_correlation = m_correlationOnesAvg.instantAverage(); + if (correlation < aircraft->m_minCorrelation) + aircraft->m_minCorrelation = correlation; + if (correlation > aircraft->m_maxCorrelation) + aircraft->m_maxCorrelation = correlation; + m_correlationAvg(correlation); + aircraft->m_correlationAvg(correlation); + aircraft->m_correlation = aircraft->m_correlationAvg.instantAverage(); aircraft->m_correlationItem->setText(QString("%1/%2/%3") .arg(CalcDb::dbPower(aircraft->m_minCorrelation), 3, 'f', 1) .arg(CalcDb::dbPower(aircraft->m_correlation), 3, 'f', 1) .arg(CalcDb::dbPower(aircraft->m_maxCorrelation), 3, 'f', 1)); - - if ((tc >= 1) && ((tc <= 4))) + // ADS-B, non-transponder ADS-B or TIS-B rebroadcast of ADS-B (ADS-R) + if ((df == 17) || ((df == 18) && ((ca == 0) || (ca == 1) || (ca == 6)))) { - // Aircraft identification - int ec = data[4] & 0x7; // Emitter category - if (tc == 4) - aircraft->m_emitterCategory = categorySetA[ec]; - else if (tc == 3) - aircraft->m_emitterCategory = categorySetB[ec]; - else if (tc == 2) - aircraft->m_emitterCategory = categorySetC[ec]; - else - aircraft->m_emitterCategory = QString("Reserved"); - aircraft->m_emitterCategoryItem->setText(aircraft->m_emitterCategory); - - // Flight/callsign - Extract 8 6-bit characters from 6 8-bit bytes, MSB first - unsigned char c[8]; - char callsign[9]; - c[0] = (data[5] >> 2) & 0x3f; // 6 - c[1] = ((data[5] & 0x3) << 4) | ((data[6] & 0xf0) >> 4); // 2+4 - c[2] = ((data[6] & 0xf) << 2) | ((data[7] & 0xc0) >> 6); // 4+2 - c[3] = (data[7] & 0x3f); // 6 - c[4] = (data[8] >> 2) & 0x3f; - c[5] = ((data[8] & 0x3) << 4) | ((data[9] & 0xf0) >> 4); - c[6] = ((data[9] & 0xf) << 2) | ((data[10] & 0xc0) >> 6); - c[7] = (data[10] & 0x3f); - // Map to ASCII - for (int i = 0; i < 8; i++) - callsign[i] = idMap[c[i]]; - callsign[8] = '\0'; - - aircraft->m_flight = QString(callsign); - aircraft->m_flightItem->setText(aircraft->m_flight); - } - else if ((tc >= 5) && (tc <= 8)) - { - // Surface position - } - else if (((tc >= 9) && (tc <= 18)) || ((tc >= 20) && (tc <= 22))) - { - // Airbourne position (9-18 baro, 20-22 GNSS) - int ss = (data[4] >> 1) & 0x3; // Surveillance status - int nicsb = data[4] & 1; // NIC supplement-B - int alt = ((data[5] & 0xff) << 4) | ((data[6] >> 4) & 0xf); // Altitude - int n = ((alt >> 1) & 0x7f0) | (alt & 0xf); - int alt_ft = n * ((alt & 0x10) ? 25 : 100) - 1000; - - aircraft->m_altitude = alt_ft; - aircraft->m_altitudeValid = true; - aircraft->m_altitudeItem->setText(QString("%1").arg(aircraft->m_altitude)); - - int t = (data[6] >> 3) & 1; // Time - int f = (data[6] >> 2) & 1; // CPR odd/even frame - int lat_cpr = ((data[6] & 3) << 15) | ((data[7] & 0xff) << 7) | ((data[8] >> 1) & 0x7f); - int lon_cpr = ((data[8] & 1) << 16) | ((data[9] & 0xff) << 8) | (data[10] & 0xff); - - aircraft->m_cprValid[f] = true; - aircraft->m_cprLat[f] = lat_cpr/131072.0f; - aircraft->m_cprLong[f] = lon_cpr/131072.0f; - - // Check if both odd and even frames are available - // See: https://mode-s.org/decode/adsb/airborne-position.html - // We could compare global + local methods to see if the positions are sensible - if (aircraft->m_cprValid[0] && aircraft->m_cprValid[1]) + if ((tc >= 1) && ((tc <= 4))) { - // Global decode using odd and even frames - - // Calculate latitude - const Real dLatEven = 360.0f/60.0f; - const Real dLatOdd = 360.0f/59.0f; - Real latEven, latOdd; - - int j = std::floor(59.0f*aircraft->m_cprLat[0] - 60.0f*aircraft->m_cprLat[1] + 0.5); - latEven = dLatEven * ((j % 60) + aircraft->m_cprLat[0]); - if (latEven >= 270.0f) - latEven -= 360.0f; - latOdd = dLatOdd * ((j % 59) + aircraft->m_cprLat[1]); - if (latOdd >= 270.0f) - latOdd -= 360.0f; - if (!f) - aircraft->m_latitude = latEven; + // Aircraft identification + int ec = data[4] & 0x7; // Emitter category + if (tc == 4) + aircraft->m_emitterCategory = categorySetA[ec]; + else if (tc == 3) + aircraft->m_emitterCategory = categorySetB[ec]; + else if (tc == 2) + aircraft->m_emitterCategory = categorySetC[ec]; else - aircraft->m_latitude = latOdd; - aircraft->m_latitudeItem->setText(QString("%1").arg(aircraft->m_latitude)); + aircraft->m_emitterCategory = QString("Reserved"); + aircraft->m_emitterCategoryItem->setText(aircraft->m_emitterCategory); - // Check if both frames in same latitude zone - int latEvenNL = cprNL(latEven); - int latOddNL = cprNL(latOdd); - if (latEvenNL == latOddNL) + // Flight/callsign - Extract 8 6-bit characters from 6 8-bit bytes, MSB first + unsigned char c[8]; + char callsign[9]; + c[0] = (data[5] >> 2) & 0x3f; // 6 + c[1] = ((data[5] & 0x3) << 4) | ((data[6] & 0xf0) >> 4); // 2+4 + c[2] = ((data[6] & 0xf) << 2) | ((data[7] & 0xc0) >> 6); // 4+2 + c[3] = (data[7] & 0x3f); // 6 + c[4] = (data[8] >> 2) & 0x3f; + c[5] = ((data[8] & 0x3) << 4) | ((data[9] & 0xf0) >> 4); + c[6] = ((data[9] & 0xf) << 2) | ((data[10] & 0xc0) >> 6); + c[7] = (data[10] & 0x3f); + // Map to ASCII + for (int i = 0; i < 8; i++) + callsign[i] = idMap[c[i]]; + callsign[8] = '\0'; + + aircraft->m_flight = QString(callsign); + aircraft->m_flightItem->setText(aircraft->m_flight); + } + else if ((tc >= 5) && (tc <= 8)) + { + // Surface position + } + else if (((tc >= 9) && (tc <= 18)) || ((tc >= 20) && (tc <= 22))) + { + // Airbourne position (9-18 baro, 20-22 GNSS) + int ss = (data[4] >> 1) & 0x3; // Surveillance status + int nicsb = data[4] & 1; // NIC supplement-B + int alt = ((data[5] & 0xff) << 4) | ((data[6] >> 4) & 0xf); // Altitude + int n = ((alt >> 1) & 0x7f0) | (alt & 0xf); + int alt_ft = n * ((alt & 0x10) ? 25 : 100) - 1000; + + aircraft->m_altitude = alt_ft; + aircraft->m_altitudeValid = true; + // setData rather than setText so it sorts numerically + aircraft->m_altitudeItem->setData(Qt::DisplayRole, m_settings.m_siUnits ? feetToMetresInt(aircraft->m_altitude) : aircraft->m_altitude); + + int t = (data[6] >> 3) & 1; // Time synchronisation to UTC + int f = (data[6] >> 2) & 1; // CPR odd/even frame - should alternate every 0.2s + int lat_cpr = ((data[6] & 3) << 15) | ((data[7] & 0xff) << 7) | ((data[8] >> 1) & 0x7f); + int lon_cpr = ((data[8] & 1) << 16) | ((data[9] & 0xff) << 8) | (data[10] & 0xff); + + aircraft->m_cprValid[f] = true; + aircraft->m_cprLat[f] = lat_cpr/131072.0f; + aircraft->m_cprLong[f] = lon_cpr/131072.0f; + aircraft->m_cprTime[f] = dateTime; + + // CPR decoding + // Refer to Technical Provisions for Mode S Services and Extended Squitter - Appendix C2.6 + // See also: https://mode-s.org/decode/adsb/airborne-position.html + // For global decoding, we need both odd and even frames + // We also need to check that both frames aren't greater than 10s apart in time (C.2.6.7), otherwise position may be out by ~10deg + // We could compare global + local methods to see if the positions are sensible + if (aircraft->m_cprValid[0] && aircraft->m_cprValid[1] + && (std::abs(aircraft->m_cprTime[0].toSecsSinceEpoch() - aircraft->m_cprTime[1].toSecsSinceEpoch()) < 10)) { - // Calculate longitude - if (!f) + // Global decode using odd and even frames (C.2.6) + + // Calculate latitude + const double dLatEven = 360.0/60.0; + const double dLatOdd = 360.0/59.0; + double latEven, latOdd; + double latitude, longitude; + int ni, m; + + int j = std::floor(59.0f*aircraft->m_cprLat[0] - 60.0f*aircraft->m_cprLat[1] + 0.5); + latEven = dLatEven * ((j % 60) + aircraft->m_cprLat[0]); + if (latEven >= 270.0f) + latEven -= 360.0f; + latOdd = dLatOdd * ((j % 59) + aircraft->m_cprLat[1]); + if (latOdd >= 270.0f) + latOdd -= 360.0f; + if (aircraft->m_cprTime[0] >= aircraft->m_cprTime[1]) + latitude = latEven; + else + latitude = latOdd; + + // Check if both frames in same latitude zone + int latEvenNL = cprNL(latEven); + int latOddNL = cprNL(latOdd); + if (latEvenNL == latOddNL) { - int ni = cprN(latEven, 0); - int m = std::floor(aircraft->m_cprLong[0] * (latEvenNL - 1) - aircraft->m_cprLong[1] * latEvenNL + 0.5f); - aircraft->m_longitude = (360.0f/ni) * ((m % ni) + aircraft->m_cprLong[0]); + // Calculate longitude + if (!f) + { + ni = cprN(latEven, 0); + m = std::floor(aircraft->m_cprLong[0] * (latEvenNL - 1) - aircraft->m_cprLong[1] * latEvenNL + 0.5f); + longitude = (360.0f/ni) * (modulus(m, ni) + aircraft->m_cprLong[0]); + } + else + { + ni = cprN(latOdd, 1); + m = std::floor(aircraft->m_cprLong[0] * (latOddNL - 1) - aircraft->m_cprLong[1] * latOddNL + 0.5f); + longitude = (360.0f/ni) * (modulus(m, ni) + aircraft->m_cprLong[1]); + } + if (longitude > 180.0f) + longitude -= 360.0f; + aircraft->m_latitude = latitude; + aircraft->m_latitudeItem->setData(Qt::DisplayRole, aircraft->m_latitude); + aircraft->m_longitude = longitude; + aircraft->m_longitudeItem->setData(Qt::DisplayRole, aircraft->m_longitude); + aircraft->m_coordinates.push_back(QVariant::fromValue(*new QGeoCoordinate(aircraft->m_latitude, aircraft->m_longitude, aircraft->m_altitude))); + updatePosition(aircraft); + } + } + else + { + // Local decode using a single aircraft position + location of receiver + // Only valid if within 180nm (C.2.6.4) + + // Caclulate latitude + const double dLatEven = 360.0/60.0; + const double dLatOdd = 360.0/59.0; + double dLat = f ? dLatOdd : dLatEven; + int j = std::floor(m_azEl.getLocationSpherical().m_latitude/dLat) + std::floor(modulus(m_azEl.getLocationSpherical().m_latitude, dLat)/dLat - aircraft->m_cprLat[f] + 0.5); + aircraft->m_latitude = dLat * (j + aircraft->m_cprLat[f]); + aircraft->m_latitudeItem->setData(Qt::DisplayRole, aircraft->m_latitude); + + // Caclulate longitude + double dLong; + int latNL = cprNL(aircraft->m_latitude); + if (f == 0) + { + if (latNL > 0) + dLong = 360.0 / latNL; + else + dLong = 360.0; } else { - int ni = cprN(latOdd, 1); - int m = std::floor(aircraft->m_cprLong[0] * (latOddNL - 1) - aircraft->m_cprLong[1] * latOddNL + 0.5f); - aircraft->m_longitude = (360.0f/ni) * ((m % ni) + aircraft->m_cprLong[1]); + if ((latNL - 1) > 0) + dLong = 360.0 / (latNL - 1); + else + dLong = 360.0; } - if (aircraft->m_longitude > 180.0f) - aircraft->m_longitude -= 360.0f; - aircraft->m_longitudeItem->setText(QString("%1").arg(aircraft->m_longitude)); + int m = std::floor(m_azEl.getLocationSpherical().m_longitude/dLong) + std::floor(modulus(m_azEl.getLocationSpherical().m_longitude, dLong)/dLong - aircraft->m_cprLong[f] + 0.5); + aircraft->m_longitude = dLong * (m + aircraft->m_cprLong[f]); + aircraft->m_longitudeItem->setData(Qt::DisplayRole, aircraft->m_longitude); + aircraft->m_coordinates.push_back(QVariant::fromValue(*new QGeoCoordinate(aircraft->m_latitude, aircraft->m_longitude, aircraft->m_altitude))); updatePosition(aircraft); } } - else + else if (tc == 19) { - // Local decode using a single aircraft position + location of receiver - // Only valid if within 180nm - - // Caclulate latitude - const Real dLatEven = 360.0f/60.0f; - const Real dLatOdd = 360.0f/59.0f; - Real dLat = f ? dLatOdd : dLatEven; - int j = std::floor(m_azEl.getLocationSpherical().m_latitude/dLat) + std::floor(modulus(m_azEl.getLocationSpherical().m_latitude, dLat)/dLat - aircraft->m_cprLat[f] + 0.5); - aircraft->m_latitude = dLat * (j + aircraft->m_cprLat[f]); - // Add suffix of L to indicate local decode - aircraft->m_latitudeItem->setText(QString("%1 L").arg(aircraft->m_latitude)); - - // Caclulate longitude - Real dLong; - int latNL = cprNL(aircraft->m_latitude); - if (f == 0) + // Airbourne velocity + int st = data[4] & 0x7; // Subtype + int ic = (data[5] >> 7) & 1; // Intent change flag + int nac = (data[5] >> 3) & 0x3; // Velocity uncertainty + if ((st == 1) || (st == 2)) { - if (latNL > 0) - dLong = 360.0 / latNL; + // Ground speed + int s_ew = (data[5] >> 2) & 1; // East-west velocity sign + int v_ew = ((data[5] & 0x3) << 8) | (data[6] & 0xff); // East-west velocity + int s_ns = (data[7] >> 7) & 1; // North-south velocity sign + int v_ns = ((data[7] & 0x7f) << 3) | ((data[8] >> 5) & 0x7); // North-south velocity + + int v_we; + int v_sn; + int v; + int h; + + if (s_ew) + v_we = -1 * (v_ew - 1); else - dLong = 360.0; - } - else - { - if ((latNL - 1) > 0) - dLong = 360.0 / (latNL - 1); + v_we = v_ew - 1; + if (s_ns) + v_sn = -1 * (v_ns - 1); else - dLong = 360.0; - } - int m = std::floor(m_azEl.getLocationSpherical().m_longitude/dLong) + std::floor(modulus(m_azEl.getLocationSpherical().m_longitude, dLong)/dLong - aircraft->m_cprLong[f] + 0.5); - aircraft->m_longitude = dLong * (m + aircraft->m_cprLong[f]); - // Add suffix of L to indicate local decode - aircraft->m_longitudeItem->setText(QString("%1 L").arg(aircraft->m_longitude)); - updatePosition(aircraft); - } - } - else if (tc == 19) - { - // Airbourne velocity - int st = data[4] & 0x7; // Subtype - int ic = (data[5] >> 7) & 1; // Intent change flag - int nac = (data[5] >> 3) & 0x3; // Velocity uncertainty - if ((st == 1) || (st == 2)) - { - // Ground speed - int s_ew = (data[5] >> 2) & 1; // East-west velocity sign - int v_ew = ((data[5] & 0x3) << 8) | (data[6] & 0xff); // East-west velocity - int s_ns = (data[7] >> 7) & 1; // North-south velocity sign - int v_ns = ((data[7] & 0x7f) << 3) | ((data[8] >> 5) & 0x7); // North-south velocity + v_sn = v_ns - 1; + v = (int)std::sqrt(v_we*v_we + v_sn*v_sn); + h = std::atan2(v_we, v_sn) * 360.0/(2.0*M_PI); + if (h < 0) + h += 360; - int v_we; - int v_sn; - int v; - int h; - - if (s_ew) - v_we = -1 * (v_ew - 1); - else - v_we = v_ew - 1; - if (s_ns) - v_sn = -1 * (v_ns - 1); - else - v_sn = v_ns - 1; - v = (int)std::sqrt(v_we*v_we + v_sn*v_sn); - h = std::atan2(v_we, v_sn) * 360.0/(2.0*M_PI); - if (h < 0) - h += 360; - - aircraft->m_heading = h; - aircraft->m_headingValid = true; - aircraft->m_speed = v; - aircraft->m_speedType = Aircraft::GS; - aircraft->m_speedValid = true; - aircraft->m_headingItem->setText(QString("%1").arg(aircraft->m_heading)); - aircraft->m_speedItem->setText(QString("%1").arg(aircraft->m_speed)); - } - else - { - // Airspeed - int s_hdg = (data[5] >> 2) & 1; // Heading status - int hdg = ((data[5] & 0x3) << 8) | (data[6] & 0xff); // Heading - if (s_hdg) - { - aircraft->m_heading = hdg/1024.0f*360.0f; + aircraft->m_heading = h; aircraft->m_headingValid = true; - aircraft->m_headingItem->setText(QString("%1").arg(aircraft->m_heading)); + aircraft->m_speed = v; + aircraft->m_speedType = Aircraft::GS; + aircraft->m_speedValid = true; + aircraft->m_headingItem->setData(Qt::DisplayRole, aircraft->m_heading); + aircraft->m_speedItem->setData(Qt::DisplayRole, m_settings.m_siUnits ? knotsToKPHInt(aircraft->m_speed) : aircraft->m_speed); } + else + { + // Airspeed + int s_hdg = (data[5] >> 2) & 1; // Heading status + int hdg = ((data[5] & 0x3) << 8) | (data[6] & 0xff); // Heading + if (s_hdg) + { + aircraft->m_heading = hdg/1024.0f*360.0f; + aircraft->m_headingValid = true; + aircraft->m_headingItem->setData(Qt::DisplayRole, aircraft->m_heading); + } - int as_t = (data[7] >> 7) & 1; // Airspeed type - int as = ((data[7] & 0x7f) << 3) | ((data[8] >> 5) & 0x7); // Airspeed + int as_t = (data[7] >> 7) & 1; // Airspeed type + int as = ((data[7] & 0x7f) << 3) | ((data[8] >> 5) & 0x7); // Airspeed - aircraft->m_speed = as; - aircraft->m_speedType = as_t ? Aircraft::IAS : Aircraft::TAS; - aircraft->m_speedValid = true; - aircraft->m_speedItem->setText(QString("%1").arg(aircraft->m_speed)); + aircraft->m_speed = as; + aircraft->m_speedType = as_t ? Aircraft::IAS : Aircraft::TAS; + aircraft->m_speedValid = true; + aircraft->m_speedItem->setData(Qt::DisplayRole, m_settings.m_siUnits ? knotsToKPHInt(aircraft->m_speed) : aircraft->m_speed); + } + int vrsrc = (data[8] >> 4) & 1; // Vertical rate source + int s_vr = (data[8] >> 3) & 1; // Vertical rate sign + int vr = ((data[8] & 0x7) << 6) | ((data[9] >> 2) & 0x3f); // Vertical rate + aircraft->m_verticalRate = (vr-1)*64*(s_vr?-1:1); + aircraft->m_verticalRateValid = true; + if (m_settings.m_siUnits) + aircraft->m_verticalRateItem->setData(Qt::DisplayRole, feetPerMinToMetresPerSecondInt(aircraft->m_verticalRate)); + else + aircraft->m_verticalRateItem->setData(Qt::DisplayRole, aircraft->m_verticalRate); + int s_dif = (data[10] >> 7) & 1; // Diff from baro alt, sign + int dif = data[10] & 0x7f; // Diff from baro alt + } + else if (tc == 28) + { + // Aircraft status + int st = data[4] & 0x7; // Subtype + int es = (data[5] >> 5) & 0x7; // Emergency state + if (st == 1) + aircraft->m_status = emergencyStatus[es]; + else + aircraft->m_status = QString(""); + aircraft->m_statusItem->setText(aircraft->m_status); + } + else if (tc == 29) + { + // Target state and status + } + else if (tc == 31) + { + // Aircraft operation status } - int vrsrc = (data[8] >> 4) & 1; // Vertical rate source - int s_vr = (data[8] >> 3) & 1; // Vertical rate sign - int vr = ((data[8] & 0x7) << 6) | ((data[9] >> 2) & 0x3f); // Vertical rate - aircraft->m_verticalRate = (vr-1)*64*(s_vr?-1:1); - aircraft->m_verticalRateValid = true; - aircraft->m_verticalRateItem->setText(QString("%1").arg(aircraft->m_verticalRate)); - int s_dif = (data[10] >> 7) & 1; // Diff from baro alt, sign - int dif = data[10] & 0x7f; // Diff from baro alt + // Update aircraft in map + if (aircraft->m_positionValid) + { + m_aircraftModel.aircraftUpdated(aircraft); + } } - else if (tc == 28) + else if (df == 18) { - // Aircraft status - int st = data[4] & 0x7; // Subtype - int es = (data[5] >> 5) & 0x7; // Emergeny state - if (st == 1) - aircraft->m_status = emergencyStatus[es]; - else - aircraft->m_status = QString(""); - aircraft->m_statusItem->setText(aircraft->m_status); + // TIS-B + qDebug() << "TIS B message cf=" << ca << " icao: " << icao; } - else if (tc == 29) - { - // Target state and status - } - else if (tc == 31) - { - // Aircraft operation status - } - - // Update aircraft in map - if (aircraft->m_positionValid) - { - m_aircraftModel.aircraftUpdated(aircraft); - } - } bool ADSBDemodGUI::handleMessage(const Message& message) @@ -613,8 +982,17 @@ bool ADSBDemodGUI::handleMessage(const Message& message) ADSBDemodReport::MsgReportADSB& report = (ADSBDemodReport::MsgReportADSB&) message; handleADSB( report.getData(), report.getDateTime(), - report.getPreambleCorrelationOnes(), - report.getPreambleCorrelationZeros()); + report.getPreambleCorrelation()); + return true; + } + else if (ADSBDemodReport::MsgReportDemodStats::match(message)) + { + ADSBDemodReport::MsgReportDemodStats& report = (ADSBDemodReport::MsgReportDemodStats&) message; + if (m_settings.m_displayDemodStats) + { + ADSBDemodStats stats = report.getDemodStats(); + ui->stats->setText(QString("ADS-B: %1 Mode-S: %2 Matches: %3 CRC: %4 Type: %5 Avg Corr: %6 Demod Time: %7 Feed Time: %8").arg(stats.m_adsbFrames).arg(stats.m_modesFrames).arg(stats.m_correlatorMatches).arg(stats.m_crcFails).arg(stats.m_typeFails).arg(CalcDb::dbPower(m_correlationAvg.instantAverage()), 1, 'f', 1).arg(stats.m_demodTime, 1, 'f', 3).arg(stats.m_feedTime, 1, 'f', 3)); + } return true; } else if (ADSBDemod::MsgConfigureADSBDemod::match(message)) @@ -680,23 +1058,19 @@ void ADSBDemodGUI::on_threshold_valueChanged(int value) applySettings(); } -void ADSBDemodGUI::on_beastEnabled_stateChanged(int state) +void ADSBDemodGUI::on_feed_clicked(bool checked) { - m_settings.m_beastEnabled = state == Qt::Checked; + m_settings.m_feedEnabled = checked; // Don't disable host/port - so they can be entered before connecting applySettings(); } -void ADSBDemodGUI::on_host_editingFinished(QString value) +void ADSBDemodGUI::on_adsbData_cellClicked(int row, int column) { - m_settings.m_beastHost = value; - applySettings(); -} - -void ADSBDemodGUI::on_port_valueChanged(int value) -{ - m_settings.m_beastPort = value; - applySettings(); + // Get ICAO of aircraft in row clicked + int icao = ui->adsbData->item(row, 0)->text().toInt(nullptr, 16); + if (m_aircraft.contains(icao)) + highlightAircraft(m_aircraft.value(icao)); } void ADSBDemodGUI::on_adsbData_cellDoubleClicked(int row, int column) @@ -725,19 +1099,7 @@ void ADSBDemodGUI::on_adsbData_cellDoubleClicked(int row, int column) { if (column == ADSB_COL_AZEL) { - if (m_trackAircraft) - { - // Restore colour of current target - m_trackAircraft->m_isBeingTracked = false; - m_aircraftModel.aircraftUpdated(m_trackAircraft); - } - // Track this aircraft - m_trackAircraft = aircraft; - if (aircraft->m_positionValid) - m_adsbDemod->setTarget(aircraft->m_azimuth, aircraft->m_elevation); - // Change colour of new target - aircraft->m_isBeingTracked = true; - m_aircraftModel.aircraftUpdated(aircraft); + targetAircraft(aircraft); } // Center map view on aircraft if it has a valid position if (aircraft->m_positionValid) @@ -756,12 +1118,197 @@ void ADSBDemodGUI::on_adsbData_cellDoubleClicked(int row, int column) } } +// Columns in table reordered +void ADSBDemodGUI::adsbData_sectionMoved(int logicalIndex, int oldVisualIndex, int newVisualIndex) +{ + m_settings.m_columnIndexes[logicalIndex] = newVisualIndex; +} + +// Column in table resized (when hidden size is 0) +void ADSBDemodGUI::adsbData_sectionResized(int logicalIndex, int oldSize, int newSize) +{ + m_settings.m_columnSizes[logicalIndex] = newSize; +} + +// Right click in ADSB table header - show column select menu +void ADSBDemodGUI::columnSelectMenu(QPoint pos) +{ + menu->popup(ui->adsbData->horizontalHeader()->viewport()->mapToGlobal(pos)); +} + +// Hide/show column when menu selected +void ADSBDemodGUI::columnSelectMenuChecked(bool checked) +{ + QAction* action = qobject_cast(sender()); + if (action != nullptr) + { + int idx = action->data().toInt(nullptr); + ui->adsbData->setColumnHidden(idx, !action->isChecked()); + } +} + +// Create column select menu item +QAction *ADSBDemodGUI::createCheckableItem(QString &text, int idx, bool checked) +{ + QAction *action = new QAction(text, this); + action->setCheckable(true); + action->setChecked(checked); + action->setData(QVariant(idx)); + connect(action, SIGNAL(triggered()), this, SLOT(columnSelectMenuChecked())); + return action; +} + void ADSBDemodGUI::on_spb_currentIndexChanged(int value) { m_settings.m_samplesPerBit = (value + 1) * 2; applySettings(); } +void ADSBDemodGUI::on_correlateFullPreamble_clicked(bool checked) +{ + m_settings.m_correlateFullPreamble = checked; + applySettings(); +} + +void ADSBDemodGUI::on_demodModeS_clicked(bool checked) +{ + m_settings.m_demodModeS = checked; + applySettings(); +} + +void ADSBDemodGUI::on_getOSNDB_clicked(bool checked) +{ + // Don't try to download while already in progress + if (m_progressDialog == nullptr) + { + // Download Opensky network database to a file + QUrl dbURL(QString(OSNDB_URL)); + connect(&m_dlm, &HttpDownloadManager::downloadComplete, this, &ADSBDemodGUI::downloadFinished); + m_progressDialog = new QProgressDialog(this); + m_progressDialog->setAttribute(Qt::WA_DeleteOnClose); + m_progressDialog->setCancelButton(nullptr); + m_progressDialog->setLabelText(QString("Downloading %1.").arg(OSNDB_URL)); + QNetworkReply *reply = m_dlm.download(dbURL, getOSNDBFilename()); + connect(reply, SIGNAL(downloadProgress(qint64,qint64)), this, SLOT(updateDownloadProgress(qint64,qint64))); + } +} + +void ADSBDemodGUI::on_getAirportDB_clicked(bool checked) +{ + // Don't try to download while already in progress + if (m_progressDialog == nullptr) + { + // Download Opensky network database to a file + QUrl dbURL(QString(AIRPORTS_URL)); + connect(&m_dlm, &HttpDownloadManager::downloadComplete, this, &ADSBDemodGUI::downloadFinished); + m_progressDialog = new QProgressDialog(this); + m_progressDialog->setAttribute(Qt::WA_DeleteOnClose); + m_progressDialog->setCancelButton(nullptr); + m_progressDialog->setLabelText(QString("Downloading %1.").arg(AIRPORTS_URL)); + QNetworkReply *reply = m_dlm.download(dbURL, getAirportDBFilename()); + connect(reply, SIGNAL(downloadProgress(qint64,qint64)), this, SLOT(updateDownloadProgress(qint64,qint64))); + } +} + +void ADSBDemodGUI::on_flightPaths_clicked(bool checked) +{ + m_settings.m_flightPaths = checked; + m_aircraftModel.setFlightPaths(checked); +} + +QString ADSBDemodGUI::getDataDir() +{ + // Get directory to store app data in (aircraft & airport databases and user-definable icons) + QStringList locations = QStandardPaths::standardLocations(QStandardPaths::AppDataLocation); + // First dir is writable + return locations[0]; +} + +QString ADSBDemodGUI::getAirportDBFilename() +{ + return getDataDir() + "/airportDatabase.csv"; +} + +QString ADSBDemodGUI::getAirportFrequenciesDBFilename() +{ + return getDataDir() + "/airportFrequenciesDatabase.csv"; +} + +QString ADSBDemodGUI::getOSNDBFilename() +{ + return getDataDir() + "/aircraftDatabase.csv"; +} + +QString ADSBDemodGUI::getFastDBFilename() +{ + return getDataDir() + "/aircraftDatabaseFast.csv"; +} + +bool ADSBDemodGUI::readOSNDB(const QString& filename) +{ + m_aircraftInfo = AircraftInformation::readOSNDB(filename); + return m_aircraftInfo != nullptr; +} + +bool ADSBDemodGUI::readFastDB(const QString& filename) +{ + m_aircraftInfo = AircraftInformation::readFastDB(filename); + return m_aircraftInfo != nullptr; +} + +void ADSBDemodGUI::updateDownloadProgress(qint64 bytesRead, qint64 totalBytes) +{ + m_progressDialog->setMaximum(totalBytes); + m_progressDialog->setValue(bytesRead); +} + +void ADSBDemodGUI::downloadFinished(const QString& filename, bool success) +{ + if (success) + { + if (filename == getOSNDBFilename()) + { + readOSNDB(filename); + // Convert to condensed format for faster loading later + m_progressDialog->setLabelText("Processing."); + AircraftInformation::writeFastDB(getFastDBFilename(), m_aircraftInfo); + m_progressDialog->close(); + m_progressDialog = nullptr; + } + else if (filename == getAirportDBFilename()) + { + m_airportInfo = AirportInformation::readAirportsDB(filename); + // Now download airport frequencies + QUrl dbURL(QString(AIRPORT_FREQUENCIES_URL)); + m_progressDialog->setLabelText(QString("Downloading %1.").arg(AIRPORT_FREQUENCIES_URL)); + QNetworkReply *reply = m_dlm.download(dbURL, getAirportFrequenciesDBFilename()); + connect(reply, SIGNAL(downloadProgress(qint64,qint64)), this, SLOT(updateDownloadProgress(qint64,qint64))); + } + else if (filename == getAirportFrequenciesDBFilename()) + { + if (m_airportInfo != nullptr) + { + AirportInformation::readFrequenciesDB(filename, m_airportInfo); + // Update airports on map + updateAirports(); + } + m_progressDialog->close(); + m_progressDialog = nullptr; + } + else + { + qDebug() << "ADSBDemodGUI::downloadFinished: Unexpected filename: " << filename; + m_progressDialog->close(); + m_progressDialog = nullptr; + } + } + else + { + m_progressDialog->close(); + m_progressDialog = nullptr; + } +} + void ADSBDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) { (void) widget; @@ -813,6 +1360,181 @@ void ADSBDemodGUI::onMenuDialogCalled(const QPoint &p) resetContextMenuType(); } +void ADSBDemodGUI::updateDeviceSetList() +{ + MainWindow *mainWindow = MainWindow::getInstance(); + std::vector& deviceUISets = mainWindow->getDeviceUISets(); + std::vector::const_iterator it = deviceUISets.begin(); + + ui->device->blockSignals(true); + + ui->device->clear(); + unsigned int deviceIndex = 0; + + for (; it != deviceUISets.end(); ++it, deviceIndex++) + { + DSPDeviceSourceEngine *deviceSourceEngine = (*it)->m_deviceSourceEngine; + DSPDeviceSinkEngine *deviceSinkEngine = (*it)->m_deviceSinkEngine; + DSPDeviceMIMOEngine *deviceMIMOEngine = (*it)->m_deviceMIMOEngine; + + if (deviceSourceEngine) { + ui->device->addItem(QString("R%1").arg(deviceIndex), deviceIndex); + } + } + + int newDeviceIndex; + + if (it != deviceUISets.begin()) + { + if (m_settings.m_deviceIndex < 0) { + ui->device->setCurrentIndex(0); + } else { + ui->device->setCurrentIndex(m_settings.m_deviceIndex); + } + + newDeviceIndex = ui->device->currentData().toInt(); + } + else + { + newDeviceIndex = -1; + } + + if (newDeviceIndex != m_settings.m_deviceIndex) + { + qDebug("ADSBDemodGUI::updateDeviceSetLists: device index changed: %d", newDeviceIndex); + m_settings.m_deviceIndex = newDeviceIndex; + } + + ui->device->blockSignals(false); +} + +void ADSBDemodGUI::on_devicesRefresh_clicked() +{ + updateDeviceSetList(); + displaySettings(); + applySettings(); +} + +void ADSBDemodGUI::on_device_currentIndexChanged(int index) +{ + if (index >= 0) + { + m_settings.m_deviceIndex = ui->device->currentData().toInt(); + applySettings(); + } +} + +void ADSBDemodGUI::updateAirports() +{ + m_airportModel.removeAllAirports(); + QHash::iterator i = m_airportInfo->begin(); + while (i != m_airportInfo->end()) + { + AirportInformation *airportInfo = i.value(); + // Calculate range to airport from My Position - One degree = 60 nautical miles + float latDiff = std::fabs(airportInfo->m_latitude - m_azEl.getLocationSpherical().m_latitude) * 60.0f; + float longDiff = std::fabs(airportInfo->m_longitude - m_azEl.getLocationSpherical().m_longitude) * 60.0f; + float range = sqrt(latDiff*latDiff+longDiff*longDiff); + // Only display airport if in range + if (range <= m_settings.m_airportRange) + { + // Only display the airport if it's large enough + if (airportInfo->m_type >= m_settings.m_airportMinimumSize) + { + // Only display heliports if enabled + if (m_settings.m_displayHeliports || (airportInfo->m_type != ADSBDemodSettings::AirportType::Heliport)) + { + m_airportModel.addAirport(airportInfo); + } + } + } + ++i; + } + // Save settings we've just used so we know if they've changed + m_currentAirportRange = m_currentAirportRange; + m_currentAirportMinimumSize = m_settings.m_airportMinimumSize; + m_currentDisplayHeliports = m_settings.m_displayHeliports; +} + +void ADSBDemodGUI::targetAircraft(Aircraft *aircraft) +{ + if (aircraft != m_trackAircraft) + { + if (m_trackAircraft) + { + // Restore colour of current target + m_trackAircraft->m_isTarget = false; + m_aircraftModel.aircraftUpdated(m_trackAircraft); + } + // Track this aircraft + m_trackAircraft = aircraft; + if (aircraft->m_positionValid) + m_adsbDemod->setTarget(aircraft->m_azimuth, aircraft->m_elevation); + // Change colour of new target + aircraft->m_isTarget = true; + m_aircraftModel.aircraftUpdated(aircraft); + } +} + +void ADSBDemodGUI::highlightAircraft(Aircraft *aircraft) +{ + if (aircraft != m_highlightAircraft) + { + if (m_highlightAircraft) + { + // Restore colour + m_highlightAircraft->m_isHighlighted = false; + m_aircraftModel.aircraftUpdated(m_highlightAircraft); + } + // Highlight this aircraft + m_highlightAircraft = aircraft; + aircraft->m_isHighlighted = true; + m_aircraftModel.aircraftUpdated(aircraft); + } + // Highlight the row in the table - always do this, as it can become + // unselected + ui->adsbData->selectRow(aircraft->m_icaoItem->row()); +} + +// Show feed dialog +void ADSBDemodGUI::feedSelect() +{ + ADSBDemodFeedDialog dialog(m_settings.m_feedHost, m_settings.m_feedPort, m_settings.m_feedFormat); + if (dialog.exec() == QDialog::Accepted) + { + m_settings.m_feedHost = dialog.m_feedHost; + m_settings.m_feedPort = dialog.m_feedPort; + m_settings.m_feedFormat = dialog.m_feedFormat; + applySettings(); + } +} + +// Show display settings dialog +void ADSBDemodGUI::on_displaySettings_clicked(bool checked) +{ + ADSBDemodDisplayDialog dialog(m_settings.m_removeTimeout, m_settings.m_airportRange, m_settings.m_airportMinimumSize, + m_settings.m_displayHeliports, m_settings.m_siUnits, + m_settings.m_tableFontName, m_settings.m_tableFontSize, + m_settings.m_displayDemodStats); + if (dialog.exec() == QDialog::Accepted) + { + bool unitsChanged = m_settings.m_siUnits != dialog.m_siUnits; + + m_settings.m_removeTimeout = dialog.m_removeTimeout; + m_settings.m_airportRange = dialog.m_airportRange; + m_settings.m_airportMinimumSize = dialog.m_airportMinimumSize; + m_settings.m_displayHeliports = dialog.m_displayHeliports; + m_settings.m_siUnits = dialog.m_siUnits; + m_settings.m_tableFontName = dialog.m_fontName; + m_settings.m_tableFontSize = dialog.m_fontSize; + m_settings.m_displayDemodStats = dialog.m_displayDemodStats; + + if (unitsChanged) + m_aircraftModel.allAircraftUpdated(); + displaySettings(); + applySettings(); + } +} ADSBDemodGUI::ADSBDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampleSink *rxChannel, QWidget* parent) : ChannelGUI(parent), @@ -823,10 +1545,17 @@ ADSBDemodGUI::ADSBDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseb m_basicSettingsShown(false), m_doApplySettings(true), m_tickCount(0), - m_trackAircraft(nullptr) + m_trackAircraft(nullptr), + m_highlightAircraft(nullptr), + m_aircraftInfo(nullptr), + m_airportModel(this), + m_progressDialog(nullptr) { ui->setupUi(this); + ui->map->rootContext()->setContextProperty("aircraftModel", &m_aircraftModel); + ui->map->rootContext()->setContextProperty("airportModel", &m_airportModel); + ui->map->setSource(QUrl(QStringLiteral("qrc:/map/map.qml"))); setAttribute(Qt::WA_DeleteOnClose, true); @@ -838,6 +1567,9 @@ ADSBDemodGUI::ADSBDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseb connect(&MainCore::instance()->getMasterTimer(), SIGNAL(timeout()), this, SLOT(tick())); + CRightClickEnabler *feedRightClickEnabler = new CRightClickEnabler(ui->feed); + connect(feedRightClickEnabler, SIGNAL(rightClick(const QPoint &)), this, SLOT(feedSelect())); + ui->channelPowerMeter->setColorTheme(LevelMeterSignalDB::ColorGreenAndBlue); ui->deltaFrequencyLabel->setText(QString("%1f").arg(QChar(0x94, 0x03))); @@ -862,7 +1594,40 @@ ADSBDemodGUI::ADSBDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseb connect(getInputMessageQueue(), SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages())); + // Set size of airline icons + ui->adsbData->setIconSize(QSize(85, 20)); + // Resize the table using dummy data resizeTable(); + // Allow user to reorder columns + ui->adsbData->horizontalHeader()->setSectionsMovable(true); + // Allow user to sort table by clicking on headers + ui->adsbData->setSortingEnabled(true); + // Add context menu to allow hiding/showing of columns + menu = new QMenu(ui->adsbData); + for (int i = 0; i < ui->adsbData->horizontalHeader()->count(); i++) + { + menu->addAction(createCheckableItem(ui->adsbData->horizontalHeaderItem(i)->text(), i, true)); + } + ui->adsbData->horizontalHeader()->setContextMenuPolicy(Qt::CustomContextMenu); + connect(ui->adsbData->horizontalHeader(), SIGNAL(customContextMenuRequested(QPoint)), SLOT(columnSelectMenu(QPoint))); + // Get signals when columns change + connect(ui->adsbData->horizontalHeader(), SIGNAL(sectionMoved(int, int, int)), SLOT(adsbData_sectionMoved(int, int, int))); + connect(ui->adsbData->horizontalHeader(), SIGNAL(sectionResized(int, int, int)), SLOT(adsbData_sectionResized(int, int, int))); + + // Read aircraft information database, if it has previously been downloaded + if (!readFastDB(getFastDBFilename())) + { + if (readOSNDB(getOSNDBFilename())) + AircraftInformation::writeFastDB(getFastDBFilename(), m_aircraftInfo); + } + // Read airport information database, if it has previously been downloaded + m_airportInfo = AirportInformation::readAirportsDB(getAirportDBFilename()); + if (m_airportInfo != nullptr) + AirportInformation::readFrequenciesDB(getAirportFrequenciesDBFilename(), m_airportInfo); + // Read registration prefix to country map + m_prefixMap = csvHash(":/flags/regprefixmap.csv"); + // Read operator air force to military map + m_militaryMap = csvHash(":/flags/militarymap.csv"); // Get station position Real stationLatitude = MainCore::instance()->getSettings().getLatitude(); @@ -891,7 +1656,11 @@ ADSBDemodGUI::ADSBDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseb stationObject->setProperty("coordinate", QVariant::fromValue(coords)); stationObject->setProperty("stationName", QVariant::fromValue(MainCore::instance()->getSettings().getStationName())); } + // Add airports within range of My Position + if (m_airportInfo != nullptr) + updateAirports(); + updateDeviceSetList(); displaySettings(); applySettings(true); } @@ -914,7 +1683,7 @@ void ADSBDemodGUI::applySettings(bool force) { qDebug() << "ADSBDemodGUI::applySettings"; - ADSBDemod::MsgConfigureADSBDemod* message = ADSBDemod::MsgConfigureADSBDemod::create( m_settings, force); + ADSBDemod::MsgConfigureADSBDemod* message = ADSBDemod::MsgConfigureADSBDemod::create(m_settings, force); m_adsbDemod->getInputMessageQueue()->push(message); } } @@ -939,16 +1708,58 @@ void ADSBDemodGUI::displaySettings() ui->rfBW->setValue((int)m_settings.m_rfBandwidth); ui->spb->setCurrentIndex(m_settings.m_samplesPerBit/2-1); + ui->correlateFullPreamble->setChecked(m_settings.m_correlateFullPreamble); + ui->demodModeS->setChecked(m_settings.m_demodModeS); ui->thresholdText->setText(QString("%1").arg(m_settings.m_correlationThreshold, 0, 'f', 1)); - ui->threshold->setValue((int)(m_settings.m_correlationThreshold*10)); + ui->threshold->setValue((int)(m_settings.m_correlationThreshold*10.0f)); - ui->beastEnabled->setChecked(m_settings.m_beastEnabled); - ui->host->setText(m_settings.m_beastHost); - ui->port->setValue(m_settings.m_beastPort); + ui->feed->setChecked(m_settings.m_feedEnabled); + + ui->flightPaths->setChecked(m_settings.m_flightPaths); + m_aircraftModel.setFlightPaths(m_settings.m_flightPaths); displayStreamIndex(); + QFont font(m_settings.m_tableFontName, m_settings.m_tableFontSize); + ui->adsbData->setFont(font); + + // Set units in column headers + if (m_settings.m_siUnits) + { + ui->adsbData->horizontalHeaderItem(ADSB_COL_ALTITUDE)->setText("Alt (m)"); + ui->adsbData->horizontalHeaderItem(ADSB_COL_SPEED)->setText("Spd (kph)"); + ui->adsbData->horizontalHeaderItem(ADSB_COL_VERTICALRATE)->setText("VR (m/s)"); + } + else + { + ui->adsbData->horizontalHeaderItem(ADSB_COL_ALTITUDE)->setText("Alt (ft)"); + ui->adsbData->horizontalHeaderItem(ADSB_COL_SPEED)->setText("Spd (kn)"); + ui->adsbData->horizontalHeaderItem(ADSB_COL_VERTICALRATE)->setText("VR (ft/m)"); + } + + // Order and size columns + QHeaderView *header = ui->adsbData->horizontalHeader(); + for (int i = 0; i < ADSBDEMOD_COLUMNS; i++) + { + bool hidden = m_settings.m_columnSizes[i] == 0; + header->setSectionHidden(i, hidden); + menu->actions().at(i)->setChecked(!hidden); + if (m_settings.m_columnSizes[i] > 0) + ui->adsbData->setColumnWidth(i, m_settings.m_columnSizes[i]); + header->moveSection(header->visualIndex(i), m_settings.m_columnIndexes[i]); + } + + // Only update airports on map if settings have changed + if ((m_airportInfo != nullptr) + && ((m_settings.m_airportRange != m_currentAirportRange) + || (m_settings.m_airportMinimumSize != m_currentAirportMinimumSize) + || (m_settings.m_displayHeliports != m_currentDisplayHeliports))) + updateAirports(); + + if (!m_settings.m_displayDemodStats) + ui->stats->setText(""); + blockApplySettings(false); } @@ -1031,36 +1842,53 @@ void ADSBDemodGUI::tick() void ADSBDemodGUI::resizeTable() { + // Fill table with a row of dummy data that will size the columns nicely int row = ui->adsbData->rowCount(); ui->adsbData->setRowCount(row + 1); ui->adsbData->setItem(row, ADSB_COL_ICAO, new QTableWidgetItem("ICAO ID")); - ui->adsbData->setItem(row, ADSB_COL_FLIGHT, new QTableWidgetItem("Flight No")); - ui->adsbData->setItem(row, ADSB_COL_LATITUDE, new QTableWidgetItem("-90.00000 L")); - ui->adsbData->setItem(row, ADSB_COL_LONGITUDE, new QTableWidgetItem("-180.00000 L")); + ui->adsbData->setItem(row, ADSB_COL_FLIGHT, new QTableWidgetItem("Flight No.")); + ui->adsbData->setItem(row, ADSB_COL_MODEL, new QTableWidgetItem("Aircraft12345")); + ui->adsbData->setItem(row, ADSB_COL_AIRLINE, new QTableWidgetItem("airbrigdecargo1")); ui->adsbData->setItem(row, ADSB_COL_ALTITUDE, new QTableWidgetItem("Alt (ft)")); - ui->adsbData->setItem(row, ADSB_COL_SPEED, new QTableWidgetItem("Sp (kn)")); + ui->adsbData->setItem(row, ADSB_COL_SPEED, new QTableWidgetItem("Spd (kn)")); ui->adsbData->setItem(row, ADSB_COL_HEADING, new QTableWidgetItem("Hd (o)")); - ui->adsbData->setItem(row, ADSB_COL_VERTICALRATE, new QTableWidgetItem("Climb")); - ui->adsbData->setItem(row, ADSB_COL_CATEGORY, new QTableWidgetItem("Category")); - ui->adsbData->setItem(row, ADSB_COL_STATUS, new QTableWidgetItem("No emergency")); + ui->adsbData->setItem(row, ADSB_COL_VERTICALRATE, new QTableWidgetItem("VR (ft/m)")); ui->adsbData->setItem(row, ADSB_COL_RANGE, new QTableWidgetItem("D (km)")); ui->adsbData->setItem(row, ADSB_COL_AZEL, new QTableWidgetItem("Az/El (o)")); + ui->adsbData->setItem(row, ADSB_COL_LATITUDE, new QTableWidgetItem("-90.00000")); + ui->adsbData->setItem(row, ADSB_COL_LONGITUDE, new QTableWidgetItem("-180.00000")); + ui->adsbData->setItem(row, ADSB_COL_CATEGORY, new QTableWidgetItem("Heavy")); + ui->adsbData->setItem(row, ADSB_COL_STATUS, new QTableWidgetItem("No emergency")); + ui->adsbData->setItem(row, ADSB_COL_REGISTRATION, new QTableWidgetItem("G-12345")); + ui->adsbData->setItem(row, ADSB_COL_COUNTRY, new QTableWidgetItem("Country")); + ui->adsbData->setItem(row, ADSB_COL_REGISTERED, new QTableWidgetItem("Registered")); + ui->adsbData->setItem(row, ADSB_COL_MANUFACTURER, new QTableWidgetItem("The Boeing Company")); + ui->adsbData->setItem(row, ADSB_COL_OWNER, new QTableWidgetItem("British Airways")); + ui->adsbData->setItem(row, ADSB_COL_OPERATOR_ICAO, new QTableWidgetItem("Operator")); ui->adsbData->setItem(row, ADSB_COL_TIME, new QTableWidgetItem("99:99:99")); ui->adsbData->setItem(row, ADSB_COL_FRAMECOUNT, new QTableWidgetItem("Frames")); - ui->adsbData->setItem(row, ADSB_COL_CORRELATION, new QTableWidgetItem("-99.9/-99.9/=99.9")); + ui->adsbData->setItem(row, ADSB_COL_CORRELATION, new QTableWidgetItem("0.001/0.001/0.001")); ui->adsbData->resizeColumnsToContents(); ui->adsbData->removeCellWidget(row, ADSB_COL_ICAO); ui->adsbData->removeCellWidget(row, ADSB_COL_FLIGHT); - ui->adsbData->removeCellWidget(row, ADSB_COL_LATITUDE); - ui->adsbData->removeCellWidget(row, ADSB_COL_LONGITUDE); + ui->adsbData->removeCellWidget(row, ADSB_COL_MODEL); + ui->adsbData->removeCellWidget(row, ADSB_COL_AIRLINE); ui->adsbData->removeCellWidget(row, ADSB_COL_ALTITUDE); ui->adsbData->removeCellWidget(row, ADSB_COL_SPEED); ui->adsbData->removeCellWidget(row, ADSB_COL_HEADING); ui->adsbData->removeCellWidget(row, ADSB_COL_VERTICALRATE); - ui->adsbData->removeCellWidget(row, ADSB_COL_CATEGORY); - ui->adsbData->removeCellWidget(row, ADSB_COL_STATUS); ui->adsbData->removeCellWidget(row, ADSB_COL_RANGE); ui->adsbData->removeCellWidget(row, ADSB_COL_AZEL); + ui->adsbData->removeCellWidget(row, ADSB_COL_LATITUDE); + ui->adsbData->removeCellWidget(row, ADSB_COL_LONGITUDE); + ui->adsbData->removeCellWidget(row, ADSB_COL_CATEGORY); + ui->adsbData->removeCellWidget(row, ADSB_COL_STATUS); + ui->adsbData->removeCellWidget(row, ADSB_COL_REGISTRATION); + ui->adsbData->removeCellWidget(row, ADSB_COL_COUNTRY); + ui->adsbData->removeCellWidget(row, ADSB_COL_REGISTERED); + ui->adsbData->removeCellWidget(row, ADSB_COL_MANUFACTURER); + ui->adsbData->removeCellWidget(row, ADSB_COL_OWNER); + ui->adsbData->removeCellWidget(row, ADSB_COL_OPERATOR_ICAO); ui->adsbData->removeCellWidget(row, ADSB_COL_TIME); ui->adsbData->removeCellWidget(row, ADSB_COL_FRAMECOUNT); ui->adsbData->removeCellWidget(row, ADSB_COL_CORRELATION); diff --git a/plugins/channelrx/demodadsb/adsbdemodgui.h b/plugins/channelrx/demodadsb/adsbdemodgui.h index c2719bc5d..0da28b19f 100644 --- a/plugins/channelrx/demodadsb/adsbdemodgui.h +++ b/plugins/channelrx/demodadsb/adsbdemodgui.h @@ -20,9 +20,11 @@ #define INCLUDE_ADSBDEMODGUI_H #include +#include #include #include #include +#include #include "channel/channelgui.h" #include "dsp/dsptypes.h" @@ -31,18 +33,46 @@ #include "util/messagequeue.h" #include "util/azel.h" #include "util/movingaverage.h" +#include "util/httpdownloadmanager.h" #include "adsbdemodsettings.h" +#include "ourairportsdb.h" +#include "osndb.h" class PluginAPI; class DeviceUISet; class BasebandSampleSink; class ADSBDemod; +class WebAPIAdapterInterface; +class HttpDownloadManager; +class ADSBDemodGUI; namespace Ui { class ADSBDemodGUI; } +// Custom widget to allow formatted decimal numbers to be sorted numerically +class CustomDoubleTableWidgetItem : public QTableWidgetItem +{ +public: + CustomDoubleTableWidgetItem(const QString text = QString("")) : + QTableWidgetItem(text) + { + } + + bool operator <(const QTableWidgetItem& other) const + { + // Treat "" as less than 0 + QString thisText = text(); + QString otherText = other.text(); + if (thisText == "") + return true; + if (otherText == "") + return false; + return thisText.toDouble() < otherText.toDouble(); + } +}; + // Data about an aircraft extracted from an ADS-B frames struct Aircraft { int m_icao; // 24-bit ICAO aircraft address @@ -76,31 +106,49 @@ struct Aircraft { bool m_cprValid[2]; Real m_cprLat[2]; Real m_cprLong[2]; + QDateTime m_cprTime[2]; int m_adsbFrameCount; // Number of ADS-B frames for this aircraft float m_minCorrelation; float m_maxCorrelation; float m_correlation; - bool m_isBeingTracked; // Are we tracking this aircraft + MovingAverageUtil m_correlationAvg; + + bool m_isTarget; // Are we targetting this aircraft (sending az/el to rotator) + bool m_isHighlighted; // Are we highlighting this aircraft in the table and map + bool m_showAll; + + QVariantList m_coordinates; // Coordinates we've recorded the aircraft at + + AircraftInformation *m_aircraftInfo; // Info about the aircraft from the database + ADSBDemodGUI *m_gui; // GUI table items for above data QTableWidgetItem *m_icaoItem; QTableWidgetItem *m_flightItem; + QTableWidgetItem *m_modelItem; + QTableWidgetItem *m_airlineItem; QTableWidgetItem *m_latitudeItem; QTableWidgetItem *m_longitudeItem; QTableWidgetItem *m_altitudeItem; QTableWidgetItem *m_speedItem; QTableWidgetItem *m_headingItem; QTableWidgetItem *m_verticalRateItem; + CustomDoubleTableWidgetItem *m_rangeItem; + QTableWidgetItem *m_azElItem; QTableWidgetItem *m_emitterCategoryItem; QTableWidgetItem *m_statusItem; - QTableWidgetItem *m_rangeItem; - QTableWidgetItem *m_azElItem; + QTableWidgetItem *m_registrationItem; + QTableWidgetItem *m_countryItem; + QTableWidgetItem *m_registeredItem; + QTableWidgetItem *m_manufacturerNameItem; + QTableWidgetItem *m_ownerItem; + QTableWidgetItem *m_operatorICAOItem; QTableWidgetItem *m_timeItem; QTableWidgetItem *m_adsbFrameCountItem; QTableWidgetItem *m_correlationItem; - Aircraft() : + Aircraft(ADSBDemodGUI *gui) : m_icao(0), m_latitude(0), m_longitude(0), @@ -119,7 +167,11 @@ struct Aircraft { m_minCorrelation(INFINITY), m_maxCorrelation(-INFINITY), m_correlation(0.0f), - m_isBeingTracked(false) + m_isTarget(false), + m_isHighlighted(false), + m_showAll(false), + m_aircraftInfo(nullptr), + m_gui(gui) { for (int i = 0; i < 2; i++) { @@ -128,16 +180,24 @@ struct Aircraft { // These are deleted by QTableWidget m_icaoItem = new QTableWidgetItem(); m_flightItem = new QTableWidgetItem(); - m_latitudeItem = new QTableWidgetItem(); - m_longitudeItem = new QTableWidgetItem(); + m_modelItem = new QTableWidgetItem(); + m_airlineItem = new QTableWidgetItem(); m_altitudeItem = new QTableWidgetItem(); m_speedItem = new QTableWidgetItem(); m_headingItem = new QTableWidgetItem(); m_verticalRateItem = new QTableWidgetItem(); + m_rangeItem = new CustomDoubleTableWidgetItem(); + m_azElItem = new QTableWidgetItem(); + m_latitudeItem = new QTableWidgetItem(); + m_longitudeItem = new QTableWidgetItem(); m_emitterCategoryItem = new QTableWidgetItem(); m_statusItem = new QTableWidgetItem(); - m_rangeItem = new QTableWidgetItem(); - m_azElItem = new QTableWidgetItem(); + m_registrationItem = new QTableWidgetItem(); + m_countryItem = new QTableWidgetItem(); + m_registeredItem = new QTableWidgetItem(); + m_manufacturerNameItem = new QTableWidgetItem(); + m_ownerItem = new QTableWidgetItem(); + m_operatorICAOItem = new QTableWidgetItem(); m_timeItem = new QTableWidgetItem(); m_adsbFrameCountItem = new QTableWidgetItem(); m_correlationItem = new QTableWidgetItem(); @@ -155,7 +215,11 @@ public: headingRole = Qt::UserRole + 2, adsbDataRole = Qt::UserRole + 3, aircraftImageRole = Qt::UserRole + 4, - bubbleColourRole = Qt::UserRole + 5 + bubbleColourRole = Qt::UserRole + 5, + aircraftPathRole = Qt::UserRole + 6, + showAllRole = Qt::UserRole + 7, + highlightedRole = Qt::UserRole + 8, + targetRole = Qt::UserRole + 9 }; Q_INVOKABLE void addAircraft(Aircraft *aircraft) { @@ -171,6 +235,12 @@ public: QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; + bool setData(const QModelIndex &index, const QVariant& value, int role = Qt::EditRole) override; + + Qt::ItemFlags flags(const QModelIndex &index) const override { + return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable; + } + void aircraftUpdated(Aircraft *aircraft) { int row = m_aircrafts.indexOf(aircraft); if (row >= 0) @@ -180,6 +250,19 @@ public: } } + void allAircraftUpdated() { + /* + // Not sure why this doesn't work - it should be more efficient + // than the following code + emit dataChanged(index(0), index(rowCount())); + */ + for (int i = 0; i < m_aircrafts.count(); i++) + { + QModelIndex idx = index(i); + emit dataChanged(idx, idx); + } + } + void removeAircraft(Aircraft *aircraft) { int row = m_aircrafts.indexOf(aircraft); if (row >= 0) @@ -197,11 +280,136 @@ public: roles[adsbDataRole] = "adsbData"; roles[aircraftImageRole] = "aircraftImage"; roles[bubbleColourRole] = "bubbleColour"; + roles[aircraftPathRole] = "aircraftPath"; + roles[showAllRole] = "showAll"; + roles[highlightedRole] = "highlighted"; + roles[targetRole] = "target"; return roles; } + void setFlightPaths(bool flightPaths) + { + m_flightPaths = flightPaths; + allAircraftUpdated(); + } + private: QList m_aircrafts; + bool m_flightPaths; +}; + +// Airport data model used by QML map item +class AirportModel : public QAbstractListModel { + Q_OBJECT + +public: + using QAbstractListModel::QAbstractListModel; + enum MarkerRoles { + positionRole = Qt::UserRole + 1, + airportDataRole = Qt::UserRole + 2, + airportDataRowsRole = Qt::UserRole + 3, + airportImageRole = Qt::UserRole + 4, + bubbleColourRole = Qt::UserRole + 5, + showFreqRole = Qt::UserRole + 6, + selectedFreqRole = Qt::UserRole + 7 + }; + + AirportModel(ADSBDemodGUI *gui) : + m_gui(gui) + { + } + + Q_INVOKABLE void addAirport(AirportInformation *airport) { + QString text; + int rows; + + beginInsertRows(QModelIndex(), rowCount(), rowCount()); + m_airports.append(airport); + airportFreq(airport, text, rows); + m_airportDataFreq.append(text); + m_airportDataFreqRows.append(rows); + m_showFreq.append(false); + endInsertRows(); + } + + void removeAirport(AirportInformation *airport) { + int row = m_airports.indexOf(airport); + if (row >= 0) + { + beginRemoveRows(QModelIndex(), row, row); + m_airports.removeAt(row); + m_airportDataFreq.removeAt(row); + m_airportDataFreqRows.removeAt(row); + m_showFreq.removeAt(row); + endRemoveRows(); + } + } + + void removeAllAirports() { + beginRemoveRows(QModelIndex(), 0, m_airports.count()); + m_airports.clear(); + m_airportDataFreq.clear(); + m_airportDataFreqRows.clear(); + m_showFreq.clear(); + endRemoveRows(); + } + + int rowCount(const QModelIndex &parent = QModelIndex()) const override { + Q_UNUSED(parent) + return m_airports.count(); + } + + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; + + bool setData(const QModelIndex &index, const QVariant& value, int role = Qt::EditRole) override; + + Qt::ItemFlags flags(const QModelIndex &index) const override { + return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable; + } + + void airportFreq(AirportInformation *airport, QString& text, int& rows) { + // Create the text to go in the bubble next to the airport + // Display name and frequencies + QStringList list; + + list.append(QString("%1: %2").arg(airport->m_ident).arg(airport->m_name)); + rows = 1; + for (int i = 0; i < airport->m_frequencies.size(); i++) + { + AirportInformation::FrequencyInformation *frequencyInfo = airport->m_frequencies[i]; + list.append(QString("%1: %2 MHz").arg(frequencyInfo->m_type).arg(frequencyInfo->m_frequency)); + rows++; + } + text = list.join("\n"); + } + + void airportUpdated(AirportInformation *airport) { + int row = m_airports.indexOf(airport); + if (row >= 0) + { + QModelIndex idx = index(row); + emit dataChanged(idx, idx); + } + } + + QHash roleNames() const { + QHash roles; + roles[positionRole] = "position"; + roles[airportDataRole] = "airportData"; + roles[airportDataRowsRole] = "airportDataRows"; + roles[airportImageRole] = "airportImage"; + roles[bubbleColourRole] = "bubbleColour"; + roles[showFreqRole] = "showFreq"; + roles[selectedFreqRole] = "selectedFreq"; + return roles; + } + +private: + ADSBDemodGUI *m_gui; + QList m_airports; + QList m_airportDataFreq; + QList m_airportDataFreqRows; + QList m_showFreq; }; class ADSBDemodGUI : public ChannelGUI { @@ -215,6 +423,10 @@ public: QByteArray serialize() const; bool deserialize(const QByteArray& data); virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + void highlightAircraft(Aircraft *aircraft); + void targetAircraft(Aircraft *aircraft); + bool setFrequency(float frequency); + bool useSIUints() { return m_settings.m_siUnits; } public slots: void channelMarkerChangedByCursor(); @@ -233,13 +445,30 @@ private: uint32_t m_tickCount; MessageQueue m_inputMessageQueue; - QHash m_aircraft; // Hashed on ICAO + QHash m_aircraft; // Hashed on ICAO + QHash *m_aircraftInfo; + QHash *m_airportInfo; // Hashed on id AircraftModel m_aircraftModel; + AirportModel m_airportModel; + QHash m_airlineIcons; // Hashed on airline ICAO + QHash m_flagIcons; // Hashed on country + QHash *m_prefixMap; // Registration to country (flag name) + QHash *m_militaryMap; // Operator airforce to military (flag name) AzEl m_azEl; // Position of station Aircraft *m_trackAircraft; // Aircraft we want to track in Channel Report - MovingAverageUtil m_correlationOnesAvg; - MovingAverageUtil m_correlationZerosAvg; + MovingAverageUtil m_correlationAvg; + Aircraft *m_highlightAircraft; // Aircraft we want to highlight, when selected in table + + float m_currentAirportRange; // Current settings, so we only update if changed + ADSBDemodSettings::AirportType m_currentAirportMinimumSize; + bool m_currentDisplayHeliports; + + QMenu *menu; // Column select context menu + + WebAPIAdapterInterface *m_webAPIAdapterInterface; + HttpDownloadManager m_dlm; + QProgressDialog *m_progressDialog; explicit ADSBDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampleSink *rxChannel, QWidget* parent = 0); virtual ~ADSBDemodGUI(); @@ -250,8 +479,22 @@ private: void displayStreamIndex(); bool handleMessage(const Message& message); void updatePosition(Aircraft *aircraft); - void handleADSB(const QByteArray data, const QDateTime dateTime, float correlationOnes, float correlationZeros); + void handleADSB(const QByteArray data, const QDateTime dateTime, float correlation); void resizeTable(); + QString getDataDir(); + QString getAirportDBFilename(); + QString getAirportFrequenciesDBFilename(); + QString getOSNDBFilename(); + QString getFastDBFilename(); + void readAirportDB(const QString& filename); + void readAirportFrequenciesDB(const QString& filename); + bool readOSNDB(const QString& filename); + bool readFastDB(const QString& filename); + void updateAirports(); + QIcon *getAirlineIcon(const QString &operatorICAO); + QIcon *getFlagIcon(const QString &country); + void updateDeviceSetList(); + QAction *createCheckableItem(QString& text, int idx, bool checked); void leaveEvent(QEvent*); void enterEvent(QEvent*); @@ -260,15 +503,29 @@ private slots: void on_deltaFrequency_changed(qint64 value); void on_rfBW_valueChanged(int value); void on_threshold_valueChanged(int value); + void on_adsbData_cellClicked(int row, int column); void on_adsbData_cellDoubleClicked(int row, int column); + void adsbData_sectionMoved(int logicalIndex, int oldVisualIndex, int newVisualIndex); + void adsbData_sectionResized(int logicalIndex, int oldSize, int newSize); + void columnSelectMenu(QPoint pos); + void columnSelectMenuChecked(bool checked = false); void on_spb_currentIndexChanged(int value); - void on_beastEnabled_stateChanged(int state); - void on_host_editingFinished(QString value); - void on_port_valueChanged(int value); + void on_correlateFullPreamble_clicked(bool checked=false); + void on_demodModeS_clicked(bool checked=false); + void on_feed_clicked(bool checked=false); + void on_getOSNDB_clicked(bool checked = false); + void on_getAirportDB_clicked(bool checked = false); + void on_flightPaths_clicked(bool checked = false); void onWidgetRolled(QWidget* widget, bool rollDown); void onMenuDialogCalled(const QPoint& p); void handleInputMessages(); void tick(); + void updateDownloadProgress(qint64 bytesRead, qint64 totalBytes); + void downloadFinished(const QString& filename, bool success); + void on_devicesRefresh_clicked(); + void on_device_currentIndexChanged(int index); + void feedSelect(); + void on_displaySettings_clicked(bool checked=false); signals: void homePositionChanged(); }; diff --git a/plugins/channelrx/demodadsb/adsbdemodgui.ui b/plugins/channelrx/demodadsb/adsbdemodgui.ui index 1f4170f4d..1829da1d0 100644 --- a/plugins/channelrx/demodadsb/adsbdemodgui.ui +++ b/plugins/channelrx/demodadsb/adsbdemodgui.ui @@ -7,7 +7,7 @@ 0 0 350 - 1019 + 1046 @@ -37,7 +37,7 @@ 0 0 340 - 101 + 141 @@ -326,6 +326,39 @@ + + + + Demodulate all Mode-S frames, not just ADS-B + + + S + + + true + + + + + + + Qt::Vertical + + + + + + + Correlate against full preamble. + + + FP + + + true + + + @@ -342,10 +375,10 @@ - Correlation threshold in dB. Lower values will increase the number of frames that can be received, but require more processing. + Correlation threshold in dB. Lower values will increase the number of frames that can be received, but require more processing and possibly result in invalid frames. - -990 + -450 0 @@ -354,7 +387,7 @@ 1 - -500 + 0 @@ -376,58 +409,132 @@ - + - Enable feeding of received ADS-B messages in Beast binary format to the specifed server + Download the latest Opensky-Network aircraft database (80MB) - Feed + ... + + + + :/icons/aircraft.png:/icons/aircraft.png - - - Server - - - - - + - Hostname of the server to feed + Download the latest OurAirports airport databases (10MB) - feed.adsbexchange.com + ... + + + + :/icons/controltower.png:/icons/controltower.png - + + + Open display settings dialog + - Port + ... + + + + :/listing.png:/listing.png - - + + + Display flight paths + + + ^ + + + + :/logarithmic.png:/logarithmic.png + + + true + + + true + + + + + + + Enable feeding of received ADS-B messages to the specifed server. Right click for settings. + + + ... + + + + :/txon.png:/txon.png + + + true + + + + + + + Demodulator statistics + + + - + + + + + + + Qt::Horizontal + + - 60 - 0 + 40 + 20 + + + + - Port the server is listening on + Refresh device list - - 1024 + + ... - - 65535 + + + :/recycle.png:/recycle.png - - 30005 + + + + + + Device + + + + + + + Receive device set to set frequency on when selecting an ATC frequency on the map @@ -439,7 +546,7 @@ 0 - 114 + 140 341 291 @@ -450,11 +557,6 @@ 0 - - - Liberation Mono - - ADS-B Data @@ -476,11 +578,6 @@ - - - Liberation Mono - - QAbstractItemView::NoEditTriggers @@ -489,7 +586,7 @@ ICAO ID - International Civil Aviation Organization identifier. Links to www.planespotters.net + Aircraft International Civil Aviation Organization identifier. Links to www.planespotters.net @@ -500,6 +597,70 @@ Commercial flight number. Links to www.flightradar24.com + + + Aircraft + + + Aircraft model + + + + + Airline + + + Airline logo + + + + + Alt (ft) + + + Altitude in feet or metres + + + + + Spd (kn) + + + Speed in knots or kilometres per hour + + + + + Hd (°) + + + Aircraft heading in degrees + + + + + VR (ft/m) + + + Vertical climb rate in feet per minute or metres per second + + + + + D (km) + + + Range or distance of aircraft from home location + + + + + Az/El (°) + + + Azimuth and elevation to aircraft from My Position. Double click to set as target. + + Lat (°) @@ -518,39 +679,7 @@ - Alt (ft) - - - Altitude in feet - - - - - Sp (kn) - - - Speed in knots - - - - - Hd (°) - - - Aircraft heading in degrees - - - - - Climb - - - Climbing rate in feet per minute - - - - - Category + Cat Aircraft standard category @@ -561,23 +690,55 @@ Status - Aircraft standard status + Aircraft emergency status - D (km) + Reg - Range or distance of aircraft to home location + Aircraft registration - Az/El (°) + Country - Aircraft azimuth and elevation from home point in degrees + Country of registration + + + + + Registered + + + Date aircraft was registered + + + + + Manufacturer + + + Aircraft manufacturer + + + + + Owner + + + Owner of the aircraft + + + + + Operator + + + Aircraft operator ICAO code @@ -585,7 +746,7 @@ Updated - Last time updated + Time when the last ADS-B message from this aircraft was received. @@ -593,7 +754,7 @@ Frames - Number of frames received + Number of ADS-B frames received from this aircraft @@ -601,7 +762,7 @@ Correlation - Correlation power min/avg/max in dB + Correlation values for received frames. min/avg/max @@ -612,7 +773,7 @@ 10 - 420 + 450 331 581 @@ -653,18 +814,18 @@ 100 - 400 + 500 - Aircraft location map + Aircraft map QQuickWidget::SizeRootObjectToView - qrc:/map.qml + @@ -702,14 +863,10 @@ rfBW spb threshold - beastEnabled - host - port - adsbData - map + diff --git a/plugins/channelrx/demodadsb/adsbdemodreport.cpp b/plugins/channelrx/demodadsb/adsbdemodreport.cpp index 14c2a6d17..4fea5b7c3 100644 --- a/plugins/channelrx/demodadsb/adsbdemodreport.cpp +++ b/plugins/channelrx/demodadsb/adsbdemodreport.cpp @@ -19,3 +19,4 @@ #include "adsbdemodreport.h" MESSAGE_CLASS_DEFINITION(ADSBDemodReport::MsgReportADSB, Message) +MESSAGE_CLASS_DEFINITION(ADSBDemodReport::MsgReportDemodStats, Message) diff --git a/plugins/channelrx/demodadsb/adsbdemodreport.h b/plugins/channelrx/demodadsb/adsbdemodreport.h index 11ff4c690..cf8ccee72 100644 --- a/plugins/channelrx/demodadsb/adsbdemodreport.h +++ b/plugins/channelrx/demodadsb/adsbdemodreport.h @@ -25,6 +25,7 @@ #include "dsp/dsptypes.h" #include "util/message.h" +#include "adsbdemodstats.h" class ADSBDemodReport : public QObject { @@ -36,30 +37,48 @@ public: public: QByteArray getData() const { return m_data; } QDateTime getDateTime() const { return m_dateTime; } - float getPreambleCorrelationOnes() const { return m_premableCorrelationOnes; } - float getPreambleCorrelationZeros() const { return m_premableCorrelationZeros; } + float getPreambleCorrelation() const { return m_preambleCorrelation; } - static MsgReportADSB* create(QByteArray data, float premableCorrelationOnes, float premableCorrelationZeros) + static MsgReportADSB* create(QByteArray data, float preambleCorrelation) { - return new MsgReportADSB(data, premableCorrelationOnes, premableCorrelationZeros); + return new MsgReportADSB(data, preambleCorrelation); } private: QByteArray m_data; QDateTime m_dateTime; - float m_premableCorrelationOnes; - float m_premableCorrelationZeros; + float m_preambleCorrelation; - MsgReportADSB(QByteArray data, float premableCorrelationOnes, float premableCorrelationZeros) : + MsgReportADSB(QByteArray data, float preambleCorrelation) : Message(), m_data(data), - m_premableCorrelationOnes(premableCorrelationOnes), - m_premableCorrelationZeros(premableCorrelationZeros) + m_preambleCorrelation(preambleCorrelation) { m_dateTime = QDateTime::currentDateTime(); } }; + class MsgReportDemodStats : public Message { + MESSAGE_CLASS_DECLARATION + + public: + ADSBDemodStats getDemodStats() const { return m_demodStats; } + + static MsgReportDemodStats* create(ADSBDemodStats demodStats) + { + return new MsgReportDemodStats(demodStats); + } + + private: + ADSBDemodStats m_demodStats; + + MsgReportDemodStats(ADSBDemodStats demodStats) : + Message(), + m_demodStats(demodStats) + { + } + }; + public: ADSBDemodReport() {} ~ADSBDemodReport() {} diff --git a/plugins/channelrx/demodadsb/adsbdemodsettings.cpp b/plugins/channelrx/demodadsb/adsbdemodsettings.cpp index 1c3804bf4..b7a820ac8 100644 --- a/plugins/channelrx/demodadsb/adsbdemodsettings.cpp +++ b/plugins/channelrx/demodadsb/adsbdemodsettings.cpp @@ -34,12 +34,13 @@ void ADSBDemodSettings::resetToDefaults() { m_inputFrequencyOffset = 0; m_rfBandwidth = 2*1300000; - m_correlationThreshold = -50.0f; + m_correlationThreshold = -20.0f; m_samplesPerBit = 4; m_removeTimeout = 60; - m_beastEnabled = false; - m_beastHost = "feed.adsbexchange.com"; - m_beastPort = 30005; + m_feedEnabled = false; + m_feedHost = "feed.adsbexchange.com"; + m_feedPort = 30005; + m_feedFormat = BeastBinary; m_rgbColor = QColor(255, 0, 0).rgb(); m_title = "ADS-B Demodulator"; m_streamIndex = 0; @@ -48,6 +49,22 @@ void ADSBDemodSettings::resetToDefaults() m_reverseAPIPort = 8888; m_reverseAPIDeviceIndex = 0; m_reverseAPIChannelIndex = 0; + m_airportRange = 100; + m_airportMinimumSize = AirportType::Medium; + m_displayHeliports = false; + m_flightPaths = true; + m_siUnits = false; + m_tableFontName = "Liberation Sans"; + m_tableFontSize = 9; + m_displayDemodStats = true; + m_correlateFullPreamble = true; + m_demodModeS = false; + m_deviceIndex = -1; + for (int i = 0; i < ADSBDEMOD_COLUMNS; i++) + { + m_columnIndexes[i] = i; + m_columnSizes[i] = -1; // Autosize + } } QByteArray ADSBDemodSettings::serialize() const @@ -58,9 +75,9 @@ QByteArray ADSBDemodSettings::serialize() const s.writeReal(3, m_correlationThreshold); s.writeS32(4, m_samplesPerBit); s.writeS32(5, m_removeTimeout); - s.writeBool(6, m_beastEnabled); - s.writeString(7, m_beastHost); - s.writeU32(8, m_beastPort); + s.writeBool(6, m_feedEnabled); + s.writeString(7, m_feedHost); + s.writeU32(8, m_feedPort); s.writeU32(9, m_rgbColor); if (m_channelMarker) { @@ -74,6 +91,24 @@ QByteArray ADSBDemodSettings::serialize() const s.writeU32(16, m_reverseAPIChannelIndex); s.writeS32(17, m_streamIndex); + s.writeFloat(18, m_airportRange); + s.writeS32(19, (int)m_airportMinimumSize); + s.writeBool(20, m_displayHeliports); + s.writeBool(21, m_flightPaths); + s.writeS32(22, m_deviceIndex); + s.writeBool(23, m_siUnits); + s.writeS32(24, (int)m_feedFormat); + s.writeString(25, m_tableFontName); + s.writeS32(26, m_tableFontSize); + s.writeBool(27, m_displayDemodStats); + s.writeBool(28, m_correlateFullPreamble); + s.writeBool(29, m_demodModeS); + + for (int i = 0; i < ADSBDEMOD_COLUMNS; i++) + s.writeS32(100 + i, m_columnIndexes[i]); + for (int i = 0; i < ADSBDEMOD_COLUMNS; i++) + s.writeS32(200 + i, m_columnSizes[i]); + return s.final(); } @@ -102,16 +137,16 @@ bool ADSBDemodSettings::deserialize(const QByteArray& data) d.readS32(1, &tmp, 0); m_inputFrequencyOffset = tmp; d.readReal(2, &m_rfBandwidth, 2*1300000); - d.readReal(3, &m_correlationThreshold, -50.0f); + d.readReal(3, &m_correlationThreshold, 0.0f); d.readS32(4, &m_samplesPerBit, 4); d.readS32(5, &m_removeTimeout, 60); - d.readBool(6, &m_beastEnabled, false); - d.readString(7, &m_beastHost, "feed.adsbexchange.com"); + d.readBool(6, &m_feedEnabled, false); + d.readString(7, &m_feedHost, "feed.adsbexchange.com"); d.readU32(8, &utmp, 0); if ((utmp > 1023) && (utmp < 65535)) { - m_beastPort = utmp; + m_feedPort = utmp; } else { - m_beastPort = 30005; + m_feedPort = 30005; } d.readU32(9, &m_rgbColor, QColor(255, 0, 0).rgb()); @@ -132,6 +167,24 @@ bool ADSBDemodSettings::deserialize(const QByteArray& data) m_reverseAPIChannelIndex = utmp > 99 ? 99 : utmp; d.readS32(17, &m_streamIndex, 0); + d.readFloat(18, &m_airportRange, 100); + d.readS32(19, (int *)&m_airportMinimumSize, AirportType::Medium); + d.readBool(20, &m_displayHeliports, false); + d.readBool(21, &m_flightPaths, true); + d.readS32(22, &m_deviceIndex, -1); + d.readBool(23, &m_siUnits, false); + d.readS32(24, (int *) &m_feedFormat, BeastBinary); + d.readString(25, &m_tableFontName, "Liberation Sans"); + d.readS32(26, &m_tableFontSize, 9); + d.readBool(27, &m_displayDemodStats, false); + d.readBool(28, &m_correlateFullPreamble, true); + d.readBool(29, &m_demodModeS, false); + + for (int i = 0; i < ADSBDEMOD_COLUMNS; i++) + d.readS32(100 + i, &m_columnIndexes[i], i); + for (int i = 0; i < ADSBDEMOD_COLUMNS; i++) + d.readS32(200 + i, &m_columnSizes[i], -1); + return true; } else diff --git a/plugins/channelrx/demodadsb/adsbdemodsettings.h b/plugins/channelrx/demodadsb/adsbdemodsettings.h index a9674a592..064e46d21 100644 --- a/plugins/channelrx/demodadsb/adsbdemodsettings.h +++ b/plugins/channelrx/demodadsb/adsbdemodsettings.h @@ -26,6 +26,9 @@ class Serializable; +// Number of columns in the table +#define ADSBDEMOD_COLUMNS 23 + struct ADSBDemodSettings { int32_t m_inputFrequencyOffset; @@ -33,9 +36,13 @@ struct ADSBDemodSettings Real m_correlationThreshold; //!< Correlation power threshold in dB int m_samplesPerBit; int m_removeTimeout; //!< Time in seconds before removing an aircraft, unless a new frame is received - bool m_beastEnabled; - QString m_beastHost; - uint16_t m_beastPort; + bool m_feedEnabled; + QString m_feedHost; + uint16_t m_feedPort; + enum FeedFormat { + BeastBinary, + BeastHex + } m_feedFormat; quint32 m_rgbColor; QString m_title; @@ -45,9 +52,28 @@ struct ADSBDemodSettings uint16_t m_reverseAPIPort; uint16_t m_reverseAPIDeviceIndex; uint16_t m_reverseAPIChannelIndex; + int m_columnIndexes[ADSBDEMOD_COLUMNS];//!< How the columns are ordered in the table + int m_columnSizes[ADSBDEMOD_COLUMNS]; //!< Size of the coumns in the table Serializable *m_channelMarker; + float m_airportRange; //!< How far away should we display airports (nm) + enum AirportType { + Small, + Medium, + Large, + Heliport + } m_airportMinimumSize; //!< What's the minimum size airport that should be displayed + bool m_displayHeliports; //!< Whether to display heliports on the map + bool m_flightPaths; //!< Whether to display flight paths + bool m_siUnits; //!< Uses m,kph rather than ft/knts + QString m_tableFontName; //!< Font to use for table + int m_tableFontSize; + bool m_displayDemodStats; + bool m_correlateFullPreamble; + bool m_demodModeS; //!< Demodulate all Mode-S frames, not just ADS-B + int m_deviceIndex; //!< Device to set to ATC frequencies + ADSBDemodSettings(); void resetToDefaults(); void setChannelMarker(Serializable *channelMarker) { m_channelMarker = channelMarker; } diff --git a/plugins/channelrx/demodadsb/adsbdemodsink.cpp b/plugins/channelrx/demodadsb/adsbdemodsink.cpp index 6ca06755e..fc9a790ac 100644 --- a/plugins/channelrx/demodadsb/adsbdemodsink.cpp +++ b/plugins/channelrx/demodadsb/adsbdemodsink.cpp @@ -16,16 +16,11 @@ // along with this program. If not, see . // /////////////////////////////////////////////////////////////////////////////////// -#include -#include -#include - #include #include #include "util/stepfunctions.h" #include "util/db.h" -#include "util/crc.h" #include "audio/audiooutput.h" #include "dsp/dspengine.h" #include "dsp/dspcommands.h" @@ -34,219 +29,170 @@ #include "adsbdemodreport.h" #include "adsbdemodsink.h" +#include "adsbdemodsinkworker.h" #include "adsb.h" ADSBDemodSink::ADSBDemodSink() : - m_channelSampleRate(6000000), - m_channelFrequencyOffset(0), - m_sampleIdx(0), - m_sampleCount(0), - m_skipCount(0), - m_correlationThresholdLinear(0.0), - m_magsq(0.0f), - m_magsqSum(0.0f), - m_magsqPeak(0.0f), - m_magsqCount(0), - m_messageQueueToGUI(nullptr), - m_sampleBuffer(nullptr) + m_channelSampleRate(6000000), + m_channelFrequencyOffset(0), + m_feedTime(0.0), + m_sampleBuffer{nullptr, nullptr, nullptr}, + m_worker(this), + m_writeBuffer(0), + m_writeIdx(0), + m_magsq(0.0f), + m_magsqSum(0.0f), + m_magsqPeak(0.0f), + m_magsqCount(0), + m_messageQueueToGUI(nullptr) { applySettings(m_settings, true); applyChannelSettings(m_channelSampleRate, m_channelFrequencyOffset, true); + for (int i = 0; i < m_buffers; i++) + m_bufferWrite[i].release(1); + m_bufferWrite[m_writeBuffer].acquire(); } ADSBDemodSink::~ADSBDemodSink() { - delete m_sampleBuffer; + stopWorker(); + for (int i = 0; i < m_buffers; i++) + delete m_sampleBuffer[i]; } void ADSBDemodSink::feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end) { - Complex ci; + // Start timing how long we are in this function + m_startPoint = boost::chrono::steady_clock::now(); - for (SampleVector::const_iterator it = begin; it != end; ++it) + // Optimise for common case, where no resampling or frequency offset + if ((m_interpolatorDistance == 1.0f) && (m_channelFrequencyOffset == 0)) { - Complex c(it->real(), it->imag()); - c *= m_nco.nextIQ(); + for (SampleVector::const_iterator it = begin; it != end; ++it) + { + /* + // SampleVector is vector of qint32 or qint16 + // Use integer mul to save one FP conversion and it has lower latency + qint64 r = (qint64)it->real(); + qint64 i = (qint64)it->imag(); + qint64 magsqRaw = r*r + i*i; + Real magsq = (Real)((double)magsqRaw / (SDR_RX_SCALED*SDR_RX_SCALED)); + processOneSample(magsq); + */ + Complex c(it->real(), it->imag()); + Real magsq = complexMagSq(c); + processOneSample(magsq); + } + } + else + { + for (SampleVector::const_iterator it = begin; it != end; ++it) + { + Complex c(it->real(), it->imag()); + Complex ci; + c *= m_nco.nextIQ(); - if (m_interpolatorDistance == 1.0f) - { - processOneSample(c); - } - else if (m_interpolatorDistance < 1.0f) // interpolate - { - while (!m_interpolator.interpolate(&m_interpolatorDistanceRemain, c, &ci)) + if (m_interpolatorDistance == 1.0f) { - processOneSample(ci); - m_interpolatorDistanceRemain += m_interpolatorDistance; + processOneSample(complexMagSq(c)); } - } - else // decimate - { - if (m_interpolator.decimate(&m_interpolatorDistanceRemain, c, &ci)) + else if (m_interpolatorDistance < 1.0f) // interpolate { - processOneSample(ci); - m_interpolatorDistanceRemain += m_interpolatorDistance; + while (!m_interpolator.interpolate(&m_interpolatorDistanceRemain, c, &ci)) + { + processOneSample(complexMagSq(ci)); + m_interpolatorDistanceRemain += m_interpolatorDistance; + } + } + else // decimate + { + if (m_interpolator.decimate(&m_interpolatorDistanceRemain, c, &ci)) + { + processOneSample(complexMagSq(ci)); + m_interpolatorDistanceRemain += m_interpolatorDistance; + } } } } + // Calculate number of seconds in this function + boost::chrono::duration sec = boost::chrono::steady_clock::now() - m_startPoint; + m_feedTime += sec.count(); } -void ADSBDemodSink::processOneSample(Complex &ci) +void ADSBDemodSink::processOneSample(Real magsq) { - Real sample; - - double magsqRaw = ci.real()*ci.real() + ci.imag()*ci.imag(); - Real magsq = magsqRaw / (SDR_RX_SCALED*SDR_RX_SCALED); - m_movingAverage(magsq); m_magsqSum += magsq; - if (magsq > m_magsqPeak) - { m_magsqPeak = magsq; - } m_magsqCount++; - - sample = magsq; - m_sampleBuffer[m_sampleCount] = sample; - m_sampleCount++; - - // Do we have enough data for a frame - if ((m_sampleCount >= m_totalSamples) && (m_skipCount == 0)) + m_sampleBuffer[m_writeBuffer][m_writeIdx] = magsq; + m_writeIdx++; + if (m_writeIdx >= m_bufferSize) { - int startIdx = m_sampleCount - m_totalSamples; + m_bufferRead[m_writeBuffer].release(); - // Correlate received signal with expected preamble - // chip+ indexes are 0, 2, 7, 9 - // we correlate only over 6 symbols so that the number of zero chips is twice the - // number of one chips - empirically this is enough to get good correlation - Real premableCorrelationOnes = 0.0; - Real preambleCorrelationZeros = 0.0; + m_writeBuffer++; + if (m_writeBuffer >= m_buffers) + m_writeBuffer = 0; - for (int i = 0; i < m_samplesPerChip; i++) - { - premableCorrelationOnes += m_sampleBuffer[startIdx + 0*m_samplesPerChip + i]; - preambleCorrelationZeros += m_sampleBuffer[startIdx + 1*m_samplesPerChip + i]; + // Don't include time spent waiting for a buffer + boost::chrono::duration sec = boost::chrono::steady_clock::now() - m_startPoint; + m_feedTime += sec.count(); - premableCorrelationOnes += m_sampleBuffer[startIdx + 2*m_samplesPerChip + i]; - preambleCorrelationZeros += m_sampleBuffer[startIdx + 3*m_samplesPerChip + i]; + m_bufferWrite[m_writeBuffer].acquire(); - preambleCorrelationZeros += m_sampleBuffer[startIdx + 4*m_samplesPerChip + i]; - preambleCorrelationZeros += m_sampleBuffer[startIdx + 5*m_samplesPerChip + i]; + m_startPoint = boost::chrono::steady_clock::now(); - preambleCorrelationZeros += m_sampleBuffer[startIdx + 6*m_samplesPerChip + i]; - premableCorrelationOnes += m_sampleBuffer[startIdx + 7*m_samplesPerChip + i]; - - preambleCorrelationZeros += m_sampleBuffer[startIdx + 8*m_samplesPerChip + i]; - premableCorrelationOnes += m_sampleBuffer[startIdx + 9*m_samplesPerChip + i]; - - preambleCorrelationZeros += m_sampleBuffer[startIdx + 10*m_samplesPerChip + i]; - preambleCorrelationZeros += m_sampleBuffer[startIdx + 11*m_samplesPerChip + i]; - } - - // If the correlation is exactly 0, it's probably no signal - if ((premableCorrelationOnes > m_correlationThresholdLinear) && - (preambleCorrelationZeros < 2.0*m_correlationThresholdLinear) && - (premableCorrelationOnes != 0.0f)) - { - // Skip over preamble - startIdx += m_settings.m_samplesPerBit*ADS_B_PREAMBLE_BITS; - - // Demodulate waveform to bytes - unsigned char data[ADS_B_ES_BYTES]; - int byteIdx = 0; - int currentBit; - unsigned char currentByte = 0; - bool adsbOnly = true; - int df; - - for (int bit = 0; bit < ADS_B_ES_BITS; bit++) - { - // PPM (Pulse position modulation) - Each bit spreads to two chips, 1->10, 0->01 - // Determine if bit is 1 or 0, by seeing which chip has largest combined energy over the sampling period - Real oneSum = 0.0f; - Real zeroSum = 0.0f; - for (int i = 0; i < m_samplesPerChip; i++) - { - oneSum += m_sampleBuffer[startIdx+i]; - zeroSum += m_sampleBuffer[startIdx+m_samplesPerChip+i]; - } - currentBit = oneSum > zeroSum; - startIdx += m_settings.m_samplesPerBit; - // Convert bit to bytes - MSB first - currentByte |= currentBit << (7-(bit & 0x7)); - if ((bit & 0x7) == 0x7) - { - data[byteIdx++] = currentByte; - currentByte = 0; - // Don't try to demodulate any further, if this isn't an ADS-B frame - // to help reduce processing overhead - if (adsbOnly && (bit == 7)) - { - df = ((data[0] >> 3) & ADS_B_DF_MASK); - if ((df != 17) && (df != 18)) - break; - } - } - } - - // Is ADS-B? - df = ((data[0] >> 3) & ADS_B_DF_MASK); - if ((df == 17) || (df == 18)) - { - crcadsb crc; - //int icao = (data[1] << 16) | (data[2] << 8) | data[3]; // ICAO aircraft address - int parity = (data[11] << 16) | (data[12] << 8) | data[13]; // Parity / CRC - - crc.calculate(data, ADS_B_ES_BYTES-3); - if (parity == crc.get()) - { - // Got a valid frame - // Don't try to re-demodulate the same frame - m_skipCount = (ADS_B_ES_BITS+ADS_B_PREAMBLE_BITS)*ADS_B_CHIPS_PER_BIT*m_samplesPerChip; - // Pass to GUI - if (getMessageQueueToGUI()) - { - ADSBDemodReport::MsgReportADSB *msg = ADSBDemodReport::MsgReportADSB::create( - QByteArray((char*)data, sizeof(data)), - premableCorrelationOnes, - preambleCorrelationZeros/2.0); - getMessageQueueToGUI()->push(msg); - } - // Pass to worker - if (getMessageQueueToWorker()) - { - ADSBDemodReport::MsgReportADSB *msg = ADSBDemodReport::MsgReportADSB::create( - QByteArray((char*)data, sizeof(data)), - premableCorrelationOnes, - preambleCorrelationZeros/2.0); - getMessageQueueToWorker()->push(msg); - } - } - } - } + m_writeIdx = m_samplesPerFrame - 1; // Leave space for copying samples from previous buffer } - if (m_skipCount > 0) - m_skipCount--; - if (m_sampleCount >= 2*m_totalSamples) +} + +void ADSBDemodSink::stopWorker() +{ + if (m_worker.isRunning()) { - // Copy second half of buffer to first - memcpy(&m_sampleBuffer[0], &m_sampleBuffer[m_totalSamples], m_totalSamples*sizeof(Real)); - m_sampleCount = m_totalSamples; + qDebug() << "ADSBDemodSink::stopWorker: Stopping worker"; + m_worker.requestInterruption(); + // Worker may be blocked waiting for a buffer + for (int i = 0; i < m_buffers; i++) + { + if (m_bufferRead[i].available() == 0) + m_bufferRead[i].release(1); + } + m_worker.wait(); + qDebug() << "ADSBDemodSink::stopWorker: Worker stopped"; } - m_sampleIdx++; - } void ADSBDemodSink::init(int samplesPerBit) { - if (m_sampleBuffer) - delete m_sampleBuffer; + // Stop worker as we're going to delete the buffers + stopWorker(); + // Reset state of semaphores + for (int i = 0; i < m_buffers; i++) + { + m_bufferWrite[i].acquire(m_bufferWrite[i].available()); + m_bufferWrite[i].release(1); + m_bufferRead[i].acquire(m_bufferRead[i].available()); + } + m_writeBuffer = 0; + m_bufferWrite[m_writeBuffer].acquire(); - m_totalSamples = samplesPerBit*(ADS_B_PREAMBLE_BITS+ADS_B_ES_BITS); + for (int i = 0; i < m_buffers; i++) + { + if (m_sampleBuffer[i]) + delete m_sampleBuffer[i]; + } + + m_samplesPerFrame = samplesPerBit*(ADS_B_PREAMBLE_BITS+ADS_B_ES_BITS); m_samplesPerChip = samplesPerBit/ADS_B_CHIPS_PER_BIT; + m_writeIdx = m_samplesPerFrame - 1; // Leave space for copying samples from previous buffer - m_sampleBuffer = new Real[2*m_totalSamples]; + for (int i = 0; i < m_buffers; i++) + m_sampleBuffer[i] = new Real[m_bufferSize]; + + m_worker.start(); } void ADSBDemodSink::applyChannelSettings(int channelSampleRate, int channelFrequencyOffset, bool force) @@ -278,6 +224,8 @@ void ADSBDemodSink::applySettings(const ADSBDemodSettings& settings, bool force) << " m_inputFrequencyOffset: " << settings.m_inputFrequencyOffset << " m_rfBandwidth: " << settings.m_rfBandwidth << " m_correlationThreshold: " << settings.m_correlationThreshold + << " m_correlateFullPreamble: " << settings.m_correlateFullPreamble + << " m_demodModeS: " << settings.m_demodModeS << " m_samplesPerBit: " << settings.m_samplesPerBit << " force: " << force; @@ -294,9 +242,10 @@ void ADSBDemodSink::applySettings(const ADSBDemodSettings& settings, bool force) init(settings.m_samplesPerBit); } - if ((settings.m_correlationThreshold != m_settings.m_correlationThreshold) || force) { - m_correlationThresholdLinear = CalcDb::powerFromdB(m_settings.m_correlationThreshold); - } + // Forward to worker + ADSBDemodSinkWorker::MsgConfigureADSBDemodSinkWorker *msg = ADSBDemodSinkWorker::MsgConfigureADSBDemodSinkWorker::create( + settings, force); + m_worker.getInputMessageQueue()->push(msg); m_settings = settings; } diff --git a/plugins/channelrx/demodadsb/adsbdemodsink.h b/plugins/channelrx/demodadsb/adsbdemodsink.h index d68a1403e..d96391bfa 100644 --- a/plugins/channelrx/demodadsb/adsbdemodsink.h +++ b/plugins/channelrx/demodadsb/adsbdemodsink.h @@ -19,7 +19,7 @@ #ifndef INCLUDE_ADSBDEMODSINK_H #define INCLUDE_ADSBDEMODSINK_H -#include +#include #include "dsp/channelsamplesink.h" #include "dsp/nco.h" @@ -27,6 +27,8 @@ #include "util/movingaverage.h" #include "adsbdemodsettings.h" +#include "adsbdemodstats.h" +#include "adsbdemodsinkworker.h" class ADSBDemodSink : public ChannelSampleSink { public: @@ -53,13 +55,14 @@ public: m_magsqCount = 0; } - void init(int samplesPerBit); void applyChannelSettings(int channelSampleRate, int channelFrequencyOffset, bool force = false); void applySettings(const ADSBDemodSettings& settings, bool force = false); void setMessageQueueToGUI(MessageQueue *messageQueue) { m_messageQueueToGUI = messageQueue; } void setMessageQueueToWorker(MessageQueue *messageQueue) { m_messageQueueToWorker = messageQueue; } private: + friend ADSBDemodSinkWorker; + struct MagSqLevelsStore { MagSqLevelsStore() : @@ -78,14 +81,26 @@ private: Interpolator m_interpolator; Real m_interpolatorDistance; Real m_interpolatorDistanceRemain; - int m_sampleIdx; - int m_sampleCount; - int m_skipCount; // Samples to skip, because we've already received a frame - Real *m_sampleBuffer; - int m_totalSamples; // These two values are derived from samplesPerBit + boost::chrono::steady_clock::time_point m_startPoint; + double m_feedTime; //!< Time spent in feed() + + // Triple buffering for sharing sample data between two threads + // Top area of each buffer is not used by writer, as it's used by the reader + // for copying the last few samples of the previous buffer, so it can + // be processed contiguously + const int m_buffers = 3; + const int m_bufferSize = 200000; + Real *m_sampleBuffer[3]; //!< Each buffer is m_bufferSize samples + QSemaphore m_bufferWrite[3]; //!< Sempahore to control write access to the buffers + QSemaphore m_bufferRead[3]; //!< Sempahore to control read access from the buffers + ADSBDemodSinkWorker m_worker; //!< Worker thread that does the actual demodulation + int m_writeBuffer; //!< Which of the 3 buffers we're writing in to + int m_writeIdx; //!< Index to to current write buffer + + // These values are derived from samplesPerBit + int m_samplesPerFrame; //!< Including preamble int m_samplesPerChip; - double m_correlationThresholdLinear; //!< settings m_correlationThreshold is in dB. Linear value is calculated once. double m_magsq; //!< displayed averaged value double m_magsqSum; @@ -93,12 +108,17 @@ private: int m_magsqCount; MagSqLevelsStore m_magSqLevelStore; - MovingAverageUtil m_movingAverage; - MessageQueue *m_messageQueueToGUI; MessageQueue *m_messageQueueToWorker; - void processOneSample(Complex &ci); + void init(int samplesPerBit); + void stopWorker(); + Real inline complexMagSq(Complex& ci) + { + double magsqRaw = ci.real()*ci.real() + ci.imag()*ci.imag(); + return (Real)(magsqRaw / (SDR_RX_SCALED*SDR_RX_SCALED)); + } + void processOneSample(Real magsq); MessageQueue *getMessageQueueToGUI() { return m_messageQueueToGUI; } MessageQueue *getMessageQueueToWorker() { return m_messageQueueToWorker; } }; diff --git a/plugins/channelrx/demodadsb/adsbdemodsinkworker.cpp b/plugins/channelrx/demodadsb/adsbdemodsinkworker.cpp new file mode 100644 index 000000000..891b5e305 --- /dev/null +++ b/plugins/channelrx/demodadsb/adsbdemodsinkworker.cpp @@ -0,0 +1,348 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2020 Jon Beniston, M7RCE // +// // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include + +#include + +#include "util/stepfunctions.h" +#include "util/db.h" +#include "dsp/dspengine.h" +#include "dsp/dspcommands.h" +#include "device/deviceapi.h" + +#include "adsbdemodreport.h" +#include "adsbdemodsink.h" +#include "adsbdemodsinkworker.h" +#include "adsbdemodsettings.h" +#include "adsb.h" + +MESSAGE_CLASS_DEFINITION(ADSBDemodSinkWorker::MsgConfigureADSBDemodSinkWorker, Message) + +void ADSBDemodSinkWorker::run() +{ + int readBuffer = 0; + + // Acquire first buffer + m_sink->m_bufferRead[readBuffer].acquire(); + + // Start recording how much time is spent processing in this method + boost::chrono::steady_clock::time_point startPoint = boost::chrono::steady_clock::now(); + + // Check for updated settings + handleInputMessages(); + + // samplesPerBit is only changed when the thread is stopped + int samplesPerBit = m_settings.m_samplesPerBit; + int samplesPerFrame = samplesPerBit*(ADS_B_PREAMBLE_BITS+ADS_B_ES_BITS); + int samplesPerChip = samplesPerBit/ADS_B_CHIPS_PER_BIT; + + qDebug() << "ADSBDemodSinkWorker:: running with" + << " samplesPerFrame: " << samplesPerFrame + << " samplesPerChip: " << samplesPerChip + << " samplesPerBit: " << samplesPerBit + << " correlateFullPreamble: " << m_settings.m_correlateFullPreamble + << " correlationZerosScale: " << m_correlationZerosScale + << " correlationThreshold: " << m_settings.m_correlationThreshold; + + int readIdx = m_sink->m_samplesPerFrame - 1; + + int cnt = 0; + + while (true) + { + int startIdx = readIdx; + + // Correlate received signal with expected preamble + // chip+ indexes are 0, 2, 7, 9 + // correlating over first 6 bits gives a reduction in per-sample + // processing, but more than doubles the number of false matches + Real preambleCorrelationOnes = 0.0; + Real preambleCorrelationZeros = 0.0; + if (m_settings.m_correlateFullPreamble) + { + for (int i = 0; i < samplesPerChip; i++) + { + preambleCorrelationOnes += m_sink->m_sampleBuffer[readBuffer][startIdx + 0*samplesPerChip + i]; + preambleCorrelationZeros += m_sink->m_sampleBuffer[readBuffer][startIdx + 1*samplesPerChip + i]; + + preambleCorrelationOnes += m_sink->m_sampleBuffer[readBuffer][startIdx + 2*samplesPerChip + i]; + preambleCorrelationZeros += m_sink->m_sampleBuffer[readBuffer][startIdx + 3*samplesPerChip + i]; + + preambleCorrelationZeros += m_sink->m_sampleBuffer[readBuffer][startIdx + 4*samplesPerChip + i]; + preambleCorrelationZeros += m_sink->m_sampleBuffer[readBuffer][startIdx + 5*samplesPerChip + i]; + + preambleCorrelationZeros += m_sink->m_sampleBuffer[readBuffer][startIdx + 6*samplesPerChip + i]; + preambleCorrelationOnes += m_sink->m_sampleBuffer[readBuffer][startIdx + 7*samplesPerChip + i]; + + preambleCorrelationZeros += m_sink->m_sampleBuffer[readBuffer][startIdx + 8*samplesPerChip + i]; + preambleCorrelationOnes += m_sink->m_sampleBuffer[readBuffer][startIdx + 9*samplesPerChip + i]; + + preambleCorrelationZeros += m_sink->m_sampleBuffer[readBuffer][startIdx + 10*samplesPerChip + i]; + preambleCorrelationZeros += m_sink->m_sampleBuffer[readBuffer][startIdx + 11*samplesPerChip + i]; + + preambleCorrelationZeros += m_sink->m_sampleBuffer[readBuffer][startIdx + 12*samplesPerChip + i]; + preambleCorrelationZeros += m_sink->m_sampleBuffer[readBuffer][startIdx + 13*samplesPerChip + i]; + + preambleCorrelationZeros += m_sink->m_sampleBuffer[readBuffer][startIdx + 14*samplesPerChip + i]; + preambleCorrelationZeros += m_sink->m_sampleBuffer[readBuffer][startIdx + 15*samplesPerChip + i]; + } + } + else + { + for (int i = 0; i < samplesPerChip; i++) + { + preambleCorrelationOnes += m_sink->m_sampleBuffer[readBuffer][startIdx + 0*samplesPerChip + i]; + preambleCorrelationZeros += m_sink->m_sampleBuffer[readBuffer][startIdx + 1*samplesPerChip + i]; + + preambleCorrelationOnes += m_sink->m_sampleBuffer[readBuffer][startIdx + 2*samplesPerChip + i]; + preambleCorrelationZeros += m_sink->m_sampleBuffer[readBuffer][startIdx + 3*samplesPerChip + i]; + + preambleCorrelationZeros += m_sink->m_sampleBuffer[readBuffer][startIdx + 4*samplesPerChip + i]; + preambleCorrelationZeros += m_sink->m_sampleBuffer[readBuffer][startIdx + 5*samplesPerChip + i]; + + preambleCorrelationZeros += m_sink->m_sampleBuffer[readBuffer][startIdx + 6*samplesPerChip + i]; + preambleCorrelationOnes += m_sink->m_sampleBuffer[readBuffer][startIdx + 7*samplesPerChip + i]; + + preambleCorrelationZeros += m_sink->m_sampleBuffer[readBuffer][startIdx + 8*samplesPerChip + i]; + preambleCorrelationOnes += m_sink->m_sampleBuffer[readBuffer][startIdx + 9*samplesPerChip + i]; + + preambleCorrelationZeros += m_sink->m_sampleBuffer[readBuffer][startIdx + 10*samplesPerChip + i]; + preambleCorrelationZeros += m_sink->m_sampleBuffer[readBuffer][startIdx + 11*samplesPerChip + i]; + } + } + + // Use the difference rather than absolute value, as we don't care how powerful the signal + // is, just whether there is a good correlation with the preamble. The absolute value varies + // too much with different radios, AGC settings and and the noise floor is not constant + // (E.g: it's quite possible to receive multiple frames simultaneously, so we don't + // want a maximum threshold for the zeros, as a weaker signal may transmit 1s in + // a stronger signals 0 chip position. Similarly a strong signal in an adjacent + // channel may casue AGC to reduce gain, reducing the ampltiude of an otherwise + // strong signal, as well as the noise floor) + // The scale factors account for different values of samplesPerBit and the different + // number of zeros and ones in the preamble + // If the sum of ones is exactly 0, it's probably no signal + Real preambleCorrelation = (preambleCorrelationOnes * m_correlationZerosScale) + - (preambleCorrelationZeros * m_correlationOnesScale); + if ((preambleCorrelation > m_correlationThresholdLinear) && (preambleCorrelationOnes != 0.0f)) + { + m_demodStats.m_correlatorMatches++; + // Skip over preamble + startIdx += samplesPerBit*ADS_B_PREAMBLE_BITS; + + // Demodulate waveform to bytes + unsigned char data[ADS_B_ES_BYTES]; + int byteIdx = 0; + int currentBit; + unsigned char currentByte = 0; + int df; + + for (int bit = 0; bit < ADS_B_ES_BITS; bit++) + { + // PPM (Pulse position modulation) - Each bit spreads to two chips, 1->10, 0->01 + // Determine if bit is 1 or 0, by seeing which chip has largest combined energy over the sampling period + Real oneSum = 0.0f; + Real zeroSum = 0.0f; + for (int i = 0; i < samplesPerChip; i++) + { + oneSum += m_sink->m_sampleBuffer[readBuffer][startIdx+i]; + zeroSum += m_sink->m_sampleBuffer[readBuffer][startIdx+samplesPerChip+i]; + } + currentBit = oneSum > zeroSum; + startIdx += samplesPerBit; + // Convert bit to bytes - MSB first + currentByte |= currentBit << (7-(bit & 0x7)); + if ((bit & 0x7) == 0x7) + { + data[byteIdx++] = currentByte; + currentByte = 0; + // Don't try to demodulate any further, if this isn't an ADS-B frame + // to help reduce processing overhead + if (!m_settings.m_demodModeS && (bit == 7)) + { + df = ((data[0] >> 3) & ADS_B_DF_MASK); + if ((df != 17) && (df != 18)) + break; + } + } + } + + // Is ADS-B? + df = ((data[0] >> 3) & ADS_B_DF_MASK); + if ((df == 17) || (df == 18)) + { + m_crc.init(); + int parity = (data[11] << 16) | (data[12] << 8) | data[13]; // Parity / CRC + + m_crc.calculate(data, ADS_B_ES_BYTES-3); + if (parity == m_crc.get()) + { + // Got a valid frame + m_demodStats.m_adsbFrames++; + // Don't try to re-demodulate the same frame + // We could possibly allow a partial overlap here + readIdx += (ADS_B_ES_BITS+ADS_B_PREAMBLE_BITS)*ADS_B_CHIPS_PER_BIT*samplesPerChip - 1; + // Pass to GUI + if (m_sink->getMessageQueueToGUI()) + { + ADSBDemodReport::MsgReportADSB *msg = ADSBDemodReport::MsgReportADSB::create( + QByteArray((char*)data, sizeof(data)), + preambleCorrelation); + m_sink->getMessageQueueToGUI()->push(msg); + } + // Pass to worker to feed to other servers + if (m_sink->getMessageQueueToWorker()) + { + ADSBDemodReport::MsgReportADSB *msg = ADSBDemodReport::MsgReportADSB::create( + QByteArray((char*)data, sizeof(data)), + preambleCorrelation); + m_sink->getMessageQueueToWorker()->push(msg); + } + } + else + m_demodStats.m_crcFails++; + } + else if (m_settings.m_demodModeS) + { + int bytes; + + m_crc.init(); + if ((df == 0) || (df == 4) || (df == 5) || (df == 11)) + bytes = 56/8; + else if ((df == 16) || (df == 20) || (df == 21) || (df >= 24)) + bytes = 112/8; + else + bytes = 0; + if (bytes > 0) + { + int parity = (data[bytes-3] << 16) | (data[bytes-2] << 8) | data[bytes-1]; + m_crc.calculate(data, bytes-3); + int crc = m_crc.get(); + // For DF11, the last 7 bits may have an address/interogration indentifier (II) + // XORed in, so we ignore those bits + if ((parity == crc) || ((df == 11) && (parity & 0xffff80) == (crc & 0xffff80))) + { + m_demodStats.m_modesFrames++; + // Pass to worker to feed to other servers + if (m_sink->getMessageQueueToWorker()) + { + ADSBDemodReport::MsgReportADSB *msg = ADSBDemodReport::MsgReportADSB::create( + QByteArray((char*)data, sizeof(data)), + preambleCorrelation); + m_sink->getMessageQueueToWorker()->push(msg); + } + } + else + m_demodStats.m_crcFails++; + } + else + m_demodStats.m_typeFails++; + } + else + m_demodStats.m_typeFails++; + } + readIdx++; + if (readIdx > m_sink->m_bufferSize - samplesPerFrame) + { + int nextBuffer = readBuffer+1; + if (nextBuffer >= m_sink->m_buffers) + nextBuffer = 0; + + // Update amount of time spent processing (don't include time spend in acquire) + boost::chrono::duration sec = boost::chrono::steady_clock::now() - startPoint; + m_demodStats.m_demodTime += sec.count(); + m_demodStats.m_feedTime = m_sink->m_feedTime; + + // Send stats to GUI + if (m_sink->getMessageQueueToGUI()) + { + ADSBDemodReport::MsgReportDemodStats *msg = ADSBDemodReport::MsgReportDemodStats::create(m_demodStats); + m_sink->getMessageQueueToGUI()->push(msg); + } + + if (!isInterruptionRequested()) + { + // Get next buffer + m_sink->m_bufferRead[nextBuffer].acquire(); + + // Check for updated settings + handleInputMessages(); + + // Resume timing how long we are processing + startPoint = boost::chrono::steady_clock::now(); + + int samplesRemaining = m_sink->m_bufferSize - readIdx; + if (samplesRemaining > 0) + { + // Copy remaining samples, to start of next buffer + memcpy(&m_sink->m_sampleBuffer[nextBuffer][samplesPerFrame - 1 - samplesRemaining], &m_sink->m_sampleBuffer[readBuffer][readIdx], samplesRemaining*sizeof(Real)); + readIdx = samplesPerFrame - 1 - samplesRemaining; + } + else + { + readIdx = samplesPerFrame - 1; + } + + m_sink->m_bufferWrite[readBuffer].release(); + + readBuffer = nextBuffer; + } + else + { + // Use a break to avoid testing a condition in the main loop + break; + } + } + } +} + +void ADSBDemodSinkWorker::handleInputMessages() +{ + Message* message; + + while ((message = m_inputMessageQueue.pop()) != nullptr) + { + if (MsgConfigureADSBDemodSinkWorker::match(*message)) + { + MsgConfigureADSBDemodSinkWorker* cfg = (MsgConfigureADSBDemodSinkWorker*)message; + + ADSBDemodSettings settings = cfg->getSettings(); + bool force = cfg->getForce(); + + if ((m_settings.m_correlationThreshold != settings.m_correlationThreshold) || force) + { + m_correlationThresholdLinear = CalcDb::powerFromdB(settings.m_correlationThreshold); + qDebug() << "m_correlationThresholdLinear: " << m_correlationThresholdLinear; + } + + if (settings.m_correlateFullPreamble) + { + m_correlationOnesScale = 1.0f / settings.m_samplesPerBit; + m_correlationZerosScale = 2.0 * 1.0f / settings.m_samplesPerBit; // As 2x more 0s than 1s + } + else + { + m_correlationOnesScale = 1.0f / settings.m_samplesPerBit; + m_correlationZerosScale = 3.0 * 1.0f / settings.m_samplesPerBit; // As 3x more 0s than 1s + } + + m_settings = settings; + delete message; + } + } +} diff --git a/plugins/channelrx/demodadsb/adsbdemodsinkworker.h b/plugins/channelrx/demodadsb/adsbdemodsinkworker.h new file mode 100644 index 000000000..b0fa34f77 --- /dev/null +++ b/plugins/channelrx/demodadsb/adsbdemodsinkworker.h @@ -0,0 +1,82 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2020 Jon Beniston, M7RCE // +// // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef INCLUDE_ADSBDEMODSINKWORKER_H +#define INCLUDE_ADSBDEMODSINKWORKER_H + +#include +#include + +#include "dsp/dsptypes.h" +#include "util/crc.h" +#include "util/messagequeue.h" +#include "adsbdemodstats.h" + +class ADSBDemodSink; +class ADSBDemodSettings; +class ADSBDemodStats; + +class ADSBDemodSinkWorker : public QThread { + Q_OBJECT +public: + + class MsgConfigureADSBDemodSinkWorker : public Message { + MESSAGE_CLASS_DECLARATION + + public: + const ADSBDemodSettings& getSettings() const { return m_settings; } + bool getForce() const { return m_force; } + + static MsgConfigureADSBDemodSinkWorker* create(const ADSBDemodSettings& settings, bool force) + { + return new MsgConfigureADSBDemodSinkWorker(settings, force); + } + + private: + ADSBDemodSettings m_settings; + bool m_force; + + MsgConfigureADSBDemodSinkWorker(const ADSBDemodSettings& settings, bool force) : + Message(), + m_settings(settings), + m_force(force) + { } + }; + + ADSBDemodSinkWorker(ADSBDemodSink *sink) : + m_sink(sink), + m_demodStats(), + m_correlationThresholdLinear(0.02), + m_crc() + { + } + void run() override; + MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } + +private: + void handleInputMessages(); + MessageQueue m_inputMessageQueue; + ADSBDemodSettings m_settings; + ADSBDemodSink *m_sink; + ADSBDemodStats m_demodStats; + Real m_correlationThresholdLinear; + Real m_correlationZerosScale; + Real m_correlationOnesScale; + crcadsb m_crc; //!< Have as member to avoid recomputing LUT +}; + +#endif // INCLUDE_ADSBDEMODSINKWORKER_H diff --git a/plugins/channelrx/demodadsb/adsbdemodstats.h b/plugins/channelrx/demodadsb/adsbdemodstats.h new file mode 100644 index 000000000..9b13d306a --- /dev/null +++ b/plugins/channelrx/demodadsb/adsbdemodstats.h @@ -0,0 +1,46 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2020 Jon Beniston, M7RCE // +// // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef INCLUDE_ADSBDEMODSTATS_H +#define INCLUDE_ADSBDEMODSTATS_H + +#include + +struct ADSBDemodStats { + + qint64 m_correlatorMatches; //!< Total number of correlator matches + qint64 m_adsbFrames; //!< How many ADS-B frames with correct CRCs + qint64 m_modesFrames; //!< How many non-ADS-B Mode-S frames with correct CRCs + qint64 m_crcFails; //!< How many frames we've demoded with incorrect CRCs + qint64 m_typeFails; //!< How many frames we've demoded with unknown type (DF) so we can't check CRC + double m_demodTime; //!< How long we've spent in run() + double m_feedTime; //!< How long we've spent in feed() + + ADSBDemodStats() : + m_correlatorMatches(0), + m_adsbFrames(0), + m_modesFrames(0), + m_crcFails(0), + m_typeFails(0), + m_demodTime(0.0), + m_feedTime(0.0) + { + } + +}; + +#endif // INCLUDE_ADSBDEMODSTATS_H diff --git a/plugins/channelrx/demodadsb/adsbdemodworker.cpp b/plugins/channelrx/demodadsb/adsbdemodworker.cpp index f2a1289a2..1f011fcdc 100644 --- a/plugins/channelrx/demodadsb/adsbdemodworker.cpp +++ b/plugins/channelrx/demodadsb/adsbdemodworker.cpp @@ -17,6 +17,7 @@ /////////////////////////////////////////////////////////////////////////////////// #include +#include #include #include #include @@ -33,6 +34,13 @@ ADSBDemodWorker::ADSBDemodWorker() : { connect(&m_heartbeatTimer, SIGNAL(timeout()), this, SLOT(heartbeat())); connect(&m_socket, SIGNAL(readyRead()),this, SLOT(recv())); + connect(&m_socket, SIGNAL(connected()), this, SLOT(connected())); + connect(&m_socket, SIGNAL(disconnected()), this, SLOT(disconnected())); +#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0) + connect(&m_socket, QOverload::of(&QAbstractSocket::error), this, &ADSBDemodWorker::errorOccurred); +#else + connect(&m_socket, &QAbstractSocket::errorOccurred, this, &ADSBDemodWorker::errorOccurred); +#endif } ADSBDemodWorker::~ADSBDemodWorker() @@ -88,7 +96,7 @@ bool ADSBDemodWorker::handleMessage(const Message& message) else if (ADSBDemodReport::MsgReportADSB::match(message)) { ADSBDemodReport::MsgReportADSB& report = (ADSBDemodReport::MsgReportADSB&) message; - handleADSB(report.getData(), report.getDateTime(), report.getPreambleCorrelationOnes()); + handleADSB(report.getData(), report.getDateTime(), report.getPreambleCorrelation()); return true; } else @@ -100,26 +108,42 @@ bool ADSBDemodWorker::handleMessage(const Message& message) void ADSBDemodWorker::applySettings(const ADSBDemodSettings& settings, bool force) { qDebug() << "ADSBDemodWorker::applySettings:" - << " m_beastEnabled: " << settings.m_beastEnabled - << " m_beastHost: " << settings.m_beastHost - << " m_beastPort: " << settings.m_beastPort + << " m_feedEnabled: " << settings.m_feedEnabled + << " m_feedHost: " << settings.m_feedHost + << " m_feedPort: " << settings.m_feedPort + << " m_feedFormat: " << settings.m_feedFormat << " force: " << force; - if ((settings.m_beastEnabled != m_settings.m_beastEnabled) - || (settings.m_beastHost != m_settings.m_beastHost) - || (settings.m_beastPort != m_settings.m_beastPort) || force) + if ((settings.m_feedEnabled != m_settings.m_feedEnabled) + || (settings.m_feedHost != m_settings.m_feedHost) + || (settings.m_feedPort != m_settings.m_feedPort) || force) { // Close any existing connection if (m_socket.isOpen()) m_socket.close(); // Open connection - if (settings.m_beastEnabled) - m_socket.connectToHost(settings.m_beastHost, settings.m_beastPort); + if (settings.m_feedEnabled) + m_socket.connectToHost(settings.m_feedHost, settings.m_feedPort); } m_settings = settings; } +void ADSBDemodWorker::connected() +{ + qDebug() << "ADSBDemodWorker::connected " << m_settings.m_feedHost; +} + +void ADSBDemodWorker::disconnected() +{ + qDebug() << "ADSBDemodWorker::disconnected"; +} + +void ADSBDemodWorker::errorOccurred(QAbstractSocket::SocketError socketError) +{ + qDebug() << "ADSBDemodWorker::errorOccurred: " << socketError; +} + void ADSBDemodWorker::recv() { // Not expecting to receving anything from server @@ -129,11 +153,11 @@ void ADSBDemodWorker::recv() void ADSBDemodWorker::send(const char *data, int length) { - if (m_settings.m_beastEnabled) + if (m_settings.m_feedEnabled) { // Reopen connection if it was lost if (!m_socket.isOpen()) - m_socket.connectToHost(m_settings.m_beastHost, m_settings.m_beastPort); + m_socket.connectToHost(m_settings.m_feedHost, m_settings.m_feedPort); // Send data m_socket.write(data, length); } @@ -153,40 +177,48 @@ char *ADSBDemodWorker::escape(char *p, char c) // See: https://wiki.jetvision.de/wiki/Mode-S_Beast:Data_Output_Formats void ADSBDemodWorker::handleADSB(QByteArray data, const QDateTime dateTime, float correlation) { - char beastBinary[2+6*2+1*2+14*2]; - int length; - char *p = beastBinary; - qint64 timestamp; - unsigned char signalStrength; + if (m_settings.m_feedFormat == ADSBDemodSettings::BeastBinary) + { + char beastBinary[2+6*2+1*2+14*2]; + int length; + char *p = beastBinary; + qint64 timestamp; + unsigned char signalStrength; - timestamp = dateTime.toMSecsSinceEpoch(); + timestamp = dateTime.toMSecsSinceEpoch(); - if (correlation > 255) - signalStrength = 255; - if (correlation < 1) - signalStrength = 1; - else - signalStrength = (unsigned char)correlation; + if (correlation > 255) + signalStrength = 255; + if (correlation < 1) + signalStrength = 1; + else + signalStrength = (unsigned char)correlation; - *p++ = BEAST_ESC; - *p++ = '3'; // Mode-S long + *p++ = BEAST_ESC; + *p++ = '3'; // Mode-S long - p = escape(p, timestamp >> 56); // Big-endian timestamp - p = escape(p, timestamp >> 48); - p = escape(p, timestamp >> 32); - p = escape(p, timestamp >> 24); - p = escape(p, timestamp >> 16); - p = escape(p, timestamp >> 8); - p = escape(p, timestamp); + p = escape(p, timestamp >> 56); // Big-endian timestamp + p = escape(p, timestamp >> 48); + p = escape(p, timestamp >> 32); + p = escape(p, timestamp >> 24); + p = escape(p, timestamp >> 16); + p = escape(p, timestamp >> 8); + p = escape(p, timestamp); - p = escape(p, signalStrength); // Signal strength + p = escape(p, signalStrength); // Signal strength - for (int i = 0; i < data.length(); i++) // ADS-B data - p = escape(p, data[i]); + for (int i = 0; i < data.length(); i++) // ADS-B data + p = escape(p, data[i]); - length = p - beastBinary; + length = p - beastBinary; - send(beastBinary, length); + send(beastBinary, length); + } + else if (m_settings.m_feedFormat == ADSBDemodSettings::BeastHex) + { + QString beastHex = "*" + data.toHex() + ";\n"; + send(beastHex.toUtf8(), beastHex.size()); + } } // Periodically send heartbeat to keep connection alive diff --git a/plugins/channelrx/demodadsb/adsbdemodworker.h b/plugins/channelrx/demodadsb/adsbdemodworker.h index 8a592205b..4369ec981 100644 --- a/plugins/channelrx/demodadsb/adsbdemodworker.h +++ b/plugins/channelrx/demodadsb/adsbdemodworker.h @@ -80,6 +80,9 @@ private: private slots: void handleInputMessages(); + void connected(); + void disconnected(); + void errorOccurred(QAbstractSocket::SocketError socketError); void recv(); void heartbeat(); }; diff --git a/plugins/channelrx/demodadsb/airlinelogos.qrc b/plugins/channelrx/demodadsb/airlinelogos.qrc new file mode 100644 index 000000000..9d81292d3 --- /dev/null +++ b/plugins/channelrx/demodadsb/airlinelogos.qrc @@ -0,0 +1,758 @@ + + + airlinelogos/5AH.bmp + airlinelogos/AAF.bmp + airlinelogos/AAH.bmp + airlinelogos/AAL.bmp + airlinelogos/AAR.bmp + airlinelogos/AAW.bmp + airlinelogos/AAY.bmp + airlinelogos/AAZ.bmp + airlinelogos/ABB.bmp + airlinelogos/ABD.bmp + airlinelogos/ABG.bmp + airlinelogos/ABL.bmp + airlinelogos/ABN.bmp + airlinelogos/ABP.bmp + airlinelogos/ABQ.bmp + airlinelogos/ABR.bmp + airlinelogos/ABS.bmp + airlinelogos/ABV.bmp + airlinelogos/ABW.bmp + airlinelogos/ABX.bmp + airlinelogos/ABY.bmp + airlinelogos/ACA.bmp + airlinelogos/ACG.bmp + airlinelogos/ACI.bmp + airlinelogos/ACV.bmp + airlinelogos/ADN.bmp + airlinelogos/ADY.bmp + airlinelogos/AEA.bmp + airlinelogos/AEE.bmp + airlinelogos/AEG.bmp + airlinelogos/AEH.bmp + airlinelogos/AEI.bmp + airlinelogos/AERORESCUE.bmp + airlinelogos/AFE.bmp + airlinelogos/AFG.bmp + airlinelogos/AFL.bmp + airlinelogos/AFR.bmp + airlinelogos/AFW.bmp + airlinelogos/AGF.bmp + airlinelogos/AGO.bmp + airlinelogos/AGU.bmp + airlinelogos/AHK.bmp + airlinelogos/AHO.bmp + airlinelogos/AHY.bmp + airlinelogos/AIB.bmp + airlinelogos/AIC.bmp + airlinelogos/AIE.bmp + airlinelogos/AIH.bmp + airlinelogos/AIRCOSTA.bmp + airlinelogos/AIZ.bmp + airlinelogos/AJA.bmp + airlinelogos/AJB.bmp + airlinelogos/AJD.bmp + airlinelogos/AJI.bmp + airlinelogos/AJK.bmp + airlinelogos/AJT.bmp + airlinelogos/AKC.bmp + airlinelogos/ALV.bmp + airlinelogos/ALW.bmp + airlinelogos/ALX.bmp + airlinelogos/ALY.bmp + airlinelogos/AMC.bmp + airlinelogos/AMU.bmp + airlinelogos/AMV.bmp + airlinelogos/AMX.bmp + airlinelogos/AMY.bmp + airlinelogos/ANA.bmp + airlinelogos/AND.bmp + airlinelogos/ANE.bmp + airlinelogos/ANG.bmp + airlinelogos/ANK.bmp + airlinelogos/ANO.bmp + airlinelogos/ANQ.bmp + airlinelogos/ANR.bmp + airlinelogos/ANS.bmp + airlinelogos/ANT.bmp + airlinelogos/ANZ.bmp + airlinelogos/AOJ.bmp + airlinelogos/APF.bmp + airlinelogos/APG.bmp + airlinelogos/APJ.bmp + airlinelogos/APK.bmp + airlinelogos/APZ.bmp + airlinelogos/ARA.bmp + airlinelogos/ARE.bmp + airlinelogos/ARG.bmp + airlinelogos/ARK.bmp + airlinelogos/ARN.bmp + airlinelogos/ARR.bmp + airlinelogos/ARU.bmp + airlinelogos/ARZ.bmp + airlinelogos/ASA.bmp + airlinelogos/ASB.bmp + airlinelogos/ASH.bmp + airlinelogos/ASL.bmp + airlinelogos/ASQ.bmp + airlinelogos/ASV.bmp + airlinelogos/ASY.bmp + airlinelogos/ATC.bmp + airlinelogos/ATG.bmp + airlinelogos/ATN.bmp + airlinelogos/ATR.bmp + airlinelogos/ATV.bmp + airlinelogos/ATW.bmp + airlinelogos/ATX.bmp + airlinelogos/AUA.bmp + airlinelogos/AUI.bmp + airlinelogos/AUL.bmp + airlinelogos/AUR.bmp + airlinelogos/AUS5.bmp + airlinelogos/AUT.bmp + airlinelogos/AVA.bmp + airlinelogos/AVJ.bmp + airlinelogos/AVN.bmp + airlinelogos/AVV.bmp + airlinelogos/AVW.bmp + airlinelogos/AWE.bmp + airlinelogos/AWG.bmp + airlinelogos/AWI.bmp + airlinelogos/AWK.bmp + airlinelogos/AWM.bmp + airlinelogos/AWT.bmp + airlinelogos/AXB.bmp + airlinelogos/AXE.bmp + airlinelogos/AXK.bmp + airlinelogos/AXM.bmp + airlinelogos/AXU.bmp + airlinelogos/AYG.bmp + airlinelogos/AYT.bmp + airlinelogos/AZA.bmp + airlinelogos/AZG.bmp + airlinelogos/AZI.bmp + airlinelogos/AZM.bmp + airlinelogos/AZN.bmp + airlinelogos/AZO.bmp + airlinelogos/AZQ.bmp + airlinelogos/AZU.bmp + airlinelogos/AZV.bmp + airlinelogos/AZW.bmp + airlinelogos/BAW.bmp + airlinelogos/BBC.bmp + airlinelogos/BBD.bmp + airlinelogos/BBG.bmp + airlinelogos/BCI.bmp + airlinelogos/BCY.bmp + airlinelogos/BDA.bmp + airlinelogos/BEE.bmp + airlinelogos/BEL.bmp + airlinelogos/BER.bmp + airlinelogos/BGA.bmp + airlinelogos/BGH.bmp + airlinelogos/BGL.bmp + airlinelogos/BGY.bmp + airlinelogos/BHA.bmp + airlinelogos/BHP.bmp + airlinelogos/BIE.bmp + airlinelogos/BLF.bmp + airlinelogos/BLX.bmp + airlinelogos/BMR.bmp + airlinelogos/BOE.bmp + airlinelogos/BON.bmp + airlinelogos/BOS.bmp + airlinelogos/BOT.bmp + airlinelogos/BOV.bmp + airlinelogos/BOX.bmp + airlinelogos/BQB.bmp + airlinelogos/BRINDABELLA.bmp + airlinelogos/BRJ.bmp + airlinelogos/BRQ.bmp + airlinelogos/BRU.bmp + airlinelogos/BRXb.bmp + airlinelogos/BSK.bmp + airlinelogos/BTI.bmp + airlinelogos/BTN.bmp + airlinelogos/BTQ.bmp + airlinelogos/BUC.bmp + airlinelogos/BUR.bmp + airlinelogos/BVR.bmp + airlinelogos/BXA.bmp + airlinelogos/BYR.bmp + airlinelogos/BZH.bmp + airlinelogos/CAD.bmp + airlinelogos/CAI.bmp + airlinelogos/CAO.bmp + airlinelogos/CAV.bmp + airlinelogos/CAY.bmp + airlinelogos/CBJ.bmp + airlinelogos/CCA.bmp + airlinelogos/CCD.bmp + airlinelogos/CCE.bmp + airlinelogos/CCM.bmp + airlinelogos/CDA.bmp + airlinelogos/CDC.bmp + airlinelogos/CDG.bmp + airlinelogos/CEB.bmp + airlinelogos/CEL.bmp + airlinelogos/CES.bmp + airlinelogos/CEY.bmp + airlinelogos/CFE.bmp + airlinelogos/CFG.bmp + airlinelogos/CGF.bmp + airlinelogos/CGH.bmp + airlinelogos/CGN.bmp + airlinelogos/CHB.bmp + airlinelogos/CHH.bmp + airlinelogos/CIM.bmp + airlinelogos/CJA.bmp + airlinelogos/CJC.bmp + airlinelogos/CJT.bmp + airlinelogos/CKK.bmp + airlinelogos/CKS.bmp + airlinelogos/CLG.bmp + airlinelogos/CLX.bmp + airlinelogos/CMM.bmp + airlinelogos/CND.bmp + airlinelogos/CNK.bmp + airlinelogos/CON1.bmp + airlinelogos/COT.bmp + airlinelogos/CPA.bmp + airlinelogos/CPN.bmp + airlinelogos/CPZ.bmp + airlinelogos/CQH.bmp + airlinelogos/CQN.bmp + airlinelogos/CRC.bmp + airlinelogos/CRL.bmp + airlinelogos/CRN.bmp + airlinelogos/CRO.bmp + airlinelogos/CRQ.bmp + airlinelogos/CRUZ.bmp + airlinelogos/CSA.bmp + airlinelogos/CSC.bmp + airlinelogos/CSH.bmp + airlinelogos/CSN.bmp + airlinelogos/CSS.bmp + airlinelogos/CSZ.bmp + airlinelogos/CTM.bmp + airlinelogos/CTN.bmp + airlinelogos/CUA.bmp + airlinelogos/CUB.bmp + airlinelogos/CVA.bmp + airlinelogos/CWC.bmp + airlinelogos/CXA.bmp + airlinelogos/CXB.bmp + airlinelogos/CXH.bmp + airlinelogos/CYL.bmp + airlinelogos/CYP.bmp + airlinelogos/CYZ.bmp + airlinelogos/DAC.bmp + airlinelogos/DAH.bmp + airlinelogos/DAL.bmp + airlinelogos/DAO.bmp + airlinelogos/DAP.bmp + airlinelogos/DCS.bmp + airlinelogos/DER.bmp + airlinelogos/DHL.bmp + airlinelogos/DHX.bmp + airlinelogos/DJT.bmp + airlinelogos/DJU.bmp + airlinelogos/DKH.bmp + airlinelogos/DLA.bmp + airlinelogos/DLH.bmp + airlinelogos/DNV.bmp + airlinelogos/DOB.bmp + airlinelogos/DQI.bmp + airlinelogos/DRK.bmp + airlinelogos/DRU.bmp + airlinelogos/DSM.bmp + airlinelogos/DTA.bmp + airlinelogos/DTH.bmp + airlinelogos/DTR.bmp + airlinelogos/DYA.bmp + airlinelogos/EAA.bmp + airlinelogos/EAL.bmp + airlinelogos/EAQ.bmp + airlinelogos/ECO.bmp + airlinelogos/EGF.bmp + airlinelogos/EKA.bmp + airlinelogos/ELL.bmp + airlinelogos/EMB.bmp + airlinelogos/ENJ.bmp + airlinelogos/ENT.bmp + airlinelogos/EPA.bmp + airlinelogos/ERT.bmp + airlinelogos/ESQ.bmp + airlinelogos/ETD.bmp + airlinelogos/ETH.bmp + airlinelogos/ETS.bmp + airlinelogos/EUG.bmp + airlinelogos/EVA.bmp + airlinelogos/EWG.bmp + airlinelogos/EXS.bmp + airlinelogos/EYT.bmp + airlinelogos/EZA.bmp + airlinelogos/EZD.bmp + airlinelogos/EZE.bmp + airlinelogos/EZY.bmp + airlinelogos/FAB.bmp + airlinelogos/FAG.bmp + airlinelogos/FAH.bmp + airlinelogos/FAT.bmp + airlinelogos/FBD.bmp + airlinelogos/FBR.bmp + airlinelogos/FCM.bmp + airlinelogos/FDB.bmp + airlinelogos/FDX.bmp + airlinelogos/FFT.bmp + airlinelogos/FFV.bmp + airlinelogos/FHY.bmp + airlinelogos/FIN.bmp + airlinelogos/FJA.bmp + airlinelogos/FJI.bmp + airlinelogos/FLE.bmp + airlinelogos/FLI.bmp + airlinelogos/FNA.bmp + airlinelogos/FPK.bmp + airlinelogos/FPO.bmp + airlinelogos/FPY.bmp + airlinelogos/FRF.bmp + airlinelogos/FSK.bmp + airlinelogos/FTZ.bmp + airlinelogos/FWI.bmp + airlinelogos/FZA.bmp + airlinelogos/FZW.bmp + airlinelogos/GAA.bmp + airlinelogos/GAI.bmp + airlinelogos/GBK.bmp + airlinelogos/GBQ.bmp + airlinelogos/GCR.bmp + airlinelogos/GDC.bmp + airlinelogos/GEA.bmp + airlinelogos/GEC.bmp + airlinelogos/GEO.bmp + airlinelogos/GFA.bmp + airlinelogos/GFG.bmp + airlinelogos/GGN.bmp + airlinelogos/GIA.bmp + airlinelogos/GLG.bmp + airlinelogos/GLJ.bmp + airlinelogos/GLO.bmp + airlinelogos/GLR.bmp + airlinelogos/GMI.bmp + airlinelogos/GMQ.bmp + airlinelogos/GOW.bmp + airlinelogos/GRL.bmp + airlinelogos/GTI.bmp + airlinelogos/GTV.bmp + airlinelogos/GUG.bmp + airlinelogos/GUY.bmp + airlinelogos/GWI.bmp + airlinelogos/GXL.bmp + airlinelogos/HAL.bmp + airlinelogos/HAT.bmp + airlinelogos/HBH.bmp + airlinelogos/HCC.bmp + airlinelogos/HCV.bmp + airlinelogos/HLX.bmp + airlinelogos/HOP.bmp + airlinelogos/HRV.bmp + airlinelogos/HUN.bmp + airlinelogos/HVN.bmp + airlinelogos/HVY.bmp + airlinelogos/HXA.bmp + airlinelogos/IAD.bmp + airlinelogos/IAW.bmp + airlinelogos/IBB.bmp + airlinelogos/IBE.bmp + airlinelogos/IBS.bmp + airlinelogos/ICE.bmp + airlinelogos/IFC.bmp + airlinelogos/IGA.bmp + airlinelogos/IGO.bmp + airlinelogos/IJM.bmp + airlinelogos/Inter Island Air.bmp + airlinelogos/IRA.bmp + airlinelogos/IRC.bmp + airlinelogos/IRK.bmp + airlinelogos/IRM.bmp + airlinelogos/ISK.bmp + airlinelogos/ISS.bmp + airlinelogos/ISV.bmp + airlinelogos/IYE.bmp + airlinelogos/JAF.bmp + airlinelogos/JAI.bmp + airlinelogos/JAT.bmp + airlinelogos/JATnew.bmp + airlinelogos/JAV.bmp + airlinelogos/JBU.bmp + airlinelogos/JCC.bmp + airlinelogos/JET.bmp + airlinelogos/JG.bmp + airlinelogos/JLL.bmp + airlinelogos/JNA.bmp + airlinelogos/JOR.bmp + airlinelogos/JOY.bmp + airlinelogos/JSA.bmp + airlinelogos/JST.bmp + airlinelogos/JTF.bmp + airlinelogos/JTG.bmp + airlinelogos/JUS.bmp + airlinelogos/JW.bmp + airlinelogos/JYH.bmp + airlinelogos/JZA.bmp + airlinelogos/JZR.bmp + airlinelogos/KAB.bmp + airlinelogos/KAC.bmp + airlinelogos/KAL.bmp + airlinelogos/KFA.bmp + airlinelogos/KGL.bmp + airlinelogos/KGO.bmp + airlinelogos/KHH.bmp + airlinelogos/KHV.bmp + airlinelogos/KIL.bmp + airlinelogos/KKK.bmp + airlinelogos/KLC.bmp + airlinelogos/KLM.bmp + airlinelogos/KMF.bmp + airlinelogos/KN.bmp + airlinelogos/KNA.bmp + airlinelogos/KNE.bmp + airlinelogos/KOR.bmp + airlinelogos/KQA.bmp + airlinelogos/KRE.bmp + airlinelogos/KRN.bmp + airlinelogos/KRP.bmp + airlinelogos/KZR.bmp + airlinelogos/LAA.bmp + airlinelogos/LAL.bmp + airlinelogos/LAN.bmp + airlinelogos/LAV.bmp + airlinelogos/LBN.bmp + airlinelogos/LBR.bmp + airlinelogos/LBY.bmp + airlinelogos/LC.bmp + airlinelogos/LCO.bmp + airlinelogos/LER.bmp + airlinelogos/LFO.bmp + airlinelogos/LGL.bmp + airlinelogos/LIA.bmp + airlinelogos/LKA.bmp + airlinelogos/LKE.bmp + airlinelogos/LLP.bmp + airlinelogos/LLR.bmp + airlinelogos/LMU.bmp + airlinelogos/LNI.bmp + airlinelogos/LNK.bmp + airlinelogos/LOG.bmp + airlinelogos/LOT.bmp + airlinelogos/LPA.bmp + airlinelogos/LPV.bmp + airlinelogos/LRC.bmp + airlinelogos/LUR.bmp + airlinelogos/LVR.bmp + airlinelogos/LYM.bmp + airlinelogos/LZB.bmp + airlinelogos/MAC.bmp + airlinelogos/MAL.bmp + airlinelogos/MAR.bmp + airlinelogos/MAS.bmp + airlinelogos/MAU.bmp + airlinelogos/MDG.bmp + airlinelogos/MEA.bmp + airlinelogos/MGX.bmp + airlinelogos/MHS.bmp + airlinelogos/MJF.bmp + airlinelogos/MKG.bmp + airlinelogos/MLD.bmp + airlinelogos/MLH.bmp + airlinelogos/MLO.bmp + airlinelogos/MLT.bmp + airlinelogos/MMA.bmp + airlinelogos/MMD.bmp + airlinelogos/MMZ.bmp + airlinelogos/MNB.bmp + airlinelogos/MNO.bmp + airlinelogos/MON.bmp + airlinelogos/MPA.bmp + airlinelogos/MPE.bmp + airlinelogos/MPH.bmp + airlinelogos/MSC.bmp + airlinelogos/MSE.bmp + airlinelogos/MSF.bmp + airlinelogos/MSR.bmp + airlinelogos/MSX.bmp + airlinelogos/MYP.bmp + airlinelogos/MZN.bmp + airlinelogos/NAC.bmp + airlinelogos/NAX.bmp + airlinelogos/NCB.bmp + airlinelogos/NGB.bmp + airlinelogos/NGT.bmp + airlinelogos/NIA.bmp + airlinelogos/NKS.bmp + airlinelogos/NLU.bmp + airlinelogos/NLY.bmp + airlinelogos/NMA.bmp + airlinelogos/NMB.bmp + airlinelogos/NOK.bmp + airlinelogos/NOS.bmp + airlinelogos/NPT.bmp + airlinelogos/NRL.bmp + airlinelogos/NSE.bmp + airlinelogos/NVC.bmp + airlinelogos/NVD.bmp + airlinelogos/NVR.bmp + airlinelogos/NWS.bmp + airlinelogos/OAE.bmp + airlinelogos/OAL.bmp + airlinelogos/OBS.bmp + airlinelogos/OCA.bmp + airlinelogos/OHY.bmp + airlinelogos/OKA.bmp + airlinelogos/OKS.bmp + airlinelogos/OLC.bmp + airlinelogos/OMA.bmp + airlinelogos/ONE.bmp + airlinelogos/ONX.bmp + airlinelogos/OPJ.bmp + airlinelogos/ORB.bmp + airlinelogos/OTC.bmp + airlinelogos/OVA.bmp + airlinelogos/OZW.bmp + airlinelogos/PAG.bmp + airlinelogos/PAL.bmp + airlinelogos/PAM.bmp + airlinelogos/PCP.bmp + airlinelogos/PER.bmp + airlinelogos/PEV.bmp + airlinelogos/PEX.bmp + airlinelogos/PFZ.bmp + airlinelogos/PGA.bmp + airlinelogos/PGT.bmp + airlinelogos/PIA.bmp + airlinelogos/PIC.bmp + airlinelogos/PKZ.bmp + airlinelogos/PLM.bmp + airlinelogos/PLV.bmp + airlinelogos/PLY.bmp + airlinelogos/PMT.bmp + airlinelogos/POE.bmp + airlinelogos/POT.bmp + airlinelogos/PRF.bmp + airlinelogos/PRI.bmp + airlinelogos/PRW.bmp + airlinelogos/PSC.bmp + airlinelogos/PST.bmp + airlinelogos/PTB.bmp + airlinelogos/PTR.bmp + airlinelogos/PVN.bmp + airlinelogos/PWD.bmp + airlinelogos/QAJ.bmp + airlinelogos/QDA.bmp + airlinelogos/QFA.bmp + airlinelogos/QLK.bmp + airlinelogos/QTR.bmp + airlinelogos/RAE.bmp + airlinelogos/RAM.bmp + airlinelogos/RAR.bmp + airlinelogos/RBA.bmp + airlinelogos/RBG.bmp + airlinelogos/REU.bmp + airlinelogos/RGE.bmp + airlinelogos/RJA.bmp + airlinelogos/RJD.bmp + airlinelogos/RKM.bmp + airlinelogos/RLA.bmp + airlinelogos/RLH.bmp + airlinelogos/RLK.bmp + airlinelogos/RLU.bmp + airlinelogos/RLX.bmp + airlinelogos/RNV.bmp + airlinelogos/ROI.bmp + airlinelogos/ROT.bmp + airlinelogos/ROU.bmp + airlinelogos/RPB.bmp + airlinelogos/RSY.bmp + airlinelogos/RUC.bmp + airlinelogos/RWG.bmp + airlinelogos/RWZ.bmp + airlinelogos/RXA.bmp + airlinelogos/RYR.bmp + airlinelogos/RYW.bmp + airlinelogos/RZO.bmp + airlinelogos/SAI.bmp + airlinelogos/SAS.bmp + airlinelogos/SBM.bmp + airlinelogos/SCO.bmp + airlinelogos/SCX.bmp + airlinelogos/SDM.bmp + airlinelogos/SEJ.bmp + airlinelogos/SEY.bmp + airlinelogos/SFF.bmp + airlinelogos/SFW.bmp + airlinelogos/SGA.bmp + airlinelogos/SGG.bmp + airlinelogos/SHU.bmp + airlinelogos/SIA.bmp + airlinelogos/SID.bmp + airlinelogos/SIF.bmp + airlinelogos/SIN.bmp + airlinelogos/SJO.bmp + airlinelogos/SKK.bmp + airlinelogos/SKP.bmp + airlinelogos/SKU.bmp + airlinelogos/SKV.bmp + airlinelogos/SKZ.bmp + airlinelogos/SLI.bmp + airlinelogos/SLK.bmp + airlinelogos/SLM.bmp + airlinelogos/SLX.bmp + airlinelogos/SME.bmp + airlinelogos/SMJ.bmp + airlinelogos/SMR.bmp + airlinelogos/SOR.bmp + airlinelogos/SOV.bmp + airlinelogos/SPR.bmp + airlinelogos/SQC.bmp + airlinelogos/SQS.bmp + airlinelogos/SRR.bmp + airlinelogos/SSQ.bmp + airlinelogos/SSV.bmp + airlinelogos/SUS.bmp + airlinelogos/SVA.bmp + airlinelogos/SVR.bmp + airlinelogos/SWA.bmp + airlinelogos/SWAnew.bmp + airlinelogos/SWG.bmp + airlinelogos/SWM.bmp + airlinelogos/SWR.bmp + airlinelogos/SWT.bmp + airlinelogos/SXS.bmp + airlinelogos/SYL.bmp + airlinelogos/TAI.bmp + airlinelogos/TAK.bmp + airlinelogos/TAM.bmp + airlinelogos/TAO.bmp + airlinelogos/TAP.bmp + airlinelogos/TAR.bmp + airlinelogos/TAY.bmp + airlinelogos/TBA.bmp + airlinelogos/TBN.bmp + airlinelogos/TBZ.bmp + airlinelogos/TCV.bmp + airlinelogos/TCW.bmp + airlinelogos/TCX.bmp + airlinelogos/TDR.bmp + airlinelogos/TFL.bmp + airlinelogos/TGW.bmp + airlinelogos/TGZ.bmp + airlinelogos/THA.bmp + airlinelogos/THE.bmp + airlinelogos/THT.bmp + airlinelogos/THY.bmp + airlinelogos/THYANA.bmp + airlinelogos/TIA.bmp + airlinelogos/TIW.bmp + airlinelogos/TJK.bmp + airlinelogos/TJS.bmp + airlinelogos/TMA.bmp + airlinelogos/TMN.bmp + airlinelogos/TMW.bmp + airlinelogos/TNA.bmp + airlinelogos/TNO.bmp + airlinelogos/TOM.bmp + airlinelogos/TPA.bmp + airlinelogos/TPC.bmp + airlinelogos/TPU.bmp + airlinelogos/TRA.bmp + airlinelogos/TSC.bmp + airlinelogos/TSG.bmp + airlinelogos/TSH.bmp + airlinelogos/TSO.bmp + airlinelogos/TSY.bmp + airlinelogos/TTL.bmp + airlinelogos/TUA.bmp + airlinelogos/TUI.bmp + airlinelogos/TUS.bmp + airlinelogos/TUY.bmp + airlinelogos/TVF.bmp + airlinelogos/TVP.bmp + airlinelogos/TVQ.bmp + airlinelogos/TVS.bmp + airlinelogos/TWI.bmp + airlinelogos/UAE.bmp + airlinelogos/UAL.bmp + airlinelogos/UBD.bmp + airlinelogos/UCA.bmp + airlinelogos/UEA.bmp + airlinelogos/UJX.bmp + airlinelogos/ULG.bmp + airlinelogos/UPS.bmp + airlinelogos/URG.bmp + airlinelogos/URS.bmp + airlinelogos/UTA.bmp + airlinelogos/UTN.bmp + airlinelogos/UTP.bmp + airlinelogos/UTY.bmp + airlinelogos/UZB.bmp + airlinelogos/VAL.bmp + airlinelogos/VAR.bmp + airlinelogos/VAS.bmp + airlinelogos/VAU.bmp + airlinelogos/VAV.bmp + airlinelogos/VBB.bmp + airlinelogos/VBW.bmp + airlinelogos/VCV.bmp + airlinelogos/VDA.bmp + airlinelogos/VEL.bmp + airlinelogos/VFC.bmp + airlinelogos/VIL.bmp + airlinelogos/VIM.bmp + airlinelogos/VIR.bmp + airlinelogos/VIT.bmp + airlinelogos/VIV.bmp + airlinelogos/VJC.bmp + airlinelogos/VJS.bmp + airlinelogos/VKG.bmp + airlinelogos/VLG.bmp + airlinelogos/VLK.bmp + airlinelogos/VLM.bmp + airlinelogos/VMP.bmp + airlinelogos/VNE.bmp + airlinelogos/VNL.bmp + airlinelogos/VOE.bmp + airlinelogos/VOZ.bmp + airlinelogos/VPA.bmp + airlinelogos/VRD.bmp + airlinelogos/VRE.bmp + airlinelogos/VRG.bmp + airlinelogos/VSV.bmp + airlinelogos/VTA.bmp + airlinelogos/VTI.bmp + airlinelogos/VTM.bmp + airlinelogos/VUN.bmp + airlinelogos/VVC.bmp + airlinelogos/WAJ.bmp + airlinelogos/WDA.bmp + airlinelogos/WEN.bmp + airlinelogos/WEW.bmp + airlinelogos/WFR.bmp + airlinelogos/WIF.bmp + airlinelogos/WJA.bmp + airlinelogos/WLC.bmp + airlinelogos/WOW.bmp + airlinelogos/WRC.bmp + airlinelogos/WSG.bmp + airlinelogos/WUK.bmp + airlinelogos/WWW.bmp + airlinelogos/WZZ.bmp + airlinelogos/XAH.bmp + airlinelogos/XAX.bmp + airlinelogos/XLF.bmp + airlinelogos/XLR.bmp + airlinelogos/XME.bmp + airlinelogos/YZR.bmp + + diff --git a/plugins/channelrx/demodadsb/airlinelogos/5AH.bmp b/plugins/channelrx/demodadsb/airlinelogos/5AH.bmp new file mode 100644 index 000000000..0a17eb5f6 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/5AH.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AAF.bmp b/plugins/channelrx/demodadsb/airlinelogos/AAF.bmp new file mode 100644 index 000000000..9c3aa35a2 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AAF.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AAH.bmp b/plugins/channelrx/demodadsb/airlinelogos/AAH.bmp new file mode 100644 index 000000000..bd1e395b8 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AAH.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AAL.bmp b/plugins/channelrx/demodadsb/airlinelogos/AAL.bmp new file mode 100644 index 000000000..54efae32f Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AAL.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AAR.bmp b/plugins/channelrx/demodadsb/airlinelogos/AAR.bmp new file mode 100644 index 000000000..0acbbce6b Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AAR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AAW.bmp b/plugins/channelrx/demodadsb/airlinelogos/AAW.bmp new file mode 100644 index 000000000..4053a4a74 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AAW.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AAY.bmp b/plugins/channelrx/demodadsb/airlinelogos/AAY.bmp new file mode 100644 index 000000000..f0531a741 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AAY.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AAZ.bmp b/plugins/channelrx/demodadsb/airlinelogos/AAZ.bmp new file mode 100644 index 000000000..e4a39fcb9 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AAZ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ABB.bmp b/plugins/channelrx/demodadsb/airlinelogos/ABB.bmp new file mode 100644 index 000000000..0750048d1 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ABB.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ABD.bmp b/plugins/channelrx/demodadsb/airlinelogos/ABD.bmp new file mode 100644 index 000000000..32f40c976 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ABD.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ABG.bmp b/plugins/channelrx/demodadsb/airlinelogos/ABG.bmp new file mode 100644 index 000000000..77a7a1222 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ABG.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ABL.bmp b/plugins/channelrx/demodadsb/airlinelogos/ABL.bmp new file mode 100644 index 000000000..f3beca146 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ABL.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ABN.bmp b/plugins/channelrx/demodadsb/airlinelogos/ABN.bmp new file mode 100644 index 000000000..abca6ab0f Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ABN.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ABP.bmp b/plugins/channelrx/demodadsb/airlinelogos/ABP.bmp new file mode 100644 index 000000000..92820110f Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ABP.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ABQ.bmp b/plugins/channelrx/demodadsb/airlinelogos/ABQ.bmp new file mode 100644 index 000000000..745e81210 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ABQ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ABR.bmp b/plugins/channelrx/demodadsb/airlinelogos/ABR.bmp new file mode 100644 index 000000000..f66bcbc7d Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ABR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ABS.bmp b/plugins/channelrx/demodadsb/airlinelogos/ABS.bmp new file mode 100644 index 000000000..4e774f879 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ABS.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ABV.bmp b/plugins/channelrx/demodadsb/airlinelogos/ABV.bmp new file mode 100644 index 000000000..9c0e9c5c0 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ABV.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ABW.bmp b/plugins/channelrx/demodadsb/airlinelogos/ABW.bmp new file mode 100644 index 000000000..e6e9bd770 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ABW.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ABX.bmp b/plugins/channelrx/demodadsb/airlinelogos/ABX.bmp new file mode 100644 index 000000000..635eb4472 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ABX.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ABY.bmp b/plugins/channelrx/demodadsb/airlinelogos/ABY.bmp new file mode 100644 index 000000000..8d0f7c894 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ABY.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ACA.bmp b/plugins/channelrx/demodadsb/airlinelogos/ACA.bmp new file mode 100644 index 000000000..fa12f6507 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ACA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ACG.bmp b/plugins/channelrx/demodadsb/airlinelogos/ACG.bmp new file mode 100644 index 000000000..89cf115d2 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ACG.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ACI.bmp b/plugins/channelrx/demodadsb/airlinelogos/ACI.bmp new file mode 100644 index 000000000..3b720de0c Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ACI.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ACV.bmp b/plugins/channelrx/demodadsb/airlinelogos/ACV.bmp new file mode 100644 index 000000000..78ad1c756 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ACV.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ADN.bmp b/plugins/channelrx/demodadsb/airlinelogos/ADN.bmp new file mode 100644 index 000000000..1dd9d0417 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ADN.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ADY.bmp b/plugins/channelrx/demodadsb/airlinelogos/ADY.bmp new file mode 100644 index 000000000..8d0f7c894 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ADY.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AEA.bmp b/plugins/channelrx/demodadsb/airlinelogos/AEA.bmp new file mode 100644 index 000000000..d8d848b22 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AEA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AEE.bmp b/plugins/channelrx/demodadsb/airlinelogos/AEE.bmp new file mode 100644 index 000000000..ea5bc6455 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AEE.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AEG.bmp b/plugins/channelrx/demodadsb/airlinelogos/AEG.bmp new file mode 100644 index 000000000..f64140d3e Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AEG.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AEH.bmp b/plugins/channelrx/demodadsb/airlinelogos/AEH.bmp new file mode 100644 index 000000000..846814f16 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AEH.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AEI.bmp b/plugins/channelrx/demodadsb/airlinelogos/AEI.bmp new file mode 100644 index 000000000..04d3b6c47 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AEI.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AERORESCUE.bmp b/plugins/channelrx/demodadsb/airlinelogos/AERORESCUE.bmp new file mode 100644 index 000000000..768244c91 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AERORESCUE.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AFE.bmp b/plugins/channelrx/demodadsb/airlinelogos/AFE.bmp new file mode 100644 index 000000000..874b78ce3 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AFE.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AFG.bmp b/plugins/channelrx/demodadsb/airlinelogos/AFG.bmp new file mode 100644 index 000000000..084744741 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AFG.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AFL.bmp b/plugins/channelrx/demodadsb/airlinelogos/AFL.bmp new file mode 100644 index 000000000..d0ff2cdfa Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AFL.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AFR.bmp b/plugins/channelrx/demodadsb/airlinelogos/AFR.bmp new file mode 100644 index 000000000..073351d4a Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AFR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AFW.bmp b/plugins/channelrx/demodadsb/airlinelogos/AFW.bmp new file mode 100644 index 000000000..b6adb2b50 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AFW.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AGF.bmp b/plugins/channelrx/demodadsb/airlinelogos/AGF.bmp new file mode 100644 index 000000000..16c6ff570 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AGF.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AGO.bmp b/plugins/channelrx/demodadsb/airlinelogos/AGO.bmp new file mode 100644 index 000000000..8f369ff90 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AGO.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AGU.bmp b/plugins/channelrx/demodadsb/airlinelogos/AGU.bmp new file mode 100644 index 000000000..6c97c71e1 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AGU.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AHK.bmp b/plugins/channelrx/demodadsb/airlinelogos/AHK.bmp new file mode 100644 index 000000000..c3e4c8d7c Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AHK.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AHO.bmp b/plugins/channelrx/demodadsb/airlinelogos/AHO.bmp new file mode 100644 index 000000000..e75830a87 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AHO.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AHY.bmp b/plugins/channelrx/demodadsb/airlinelogos/AHY.bmp new file mode 100644 index 000000000..c88ba8eb8 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AHY.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AIB.bmp b/plugins/channelrx/demodadsb/airlinelogos/AIB.bmp new file mode 100644 index 000000000..53f9b49fd Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AIB.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AIC.bmp b/plugins/channelrx/demodadsb/airlinelogos/AIC.bmp new file mode 100644 index 000000000..5333a3b60 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AIC.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AIE.bmp b/plugins/channelrx/demodadsb/airlinelogos/AIE.bmp new file mode 100644 index 000000000..d13d99e4a Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AIE.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AIH.bmp b/plugins/channelrx/demodadsb/airlinelogos/AIH.bmp new file mode 100644 index 000000000..9883a8928 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AIH.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AIRCOSTA.bmp b/plugins/channelrx/demodadsb/airlinelogos/AIRCOSTA.bmp new file mode 100644 index 000000000..af75b9953 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AIRCOSTA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AIZ.bmp b/plugins/channelrx/demodadsb/airlinelogos/AIZ.bmp new file mode 100644 index 000000000..6d99c8f49 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AIZ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AJA.bmp b/plugins/channelrx/demodadsb/airlinelogos/AJA.bmp new file mode 100644 index 000000000..f64160fd7 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AJA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AJB.bmp b/plugins/channelrx/demodadsb/airlinelogos/AJB.bmp new file mode 100644 index 000000000..962194386 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AJB.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AJD.bmp b/plugins/channelrx/demodadsb/airlinelogos/AJD.bmp new file mode 100644 index 000000000..8103d0ccc Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AJD.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AJI.bmp b/plugins/channelrx/demodadsb/airlinelogos/AJI.bmp new file mode 100644 index 000000000..133b1713d Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AJI.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AJK.bmp b/plugins/channelrx/demodadsb/airlinelogos/AJK.bmp new file mode 100644 index 000000000..4437d6ae2 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AJK.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AJT.bmp b/plugins/channelrx/demodadsb/airlinelogos/AJT.bmp new file mode 100644 index 000000000..d1a6a2123 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AJT.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AKC.bmp b/plugins/channelrx/demodadsb/airlinelogos/AKC.bmp new file mode 100644 index 000000000..06b81df6c Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AKC.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ALV.bmp b/plugins/channelrx/demodadsb/airlinelogos/ALV.bmp new file mode 100644 index 000000000..1155fd8ee Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ALV.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ALW.bmp b/plugins/channelrx/demodadsb/airlinelogos/ALW.bmp new file mode 100644 index 000000000..e552f3ed0 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ALW.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ALX.bmp b/plugins/channelrx/demodadsb/airlinelogos/ALX.bmp new file mode 100644 index 000000000..3366f37df Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ALX.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ALY.bmp b/plugins/channelrx/demodadsb/airlinelogos/ALY.bmp new file mode 100644 index 000000000..a1509351d Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ALY.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AMC.bmp b/plugins/channelrx/demodadsb/airlinelogos/AMC.bmp new file mode 100644 index 000000000..c824701b5 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AMC.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AMU.bmp b/plugins/channelrx/demodadsb/airlinelogos/AMU.bmp new file mode 100644 index 000000000..bcb2be6d8 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AMU.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AMV.bmp b/plugins/channelrx/demodadsb/airlinelogos/AMV.bmp new file mode 100644 index 000000000..07c0fa796 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AMV.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AMX.bmp b/plugins/channelrx/demodadsb/airlinelogos/AMX.bmp new file mode 100644 index 000000000..157e8899d Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AMX.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AMY.bmp b/plugins/channelrx/demodadsb/airlinelogos/AMY.bmp new file mode 100644 index 000000000..b186b5e0e Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AMY.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ANA.bmp b/plugins/channelrx/demodadsb/airlinelogos/ANA.bmp new file mode 100644 index 000000000..0052982df Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ANA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AND.bmp b/plugins/channelrx/demodadsb/airlinelogos/AND.bmp new file mode 100644 index 000000000..42e7c8da3 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AND.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ANE.bmp b/plugins/channelrx/demodadsb/airlinelogos/ANE.bmp new file mode 100644 index 000000000..fa932e872 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ANE.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ANG.bmp b/plugins/channelrx/demodadsb/airlinelogos/ANG.bmp new file mode 100644 index 000000000..9432df543 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ANG.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ANK.bmp b/plugins/channelrx/demodadsb/airlinelogos/ANK.bmp new file mode 100644 index 000000000..b78f1b8e1 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ANK.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ANO.bmp b/plugins/channelrx/demodadsb/airlinelogos/ANO.bmp new file mode 100644 index 000000000..4f3683349 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ANO.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ANQ.bmp b/plugins/channelrx/demodadsb/airlinelogos/ANQ.bmp new file mode 100644 index 000000000..c086ec582 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ANQ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ANR.bmp b/plugins/channelrx/demodadsb/airlinelogos/ANR.bmp new file mode 100644 index 000000000..6541ed454 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ANR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ANS.bmp b/plugins/channelrx/demodadsb/airlinelogos/ANS.bmp new file mode 100644 index 000000000..83f179610 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ANS.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ANT.bmp b/plugins/channelrx/demodadsb/airlinelogos/ANT.bmp new file mode 100644 index 000000000..b0551a923 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ANT.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ANZ.bmp b/plugins/channelrx/demodadsb/airlinelogos/ANZ.bmp new file mode 100644 index 000000000..31913d5e7 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ANZ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AOJ.bmp b/plugins/channelrx/demodadsb/airlinelogos/AOJ.bmp new file mode 100644 index 000000000..aa51e5a83 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AOJ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/APF.bmp b/plugins/channelrx/demodadsb/airlinelogos/APF.bmp new file mode 100644 index 000000000..469c00344 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/APF.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/APG.bmp b/plugins/channelrx/demodadsb/airlinelogos/APG.bmp new file mode 100644 index 000000000..277c280c0 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/APG.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/APJ.bmp b/plugins/channelrx/demodadsb/airlinelogos/APJ.bmp new file mode 100644 index 000000000..4d31bef2a Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/APJ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/APK.bmp b/plugins/channelrx/demodadsb/airlinelogos/APK.bmp new file mode 100644 index 000000000..4551ccfdb Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/APK.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/APZ.bmp b/plugins/channelrx/demodadsb/airlinelogos/APZ.bmp new file mode 100644 index 000000000..8773c8a5a Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/APZ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ARA.bmp b/plugins/channelrx/demodadsb/airlinelogos/ARA.bmp new file mode 100644 index 000000000..eb585d2a1 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ARA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ARE.bmp b/plugins/channelrx/demodadsb/airlinelogos/ARE.bmp new file mode 100644 index 000000000..44e8a61e0 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ARE.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ARG.bmp b/plugins/channelrx/demodadsb/airlinelogos/ARG.bmp new file mode 100644 index 000000000..128feb974 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ARG.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ARK.bmp b/plugins/channelrx/demodadsb/airlinelogos/ARK.bmp new file mode 100644 index 000000000..b40e5de31 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ARK.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ARN.bmp b/plugins/channelrx/demodadsb/airlinelogos/ARN.bmp new file mode 100644 index 000000000..0db08f6c5 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ARN.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ARR.bmp b/plugins/channelrx/demodadsb/airlinelogos/ARR.bmp new file mode 100644 index 000000000..5178eceb0 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ARR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ARU.bmp b/plugins/channelrx/demodadsb/airlinelogos/ARU.bmp new file mode 100644 index 000000000..0f9e8b668 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ARU.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ARZ.bmp b/plugins/channelrx/demodadsb/airlinelogos/ARZ.bmp new file mode 100644 index 000000000..9159c525e Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ARZ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ASA.bmp b/plugins/channelrx/demodadsb/airlinelogos/ASA.bmp new file mode 100644 index 000000000..41fce0061 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ASA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ASB.bmp b/plugins/channelrx/demodadsb/airlinelogos/ASB.bmp new file mode 100644 index 000000000..3c1cf0e88 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ASB.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ASH.bmp b/plugins/channelrx/demodadsb/airlinelogos/ASH.bmp new file mode 100644 index 000000000..ea6009226 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ASH.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ASL.bmp b/plugins/channelrx/demodadsb/airlinelogos/ASL.bmp new file mode 100644 index 000000000..a5ad3bd2a Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ASL.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ASQ.bmp b/plugins/channelrx/demodadsb/airlinelogos/ASQ.bmp new file mode 100644 index 000000000..75ada852a Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ASQ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ASV.bmp b/plugins/channelrx/demodadsb/airlinelogos/ASV.bmp new file mode 100644 index 000000000..61915eb5b Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ASV.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ASY.bmp b/plugins/channelrx/demodadsb/airlinelogos/ASY.bmp new file mode 100644 index 000000000..ed839a256 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ASY.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ATC.bmp b/plugins/channelrx/demodadsb/airlinelogos/ATC.bmp new file mode 100644 index 000000000..a8f8e4c9a Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ATC.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ATG.bmp b/plugins/channelrx/demodadsb/airlinelogos/ATG.bmp new file mode 100644 index 000000000..7659f0060 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ATG.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ATN.bmp b/plugins/channelrx/demodadsb/airlinelogos/ATN.bmp new file mode 100644 index 000000000..890f29ebc Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ATN.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ATR.bmp b/plugins/channelrx/demodadsb/airlinelogos/ATR.bmp new file mode 100644 index 000000000..dc6898c61 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ATR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ATV.bmp b/plugins/channelrx/demodadsb/airlinelogos/ATV.bmp new file mode 100644 index 000000000..17b574860 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ATV.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ATW.bmp b/plugins/channelrx/demodadsb/airlinelogos/ATW.bmp new file mode 100644 index 000000000..c8553927c Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ATW.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ATX.bmp b/plugins/channelrx/demodadsb/airlinelogos/ATX.bmp new file mode 100644 index 000000000..9306919a6 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ATX.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AUA.bmp b/plugins/channelrx/demodadsb/airlinelogos/AUA.bmp new file mode 100644 index 000000000..7396adb2c Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AUA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AUI.bmp b/plugins/channelrx/demodadsb/airlinelogos/AUI.bmp new file mode 100644 index 000000000..e59e210e3 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AUI.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AUL.bmp b/plugins/channelrx/demodadsb/airlinelogos/AUL.bmp new file mode 100644 index 000000000..606fa25eb Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AUL.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AUR.bmp b/plugins/channelrx/demodadsb/airlinelogos/AUR.bmp new file mode 100644 index 000000000..0a32b25cf Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AUR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AUS5.bmp b/plugins/channelrx/demodadsb/airlinelogos/AUS5.bmp new file mode 100644 index 000000000..404e2c16b Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AUS5.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AUT.bmp b/plugins/channelrx/demodadsb/airlinelogos/AUT.bmp new file mode 100644 index 000000000..be78d3f8f Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AUT.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AVA.bmp b/plugins/channelrx/demodadsb/airlinelogos/AVA.bmp new file mode 100644 index 000000000..0a17eb5f6 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AVA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AVJ.bmp b/plugins/channelrx/demodadsb/airlinelogos/AVJ.bmp new file mode 100644 index 000000000..800923eb4 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AVJ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AVN.bmp b/plugins/channelrx/demodadsb/airlinelogos/AVN.bmp new file mode 100644 index 000000000..87432e5ee Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AVN.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AVV.bmp b/plugins/channelrx/demodadsb/airlinelogos/AVV.bmp new file mode 100644 index 000000000..81ce565a8 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AVV.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AVW.bmp b/plugins/channelrx/demodadsb/airlinelogos/AVW.bmp new file mode 100644 index 000000000..99dc27f10 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AVW.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AWE.bmp b/plugins/channelrx/demodadsb/airlinelogos/AWE.bmp new file mode 100644 index 000000000..26b1062b4 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AWE.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AWG.bmp b/plugins/channelrx/demodadsb/airlinelogos/AWG.bmp new file mode 100644 index 000000000..ccf4e5046 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AWG.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AWI.bmp b/plugins/channelrx/demodadsb/airlinelogos/AWI.bmp new file mode 100644 index 000000000..05f81dc67 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AWI.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AWK.bmp b/plugins/channelrx/demodadsb/airlinelogos/AWK.bmp new file mode 100644 index 000000000..1cb4a8c56 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AWK.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AWM.bmp b/plugins/channelrx/demodadsb/airlinelogos/AWM.bmp new file mode 100644 index 000000000..7735bb401 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AWM.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AWT.bmp b/plugins/channelrx/demodadsb/airlinelogos/AWT.bmp new file mode 100644 index 000000000..b7a3fda41 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AWT.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AXB.bmp b/plugins/channelrx/demodadsb/airlinelogos/AXB.bmp new file mode 100644 index 000000000..9f4ef0375 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AXB.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AXE.bmp b/plugins/channelrx/demodadsb/airlinelogos/AXE.bmp new file mode 100644 index 000000000..5c14d9caa Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AXE.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AXK.bmp b/plugins/channelrx/demodadsb/airlinelogos/AXK.bmp new file mode 100644 index 000000000..59eaa9e01 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AXK.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AXM.bmp b/plugins/channelrx/demodadsb/airlinelogos/AXM.bmp new file mode 100644 index 000000000..277c280c0 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AXM.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AXU.bmp b/plugins/channelrx/demodadsb/airlinelogos/AXU.bmp new file mode 100644 index 000000000..2bd0afe16 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AXU.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AYG.bmp b/plugins/channelrx/demodadsb/airlinelogos/AYG.bmp new file mode 100644 index 000000000..2b2d6ffc7 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AYG.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AYT.bmp b/plugins/channelrx/demodadsb/airlinelogos/AYT.bmp new file mode 100644 index 000000000..3b15c3551 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AYT.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AZA.bmp b/plugins/channelrx/demodadsb/airlinelogos/AZA.bmp new file mode 100644 index 000000000..b4d138d00 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AZA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AZG.bmp b/plugins/channelrx/demodadsb/airlinelogos/AZG.bmp new file mode 100644 index 000000000..233b547b5 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AZG.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AZI.bmp b/plugins/channelrx/demodadsb/airlinelogos/AZI.bmp new file mode 100644 index 000000000..33c669e23 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AZI.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AZM.bmp b/plugins/channelrx/demodadsb/airlinelogos/AZM.bmp new file mode 100644 index 000000000..0f32fcf29 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AZM.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AZN.bmp b/plugins/channelrx/demodadsb/airlinelogos/AZN.bmp new file mode 100644 index 000000000..8397369a2 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AZN.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AZO.bmp b/plugins/channelrx/demodadsb/airlinelogos/AZO.bmp new file mode 100644 index 000000000..12a29722b Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AZO.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AZQ.bmp b/plugins/channelrx/demodadsb/airlinelogos/AZQ.bmp new file mode 100644 index 000000000..75e695135 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AZQ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AZU.bmp b/plugins/channelrx/demodadsb/airlinelogos/AZU.bmp new file mode 100644 index 000000000..17ca15164 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AZU.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AZV.bmp b/plugins/channelrx/demodadsb/airlinelogos/AZV.bmp new file mode 100644 index 000000000..c77541f05 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AZV.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/AZW.bmp b/plugins/channelrx/demodadsb/airlinelogos/AZW.bmp new file mode 100644 index 000000000..7cc97649a Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/AZW.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BAW.bmp b/plugins/channelrx/demodadsb/airlinelogos/BAW.bmp new file mode 100644 index 000000000..dbdbeac3f Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BAW.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BBC.bmp b/plugins/channelrx/demodadsb/airlinelogos/BBC.bmp new file mode 100644 index 000000000..c99c752c1 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BBC.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BBD.bmp b/plugins/channelrx/demodadsb/airlinelogos/BBD.bmp new file mode 100644 index 000000000..d7c7301d5 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BBD.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BBG.bmp b/plugins/channelrx/demodadsb/airlinelogos/BBG.bmp new file mode 100644 index 000000000..297bfd56c Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BBG.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BCI.bmp b/plugins/channelrx/demodadsb/airlinelogos/BCI.bmp new file mode 100644 index 000000000..f05887335 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BCI.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BCY.bmp b/plugins/channelrx/demodadsb/airlinelogos/BCY.bmp new file mode 100644 index 000000000..ed32c8521 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BCY.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BDA.bmp b/plugins/channelrx/demodadsb/airlinelogos/BDA.bmp new file mode 100644 index 000000000..aa6988f02 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BDA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BEE.bmp b/plugins/channelrx/demodadsb/airlinelogos/BEE.bmp new file mode 100644 index 000000000..5c76a9091 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BEE.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BEL.bmp b/plugins/channelrx/demodadsb/airlinelogos/BEL.bmp new file mode 100644 index 000000000..2527ca8f6 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BEL.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BER.bmp b/plugins/channelrx/demodadsb/airlinelogos/BER.bmp new file mode 100644 index 000000000..b96820b55 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BER.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BGA.bmp b/plugins/channelrx/demodadsb/airlinelogos/BGA.bmp new file mode 100644 index 000000000..3e66bc49d Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BGA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BGH.bmp b/plugins/channelrx/demodadsb/airlinelogos/BGH.bmp new file mode 100644 index 000000000..ab579c0f1 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BGH.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BGL.bmp b/plugins/channelrx/demodadsb/airlinelogos/BGL.bmp new file mode 100644 index 000000000..302006a2e Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BGL.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BGY.bmp b/plugins/channelrx/demodadsb/airlinelogos/BGY.bmp new file mode 100644 index 000000000..e815f2b6e Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BGY.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BHA.bmp b/plugins/channelrx/demodadsb/airlinelogos/BHA.bmp new file mode 100644 index 000000000..0d23df381 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BHA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BHP.bmp b/plugins/channelrx/demodadsb/airlinelogos/BHP.bmp new file mode 100644 index 000000000..5c69b32eb Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BHP.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BIE.bmp b/plugins/channelrx/demodadsb/airlinelogos/BIE.bmp new file mode 100644 index 000000000..f308be1dd Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BIE.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BLF.bmp b/plugins/channelrx/demodadsb/airlinelogos/BLF.bmp new file mode 100644 index 000000000..ec7d154b0 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BLF.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BLX.bmp b/plugins/channelrx/demodadsb/airlinelogos/BLX.bmp new file mode 100644 index 000000000..ece5525f6 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BLX.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BMR.bmp b/plugins/channelrx/demodadsb/airlinelogos/BMR.bmp new file mode 100644 index 000000000..b312f7cea Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BMR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BOE.bmp b/plugins/channelrx/demodadsb/airlinelogos/BOE.bmp new file mode 100644 index 000000000..3ec15d385 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BOE.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BON.bmp b/plugins/channelrx/demodadsb/airlinelogos/BON.bmp new file mode 100644 index 000000000..a59d10e0b Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BON.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BOS.bmp b/plugins/channelrx/demodadsb/airlinelogos/BOS.bmp new file mode 100644 index 000000000..45bdd76b3 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BOS.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BOT.bmp b/plugins/channelrx/demodadsb/airlinelogos/BOT.bmp new file mode 100644 index 000000000..b8ea37fd4 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BOT.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BOV.bmp b/plugins/channelrx/demodadsb/airlinelogos/BOV.bmp new file mode 100644 index 000000000..84a34c142 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BOV.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BOX.bmp b/plugins/channelrx/demodadsb/airlinelogos/BOX.bmp new file mode 100644 index 000000000..3459fa515 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BOX.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BQB.bmp b/plugins/channelrx/demodadsb/airlinelogos/BQB.bmp new file mode 100644 index 000000000..004e761db Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BQB.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BRINDABELLA.bmp b/plugins/channelrx/demodadsb/airlinelogos/BRINDABELLA.bmp new file mode 100644 index 000000000..7b3beae98 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BRINDABELLA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BRJ.bmp b/plugins/channelrx/demodadsb/airlinelogos/BRJ.bmp new file mode 100644 index 000000000..81e2ace8c Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BRJ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BRQ.bmp b/plugins/channelrx/demodadsb/airlinelogos/BRQ.bmp new file mode 100644 index 000000000..d9d4f10a0 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BRQ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BRU.bmp b/plugins/channelrx/demodadsb/airlinelogos/BRU.bmp new file mode 100644 index 000000000..22936762f Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BRU.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BRXb.bmp b/plugins/channelrx/demodadsb/airlinelogos/BRXb.bmp new file mode 100644 index 000000000..b9ee6e887 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BRXb.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BSK.bmp b/plugins/channelrx/demodadsb/airlinelogos/BSK.bmp new file mode 100644 index 000000000..89cff6a72 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BSK.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BTI.bmp b/plugins/channelrx/demodadsb/airlinelogos/BTI.bmp new file mode 100644 index 000000000..b369eb423 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BTI.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BTN.bmp b/plugins/channelrx/demodadsb/airlinelogos/BTN.bmp new file mode 100644 index 000000000..997eff7e0 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BTN.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BTQ.bmp b/plugins/channelrx/demodadsb/airlinelogos/BTQ.bmp new file mode 100644 index 000000000..b95adc323 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BTQ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BUC.bmp b/plugins/channelrx/demodadsb/airlinelogos/BUC.bmp new file mode 100644 index 000000000..3014ea712 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BUC.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BUR.bmp b/plugins/channelrx/demodadsb/airlinelogos/BUR.bmp new file mode 100644 index 000000000..180fc4e4b Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BUR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BVR.bmp b/plugins/channelrx/demodadsb/airlinelogos/BVR.bmp new file mode 100644 index 000000000..c67d4d9b0 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BVR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BXA.bmp b/plugins/channelrx/demodadsb/airlinelogos/BXA.bmp new file mode 100644 index 000000000..3f5dbc23e Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BXA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BYR.bmp b/plugins/channelrx/demodadsb/airlinelogos/BYR.bmp new file mode 100644 index 000000000..6f91319ad Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BYR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/BZH.bmp b/plugins/channelrx/demodadsb/airlinelogos/BZH.bmp new file mode 100644 index 000000000..9fe4621d4 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/BZH.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CAD.bmp b/plugins/channelrx/demodadsb/airlinelogos/CAD.bmp new file mode 100644 index 000000000..c4e95c59e Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CAD.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CAI.bmp b/plugins/channelrx/demodadsb/airlinelogos/CAI.bmp new file mode 100644 index 000000000..810b215ed Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CAI.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CAO.bmp b/plugins/channelrx/demodadsb/airlinelogos/CAO.bmp new file mode 100644 index 000000000..3d322eccf Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CAO.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CAV.bmp b/plugins/channelrx/demodadsb/airlinelogos/CAV.bmp new file mode 100644 index 000000000..20bfa7d73 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CAV.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CAY.bmp b/plugins/channelrx/demodadsb/airlinelogos/CAY.bmp new file mode 100644 index 000000000..60b66a5db Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CAY.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CBJ.bmp b/plugins/channelrx/demodadsb/airlinelogos/CBJ.bmp new file mode 100644 index 000000000..3c505ca54 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CBJ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CCA.bmp b/plugins/channelrx/demodadsb/airlinelogos/CCA.bmp new file mode 100644 index 000000000..3d4577705 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CCA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CCD.bmp b/plugins/channelrx/demodadsb/airlinelogos/CCD.bmp new file mode 100644 index 000000000..07513c239 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CCD.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CCE.bmp b/plugins/channelrx/demodadsb/airlinelogos/CCE.bmp new file mode 100644 index 000000000..d8c1f5b13 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CCE.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CCM.bmp b/plugins/channelrx/demodadsb/airlinelogos/CCM.bmp new file mode 100644 index 000000000..715d5a05f Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CCM.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CDA.bmp b/plugins/channelrx/demodadsb/airlinelogos/CDA.bmp new file mode 100644 index 000000000..d1011cf16 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CDA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CDC.bmp b/plugins/channelrx/demodadsb/airlinelogos/CDC.bmp new file mode 100644 index 000000000..b416086f7 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CDC.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CDG.bmp b/plugins/channelrx/demodadsb/airlinelogos/CDG.bmp new file mode 100644 index 000000000..f3b193497 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CDG.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CEB.bmp b/plugins/channelrx/demodadsb/airlinelogos/CEB.bmp new file mode 100644 index 000000000..430bbd4ef Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CEB.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CEL.bmp b/plugins/channelrx/demodadsb/airlinelogos/CEL.bmp new file mode 100644 index 000000000..1e6a68f9b Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CEL.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CES.bmp b/plugins/channelrx/demodadsb/airlinelogos/CES.bmp new file mode 100644 index 000000000..6737e3d22 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CES.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CEY.bmp b/plugins/channelrx/demodadsb/airlinelogos/CEY.bmp new file mode 100644 index 000000000..3a07ead7b Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CEY.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CFE.bmp b/plugins/channelrx/demodadsb/airlinelogos/CFE.bmp new file mode 100644 index 000000000..0f41d6a1c Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CFE.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CFG.bmp b/plugins/channelrx/demodadsb/airlinelogos/CFG.bmp new file mode 100644 index 000000000..55bef69c5 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CFG.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CGF.bmp b/plugins/channelrx/demodadsb/airlinelogos/CGF.bmp new file mode 100644 index 000000000..63cfdd677 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CGF.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CGH.bmp b/plugins/channelrx/demodadsb/airlinelogos/CGH.bmp new file mode 100644 index 000000000..f98f49fc7 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CGH.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CGN.bmp b/plugins/channelrx/demodadsb/airlinelogos/CGN.bmp new file mode 100644 index 000000000..ec9e8dc0f Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CGN.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CHB.bmp b/plugins/channelrx/demodadsb/airlinelogos/CHB.bmp new file mode 100644 index 000000000..5e553ec5d Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CHB.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CHH.bmp b/plugins/channelrx/demodadsb/airlinelogos/CHH.bmp new file mode 100644 index 000000000..af9964e2f Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CHH.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CIM.bmp b/plugins/channelrx/demodadsb/airlinelogos/CIM.bmp new file mode 100644 index 000000000..38f06b1bd Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CIM.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CJA.bmp b/plugins/channelrx/demodadsb/airlinelogos/CJA.bmp new file mode 100644 index 000000000..6a2735f09 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CJA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CJC.bmp b/plugins/channelrx/demodadsb/airlinelogos/CJC.bmp new file mode 100644 index 000000000..e332fc153 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CJC.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CJT.bmp b/plugins/channelrx/demodadsb/airlinelogos/CJT.bmp new file mode 100644 index 000000000..8e5210ad9 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CJT.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CKK.bmp b/plugins/channelrx/demodadsb/airlinelogos/CKK.bmp new file mode 100644 index 000000000..ac4c7e72f Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CKK.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CKS.bmp b/plugins/channelrx/demodadsb/airlinelogos/CKS.bmp new file mode 100644 index 000000000..a0bac2b27 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CKS.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CLG.bmp b/plugins/channelrx/demodadsb/airlinelogos/CLG.bmp new file mode 100644 index 000000000..e4fd7952f Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CLG.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CLX.bmp b/plugins/channelrx/demodadsb/airlinelogos/CLX.bmp new file mode 100644 index 000000000..105cfc272 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CLX.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CMM.bmp b/plugins/channelrx/demodadsb/airlinelogos/CMM.bmp new file mode 100644 index 000000000..db39a26cf Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CMM.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CND.bmp b/plugins/channelrx/demodadsb/airlinelogos/CND.bmp new file mode 100644 index 000000000..8eb512d9c Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CND.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CNK.bmp b/plugins/channelrx/demodadsb/airlinelogos/CNK.bmp new file mode 100644 index 000000000..0d65336c5 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CNK.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CON1.bmp b/plugins/channelrx/demodadsb/airlinelogos/CON1.bmp new file mode 100644 index 000000000..9fb631e0b Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CON1.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/COT.bmp b/plugins/channelrx/demodadsb/airlinelogos/COT.bmp new file mode 100644 index 000000000..63f3d9bc9 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/COT.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CPA.bmp b/plugins/channelrx/demodadsb/airlinelogos/CPA.bmp new file mode 100644 index 000000000..4c042df7e Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CPA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CPN.bmp b/plugins/channelrx/demodadsb/airlinelogos/CPN.bmp new file mode 100644 index 000000000..f5c3fd7b8 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CPN.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CPZ.bmp b/plugins/channelrx/demodadsb/airlinelogos/CPZ.bmp new file mode 100644 index 000000000..d92bb2021 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CPZ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CQH.bmp b/plugins/channelrx/demodadsb/airlinelogos/CQH.bmp new file mode 100644 index 000000000..79505b803 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CQH.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CQN.bmp b/plugins/channelrx/demodadsb/airlinelogos/CQN.bmp new file mode 100644 index 000000000..3a5c006c1 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CQN.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CRC.bmp b/plugins/channelrx/demodadsb/airlinelogos/CRC.bmp new file mode 100644 index 000000000..cf1a5e0f5 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CRC.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CRL.bmp b/plugins/channelrx/demodadsb/airlinelogos/CRL.bmp new file mode 100644 index 000000000..b164f95d8 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CRL.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CRN.bmp b/plugins/channelrx/demodadsb/airlinelogos/CRN.bmp new file mode 100644 index 000000000..8cec12da8 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CRN.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CRO.bmp b/plugins/channelrx/demodadsb/airlinelogos/CRO.bmp new file mode 100644 index 000000000..f09bb8362 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CRO.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CRQ.bmp b/plugins/channelrx/demodadsb/airlinelogos/CRQ.bmp new file mode 100644 index 000000000..aece39a03 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CRQ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CRUZ.bmp b/plugins/channelrx/demodadsb/airlinelogos/CRUZ.bmp new file mode 100644 index 000000000..b9f2a92a6 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CRUZ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CSA.bmp b/plugins/channelrx/demodadsb/airlinelogos/CSA.bmp new file mode 100644 index 000000000..d1c1a7145 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CSA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CSC.bmp b/plugins/channelrx/demodadsb/airlinelogos/CSC.bmp new file mode 100644 index 000000000..b95ca9252 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CSC.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CSH.bmp b/plugins/channelrx/demodadsb/airlinelogos/CSH.bmp new file mode 100644 index 000000000..2da7e1826 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CSH.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CSN.bmp b/plugins/channelrx/demodadsb/airlinelogos/CSN.bmp new file mode 100644 index 000000000..65e825807 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CSN.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CSS.bmp b/plugins/channelrx/demodadsb/airlinelogos/CSS.bmp new file mode 100644 index 000000000..b96e88e18 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CSS.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CSZ.bmp b/plugins/channelrx/demodadsb/airlinelogos/CSZ.bmp new file mode 100644 index 000000000..ce5cf13b3 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CSZ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CTM.bmp b/plugins/channelrx/demodadsb/airlinelogos/CTM.bmp new file mode 100644 index 000000000..d83ebb196 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CTM.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CTN.bmp b/plugins/channelrx/demodadsb/airlinelogos/CTN.bmp new file mode 100644 index 000000000..5c84f3076 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CTN.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CUA.bmp b/plugins/channelrx/demodadsb/airlinelogos/CUA.bmp new file mode 100644 index 000000000..3c1ca4eca Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CUA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CUB.bmp b/plugins/channelrx/demodadsb/airlinelogos/CUB.bmp new file mode 100644 index 000000000..f118b7c84 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CUB.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CVA.bmp b/plugins/channelrx/demodadsb/airlinelogos/CVA.bmp new file mode 100644 index 000000000..d36d5b2aa Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CVA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CWC.bmp b/plugins/channelrx/demodadsb/airlinelogos/CWC.bmp new file mode 100644 index 000000000..3082d4217 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CWC.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CXA.bmp b/plugins/channelrx/demodadsb/airlinelogos/CXA.bmp new file mode 100644 index 000000000..2e3ac9c99 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CXA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CXB.bmp b/plugins/channelrx/demodadsb/airlinelogos/CXB.bmp new file mode 100644 index 000000000..f5d19fd99 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CXB.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CXH.bmp b/plugins/channelrx/demodadsb/airlinelogos/CXH.bmp new file mode 100644 index 000000000..e72793de1 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CXH.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CYL.bmp b/plugins/channelrx/demodadsb/airlinelogos/CYL.bmp new file mode 100644 index 000000000..6e8766a39 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CYL.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CYP.bmp b/plugins/channelrx/demodadsb/airlinelogos/CYP.bmp new file mode 100644 index 000000000..2624c030c Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CYP.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/CYZ.bmp b/plugins/channelrx/demodadsb/airlinelogos/CYZ.bmp new file mode 100644 index 000000000..899568d82 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/CYZ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/DAC.bmp b/plugins/channelrx/demodadsb/airlinelogos/DAC.bmp new file mode 100644 index 000000000..02562eafb Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/DAC.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/DAH.bmp b/plugins/channelrx/demodadsb/airlinelogos/DAH.bmp new file mode 100644 index 000000000..ea038a20e Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/DAH.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/DAL.bmp b/plugins/channelrx/demodadsb/airlinelogos/DAL.bmp new file mode 100644 index 000000000..948928303 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/DAL.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/DAO.bmp b/plugins/channelrx/demodadsb/airlinelogos/DAO.bmp new file mode 100644 index 000000000..32e08e04c Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/DAO.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/DAP.bmp b/plugins/channelrx/demodadsb/airlinelogos/DAP.bmp new file mode 100644 index 000000000..1ea1f42be Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/DAP.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/DCS.bmp b/plugins/channelrx/demodadsb/airlinelogos/DCS.bmp new file mode 100644 index 000000000..121efcb82 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/DCS.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/DER.bmp b/plugins/channelrx/demodadsb/airlinelogos/DER.bmp new file mode 100644 index 000000000..25c388a63 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/DER.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/DHL.bmp b/plugins/channelrx/demodadsb/airlinelogos/DHL.bmp new file mode 100644 index 000000000..246bb2629 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/DHL.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/DHX.bmp b/plugins/channelrx/demodadsb/airlinelogos/DHX.bmp new file mode 100644 index 000000000..3508d9174 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/DHX.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/DJT.bmp b/plugins/channelrx/demodadsb/airlinelogos/DJT.bmp new file mode 100644 index 000000000..6443d9e22 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/DJT.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/DJU.bmp b/plugins/channelrx/demodadsb/airlinelogos/DJU.bmp new file mode 100644 index 000000000..4bbb1a90e Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/DJU.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/DKH.bmp b/plugins/channelrx/demodadsb/airlinelogos/DKH.bmp new file mode 100644 index 000000000..5fef37465 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/DKH.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/DLA.bmp b/plugins/channelrx/demodadsb/airlinelogos/DLA.bmp new file mode 100644 index 000000000..dca6bb931 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/DLA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/DLH.bmp b/plugins/channelrx/demodadsb/airlinelogos/DLH.bmp new file mode 100644 index 000000000..157454322 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/DLH.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/DNV.bmp b/plugins/channelrx/demodadsb/airlinelogos/DNV.bmp new file mode 100644 index 000000000..074ee4f58 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/DNV.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/DOB.bmp b/plugins/channelrx/demodadsb/airlinelogos/DOB.bmp new file mode 100644 index 000000000..1f0cc6fb3 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/DOB.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/DQI.bmp b/plugins/channelrx/demodadsb/airlinelogos/DQI.bmp new file mode 100644 index 000000000..064cb9198 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/DQI.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/DRK.bmp b/plugins/channelrx/demodadsb/airlinelogos/DRK.bmp new file mode 100644 index 000000000..b2b88e9c2 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/DRK.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/DRU.bmp b/plugins/channelrx/demodadsb/airlinelogos/DRU.bmp new file mode 100644 index 000000000..38b121117 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/DRU.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/DSM.bmp b/plugins/channelrx/demodadsb/airlinelogos/DSM.bmp new file mode 100644 index 000000000..3d1c331b4 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/DSM.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/DTA.bmp b/plugins/channelrx/demodadsb/airlinelogos/DTA.bmp new file mode 100644 index 000000000..ee6b2723d Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/DTA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/DTH.bmp b/plugins/channelrx/demodadsb/airlinelogos/DTH.bmp new file mode 100644 index 000000000..72e8d307b Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/DTH.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/DTR.bmp b/plugins/channelrx/demodadsb/airlinelogos/DTR.bmp new file mode 100644 index 000000000..33a70bf1f Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/DTR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/DYA.bmp b/plugins/channelrx/demodadsb/airlinelogos/DYA.bmp new file mode 100644 index 000000000..ecb7f91a3 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/DYA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/EAA.bmp b/plugins/channelrx/demodadsb/airlinelogos/EAA.bmp new file mode 100644 index 000000000..e951914df Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/EAA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/EAL.bmp b/plugins/channelrx/demodadsb/airlinelogos/EAL.bmp new file mode 100644 index 000000000..3b20bc658 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/EAL.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/EAQ.bmp b/plugins/channelrx/demodadsb/airlinelogos/EAQ.bmp new file mode 100644 index 000000000..d5042e557 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/EAQ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ECO.bmp b/plugins/channelrx/demodadsb/airlinelogos/ECO.bmp new file mode 100644 index 000000000..6cc51ea12 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ECO.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/EGF.bmp b/plugins/channelrx/demodadsb/airlinelogos/EGF.bmp new file mode 100644 index 000000000..6c2d5c8c0 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/EGF.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/EKA.bmp b/plugins/channelrx/demodadsb/airlinelogos/EKA.bmp new file mode 100644 index 000000000..b27f29d69 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/EKA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ELL.bmp b/plugins/channelrx/demodadsb/airlinelogos/ELL.bmp new file mode 100644 index 000000000..171d13150 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ELL.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/EMB.bmp b/plugins/channelrx/demodadsb/airlinelogos/EMB.bmp new file mode 100644 index 000000000..474dbd9d2 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/EMB.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ENJ.bmp b/plugins/channelrx/demodadsb/airlinelogos/ENJ.bmp new file mode 100644 index 000000000..768f050b3 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ENJ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ENT.bmp b/plugins/channelrx/demodadsb/airlinelogos/ENT.bmp new file mode 100644 index 000000000..a1908bf9a Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ENT.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/EPA.bmp b/plugins/channelrx/demodadsb/airlinelogos/EPA.bmp new file mode 100644 index 000000000..4e9efe143 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/EPA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ERT.bmp b/plugins/channelrx/demodadsb/airlinelogos/ERT.bmp new file mode 100644 index 000000000..648daf7ab Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ERT.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ESQ.bmp b/plugins/channelrx/demodadsb/airlinelogos/ESQ.bmp new file mode 100644 index 000000000..4e44433b3 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ESQ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ETD.bmp b/plugins/channelrx/demodadsb/airlinelogos/ETD.bmp new file mode 100644 index 000000000..11994a830 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ETD.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ETH.bmp b/plugins/channelrx/demodadsb/airlinelogos/ETH.bmp new file mode 100644 index 000000000..2788d6755 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ETH.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ETS.bmp b/plugins/channelrx/demodadsb/airlinelogos/ETS.bmp new file mode 100644 index 000000000..751f24c45 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ETS.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/EUG.bmp b/plugins/channelrx/demodadsb/airlinelogos/EUG.bmp new file mode 100644 index 000000000..4a474b539 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/EUG.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/EVA.bmp b/plugins/channelrx/demodadsb/airlinelogos/EVA.bmp new file mode 100644 index 000000000..daf8a0ec6 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/EVA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/EWG.bmp b/plugins/channelrx/demodadsb/airlinelogos/EWG.bmp new file mode 100644 index 000000000..40f85d6c4 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/EWG.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/EXS.bmp b/plugins/channelrx/demodadsb/airlinelogos/EXS.bmp new file mode 100644 index 000000000..4da865c6c Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/EXS.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/EYT.bmp b/plugins/channelrx/demodadsb/airlinelogos/EYT.bmp new file mode 100644 index 000000000..72dbbb112 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/EYT.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/EZA.bmp b/plugins/channelrx/demodadsb/airlinelogos/EZA.bmp new file mode 100644 index 000000000..2dc8e5225 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/EZA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/EZD.bmp b/plugins/channelrx/demodadsb/airlinelogos/EZD.bmp new file mode 100644 index 000000000..277c280c0 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/EZD.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/EZE.bmp b/plugins/channelrx/demodadsb/airlinelogos/EZE.bmp new file mode 100644 index 000000000..438863bc7 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/EZE.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/EZY.bmp b/plugins/channelrx/demodadsb/airlinelogos/EZY.bmp new file mode 100644 index 000000000..8b43603a0 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/EZY.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/FAB.bmp b/plugins/channelrx/demodadsb/airlinelogos/FAB.bmp new file mode 100644 index 000000000..b4a388d1f Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/FAB.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/FAG.bmp b/plugins/channelrx/demodadsb/airlinelogos/FAG.bmp new file mode 100644 index 000000000..5335a1337 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/FAG.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/FAH.bmp b/plugins/channelrx/demodadsb/airlinelogos/FAH.bmp new file mode 100644 index 000000000..ac47a308d Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/FAH.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/FAT.bmp b/plugins/channelrx/demodadsb/airlinelogos/FAT.bmp new file mode 100644 index 000000000..dacef6791 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/FAT.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/FBD.bmp b/plugins/channelrx/demodadsb/airlinelogos/FBD.bmp new file mode 100644 index 000000000..967f59a28 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/FBD.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/FBR.bmp b/plugins/channelrx/demodadsb/airlinelogos/FBR.bmp new file mode 100644 index 000000000..2161d2c82 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/FBR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/FCM.bmp b/plugins/channelrx/demodadsb/airlinelogos/FCM.bmp new file mode 100644 index 000000000..fe6cec099 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/FCM.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/FDB.bmp b/plugins/channelrx/demodadsb/airlinelogos/FDB.bmp new file mode 100644 index 000000000..2996ef1dc Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/FDB.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/FDX.bmp b/plugins/channelrx/demodadsb/airlinelogos/FDX.bmp new file mode 100644 index 000000000..eb7f104a1 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/FDX.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/FFT.bmp b/plugins/channelrx/demodadsb/airlinelogos/FFT.bmp new file mode 100644 index 000000000..fe84178c9 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/FFT.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/FFV.bmp b/plugins/channelrx/demodadsb/airlinelogos/FFV.bmp new file mode 100644 index 000000000..ec5797b8f Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/FFV.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/FHY.bmp b/plugins/channelrx/demodadsb/airlinelogos/FHY.bmp new file mode 100644 index 000000000..967f59a28 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/FHY.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/FIN.bmp b/plugins/channelrx/demodadsb/airlinelogos/FIN.bmp new file mode 100644 index 000000000..d29397346 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/FIN.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/FJA.bmp b/plugins/channelrx/demodadsb/airlinelogos/FJA.bmp new file mode 100644 index 000000000..8f3569147 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/FJA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/FJI.bmp b/plugins/channelrx/demodadsb/airlinelogos/FJI.bmp new file mode 100644 index 000000000..7ba3d3851 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/FJI.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/FLE.bmp b/plugins/channelrx/demodadsb/airlinelogos/FLE.bmp new file mode 100644 index 000000000..0f1088644 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/FLE.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/FLI.bmp b/plugins/channelrx/demodadsb/airlinelogos/FLI.bmp new file mode 100644 index 000000000..6bea93377 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/FLI.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/FNA.bmp b/plugins/channelrx/demodadsb/airlinelogos/FNA.bmp new file mode 100644 index 000000000..51105d3c2 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/FNA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/FPK.bmp b/plugins/channelrx/demodadsb/airlinelogos/FPK.bmp new file mode 100644 index 000000000..93ba01901 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/FPK.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/FPO.bmp b/plugins/channelrx/demodadsb/airlinelogos/FPO.bmp new file mode 100644 index 000000000..c5d351d71 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/FPO.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/FPY.bmp b/plugins/channelrx/demodadsb/airlinelogos/FPY.bmp new file mode 100644 index 000000000..8ffaea718 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/FPY.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/FRF.bmp b/plugins/channelrx/demodadsb/airlinelogos/FRF.bmp new file mode 100644 index 000000000..1f358de8a Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/FRF.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/FSK.bmp b/plugins/channelrx/demodadsb/airlinelogos/FSK.bmp new file mode 100644 index 000000000..fc0964215 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/FSK.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/FTZ.bmp b/plugins/channelrx/demodadsb/airlinelogos/FTZ.bmp new file mode 100644 index 000000000..ec30918ae Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/FTZ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/FWI.bmp b/plugins/channelrx/demodadsb/airlinelogos/FWI.bmp new file mode 100644 index 000000000..13c34d78b Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/FWI.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/FZA.bmp b/plugins/channelrx/demodadsb/airlinelogos/FZA.bmp new file mode 100644 index 000000000..faa105375 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/FZA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/FZW.bmp b/plugins/channelrx/demodadsb/airlinelogos/FZW.bmp new file mode 100644 index 000000000..6636a20a4 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/FZW.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/GAA.bmp b/plugins/channelrx/demodadsb/airlinelogos/GAA.bmp new file mode 100644 index 000000000..acb418cec Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/GAA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/GAI.bmp b/plugins/channelrx/demodadsb/airlinelogos/GAI.bmp new file mode 100644 index 000000000..997809932 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/GAI.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/GBK.bmp b/plugins/channelrx/demodadsb/airlinelogos/GBK.bmp new file mode 100644 index 000000000..b7f281338 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/GBK.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/GBQ.bmp b/plugins/channelrx/demodadsb/airlinelogos/GBQ.bmp new file mode 100644 index 000000000..1e68a91d3 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/GBQ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/GCR.bmp b/plugins/channelrx/demodadsb/airlinelogos/GCR.bmp new file mode 100644 index 000000000..5dc2c4e06 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/GCR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/GDC.bmp b/plugins/channelrx/demodadsb/airlinelogos/GDC.bmp new file mode 100644 index 000000000..f9158f347 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/GDC.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/GEA.bmp b/plugins/channelrx/demodadsb/airlinelogos/GEA.bmp new file mode 100644 index 000000000..cb6040627 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/GEA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/GEC.bmp b/plugins/channelrx/demodadsb/airlinelogos/GEC.bmp new file mode 100644 index 000000000..ba60552e2 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/GEC.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/GEO.bmp b/plugins/channelrx/demodadsb/airlinelogos/GEO.bmp new file mode 100644 index 000000000..9b337a5dd Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/GEO.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/GFA.bmp b/plugins/channelrx/demodadsb/airlinelogos/GFA.bmp new file mode 100644 index 000000000..345505321 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/GFA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/GFG.bmp b/plugins/channelrx/demodadsb/airlinelogos/GFG.bmp new file mode 100644 index 000000000..fa22ffdbe Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/GFG.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/GGN.bmp b/plugins/channelrx/demodadsb/airlinelogos/GGN.bmp new file mode 100644 index 000000000..bd955f925 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/GGN.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/GIA.bmp b/plugins/channelrx/demodadsb/airlinelogos/GIA.bmp new file mode 100644 index 000000000..9240e53e3 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/GIA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/GLG.bmp b/plugins/channelrx/demodadsb/airlinelogos/GLG.bmp new file mode 100644 index 000000000..b6c760e93 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/GLG.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/GLJ.bmp b/plugins/channelrx/demodadsb/airlinelogos/GLJ.bmp new file mode 100644 index 000000000..23108ff50 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/GLJ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/GLO.bmp b/plugins/channelrx/demodadsb/airlinelogos/GLO.bmp new file mode 100644 index 000000000..a47fa0f2c Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/GLO.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/GLR.bmp b/plugins/channelrx/demodadsb/airlinelogos/GLR.bmp new file mode 100644 index 000000000..d41d5c34c Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/GLR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/GMI.bmp b/plugins/channelrx/demodadsb/airlinelogos/GMI.bmp new file mode 100644 index 000000000..7f9dc68b7 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/GMI.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/GMQ.bmp b/plugins/channelrx/demodadsb/airlinelogos/GMQ.bmp new file mode 100644 index 000000000..31915d4f4 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/GMQ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/GOW.bmp b/plugins/channelrx/demodadsb/airlinelogos/GOW.bmp new file mode 100644 index 000000000..04d0fe105 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/GOW.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/GRL.bmp b/plugins/channelrx/demodadsb/airlinelogos/GRL.bmp new file mode 100644 index 000000000..b1e495410 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/GRL.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/GTI.bmp b/plugins/channelrx/demodadsb/airlinelogos/GTI.bmp new file mode 100644 index 000000000..4c646a6f2 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/GTI.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/GTV.bmp b/plugins/channelrx/demodadsb/airlinelogos/GTV.bmp new file mode 100644 index 000000000..c53b033c9 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/GTV.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/GUG.bmp b/plugins/channelrx/demodadsb/airlinelogos/GUG.bmp new file mode 100644 index 000000000..b6c760e93 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/GUG.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/GUY.bmp b/plugins/channelrx/demodadsb/airlinelogos/GUY.bmp new file mode 100644 index 000000000..9297b0be9 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/GUY.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/GWI.bmp b/plugins/channelrx/demodadsb/airlinelogos/GWI.bmp new file mode 100644 index 000000000..4bec7d767 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/GWI.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/GXL.bmp b/plugins/channelrx/demodadsb/airlinelogos/GXL.bmp new file mode 100644 index 000000000..c204f0a2e Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/GXL.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/HAL.bmp b/plugins/channelrx/demodadsb/airlinelogos/HAL.bmp new file mode 100644 index 000000000..7d78fd7f1 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/HAL.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/HAT.bmp b/plugins/channelrx/demodadsb/airlinelogos/HAT.bmp new file mode 100644 index 000000000..b0c72ed56 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/HAT.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/HBH.bmp b/plugins/channelrx/demodadsb/airlinelogos/HBH.bmp new file mode 100644 index 000000000..67a14fadd Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/HBH.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/HCC.bmp b/plugins/channelrx/demodadsb/airlinelogos/HCC.bmp new file mode 100644 index 000000000..f2aaa377f Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/HCC.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/HCV.bmp b/plugins/channelrx/demodadsb/airlinelogos/HCV.bmp new file mode 100644 index 000000000..5a27ea9bd Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/HCV.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/HLX.bmp b/plugins/channelrx/demodadsb/airlinelogos/HLX.bmp new file mode 100644 index 000000000..681cc3bee Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/HLX.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/HOP.bmp b/plugins/channelrx/demodadsb/airlinelogos/HOP.bmp new file mode 100644 index 000000000..5d76959f9 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/HOP.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/HRV.bmp b/plugins/channelrx/demodadsb/airlinelogos/HRV.bmp new file mode 100644 index 000000000..b5d3e31ee Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/HRV.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/HUN.bmp b/plugins/channelrx/demodadsb/airlinelogos/HUN.bmp new file mode 100644 index 000000000..bcf0112c8 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/HUN.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/HVN.bmp b/plugins/channelrx/demodadsb/airlinelogos/HVN.bmp new file mode 100644 index 000000000..49dbee5ac Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/HVN.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/HVY.bmp b/plugins/channelrx/demodadsb/airlinelogos/HVY.bmp new file mode 100644 index 000000000..f9da20ac9 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/HVY.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/HXA.bmp b/plugins/channelrx/demodadsb/airlinelogos/HXA.bmp new file mode 100644 index 000000000..951e1248c Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/HXA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/IAD.bmp b/plugins/channelrx/demodadsb/airlinelogos/IAD.bmp new file mode 100644 index 000000000..277c280c0 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/IAD.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/IAW.bmp b/plugins/channelrx/demodadsb/airlinelogos/IAW.bmp new file mode 100644 index 000000000..4bbbb66a0 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/IAW.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/IBB.bmp b/plugins/channelrx/demodadsb/airlinelogos/IBB.bmp new file mode 100644 index 000000000..96167c884 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/IBB.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/IBE.bmp b/plugins/channelrx/demodadsb/airlinelogos/IBE.bmp new file mode 100644 index 000000000..20e256626 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/IBE.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/IBS.bmp b/plugins/channelrx/demodadsb/airlinelogos/IBS.bmp new file mode 100644 index 000000000..87ca8cf24 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/IBS.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ICE.bmp b/plugins/channelrx/demodadsb/airlinelogos/ICE.bmp new file mode 100644 index 000000000..8719ad206 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ICE.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/IFC.bmp b/plugins/channelrx/demodadsb/airlinelogos/IFC.bmp new file mode 100644 index 000000000..30e75a317 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/IFC.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/IGA.bmp b/plugins/channelrx/demodadsb/airlinelogos/IGA.bmp new file mode 100644 index 000000000..861b363ce Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/IGA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/IGO.bmp b/plugins/channelrx/demodadsb/airlinelogos/IGO.bmp new file mode 100644 index 000000000..bef9c263c Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/IGO.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/IJM.bmp b/plugins/channelrx/demodadsb/airlinelogos/IJM.bmp new file mode 100644 index 000000000..d42f117f7 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/IJM.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/IRA.bmp b/plugins/channelrx/demodadsb/airlinelogos/IRA.bmp new file mode 100644 index 000000000..bcb79a090 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/IRA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/IRC.bmp b/plugins/channelrx/demodadsb/airlinelogos/IRC.bmp new file mode 100644 index 000000000..122455452 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/IRC.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/IRK.bmp b/plugins/channelrx/demodadsb/airlinelogos/IRK.bmp new file mode 100644 index 000000000..c35217a88 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/IRK.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/IRM.bmp b/plugins/channelrx/demodadsb/airlinelogos/IRM.bmp new file mode 100644 index 000000000..701102208 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/IRM.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ISK.bmp b/plugins/channelrx/demodadsb/airlinelogos/ISK.bmp new file mode 100644 index 000000000..6749b6866 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ISK.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ISS.bmp b/plugins/channelrx/demodadsb/airlinelogos/ISS.bmp new file mode 100644 index 000000000..daadeb5bf Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ISS.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ISV.bmp b/plugins/channelrx/demodadsb/airlinelogos/ISV.bmp new file mode 100644 index 000000000..b6c760e93 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ISV.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/IYE.bmp b/plugins/channelrx/demodadsb/airlinelogos/IYE.bmp new file mode 100644 index 000000000..a9db6fac0 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/IYE.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/Inter Island Air.bmp b/plugins/channelrx/demodadsb/airlinelogos/Inter Island Air.bmp new file mode 100644 index 000000000..f95bdc766 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/Inter Island Air.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/JAF.bmp b/plugins/channelrx/demodadsb/airlinelogos/JAF.bmp new file mode 100644 index 000000000..c656b24df Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/JAF.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/JAI.bmp b/plugins/channelrx/demodadsb/airlinelogos/JAI.bmp new file mode 100644 index 000000000..42f379bf7 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/JAI.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/JAT.bmp b/plugins/channelrx/demodadsb/airlinelogos/JAT.bmp new file mode 100644 index 000000000..c94edf204 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/JAT.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/JATnew.bmp b/plugins/channelrx/demodadsb/airlinelogos/JATnew.bmp new file mode 100644 index 000000000..f50faaded Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/JATnew.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/JAV.bmp b/plugins/channelrx/demodadsb/airlinelogos/JAV.bmp new file mode 100644 index 000000000..e9dd264f4 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/JAV.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/JBU.bmp b/plugins/channelrx/demodadsb/airlinelogos/JBU.bmp new file mode 100644 index 000000000..39addb299 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/JBU.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/JCC.bmp b/plugins/channelrx/demodadsb/airlinelogos/JCC.bmp new file mode 100644 index 000000000..f5c539b57 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/JCC.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/JET.bmp b/plugins/channelrx/demodadsb/airlinelogos/JET.bmp new file mode 100644 index 000000000..c83ca588a Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/JET.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/JG.bmp b/plugins/channelrx/demodadsb/airlinelogos/JG.bmp new file mode 100644 index 000000000..8262ad761 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/JG.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/JLL.bmp b/plugins/channelrx/demodadsb/airlinelogos/JLL.bmp new file mode 100644 index 000000000..4a1f6525b Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/JLL.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/JNA.bmp b/plugins/channelrx/demodadsb/airlinelogos/JNA.bmp new file mode 100644 index 000000000..1faeaad70 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/JNA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/JOR.bmp b/plugins/channelrx/demodadsb/airlinelogos/JOR.bmp new file mode 100644 index 000000000..64e111a81 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/JOR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/JOY.bmp b/plugins/channelrx/demodadsb/airlinelogos/JOY.bmp new file mode 100644 index 000000000..3fac47115 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/JOY.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/JSA.bmp b/plugins/channelrx/demodadsb/airlinelogos/JSA.bmp new file mode 100644 index 000000000..d8cccde6e Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/JSA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/JST.bmp b/plugins/channelrx/demodadsb/airlinelogos/JST.bmp new file mode 100644 index 000000000..7ff5ffb73 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/JST.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/JTF.bmp b/plugins/channelrx/demodadsb/airlinelogos/JTF.bmp new file mode 100644 index 000000000..26330cac1 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/JTF.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/JTG.bmp b/plugins/channelrx/demodadsb/airlinelogos/JTG.bmp new file mode 100644 index 000000000..9613b4dde Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/JTG.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/JUS.bmp b/plugins/channelrx/demodadsb/airlinelogos/JUS.bmp new file mode 100644 index 000000000..657a01d99 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/JUS.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/JW.bmp b/plugins/channelrx/demodadsb/airlinelogos/JW.bmp new file mode 100644 index 000000000..a8c4bb104 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/JW.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/JYH.bmp b/plugins/channelrx/demodadsb/airlinelogos/JYH.bmp new file mode 100644 index 000000000..493deda69 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/JYH.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/JZA.bmp b/plugins/channelrx/demodadsb/airlinelogos/JZA.bmp new file mode 100644 index 000000000..1a1fa9a1a Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/JZA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/JZR.bmp b/plugins/channelrx/demodadsb/airlinelogos/JZR.bmp new file mode 100644 index 000000000..b0a8f9128 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/JZR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/KAB.bmp b/plugins/channelrx/demodadsb/airlinelogos/KAB.bmp new file mode 100644 index 000000000..43171355b Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/KAB.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/KAC.bmp b/plugins/channelrx/demodadsb/airlinelogos/KAC.bmp new file mode 100644 index 000000000..b83202f6e Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/KAC.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/KAL.bmp b/plugins/channelrx/demodadsb/airlinelogos/KAL.bmp new file mode 100644 index 000000000..c0a86ac37 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/KAL.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/KFA.bmp b/plugins/channelrx/demodadsb/airlinelogos/KFA.bmp new file mode 100644 index 000000000..796766273 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/KFA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/KGL.bmp b/plugins/channelrx/demodadsb/airlinelogos/KGL.bmp new file mode 100644 index 000000000..f0900645f Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/KGL.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/KGO.bmp b/plugins/channelrx/demodadsb/airlinelogos/KGO.bmp new file mode 100644 index 000000000..d8346da72 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/KGO.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/KHH.bmp b/plugins/channelrx/demodadsb/airlinelogos/KHH.bmp new file mode 100644 index 000000000..95c543922 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/KHH.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/KHV.bmp b/plugins/channelrx/demodadsb/airlinelogos/KHV.bmp new file mode 100644 index 000000000..20f58ea24 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/KHV.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/KIL.bmp b/plugins/channelrx/demodadsb/airlinelogos/KIL.bmp new file mode 100644 index 000000000..2bf8ba68c Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/KIL.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/KKK.bmp b/plugins/channelrx/demodadsb/airlinelogos/KKK.bmp new file mode 100644 index 000000000..ec02442b1 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/KKK.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/KLC.bmp b/plugins/channelrx/demodadsb/airlinelogos/KLC.bmp new file mode 100644 index 000000000..5eab1c01a Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/KLC.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/KLM.bmp b/plugins/channelrx/demodadsb/airlinelogos/KLM.bmp new file mode 100644 index 000000000..a1aca8fff Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/KLM.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/KMF.bmp b/plugins/channelrx/demodadsb/airlinelogos/KMF.bmp new file mode 100644 index 000000000..35c297021 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/KMF.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/KN.bmp b/plugins/channelrx/demodadsb/airlinelogos/KN.bmp new file mode 100644 index 000000000..eee3ab26f Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/KN.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/KNA.bmp b/plugins/channelrx/demodadsb/airlinelogos/KNA.bmp new file mode 100644 index 000000000..176d77858 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/KNA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/KNE.bmp b/plugins/channelrx/demodadsb/airlinelogos/KNE.bmp new file mode 100644 index 000000000..6a5e9f870 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/KNE.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/KOR.bmp b/plugins/channelrx/demodadsb/airlinelogos/KOR.bmp new file mode 100644 index 000000000..485e23a31 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/KOR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/KQA.bmp b/plugins/channelrx/demodadsb/airlinelogos/KQA.bmp new file mode 100644 index 000000000..b4f746443 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/KQA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/KRE.bmp b/plugins/channelrx/demodadsb/airlinelogos/KRE.bmp new file mode 100644 index 000000000..aaaddcbe4 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/KRE.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/KRN.bmp b/plugins/channelrx/demodadsb/airlinelogos/KRN.bmp new file mode 100644 index 000000000..152d95bce Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/KRN.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/KRP.bmp b/plugins/channelrx/demodadsb/airlinelogos/KRP.bmp new file mode 100644 index 000000000..50b79830e Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/KRP.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/KZR.bmp b/plugins/channelrx/demodadsb/airlinelogos/KZR.bmp new file mode 100644 index 000000000..2e0a2abb8 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/KZR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/LAA.bmp b/plugins/channelrx/demodadsb/airlinelogos/LAA.bmp new file mode 100644 index 000000000..743ee5f50 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/LAA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/LAL.bmp b/plugins/channelrx/demodadsb/airlinelogos/LAL.bmp new file mode 100644 index 000000000..db5fb3f07 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/LAL.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/LAN.bmp b/plugins/channelrx/demodadsb/airlinelogos/LAN.bmp new file mode 100644 index 000000000..44e8a61e0 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/LAN.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/LAV.bmp b/plugins/channelrx/demodadsb/airlinelogos/LAV.bmp new file mode 100644 index 000000000..1852a1d67 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/LAV.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/LBN.bmp b/plugins/channelrx/demodadsb/airlinelogos/LBN.bmp new file mode 100644 index 000000000..be2322bb9 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/LBN.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/LBR.bmp b/plugins/channelrx/demodadsb/airlinelogos/LBR.bmp new file mode 100644 index 000000000..6da98b5c6 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/LBR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/LBY.bmp b/plugins/channelrx/demodadsb/airlinelogos/LBY.bmp new file mode 100644 index 000000000..51205a820 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/LBY.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/LC.bmp b/plugins/channelrx/demodadsb/airlinelogos/LC.bmp new file mode 100644 index 000000000..bb5032313 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/LC.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/LCO.bmp b/plugins/channelrx/demodadsb/airlinelogos/LCO.bmp new file mode 100644 index 000000000..74bdcd6c8 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/LCO.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/LER.bmp b/plugins/channelrx/demodadsb/airlinelogos/LER.bmp new file mode 100644 index 000000000..6d1caa92b Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/LER.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/LFO.bmp b/plugins/channelrx/demodadsb/airlinelogos/LFO.bmp new file mode 100644 index 000000000..4c1b5e81b Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/LFO.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/LGL.bmp b/plugins/channelrx/demodadsb/airlinelogos/LGL.bmp new file mode 100644 index 000000000..9c6107474 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/LGL.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/LIA.bmp b/plugins/channelrx/demodadsb/airlinelogos/LIA.bmp new file mode 100644 index 000000000..a3b4a9733 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/LIA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/LKA.bmp b/plugins/channelrx/demodadsb/airlinelogos/LKA.bmp new file mode 100644 index 000000000..8a67fd7ca Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/LKA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/LKE.bmp b/plugins/channelrx/demodadsb/airlinelogos/LKE.bmp new file mode 100644 index 000000000..8457b32e6 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/LKE.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/LLP.bmp b/plugins/channelrx/demodadsb/airlinelogos/LLP.bmp new file mode 100644 index 000000000..8bef70725 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/LLP.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/LLR.bmp b/plugins/channelrx/demodadsb/airlinelogos/LLR.bmp new file mode 100644 index 000000000..b134f4a79 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/LLR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/LMU.bmp b/plugins/channelrx/demodadsb/airlinelogos/LMU.bmp new file mode 100644 index 000000000..cec513100 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/LMU.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/LNI.bmp b/plugins/channelrx/demodadsb/airlinelogos/LNI.bmp new file mode 100644 index 000000000..7a9861740 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/LNI.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/LNK.bmp b/plugins/channelrx/demodadsb/airlinelogos/LNK.bmp new file mode 100644 index 000000000..806fba31d Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/LNK.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/LOG.bmp b/plugins/channelrx/demodadsb/airlinelogos/LOG.bmp new file mode 100644 index 000000000..a1538b09c Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/LOG.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/LOT.bmp b/plugins/channelrx/demodadsb/airlinelogos/LOT.bmp new file mode 100644 index 000000000..2f4156593 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/LOT.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/LPA.bmp b/plugins/channelrx/demodadsb/airlinelogos/LPA.bmp new file mode 100644 index 000000000..778f8a490 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/LPA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/LPV.bmp b/plugins/channelrx/demodadsb/airlinelogos/LPV.bmp new file mode 100644 index 000000000..0e74839f4 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/LPV.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/LRC.bmp b/plugins/channelrx/demodadsb/airlinelogos/LRC.bmp new file mode 100644 index 000000000..b6c760e93 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/LRC.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/LUR.bmp b/plugins/channelrx/demodadsb/airlinelogos/LUR.bmp new file mode 100644 index 000000000..5d88ab8fc Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/LUR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/LVR.bmp b/plugins/channelrx/demodadsb/airlinelogos/LVR.bmp new file mode 100644 index 000000000..efeec2b7d Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/LVR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/LYM.bmp b/plugins/channelrx/demodadsb/airlinelogos/LYM.bmp new file mode 100644 index 000000000..963617dbf Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/LYM.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/LZB.bmp b/plugins/channelrx/demodadsb/airlinelogos/LZB.bmp new file mode 100644 index 000000000..a21cde11e Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/LZB.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/MAC.bmp b/plugins/channelrx/demodadsb/airlinelogos/MAC.bmp new file mode 100644 index 000000000..2b96be6d5 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/MAC.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/MAL.bmp b/plugins/channelrx/demodadsb/airlinelogos/MAL.bmp new file mode 100644 index 000000000..a0a97250c Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/MAL.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/MAR.bmp b/plugins/channelrx/demodadsb/airlinelogos/MAR.bmp new file mode 100644 index 000000000..b9aaddad3 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/MAR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/MAS.bmp b/plugins/channelrx/demodadsb/airlinelogos/MAS.bmp new file mode 100644 index 000000000..548050bc8 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/MAS.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/MAU.bmp b/plugins/channelrx/demodadsb/airlinelogos/MAU.bmp new file mode 100644 index 000000000..1104c97e8 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/MAU.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/MDG.bmp b/plugins/channelrx/demodadsb/airlinelogos/MDG.bmp new file mode 100644 index 000000000..d72f5b0f1 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/MDG.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/MEA.bmp b/plugins/channelrx/demodadsb/airlinelogos/MEA.bmp new file mode 100644 index 000000000..ee7504364 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/MEA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/MGX.bmp b/plugins/channelrx/demodadsb/airlinelogos/MGX.bmp new file mode 100644 index 000000000..51ac34fa3 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/MGX.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/MHS.bmp b/plugins/channelrx/demodadsb/airlinelogos/MHS.bmp new file mode 100644 index 000000000..4b6d4db15 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/MHS.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/MJF.bmp b/plugins/channelrx/demodadsb/airlinelogos/MJF.bmp new file mode 100644 index 000000000..89dcedc7a Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/MJF.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/MKG.bmp b/plugins/channelrx/demodadsb/airlinelogos/MKG.bmp new file mode 100644 index 000000000..6fcd1fd9b Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/MKG.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/MLD.bmp b/plugins/channelrx/demodadsb/airlinelogos/MLD.bmp new file mode 100644 index 000000000..048b8fe69 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/MLD.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/MLH.bmp b/plugins/channelrx/demodadsb/airlinelogos/MLH.bmp new file mode 100644 index 000000000..03709662f Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/MLH.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/MLO.bmp b/plugins/channelrx/demodadsb/airlinelogos/MLO.bmp new file mode 100644 index 000000000..6b5941d32 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/MLO.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/MLT.bmp b/plugins/channelrx/demodadsb/airlinelogos/MLT.bmp new file mode 100644 index 000000000..9012df2c3 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/MLT.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/MMA.bmp b/plugins/channelrx/demodadsb/airlinelogos/MMA.bmp new file mode 100644 index 000000000..17a273625 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/MMA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/MMD.bmp b/plugins/channelrx/demodadsb/airlinelogos/MMD.bmp new file mode 100644 index 000000000..0731c1ef8 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/MMD.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/MMZ.bmp b/plugins/channelrx/demodadsb/airlinelogos/MMZ.bmp new file mode 100644 index 000000000..aeddcf943 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/MMZ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/MNB.bmp b/plugins/channelrx/demodadsb/airlinelogos/MNB.bmp new file mode 100644 index 000000000..ce0ab5e25 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/MNB.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/MNO.bmp b/plugins/channelrx/demodadsb/airlinelogos/MNO.bmp new file mode 100644 index 000000000..610ea5633 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/MNO.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/MON.bmp b/plugins/channelrx/demodadsb/airlinelogos/MON.bmp new file mode 100644 index 000000000..e3e745a4a Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/MON.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/MPA.bmp b/plugins/channelrx/demodadsb/airlinelogos/MPA.bmp new file mode 100644 index 000000000..c9760107e Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/MPA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/MPE.bmp b/plugins/channelrx/demodadsb/airlinelogos/MPE.bmp new file mode 100644 index 000000000..c9760107e Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/MPE.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/MPH.bmp b/plugins/channelrx/demodadsb/airlinelogos/MPH.bmp new file mode 100644 index 000000000..c2d4122c2 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/MPH.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/MSC.bmp b/plugins/channelrx/demodadsb/airlinelogos/MSC.bmp new file mode 100644 index 000000000..49581325a Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/MSC.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/MSE.bmp b/plugins/channelrx/demodadsb/airlinelogos/MSE.bmp new file mode 100644 index 000000000..eb0574871 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/MSE.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/MSF.bmp b/plugins/channelrx/demodadsb/airlinelogos/MSF.bmp new file mode 100644 index 000000000..52a6be41d Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/MSF.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/MSR.bmp b/plugins/channelrx/demodadsb/airlinelogos/MSR.bmp new file mode 100644 index 000000000..e5adb52e3 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/MSR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/MSX.bmp b/plugins/channelrx/demodadsb/airlinelogos/MSX.bmp new file mode 100644 index 000000000..8455dd04d Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/MSX.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/MYP.bmp b/plugins/channelrx/demodadsb/airlinelogos/MYP.bmp new file mode 100644 index 000000000..09b8981f4 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/MYP.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/MZN.bmp b/plugins/channelrx/demodadsb/airlinelogos/MZN.bmp new file mode 100644 index 000000000..c71b55bae Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/MZN.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/NAC.bmp b/plugins/channelrx/demodadsb/airlinelogos/NAC.bmp new file mode 100644 index 000000000..6b46b0779 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/NAC.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/NAX.bmp b/plugins/channelrx/demodadsb/airlinelogos/NAX.bmp new file mode 100644 index 000000000..a07ce1e86 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/NAX.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/NCB.bmp b/plugins/channelrx/demodadsb/airlinelogos/NCB.bmp new file mode 100644 index 000000000..6ddb6a80d Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/NCB.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/NGB.bmp b/plugins/channelrx/demodadsb/airlinelogos/NGB.bmp new file mode 100644 index 000000000..56e492de7 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/NGB.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/NGT.bmp b/plugins/channelrx/demodadsb/airlinelogos/NGT.bmp new file mode 100644 index 000000000..b7e2e2b74 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/NGT.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/NIA.bmp b/plugins/channelrx/demodadsb/airlinelogos/NIA.bmp new file mode 100644 index 000000000..526a664c7 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/NIA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/NKS.bmp b/plugins/channelrx/demodadsb/airlinelogos/NKS.bmp new file mode 100644 index 000000000..4aa13cebd Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/NKS.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/NLU.bmp b/plugins/channelrx/demodadsb/airlinelogos/NLU.bmp new file mode 100644 index 000000000..4ff76d7c3 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/NLU.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/NLY.bmp b/plugins/channelrx/demodadsb/airlinelogos/NLY.bmp new file mode 100644 index 000000000..e6dafce73 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/NLY.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/NMA.bmp b/plugins/channelrx/demodadsb/airlinelogos/NMA.bmp new file mode 100644 index 000000000..aecda2000 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/NMA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/NMB.bmp b/plugins/channelrx/demodadsb/airlinelogos/NMB.bmp new file mode 100644 index 000000000..bca9307ec Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/NMB.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/NOK.bmp b/plugins/channelrx/demodadsb/airlinelogos/NOK.bmp new file mode 100644 index 000000000..15504872b Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/NOK.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/NOS.bmp b/plugins/channelrx/demodadsb/airlinelogos/NOS.bmp new file mode 100644 index 000000000..933d01305 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/NOS.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/NPT.bmp b/plugins/channelrx/demodadsb/airlinelogos/NPT.bmp new file mode 100644 index 000000000..c8fbb5483 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/NPT.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/NRL.bmp b/plugins/channelrx/demodadsb/airlinelogos/NRL.bmp new file mode 100644 index 000000000..31c8c7e5e Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/NRL.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/NSE.bmp b/plugins/channelrx/demodadsb/airlinelogos/NSE.bmp new file mode 100644 index 000000000..b6040dae6 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/NSE.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/NVC.bmp b/plugins/channelrx/demodadsb/airlinelogos/NVC.bmp new file mode 100644 index 000000000..dc6f9e61c Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/NVC.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/NVD.bmp b/plugins/channelrx/demodadsb/airlinelogos/NVD.bmp new file mode 100644 index 000000000..03709662f Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/NVD.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/NVR.bmp b/plugins/channelrx/demodadsb/airlinelogos/NVR.bmp new file mode 100644 index 000000000..41d25dcf7 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/NVR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/NWS.bmp b/plugins/channelrx/demodadsb/airlinelogos/NWS.bmp new file mode 100644 index 000000000..19696685d Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/NWS.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/OAE.bmp b/plugins/channelrx/demodadsb/airlinelogos/OAE.bmp new file mode 100644 index 000000000..50b35a930 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/OAE.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/OAL.bmp b/plugins/channelrx/demodadsb/airlinelogos/OAL.bmp new file mode 100644 index 000000000..ace4cc2de Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/OAL.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/OBS.bmp b/plugins/channelrx/demodadsb/airlinelogos/OBS.bmp new file mode 100644 index 000000000..5d9df329b Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/OBS.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/OCA.bmp b/plugins/channelrx/demodadsb/airlinelogos/OCA.bmp new file mode 100644 index 000000000..88e4c6bec Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/OCA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/OHY.bmp b/plugins/channelrx/demodadsb/airlinelogos/OHY.bmp new file mode 100644 index 000000000..73719c7a0 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/OHY.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/OKA.bmp b/plugins/channelrx/demodadsb/airlinelogos/OKA.bmp new file mode 100644 index 000000000..f6395d207 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/OKA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/OKS.bmp b/plugins/channelrx/demodadsb/airlinelogos/OKS.bmp new file mode 100644 index 000000000..0efe855c3 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/OKS.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/OLC.bmp b/plugins/channelrx/demodadsb/airlinelogos/OLC.bmp new file mode 100644 index 000000000..d2e3f477d Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/OLC.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/OMA.bmp b/plugins/channelrx/demodadsb/airlinelogos/OMA.bmp new file mode 100644 index 000000000..a7c4c46ff Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/OMA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ONE.bmp b/plugins/channelrx/demodadsb/airlinelogos/ONE.bmp new file mode 100644 index 000000000..34db17c55 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ONE.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ONX.bmp b/plugins/channelrx/demodadsb/airlinelogos/ONX.bmp new file mode 100644 index 000000000..699de71b2 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ONX.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/OPJ.bmp b/plugins/channelrx/demodadsb/airlinelogos/OPJ.bmp new file mode 100644 index 000000000..bdd774486 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/OPJ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ORB.bmp b/plugins/channelrx/demodadsb/airlinelogos/ORB.bmp new file mode 100644 index 000000000..4107147bd Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ORB.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/OTC.bmp b/plugins/channelrx/demodadsb/airlinelogos/OTC.bmp new file mode 100644 index 000000000..85733f279 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/OTC.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/OVA.bmp b/plugins/channelrx/demodadsb/airlinelogos/OVA.bmp new file mode 100644 index 000000000..1597bf5d5 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/OVA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/OZW.bmp b/plugins/channelrx/demodadsb/airlinelogos/OZW.bmp new file mode 100644 index 000000000..dff524b65 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/OZW.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/PAG.bmp b/plugins/channelrx/demodadsb/airlinelogos/PAG.bmp new file mode 100644 index 000000000..e49e7911a Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/PAG.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/PAL.bmp b/plugins/channelrx/demodadsb/airlinelogos/PAL.bmp new file mode 100644 index 000000000..4fc2384c0 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/PAL.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/PAM.bmp b/plugins/channelrx/demodadsb/airlinelogos/PAM.bmp new file mode 100644 index 000000000..16d59748e Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/PAM.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/PCP.bmp b/plugins/channelrx/demodadsb/airlinelogos/PCP.bmp new file mode 100644 index 000000000..01057e7a7 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/PCP.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/PER.bmp b/plugins/channelrx/demodadsb/airlinelogos/PER.bmp new file mode 100644 index 000000000..57bcb19fe Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/PER.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/PEV.bmp b/plugins/channelrx/demodadsb/airlinelogos/PEV.bmp new file mode 100644 index 000000000..255db33fd Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/PEV.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/PEX.bmp b/plugins/channelrx/demodadsb/airlinelogos/PEX.bmp new file mode 100644 index 000000000..a3a194bbe Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/PEX.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/PFZ.bmp b/plugins/channelrx/demodadsb/airlinelogos/PFZ.bmp new file mode 100644 index 000000000..749ae9ef5 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/PFZ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/PGA.bmp b/plugins/channelrx/demodadsb/airlinelogos/PGA.bmp new file mode 100644 index 000000000..f31dee8d3 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/PGA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/PGT.bmp b/plugins/channelrx/demodadsb/airlinelogos/PGT.bmp new file mode 100644 index 000000000..0604ad429 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/PGT.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/PIA.bmp b/plugins/channelrx/demodadsb/airlinelogos/PIA.bmp new file mode 100644 index 000000000..700c14da7 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/PIA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/PIC.bmp b/plugins/channelrx/demodadsb/airlinelogos/PIC.bmp new file mode 100644 index 000000000..28cd0685f Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/PIC.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/PKZ.bmp b/plugins/channelrx/demodadsb/airlinelogos/PKZ.bmp new file mode 100644 index 000000000..26aca0665 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/PKZ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/PLM.bmp b/plugins/channelrx/demodadsb/airlinelogos/PLM.bmp new file mode 100644 index 000000000..0b025e112 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/PLM.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/PLV.bmp b/plugins/channelrx/demodadsb/airlinelogos/PLV.bmp new file mode 100644 index 000000000..6ba330568 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/PLV.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/PLY.bmp b/plugins/channelrx/demodadsb/airlinelogos/PLY.bmp new file mode 100644 index 000000000..bb94e2679 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/PLY.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/PMT.bmp b/plugins/channelrx/demodadsb/airlinelogos/PMT.bmp new file mode 100644 index 000000000..71ae25822 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/PMT.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/POE.bmp b/plugins/channelrx/demodadsb/airlinelogos/POE.bmp new file mode 100644 index 000000000..51e137578 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/POE.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/POT.bmp b/plugins/channelrx/demodadsb/airlinelogos/POT.bmp new file mode 100644 index 000000000..07e2a8359 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/POT.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/PRF.bmp b/plugins/channelrx/demodadsb/airlinelogos/PRF.bmp new file mode 100644 index 000000000..8d83204ca Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/PRF.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/PRI.bmp b/plugins/channelrx/demodadsb/airlinelogos/PRI.bmp new file mode 100644 index 000000000..c2f8558c3 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/PRI.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/PRW.bmp b/plugins/channelrx/demodadsb/airlinelogos/PRW.bmp new file mode 100644 index 000000000..c2f8558c3 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/PRW.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/PSC.bmp b/plugins/channelrx/demodadsb/airlinelogos/PSC.bmp new file mode 100644 index 000000000..c90f4455a Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/PSC.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/PST.bmp b/plugins/channelrx/demodadsb/airlinelogos/PST.bmp new file mode 100644 index 000000000..09d5a165f Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/PST.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/PTB.bmp b/plugins/channelrx/demodadsb/airlinelogos/PTB.bmp new file mode 100644 index 000000000..984b8984d Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/PTB.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/PTR.bmp b/plugins/channelrx/demodadsb/airlinelogos/PTR.bmp new file mode 100644 index 000000000..057233e36 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/PTR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/PVN.bmp b/plugins/channelrx/demodadsb/airlinelogos/PVN.bmp new file mode 100644 index 000000000..cb6ffb9c3 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/PVN.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/PWD.bmp b/plugins/channelrx/demodadsb/airlinelogos/PWD.bmp new file mode 100644 index 000000000..b1bbbd68d Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/PWD.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/QAJ.bmp b/plugins/channelrx/demodadsb/airlinelogos/QAJ.bmp new file mode 100644 index 000000000..c733f0f38 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/QAJ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/QDA.bmp b/plugins/channelrx/demodadsb/airlinelogos/QDA.bmp new file mode 100644 index 000000000..67ecfdcf8 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/QDA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/QFA.bmp b/plugins/channelrx/demodadsb/airlinelogos/QFA.bmp new file mode 100644 index 000000000..b47df6f20 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/QFA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/QLK.bmp b/plugins/channelrx/demodadsb/airlinelogos/QLK.bmp new file mode 100644 index 000000000..458320532 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/QLK.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/QTR.bmp b/plugins/channelrx/demodadsb/airlinelogos/QTR.bmp new file mode 100644 index 000000000..854ca4b14 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/QTR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/RAE.bmp b/plugins/channelrx/demodadsb/airlinelogos/RAE.bmp new file mode 100644 index 000000000..e5a33f08f Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/RAE.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/RAM.bmp b/plugins/channelrx/demodadsb/airlinelogos/RAM.bmp new file mode 100644 index 000000000..b89293b86 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/RAM.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/RAR.bmp b/plugins/channelrx/demodadsb/airlinelogos/RAR.bmp new file mode 100644 index 000000000..70c05f664 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/RAR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/RBA.bmp b/plugins/channelrx/demodadsb/airlinelogos/RBA.bmp new file mode 100644 index 000000000..879c03668 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/RBA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/RBG.bmp b/plugins/channelrx/demodadsb/airlinelogos/RBG.bmp new file mode 100644 index 000000000..2b96be6d5 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/RBG.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/REU.bmp b/plugins/channelrx/demodadsb/airlinelogos/REU.bmp new file mode 100644 index 000000000..7507fa823 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/REU.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/RGE.bmp b/plugins/channelrx/demodadsb/airlinelogos/RGE.bmp new file mode 100644 index 000000000..fa97e1a16 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/RGE.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/RJA.bmp b/plugins/channelrx/demodadsb/airlinelogos/RJA.bmp new file mode 100644 index 000000000..2383992f9 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/RJA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/RJD.bmp b/plugins/channelrx/demodadsb/airlinelogos/RJD.bmp new file mode 100644 index 000000000..cfe3f2013 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/RJD.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/RKM.bmp b/plugins/channelrx/demodadsb/airlinelogos/RKM.bmp new file mode 100644 index 000000000..eb4750f2a Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/RKM.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/RLA.bmp b/plugins/channelrx/demodadsb/airlinelogos/RLA.bmp new file mode 100644 index 000000000..87a496696 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/RLA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/RLH.bmp b/plugins/channelrx/demodadsb/airlinelogos/RLH.bmp new file mode 100644 index 000000000..2a554e614 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/RLH.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/RLK.bmp b/plugins/channelrx/demodadsb/airlinelogos/RLK.bmp new file mode 100644 index 000000000..0146ccde9 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/RLK.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/RLU.bmp b/plugins/channelrx/demodadsb/airlinelogos/RLU.bmp new file mode 100644 index 000000000..9b7c59fab Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/RLU.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/RLX.bmp b/plugins/channelrx/demodadsb/airlinelogos/RLX.bmp new file mode 100644 index 000000000..09936b543 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/RLX.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/RNV.bmp b/plugins/channelrx/demodadsb/airlinelogos/RNV.bmp new file mode 100644 index 000000000..2b623c1c7 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/RNV.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ROI.bmp b/plugins/channelrx/demodadsb/airlinelogos/ROI.bmp new file mode 100644 index 000000000..63f23de3e Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ROI.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ROT.bmp b/plugins/channelrx/demodadsb/airlinelogos/ROT.bmp new file mode 100644 index 000000000..5b7216462 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ROT.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ROU.bmp b/plugins/channelrx/demodadsb/airlinelogos/ROU.bmp new file mode 100644 index 000000000..932029e14 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ROU.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/RPB.bmp b/plugins/channelrx/demodadsb/airlinelogos/RPB.bmp new file mode 100644 index 000000000..796b691a8 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/RPB.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/RSY.bmp b/plugins/channelrx/demodadsb/airlinelogos/RSY.bmp new file mode 100644 index 000000000..827a2dcd9 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/RSY.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/RUC.bmp b/plugins/channelrx/demodadsb/airlinelogos/RUC.bmp new file mode 100644 index 000000000..a8d1dce73 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/RUC.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/RWG.bmp b/plugins/channelrx/demodadsb/airlinelogos/RWG.bmp new file mode 100644 index 000000000..4bbf55f01 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/RWG.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/RWZ.bmp b/plugins/channelrx/demodadsb/airlinelogos/RWZ.bmp new file mode 100644 index 000000000..e8f913ed8 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/RWZ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/RXA.bmp b/plugins/channelrx/demodadsb/airlinelogos/RXA.bmp new file mode 100644 index 000000000..090c70143 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/RXA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/RYR.bmp b/plugins/channelrx/demodadsb/airlinelogos/RYR.bmp new file mode 100644 index 000000000..108a324a7 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/RYR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/RYW.bmp b/plugins/channelrx/demodadsb/airlinelogos/RYW.bmp new file mode 100644 index 000000000..3db02a634 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/RYW.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/RZO.bmp b/plugins/channelrx/demodadsb/airlinelogos/RZO.bmp new file mode 100644 index 000000000..06ef0fe02 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/RZO.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SAI.bmp b/plugins/channelrx/demodadsb/airlinelogos/SAI.bmp new file mode 100644 index 000000000..254c3127d Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SAI.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SAS.bmp b/plugins/channelrx/demodadsb/airlinelogos/SAS.bmp new file mode 100644 index 000000000..029648f2d Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SAS.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SBM.bmp b/plugins/channelrx/demodadsb/airlinelogos/SBM.bmp new file mode 100644 index 000000000..de7fbfebc Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SBM.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SCO.bmp b/plugins/channelrx/demodadsb/airlinelogos/SCO.bmp new file mode 100644 index 000000000..fdc1d57b0 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SCO.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SCX.bmp b/plugins/channelrx/demodadsb/airlinelogos/SCX.bmp new file mode 100644 index 000000000..a722883a9 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SCX.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SDM.bmp b/plugins/channelrx/demodadsb/airlinelogos/SDM.bmp new file mode 100644 index 000000000..e3b861b56 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SDM.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SEJ.bmp b/plugins/channelrx/demodadsb/airlinelogos/SEJ.bmp new file mode 100644 index 000000000..050a24874 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SEJ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SEY.bmp b/plugins/channelrx/demodadsb/airlinelogos/SEY.bmp new file mode 100644 index 000000000..9c48b5793 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SEY.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SFF.bmp b/plugins/channelrx/demodadsb/airlinelogos/SFF.bmp new file mode 100644 index 000000000..aafa28199 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SFF.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SFW.bmp b/plugins/channelrx/demodadsb/airlinelogos/SFW.bmp new file mode 100644 index 000000000..3a4bdeafe Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SFW.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SGA.bmp b/plugins/channelrx/demodadsb/airlinelogos/SGA.bmp new file mode 100644 index 000000000..883a81811 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SGA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SGG.bmp b/plugins/channelrx/demodadsb/airlinelogos/SGG.bmp new file mode 100644 index 000000000..4d5bac630 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SGG.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SHU.bmp b/plugins/channelrx/demodadsb/airlinelogos/SHU.bmp new file mode 100644 index 000000000..feb41a4ef Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SHU.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SIA.bmp b/plugins/channelrx/demodadsb/airlinelogos/SIA.bmp new file mode 100644 index 000000000..d5d586278 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SIA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SID.bmp b/plugins/channelrx/demodadsb/airlinelogos/SID.bmp new file mode 100644 index 000000000..5b2751497 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SID.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SIF.bmp b/plugins/channelrx/demodadsb/airlinelogos/SIF.bmp new file mode 100644 index 000000000..c4155b05c Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SIF.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SIN.bmp b/plugins/channelrx/demodadsb/airlinelogos/SIN.bmp new file mode 100644 index 000000000..822a22e1f Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SIN.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SJO.bmp b/plugins/channelrx/demodadsb/airlinelogos/SJO.bmp new file mode 100644 index 000000000..98841c2e7 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SJO.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SKK.bmp b/plugins/channelrx/demodadsb/airlinelogos/SKK.bmp new file mode 100644 index 000000000..d8d5e43a7 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SKK.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SKP.bmp b/plugins/channelrx/demodadsb/airlinelogos/SKP.bmp new file mode 100644 index 000000000..65b87a48d Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SKP.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SKU.bmp b/plugins/channelrx/demodadsb/airlinelogos/SKU.bmp new file mode 100644 index 000000000..c5afca54e Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SKU.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SKV.bmp b/plugins/channelrx/demodadsb/airlinelogos/SKV.bmp new file mode 100644 index 000000000..7b8061686 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SKV.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SKZ.bmp b/plugins/channelrx/demodadsb/airlinelogos/SKZ.bmp new file mode 100644 index 000000000..310afaf8b Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SKZ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SLI.bmp b/plugins/channelrx/demodadsb/airlinelogos/SLI.bmp new file mode 100644 index 000000000..b99530ff3 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SLI.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SLK.bmp b/plugins/channelrx/demodadsb/airlinelogos/SLK.bmp new file mode 100644 index 000000000..c15cbaf46 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SLK.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SLM.bmp b/plugins/channelrx/demodadsb/airlinelogos/SLM.bmp new file mode 100644 index 000000000..ff40975df Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SLM.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SLX.bmp b/plugins/channelrx/demodadsb/airlinelogos/SLX.bmp new file mode 100644 index 000000000..38eed7dfd Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SLX.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SME.bmp b/plugins/channelrx/demodadsb/airlinelogos/SME.bmp new file mode 100644 index 000000000..9b8020545 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SME.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SMJ.bmp b/plugins/channelrx/demodadsb/airlinelogos/SMJ.bmp new file mode 100644 index 000000000..664e33e90 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SMJ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SMR.bmp b/plugins/channelrx/demodadsb/airlinelogos/SMR.bmp new file mode 100644 index 000000000..d5b226be3 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SMR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SOR.bmp b/plugins/channelrx/demodadsb/airlinelogos/SOR.bmp new file mode 100644 index 000000000..318d44e51 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SOR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SOV.bmp b/plugins/channelrx/demodadsb/airlinelogos/SOV.bmp new file mode 100644 index 000000000..3e9bb14a0 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SOV.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SPR.bmp b/plugins/channelrx/demodadsb/airlinelogos/SPR.bmp new file mode 100644 index 000000000..615709830 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SPR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SQC.bmp b/plugins/channelrx/demodadsb/airlinelogos/SQC.bmp new file mode 100644 index 000000000..b49c97c6f Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SQC.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SQS.bmp b/plugins/channelrx/demodadsb/airlinelogos/SQS.bmp new file mode 100644 index 000000000..90e201e2e Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SQS.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SRR.bmp b/plugins/channelrx/demodadsb/airlinelogos/SRR.bmp new file mode 100644 index 000000000..6fa63cea5 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SRR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SSQ.bmp b/plugins/channelrx/demodadsb/airlinelogos/SSQ.bmp new file mode 100644 index 000000000..e72a347a4 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SSQ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SSV.bmp b/plugins/channelrx/demodadsb/airlinelogos/SSV.bmp new file mode 100644 index 000000000..a06bad3fd Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SSV.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SUS.bmp b/plugins/channelrx/demodadsb/airlinelogos/SUS.bmp new file mode 100644 index 000000000..e2954a78e Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SUS.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SVA.bmp b/plugins/channelrx/demodadsb/airlinelogos/SVA.bmp new file mode 100644 index 000000000..9fc3aa6c7 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SVA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SVR.bmp b/plugins/channelrx/demodadsb/airlinelogos/SVR.bmp new file mode 100644 index 000000000..a520caa73 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SVR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SWA.bmp b/plugins/channelrx/demodadsb/airlinelogos/SWA.bmp new file mode 100644 index 000000000..7efadee08 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SWA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SWAnew.bmp b/plugins/channelrx/demodadsb/airlinelogos/SWAnew.bmp new file mode 100644 index 000000000..729f4d081 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SWAnew.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SWG.bmp b/plugins/channelrx/demodadsb/airlinelogos/SWG.bmp new file mode 100644 index 000000000..278f2bb9a Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SWG.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SWM.bmp b/plugins/channelrx/demodadsb/airlinelogos/SWM.bmp new file mode 100644 index 000000000..b4aa65d40 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SWM.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SWR.bmp b/plugins/channelrx/demodadsb/airlinelogos/SWR.bmp new file mode 100644 index 000000000..7e8d6850c Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SWR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SWT.bmp b/plugins/channelrx/demodadsb/airlinelogos/SWT.bmp new file mode 100644 index 000000000..25f5545f3 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SWT.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SXS.bmp b/plugins/channelrx/demodadsb/airlinelogos/SXS.bmp new file mode 100644 index 000000000..e1d36b121 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SXS.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/SYL.bmp b/plugins/channelrx/demodadsb/airlinelogos/SYL.bmp new file mode 100644 index 000000000..93268ce68 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/SYL.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TAI.bmp b/plugins/channelrx/demodadsb/airlinelogos/TAI.bmp new file mode 100644 index 000000000..b6c760e93 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TAI.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TAK.bmp b/plugins/channelrx/demodadsb/airlinelogos/TAK.bmp new file mode 100644 index 000000000..74c7b9eca Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TAK.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TAM.bmp b/plugins/channelrx/demodadsb/airlinelogos/TAM.bmp new file mode 100644 index 000000000..41db6054b Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TAM.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TAO.bmp b/plugins/channelrx/demodadsb/airlinelogos/TAO.bmp new file mode 100644 index 000000000..c2ff2aebb Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TAO.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TAP.bmp b/plugins/channelrx/demodadsb/airlinelogos/TAP.bmp new file mode 100644 index 000000000..28ce2a19f Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TAP.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TAR.bmp b/plugins/channelrx/demodadsb/airlinelogos/TAR.bmp new file mode 100644 index 000000000..fc7b240c3 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TAR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TAY.bmp b/plugins/channelrx/demodadsb/airlinelogos/TAY.bmp new file mode 100644 index 000000000..08e89b549 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TAY.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TBA.bmp b/plugins/channelrx/demodadsb/airlinelogos/TBA.bmp new file mode 100644 index 000000000..b98f9ff95 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TBA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TBN.bmp b/plugins/channelrx/demodadsb/airlinelogos/TBN.bmp new file mode 100644 index 000000000..3c8b97eb7 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TBN.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TBZ.bmp b/plugins/channelrx/demodadsb/airlinelogos/TBZ.bmp new file mode 100644 index 000000000..b1003371a Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TBZ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TCV.bmp b/plugins/channelrx/demodadsb/airlinelogos/TCV.bmp new file mode 100644 index 000000000..ab36da733 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TCV.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TCW.bmp b/plugins/channelrx/demodadsb/airlinelogos/TCW.bmp new file mode 100644 index 000000000..5eb113abd Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TCW.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TCX.bmp b/plugins/channelrx/demodadsb/airlinelogos/TCX.bmp new file mode 100644 index 000000000..38c714231 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TCX.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TDR.bmp b/plugins/channelrx/demodadsb/airlinelogos/TDR.bmp new file mode 100644 index 000000000..df6027bd5 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TDR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TFL.bmp b/plugins/channelrx/demodadsb/airlinelogos/TFL.bmp new file mode 100644 index 000000000..7b71effd3 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TFL.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TGW.bmp b/plugins/channelrx/demodadsb/airlinelogos/TGW.bmp new file mode 100644 index 000000000..284898aef Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TGW.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TGZ.bmp b/plugins/channelrx/demodadsb/airlinelogos/TGZ.bmp new file mode 100644 index 000000000..dd2bbfedf Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TGZ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/THA.bmp b/plugins/channelrx/demodadsb/airlinelogos/THA.bmp new file mode 100644 index 000000000..7a838a568 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/THA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/THE.bmp b/plugins/channelrx/demodadsb/airlinelogos/THE.bmp new file mode 100644 index 000000000..5420aac6a Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/THE.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/THT.bmp b/plugins/channelrx/demodadsb/airlinelogos/THT.bmp new file mode 100644 index 000000000..fb8422e74 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/THT.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/THY.bmp b/plugins/channelrx/demodadsb/airlinelogos/THY.bmp new file mode 100644 index 000000000..6ab1ad270 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/THY.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/THYANA.bmp b/plugins/channelrx/demodadsb/airlinelogos/THYANA.bmp new file mode 100644 index 000000000..6b3fd295d Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/THYANA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TIA.bmp b/plugins/channelrx/demodadsb/airlinelogos/TIA.bmp new file mode 100644 index 000000000..3b6abb620 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TIA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TIW.bmp b/plugins/channelrx/demodadsb/airlinelogos/TIW.bmp new file mode 100644 index 000000000..c713cf2f5 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TIW.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TJK.bmp b/plugins/channelrx/demodadsb/airlinelogos/TJK.bmp new file mode 100644 index 000000000..f91bdd950 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TJK.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TJS.bmp b/plugins/channelrx/demodadsb/airlinelogos/TJS.bmp new file mode 100644 index 000000000..7fa9f7a05 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TJS.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TMA.bmp b/plugins/channelrx/demodadsb/airlinelogos/TMA.bmp new file mode 100644 index 000000000..64793a350 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TMA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TMN.bmp b/plugins/channelrx/demodadsb/airlinelogos/TMN.bmp new file mode 100644 index 000000000..2b495fa7a Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TMN.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TMW.bmp b/plugins/channelrx/demodadsb/airlinelogos/TMW.bmp new file mode 100644 index 000000000..b4f8c3949 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TMW.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TNA.bmp b/plugins/channelrx/demodadsb/airlinelogos/TNA.bmp new file mode 100644 index 000000000..61dcf2385 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TNA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TNO.bmp b/plugins/channelrx/demodadsb/airlinelogos/TNO.bmp new file mode 100644 index 000000000..da99bdff3 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TNO.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TOM.bmp b/plugins/channelrx/demodadsb/airlinelogos/TOM.bmp new file mode 100644 index 000000000..626a6c810 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TOM.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TPA.bmp b/plugins/channelrx/demodadsb/airlinelogos/TPA.bmp new file mode 100644 index 000000000..e91189055 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TPA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TPC.bmp b/plugins/channelrx/demodadsb/airlinelogos/TPC.bmp new file mode 100644 index 000000000..46a64353f Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TPC.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TPU.bmp b/plugins/channelrx/demodadsb/airlinelogos/TPU.bmp new file mode 100644 index 000000000..b6c760e93 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TPU.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TRA.bmp b/plugins/channelrx/demodadsb/airlinelogos/TRA.bmp new file mode 100644 index 000000000..c011b760f Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TRA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TSC.bmp b/plugins/channelrx/demodadsb/airlinelogos/TSC.bmp new file mode 100644 index 000000000..92318e65e Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TSC.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TSG.bmp b/plugins/channelrx/demodadsb/airlinelogos/TSG.bmp new file mode 100644 index 000000000..8653c4685 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TSG.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TSH.bmp b/plugins/channelrx/demodadsb/airlinelogos/TSH.bmp new file mode 100644 index 000000000..3228c62bd Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TSH.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TSO.bmp b/plugins/channelrx/demodadsb/airlinelogos/TSO.bmp new file mode 100644 index 000000000..c66566a68 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TSO.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TSY.bmp b/plugins/channelrx/demodadsb/airlinelogos/TSY.bmp new file mode 100644 index 000000000..1c2fc60cd Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TSY.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TTL.bmp b/plugins/channelrx/demodadsb/airlinelogos/TTL.bmp new file mode 100644 index 000000000..dffd3b1a0 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TTL.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TUA.bmp b/plugins/channelrx/demodadsb/airlinelogos/TUA.bmp new file mode 100644 index 000000000..47593e067 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TUA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TUI.bmp b/plugins/channelrx/demodadsb/airlinelogos/TUI.bmp new file mode 100644 index 000000000..25f796a4b Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TUI.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TUS.bmp b/plugins/channelrx/demodadsb/airlinelogos/TUS.bmp new file mode 100644 index 000000000..fc255eebe Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TUS.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TUY.bmp b/plugins/channelrx/demodadsb/airlinelogos/TUY.bmp new file mode 100644 index 000000000..93e879169 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TUY.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TVF.bmp b/plugins/channelrx/demodadsb/airlinelogos/TVF.bmp new file mode 100644 index 000000000..b130257e5 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TVF.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TVP.bmp b/plugins/channelrx/demodadsb/airlinelogos/TVP.bmp new file mode 100644 index 000000000..b0c061b0b Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TVP.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TVQ.bmp b/plugins/channelrx/demodadsb/airlinelogos/TVQ.bmp new file mode 100644 index 000000000..b0c061b0b Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TVQ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TVS.bmp b/plugins/channelrx/demodadsb/airlinelogos/TVS.bmp new file mode 100644 index 000000000..94674f1f8 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TVS.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/TWI.bmp b/plugins/channelrx/demodadsb/airlinelogos/TWI.bmp new file mode 100644 index 000000000..b3307be06 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/TWI.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/UAE.bmp b/plugins/channelrx/demodadsb/airlinelogos/UAE.bmp new file mode 100644 index 000000000..c29986924 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/UAE.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/UAL.bmp b/plugins/channelrx/demodadsb/airlinelogos/UAL.bmp new file mode 100644 index 000000000..2165b664d Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/UAL.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/UBD.bmp b/plugins/channelrx/demodadsb/airlinelogos/UBD.bmp new file mode 100644 index 000000000..e5200826a Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/UBD.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/UCA.bmp b/plugins/channelrx/demodadsb/airlinelogos/UCA.bmp new file mode 100644 index 000000000..a086e2af8 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/UCA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/UEA.bmp b/plugins/channelrx/demodadsb/airlinelogos/UEA.bmp new file mode 100644 index 000000000..01c675690 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/UEA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/UJX.bmp b/plugins/channelrx/demodadsb/airlinelogos/UJX.bmp new file mode 100644 index 000000000..2a3c04d27 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/UJX.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/ULG.bmp b/plugins/channelrx/demodadsb/airlinelogos/ULG.bmp new file mode 100644 index 000000000..7fb5fc600 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/ULG.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/UPS.bmp b/plugins/channelrx/demodadsb/airlinelogos/UPS.bmp new file mode 100644 index 000000000..d85b2ecc9 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/UPS.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/URG.bmp b/plugins/channelrx/demodadsb/airlinelogos/URG.bmp new file mode 100644 index 000000000..4bea747bd Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/URG.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/URS.bmp b/plugins/channelrx/demodadsb/airlinelogos/URS.bmp new file mode 100644 index 000000000..49ce84f9b Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/URS.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/UTA.bmp b/plugins/channelrx/demodadsb/airlinelogos/UTA.bmp new file mode 100644 index 000000000..3e0c36993 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/UTA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/UTN.bmp b/plugins/channelrx/demodadsb/airlinelogos/UTN.bmp new file mode 100644 index 000000000..f00f0102b Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/UTN.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/UTP.bmp b/plugins/channelrx/demodadsb/airlinelogos/UTP.bmp new file mode 100644 index 000000000..e8e71a70b Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/UTP.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/UTY.bmp b/plugins/channelrx/demodadsb/airlinelogos/UTY.bmp new file mode 100644 index 000000000..bee30d084 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/UTY.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/UZB.bmp b/plugins/channelrx/demodadsb/airlinelogos/UZB.bmp new file mode 100644 index 000000000..a24f844ef Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/UZB.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/VAL.bmp b/plugins/channelrx/demodadsb/airlinelogos/VAL.bmp new file mode 100644 index 000000000..7c8984f0a Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/VAL.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/VAR.bmp b/plugins/channelrx/demodadsb/airlinelogos/VAR.bmp new file mode 100644 index 000000000..7a277c872 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/VAR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/VAS.bmp b/plugins/channelrx/demodadsb/airlinelogos/VAS.bmp new file mode 100644 index 000000000..153e6371f Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/VAS.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/VAU.bmp b/plugins/channelrx/demodadsb/airlinelogos/VAU.bmp new file mode 100644 index 000000000..53e928766 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/VAU.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/VAV.bmp b/plugins/channelrx/demodadsb/airlinelogos/VAV.bmp new file mode 100644 index 000000000..db4bff1db Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/VAV.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/VBB.bmp b/plugins/channelrx/demodadsb/airlinelogos/VBB.bmp new file mode 100644 index 000000000..cb490cbb8 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/VBB.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/VBW.bmp b/plugins/channelrx/demodadsb/airlinelogos/VBW.bmp new file mode 100644 index 000000000..26d2fd2c9 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/VBW.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/VCV.bmp b/plugins/channelrx/demodadsb/airlinelogos/VCV.bmp new file mode 100644 index 000000000..057604c54 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/VCV.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/VDA.bmp b/plugins/channelrx/demodadsb/airlinelogos/VDA.bmp new file mode 100644 index 000000000..66afacb0a Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/VDA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/VEL.bmp b/plugins/channelrx/demodadsb/airlinelogos/VEL.bmp new file mode 100644 index 000000000..0303ada98 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/VEL.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/VFC.bmp b/plugins/channelrx/demodadsb/airlinelogos/VFC.bmp new file mode 100644 index 000000000..c3e3c36b4 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/VFC.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/VIL.bmp b/plugins/channelrx/demodadsb/airlinelogos/VIL.bmp new file mode 100644 index 000000000..00db1a2f0 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/VIL.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/VIM.bmp b/plugins/channelrx/demodadsb/airlinelogos/VIM.bmp new file mode 100644 index 000000000..a47ee41c6 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/VIM.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/VIR.bmp b/plugins/channelrx/demodadsb/airlinelogos/VIR.bmp new file mode 100644 index 000000000..6ab728895 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/VIR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/VIT.bmp b/plugins/channelrx/demodadsb/airlinelogos/VIT.bmp new file mode 100644 index 000000000..99ecfc47b Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/VIT.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/VIV.bmp b/plugins/channelrx/demodadsb/airlinelogos/VIV.bmp new file mode 100644 index 000000000..b634a669f Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/VIV.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/VJC.bmp b/plugins/channelrx/demodadsb/airlinelogos/VJC.bmp new file mode 100644 index 000000000..7ee6eaebc Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/VJC.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/VJS.bmp b/plugins/channelrx/demodadsb/airlinelogos/VJS.bmp new file mode 100644 index 000000000..c235b8e34 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/VJS.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/VKG.bmp b/plugins/channelrx/demodadsb/airlinelogos/VKG.bmp new file mode 100644 index 000000000..96a199d42 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/VKG.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/VLG.bmp b/plugins/channelrx/demodadsb/airlinelogos/VLG.bmp new file mode 100644 index 000000000..0a7e837c5 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/VLG.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/VLK.bmp b/plugins/channelrx/demodadsb/airlinelogos/VLK.bmp new file mode 100644 index 000000000..f0b40d3d9 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/VLK.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/VLM.bmp b/plugins/channelrx/demodadsb/airlinelogos/VLM.bmp new file mode 100644 index 000000000..4c2287e96 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/VLM.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/VMP.bmp b/plugins/channelrx/demodadsb/airlinelogos/VMP.bmp new file mode 100644 index 000000000..b3da8a1fd Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/VMP.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/VNE.bmp b/plugins/channelrx/demodadsb/airlinelogos/VNE.bmp new file mode 100644 index 000000000..de2e9f9d5 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/VNE.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/VNL.bmp b/plugins/channelrx/demodadsb/airlinelogos/VNL.bmp new file mode 100644 index 000000000..fc195f27d Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/VNL.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/VOE.bmp b/plugins/channelrx/demodadsb/airlinelogos/VOE.bmp new file mode 100644 index 000000000..fafb5d8fd Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/VOE.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/VOZ.bmp b/plugins/channelrx/demodadsb/airlinelogos/VOZ.bmp new file mode 100644 index 000000000..b459527cc Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/VOZ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/VPA.bmp b/plugins/channelrx/demodadsb/airlinelogos/VPA.bmp new file mode 100644 index 000000000..002651953 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/VPA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/VRD.bmp b/plugins/channelrx/demodadsb/airlinelogos/VRD.bmp new file mode 100644 index 000000000..043c622c1 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/VRD.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/VRE.bmp b/plugins/channelrx/demodadsb/airlinelogos/VRE.bmp new file mode 100644 index 000000000..80e892a15 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/VRE.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/VRG.bmp b/plugins/channelrx/demodadsb/airlinelogos/VRG.bmp new file mode 100644 index 000000000..10f0d0659 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/VRG.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/VSV.bmp b/plugins/channelrx/demodadsb/airlinelogos/VSV.bmp new file mode 100644 index 000000000..d173ca31b Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/VSV.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/VTA.bmp b/plugins/channelrx/demodadsb/airlinelogos/VTA.bmp new file mode 100644 index 000000000..af8a06d11 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/VTA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/VTI.bmp b/plugins/channelrx/demodadsb/airlinelogos/VTI.bmp new file mode 100644 index 000000000..85ae3ef84 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/VTI.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/VTM.bmp b/plugins/channelrx/demodadsb/airlinelogos/VTM.bmp new file mode 100644 index 000000000..36f00da4e Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/VTM.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/VUN.bmp b/plugins/channelrx/demodadsb/airlinelogos/VUN.bmp new file mode 100644 index 000000000..6a3ce7f2c Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/VUN.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/VVC.bmp b/plugins/channelrx/demodadsb/airlinelogos/VVC.bmp new file mode 100644 index 000000000..341c378a1 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/VVC.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/WAJ.bmp b/plugins/channelrx/demodadsb/airlinelogos/WAJ.bmp new file mode 100644 index 000000000..277c280c0 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/WAJ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/WDA.bmp b/plugins/channelrx/demodadsb/airlinelogos/WDA.bmp new file mode 100644 index 000000000..2796fd812 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/WDA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/WEN.bmp b/plugins/channelrx/demodadsb/airlinelogos/WEN.bmp new file mode 100644 index 000000000..3c2f0a85b Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/WEN.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/WEW.bmp b/plugins/channelrx/demodadsb/airlinelogos/WEW.bmp new file mode 100644 index 000000000..1a47ad224 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/WEW.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/WFR.bmp b/plugins/channelrx/demodadsb/airlinelogos/WFR.bmp new file mode 100644 index 000000000..5abf4d40a Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/WFR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/WIF.bmp b/plugins/channelrx/demodadsb/airlinelogos/WIF.bmp new file mode 100644 index 000000000..2194da2d1 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/WIF.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/WJA.bmp b/plugins/channelrx/demodadsb/airlinelogos/WJA.bmp new file mode 100644 index 000000000..7864926d0 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/WJA.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/WLC.bmp b/plugins/channelrx/demodadsb/airlinelogos/WLC.bmp new file mode 100644 index 000000000..7586fe45f Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/WLC.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/WOW.bmp b/plugins/channelrx/demodadsb/airlinelogos/WOW.bmp new file mode 100644 index 000000000..5b15e3f22 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/WOW.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/WRC.bmp b/plugins/channelrx/demodadsb/airlinelogos/WRC.bmp new file mode 100644 index 000000000..c53bb68b8 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/WRC.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/WSG.bmp b/plugins/channelrx/demodadsb/airlinelogos/WSG.bmp new file mode 100644 index 000000000..8b4e4df33 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/WSG.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/WUK.bmp b/plugins/channelrx/demodadsb/airlinelogos/WUK.bmp new file mode 100644 index 000000000..9fec9f815 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/WUK.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/WWW.bmp b/plugins/channelrx/demodadsb/airlinelogos/WWW.bmp new file mode 100644 index 000000000..6bb879ab4 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/WWW.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/WZZ.bmp b/plugins/channelrx/demodadsb/airlinelogos/WZZ.bmp new file mode 100644 index 000000000..a8555ab6f Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/WZZ.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/XAH.bmp b/plugins/channelrx/demodadsb/airlinelogos/XAH.bmp new file mode 100644 index 000000000..d2e07231e Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/XAH.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/XAX.bmp b/plugins/channelrx/demodadsb/airlinelogos/XAX.bmp new file mode 100644 index 000000000..9facf67f7 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/XAX.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/XLF.bmp b/plugins/channelrx/demodadsb/airlinelogos/XLF.bmp new file mode 100644 index 000000000..d4be2a8e5 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/XLF.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/XLR.bmp b/plugins/channelrx/demodadsb/airlinelogos/XLR.bmp new file mode 100644 index 000000000..8907d5676 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/XLR.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/XME.bmp b/plugins/channelrx/demodadsb/airlinelogos/XME.bmp new file mode 100644 index 000000000..6804200f5 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/XME.bmp differ diff --git a/plugins/channelrx/demodadsb/airlinelogos/YZR.bmp b/plugins/channelrx/demodadsb/airlinelogos/YZR.bmp new file mode 100644 index 000000000..5fa45d631 Binary files /dev/null and b/plugins/channelrx/demodadsb/airlinelogos/YZR.bmp differ diff --git a/plugins/channelrx/demodadsb/csv.cpp b/plugins/channelrx/demodadsb/csv.cpp new file mode 100644 index 000000000..a21ef2b29 --- /dev/null +++ b/plugins/channelrx/demodadsb/csv.cpp @@ -0,0 +1,69 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2020 Jon Beniston, M7RCE // +// // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "csv.h" + +#include +#include +#include +#include +#include +#include + +// Create a hash map from a CSV file with two columns +QHash *csvHash(const QString& filename, int reserve) +{ + int cnt = 0; + QHash *map = nullptr; + + qDebug() << "csvHash: " << filename; + + QFile file(filename); + if (file.open(QIODevice::ReadOnly)) + { + // Read header + if (!file.atEnd()) + { + QByteArray row = file.readLine().trimmed(); + if (row.split(',').size() == 2) + { + map = new QHash(); + if (reserve > 0) + map->reserve(reserve); + // Read data + while (!file.atEnd()) + { + row = file.readLine().trimmed(); + QList cols = row.split(','); + map->insert(QString(cols[0]), QString(cols[1])); + cnt++; + } + } + else + qDebug() << "csvHash: Unexpected header"; + } + else + qDebug() << "csvHash: Empty file"; + file.close(); + } + else + qDebug() << "csvHash: Failed to open " << filename; + + qDebug() << "csvHash: " << filename << ": read " << cnt << " entries"; + + return map; +} diff --git a/plugins/channelrx/demodadsb/csv.h b/plugins/channelrx/demodadsb/csv.h new file mode 100644 index 000000000..770c38345 --- /dev/null +++ b/plugins/channelrx/demodadsb/csv.h @@ -0,0 +1,40 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2020 Jon Beniston, M7RCE // +// // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef INCLUDE_CSV_H +#define INCLUDE_CSV_H + +#include +#include + +// Extract string from CSV line, updating pp to next column +static inline char *csvNext(char **pp) +{ + char *p = *pp; + char *start = p; + + while ((*p != ',') && (*p != '\n')) + p++; + *p++ = '\0'; + *pp = p; + + return start; +} + +QHash *csvHash(const QString& filename, int reserve=0); + +#endif /* INCLUDE_CSV_H */ diff --git a/plugins/channelrx/demodadsb/flags.qrc b/plugins/channelrx/demodadsb/flags.qrc new file mode 100644 index 000000000..3c9d5dab4 --- /dev/null +++ b/plugins/channelrx/demodadsb/flags.qrc @@ -0,0 +1,436 @@ + + + flags/regprefixmap.csv + flags/militarymap.csv + flags/afghanistan.bmp + flags/afghanistan_mil.bmp + flags/alandisland.bmp + flags/albania.bmp + flags/albania_mil.bmp + flags/algeria.bmp + flags/algeria_mil.bmp + flags/andorra.bmp + flags/angola.bmp + flags/angola_mil.bmp + flags/anguilla.bmp + flags/antigua.bmp + flags/antigua_and_barbuda.bmp + flags/argentina.bmp + flags/argentina_mil.bmp + flags/armenia.bmp + flags/armenia_mil.bmp + flags/aruba.bmp + flags/australia.bmp + flags/australia_mil.bmp + flags/austria.bmp + flags/austria_mil.bmp + flags/azerbaijan.bmp + flags/azerbaijan_mil.bmp + flags/bahamas.bmp + flags/bahamas_mil.bmp + flags/bahrain.bmp + flags/bahrain_mil.bmp + flags/bangladesh.bmp + flags/bangladesh_mil.bmp + flags/barbados.bmp + flags/barbados_mil.bmp + flags/belarus.bmp + flags/belarus_mil.bmp + flags/belgium.bmp + flags/belgium_mil.bmp + flags/belize.bmp + flags/belize_mil.bmp + flags/benin.bmp + flags/benin_mil.bmp + flags/bermuda.bmp + flags/bhutan.bmp + flags/blank.bmp + flags/bolivia.bmp + flags/bolivia_mil.bmp + flags/bosnia.bmp + flags/bosnia_mil.bmp + flags/botswana.bmp + flags/botswana_mil.bmp + flags/brazil.bmp + flags/brazil_mil.bmp + flags/brunei.bmp + flags/brunei_mil.bmp + flags/bulgaria.bmp + flags/bulgaria_mil.bmp + flags/burkina_faso.bmp + flags/burkina_faso_mil.bmp + flags/burundi.bmp + flags/burundi_mil.bmp + flags/cambodia.bmp + flags/cambodia_mil.bmp + flags/cameroon_mil.bmp + flags/cameroun.bmp + flags/canada.bmp + flags/canada_mil.bmp + flags/cape_verde.bmp + flags/cayman_isles.bmp + flags/central_african_republic.bmp + flags/central_african_republic_mil.bmp + flags/chad.bmp + flags/chad_mil.bmp + flags/chechnya_mil.bmp + flags/chile.bmp + flags/chile_mil.bmp + flags/chili.bmp + flags/china.bmp + flags/china_hong_kong.bmp + flags/china_macau.bmp + flags/china_mil.bmp + flags/colombia.bmp + flags/colombia_mil.bmp + flags/comoros.bmp + flags/comoros_mil.bmp + flags/congo_brazzaville.bmp + flags/congodrc.bmp + flags/congodrc_mil.bmp + flags/congo-drc_mil.bmp + flags/congoroc.bmp + flags/congo-roc.bmp + flags/congoroc_mil.bmp + flags/congo-roc_mil.bmp + flags/cook_islands.bmp + flags/costa_rica.bmp + flags/costa_rica_mil.bmp + flags/cote_d'ivoire.bmp + flags/cote_d'ivoire_mil.bmp + flags/cote_d'ivorie.bmp + flags/croatia.bmp + flags/croatia_mil.bmp + flags/cuba.bmp + flags/cuba_mil.bmp + flags/cyprus.bmp + flags/cyprus_mil.bmp + flags/czech_republic.bmp + flags/czech_republic_mil.bmp + flags/denmark.bmp + flags/denmark_mil.bmp + flags/djibouti.bmp + flags/djibouti_mil.bmp + flags/dominca.bmp + flags/dominica.bmp + flags/dominican_republic.bmp + flags/dominican_republic_mil.bmp + flags/ecuador.bmp + flags/ecuador_mil.bmp + flags/egypt.bmp + flags/egypt_mil.bmp + flags/el_salvador.bmp + flags/el_salvador_mil.bmp + flags/equatorial_guinea.bmp + flags/equatorial_guinea_mil.bmp + flags/eritrea.bmp + flags/eritrea_mil.bmp + flags/estonia.bmp + flags/estonia_mil.bmp + flags/ethiopia.bmp + flags/ethiopia_mil.bmp + flags/eu.bmp + flags/falkland_isles.bmp + flags/faroe_islands.bmp + flags/fiji.bmp + flags/finland.bmp + flags/finland_mil.bmp + flags/france.bmp + flags/france_mil.bmp + flags/francemil.bmp + flags/gabon.bmp + flags/gabon_mil.bmp + flags/gambia.bmp + flags/gambia_mil.bmp + flags/georgia.bmp + flags/georgia_mil.bmp + flags/germany.bmp + flags/germany_mil.bmp + flags/ghana.bmp + flags/ghana_mil.bmp + flags/gibraltar.bmp + flags/greece.bmp + flags/greece_mil.bmp + flags/grenada.bmp + flags/guam.bmp + flags/guatemala.bmp + flags/guatemala_mil.bmp + flags/guernsey.bmp + flags/guinea bissau.bmp + flags/guinea.bmp + flags/guinea_bissau.bmp + flags/guinea_mil.bmp + flags/guineabissau.bmp + flags/guinea-bissau.bmp + flags/guineabissau_mil.bmp + flags/guinea-bissau_mil.bmp + flags/guyana.bmp + flags/guyana_mil.bmp + flags/haiti.bmp + flags/haiti_mil.bmp + flags/honduras.bmp + flags/honduras_mil.bmp + flags/hong_kong.bmp + flags/hungary.bmp + flags/hungary_mil.bmp + flags/icao.bmp + flags/iceland.bmp + flags/iceland_mil.bmp + flags/india.bmp + flags/india_mil.bmp + flags/indonesia.bmp + flags/indonesia_mil.bmp + flags/iran.bmp + flags/iran_mil.bmp + flags/iraq.bmp + flags/iraq_mil.bmp + flags/ireland.bmp + flags/ireland_mil.bmp + flags/isle_of_man.bmp + flags/isle_of_man_5.bmp + flags/isle_of_man_6.bmp + flags/israel.bmp + flags/israel_mil.bmp + flags/italy.bmp + flags/italy_mil.bmp + flags/ivory_coast.bmp + flags/ivory_coast_mil.bmp + flags/jamaica.bmp + flags/jamaica_mil.bmp + flags/japan.bmp + flags/japan_mil.bmp + flags/jersey.bmp + flags/jordan.bmp + flags/jordan_mil.bmp + flags/kazakhstan_mil.bmp + flags/kenya.bmp + flags/kenya_mil.bmp + flags/khazakstan.bmp + flags/kiribati.bmp + flags/korea_north.bmp + flags/korea_north_mil.bmp + flags/korea_south.bmp + flags/korea-north.bmp + flags/korea-north-mil.bmp + flags/korea-south.bmp + flags/koreasouthmil.bmp + flags/korea-south-mil.bmp + flags/kuwait.bmp + flags/kuwait_mil.bmp + flags/kyrgyzstan.bmp + flags/kyrgyzstan_mil.bmp + flags/laos.bmp + flags/laos_mil.bmp + flags/latvia.bmp + flags/latvia_mil.bmp + flags/lebanon.bmp + flags/lebanon_mil.bmp + flags/lesotho.bmp + flags/lesotho_mil.bmp + flags/liberia.bmp + flags/liberia_mil.bmp + flags/libya.bmp + flags/libya_mil.bmp + flags/liechtenstein.bmp + flags/lithuania.bmp + flags/lithuania_mil.bmp + flags/luxembourg.bmp + flags/luxembourg_mil.bmp + flags/luxemburg.bmp + flags/macedonia.bmp + flags/macedonia_mil.bmp + flags/madagascar.bmp + flags/madagascar_mil.bmp + flags/malawi.bmp + flags/malawi_mil.bmp + flags/malaysia.bmp + flags/malaysia_mil.bmp + flags/maldives.bmp + flags/mali.bmp + flags/mali_mil.bmp + flags/malta.bmp + flags/malta_mil.bmp + flags/marshall islands.bmp + flags/marshall_islands.bmp + flags/mauritania.bmp + flags/mauritania_mil.bmp + flags/mauritius.bmp + flags/mexico.bmp + flags/mexico_mil.bmp + flags/micronesia.bmp + flags/moldova.bmp + flags/moldova_mil.bmp + flags/monaco.bmp + flags/mongolia.bmp + flags/mongolia_mil.bmp + flags/monserrat.bmp + flags/montenegro.bmp + flags/montenegro_mil.bmp + flags/morocco.bmp + flags/morocco_mil.bmp + flags/mozambique.bmp + flags/mozambique_mil.bmp + flags/myanmar.bmp + flags/myanmar_mil.bmp + flags/namibia.bmp + flags/namibia_mil.bmp + flags/nato.bmp + flags/nauru.bmp + flags/nepal.bmp + flags/nepal_mil.bmp + flags/netherlands.bmp + flags/netherlands_antilles.bmp + flags/netherlands_mil.bmp + flags/new zealand.bmp + flags/new_zealand.bmp + flags/new_zealand_mil.bmp + flags/nicaragua.bmp + flags/nicaragua_mil.bmp + flags/niger.bmp + flags/niger_mil.bmp + flags/nigeria.bmp + flags/nigeria_mil.bmp + flags/niue.bmp + flags/noflag.bmp + flags/north marianas.bmp + flags/north_marianas.bmp + flags/norway.bmp + flags/norway_mil.bmp + flags/not allocated.bmp + flags/not_allocated.bmp + flags/oman.bmp + flags/oman_mil.bmp + flags/pakistan.bmp + flags/pakistan_mil.bmp + flags/palau.bmp + flags/panama.bmp + flags/panama_mil.bmp + flags/papua_new_guinea.bmp + flags/papua_new_guinea_mil.bmp + flags/paraguay.bmp + flags/paraguay_mil.bmp + flags/peru.bmp + flags/peru_mil.bmp + flags/philippines.bmp + flags/philippines_mil.bmp + flags/phillippines.bmp + flags/poland.bmp + flags/poland_mil.bmp + flags/portugal.bmp + flags/portugal_mil.bmp + flags/qatar.bmp + flags/qatar_mil.bmp + flags/rep. congo.bmp + flags/romania.bmp + flags/romania_mil.bmp + flags/russia.bmp + flags/russia_mil.bmp + flags/rwanda.bmp + flags/rwanda_mil.bmp + flags/samoa.bmp + flags/san_marino.bmp + flags/sao_tome.bmp + flags/sao_tome_principe.bmp + flags/sao_tome_principe_mil.bmp + flags/saudi_arabia.bmp + flags/saudi_arabia_mil.bmp + flags/senegal.bmp + flags/senegal_mil.bmp + flags/serbia.bmp + flags/serbia_mil.bmp + flags/seychelles.bmp + flags/seychelles_mil.bmp + flags/sierra_leone.bmp + flags/sierra_leone_mil.bmp + flags/singapore.bmp + flags/singapore_mil.bmp + flags/slovakia.bmp + flags/slovakia_mil.bmp + flags/slovenia.bmp + flags/slovenia_mil.bmp + flags/solomon_islands.bmp + flags/somalia.bmp + flags/somalia_mil.bmp + flags/south_africa.bmp + flags/south_africa_mil.bmp + flags/south_sudan.bmp + flags/south_sudan_mil.bmp + flags/south-korea.bmp + flags/spain.bmp + flags/spain_mil.bmp + flags/sri_lanka.bmp + flags/sri_lanka_mil.bmp + flags/st_helena.bmp + flags/st_kitts_and_nevis.bmp + flags/st_lucia.bmp + flags/st_pierre_and_miquelon.bmp + flags/st_vincent.bmp + flags/sudan.bmp + flags/sudan_mil.bmp + flags/suriname.bmp + flags/suriname_mil.bmp + flags/swaziland.bmp + flags/swaziland_mil.bmp + flags/sweden.bmp + flags/sweden_mil.bmp + flags/switzerland.bmp + flags/switzerland_mil.bmp + flags/syria.bmp + flags/syria_mil.bmp + flags/taiwan.bmp + flags/taiwan_mil.bmp + flags/tajikistan.bmp + flags/tajikistan_mil.bmp + flags/tajikstan.bmp + flags/tanzania.bmp + flags/tanzania_mil.bmp + flags/thailand.bmp + flags/thailand_mil.bmp + flags/timorleste.bmp + flags/timor-leste.bmp + flags/togo.bmp + flags/togo_mil.bmp + flags/tonga.bmp + flags/trinidad_and_tobago.bmp + flags/trinidad_and_tobago_mil.bmp + flags/tunisia.bmp + flags/tunisia_mil.bmp + flags/turkey.bmp + flags/turkey_mil.bmp + flags/turkmenistan.bmp + flags/turkmenistan_mil.bmp + flags/turkmmen.bmp + flags/turks_and_caicos.bmp + flags/tuvalu.bmp + flags/uganda.bmp + flags/uganda_mil.bmp + flags/ukraine.bmp + flags/ukraine_mil.bmp + flags/united_arab_emirates.bmp + flags/united_arab_emirates_mil.bmp + flags/united_kingdom.bmp + flags/united_kingdom_mil.bmp + flags/united_nations.bmp + flags/united_states.bmp + flags/united_states_mil.bmp + flags/uruguay.bmp + flags/uruguay_mil.bmp + flags/uzbekistan.bmp + flags/uzbekistan_mil.bmp + flags/vanuatu.bmp + flags/vatican_city.bmp + flags/venezuela.bmp + flags/venezuela_mil.bmp + flags/vietnam.bmp + flags/viet-nam.bmp + flags/vietnam_mil.bmp + flags/viet-nam_mil.bmp + flags/virgin_isles.bmp + flags/yemen.bmp + flags/yemen_mil.bmp + flags/zambia.bmp + flags/zambia_mil.bmp + flags/zimbabwe.bmp + flags/zimbabwe_mil.bmp + + diff --git a/plugins/channelrx/demodadsb/flags/afghanistan.bmp b/plugins/channelrx/demodadsb/flags/afghanistan.bmp new file mode 100644 index 000000000..2a42b0a62 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/afghanistan.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/afghanistan_mil.bmp b/plugins/channelrx/demodadsb/flags/afghanistan_mil.bmp new file mode 100644 index 000000000..394d51f4c Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/afghanistan_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/alandisland.bmp b/plugins/channelrx/demodadsb/flags/alandisland.bmp new file mode 100644 index 000000000..fd29d9df5 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/alandisland.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/albania.bmp b/plugins/channelrx/demodadsb/flags/albania.bmp new file mode 100644 index 000000000..315dd5e30 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/albania.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/albania_mil.bmp b/plugins/channelrx/demodadsb/flags/albania_mil.bmp new file mode 100644 index 000000000..bce75a136 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/albania_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/algeria.bmp b/plugins/channelrx/demodadsb/flags/algeria.bmp new file mode 100644 index 000000000..bd93e4db9 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/algeria.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/algeria_mil.bmp b/plugins/channelrx/demodadsb/flags/algeria_mil.bmp new file mode 100644 index 000000000..4f81be462 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/algeria_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/andorra.bmp b/plugins/channelrx/demodadsb/flags/andorra.bmp new file mode 100644 index 000000000..36a6750ed Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/andorra.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/angola.bmp b/plugins/channelrx/demodadsb/flags/angola.bmp new file mode 100644 index 000000000..c26f60a99 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/angola.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/angola_mil.bmp b/plugins/channelrx/demodadsb/flags/angola_mil.bmp new file mode 100644 index 000000000..78556fe04 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/angola_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/anguilla.bmp b/plugins/channelrx/demodadsb/flags/anguilla.bmp new file mode 100644 index 000000000..4f8da8fc5 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/anguilla.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/antigua.bmp b/plugins/channelrx/demodadsb/flags/antigua.bmp new file mode 100644 index 000000000..f20209460 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/antigua.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/antigua_and_barbuda.bmp b/plugins/channelrx/demodadsb/flags/antigua_and_barbuda.bmp new file mode 100644 index 000000000..8ad30d97c Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/antigua_and_barbuda.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/argentina.bmp b/plugins/channelrx/demodadsb/flags/argentina.bmp new file mode 100644 index 000000000..df9ce97ea Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/argentina.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/argentina_mil.bmp b/plugins/channelrx/demodadsb/flags/argentina_mil.bmp new file mode 100644 index 000000000..45faa02e1 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/argentina_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/armenia.bmp b/plugins/channelrx/demodadsb/flags/armenia.bmp new file mode 100644 index 000000000..773ad9c20 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/armenia.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/armenia_mil.bmp b/plugins/channelrx/demodadsb/flags/armenia_mil.bmp new file mode 100644 index 000000000..bc8ccabfe Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/armenia_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/aruba.bmp b/plugins/channelrx/demodadsb/flags/aruba.bmp new file mode 100644 index 000000000..c89e4ef7c Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/aruba.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/australia.bmp b/plugins/channelrx/demodadsb/flags/australia.bmp new file mode 100644 index 000000000..4e6bd73a7 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/australia.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/australia_mil.bmp b/plugins/channelrx/demodadsb/flags/australia_mil.bmp new file mode 100644 index 000000000..6d0a7d9ca Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/australia_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/austria.bmp b/plugins/channelrx/demodadsb/flags/austria.bmp new file mode 100644 index 000000000..951da02f8 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/austria.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/austria_mil.bmp b/plugins/channelrx/demodadsb/flags/austria_mil.bmp new file mode 100644 index 000000000..9aa5cbd92 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/austria_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/azerbaijan.bmp b/plugins/channelrx/demodadsb/flags/azerbaijan.bmp new file mode 100644 index 000000000..047911e9a Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/azerbaijan.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/azerbaijan_mil.bmp b/plugins/channelrx/demodadsb/flags/azerbaijan_mil.bmp new file mode 100644 index 000000000..9be3ea69e Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/azerbaijan_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/bahamas.bmp b/plugins/channelrx/demodadsb/flags/bahamas.bmp new file mode 100644 index 000000000..17c487b49 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/bahamas.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/bahamas_mil.bmp b/plugins/channelrx/demodadsb/flags/bahamas_mil.bmp new file mode 100644 index 000000000..90470f051 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/bahamas_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/bahrain.bmp b/plugins/channelrx/demodadsb/flags/bahrain.bmp new file mode 100644 index 000000000..7ac278d4a Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/bahrain.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/bahrain_mil.bmp b/plugins/channelrx/demodadsb/flags/bahrain_mil.bmp new file mode 100644 index 000000000..627575675 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/bahrain_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/bangladesh.bmp b/plugins/channelrx/demodadsb/flags/bangladesh.bmp new file mode 100644 index 000000000..84241d89c Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/bangladesh.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/bangladesh_mil.bmp b/plugins/channelrx/demodadsb/flags/bangladesh_mil.bmp new file mode 100644 index 000000000..271ffd8e4 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/bangladesh_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/barbados.bmp b/plugins/channelrx/demodadsb/flags/barbados.bmp new file mode 100644 index 000000000..4abc2feb8 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/barbados.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/barbados_mil.bmp b/plugins/channelrx/demodadsb/flags/barbados_mil.bmp new file mode 100644 index 000000000..6773a01a9 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/barbados_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/belarus.bmp b/plugins/channelrx/demodadsb/flags/belarus.bmp new file mode 100644 index 000000000..b36d05a72 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/belarus.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/belarus_mil.bmp b/plugins/channelrx/demodadsb/flags/belarus_mil.bmp new file mode 100644 index 000000000..1a012acef Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/belarus_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/belgium.bmp b/plugins/channelrx/demodadsb/flags/belgium.bmp new file mode 100644 index 000000000..e8d05e3d0 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/belgium.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/belgium_mil.bmp b/plugins/channelrx/demodadsb/flags/belgium_mil.bmp new file mode 100644 index 000000000..94bc5b36e Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/belgium_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/belize.bmp b/plugins/channelrx/demodadsb/flags/belize.bmp new file mode 100644 index 000000000..4185e28b0 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/belize.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/belize_mil.bmp b/plugins/channelrx/demodadsb/flags/belize_mil.bmp new file mode 100644 index 000000000..af485ca4e Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/belize_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/benin.bmp b/plugins/channelrx/demodadsb/flags/benin.bmp new file mode 100644 index 000000000..0827436b8 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/benin.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/benin_mil.bmp b/plugins/channelrx/demodadsb/flags/benin_mil.bmp new file mode 100644 index 000000000..5e31e4b54 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/benin_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/bermuda.bmp b/plugins/channelrx/demodadsb/flags/bermuda.bmp new file mode 100644 index 000000000..678c48ab0 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/bermuda.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/bhutan.bmp b/plugins/channelrx/demodadsb/flags/bhutan.bmp new file mode 100644 index 000000000..1cda54297 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/bhutan.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/blank.bmp b/plugins/channelrx/demodadsb/flags/blank.bmp new file mode 100644 index 000000000..af2d89f60 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/blank.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/bolivia.bmp b/plugins/channelrx/demodadsb/flags/bolivia.bmp new file mode 100644 index 000000000..7b85a667f Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/bolivia.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/bolivia_mil.bmp b/plugins/channelrx/demodadsb/flags/bolivia_mil.bmp new file mode 100644 index 000000000..3c2e4d1e0 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/bolivia_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/bosnia.bmp b/plugins/channelrx/demodadsb/flags/bosnia.bmp new file mode 100644 index 000000000..49248e6d3 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/bosnia.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/bosnia_mil.bmp b/plugins/channelrx/demodadsb/flags/bosnia_mil.bmp new file mode 100644 index 000000000..ccb4d2892 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/bosnia_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/botswana.bmp b/plugins/channelrx/demodadsb/flags/botswana.bmp new file mode 100644 index 000000000..6146346c1 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/botswana.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/botswana_mil.bmp b/plugins/channelrx/demodadsb/flags/botswana_mil.bmp new file mode 100644 index 000000000..60768547f Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/botswana_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/brazil.bmp b/plugins/channelrx/demodadsb/flags/brazil.bmp new file mode 100644 index 000000000..2a17629b5 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/brazil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/brazil_mil.bmp b/plugins/channelrx/demodadsb/flags/brazil_mil.bmp new file mode 100644 index 000000000..5f8498704 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/brazil_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/brunei.bmp b/plugins/channelrx/demodadsb/flags/brunei.bmp new file mode 100644 index 000000000..76c5a69fd Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/brunei.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/brunei_mil.bmp b/plugins/channelrx/demodadsb/flags/brunei_mil.bmp new file mode 100644 index 000000000..67bdf8cf0 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/brunei_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/bulgaria.bmp b/plugins/channelrx/demodadsb/flags/bulgaria.bmp new file mode 100644 index 000000000..b0934ee67 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/bulgaria.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/bulgaria_mil.bmp b/plugins/channelrx/demodadsb/flags/bulgaria_mil.bmp new file mode 100644 index 000000000..129b6e987 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/bulgaria_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/burkina_faso.bmp b/plugins/channelrx/demodadsb/flags/burkina_faso.bmp new file mode 100644 index 000000000..0eeacc319 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/burkina_faso.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/burkina_faso_mil.bmp b/plugins/channelrx/demodadsb/flags/burkina_faso_mil.bmp new file mode 100644 index 000000000..b323dc895 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/burkina_faso_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/burundi.bmp b/plugins/channelrx/demodadsb/flags/burundi.bmp new file mode 100644 index 000000000..512fee8d6 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/burundi.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/burundi_mil.bmp b/plugins/channelrx/demodadsb/flags/burundi_mil.bmp new file mode 100644 index 000000000..4056a0e00 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/burundi_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/cambodia.bmp b/plugins/channelrx/demodadsb/flags/cambodia.bmp new file mode 100644 index 000000000..ce51d2a93 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/cambodia.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/cambodia_mil.bmp b/plugins/channelrx/demodadsb/flags/cambodia_mil.bmp new file mode 100644 index 000000000..bad1f18eb Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/cambodia_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/cameroon_mil.bmp b/plugins/channelrx/demodadsb/flags/cameroon_mil.bmp new file mode 100644 index 000000000..df4959180 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/cameroon_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/cameroun.bmp b/plugins/channelrx/demodadsb/flags/cameroun.bmp new file mode 100644 index 000000000..f0c9d0c75 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/cameroun.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/canada.bmp b/plugins/channelrx/demodadsb/flags/canada.bmp new file mode 100644 index 000000000..1cc9632f2 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/canada.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/canada_mil.bmp b/plugins/channelrx/demodadsb/flags/canada_mil.bmp new file mode 100644 index 000000000..dea51af57 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/canada_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/cape_verde.bmp b/plugins/channelrx/demodadsb/flags/cape_verde.bmp new file mode 100644 index 000000000..56adbefd5 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/cape_verde.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/cayman_isles.bmp b/plugins/channelrx/demodadsb/flags/cayman_isles.bmp new file mode 100644 index 000000000..78ba1fd7d Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/cayman_isles.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/central_african_republic.bmp b/plugins/channelrx/demodadsb/flags/central_african_republic.bmp new file mode 100644 index 000000000..c4bcef068 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/central_african_republic.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/central_african_republic_mil.bmp b/plugins/channelrx/demodadsb/flags/central_african_republic_mil.bmp new file mode 100644 index 000000000..dfb9b4366 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/central_african_republic_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/chad.bmp b/plugins/channelrx/demodadsb/flags/chad.bmp new file mode 100644 index 000000000..f6d217038 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/chad.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/chad_mil.bmp b/plugins/channelrx/demodadsb/flags/chad_mil.bmp new file mode 100644 index 000000000..4621d5cb7 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/chad_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/chechnya_mil.bmp b/plugins/channelrx/demodadsb/flags/chechnya_mil.bmp new file mode 100644 index 000000000..f41ea6594 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/chechnya_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/chile.bmp b/plugins/channelrx/demodadsb/flags/chile.bmp new file mode 100644 index 000000000..e9d6b9609 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/chile.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/chile_mil.bmp b/plugins/channelrx/demodadsb/flags/chile_mil.bmp new file mode 100644 index 000000000..a15aedadb Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/chile_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/chili.bmp b/plugins/channelrx/demodadsb/flags/chili.bmp new file mode 100644 index 000000000..7c950ca4b Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/chili.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/china.bmp b/plugins/channelrx/demodadsb/flags/china.bmp new file mode 100644 index 000000000..c47980874 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/china.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/china_hong_kong.bmp b/plugins/channelrx/demodadsb/flags/china_hong_kong.bmp new file mode 100644 index 000000000..6602598fa Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/china_hong_kong.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/china_macau.bmp b/plugins/channelrx/demodadsb/flags/china_macau.bmp new file mode 100644 index 000000000..b156f2c26 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/china_macau.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/china_mil.bmp b/plugins/channelrx/demodadsb/flags/china_mil.bmp new file mode 100644 index 000000000..673db89b1 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/china_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/colombia.bmp b/plugins/channelrx/demodadsb/flags/colombia.bmp new file mode 100644 index 000000000..9919839e9 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/colombia.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/colombia_mil.bmp b/plugins/channelrx/demodadsb/flags/colombia_mil.bmp new file mode 100644 index 000000000..11f92aa10 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/colombia_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/comoros.bmp b/plugins/channelrx/demodadsb/flags/comoros.bmp new file mode 100644 index 000000000..d23d98b4d Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/comoros.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/comoros_mil.bmp b/plugins/channelrx/demodadsb/flags/comoros_mil.bmp new file mode 100644 index 000000000..f740465e0 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/comoros_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/congo-drc_mil.bmp b/plugins/channelrx/demodadsb/flags/congo-drc_mil.bmp new file mode 100644 index 000000000..8084d4d87 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/congo-drc_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/congo-roc.bmp b/plugins/channelrx/demodadsb/flags/congo-roc.bmp new file mode 100644 index 000000000..badab17ae Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/congo-roc.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/congo-roc_mil.bmp b/plugins/channelrx/demodadsb/flags/congo-roc_mil.bmp new file mode 100644 index 000000000..fc13f47b0 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/congo-roc_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/congo_brazzaville.bmp b/plugins/channelrx/demodadsb/flags/congo_brazzaville.bmp new file mode 100644 index 000000000..901b448dc Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/congo_brazzaville.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/congodrc.bmp b/plugins/channelrx/demodadsb/flags/congodrc.bmp new file mode 100644 index 000000000..9f110ae42 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/congodrc.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/congodrc_mil.bmp b/plugins/channelrx/demodadsb/flags/congodrc_mil.bmp new file mode 100644 index 000000000..b550d51a3 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/congodrc_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/congoroc.bmp b/plugins/channelrx/demodadsb/flags/congoroc.bmp new file mode 100644 index 000000000..badab17ae Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/congoroc.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/congoroc_mil.bmp b/plugins/channelrx/demodadsb/flags/congoroc_mil.bmp new file mode 100644 index 000000000..16451088b Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/congoroc_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/cook_islands.bmp b/plugins/channelrx/demodadsb/flags/cook_islands.bmp new file mode 100644 index 000000000..31e2664b3 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/cook_islands.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/costa_rica.bmp b/plugins/channelrx/demodadsb/flags/costa_rica.bmp new file mode 100644 index 000000000..8d3a88c9c Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/costa_rica.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/costa_rica_mil.bmp b/plugins/channelrx/demodadsb/flags/costa_rica_mil.bmp new file mode 100644 index 000000000..ad2777db7 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/costa_rica_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/cote_d'ivoire.bmp b/plugins/channelrx/demodadsb/flags/cote_d'ivoire.bmp new file mode 100644 index 000000000..d364b290c Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/cote_d'ivoire.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/cote_d'ivoire_mil.bmp b/plugins/channelrx/demodadsb/flags/cote_d'ivoire_mil.bmp new file mode 100644 index 000000000..ef7a12529 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/cote_d'ivoire_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/cote_d'ivorie.bmp b/plugins/channelrx/demodadsb/flags/cote_d'ivorie.bmp new file mode 100644 index 000000000..e5e143c3c Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/cote_d'ivorie.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/croatia.bmp b/plugins/channelrx/demodadsb/flags/croatia.bmp new file mode 100644 index 000000000..dabf2a481 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/croatia.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/croatia_mil.bmp b/plugins/channelrx/demodadsb/flags/croatia_mil.bmp new file mode 100644 index 000000000..19977295f Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/croatia_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/cuba.bmp b/plugins/channelrx/demodadsb/flags/cuba.bmp new file mode 100644 index 000000000..71dd6da34 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/cuba.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/cuba_mil.bmp b/plugins/channelrx/demodadsb/flags/cuba_mil.bmp new file mode 100644 index 000000000..49373501e Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/cuba_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/cyprus.bmp b/plugins/channelrx/demodadsb/flags/cyprus.bmp new file mode 100644 index 000000000..7d9908182 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/cyprus.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/cyprus_mil.bmp b/plugins/channelrx/demodadsb/flags/cyprus_mil.bmp new file mode 100644 index 000000000..d20cb6b3e Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/cyprus_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/czech_republic.bmp b/plugins/channelrx/demodadsb/flags/czech_republic.bmp new file mode 100644 index 000000000..d52dd1370 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/czech_republic.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/czech_republic_mil.bmp b/plugins/channelrx/demodadsb/flags/czech_republic_mil.bmp new file mode 100644 index 000000000..b3a447615 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/czech_republic_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/denmark.bmp b/plugins/channelrx/demodadsb/flags/denmark.bmp new file mode 100644 index 000000000..42454009e Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/denmark.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/denmark_mil.bmp b/plugins/channelrx/demodadsb/flags/denmark_mil.bmp new file mode 100644 index 000000000..50d134aca Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/denmark_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/djibouti.bmp b/plugins/channelrx/demodadsb/flags/djibouti.bmp new file mode 100644 index 000000000..1bb3e10df Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/djibouti.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/djibouti_mil.bmp b/plugins/channelrx/demodadsb/flags/djibouti_mil.bmp new file mode 100644 index 000000000..3aabf2c5c Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/djibouti_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/dominca.bmp b/plugins/channelrx/demodadsb/flags/dominca.bmp new file mode 100644 index 000000000..c297d8f2f Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/dominca.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/dominica.bmp b/plugins/channelrx/demodadsb/flags/dominica.bmp new file mode 100644 index 000000000..f92f069f5 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/dominica.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/dominican_republic.bmp b/plugins/channelrx/demodadsb/flags/dominican_republic.bmp new file mode 100644 index 000000000..0d66b869a Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/dominican_republic.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/dominican_republic_mil.bmp b/plugins/channelrx/demodadsb/flags/dominican_republic_mil.bmp new file mode 100644 index 000000000..7ec0d6c3a Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/dominican_republic_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/ecuador.bmp b/plugins/channelrx/demodadsb/flags/ecuador.bmp new file mode 100644 index 000000000..9a7d612c2 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/ecuador.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/ecuador_mil.bmp b/plugins/channelrx/demodadsb/flags/ecuador_mil.bmp new file mode 100644 index 000000000..269c13ac9 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/ecuador_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/egypt.bmp b/plugins/channelrx/demodadsb/flags/egypt.bmp new file mode 100644 index 000000000..13c79b413 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/egypt.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/egypt_mil.bmp b/plugins/channelrx/demodadsb/flags/egypt_mil.bmp new file mode 100644 index 000000000..f63e3469c Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/egypt_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/el_salvador.bmp b/plugins/channelrx/demodadsb/flags/el_salvador.bmp new file mode 100644 index 000000000..4c7ddadc9 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/el_salvador.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/el_salvador_mil.bmp b/plugins/channelrx/demodadsb/flags/el_salvador_mil.bmp new file mode 100644 index 000000000..dba1143e5 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/el_salvador_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/equatorial_guinea.bmp b/plugins/channelrx/demodadsb/flags/equatorial_guinea.bmp new file mode 100644 index 000000000..77d2b258c Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/equatorial_guinea.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/equatorial_guinea_mil.bmp b/plugins/channelrx/demodadsb/flags/equatorial_guinea_mil.bmp new file mode 100644 index 000000000..1ec386ced Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/equatorial_guinea_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/eritrea.bmp b/plugins/channelrx/demodadsb/flags/eritrea.bmp new file mode 100644 index 000000000..9ef225530 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/eritrea.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/eritrea_mil.bmp b/plugins/channelrx/demodadsb/flags/eritrea_mil.bmp new file mode 100644 index 000000000..ed8f79f7f Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/eritrea_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/estonia.bmp b/plugins/channelrx/demodadsb/flags/estonia.bmp new file mode 100644 index 000000000..bad688b74 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/estonia.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/estonia_mil.bmp b/plugins/channelrx/demodadsb/flags/estonia_mil.bmp new file mode 100644 index 000000000..91a052ae6 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/estonia_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/ethiopia.bmp b/plugins/channelrx/demodadsb/flags/ethiopia.bmp new file mode 100644 index 000000000..e9badb8f6 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/ethiopia.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/ethiopia_mil.bmp b/plugins/channelrx/demodadsb/flags/ethiopia_mil.bmp new file mode 100644 index 000000000..e7d61ed2f Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/ethiopia_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/eu.bmp b/plugins/channelrx/demodadsb/flags/eu.bmp new file mode 100644 index 000000000..d1b2c1868 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/eu.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/falkland_isles.bmp b/plugins/channelrx/demodadsb/flags/falkland_isles.bmp new file mode 100644 index 000000000..e669e1785 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/falkland_isles.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/faroe_islands.bmp b/plugins/channelrx/demodadsb/flags/faroe_islands.bmp new file mode 100644 index 000000000..3d8b4cea1 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/faroe_islands.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/fiji.bmp b/plugins/channelrx/demodadsb/flags/fiji.bmp new file mode 100644 index 000000000..14faab951 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/fiji.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/finland.bmp b/plugins/channelrx/demodadsb/flags/finland.bmp new file mode 100644 index 000000000..776bb2c1c Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/finland.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/finland_mil.bmp b/plugins/channelrx/demodadsb/flags/finland_mil.bmp new file mode 100644 index 000000000..805d08859 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/finland_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/france.bmp b/plugins/channelrx/demodadsb/flags/france.bmp new file mode 100644 index 000000000..17d7f5443 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/france.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/france_mil.bmp b/plugins/channelrx/demodadsb/flags/france_mil.bmp new file mode 100644 index 000000000..69c4c9615 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/france_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/francemil.bmp b/plugins/channelrx/demodadsb/flags/francemil.bmp new file mode 100644 index 000000000..81d3489a6 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/francemil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/gabon.bmp b/plugins/channelrx/demodadsb/flags/gabon.bmp new file mode 100644 index 000000000..6dea7eb02 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/gabon.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/gabon_mil.bmp b/plugins/channelrx/demodadsb/flags/gabon_mil.bmp new file mode 100644 index 000000000..bfa180c9b Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/gabon_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/gambia.bmp b/plugins/channelrx/demodadsb/flags/gambia.bmp new file mode 100644 index 000000000..52aa613ae Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/gambia.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/gambia_mil.bmp b/plugins/channelrx/demodadsb/flags/gambia_mil.bmp new file mode 100644 index 000000000..1a623f202 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/gambia_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/georgia.bmp b/plugins/channelrx/demodadsb/flags/georgia.bmp new file mode 100644 index 000000000..6be95272a Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/georgia.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/georgia_mil.bmp b/plugins/channelrx/demodadsb/flags/georgia_mil.bmp new file mode 100644 index 000000000..13e06b9c9 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/georgia_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/germany.bmp b/plugins/channelrx/demodadsb/flags/germany.bmp new file mode 100644 index 000000000..a9ecf5371 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/germany.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/germany_mil.bmp b/plugins/channelrx/demodadsb/flags/germany_mil.bmp new file mode 100644 index 000000000..bbbe182d2 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/germany_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/ghana.bmp b/plugins/channelrx/demodadsb/flags/ghana.bmp new file mode 100644 index 000000000..bf4a3f05b Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/ghana.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/ghana_mil.bmp b/plugins/channelrx/demodadsb/flags/ghana_mil.bmp new file mode 100644 index 000000000..a79b03398 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/ghana_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/gibraltar.bmp b/plugins/channelrx/demodadsb/flags/gibraltar.bmp new file mode 100644 index 000000000..ccb2eabe8 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/gibraltar.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/greece.bmp b/plugins/channelrx/demodadsb/flags/greece.bmp new file mode 100644 index 000000000..73f1e62db Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/greece.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/greece_mil.bmp b/plugins/channelrx/demodadsb/flags/greece_mil.bmp new file mode 100644 index 000000000..74cb7ca7b Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/greece_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/grenada.bmp b/plugins/channelrx/demodadsb/flags/grenada.bmp new file mode 100644 index 000000000..d404576b8 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/grenada.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/guam.bmp b/plugins/channelrx/demodadsb/flags/guam.bmp new file mode 100644 index 000000000..05db92b1d Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/guam.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/guatemala.bmp b/plugins/channelrx/demodadsb/flags/guatemala.bmp new file mode 100644 index 000000000..e3ea41230 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/guatemala.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/guatemala_mil.bmp b/plugins/channelrx/demodadsb/flags/guatemala_mil.bmp new file mode 100644 index 000000000..016149c86 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/guatemala_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/guernsey.bmp b/plugins/channelrx/demodadsb/flags/guernsey.bmp new file mode 100644 index 000000000..5299d091e Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/guernsey.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/guinea bissau.bmp b/plugins/channelrx/demodadsb/flags/guinea bissau.bmp new file mode 100644 index 000000000..e4780f0e3 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/guinea bissau.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/guinea-bissau.bmp b/plugins/channelrx/demodadsb/flags/guinea-bissau.bmp new file mode 100644 index 000000000..74bed47a3 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/guinea-bissau.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/guinea-bissau_mil.bmp b/plugins/channelrx/demodadsb/flags/guinea-bissau_mil.bmp new file mode 100644 index 000000000..8643f4150 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/guinea-bissau_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/guinea.bmp b/plugins/channelrx/demodadsb/flags/guinea.bmp new file mode 100644 index 000000000..2c3a80aed Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/guinea.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/guinea_bissau.bmp b/plugins/channelrx/demodadsb/flags/guinea_bissau.bmp new file mode 100644 index 000000000..e4780f0e3 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/guinea_bissau.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/guinea_mil.bmp b/plugins/channelrx/demodadsb/flags/guinea_mil.bmp new file mode 100644 index 000000000..5c53a903b Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/guinea_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/guineabissau.bmp b/plugins/channelrx/demodadsb/flags/guineabissau.bmp new file mode 100644 index 000000000..74bed47a3 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/guineabissau.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/guineabissau_mil.bmp b/plugins/channelrx/demodadsb/flags/guineabissau_mil.bmp new file mode 100644 index 000000000..e6d096438 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/guineabissau_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/guyana.bmp b/plugins/channelrx/demodadsb/flags/guyana.bmp new file mode 100644 index 000000000..b32d87975 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/guyana.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/guyana_mil.bmp b/plugins/channelrx/demodadsb/flags/guyana_mil.bmp new file mode 100644 index 000000000..8d336506c Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/guyana_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/haiti.bmp b/plugins/channelrx/demodadsb/flags/haiti.bmp new file mode 100644 index 000000000..3c7653a2e Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/haiti.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/haiti_mil.bmp b/plugins/channelrx/demodadsb/flags/haiti_mil.bmp new file mode 100644 index 000000000..f63a30627 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/haiti_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/honduras.bmp b/plugins/channelrx/demodadsb/flags/honduras.bmp new file mode 100644 index 000000000..a9a653415 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/honduras.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/honduras_mil.bmp b/plugins/channelrx/demodadsb/flags/honduras_mil.bmp new file mode 100644 index 000000000..90e8c5d4e Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/honduras_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/hong_kong.bmp b/plugins/channelrx/demodadsb/flags/hong_kong.bmp new file mode 100644 index 000000000..6602598fa Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/hong_kong.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/hungary.bmp b/plugins/channelrx/demodadsb/flags/hungary.bmp new file mode 100644 index 000000000..cb7e3be0c Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/hungary.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/hungary_mil.bmp b/plugins/channelrx/demodadsb/flags/hungary_mil.bmp new file mode 100644 index 000000000..e98a9b665 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/hungary_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/icao.bmp b/plugins/channelrx/demodadsb/flags/icao.bmp new file mode 100644 index 000000000..0bdae5f21 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/icao.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/iceland.bmp b/plugins/channelrx/demodadsb/flags/iceland.bmp new file mode 100644 index 000000000..89ea27177 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/iceland.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/iceland_mil.bmp b/plugins/channelrx/demodadsb/flags/iceland_mil.bmp new file mode 100644 index 000000000..4d3394839 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/iceland_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/india.bmp b/plugins/channelrx/demodadsb/flags/india.bmp new file mode 100644 index 000000000..7c2e27d0c Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/india.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/india_mil.bmp b/plugins/channelrx/demodadsb/flags/india_mil.bmp new file mode 100644 index 000000000..53493d0fe Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/india_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/indonesia.bmp b/plugins/channelrx/demodadsb/flags/indonesia.bmp new file mode 100644 index 000000000..302215f3a Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/indonesia.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/indonesia_mil.bmp b/plugins/channelrx/demodadsb/flags/indonesia_mil.bmp new file mode 100644 index 000000000..d4cc8b89e Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/indonesia_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/iran.bmp b/plugins/channelrx/demodadsb/flags/iran.bmp new file mode 100644 index 000000000..051c20352 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/iran.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/iran_mil.bmp b/plugins/channelrx/demodadsb/flags/iran_mil.bmp new file mode 100644 index 000000000..9dc09c968 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/iran_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/iraq.bmp b/plugins/channelrx/demodadsb/flags/iraq.bmp new file mode 100644 index 000000000..8bbb95e6c Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/iraq.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/iraq_mil.bmp b/plugins/channelrx/demodadsb/flags/iraq_mil.bmp new file mode 100644 index 000000000..d58d421a1 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/iraq_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/ireland.bmp b/plugins/channelrx/demodadsb/flags/ireland.bmp new file mode 100644 index 000000000..04ec8e0ad Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/ireland.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/ireland_mil.bmp b/plugins/channelrx/demodadsb/flags/ireland_mil.bmp new file mode 100644 index 000000000..f29fa2d33 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/ireland_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/isle_of_man.bmp b/plugins/channelrx/demodadsb/flags/isle_of_man.bmp new file mode 100644 index 000000000..09a3627d5 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/isle_of_man.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/isle_of_man_5.bmp b/plugins/channelrx/demodadsb/flags/isle_of_man_5.bmp new file mode 100644 index 000000000..09a3627d5 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/isle_of_man_5.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/isle_of_man_6.bmp b/plugins/channelrx/demodadsb/flags/isle_of_man_6.bmp new file mode 100644 index 000000000..09a3627d5 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/isle_of_man_6.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/israel.bmp b/plugins/channelrx/demodadsb/flags/israel.bmp new file mode 100644 index 000000000..634b51256 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/israel.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/israel_mil.bmp b/plugins/channelrx/demodadsb/flags/israel_mil.bmp new file mode 100644 index 000000000..2a5ebff00 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/israel_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/italy.bmp b/plugins/channelrx/demodadsb/flags/italy.bmp new file mode 100644 index 000000000..4d78fc3a2 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/italy.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/italy_mil.bmp b/plugins/channelrx/demodadsb/flags/italy_mil.bmp new file mode 100644 index 000000000..53cc01090 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/italy_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/ivory_coast.bmp b/plugins/channelrx/demodadsb/flags/ivory_coast.bmp new file mode 100644 index 000000000..63f8cd81e Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/ivory_coast.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/ivory_coast_mil.bmp b/plugins/channelrx/demodadsb/flags/ivory_coast_mil.bmp new file mode 100644 index 000000000..d1f3c7858 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/ivory_coast_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/jamaica.bmp b/plugins/channelrx/demodadsb/flags/jamaica.bmp new file mode 100644 index 000000000..54d8bef56 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/jamaica.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/jamaica_mil.bmp b/plugins/channelrx/demodadsb/flags/jamaica_mil.bmp new file mode 100644 index 000000000..71ac33fe9 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/jamaica_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/japan.bmp b/plugins/channelrx/demodadsb/flags/japan.bmp new file mode 100644 index 000000000..d97f57f6b Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/japan.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/japan_mil.bmp b/plugins/channelrx/demodadsb/flags/japan_mil.bmp new file mode 100644 index 000000000..1dd772c57 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/japan_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/jersey.bmp b/plugins/channelrx/demodadsb/flags/jersey.bmp new file mode 100644 index 000000000..c475112e3 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/jersey.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/jordan.bmp b/plugins/channelrx/demodadsb/flags/jordan.bmp new file mode 100644 index 000000000..b4519d712 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/jordan.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/jordan_mil.bmp b/plugins/channelrx/demodadsb/flags/jordan_mil.bmp new file mode 100644 index 000000000..5b5f7c8b3 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/jordan_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/kazakhstan_mil.bmp b/plugins/channelrx/demodadsb/flags/kazakhstan_mil.bmp new file mode 100644 index 000000000..ef42375b1 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/kazakhstan_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/kenya.bmp b/plugins/channelrx/demodadsb/flags/kenya.bmp new file mode 100644 index 000000000..9641a032f Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/kenya.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/kenya_mil.bmp b/plugins/channelrx/demodadsb/flags/kenya_mil.bmp new file mode 100644 index 000000000..43cbc2783 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/kenya_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/khazakstan.bmp b/plugins/channelrx/demodadsb/flags/khazakstan.bmp new file mode 100644 index 000000000..05c984145 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/khazakstan.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/kiribati.bmp b/plugins/channelrx/demodadsb/flags/kiribati.bmp new file mode 100644 index 000000000..3a6f13889 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/kiribati.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/korea-north-mil.bmp b/plugins/channelrx/demodadsb/flags/korea-north-mil.bmp new file mode 100644 index 000000000..262d246c8 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/korea-north-mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/korea-north.bmp b/plugins/channelrx/demodadsb/flags/korea-north.bmp new file mode 100644 index 000000000..c3600ef19 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/korea-north.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/korea-south-mil.bmp b/plugins/channelrx/demodadsb/flags/korea-south-mil.bmp new file mode 100644 index 000000000..977ffb5aa Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/korea-south-mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/korea-south.bmp b/plugins/channelrx/demodadsb/flags/korea-south.bmp new file mode 100644 index 000000000..7fad89114 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/korea-south.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/korea_north.bmp b/plugins/channelrx/demodadsb/flags/korea_north.bmp new file mode 100644 index 000000000..c3600ef19 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/korea_north.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/korea_north_mil.bmp b/plugins/channelrx/demodadsb/flags/korea_north_mil.bmp new file mode 100644 index 000000000..51babb4bf Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/korea_north_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/korea_south.bmp b/plugins/channelrx/demodadsb/flags/korea_south.bmp new file mode 100644 index 000000000..7fad89114 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/korea_south.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/koreasouthmil.bmp b/plugins/channelrx/demodadsb/flags/koreasouthmil.bmp new file mode 100644 index 000000000..f3c7e7ea3 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/koreasouthmil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/kuwait.bmp b/plugins/channelrx/demodadsb/flags/kuwait.bmp new file mode 100644 index 000000000..54b56c1c1 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/kuwait.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/kuwait_mil.bmp b/plugins/channelrx/demodadsb/flags/kuwait_mil.bmp new file mode 100644 index 000000000..fee990eb7 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/kuwait_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/kyrgyzstan.bmp b/plugins/channelrx/demodadsb/flags/kyrgyzstan.bmp new file mode 100644 index 000000000..fbc9ce9d2 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/kyrgyzstan.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/kyrgyzstan_mil.bmp b/plugins/channelrx/demodadsb/flags/kyrgyzstan_mil.bmp new file mode 100644 index 000000000..c84ae793a Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/kyrgyzstan_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/laos.bmp b/plugins/channelrx/demodadsb/flags/laos.bmp new file mode 100644 index 000000000..262d895d3 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/laos.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/laos_mil.bmp b/plugins/channelrx/demodadsb/flags/laos_mil.bmp new file mode 100644 index 000000000..4e8eff200 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/laos_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/latvia.bmp b/plugins/channelrx/demodadsb/flags/latvia.bmp new file mode 100644 index 000000000..97e820db8 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/latvia.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/latvia_mil.bmp b/plugins/channelrx/demodadsb/flags/latvia_mil.bmp new file mode 100644 index 000000000..c4be15ce7 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/latvia_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/lebanon.bmp b/plugins/channelrx/demodadsb/flags/lebanon.bmp new file mode 100644 index 000000000..019320aba Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/lebanon.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/lebanon_mil.bmp b/plugins/channelrx/demodadsb/flags/lebanon_mil.bmp new file mode 100644 index 000000000..7405b5852 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/lebanon_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/lesotho.bmp b/plugins/channelrx/demodadsb/flags/lesotho.bmp new file mode 100644 index 000000000..62b34caab Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/lesotho.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/lesotho_mil.bmp b/plugins/channelrx/demodadsb/flags/lesotho_mil.bmp new file mode 100644 index 000000000..8277da823 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/lesotho_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/liberia.bmp b/plugins/channelrx/demodadsb/flags/liberia.bmp new file mode 100644 index 000000000..ba06422f5 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/liberia.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/liberia_mil.bmp b/plugins/channelrx/demodadsb/flags/liberia_mil.bmp new file mode 100644 index 000000000..5083adb20 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/liberia_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/libya.bmp b/plugins/channelrx/demodadsb/flags/libya.bmp new file mode 100644 index 000000000..2bf980ef2 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/libya.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/libya_mil.bmp b/plugins/channelrx/demodadsb/flags/libya_mil.bmp new file mode 100644 index 000000000..08b150e44 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/libya_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/liechtenstein.bmp b/plugins/channelrx/demodadsb/flags/liechtenstein.bmp new file mode 100644 index 000000000..e81c069a7 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/liechtenstein.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/lithuania.bmp b/plugins/channelrx/demodadsb/flags/lithuania.bmp new file mode 100644 index 000000000..709f50806 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/lithuania.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/lithuania_mil.bmp b/plugins/channelrx/demodadsb/flags/lithuania_mil.bmp new file mode 100644 index 000000000..7a189e29a Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/lithuania_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/luxembourg.bmp b/plugins/channelrx/demodadsb/flags/luxembourg.bmp new file mode 100644 index 000000000..fd3276b1b Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/luxembourg.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/luxembourg_mil.bmp b/plugins/channelrx/demodadsb/flags/luxembourg_mil.bmp new file mode 100644 index 000000000..ef13cff34 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/luxembourg_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/luxemburg.bmp b/plugins/channelrx/demodadsb/flags/luxemburg.bmp new file mode 100644 index 000000000..fd3276b1b Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/luxemburg.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/macedonia.bmp b/plugins/channelrx/demodadsb/flags/macedonia.bmp new file mode 100644 index 000000000..11662fc75 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/macedonia.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/macedonia_mil.bmp b/plugins/channelrx/demodadsb/flags/macedonia_mil.bmp new file mode 100644 index 000000000..abdbba887 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/macedonia_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/madagascar.bmp b/plugins/channelrx/demodadsb/flags/madagascar.bmp new file mode 100644 index 000000000..688bdd1e2 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/madagascar.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/madagascar_mil.bmp b/plugins/channelrx/demodadsb/flags/madagascar_mil.bmp new file mode 100644 index 000000000..3ec5218c2 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/madagascar_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/malawi.bmp b/plugins/channelrx/demodadsb/flags/malawi.bmp new file mode 100644 index 000000000..47ce7e8b4 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/malawi.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/malawi_mil.bmp b/plugins/channelrx/demodadsb/flags/malawi_mil.bmp new file mode 100644 index 000000000..e7b681b7f Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/malawi_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/malaysia.bmp b/plugins/channelrx/demodadsb/flags/malaysia.bmp new file mode 100644 index 000000000..8e8b2ed38 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/malaysia.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/malaysia_mil.bmp b/plugins/channelrx/demodadsb/flags/malaysia_mil.bmp new file mode 100644 index 000000000..367a136ba Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/malaysia_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/maldives.bmp b/plugins/channelrx/demodadsb/flags/maldives.bmp new file mode 100644 index 000000000..f9ec058af Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/maldives.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/mali.bmp b/plugins/channelrx/demodadsb/flags/mali.bmp new file mode 100644 index 000000000..fb2ce6451 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/mali.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/mali_mil.bmp b/plugins/channelrx/demodadsb/flags/mali_mil.bmp new file mode 100644 index 000000000..1b36c8201 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/mali_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/malta.bmp b/plugins/channelrx/demodadsb/flags/malta.bmp new file mode 100644 index 000000000..182a6c875 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/malta.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/malta_mil.bmp b/plugins/channelrx/demodadsb/flags/malta_mil.bmp new file mode 100644 index 000000000..50b744506 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/malta_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/marshall islands.bmp b/plugins/channelrx/demodadsb/flags/marshall islands.bmp new file mode 100644 index 000000000..4a5a49b0e Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/marshall islands.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/marshall_islands.bmp b/plugins/channelrx/demodadsb/flags/marshall_islands.bmp new file mode 100644 index 000000000..4a5a49b0e Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/marshall_islands.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/mauritania.bmp b/plugins/channelrx/demodadsb/flags/mauritania.bmp new file mode 100644 index 000000000..215a54592 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/mauritania.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/mauritania_mil.bmp b/plugins/channelrx/demodadsb/flags/mauritania_mil.bmp new file mode 100644 index 000000000..87062301b Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/mauritania_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/mauritius.bmp b/plugins/channelrx/demodadsb/flags/mauritius.bmp new file mode 100644 index 000000000..fca7c6620 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/mauritius.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/mexico.bmp b/plugins/channelrx/demodadsb/flags/mexico.bmp new file mode 100644 index 000000000..5525363a7 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/mexico.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/mexico_mil.bmp b/plugins/channelrx/demodadsb/flags/mexico_mil.bmp new file mode 100644 index 000000000..2f0ef1fb7 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/mexico_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/micronesia.bmp b/plugins/channelrx/demodadsb/flags/micronesia.bmp new file mode 100644 index 000000000..cdc177c1f Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/micronesia.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/militarymap.csv b/plugins/channelrx/demodadsb/flags/militarymap.csv new file mode 100644 index 000000000..e51417561 --- /dev/null +++ b/plugins/channelrx/demodadsb/flags/militarymap.csv @@ -0,0 +1,48 @@ +operator,military +Algerian Air Force,algeria_mil +Austrian Air Force,austria_mil +Brazilian Air Force,brazil_mil +Bulgarian Air Force,bulgaria_mil +Bulgarian Air Force,bulgaria_mil +Chinese Air Force,china_mil +Colombian Air Force,colombia_mil +Czech Air Force,czech_republic_mil +Ecuadorean Air Force,ecuador_mil +Egyptian Air Force,egypt_mil +Estonian Air Force,estonia_mil +Force Aerienne Francaise,france_mil +German Air Force,germany_mil +Greek Air Force,greece_mil +Indian Air Force,india_mil +Israeli Air Force,israel_mil +Italian Air Force,italy_mil +Kuwait Air Force,kuwait_mil +Lithuanian Air Force,lithuania_mil +Mexican Air Force,mexico_mil +Nigerian Air Force,nigeria_mil +Pakistan Air Force,pakistan_mil +Philippine Air Force,philippines_mil +Polish Air Force,poland_mil +Portuguese Air Force,portugal_mil +Qatar Emiri Air Force,qatar_mil +Republic Of Korea Air Force,korea-south-mil +Romanian Air Force,romania_mil +Royal Air Force,united_kingdom_mil +Royal Australian Air Force,australia_mil +Royal Danish Air Force,denmark_mil +Royal Malaysian Air Force,malaysia_mil +Royal Moroccan Air Force,morocco_mil +Royal Netherlands Air Force,netherlands_mil +Royal New Zealand Air Force,new_zealand_mil +Royal Norwegian Air Force,norway_mil +Royal Saudi Air Force,saudi_arabia_mil +Royal Thai Air Force,thailand_mil +Russian Air Force,russia_mil +Serbian Air Force,serbia_mil +Spanish Air Force,spain_mil +Swedish Air Force,sweden_mil +Swiss Air Force,switzerland_mil +Syrian Air Force,syria_mil +United Arab Emirates Air Force,united_arab_emirates_mil +United States Air Force,united_states_mil +Venezuelan Air Force,venezuela_mil diff --git a/plugins/channelrx/demodadsb/flags/moldova.bmp b/plugins/channelrx/demodadsb/flags/moldova.bmp new file mode 100644 index 000000000..5988788b9 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/moldova.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/moldova_mil.bmp b/plugins/channelrx/demodadsb/flags/moldova_mil.bmp new file mode 100644 index 000000000..e950c0585 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/moldova_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/monaco.bmp b/plugins/channelrx/demodadsb/flags/monaco.bmp new file mode 100644 index 000000000..90ca50c61 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/monaco.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/mongolia.bmp b/plugins/channelrx/demodadsb/flags/mongolia.bmp new file mode 100644 index 000000000..4799d0161 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/mongolia.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/mongolia_mil.bmp b/plugins/channelrx/demodadsb/flags/mongolia_mil.bmp new file mode 100644 index 000000000..62d423edf Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/mongolia_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/monserrat.bmp b/plugins/channelrx/demodadsb/flags/monserrat.bmp new file mode 100644 index 000000000..5227ec1c4 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/monserrat.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/montenegro.bmp b/plugins/channelrx/demodadsb/flags/montenegro.bmp new file mode 100644 index 000000000..69fd463f8 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/montenegro.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/montenegro_mil.bmp b/plugins/channelrx/demodadsb/flags/montenegro_mil.bmp new file mode 100644 index 000000000..6f889e777 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/montenegro_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/morocco.bmp b/plugins/channelrx/demodadsb/flags/morocco.bmp new file mode 100644 index 000000000..f825c8bb5 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/morocco.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/morocco_mil.bmp b/plugins/channelrx/demodadsb/flags/morocco_mil.bmp new file mode 100644 index 000000000..d67d6d4a9 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/morocco_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/mozambique.bmp b/plugins/channelrx/demodadsb/flags/mozambique.bmp new file mode 100644 index 000000000..268b8023a Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/mozambique.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/mozambique_mil.bmp b/plugins/channelrx/demodadsb/flags/mozambique_mil.bmp new file mode 100644 index 000000000..31bbd99ee Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/mozambique_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/myanmar.bmp b/plugins/channelrx/demodadsb/flags/myanmar.bmp new file mode 100644 index 000000000..92f08778f Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/myanmar.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/myanmar_mil.bmp b/plugins/channelrx/demodadsb/flags/myanmar_mil.bmp new file mode 100644 index 000000000..cc9d7e897 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/myanmar_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/namibia.bmp b/plugins/channelrx/demodadsb/flags/namibia.bmp new file mode 100644 index 000000000..8d911f3df Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/namibia.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/namibia_mil.bmp b/plugins/channelrx/demodadsb/flags/namibia_mil.bmp new file mode 100644 index 000000000..ab3ffb40d Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/namibia_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/nato.bmp b/plugins/channelrx/demodadsb/flags/nato.bmp new file mode 100644 index 000000000..0da2a8ae0 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/nato.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/nauru.bmp b/plugins/channelrx/demodadsb/flags/nauru.bmp new file mode 100644 index 000000000..9c47218a5 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/nauru.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/nepal.bmp b/plugins/channelrx/demodadsb/flags/nepal.bmp new file mode 100644 index 000000000..5357dd8ff Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/nepal.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/nepal_mil.bmp b/plugins/channelrx/demodadsb/flags/nepal_mil.bmp new file mode 100644 index 000000000..4293b30d1 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/nepal_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/netherlands.bmp b/plugins/channelrx/demodadsb/flags/netherlands.bmp new file mode 100644 index 000000000..a24c75465 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/netherlands.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/netherlands_antilles.bmp b/plugins/channelrx/demodadsb/flags/netherlands_antilles.bmp new file mode 100644 index 000000000..dc2bfc7ac Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/netherlands_antilles.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/netherlands_mil.bmp b/plugins/channelrx/demodadsb/flags/netherlands_mil.bmp new file mode 100644 index 000000000..bc5ee5ecb Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/netherlands_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/new zealand.bmp b/plugins/channelrx/demodadsb/flags/new zealand.bmp new file mode 100644 index 000000000..f7cf1213d Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/new zealand.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/new_zealand.bmp b/plugins/channelrx/demodadsb/flags/new_zealand.bmp new file mode 100644 index 000000000..f7cf1213d Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/new_zealand.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/new_zealand_mil.bmp b/plugins/channelrx/demodadsb/flags/new_zealand_mil.bmp new file mode 100644 index 000000000..87dffc1e0 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/new_zealand_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/nicaragua.bmp b/plugins/channelrx/demodadsb/flags/nicaragua.bmp new file mode 100644 index 000000000..a5dbddeb1 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/nicaragua.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/nicaragua_mil.bmp b/plugins/channelrx/demodadsb/flags/nicaragua_mil.bmp new file mode 100644 index 000000000..7619f8d51 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/nicaragua_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/niger.bmp b/plugins/channelrx/demodadsb/flags/niger.bmp new file mode 100644 index 000000000..14b2d5a7f Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/niger.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/niger_mil.bmp b/plugins/channelrx/demodadsb/flags/niger_mil.bmp new file mode 100644 index 000000000..ca0f1cdae Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/niger_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/nigeria.bmp b/plugins/channelrx/demodadsb/flags/nigeria.bmp new file mode 100644 index 000000000..78b106b86 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/nigeria.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/nigeria_mil.bmp b/plugins/channelrx/demodadsb/flags/nigeria_mil.bmp new file mode 100644 index 000000000..2fcdbcc3b Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/nigeria_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/niue.bmp b/plugins/channelrx/demodadsb/flags/niue.bmp new file mode 100644 index 000000000..a58b90007 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/niue.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/noflag.bmp b/plugins/channelrx/demodadsb/flags/noflag.bmp new file mode 100644 index 000000000..9f588528d Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/noflag.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/north marianas.bmp b/plugins/channelrx/demodadsb/flags/north marianas.bmp new file mode 100644 index 000000000..bcf90f7a0 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/north marianas.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/north_marianas.bmp b/plugins/channelrx/demodadsb/flags/north_marianas.bmp new file mode 100644 index 000000000..bcf90f7a0 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/north_marianas.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/norway.bmp b/plugins/channelrx/demodadsb/flags/norway.bmp new file mode 100644 index 000000000..415db9c0b Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/norway.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/norway_mil.bmp b/plugins/channelrx/demodadsb/flags/norway_mil.bmp new file mode 100644 index 000000000..1eabbefab Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/norway_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/not allocated.bmp b/plugins/channelrx/demodadsb/flags/not allocated.bmp new file mode 100644 index 000000000..a84f78e8f Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/not allocated.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/not_allocated.bmp b/plugins/channelrx/demodadsb/flags/not_allocated.bmp new file mode 100644 index 000000000..a84f78e8f Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/not_allocated.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/oman.bmp b/plugins/channelrx/demodadsb/flags/oman.bmp new file mode 100644 index 000000000..57182e9ab Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/oman.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/oman_mil.bmp b/plugins/channelrx/demodadsb/flags/oman_mil.bmp new file mode 100644 index 000000000..cf44f5a84 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/oman_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/pakistan.bmp b/plugins/channelrx/demodadsb/flags/pakistan.bmp new file mode 100644 index 000000000..e32a7edb1 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/pakistan.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/pakistan_mil.bmp b/plugins/channelrx/demodadsb/flags/pakistan_mil.bmp new file mode 100644 index 000000000..414c6ec0f Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/pakistan_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/palau.bmp b/plugins/channelrx/demodadsb/flags/palau.bmp new file mode 100644 index 000000000..58b44ab15 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/palau.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/panama.bmp b/plugins/channelrx/demodadsb/flags/panama.bmp new file mode 100644 index 000000000..60f9ffcf2 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/panama.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/panama_mil.bmp b/plugins/channelrx/demodadsb/flags/panama_mil.bmp new file mode 100644 index 000000000..e1ed1757a Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/panama_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/papua_new_guinea.bmp b/plugins/channelrx/demodadsb/flags/papua_new_guinea.bmp new file mode 100644 index 000000000..6bb0484c3 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/papua_new_guinea.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/papua_new_guinea_mil.bmp b/plugins/channelrx/demodadsb/flags/papua_new_guinea_mil.bmp new file mode 100644 index 000000000..ae534143a Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/papua_new_guinea_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/paraguay.bmp b/plugins/channelrx/demodadsb/flags/paraguay.bmp new file mode 100644 index 000000000..5307ded4b Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/paraguay.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/paraguay_mil.bmp b/plugins/channelrx/demodadsb/flags/paraguay_mil.bmp new file mode 100644 index 000000000..561fb5179 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/paraguay_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/peru.bmp b/plugins/channelrx/demodadsb/flags/peru.bmp new file mode 100644 index 000000000..5e748ee8f Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/peru.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/peru_mil.bmp b/plugins/channelrx/demodadsb/flags/peru_mil.bmp new file mode 100644 index 000000000..f3069be6e Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/peru_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/philippines.bmp b/plugins/channelrx/demodadsb/flags/philippines.bmp new file mode 100644 index 000000000..e3f4308ff Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/philippines.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/philippines_mil.bmp b/plugins/channelrx/demodadsb/flags/philippines_mil.bmp new file mode 100644 index 000000000..d9890932b Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/philippines_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/phillippines.bmp b/plugins/channelrx/demodadsb/flags/phillippines.bmp new file mode 100644 index 000000000..e3f4308ff Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/phillippines.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/poland.bmp b/plugins/channelrx/demodadsb/flags/poland.bmp new file mode 100644 index 000000000..c3646f48a Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/poland.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/poland_mil.bmp b/plugins/channelrx/demodadsb/flags/poland_mil.bmp new file mode 100644 index 000000000..557f92896 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/poland_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/portugal.bmp b/plugins/channelrx/demodadsb/flags/portugal.bmp new file mode 100644 index 000000000..fa01cdf83 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/portugal.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/portugal_mil.bmp b/plugins/channelrx/demodadsb/flags/portugal_mil.bmp new file mode 100644 index 000000000..51270bf9b Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/portugal_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/qatar.bmp b/plugins/channelrx/demodadsb/flags/qatar.bmp new file mode 100644 index 000000000..dcb4b7365 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/qatar.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/qatar_mil.bmp b/plugins/channelrx/demodadsb/flags/qatar_mil.bmp new file mode 100644 index 000000000..187acae01 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/qatar_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/regprefixmap.csv b/plugins/channelrx/demodadsb/flags/regprefixmap.csv new file mode 100644 index 000000000..24cec7561 --- /dev/null +++ b/plugins/channelrx/demodadsb/flags/regprefixmap.csv @@ -0,0 +1,224 @@ +prefix,country +YA,afghanistan +ZA,albania +7T,algeria +C3,andorra +D2,angola +VP-A,anguilla +V2,antigua_and_barbuda +LV,argentina +LQ,argentina +EK,armenia +P4,aruba +VH,australia +OE,austria +3K,azerbaijan +C6,bahamas +A9C,bahrain +S2,bangladesh +8P,barbados +EW,belarus +OO,belgium +V3,belize +TY,benin +VP-B,bermuda +A5,bhutan +CP,bolivia +E7,bosnia +A2,botswana +PP,brazil +PR,brazil +PS,brazil +PT,brazil +PU,brazil +V8,brunei +LZ,bulgaria +XT,burkina_faso +9U,burundi +XU,cambodia +TJ,cameroun +C,canada +D4,cape_verde +VP-C,cayman_isles +TL,central_african_republic +TT,chad +CC,chile +B,china +B-M,china_macau +HJ,colombia +HK,colombia +D6,comoros +9Q,congoroc +E5,cook_islands +TI,costa_rica +TU,cote_d'ivoire +9A,croatia +CU,cuba +5B,cyprus +OK,czech_republic +OY,denmark +J2,djibouti +J7,dominica +HI,dominican_republic +HC,ecuador +SU,egypt +YS,el_salvador +3C,equatorial_guinea +E3,eritrea +ES,estonia +ET,ethiopia +VP-F,falkland_isles +DQ,fiji +OH,finland +F,france +TR,gabon +C5,gambia +4L,georgia +D,germany +9G,ghana +VP-G,gibraltar +SX,greece +J3,grenada +TG,guatemala +2,guernsey +3X,guinea +J5,guinea-bissau +8R,guyana +HH,haiti +HR,honduras +B-H,hong_kong +B-K,hong_kong +B-L,hong_kong +HA,hungary +TF,iceland +VT,india +PK,indonesia +EP,iran +YI,iraq +EI,ireland +EJ,ireland +M,isle_of_man +4X,israel +I,italy +6Y,jamaica +JA,japan +ZJ,jersey +JY,jordan +5Y,kenya +UP,khazakstan +T3,kiribati +P,korea_north +HL,korea-south +9K,kuwait +EX,kyrgyzstan +RDPL,laos +YL,latvia +OD,lebanon +7P,lesotho +A8,liberia +5A,libya +HB,liechtenstein +LY,lithuania +LX,luxembourg +Z3,macedonia +5R,madagascar +7Q,malawi +9M,malaysia +8Q,maldives +TZ,mali +9H,malta +V7,marshall_islands +5T,mauritania +3B,mauritius +XA,mexico +XB,mexico +XC,mexico +V6,micronesia +ER,moldova +3A,monaco +JU,mongolia +VP-M,monserrat +4O,montenegro +CN,morocco +C9,mozambique +XY,myanmar +XZ,myanmar +V5,namibia +C2,nauru +9N,nepal +PH,netherlands +ZK,new_zealand +ZL,new_zealand +ZM,new_zealand +YN,nicaragua +5U,niger +5N,nigeria +LN,norway +A4O,oman +AP,pakistan +HP,panama +P2,papua_new_guinea +ZP,paraguay +OB,peru +RP,philippines +SP,poland +CR,portugal +CS,portugal +A7,qatar +YR,romania +RA,russia +RF,russia +9XR,rwanda +5W,samoa +T7,san_marino +S9,sao_tome_principe +HZ,saudi_arabia +6V,senegal +6W,senegal +YU,serbia +S7,seychelles +9L,sierra_leone +9V,singapore +OM,slovakia +S5,slovenia +H4,solomon_islands +6O,somalia +ZS,south_africa +ZT,south_africa +ZU,south_africa +Z8,south_sudan +EC,spain +4R,sri_lanka +ST,sudan +PZ,suriname +3D,swaziland +SE,sweden +HB,switzerland +YK,syria +B,taiwan +EY,tajikistan +5H,tanzania +HS,thailand +5V,togo +A3,tonga +9Y,trinidad_and_tobago +TS,tunisia +TC,turkey +EZ,turkmenistan +VQ-T,turks_and_caicos +T2,tuvalu +5X,uganda +UR,ukraine +A6,united_arab_emirates +G,united_kingdom +4U,united_nations +N,united_states +CX,uruguay +UK,uzbekistan +YJ,vanuatu +HV,vatican_city +YV,venezuela +VN,vietnam +7O,yemen +9J,zambia +Z,zimbabwe diff --git a/plugins/channelrx/demodadsb/flags/rep. congo.bmp b/plugins/channelrx/demodadsb/flags/rep. congo.bmp new file mode 100644 index 000000000..d97a8cbb2 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/rep. congo.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/romania.bmp b/plugins/channelrx/demodadsb/flags/romania.bmp new file mode 100644 index 000000000..8ec2a8e17 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/romania.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/romania_mil.bmp b/plugins/channelrx/demodadsb/flags/romania_mil.bmp new file mode 100644 index 000000000..6180a9083 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/romania_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/russia.bmp b/plugins/channelrx/demodadsb/flags/russia.bmp new file mode 100644 index 000000000..29dc17c34 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/russia.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/russia_mil.bmp b/plugins/channelrx/demodadsb/flags/russia_mil.bmp new file mode 100644 index 000000000..802d3c594 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/russia_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/rwanda.bmp b/plugins/channelrx/demodadsb/flags/rwanda.bmp new file mode 100644 index 000000000..96e90ef90 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/rwanda.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/rwanda_mil.bmp b/plugins/channelrx/demodadsb/flags/rwanda_mil.bmp new file mode 100644 index 000000000..8551422c8 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/rwanda_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/samoa.bmp b/plugins/channelrx/demodadsb/flags/samoa.bmp new file mode 100644 index 000000000..106c957f2 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/samoa.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/san_marino.bmp b/plugins/channelrx/demodadsb/flags/san_marino.bmp new file mode 100644 index 000000000..4ea48a9ce Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/san_marino.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/sao_tome.bmp b/plugins/channelrx/demodadsb/flags/sao_tome.bmp new file mode 100644 index 000000000..9f8f4fd05 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/sao_tome.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/sao_tome_principe.bmp b/plugins/channelrx/demodadsb/flags/sao_tome_principe.bmp new file mode 100644 index 000000000..9f8f4fd05 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/sao_tome_principe.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/sao_tome_principe_mil.bmp b/plugins/channelrx/demodadsb/flags/sao_tome_principe_mil.bmp new file mode 100644 index 000000000..324f5a4ef Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/sao_tome_principe_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/saudi_arabia.bmp b/plugins/channelrx/demodadsb/flags/saudi_arabia.bmp new file mode 100644 index 000000000..8354b6565 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/saudi_arabia.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/saudi_arabia_mil.bmp b/plugins/channelrx/demodadsb/flags/saudi_arabia_mil.bmp new file mode 100644 index 000000000..c89e8b8b2 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/saudi_arabia_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/senegal.bmp b/plugins/channelrx/demodadsb/flags/senegal.bmp new file mode 100644 index 000000000..d7ed5fa52 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/senegal.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/senegal_mil.bmp b/plugins/channelrx/demodadsb/flags/senegal_mil.bmp new file mode 100644 index 000000000..c62b1870a Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/senegal_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/serbia.bmp b/plugins/channelrx/demodadsb/flags/serbia.bmp new file mode 100644 index 000000000..1c16943b9 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/serbia.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/serbia_mil.bmp b/plugins/channelrx/demodadsb/flags/serbia_mil.bmp new file mode 100644 index 000000000..00b846702 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/serbia_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/seychelles.bmp b/plugins/channelrx/demodadsb/flags/seychelles.bmp new file mode 100644 index 000000000..8d8550e86 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/seychelles.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/seychelles_mil.bmp b/plugins/channelrx/demodadsb/flags/seychelles_mil.bmp new file mode 100644 index 000000000..5c0a30536 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/seychelles_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/sierra_leone.bmp b/plugins/channelrx/demodadsb/flags/sierra_leone.bmp new file mode 100644 index 000000000..d338b99da Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/sierra_leone.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/sierra_leone_mil.bmp b/plugins/channelrx/demodadsb/flags/sierra_leone_mil.bmp new file mode 100644 index 000000000..930c3dca6 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/sierra_leone_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/singapore.bmp b/plugins/channelrx/demodadsb/flags/singapore.bmp new file mode 100644 index 000000000..c3bd62eb1 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/singapore.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/singapore_mil.bmp b/plugins/channelrx/demodadsb/flags/singapore_mil.bmp new file mode 100644 index 000000000..f7b5452a1 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/singapore_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/slovakia.bmp b/plugins/channelrx/demodadsb/flags/slovakia.bmp new file mode 100644 index 000000000..50ddeedde Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/slovakia.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/slovakia_mil.bmp b/plugins/channelrx/demodadsb/flags/slovakia_mil.bmp new file mode 100644 index 000000000..05d6d5312 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/slovakia_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/slovenia.bmp b/plugins/channelrx/demodadsb/flags/slovenia.bmp new file mode 100644 index 000000000..45f93a831 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/slovenia.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/slovenia_mil.bmp b/plugins/channelrx/demodadsb/flags/slovenia_mil.bmp new file mode 100644 index 000000000..484d8a5a4 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/slovenia_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/solomon_islands.bmp b/plugins/channelrx/demodadsb/flags/solomon_islands.bmp new file mode 100644 index 000000000..6bc0d748f Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/solomon_islands.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/somalia.bmp b/plugins/channelrx/demodadsb/flags/somalia.bmp new file mode 100644 index 000000000..4c252dede Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/somalia.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/somalia_mil.bmp b/plugins/channelrx/demodadsb/flags/somalia_mil.bmp new file mode 100644 index 000000000..eff4e239e Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/somalia_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/south-korea.bmp b/plugins/channelrx/demodadsb/flags/south-korea.bmp new file mode 100644 index 000000000..7fad89114 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/south-korea.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/south_africa.bmp b/plugins/channelrx/demodadsb/flags/south_africa.bmp new file mode 100644 index 000000000..ff890bdfe Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/south_africa.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/south_africa_mil.bmp b/plugins/channelrx/demodadsb/flags/south_africa_mil.bmp new file mode 100644 index 000000000..2c9725146 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/south_africa_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/south_sudan.bmp b/plugins/channelrx/demodadsb/flags/south_sudan.bmp new file mode 100644 index 000000000..8b44d63df Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/south_sudan.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/south_sudan_mil.bmp b/plugins/channelrx/demodadsb/flags/south_sudan_mil.bmp new file mode 100644 index 000000000..fc53a292e Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/south_sudan_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/spain.bmp b/plugins/channelrx/demodadsb/flags/spain.bmp new file mode 100644 index 000000000..697e94248 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/spain.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/spain_mil.bmp b/plugins/channelrx/demodadsb/flags/spain_mil.bmp new file mode 100644 index 000000000..b6d56e45c Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/spain_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/sri_lanka.bmp b/plugins/channelrx/demodadsb/flags/sri_lanka.bmp new file mode 100644 index 000000000..4bcc78d72 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/sri_lanka.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/sri_lanka_mil.bmp b/plugins/channelrx/demodadsb/flags/sri_lanka_mil.bmp new file mode 100644 index 000000000..087cf616c Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/sri_lanka_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/st_helena.bmp b/plugins/channelrx/demodadsb/flags/st_helena.bmp new file mode 100644 index 000000000..7e54eb4de Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/st_helena.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/st_kitts_and_nevis.bmp b/plugins/channelrx/demodadsb/flags/st_kitts_and_nevis.bmp new file mode 100644 index 000000000..8007d6962 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/st_kitts_and_nevis.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/st_lucia.bmp b/plugins/channelrx/demodadsb/flags/st_lucia.bmp new file mode 100644 index 000000000..2c9911d65 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/st_lucia.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/st_pierre_and_miquelon.bmp b/plugins/channelrx/demodadsb/flags/st_pierre_and_miquelon.bmp new file mode 100644 index 000000000..0b8727713 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/st_pierre_and_miquelon.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/st_vincent.bmp b/plugins/channelrx/demodadsb/flags/st_vincent.bmp new file mode 100644 index 000000000..ad9c7d26e Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/st_vincent.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/sudan.bmp b/plugins/channelrx/demodadsb/flags/sudan.bmp new file mode 100644 index 000000000..2de65ab10 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/sudan.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/sudan_mil.bmp b/plugins/channelrx/demodadsb/flags/sudan_mil.bmp new file mode 100644 index 000000000..badff5d0b Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/sudan_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/suriname.bmp b/plugins/channelrx/demodadsb/flags/suriname.bmp new file mode 100644 index 000000000..dc9587452 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/suriname.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/suriname_mil.bmp b/plugins/channelrx/demodadsb/flags/suriname_mil.bmp new file mode 100644 index 000000000..64681033e Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/suriname_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/swaziland.bmp b/plugins/channelrx/demodadsb/flags/swaziland.bmp new file mode 100644 index 000000000..7a35e5a2c Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/swaziland.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/swaziland_mil.bmp b/plugins/channelrx/demodadsb/flags/swaziland_mil.bmp new file mode 100644 index 000000000..b93984ddd Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/swaziland_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/sweden.bmp b/plugins/channelrx/demodadsb/flags/sweden.bmp new file mode 100644 index 000000000..aaf007924 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/sweden.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/sweden_mil.bmp b/plugins/channelrx/demodadsb/flags/sweden_mil.bmp new file mode 100644 index 000000000..fd3ee8950 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/sweden_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/switzerland.bmp b/plugins/channelrx/demodadsb/flags/switzerland.bmp new file mode 100644 index 000000000..15145919f Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/switzerland.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/switzerland_mil.bmp b/plugins/channelrx/demodadsb/flags/switzerland_mil.bmp new file mode 100644 index 000000000..2a085a0d6 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/switzerland_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/syria.bmp b/plugins/channelrx/demodadsb/flags/syria.bmp new file mode 100644 index 000000000..f33645ca8 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/syria.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/syria_mil.bmp b/plugins/channelrx/demodadsb/flags/syria_mil.bmp new file mode 100644 index 000000000..50b3f8968 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/syria_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/taiwan.bmp b/plugins/channelrx/demodadsb/flags/taiwan.bmp new file mode 100644 index 000000000..7de5df00a Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/taiwan.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/taiwan_mil.bmp b/plugins/channelrx/demodadsb/flags/taiwan_mil.bmp new file mode 100644 index 000000000..07ea2648d Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/taiwan_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/tajikistan.bmp b/plugins/channelrx/demodadsb/flags/tajikistan.bmp new file mode 100644 index 000000000..72fa2afab Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/tajikistan.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/tajikistan_mil.bmp b/plugins/channelrx/demodadsb/flags/tajikistan_mil.bmp new file mode 100644 index 000000000..4b7231e21 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/tajikistan_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/tajikstan.bmp b/plugins/channelrx/demodadsb/flags/tajikstan.bmp new file mode 100644 index 000000000..0e70f4211 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/tajikstan.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/tanzania.bmp b/plugins/channelrx/demodadsb/flags/tanzania.bmp new file mode 100644 index 000000000..26c87a2d4 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/tanzania.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/tanzania_mil.bmp b/plugins/channelrx/demodadsb/flags/tanzania_mil.bmp new file mode 100644 index 000000000..80664501d Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/tanzania_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/thailand.bmp b/plugins/channelrx/demodadsb/flags/thailand.bmp new file mode 100644 index 000000000..af205eee1 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/thailand.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/thailand_mil.bmp b/plugins/channelrx/demodadsb/flags/thailand_mil.bmp new file mode 100644 index 000000000..ed3f71da9 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/thailand_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/timor-leste.bmp b/plugins/channelrx/demodadsb/flags/timor-leste.bmp new file mode 100644 index 000000000..6c0e65d5a Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/timor-leste.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/timorleste.bmp b/plugins/channelrx/demodadsb/flags/timorleste.bmp new file mode 100644 index 000000000..6c0e65d5a Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/timorleste.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/togo.bmp b/plugins/channelrx/demodadsb/flags/togo.bmp new file mode 100644 index 000000000..c88b00925 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/togo.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/togo_mil.bmp b/plugins/channelrx/demodadsb/flags/togo_mil.bmp new file mode 100644 index 000000000..2810f0f77 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/togo_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/tonga.bmp b/plugins/channelrx/demodadsb/flags/tonga.bmp new file mode 100644 index 000000000..dae28b158 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/tonga.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/trinidad_and_tobago.bmp b/plugins/channelrx/demodadsb/flags/trinidad_and_tobago.bmp new file mode 100644 index 000000000..754ed27a5 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/trinidad_and_tobago.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/trinidad_and_tobago_mil.bmp b/plugins/channelrx/demodadsb/flags/trinidad_and_tobago_mil.bmp new file mode 100644 index 000000000..57221115b Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/trinidad_and_tobago_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/tunisia.bmp b/plugins/channelrx/demodadsb/flags/tunisia.bmp new file mode 100644 index 000000000..3b4801f3f Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/tunisia.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/tunisia_mil.bmp b/plugins/channelrx/demodadsb/flags/tunisia_mil.bmp new file mode 100644 index 000000000..a318e867e Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/tunisia_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/turkey.bmp b/plugins/channelrx/demodadsb/flags/turkey.bmp new file mode 100644 index 000000000..2d045c588 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/turkey.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/turkey_mil.bmp b/plugins/channelrx/demodadsb/flags/turkey_mil.bmp new file mode 100644 index 000000000..e3cf6c912 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/turkey_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/turkmenistan.bmp b/plugins/channelrx/demodadsb/flags/turkmenistan.bmp new file mode 100644 index 000000000..77e9a4b82 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/turkmenistan.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/turkmenistan_mil.bmp b/plugins/channelrx/demodadsb/flags/turkmenistan_mil.bmp new file mode 100644 index 000000000..ad3d49702 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/turkmenistan_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/turkmmen.bmp b/plugins/channelrx/demodadsb/flags/turkmmen.bmp new file mode 100644 index 000000000..821b76271 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/turkmmen.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/turks_and_caicos.bmp b/plugins/channelrx/demodadsb/flags/turks_and_caicos.bmp new file mode 100644 index 000000000..734b866af Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/turks_and_caicos.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/tuvalu.bmp b/plugins/channelrx/demodadsb/flags/tuvalu.bmp new file mode 100644 index 000000000..2030fd73d Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/tuvalu.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/uganda.bmp b/plugins/channelrx/demodadsb/flags/uganda.bmp new file mode 100644 index 000000000..aa13a6568 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/uganda.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/uganda_mil.bmp b/plugins/channelrx/demodadsb/flags/uganda_mil.bmp new file mode 100644 index 000000000..15e830cf8 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/uganda_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/ukraine.bmp b/plugins/channelrx/demodadsb/flags/ukraine.bmp new file mode 100644 index 000000000..48e3ac8e9 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/ukraine.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/ukraine_mil.bmp b/plugins/channelrx/demodadsb/flags/ukraine_mil.bmp new file mode 100644 index 000000000..cf478e7ef Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/ukraine_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/united_arab_emirates.bmp b/plugins/channelrx/demodadsb/flags/united_arab_emirates.bmp new file mode 100644 index 000000000..0d2b7cef0 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/united_arab_emirates.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/united_arab_emirates_mil.bmp b/plugins/channelrx/demodadsb/flags/united_arab_emirates_mil.bmp new file mode 100644 index 000000000..fb19bde00 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/united_arab_emirates_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/united_kingdom.bmp b/plugins/channelrx/demodadsb/flags/united_kingdom.bmp new file mode 100644 index 000000000..df96a319b Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/united_kingdom.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/united_kingdom_mil.bmp b/plugins/channelrx/demodadsb/flags/united_kingdom_mil.bmp new file mode 100644 index 000000000..bba2a9caf Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/united_kingdom_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/united_nations.bmp b/plugins/channelrx/demodadsb/flags/united_nations.bmp new file mode 100644 index 000000000..4dc30bae9 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/united_nations.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/united_states.bmp b/plugins/channelrx/demodadsb/flags/united_states.bmp new file mode 100644 index 000000000..57541b751 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/united_states.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/united_states_mil.bmp b/plugins/channelrx/demodadsb/flags/united_states_mil.bmp new file mode 100644 index 000000000..1feedb292 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/united_states_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/uruguay.bmp b/plugins/channelrx/demodadsb/flags/uruguay.bmp new file mode 100644 index 000000000..3229f8a37 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/uruguay.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/uruguay_mil.bmp b/plugins/channelrx/demodadsb/flags/uruguay_mil.bmp new file mode 100644 index 000000000..35ed02087 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/uruguay_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/uzbekistan.bmp b/plugins/channelrx/demodadsb/flags/uzbekistan.bmp new file mode 100644 index 000000000..efcc7cd7f Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/uzbekistan.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/uzbekistan_mil.bmp b/plugins/channelrx/demodadsb/flags/uzbekistan_mil.bmp new file mode 100644 index 000000000..652c27c06 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/uzbekistan_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/vanuatu.bmp b/plugins/channelrx/demodadsb/flags/vanuatu.bmp new file mode 100644 index 000000000..c3133a98a Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/vanuatu.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/vatican_city.bmp b/plugins/channelrx/demodadsb/flags/vatican_city.bmp new file mode 100644 index 000000000..cd9fe1568 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/vatican_city.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/venezuela.bmp b/plugins/channelrx/demodadsb/flags/venezuela.bmp new file mode 100644 index 000000000..0154bfaa7 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/venezuela.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/venezuela_mil.bmp b/plugins/channelrx/demodadsb/flags/venezuela_mil.bmp new file mode 100644 index 000000000..b80eb5efb Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/venezuela_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/viet-nam.bmp b/plugins/channelrx/demodadsb/flags/viet-nam.bmp new file mode 100644 index 000000000..1b1a26691 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/viet-nam.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/viet-nam_mil.bmp b/plugins/channelrx/demodadsb/flags/viet-nam_mil.bmp new file mode 100644 index 000000000..68ba85be0 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/viet-nam_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/vietnam.bmp b/plugins/channelrx/demodadsb/flags/vietnam.bmp new file mode 100644 index 000000000..02799bfae Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/vietnam.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/vietnam_mil.bmp b/plugins/channelrx/demodadsb/flags/vietnam_mil.bmp new file mode 100644 index 000000000..26e02b9f4 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/vietnam_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/virgin_isles.bmp b/plugins/channelrx/demodadsb/flags/virgin_isles.bmp new file mode 100644 index 000000000..35fa77de1 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/virgin_isles.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/yemen.bmp b/plugins/channelrx/demodadsb/flags/yemen.bmp new file mode 100644 index 000000000..a06560754 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/yemen.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/yemen_mil.bmp b/plugins/channelrx/demodadsb/flags/yemen_mil.bmp new file mode 100644 index 000000000..9bd687b82 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/yemen_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/zambia.bmp b/plugins/channelrx/demodadsb/flags/zambia.bmp new file mode 100644 index 000000000..8248308b5 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/zambia.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/zambia_mil.bmp b/plugins/channelrx/demodadsb/flags/zambia_mil.bmp new file mode 100644 index 000000000..38c9206ba Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/zambia_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/zimbabwe.bmp b/plugins/channelrx/demodadsb/flags/zimbabwe.bmp new file mode 100644 index 000000000..e1bf4fa66 Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/zimbabwe.bmp differ diff --git a/plugins/channelrx/demodadsb/flags/zimbabwe_mil.bmp b/plugins/channelrx/demodadsb/flags/zimbabwe_mil.bmp new file mode 100644 index 000000000..cb2b2d9da Binary files /dev/null and b/plugins/channelrx/demodadsb/flags/zimbabwe_mil.bmp differ diff --git a/plugins/channelrx/demodadsb/icons.qrc b/plugins/channelrx/demodadsb/icons.qrc new file mode 100644 index 000000000..4bafcd1f5 --- /dev/null +++ b/plugins/channelrx/demodadsb/icons.qrc @@ -0,0 +1,6 @@ + + + icons/aircraft.png + icons/controltower.png + + diff --git a/plugins/channelrx/demodadsb/icons/aircraft.png b/plugins/channelrx/demodadsb/icons/aircraft.png new file mode 100644 index 000000000..54cf6c9d2 Binary files /dev/null and b/plugins/channelrx/demodadsb/icons/aircraft.png differ diff --git a/plugins/channelrx/demodadsb/icons/controltower.png b/plugins/channelrx/demodadsb/icons/controltower.png new file mode 100644 index 000000000..d33c9d660 Binary files /dev/null and b/plugins/channelrx/demodadsb/icons/controltower.png differ diff --git a/plugins/channelrx/demodadsb/map.qrc b/plugins/channelrx/demodadsb/map.qrc new file mode 100644 index 000000000..879346af6 --- /dev/null +++ b/plugins/channelrx/demodadsb/map.qrc @@ -0,0 +1,19 @@ + + + map/map.qml + map/MapStation.qml + map/aircraft_2engine.png + map/aircraft_2enginesmall.png + map/aircraft_4engine.png + map/aircraft_helicopter.png + map/aircraft_light.png + map/aircraft_space.png + map/aircraft_drone.png + map/airport_large.png + map/airport_medium.png + map/airport_small.png + map/heliport.png + map/antenna.png + map/truck.png + + diff --git a/sdrgui/resources/MapStation.qml b/plugins/channelrx/demodadsb/map/MapStation.qml similarity index 83% rename from sdrgui/resources/MapStation.qml rename to plugins/channelrx/demodadsb/map/MapStation.qml index d489dc92f..38134e060 100644 --- a/sdrgui/resources/MapStation.qml +++ b/plugins/channelrx/demodadsb/map/MapStation.qml @@ -1,6 +1,6 @@ -import QtQuick 2.4 -import QtLocation 5.6 -import QtPositioning 5.6 +import QtQuick 2.12 +import QtLocation 5.12 +import QtPositioning 5.12 MapQuickItem { id: station @@ -16,9 +16,11 @@ MapQuickItem { columns: 1 Grid { horizontalItemAlignment: Grid.AlignHCenter + layer.enabled: true + layer.smooth: true Image { id: image - source: "map_antenna.png" + source: "antenna.png" } Rectangle { id: bubble diff --git a/sdrgui/resources/aircraft_2engine.png b/plugins/channelrx/demodadsb/map/aircraft_2engine.png similarity index 100% rename from sdrgui/resources/aircraft_2engine.png rename to plugins/channelrx/demodadsb/map/aircraft_2engine.png diff --git a/sdrgui/resources/aircraft_2enginesmall.png b/plugins/channelrx/demodadsb/map/aircraft_2enginesmall.png similarity index 100% rename from sdrgui/resources/aircraft_2enginesmall.png rename to plugins/channelrx/demodadsb/map/aircraft_2enginesmall.png diff --git a/sdrgui/resources/aircraft_4engine.png b/plugins/channelrx/demodadsb/map/aircraft_4engine.png similarity index 100% rename from sdrgui/resources/aircraft_4engine.png rename to plugins/channelrx/demodadsb/map/aircraft_4engine.png diff --git a/sdrgui/resources/aircraft_drone.png b/plugins/channelrx/demodadsb/map/aircraft_drone.png similarity index 100% rename from sdrgui/resources/aircraft_drone.png rename to plugins/channelrx/demodadsb/map/aircraft_drone.png diff --git a/sdrgui/resources/aircraft_fighter.png b/plugins/channelrx/demodadsb/map/aircraft_fighter.png similarity index 100% rename from sdrgui/resources/aircraft_fighter.png rename to plugins/channelrx/demodadsb/map/aircraft_fighter.png diff --git a/sdrgui/resources/aircraft_helicopter.png b/plugins/channelrx/demodadsb/map/aircraft_helicopter.png similarity index 100% rename from sdrgui/resources/aircraft_helicopter.png rename to plugins/channelrx/demodadsb/map/aircraft_helicopter.png diff --git a/sdrgui/resources/aircraft_light.png b/plugins/channelrx/demodadsb/map/aircraft_light.png similarity index 100% rename from sdrgui/resources/aircraft_light.png rename to plugins/channelrx/demodadsb/map/aircraft_light.png diff --git a/sdrgui/resources/aircraft_space.png b/plugins/channelrx/demodadsb/map/aircraft_space.png similarity index 100% rename from sdrgui/resources/aircraft_space.png rename to plugins/channelrx/demodadsb/map/aircraft_space.png diff --git a/plugins/channelrx/demodadsb/map/airport_large.png b/plugins/channelrx/demodadsb/map/airport_large.png new file mode 100644 index 000000000..72299fcf6 Binary files /dev/null and b/plugins/channelrx/demodadsb/map/airport_large.png differ diff --git a/plugins/channelrx/demodadsb/map/airport_medium.png b/plugins/channelrx/demodadsb/map/airport_medium.png new file mode 100644 index 000000000..8347f8b3d Binary files /dev/null and b/plugins/channelrx/demodadsb/map/airport_medium.png differ diff --git a/plugins/channelrx/demodadsb/map/airport_small.png b/plugins/channelrx/demodadsb/map/airport_small.png new file mode 100644 index 000000000..2509056d6 Binary files /dev/null and b/plugins/channelrx/demodadsb/map/airport_small.png differ diff --git a/sdrgui/resources/map_antenna.png b/plugins/channelrx/demodadsb/map/antenna.png similarity index 100% rename from sdrgui/resources/map_antenna.png rename to plugins/channelrx/demodadsb/map/antenna.png diff --git a/plugins/channelrx/demodadsb/map/heliport.png b/plugins/channelrx/demodadsb/map/heliport.png new file mode 100644 index 000000000..8241b4282 Binary files /dev/null and b/plugins/channelrx/demodadsb/map/heliport.png differ diff --git a/plugins/channelrx/demodadsb/map/map.qml b/plugins/channelrx/demodadsb/map/map.qml new file mode 100644 index 000000000..7df851993 --- /dev/null +++ b/plugins/channelrx/demodadsb/map/map.qml @@ -0,0 +1,178 @@ +import QtQuick 2.12 +import QtQuick.Window 2.12 +import QtLocation 5.12 +import QtPositioning 5.12 + +Item { + id: qmlMap + property int aircraftZoomLevel: 11 + property int airportZoomLevel: 11 + + Plugin { + id: mapPlugin + name: "osm" + } + + Map { + id: map + objectName: "map" + anchors.fill: parent + plugin: mapPlugin + center: QtPositioning.coordinate(51.5, 0.125) // London + zoomLevel: 10 + + MapStation { + id: station + objectName: "station" + stationName: "Home" + coordinate: QtPositioning.coordinate(51.5, 0.125) + } + + // This needs to be before aircraftComponent MapItemView, so it's drawn underneath + MapItemView { + model: aircraftModel + delegate: aircraftPathComponent + } + + MapItemView { + model: airportModel + delegate: airportComponent + } + + MapItemView { + model: aircraftModel + delegate: aircraftComponent + } + + onZoomLevelChanged: { + if (zoomLevel > 11) { + station.zoomLevel = zoomLevel + aircraftZoomLevel = zoomLevel + airportZoomLevel = zoomLevel + } else { + station.zoomLevel = 11 + aircraftZoomLevel = 11 + airportZoomLevel = 11 + } + } + + } + + Component { + id: aircraftPathComponent + MapPolyline { + line.width: 2 + line.color: 'gray' + path: aircraftPath + } + } + + Component { + id: aircraftComponent + MapQuickItem { + id: aircraft + anchorPoint.x: image.width/2 + anchorPoint.y: image.height/2 + coordinate: position + zoomLevel: aircraftZoomLevel + + sourceItem: Grid { + columns: 1 + Grid { + layer.enabled: true + layer.smooth: true + horizontalItemAlignment: Grid.AlignHCenter + Image { + id: image + rotation: heading + source: aircraftImage + MouseArea { + anchors.fill: parent + hoverEnabled: true + onClicked: { + highlighted = true + } + onDoubleClicked: { + target = true + } + } + } + Rectangle { + id: bubble + color: bubbleColour + border.width: 1 + width: text.width * 1.1 + height: text.height * 1.1 + radius: 5 + Text { + id: text + anchors.centerIn: parent + text: adsbData + } + MouseArea { + anchors.fill: parent + hoverEnabled: true + onClicked: { + showAll = !showAll + } + } + } + } + } + } + } + + Component { + id: airportComponent + MapQuickItem { + id: aircraft + anchorPoint.x: image.width/2 + anchorPoint.y: image.height/2 + coordinate: position + zoomLevel: airportZoomLevel + + sourceItem: Grid { + columns: 1 + Grid { + horizontalItemAlignment: Grid.AlignHCenter + layer.enabled: true + layer.smooth: true + Image { + id: image + source: airportImage + } + Rectangle { + id: bubble + color: bubbleColour + border.width: 1 + width: text.width + 5 + height: text.height + 5 + radius: 5 + Text { + id: text + anchors.centerIn: parent + text: airportData + } + MouseArea { + anchors.fill: parent + hoverEnabled: true + onClicked: (mouse) => { + if (showFreq) { + var freqIdx = Math.floor((mouse.y-5)/((height-10)/airportDataRows)) + if (freqIdx == 0) { + showFreq = false + } else { + selectedFreq = freqIdx - 1 + } + } else { + showFreq = true + } + } + } + } + } + } + } + } + +} diff --git a/sdrgui/resources/map_truck.png b/plugins/channelrx/demodadsb/map/truck.png similarity index 100% rename from sdrgui/resources/map_truck.png rename to plugins/channelrx/demodadsb/map/truck.png diff --git a/plugins/channelrx/demodadsb/osndb.h b/plugins/channelrx/demodadsb/osndb.h new file mode 100644 index 000000000..6d9f474d8 --- /dev/null +++ b/plugins/channelrx/demodadsb/osndb.h @@ -0,0 +1,319 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2020 Jon Beniston, M7RCE // +// // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef INCLUDE_OSNDB_H +#define INCLUDE_OSNDB_H + +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "csv.h" + +#define OSNDB_URL "https://opensky-network.org/datasets/metadata/aircraftDatabase.csv" + +struct AircraftInformation { + + int m_icao; + QString m_registration; + QString m_manufacturerName; + QString m_model; + QString m_owner; + QString m_operator; + QString m_operatorICAO; + QString m_registered; + + // Read OpenSky Network CSV file + // This is large and contains lots of data we don't want, so we convert to + // a smaller version to speed up loading time + // Note that we use C file functions rather than QT, as these are ~30% faster + // and the QT version seemed to occasionally crash + static QHash *readOSNDB(const QString &filename) + { + int cnt = 0; + QHash *aircraftInfo = nullptr; + + // Column numbers used for the data as of 2020/10/28 + int icaoCol = 0; + int registrationCol = 1; + int manufacturerNameCol = 3; + int modelCol = 4; + int ownerCol = 13; + int operatorCol = 9; + int operatorICAOCol = 11; + int registeredCol = 15; + + qDebug() << "readOSNDB: " << filename; + + FILE *file; + QByteArray utfFilename = filename.toUtf8(); + if ((file = fopen(utfFilename.constData(), "r")) != NULL) + { + char row[2048]; + int idx; + + if (fgets(row, sizeof(row), file)) + { + aircraftInfo = new QHash(); + aircraftInfo->reserve(500000); + // Read header + int idx = 0; + char *p = strtok(row, ","); + while (p != NULL) + { + if (!strcmp(p, "icao24")) + icaoCol = idx; + else if (!strcmp(p, "registration")) + registrationCol = idx; + else if (!strcmp(p, "manufacturername")) + manufacturerNameCol = idx; + else if (!strcmp(p, "model")) + modelCol = idx; + else if (!strcmp(p, "owner")) + ownerCol = idx; + else if (!strcmp(p, "operator")) + operatorCol = idx; + else if (!strcmp(p, "operatoricao")) + operatorICAOCol = idx; + else if (!strcmp(p, "registered")) + registeredCol = idx; + p = strtok(NULL, ","); + idx++; + } + // Read data + while (fgets(row, sizeof(row), file)) + { + int icao = 0; + char *icaoString = NULL; + char *registration = NULL; + int registrationLen = 0; + char *manufacturerName = NULL; + int manufacturerNameLen = 0; + char *model = NULL; + int modelLen = 0; + char *owner = NULL; + int ownerLen = 0; + char *operatorName = NULL; + int operatorNameLen = 0; + char *operatorICAO = NULL; + int operatorICAOLen = 0; + char *registered = NULL; + int registeredLen = 0; + + p = strtok(row, ","); + idx = 0; + while (p != NULL) + { + // Read strings, stripping quotes + if (idx == icaoCol) + { + icaoString = p+1; + icaoString[strlen(icaoString)-1] = '\0'; + icao = strtol(icaoString, NULL, 16); + } + else if (idx == registrationCol) + { + registration = p+1; + registrationLen = strlen(registration)-1; + registration[registrationLen] = '\0'; + } + else if (idx == manufacturerNameCol) + { + manufacturerName = p+1; + manufacturerNameLen = strlen(manufacturerName)-1; + manufacturerName[manufacturerNameLen] = '\0'; + } + else if (idx == modelCol) + { + model = p+1; + modelLen = strlen(model)-1; + model[modelLen] = '\0'; + } + else if (idx == ownerCol) + { + owner = p+1; + ownerLen = strlen(owner)-1; + owner[ownerLen] = '\0'; + } + else if (idx == operatorCol) + { + operatorName = p+1; + operatorNameLen = strlen(operatorName)-1; + operatorName[operatorNameLen] = '\0'; + } + else if (idx == operatorICAOCol) + { + operatorICAO = p+1; + operatorICAOLen = strlen(operatorICAO)-1; + operatorICAO[operatorICAOLen] = '\0'; + } + else if (idx == registeredCol) + { + registered = p+1; + registeredLen = strlen(registered)-1; + registered[registeredLen] = '\0'; + } + p = strtok(NULL, ","); + idx++; + } + + // Only create the entry if we have some interesting data + if ((icao != 0) && (registrationLen > 0 || modelLen > 0 || ownerLen > 0 || operatorNameLen > 0 || operatorICAOLen > 0)) + { + QString modelQ = QString(model); + // Tidy up the model names + if (modelQ.endsWith(" (Boeing)")) + modelQ = modelQ.left(modelQ.size() - 9); + else if (modelQ.startsWith("BOEING ")) + modelQ = modelQ.right(modelQ.size() - 7); + else if (modelQ.startsWith("Boeing ")) + modelQ = modelQ.right(modelQ.size() - 7); + else if (modelQ.startsWith("AIRBUS ")) + modelQ = modelQ.right(modelQ.size() - 7); + else if (modelQ.startsWith("Airbus ")) + modelQ = modelQ.right(modelQ.size() - 7); + else if (modelQ.endsWith(" (Cessna)")) + modelQ = modelQ.left(modelQ.size() - 9); + + AircraftInformation *aircraft = new AircraftInformation(); + aircraft->m_icao = icao; + aircraft->m_registration = QString(registration); + aircraft->m_manufacturerName = QString(manufacturerName); + aircraft->m_model = modelQ; + aircraft->m_owner = QString(owner); + aircraft->m_operator = QString(operatorName); + aircraft->m_operatorICAO = QString(operatorICAO); + aircraft->m_registered = QString(registered); + aircraftInfo->insert(icao, aircraft); + cnt++; + } + + } + } + fclose(file); + } + else + qDebug() << "Failed to open " << filename; + + qDebug() << "readOSNDB - read " << cnt << " aircraft"; + + return aircraftInfo; + } + + // Write a reduced size and validated version of the DB, so it loads quicker + static bool writeFastDB(const QString &filename, QHash *aircraftInfo) + { + QFile file(filename); + if (file.open(QIODevice::WriteOnly)) + { + file.write("icao24,registration,manufacturername,model,owner,operator,operatoricao,registered\n"); + QHash::iterator i = aircraftInfo->begin(); + while (i != aircraftInfo->end()) + { + AircraftInformation *info = i.value(); + file.write(QString("%1").arg(info->m_icao, 1, 16).toUtf8()); + file.write(","); + file.write(info->m_registration.toUtf8()); + file.write(","); + file.write(info->m_manufacturerName.toUtf8()); + file.write(","); + file.write(info->m_model.toUtf8()); + file.write(","); + file.write(info->m_owner.toUtf8()); + file.write(","); + file.write(info->m_operator.toUtf8()); + file.write(","); + file.write(info->m_operatorICAO.toUtf8()); + file.write(","); + file.write(info->m_registered.toUtf8()); + file.write("\n"); + ++i; + } + file.close(); + return true; + } + else + { + qCritical() << "AircraftInformation::writeFastDB failed to open " << filename << " for writing: " << file.errorString(); + return false; + } + } + + // Read smaller CSV file with no validation. Takes about 0.5s instead of 2s. + static QHash *readFastDB(const QString &filename) + { + int cnt = 0; + QHash *aircraftInfo = nullptr; + + qDebug() << "AircraftInformation::readFastOSNDB: " << filename; + + FILE *file; + QByteArray utfFilename = filename.toUtf8(); + if ((file = fopen(utfFilename.constData(), "r")) != NULL) + { + char row[2048]; + + if (fgets(row, sizeof(row), file)) + { + // Check header + if (!strcmp(row, "icao24,registration,manufacturername,model,owner,operator,operatoricao,registered\n")) + { + aircraftInfo = new QHash(); + aircraftInfo->reserve(500000); + // Read data + while (fgets(row, sizeof(row), file)) + { + char *p = row; + AircraftInformation *aircraft = new AircraftInformation(); + char *icaoString = csvNext(&p); + int icao = strtol(icaoString, NULL, 16); + aircraft->m_icao = icao; + aircraft->m_registration = QString(csvNext(&p)); + aircraft->m_manufacturerName = QString(csvNext(&p)); + aircraft->m_model = QString(csvNext(&p)); + aircraft->m_owner = QString(csvNext(&p)); + aircraft->m_operator = QString(csvNext(&p)); + aircraft->m_operatorICAO = QString(csvNext(&p)); + aircraft->m_registered = QString(csvNext(&p)); + aircraftInfo->insert(icao, aircraft); + cnt++; + } + } + else + qDebug() << "AircraftInformation::readFastDB: Unexpected header"; + } + else + qDebug() << "AircraftInformation::readFastDB: Empty file"; + fclose(file); + } + else + qDebug() << "AircraftInformation::readFastDB: Failed to open " << filename; + + qDebug() << "AircraftInformation::readFastDB - read " << cnt << " aircraft"; + + return aircraftInfo; + } + +}; + +#endif diff --git a/plugins/channelrx/demodadsb/ourairportsdb.h b/plugins/channelrx/demodadsb/ourairportsdb.h new file mode 100644 index 000000000..8ae88a5ba --- /dev/null +++ b/plugins/channelrx/demodadsb/ourairportsdb.h @@ -0,0 +1,234 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2020 Jon Beniston, M7RCE // +// // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef INCLUDE_OURAIRPORTSDB_H +#define INCLUDE_OURAIRPORTSDB_H + +#include +#include +#include +#include +#include +#include + +#include "adsbdemodsettings.h" + +#define AIRPORTS_URL "https://ourairports.com/data/airports.csv" +#define AIRPORT_FREQUENCIES_URL "https://ourairports.com/data/airport-frequencies.csv" + +struct AirportInformation { + + struct FrequencyInformation { + QString m_type; + QString m_description; + float m_frequency; // In MHz + }; + + int m_id; + QString m_ident; + ADSBDemodSettings::AirportType m_type; + QString m_name; + float m_latitude; + float m_longitude; + float m_elevation; + QVector m_frequencies; + + static QString trimQuotes(const QString s) + { + if (s.startsWith('\"') && s.endsWith('\"')) + return s.mid(1, s.size() - 2); + else + return s; + } + + // Read OurAirport's airport CSV file + static QHash *readAirportsDB(const QString &filename) + { + int cnt = 0; + QHash *airportInfo = new QHash(); + airportInfo->reserve(70000); + + // Column numbers used for the data as of 2020/10/28 + int idCol = 0; + int identCol = 1; + int typeCol = 2; + int nameCol = 3; + int latitudeCol = 4; + int longitudeCol = 5; + int elevationCol = 6; + + qDebug() << "AirportInformation::readAirportsDB: " << filename; + + QFile file(filename); + if (file.open(QIODevice::ReadOnly)) + { + QList colNames; + int idx; + + // Read header + if (!file.atEnd()) + { + QByteArray row = file.readLine().trimmed(); + colNames = row.split(','); + // Work out which columns the data is in, based on the headers + idx = colNames.indexOf("id"); + if (idx >= 0) + idCol = idx; + idx = colNames.indexOf("ident"); + if (idx >= 0) + identCol = idx; + idx = colNames.indexOf("type"); + if (idx >= 0) + typeCol = idx; + idx = colNames.indexOf("name"); + if (idx >= 0) + nameCol = idx; + idx = colNames.indexOf("latitude_deg"); + if (idx >= 0) + latitudeCol = idx; + idx = colNames.indexOf("longitude_deg"); + if (idx >= 0) + longitudeCol = idx; + idx = colNames.indexOf("elevation_ft"); + if (idx >= 0) + elevationCol = idx; + } + // Read data + while (!file.atEnd()) + { + QByteArray row = file.readLine(); + QList cols = row.split(','); + + bool ok = false; + int id = trimQuotes(cols[idCol]).toInt(&ok, 10); + if (ok) + { + QString ident = trimQuotes(cols[identCol]); + QString type = trimQuotes(cols[typeCol]); + QString name = trimQuotes(cols[nameCol]); + float latitude = cols[latitudeCol].toFloat(); + float longitude = cols[longitudeCol].toFloat(); + float elevation = cols[elevationCol].toFloat(); + + if (type != "closed") + { + AirportInformation *airport = new AirportInformation(); + airport->m_id = id; + airport->m_ident = ident; + if (type == "small_airport") + airport->m_type = ADSBDemodSettings::AirportType::Small; + else if (type == "medium_airport") + airport->m_type = ADSBDemodSettings::AirportType::Medium; + else if (type == "large_airport") + airport->m_type = ADSBDemodSettings::AirportType::Large; + else if (type == "heliport") + airport->m_type = ADSBDemodSettings::AirportType::Heliport; + airport->m_name = name; + airport->m_latitude = latitude; + airport->m_longitude = longitude; + airport->m_elevation = elevation; + airportInfo->insert(id, airport); + cnt++; + } + } + } + file.close(); + } + else + qDebug() << "Failed to open " << filename << " " << file.errorString(); + + qDebug() << "AirportInformation::readAirportsDB: - read " << cnt << " airports"; + + return airportInfo; + } + + // Read OurAirport's airport frequencies CSV file + static bool readFrequenciesDB(const QString &filename, QHash *airportInfo) + { + int cnt = 0; + + // Column numbers used for the data as of 2020/10/28 + int airportRefCol = 1; + int typeCol = 3; + int descriptionCol = 4; + int frequencyCol = 5; + + qDebug() << "AirportInformation::readFrequenciesDB: " << filename; + + QFile file(filename); + if (file.open(QIODevice::ReadOnly)) + { + QList colNames; + int idx; + + // Read header + if (!file.atEnd()) + { + QByteArray row = file.readLine().trimmed(); + colNames = row.split(','); + // Work out which columns the data is in, based on the headers + idx = colNames.indexOf("airport_ref"); + if (idx >= 0) + airportRefCol = idx; + idx = colNames.indexOf("type"); + if (idx >= 0) + typeCol = idx; + idx = colNames.indexOf("descrption"); + if (idx >= 0) + descriptionCol = idx; + idx = colNames.indexOf("frequency_mhz"); + if (idx >= 0) + frequencyCol = idx; + } + // Read data + while (!file.atEnd()) + { + QByteArray row = file.readLine(); + QList cols = row.split(','); + + bool ok = false; + int airportRef = cols[airportRefCol].toInt(&ok, 10); + if (ok) + { + if (airportInfo->contains(airportRef)) + { + QString type = trimQuotes(cols[typeCol]); + QString description = trimQuotes(cols[descriptionCol]); + float frequency = cols[frequencyCol].toFloat(); + + FrequencyInformation *frequencyInfo = new FrequencyInformation(); + frequencyInfo->m_type = type; + frequencyInfo->m_description = description; + frequencyInfo->m_frequency = frequency; + airportInfo->value(airportRef)->m_frequencies.append(frequencyInfo); + cnt++; + } + } + } + file.close(); + } + else + qDebug() << "Failed to open " << filename << " " << file.errorString(); + + qDebug() << "AirportInformation::readFrequenciesDB: - read " << cnt << " airports"; + + return airportInfo; + } + +}; + +#endif diff --git a/plugins/channelrx/demodadsb/readme.md b/plugins/channelrx/demodadsb/readme.md index 90f5f749d..b4758d2ea 100644 --- a/plugins/channelrx/demodadsb/readme.md +++ b/plugins/channelrx/demodadsb/readme.md @@ -2,7 +2,7 @@

Introduction

-This plugin can be used to receive and display ADS-B aircraft information. This is information about an aircraft, such as position, altitude, heading and speed, broadcast by aircraft on 1090MHz, in the 1090ES (Extended Squitter) format. 1090ES frames have a chip rate of 2Mchip/s, so the baseband sample rate should be set to be greater than 2MSa/s. +The ADS-B demodulator plugin can be used to receive and display ADS-B aircraft information. This is information about an aircraft, such as position, altitude, heading and speed, broadcast by aircraft on 1090MHz, in the 1090ES (Extended Squitter) format. 1090ES frames have a chip rate of 2Mchip/s, so the baseband sample rate should be set to be greater than 2MSa/s.

Interface

@@ -34,45 +34,99 @@ This specifies the channel sample rate the demodulator uses. Values of 2M-12MSa/ Higher channel sample rates may help decode more frames, but will require more processing power. +

: S - Demodulate all Mode-S frames

+ +Checking the S button will enable demodulation of all Mode-S frames, not just ADS-B. Mode-S frames will not effect the data displayed in the table or map, but can be feed to aggregators. + +

6: FP - Correlate Against Full Preamable

+ +When the FP button is checked, the demodulator will correlated the received signal against all expected 8 bits of the ES1090 preamble. When unchecked, the correlation will only be against the first 6 bits. Only correlating the first 6 bits can reduce the processing requirements, but may result in more invalid frames. +

6: Threshold

-This sets the correlation power threshold in dB between the received signal and expected 1090ES preamble, that is required to be exceeded before the demodulator will try to decode a frame. Thus it acts as a kind of squelch. Lower values should decode more frames amd will require more processing power but more often just to process garbage. It is a compromise and setting it correctly is kind of subtle. You may start at ~12 dB over the noise shown in channel power (2). You may also look at correlation values obtained with reliable signals in the "Correlation" column of the data table. +This sets the correlation threshold in dB between the received signal and expected 1090ES preamble, that is required to be exceeded before the demodulator will try to decode a frame. Lower values should decode more frames amd will require more processing power, but will more often decode invalid frames. You may also look at correlation values obtained with reliable signals in the "Correlation" column of the data table. -In detail this threshold is used to test two conditions are met: - - the correlation on the "ones" chips is above threshold - - the correlation of the "zeros" chips is below threshold. As zeros chips are two times the ones chips in the correlation (done over 6 first symbols of preamble) the raw value of zeros correlation sum is halved before comparison. +

Download Opensky-Network Aircraft Database

+ +Clicking this will download the Opensky-Network (https://opensky-network.org/) aircraft database. This database contains information about aircrafts, such as registration, aircraft model and owner details, that is not broadcast via ADS-B. Once downloaded, this additional information will be displayed in the table alongside the ADS-B data. The database should only need to be downloaded once, as it is saved to disk, and it is recommended to download it before enabling the demodulator. + +

Download OurAirports Airport Databases

+ +Clicking this will download the OurAirports (https://ourairports.com/) airport databases. These contains names and locations for airports allowing them to be drawn on the map, as well as their corresponding ATC frequencies, which can also be displayed next to the airport on the map, by clicking the airport name. The size of airports that will be displayed on the map, and whether heliports are displayed, can be set in the Display Settings dialog. + +

Display Settings

+ +Clicking the Display Settings button will open the Display Settings dialog, which allows you to choose: + +* The units for altitude, speed and vertical climb rate. These can be either ft (feet), kn (knots) and ft/min (feet per minute), or m (metres), kph (kilometers per hour) and m/s (metres per second). +* The minimum size airport that will be displayed on the map: small, medium or large. Use small to display GA airfields, medium for regional airports and large for international airports. +* Whether or not to display heliports. +* The range (in nautical miles) from My Position at which airports will be displayed on the map. +* The timeout, in seconds, after which an aircraft will be removed from the table and map, if an ADS-B frame has not been received from it. +* The font used for the table. + +

Display Flight Paths

+ +Checking this button draws a line on the map showing aircraft's flight paths, as determined from received ADS-B frames.

7: Feed

-Checking Feed enables feeding received ADS-B frames to aggregators such as ADS-B Exchange: https://www.adsbexchange.com The server name and port to send the frames to should be entered in the Server and Port fields. For ADS-B Exchange, set Server to feed.adsbexchange.com and Port to 30005. You can check if you are feeding data to ADS-B Exchange (after about 30 seconds) at: https://www.adsbexchange.com/myip/ Frames are forwarded in the Beast binary format as described here: https://wiki.jetvision.de/wiki/Mode-S_Beast:Data_Output_Formats +Checking Feed enables feeding received ADS-B frames to aggregators such as ADS-B Exchange: https://www.adsbexchange.com or ADSBHub +: https://www.adsbhub.org. Right clicking on the Feed button opens the Feed Settings dialog. + +The server hostname and port to send the frames to should be entered in the Server and Port fields, with the appropriate format selected: + +* For ADS-B Exchange, set Server hostname to feed.adsbexchange.com, Port to 30005 and Format to Beast binary. You can check for successful feeding (after about 30 seconds) at: https://www.adsbexchange.com/myip/ +* For ADSBHub, set Server hostname to data.adsbhub.org, Port to 5002 and Format to Beast hex. You will need to have setup an account on ADSBHub first. You can check for successful feeding at: https://www.adsbhub.org/statistic.php + +The Beast binary and Hex formats are as detailed here: https://wiki.jetvision.de/wiki/Mode-S_Beast:Data_Output_Formats + +

Refresh list of devices

+ +Use this button to refresh the list of devices. + +

Select device set

+ +Specify the SDRangel device set that will be have its centre frequency set when an airport ATC frequency is clicked on the map. Typically, this device set would be a second SDR (as ATC frequencies are around 120MHz, so they can not be received simultaneously with 1090MHz for ADS-B) and have an AM Demodulator channel plugin.

ADS-B Data

-The table displays the decoded ADS-B data for each aircraft. The data is not all able to be transmitted in a single ADS-B frame, so the table displays an amalgamation of the latest received data of each type. +The table displays the decoded ADS-B data for each aircraft along side data available for the aircraft from the Opensky Network database. The data is not all able to be transmitted in a single ADS-B frame, so the table displays an amalgamation of the latest received data of each type. ![ADS-B Demodulator Data](../../../doc/img/ADSBDemod_plugin_table.png) -* ICAO ID - 24-bit hexidecimal ICAO aircraft address. This is unique for each aircraft. -* Flight No. - Airline flight number or callsign. -* Latitude - Vertical position coordinate, in decimal degrees. -* Longitude - Horizontal position coordinate, in decimal degrees. -* Altitude - Altitude in feet. -* Speed - Speed (either ground speed, indicated airspeed, or true airspeed) in knots. -* Heading - The direction the aircraft is heading, in degrees. -* Climb - The vertical climb rate (or descent rate if negative) in feet/minute. -* Categoty - The vehicle category, such as Light, Large, Heavy or Rotorcraft. +* ICAO ID - 24-bit hexidecimal ICAO aircraft address. This is unique for each aircraft. (ADS-B) +* Flight No. - Airline flight number or callsign. (ADS-B) +* Aircraft - The aircraft model. (DB) +* Airline - The logo of the operator of the aircraft (or owner if no operator known). (DB) +* Altitude - Altitude in feet or metres. (ADS-B) +* Speed - Speed (either ground speed, indicated airspeed, or true airspeed) in knots or kph. (ADS-B) +* Heading - The direction the aircraft is heading, in degrees. (ADS-B) +* VR - The vertical climb rate (or descent rate if negative) in feet/minute or m/s. (ADS-B) * Range - The range (distance) to the aircraft from the receiving antenna in kilometres. The location of the receiving antenna is set under the Preferences > My Position menu. -* Az/El - The azimuth and elevation angles to the aircraft from the receiving antenna in degrees. These values can be sent to a rotator controller to track the aircraft. +* Az/El - The azimuth and elevation angles to the aircraft from the receiving antenna in degrees. These values can be sent to a rotator controller Feature plugin to track the aircraft. +* Latitude - Vertical position coordinate, in decimal degrees. (ADS-B) +* Longitude - Horizontal position coordinate, in decimal degrees. (ADS-B) +* Category - The vehicle category, such as Light, Large, Heavy or Rotorcraft. (ADS-B) +* Status - The status of the flight, including if there is an emergency. (ADS-B) +* Registration - The registration number of the aircraft. (DB) +* Country - The flag of the country the aircraft is registered in. (DB) +* Registered - The date when the aircraft was registered. (DB) +* Manufacturer - The manufacturer of the aircraft. (DB) +* Owner - The owner of the aircraft. (DB) * Updated - The local time at which the last ADS-B message was received. * RX Frames - A count of the number of ADS-B frames received from this aircraft. -* Correlation - Displays the zeros chip correlation, average of current ones chip corelation and maximum of the preamable correlation power in dB for each recevied frame. These values can be used to help select a threshold setting. +* Correlation - Displays the minimun, average and maximum of the preamable correlation in dB for each recevied frame. These values can be used to help select a threshold setting. -A suffix of L in the latitude and longitude columns, indicates the position is based on a local decode, using a single received frame and the position of the radio station. No suffix will be added for a global decode, which is based upon receving and odd and even frame. -If an ADS-B frame has not been received from an aircraft for 60 seconds, the aircraft is removed from the table and map. +If an ADS-B frame has not been received from an aircraft for 60 seconds, the aircraft is removed from the table and map. This timeout can be adjusted in the Display Settings dialog. +Single clicking in a cell will highlight the row and the corresponding aircraft information box on the map will be coloured orange, rather than blue. +Right clicking on the header will open a menu allowing you to select which columns are visible. +To reorder the columns, left click and drag left or right a column header. +Left click on a header to sort the table by the data in that column. Double clicking in an ICAO ID cell will open a Web browser and search for the corresponding aircraft on https://www.planespotters.net/ Double clicking in an Flight No cell will open a Web browser and search for the corresponding flight on https://www.flightradar24.com/ -Double clicking in an Az/El cell will set the aircraft as the active target. The azimuth and elevation to the aicraft will be sent to a rotator controller plugin. The aircraft text will be coloured green, rather than blue, on the map. +Double clicking in an Az/El cell will set the aircraft as the active target. The azimuth and elevation to the aicraft will be sent to a rotator controller plugin. The aircraft information box will be coloured green, rather than blue, on the map. Double clicking on any other cell in the table will centre the map on the corresponding aircraft.

Map

@@ -86,7 +140,11 @@ The initial antenna location is placed according to My Position set under the Pr Aircraft are only placed upon the map when a position can be calculated, which can require several frames to be received. To pan around the map, click the left mouse button and drag. To zoom in or out, use the mouse scroll wheel. +Left clicking on an aicraft will highlight the corresponding row in the table for the aircraft and the information box on the map will be coloured orange, rather than blue. +Left clicking the information box next to an aircraft will reveal more information. If can be closed by clicking it again. +Left clicking the information box next to an airport will reveal ATC frequencies for the airport (if the OurAirports database has been downloaded.). This information box can be closed by left clicking on the airport identifier. Left clicking on one of the listed frequencies, will set it as the centre frequency on the selected SDRangel device set.

Attribution

-Icons are by Alice Design, Alex Ahineev, Verry Obito, Sean Maldjia, Tinashe Mugayi, Andreas Vögele and Angriawan Ditya Zulkarnain from the Noun Project https://thenounproject.com/ +Airline logos and flags are by Steve Hibberd from https://radarspotting.com +Map icons are by Alice Design, Alex Ahineev, Botho Willer, Verry Obito, Sean Maldjia, Tinashe Mugayi, Georgiana Ionescu, Andreas Vögele, Tom Fricker, Will Sullivan, Tim Tores, BGBOXXX Design, and Angriawan Ditya Zulkarnain from the Noun Project https://thenounproject.com/ diff --git a/sdrbase/CMakeLists.txt b/sdrbase/CMakeLists.txt index 167cc445c..6cd2f9b00 100644 --- a/sdrbase/CMakeLists.txt +++ b/sdrbase/CMakeLists.txt @@ -68,6 +68,7 @@ set(sdrbase_SOURCES channel/channelapi.cpp channel/channelutils.cpp + channel/channelwebapiutils.cpp channel/remotedataqueue.cpp channel/remotedatareadqueue.cpp @@ -155,6 +156,7 @@ set(sdrbase_SOURCES util/CRC64.cpp util/db.cpp util/fixedtraits.cpp + util/httpdownloadmanager.cpp util/lfsr.cpp util/message.cpp util/messagequeue.cpp @@ -206,6 +208,7 @@ set(sdrbase_HEADERS channel/channelapi.h channel/channelutils.h + channel/channelwebapiutils.h channel/remotedataqueue.h channel/remotedatareadqueue.h channel/remotedatablock.h @@ -325,6 +328,7 @@ set(sdrbase_HEADERS util/doublebuffer.h util/doublebufferfifo.h util/fixedtraits.h + util/httpdownloadmanager.h util/incrementalarray.h util/incrementalvector.h util/lfsr.h diff --git a/sdrbase/channel/channelwebapiutils.cpp b/sdrbase/channel/channelwebapiutils.cpp new file mode 100644 index 000000000..99a5fcad0 --- /dev/null +++ b/sdrbase/channel/channelwebapiutils.cpp @@ -0,0 +1,180 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2020 Jon Beniston, M7RCE // +// // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include + +#include "channelwebapiutils.h" + +#include "SWGDeviceState.h" +#include "SWGSuccessResponse.h" +#include "SWGErrorResponse.h" +#include "SWGDeviceSettings.h" +#include "SWGChannelSettings.h" +#include "SWGDeviceSet.h" + +#include "maincore.h" +#include "device/deviceset.h" +#include "device/deviceapi.h" +#include "dsp/devicesamplesource.h" +#include "dsp/devicesamplesink.h" +#include "dsp/devicesamplemimo.h" +#include "webapi/webapiadapterinterface.h" +#include "webapi/webapiutils.h" + +bool ChannelWebAPIUtils::getCenterFrequency(int deviceIndex, double &frequencyInHz) +{ + SWGSDRangel::SWGDeviceSettings deviceSettingsResponse; + SWGSDRangel::SWGErrorResponse errorResponse; + int httpRC; + DeviceSet *deviceSet; + + // Get current device settings + std::vector deviceSets = MainCore::instance()->getDeviceSets(); + if ((deviceIndex >= 0) && (deviceIndex < deviceSets.size())) + { + deviceSet = deviceSets[deviceIndex]; + if (deviceSet->m_deviceSourceEngine) + { + deviceSettingsResponse.setDeviceHwType(new QString(deviceSet->m_deviceAPI->getHardwareId())); + deviceSettingsResponse.setDirection(0); + DeviceSampleSource *source = deviceSet->m_deviceAPI->getSampleSource(); + httpRC = source->webapiSettingsGet(deviceSettingsResponse, *errorResponse.getMessage()); + } + else if (deviceSet->m_deviceSinkEngine) + { + deviceSettingsResponse.setDeviceHwType(new QString(deviceSet->m_deviceAPI->getHardwareId())); + deviceSettingsResponse.setDirection(1); + DeviceSampleSink *sink = deviceSet->m_deviceAPI->getSampleSink(); + httpRC = sink->webapiSettingsGet(deviceSettingsResponse, *errorResponse.getMessage()); + } + else if (deviceSet->m_deviceMIMOEngine) + { + deviceSettingsResponse.setDeviceHwType(new QString(deviceSet->m_deviceAPI->getHardwareId())); + deviceSettingsResponse.setDirection(2); + DeviceSampleMIMO *mimo = deviceSet->m_deviceAPI->getSampleMIMO(); + httpRC = mimo->webapiSettingsGet(deviceSettingsResponse, *errorResponse.getMessage()); + } + else + { + qDebug() << "ChannelWebAPIUtils::getCenterFrequency - not a sample source device " << deviceIndex; + return false; + } + } + else + { + qDebug() << "ChannelWebAPIUtils::getCenterFrequency - no device " << deviceIndex; + return false; + } + + if (httpRC/100 != 2) + { + qWarning("ChannelWebAPIUtils::getCenterFrequency: get device frequency error %d: %s", + httpRC, qPrintable(*errorResponse.getMessage())); + return false; + } + + QJsonObject *jsonObj = deviceSettingsResponse.asJsonObject(); + return WebAPIUtils::getSubObjectDouble(*jsonObj, "centerFrequency", frequencyInHz); +} + +bool ChannelWebAPIUtils::setCenterFrequency(int deviceIndex, double frequencyInHz) +{ + SWGSDRangel::SWGDeviceSettings deviceSettingsResponse; + SWGSDRangel::SWGErrorResponse errorResponse; + int httpRC; + DeviceSet *deviceSet; + + // Get current device settings + std::vector deviceSets = MainCore::instance()->getDeviceSets(); + if ((deviceIndex >= 0) && (deviceIndex < deviceSets.size())) + { + deviceSet = deviceSets[deviceIndex]; + if (deviceSet->m_deviceSourceEngine) + { + deviceSettingsResponse.setDeviceHwType(new QString(deviceSet->m_deviceAPI->getHardwareId())); + deviceSettingsResponse.setDirection(0); + DeviceSampleSource *source = deviceSet->m_deviceAPI->getSampleSource(); + httpRC = source->webapiSettingsGet(deviceSettingsResponse, *errorResponse.getMessage()); + } + else if (deviceSet->m_deviceSinkEngine) + { + deviceSettingsResponse.setDeviceHwType(new QString(deviceSet->m_deviceAPI->getHardwareId())); + deviceSettingsResponse.setDirection(1); + DeviceSampleSink *sink = deviceSet->m_deviceAPI->getSampleSink(); + httpRC = sink->webapiSettingsGet(deviceSettingsResponse, *errorResponse.getMessage()); + } + else if (deviceSet->m_deviceMIMOEngine) + { + deviceSettingsResponse.setDeviceHwType(new QString(deviceSet->m_deviceAPI->getHardwareId())); + deviceSettingsResponse.setDirection(2); + DeviceSampleMIMO *mimo = deviceSet->m_deviceAPI->getSampleMIMO(); + httpRC = mimo->webapiSettingsGet(deviceSettingsResponse, *errorResponse.getMessage()); + } + else + { + qDebug() << "ChannelWebAPIUtils::setCenterFrequency: not a sample source device " << deviceIndex; + return false; + } + } + else + { + qDebug() << "ChannelWebAPIUtils::setCenterFrequency: no device " << deviceIndex; + return false; + } + + if (httpRC/100 != 2) + { + qWarning("ChannelWebAPIUtils::setCenterFrequency: get device frequency error %d: %s", + httpRC, qPrintable(*errorResponse.getMessage())); + return false; + } + + // Patch centerFrequency + QJsonObject *jsonObj = deviceSettingsResponse.asJsonObject(); + double freq; + if (WebAPIUtils::getSubObjectDouble(*jsonObj, "centerFrequency", freq)) + { + WebAPIUtils::setSubObjectDouble(*jsonObj, "centerFrequency", frequencyInHz); + QStringList deviceSettingsKeys; + deviceSettingsKeys.append("centerFrequency"); + deviceSettingsResponse.init(); + deviceSettingsResponse.fromJsonObject(*jsonObj); + SWGSDRangel::SWGErrorResponse errorResponse2; + + DeviceSampleSource *source = deviceSet->m_deviceAPI->getSampleSource(); + + httpRC = source->webapiSettingsPutPatch(false, deviceSettingsKeys, deviceSettingsResponse, *errorResponse2.getMessage()); + + if (httpRC/100 == 2) + { + qDebug("ChannelWebAPIUtils::setCenterFrequency: set device frequency %f OK", frequencyInHz); + } + else + { + qWarning("ChannelWebAPIUtils::setCenterFrequency: set device frequency error %d: %s", + httpRC, qPrintable(*errorResponse2.getMessage())); + return false; + } + } + else + { + qWarning("ChannelWebAPIUtils::setCenterFrequency: no centerFrequency key in device settings"); + return false; + } + + return true; +} diff --git a/sdrbase/channel/channelwebapiutils.h b/sdrbase/channel/channelwebapiutils.h new file mode 100644 index 000000000..52b080f9c --- /dev/null +++ b/sdrbase/channel/channelwebapiutils.h @@ -0,0 +1,30 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2020 Jon Beniston, M7RCE // +// // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef SDRBASE_CHANNEL_CHANNELWEBAPIUTILS_H_ +#define SDRBASE_CHANNEL_CHANNELWEBAPIUTILS_H_ + +#include "export.h" + +class SDRBASE_API ChannelWebAPIUtils +{ +public: + static bool getCenterFrequency(int deviceIndex, double &frequencyInHz); + static bool setCenterFrequency(int deviceIndex, double frequencyInHz); +}; + +#endif // SDRBASE_CHANNEL_CHANNELWEBAPIUTILS_H_ diff --git a/sdrbase/util/crc.cpp b/sdrbase/util/crc.cpp index 44bbed09b..914ad6406 100644 --- a/sdrbase/util/crc.cpp +++ b/sdrbase/util/crc.cpp @@ -34,27 +34,55 @@ void crc::calculate(uint32_t data, int data_bits) { uint32_t tmp; uint32_t mask; + uint32_t msb; int bit, i; - // Reverse data order. if (m_msb_first) - data = reverse (data, data_bits); - - // Compute CRC. - tmp = m_crc; - for (i = 0; i < data_bits; i++) { - bit = ((data >> i) & 1) ^ (tmp & 1); - if (bit) - tmp = (tmp >> 1) ^ m_polynomial_rev; - else - tmp = tmp >> 1; + { + mask = (1 << m_poly_bits) - 1; + msb = 1 << (m_poly_bits - 1); + tmp = m_crc ^ (data << (m_poly_bits - 8)); + for (i = 0; i < data_bits; i++) + { + if (tmp & msb) + tmp = (tmp << 1) ^ m_polynomial; + else + tmp = tmp << 1; + tmp = tmp & mask; + } + m_crc = tmp; + } + else + { + tmp = m_crc; + for (i = 0; i < data_bits; i++) { + bit = ((data >> i) & 1) ^ (tmp & 1); + if (bit) + tmp = (tmp >> 1) ^ m_polynomial_rev; + else + tmp = tmp >> 1; + } + m_crc = tmp; } - m_crc = tmp; } // Calculate CRC for specified array void crc::calculate(const uint8_t *data, int length) { - for(int i = 0; i < length; i++) - calculate(data[i], 8); + int i; + uint32_t mask1; + uint32_t mask2; + + if (m_msb_first) + { + mask1 = (1 << m_poly_bits) - 1; + mask2 = 0xff << (m_poly_bits - 8); + for (i = 0; i < length; i++) + m_crc = mask1 & ((m_crc << 8) ^ m_lut[data[i] ^ ((m_crc & mask2) >> (m_poly_bits-8))]); + } + else + { + for (i = 0; i < length; i++) + m_crc = (m_crc >> 8) ^ m_lut[data[i] ^ (m_crc & 0xff)]; + } } diff --git a/sdrbase/util/crc.h b/sdrbase/util/crc.h index cde0e5294..5a212dcbf 100644 --- a/sdrbase/util/crc.h +++ b/sdrbase/util/crc.h @@ -34,10 +34,21 @@ public: m_init_value(init_value), m_final_xor(final_xor) { - int shift; + // Reverse polynomial for LSB first + if (!msb_first) + { + int shift; - shift = 32 - m_poly_bits; - m_polynomial_rev = reverse (m_polynomial << shift, 32); + shift = 32 - m_poly_bits; + m_polynomial_rev = reverse (m_polynomial << shift, 32); + } + // Create LUT + for (int i = 0; i < 256; i++) + { + m_crc = 0; + calculate(i, 8); + m_lut[i] = m_crc; + } init(); } @@ -57,10 +68,7 @@ public: uint32_t t; t = m_final_xor ^ m_crc; - if (m_msb_first) - return reverse(t, m_poly_bits); - else - return t; + return t; } private: @@ -73,6 +81,7 @@ private: bool m_msb_first; uint32_t m_init_value; uint32_t m_final_xor; + uint32_t m_lut[256]; }; class SDRBASE_API crc16ansi : public crc @@ -105,6 +114,8 @@ public: crc32() : crc(32, 0x04C11DB7, false, 0xffffffff, 0xffffffff) {} }; +// Should probably try to use SSE 4.2's CRC32C instruction if available +// See _mm_crc32_u8 and _mm_crc32_u64 intrinsics class SDRBASE_API crc32c : public crc { public: diff --git a/sdrbase/util/httpdownloadmanager.cpp b/sdrbase/util/httpdownloadmanager.cpp new file mode 100644 index 000000000..22648e394 --- /dev/null +++ b/sdrbase/util/httpdownloadmanager.cpp @@ -0,0 +1,108 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2020 Jon Beniston, M7RCE // +// // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#include "httpdownloadmanager.h" + +#include + +HttpDownloadManager::HttpDownloadManager() +{ + connect(&manager, &QNetworkAccessManager::finished, this, &HttpDownloadManager::downloadFinished); +} + +QNetworkReply *HttpDownloadManager::download(const QUrl &url, const QString &filename) +{ + QNetworkRequest request(url); + QNetworkReply *reply = manager.get(request); + + connect(reply, &QNetworkReply::sslErrors, this, &HttpDownloadManager::sslErrors); + + qDebug() << "HttpDownloadManager: Downloading from " << url << " to " << filename; + downloads.append(reply); + filenames.append(filename); + + return reply; +} + +void HttpDownloadManager::sslErrors(const QList &sslErrors) +{ + for (const QSslError &error : sslErrors) + qCritical() << "HttpDownloadManager: SSL error: " << error.errorString(); +} + +bool HttpDownloadManager::isHttpRedirect(QNetworkReply *reply) +{ + int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); + // 304 is file not changed, but maybe we did + return (status >= 301 && status <= 308); +} + +bool HttpDownloadManager::writeToFile(const QString &filename, QIODevice *data) +{ + QFile file(filename); + + // Make sure directory to save the file in exists + QFileInfo fileInfo(filename); + QDir dir = fileInfo.absoluteDir(); + if (!dir.exists()) + dir.mkpath("."); + + if (file.open(QIODevice::WriteOnly)) + { + file.write(data->readAll()); + file.close(); + return true; + } + else + { + qCritical() << "HttpDownloadManager: Could not open " << filename << " for writing: " << file.errorString(); + return false; + } +} + +void HttpDownloadManager::downloadFinished(QNetworkReply *reply) +{ + QString url = reply->url().toEncoded().constData(); + int idx = downloads.indexOf(reply); + QString filename = filenames[idx]; + bool success = false; + + if (!reply->error()) + { + if (!isHttpRedirect(reply)) + { + if (writeToFile(filename, reply)) + { + success = true; + qDebug() << "HttpDownloadManager: Download from " << url << " to " << filename << " finshed."; + } + } + else + { + qDebug() << "HttpDownloadManager: Request to download " << url << " was redirected."; + } + } + else + { + qCritical() << "HttpDownloadManager: Download of " << url << " failed: " << reply->errorString(); + } + + downloads.removeAll(reply); + filenames.remove(idx); + reply->deleteLater(); + emit downloadComplete(filename, success); +} diff --git a/sdrbase/util/httpdownloadmanager.h b/sdrbase/util/httpdownloadmanager.h new file mode 100644 index 000000000..b697ced47 --- /dev/null +++ b/sdrbase/util/httpdownloadmanager.h @@ -0,0 +1,53 @@ +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2020 Jon Beniston, M7RCE // +// // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation as version 3 of the License, or // +// (at your option) any later version. // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef INCLUDE_HTTPDOWNLOADMANAGER_H +#define INCLUDE_HTTPDOWNLOADMANAGER_H + +#include +#include + +#include "export.h" + +class QSslError; + +// Class to download files via http and write them to disk +class SDRBASE_API HttpDownloadManager : public QObject +{ + Q_OBJECT +public: + HttpDownloadManager(); + QNetworkReply *download(const QUrl &url, const QString &filename); + +private: + QNetworkAccessManager manager; + QVector downloads; + QVector filenames; + + static bool writeToFile(const QString &filename, QIODevice *data); + static bool isHttpRedirect(QNetworkReply *reply); + +public slots: + void downloadFinished(QNetworkReply *reply); + void sslErrors(const QList &errors); + +signals: + void downloadComplete(const QString &filename, bool success); + +}; + +#endif /* INCLUDE_HTTPDOWNLOADMANAGER_H */ diff --git a/sdrgui/resources/map.qml b/sdrgui/resources/map.qml deleted file mode 100644 index 096fcb337..000000000 --- a/sdrgui/resources/map.qml +++ /dev/null @@ -1,85 +0,0 @@ -import QtQuick 2.4 -import QtQuick.Window 2.4 -import QtLocation 5.6 -import QtPositioning 5.6 - -Item { - id: qmlMap - property int aircraftZoomLevel: 11 - - Plugin { - id: mapPlugin - name: "osm" - } - - Map { - id: map - objectName: "map" - anchors.fill: parent - plugin: mapPlugin - center: QtPositioning.coordinate(51.5, 0.125) // London - zoomLevel: 10 - - MapStation { - id: station - objectName: "station" - stationName: "Home" - coordinate: QtPositioning.coordinate(51.5, 0.125) - } - - MapItemView{ - model: aircraftModel - delegate: aircraftComponent - } - - onZoomLevelChanged: { - if (zoomLevel > 11) { - station.zoomLevel = zoomLevel - aircraftZoomLevel = zoomLevel - } else { - station.zoomLevel = 11 - aircraftZoomLevel = 11 - } - } - - } - - Component { - id: aircraftComponent - MapQuickItem { - id: aircraft - anchorPoint.x: image.width/2 - anchorPoint.y: image.height/2 - coordinate: position - zoomLevel: aircraftZoomLevel - - sourceItem: Grid { - columns: 1 - Grid { - horizontalItemAlignment: Grid.AlignHCenter - Image { - id: image - rotation: heading - source: aircraftImage - } - Rectangle { - id: bubble - color: bubbleColour - border.width: 1 - width: text.width * 1.1 - height: text.height * 1.1 - radius: 5 - Text { - id: text - anchors.centerIn: parent - text: adsbData - } - } - } - } - - - } - } - -} diff --git a/sdrgui/resources/res.qrc b/sdrgui/resources/res.qrc index 33f47fa23..26af06559 100644 --- a/sdrgui/resources/res.qrc +++ b/sdrgui/resources/res.qrc @@ -1,16 +1,5 @@ - map.qml - MapStation.qml - aircraft_2engine.png - aircraft_2enginesmall.png - aircraft_4engine.png - aircraft_helicopter.png - aircraft_light.png - aircraft_space.png - aircraft_drone.png - map_antenna.png - map_truck.png arrow_left.png star.png swap.png