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