From 3cb9e1849b0e6a97c38d377c14208795522a028c Mon Sep 17 00:00:00 2001 From: Arjan Onwezen Date: Sun, 12 Dec 2021 04:38:05 -0500 Subject: [PATCH 1/3] added ICAO special designators, to aircraft types --- firmware/application/apps/ui_adsb_rx.cpp | 26 ++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/firmware/application/apps/ui_adsb_rx.cpp b/firmware/application/apps/ui_adsb_rx.cpp index 88cd87bdb..d065163a4 100644 --- a/firmware/application/apps/ui_adsb_rx.cpp +++ b/firmware/application/apps/ui_adsb_rx.cpp @@ -206,6 +206,32 @@ ADSBRxAircraftDetailsView::ADSBRxAircraftDetailsView( break; } + } + // check for ICAO type designator + else if(strlen(file_buffer) == 4) { + switch(file_buffer[0]) { + case 'SHIP': + text_type.set("Airship"); + break; + case 'BALL': + text_type.set("Balloon"); + break; + case 'GLID': + text_type.set("Glider / sailplane"); + break; + case 'ULAC': + text_type.set("Micro/ultralight aircraft"); + break; + case 'GYRO': + text_type.set("Micro/ultralight autogyro"); + break; + case 'UHEL': + text_type.set("Micro/ultralight helicopter"); + break; + case 'PARA': + text_type.set("Powered parachute/paraplane"); + break; + } } db_file.read(file_buffer, 32); text_owner.set(file_buffer); From 4a0a243530fe1701887b4b10036802743dffe472 Mon Sep 17 00:00:00 2001 From: Arjan Onwezen Date: Sun, 12 Dec 2021 04:48:11 -0500 Subject: [PATCH 2/3] added binary search tree lookup to airlines.db --- firmware/application/apps/ui_adsb_rx.cpp | 43 +++++++++++++++++------- 1 file changed, 31 insertions(+), 12 deletions(-) diff --git a/firmware/application/apps/ui_adsb_rx.cpp b/firmware/application/apps/ui_adsb_rx.cpp index d065163a4..d192f58af 100644 --- a/firmware/application/apps/ui_adsb_rx.cpp +++ b/firmware/application/apps/ui_adsb_rx.cpp @@ -293,7 +293,7 @@ ADSBRxDetailsView::ADSBRxDetailsView( bool found = false; size_t number_of_airlines = 0; std::string airline_code; - size_t c; + //size_t c; add_children({ &labels, @@ -320,18 +320,37 @@ ADSBRxDetailsView::ADSBRxDetailsView( // Search for 3-letter code number_of_airlines = (db_file.size() / 68); // determine number of airlines in file airline_code = entry_copy.callsign.substr(0, 3); - c = 0; - do { - db_file.read(file_buffer, 4); - if (!file_buffer[0]) - break; - if (!airline_code.compare(0, 4, file_buffer)) - found = true; - else - c++; - } while (!found && (c < number_of_airlines)); + //c = 0; + //do { + // db_file.read(file_buffer, 4); + // if (!file_buffer[0]) + // break; + // if (!airline_code.compare(0, 4, file_buffer)) + // found = true; + // else + // c++; + //} while (!found && (c < number_of_airlines)); + + // binary search + int first = 0, // First search element + last = number_of_airlines - 1, // Last search element + middle, // Mid point of search + position = -1; // Position of search value + while (!found && first <= last) { + middle = (first + last) / 2; // Calculate mid point + db_file.seek(middle * 4); + db_file.read(file_buffer, 3); + if (file_buffer == airline_code) { // If value is found at mid + found = true; + position = middle; + } + else if (file_buffer > airline_code) // If value is in lower half + last = middle - 1; + else + first = middle + 1; // If value is in upper half + } - if (found) { + if (position > -1) { db_file.seek((number_of_airlines * 4) + (c << 6)); // seek starting after index db_file.read(file_buffer, 32); text_airline.set(file_buffer); From 455389f1d19781bd64125736d30e0c240be3786c Mon Sep 17 00:00:00 2001 From: Arjan Onwezen Date: Sun, 12 Dec 2021 05:09:06 -0500 Subject: [PATCH 3/3] fixes and cleanup --- firmware/application/apps/ui_adsb_rx.cpp | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/firmware/application/apps/ui_adsb_rx.cpp b/firmware/application/apps/ui_adsb_rx.cpp index d192f58af..edd5a9ab9 100644 --- a/firmware/application/apps/ui_adsb_rx.cpp +++ b/firmware/application/apps/ui_adsb_rx.cpp @@ -168,7 +168,7 @@ ADSBRxAircraftDetailsView::ADSBRxAircraftDetailsView( - db_file.read(file_buffer, 4); //todo split in engine type, numbe rof engines,etc + db_file.read(file_buffer, 4); // ICAO type decripton if(strlen(file_buffer) == 3) { switch(file_buffer[0]) { case 'L': @@ -293,7 +293,6 @@ ADSBRxDetailsView::ADSBRxDetailsView( bool found = false; size_t number_of_airlines = 0; std::string airline_code; - //size_t c; add_children({ &labels, @@ -320,16 +319,6 @@ ADSBRxDetailsView::ADSBRxDetailsView( // Search for 3-letter code number_of_airlines = (db_file.size() / 68); // determine number of airlines in file airline_code = entry_copy.callsign.substr(0, 3); - //c = 0; - //do { - // db_file.read(file_buffer, 4); - // if (!file_buffer[0]) - // break; - // if (!airline_code.compare(0, 4, file_buffer)) - // found = true; - // else - // c++; - //} while (!found && (c < number_of_airlines)); // binary search int first = 0, // First search element @@ -351,7 +340,7 @@ ADSBRxDetailsView::ADSBRxDetailsView( } if (position > -1) { - db_file.seek((number_of_airlines * 4) + (c << 6)); // seek starting after index + db_file.seek((number_of_airlines * 4) + (position << 6)); // seek starting after index db_file.read(file_buffer, 32); text_airline.set(file_buffer); db_file.read(file_buffer, 32);