diff --git a/README.md b/README.md index 172936290bf8fe59e1aef25b63e07ac66acb022d..6323efd9fd28a1d0d6faa005bc325f1cb4957c3e 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,12 @@ # PortaPack Mayhem -[](https://travis-ci.com/eried/portapack-mayhem) [](https://app.buddy.works/eried/portapack/pipelines/pipeline/252276) [](https://codescene.io/projects/8381) [](https://hub.docker.com/r/eried/portapack) -[](https://discord.gg/fU9PsKW) +[](https://travis-ci.com/eried/portapack-mayhem) [](https://app.buddy.works/eried/portapack/pipelines/pipeline/252276) [](https://codescene.io/projects/8381) [](https://github.com/eried/portapack-mayhem/releases) [](https://github.com/eried/portapack-mayhem/releases/latest) [](https://hub.docker.com/r/eried/portapack) [](https://discord.gg/tuwVMv3) [](https://www.bountysource.com/teams/portapack-mayhem/issues) This is a fork of the [Havoc](https://github.com/furrtek/portapack-havoc/) firmware, which itself was a fork of the [PortaPack](https://github.com/sharebrained/portapack-hackrf) firmware, an add-on for the [HackRF](http://greatscottgadgets.com/hackrf/). A fork is a derivate, in this case one that has extra features and fixes when compared to the older versions. [<img src="https://raw.githubusercontent.com/wiki/eried/portapack-mayhem/img/hw_overview_h2_front.png" height="400">](https://github.com/eried/portapack-mayhem/wiki/Hardware-overview) [<img src="https://raw.githubusercontent.com/wiki/eried/portapack-mayhem/img/hw_overview_h2_inside.png" height="400">](https://github.com/eried/portapack-mayhem/wiki/Hardware-overview#portapack-internals) -*[PortaPack H2](https://s.click.aliexpress.com/e/_dSMPvNo) (clone) with a custom [3d printed case](https://github.com/eried/portapack-mayhem/wiki/H2-Enclosure)* +*[PortaPack H2+HackRF+battery](https://s.click.aliexpress.com/e/_dZ7lA96) (clone) with a custom [3d printed case](https://github.com/eried/portapack-mayhem/wiki/H2-Enclosure)* # Quick overview @@ -21,7 +20,7 @@ This repository expands upon the previous work by many people and aims to consta ## Does it work on H1/H2 PortaPack? -Yes, both devices are the [same](https://github.com/eried/portapack-mayhem/wiki/First-steps). The one I am using to test all changes is this [PortaPack H2+HackRF+battery](https://s.click.aliexpress.com/e/_dSMPvNo), which is a kit that includes everything you need. Sadly, the people making the H2 never made the updated schematics available, which is not ideal (and goes against the terms of the license). +Yes, both devices are the [same](https://github.com/eried/portapack-mayhem/wiki/First-steps). The one I am using to test all changes is this [PortaPack H2+HackRF+battery](https://s.click.aliexpress.com/e/_dZ7lA96), which is a kit that includes everything you need. Sadly, the people making the H2 never made the updated schematics available, which is not ideal (and goes against the terms of the license). Most members of the community are using a clone of the [PortaPack H1+HackRF+metal case](https://s.click.aliexpress.com/e/_dS6liw4), which does not include any battery functionality, but it is a cheaper alternative. To support the people behind the hardware, please buy a genuine [HackRF](https://greatscottgadgets.com/hackrf/) and [PortaPack](https://store.sharebrained.com/products/portapack-for-hackrf-one-kit). @@ -46,16 +45,21 @@ This fork (**Mayhem**) uses *major.minor.release* [semantic versioning](https:// ## How can I collaborate You can write [documentation](https://github.com/eried/portapack-mayhem/wiki), fix bugs and [answer issues](https://github.com/eried/portapack-mayhem/issues) or add new functionality. Please check the following [guide](https://github.com/eried/portapack-mayhem/wiki/How-to-collaborate) with details. -Consider that the hardware and firmware has been created and maintain by a [lot](https://github.com/mossmann/hackrf/graphs/contributors) of [people](https://github.com/eried/portapack-mayhem/graphs/contributors), so always try colaborating your time and effort first. For coding related questions, if something does not fit as an issue, please join our [Channel in Discord](https://discord.gg/fU9PsKW). +Consider that the hardware and firmware has been created and maintain by a [lot](https://github.com/mossmann/hackrf/graphs/contributors) of [people](https://github.com/eried/portapack-mayhem/graphs/contributors), so always try colaborating your time and effort first. For coding related questions, if something does not fit as an issue, please join our Discord by clicking the chat badge on [top](#portapack-mayhem). As a last option, if you want to send money directly to me for getting more boards, antennas and such: [](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=CBPQA4HRRPJQ6&source=url) +## What if I really want to pay for something? +You can create a bounty and invite people to your own bounty. This will incentivize coders to work on a new feature, solving a bug or even writting documentation. Start a bounty by [creating](https://github.com/eried/portapack-mayhem/issues/new/choose) or [choosing](https://github.com/eried/portapack-mayhem/issues/) an existing issue. Then, go to [Bountysource](https://www.bountysource.com/) and post a bounty using the link to that specific [issue](https://www.bountysource.com/teams/portapack-mayhem/issues). + +Promote your bounty over our Discord by clicking the chat badge on [top](#portapack-mayhem). + ## What if I need help? First, check the [documentation](https://github.com/eried/portapack-mayhem/wiki). If you find a bug or you think the problem is related to the current repository, please open an [issue](https://github.com/eried/portapack-mayhem/issues/new/choose). -You can reach the [official community](https://www.facebook.com/groups/177623356165819) in Facebook. +You can reach the [official community](https://www.facebook.com/groups/177623356165819) in Facebook, and our Discord by clicking the chat badge on [top](#portapack-mayhem). ## What if I find incongruencies, or grammatical errors in the text? If is on the [Wiki](https://github.com/eried/portapack-mayhem/wiki), you can modify it directly. If is on files of the repository, you can send corrections as [pull requests](https://github.com/eried/portapack-mayhem/wiki/How-to-collaborate#coding-new-stuff-or-fixing-bugs). As a last resource, open an [issue](https://github.com/eried/portapack-mayhem/issues/new/choose). diff --git a/firmware/application/CMakeLists.txt b/firmware/application/CMakeLists.txt index dc9e41d5c6e5c88e11c99fffc2f6aafcdb7ac3d2..f551f676ce8fab64c024edb1f4f3d00ed7fbb36c 100644 --- a/firmware/application/CMakeLists.txt +++ b/firmware/application/CMakeLists.txt @@ -214,7 +214,7 @@ set(CPPSRC ui/ui_tabview.cpp ui/ui_textentry.cpp ui/ui_transmitter.cpp - apps/ui_about.cpp + apps/ui_about_simple.cpp apps/ui_adsb_rx.cpp apps/ui_adsb_tx.cpp apps/ui_afsk_rx.cpp diff --git a/firmware/application/apps/ui_about_simple.cpp b/firmware/application/apps/ui_about_simple.cpp new file mode 100644 index 0000000000000000000000000000000000000000..2c6f796ed8539e9ad1d171201499878ade3031c9 --- /dev/null +++ b/firmware/application/apps/ui_about_simple.cpp @@ -0,0 +1,75 @@ +#include "ui_about_simple.hpp" + +namespace ui +{ + AboutView::AboutView(NavigationView &nav) + { + add_children({&console, &button_ok}); + + button_ok.on_select = [&nav](Button &) { + nav.pop(); + }; + + console.writeln("\x1B\x07List of contributors:\x1B\x10"); + console.writeln(""); + } + + void AboutView::update() + { + if (++timer > 200) + { + timer = 0; + + switch (++frame) + { + case 1: + // TODO: Generate this automatically from github + // https://github.com/eried/portapack-mayhem/graphs/contributors?to=2022-01-01&from=2020-04-12&type=c + console.writeln("\x1B\x06Mayhem:\x1B\x10"); + console.writeln("eried,euquiq,gregoryfenton"); + console.writeln("johnelder,jwetzell,nnemanjan00"); + console.writeln("N0vaPixel,klockee,jamesshao8"); + console.writeln(""); + break; + + case 2: + // https://github.com/eried/portapack-mayhem/graphs/contributors?to=2020-04-12&from=2015-07-31&type=c + console.writeln("\x1B\x06Havoc:\x1B\x10"); + console.writeln("furrtek,mrmookie,notpike"); + console.writeln("mjwaxios,ImDroided,Giorgiofox"); + console.writeln("F4GEV,z4ziggy,xmycroftx"); + console.writeln("troussos,silascutler"); + console.writeln("nickbouwhuis,msoose,leres"); + console.writeln("joakar,dhoetger,clem-42"); + console.writeln("brianlechthaler,ZeroChaos-..."); + console.writeln(""); + break; + + case 3: + // https://github.com/eried/portapack-mayhem/graphs/contributors?from=2014-07-05&to=2015-07-31&type=c + console.writeln("\x1B\x06PortaPack:\x1B\x10"); + console.writeln("jboone,argilo"); + console.writeln(""); + break; + + case 4: + // https://github.com/mossmann/hackrf/graphs/contributors + console.writeln("\x1B\x06HackRF:\x1B\x10"); + console.writeln("mossmann,dominicgs,bvernoux"); + console.writeln("bgamari,schneider42,miek"); + console.writeln("willcode,hessu,Sec42"); + console.writeln("yhetti,ckuethe,smunaut"); + console.writeln("wishi,mrbubble62,scateu..."); + console.writeln(""); + frame = 0; // Loop + break; + } + } + } + + void AboutView::focus() + { + button_ok.focus(); + } + +} /* namespace ui */ \ No newline at end of file diff --git a/firmware/application/apps/ui_about_simple.hpp b/firmware/application/apps/ui_about_simple.hpp new file mode 100644 index 0000000000000000000000000000000000000000..a059011907ec2d333436566a68c87764375e2095 --- /dev/null +++ b/firmware/application/apps/ui_about_simple.hpp @@ -0,0 +1,40 @@ +#ifndef __UI_ABOUT_SIMPLE_H__ +#define __UI_ABOUT_SIMPLE_H__ + +#include "ui_widget.hpp" +#include "ui_navigation.hpp" +#include "ui_font_fixed_8x16.hpp" + +#include <cstdint> + +namespace ui +{ + class AboutView : public View + { + public: + AboutView(NavigationView &nav); + void focus() override; + std::string title() const override { return "About"; }; + int32_t timer{180}; + short frame{0}; + + private: + void update(); + + Console console{ + {0, 10, 240, 240}}; + + Button button_ok{ + {240/3, 270, 240/3, 24}, + "OK", + }; + + MessageHandlerRegistration message_handler_update{ + Message::ID::DisplayFrameSync, + [this](const Message *const) { + this->update(); + }}; + }; +} // namespace ui + +#endif /*__UI_ABOUT_SIMPLE_H__*/ diff --git a/firmware/application/apps/ui_fileman.cpp b/firmware/application/apps/ui_fileman.cpp index 0e5eaf9e7f1aeafdbd5afd1019451413af1ade29..f19cee3c80166138ef407aa395b7ee6b77d08158 100644 --- a/firmware/application/apps/ui_fileman.cpp +++ b/firmware/application/apps/ui_fileman.cpp @@ -92,31 +92,37 @@ FileManBaseView::FileManBaseView( ) : nav_ (nav), extension_filter { filter } { - load_directory_contents(current_path); - - if (!entry_list.size()) - empty_root = true; - add_children({ &labels, &text_current, &button_exit }); - menu_view.on_left = [&nav, this]() { - load_directory_contents(get_parent_dir()); - refresh_list(); - }; - button_exit.on_select = [this, &nav](Button&) { nav.pop(); }; -}; + + if (!sdcIsCardInserted(&SDCD1)) { + empty_root=true; + text_current.set("NO SD CARD!"); + } else { + load_directory_contents(current_path); + if (!entry_list.size()) + { + empty_root = true; + text_current.set("EMPTY SD CARD!"); + } else { + menu_view.on_left = [&nav, this]() { + load_directory_contents(get_parent_dir()); + refresh_list(); + }; + } + } +} void FileManBaseView::focus() { if (empty_root) { button_exit.focus(); - nav_.display_modal("Error", "No files in root.", ABORT, nullptr); } else { menu_view.focus(); } @@ -190,7 +196,6 @@ void FileManBaseView::refresh_list() { nav_.pop(); }); } - FileSaveView::FileSaveView( NavigationView& nav ) : FileManBaseView(nav) @@ -244,7 +249,11 @@ FileLoadView::FileLoadView( void FileManagerView::on_rename(NavigationView& nav) { text_prompt(nav, name_buffer, max_filename_length, [this](std::string& buffer) { - rename_file(get_selected_path(), buffer); + std::string destination_path = current_path.string(); + if (destination_path.back() != '/') + destination_path += '/'; + destination_path = destination_path + buffer; + rename_file(get_selected_path(), destination_path); load_directory_contents(current_path); refresh_list(); }); @@ -271,57 +280,59 @@ FileManagerView::FileManagerView( NavigationView& nav ) : FileManBaseView(nav, "") { - on_refresh_widgets = [this](bool v) { - refresh_widgets(v); - }; - - add_children({ - &menu_view, - &labels, - &text_date, - &button_rename, - &button_new_dir, - &button_delete - }); - - menu_view.on_highlight = [this]() { - text_date.set(to_string_FAT_timestamp(file_created_date(get_selected_path()))); - }; - - refresh_list(); - - on_select_entry = [this]() { - if (entry_list[menu_view.highlighted_index()].is_directory) { - load_directory_contents(get_selected_path()); - refresh_list(); - } else - button_rename.focus(); - }; - - button_new_dir.on_select = [this, &nav](Button&) { - name_buffer.clear(); + if (!empty_root) { + on_refresh_widgets = [this](bool v) { + refresh_widgets(v); + }; - text_prompt(nav, name_buffer, max_filename_length, [this](std::string& buffer) { - make_new_directory(current_path.string() + '/' + buffer); - load_directory_contents(current_path); - refresh_list(); + add_children({ + &menu_view, + &labels, + &text_date, + &button_rename, + &button_new_dir, + &button_delete }); - }; - - button_rename.on_select = [this, &nav](Button&) { - name_buffer = entry_list[menu_view.highlighted_index()].entry_path.filename().string().substr(0, max_filename_length); - on_rename(nav); - }; - - button_delete.on_select = [this, &nav](Button&) { - // Use display_modal ? - nav.push<ModalMessageView>("Delete", "Delete " + entry_list[menu_view.highlighted_index()].entry_path.filename().string() + "\nAre you sure?", YESNO, - [this](bool choice) { - if (choice) - on_delete(); - } - ); - }; + + menu_view.on_highlight = [this]() { + text_date.set(to_string_FAT_timestamp(file_created_date(get_selected_path()))); + }; + + refresh_list(); + + on_select_entry = [this]() { + if (entry_list[menu_view.highlighted_index()].is_directory) { + load_directory_contents(get_selected_path()); + refresh_list(); + } else + button_rename.focus(); + }; + + button_new_dir.on_select = [this, &nav](Button&) { + name_buffer.clear(); + + text_prompt(nav, name_buffer, max_filename_length, [this](std::string& buffer) { + make_new_directory(current_path.string() + '/' + buffer); + load_directory_contents(current_path); + refresh_list(); + }); + }; + + button_rename.on_select = [this, &nav](Button&) { + name_buffer = entry_list[menu_view.highlighted_index()].entry_path.filename().string().substr(0, max_filename_length); + on_rename(nav); + }; + + button_delete.on_select = [this, &nav](Button&) { + // Use display_modal ? + nav.push<ModalMessageView>("Delete", "Delete " + entry_list[menu_view.highlighted_index()].entry_path.filename().string() + "\nAre you sure?", YESNO, + [this](bool choice) { + if (choice) + on_delete(); + } + ); + }; + } } } diff --git a/firmware/application/apps/ui_sonde.cpp b/firmware/application/apps/ui_sonde.cpp index c08ff6427c930561d7c9bf35298e590bcf2ada90..e61139acdcf74529124248c2790dd7fd72657b98 100644 --- a/firmware/application/apps/ui_sonde.cpp +++ b/firmware/application/apps/ui_sonde.cpp @@ -54,7 +54,7 @@ SondeView::SondeView(NavigationView& nav) { }); field_frequency.set_value(target_frequency_); - field_frequency.set_step(10000); + field_frequency.set_step(500); //euquiq: was 10000, but we are using this for fine-tunning field_frequency.on_change = [this](rf::Frequency f) { set_target_frequency(f); field_frequency.set_value(f); @@ -86,11 +86,11 @@ SondeView::SondeView(NavigationView& nav) { button_see_map.on_select = [this, &nav](Button&) { nav.push<GeoMapView>( - "", - altitude, + sonde_id, + gps_info.alt, GeoPos::alt_unit::METERS, - latitude, - longitude, + gps_info.lat, + gps_info.lon, 999); //set a dummy heading out of range to draw a cross...probably not ideal? }; @@ -113,16 +113,15 @@ void SondeView::on_packet(const sonde::Packet& packet) { //const auto hex_formatted = packet.symbols_formatted(); text_signature.set(packet.type_string()); - text_serial.set(packet.serial_number()); + sonde_id = packet.serial_number(); //used also as tag on the geomap + text_serial.set(sonde_id); text_voltage.set(unit_auto_scale(packet.battery_voltage(), 2, 3) + "V"); + + gps_info = packet.get_GPS_data(); - altitude = packet.GPS_altitude(); - latitude = packet.GPS_latitude(); - longitude = packet.GPS_longitude(); - - geopos.set_altitude(altitude); - geopos.set_lat(latitude); - geopos.set_lon(longitude); + geopos.set_altitude(gps_info.alt); + geopos.set_lat(gps_info.lat); + geopos.set_lon(gps_info.lon); if (logger && logging) { logger->on_packet(packet); diff --git a/firmware/application/apps/ui_sonde.hpp b/firmware/application/apps/ui_sonde.hpp index 5dc7fe86a4a2c17e8fbb593c00fad08a4e01c98b..9e7743b1a8ae0f4af0d14561e7927102bea5d0a6 100644 --- a/firmware/application/apps/ui_sonde.hpp +++ b/firmware/application/apps/ui_sonde.hpp @@ -65,11 +65,10 @@ public: private: std::unique_ptr<SondeLogger> logger { }; - uint32_t target_frequency_ { 402000000 }; + uint32_t target_frequency_ { 402700000 }; bool logging { false }; - int32_t altitude { 0 }; - float latitude { 0 }; - float longitude { 0 }; + sonde::GPS_data gps_info; + std::string sonde_id; Labels labels { { { 0 * 8, 2 * 16 }, "Signature:", Color::light_grey() }, diff --git a/firmware/application/bitmap.hpp b/firmware/application/bitmap.hpp index 1f6828f17f09f46f3b05d5d213e8b6e37349feda..e33913aa2a0f58e53bf5f4750442812a1e632419 100644 --- a/firmware/application/bitmap.hpp +++ b/firmware/application/bitmap.hpp @@ -29,66 +29,6 @@ namespace ui { -static constexpr uint8_t bitmap_bulb_ignore_data[] = { - 0x00, 0x3C, 0x00, - 0x00, 0xC3, 0x00, - 0x80, 0x00, 0x01, - 0x40, 0x3C, 0x02, - 0x20, 0x7E, 0x04, - 0x20, 0xE7, 0x04, - 0x10, 0xC3, 0x08, - 0x10, 0xE3, 0x08, - 0x10, 0x70, 0x08, - 0x10, 0x38, 0x08, - 0x10, 0x18, 0x08, - 0x20, 0x18, 0x04, - 0x20, 0x00, 0x04, - 0x40, 0x18, 0x02, - 0x80, 0x18, 0x01, - 0x00, 0xC3, 0x00, - 0x00, 0xFF, 0x00, - 0x00, 0xBD, 0x00, - 0x00, 0xC3, 0x00, - 0x00, 0xBD, 0x00, - 0x00, 0xC3, 0x00, - 0x00, 0xBD, 0x00, - 0x00, 0x42, 0x00, - 0x00, 0x3C, 0x00, -}; -static constexpr Bitmap bitmap_bulb_ignore { - { 24, 24 }, bitmap_bulb_ignore_data -}; - -static constexpr uint8_t bitmap_bulb_off_data[] = { - 0x00, 0x3C, 0x00, - 0x00, 0xC3, 0x00, - 0x80, 0x00, 0x01, - 0x40, 0x00, 0x02, - 0x20, 0x00, 0x04, - 0x20, 0x00, 0x04, - 0x10, 0x00, 0x08, - 0x10, 0x42, 0x08, - 0x10, 0x42, 0x08, - 0x10, 0x24, 0x08, - 0x10, 0x24, 0x08, - 0x20, 0x24, 0x04, - 0x20, 0x2C, 0x04, - 0x40, 0x34, 0x02, - 0x80, 0x3C, 0x01, - 0x00, 0xFF, 0x00, - 0x00, 0xE3, 0x00, - 0x00, 0xBD, 0x00, - 0x00, 0xC3, 0x00, - 0x00, 0xBD, 0x00, - 0x00, 0xC3, 0x00, - 0x00, 0xBD, 0x00, - 0x00, 0x42, 0x00, - 0x00, 0x3C, 0x00, -}; -static constexpr Bitmap bitmap_bulb_off { - { 24, 24 }, bitmap_bulb_off_data -}; - static constexpr uint8_t bitmap_bulb_on_data[] = { 0x04, 0x3C, 0x20, 0x08, 0xFF, 0x10, @@ -119,290 +59,262 @@ static constexpr Bitmap bitmap_bulb_on { { 24, 24 }, bitmap_bulb_on_data }; -static constexpr uint8_t bitmap_icon_adsb_data[] = { - 0x80, 0x01, - 0xC0, 0x03, - 0xC0, 0x03, - 0xC0, 0x03, - 0xC0, 0x03, +static constexpr uint8_t bitmap_icon_jammer_data[] = { 0xE0, 0x07, 0xF8, 0x1F, - 0xFE, 0x7F, - 0xFF, 0xFF, - 0xFF, 0xFF, - 0xC0, 0x03, - 0xC0, 0x03, - 0xC0, 0x03, - 0xE0, 0x07, - 0xF0, 0x0F, + 0x1C, 0x38, + 0x0E, 0x78, + 0x06, 0x7C, + 0x03, 0xCE, + 0x03, 0xC7, + 0x83, 0xC3, + 0xC3, 0xC1, + 0xE3, 0xC0, + 0x73, 0xC0, + 0x3E, 0x60, + 0x1E, 0x70, + 0x1C, 0x38, 0xF8, 0x1F, + 0xE0, 0x07, }; -static constexpr Bitmap bitmap_icon_adsb { - { 16, 16 }, bitmap_icon_adsb_data +static constexpr Bitmap bitmap_icon_jammer { + { 16, 16 }, bitmap_icon_jammer_data }; -static constexpr uint8_t bitmap_icon_ais_data[] = { - 0x00, 0x01, - 0x80, 0x01, - 0xC0, 0x01, - 0xC0, 0x0D, - 0xE0, 0x3D, - 0xF0, 0x3D, - 0xF8, 0x7D, - 0xFC, 0x7D, - 0xFC, 0x7D, - 0xFE, 0x7D, - 0xFF, 0x7D, - 0x00, 0x00, - 0xF8, 0x7F, - 0xF8, 0x3F, - 0xF0, 0x0F, - 0x00, 0x00, +static constexpr uint8_t bitmap_sig_saw_down_data[] = { + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x0E, 0x80, 0x00, 0x60, + 0x1E, 0x80, 0x01, 0x60, + 0x3E, 0x80, 0x03, 0x60, + 0x76, 0x80, 0x07, 0x60, + 0xE6, 0x80, 0x0F, 0x60, + 0xC6, 0x81, 0x1D, 0x60, + 0x86, 0x83, 0x39, 0x60, + 0x06, 0x87, 0x71, 0x60, + 0x06, 0x8E, 0xE1, 0x60, + 0x06, 0x9C, 0xC1, 0x61, + 0x06, 0xB8, 0x81, 0x63, + 0x06, 0xF0, 0x01, 0x67, + 0x06, 0xE0, 0x01, 0x6E, + 0x06, 0xC0, 0x01, 0x7C, + 0x06, 0x80, 0x01, 0x78, + 0x06, 0x00, 0x01, 0x70, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, }; -static constexpr Bitmap bitmap_icon_ais { - { 16, 16 }, bitmap_icon_ais_data +static constexpr Bitmap bitmap_sig_saw_down { + { 32, 32 }, bitmap_sig_saw_down_data }; -static constexpr uint8_t bitmap_icon_aprs_data[] = { - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0xF0, 0x0F, - 0x4C, 0x32, - 0xFE, 0x7F, - 0x25, 0xA4, - 0x25, 0xA4, - 0xFF, 0xFF, - 0x25, 0xA4, - 0x25, 0xA4, - 0xFE, 0x7F, - 0x4C, 0x32, - 0xF0, 0x0F, - 0x00, 0x00, - 0x00, 0x00, +static constexpr uint8_t bitmap_icon_sdcard_data[] = { + 0xF0, 0x3F, + 0x58, 0x35, + 0x5C, 0x35, + 0xFC, 0x3F, + 0xFC, 0x3F, + 0xFC, 0x3F, + 0xFC, 0x3F, + 0xFC, 0x3F, + 0xFC, 0x3F, + 0xAC, 0x3A, + 0x5C, 0x35, + 0xAC, 0x3A, + 0x5C, 0x35, + 0xAC, 0x3A, + 0x5C, 0x35, + 0xAC, 0x3A, }; -static constexpr Bitmap bitmap_icon_aprs { - { 16, 16 }, bitmap_icon_aprs_data +static constexpr Bitmap bitmap_icon_sdcard { + { 16, 16 }, bitmap_icon_sdcard_data }; -static constexpr uint8_t bitmap_icon_back_data[] = { +static constexpr uint8_t bitmap_icon_morse_data[] = { 0x00, 0x00, + 0xFE, 0x7F, + 0xFF, 0xFF, + 0xBB, 0xD0, + 0xFF, 0xFF, + 0xFF, 0xFF, + 0x0B, 0xE1, + 0xFF, 0xFF, + 0xFF, 0xFF, + 0xEB, 0xD0, + 0xFF, 0xFF, + 0xFE, 0x7F, + 0x70, 0x00, 0x30, 0x00, - 0x38, 0x00, - 0x1C, 0x00, - 0x0E, 0x00, - 0xFF, 0x3F, - 0xFF, 0x7F, - 0x0E, 0xE0, - 0x1C, 0xC0, - 0x38, 0xC0, - 0x30, 0xC0, - 0x00, 0xE0, - 0x00, 0x7F, - 0x00, 0x3F, - 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, }; -static constexpr Bitmap bitmap_icon_back { - { 16, 16 }, bitmap_icon_back_data +static constexpr Bitmap bitmap_icon_morse { + { 16, 16 }, bitmap_icon_morse_data }; -static constexpr uint8_t bitmap_icon_bht_data[] = { - 0x00, 0x00, - 0xE0, 0x07, - 0xF8, 0x08, - 0x9C, 0x07, - 0x0C, 0x00, - 0x8E, 0x0A, - 0x46, 0x12, - 0x26, 0x22, - 0x06, 0x02, - 0x06, 0x00, - 0x06, 0x00, - 0x06, 0x00, - 0x06, 0x00, - 0x06, 0x00, - 0x06, 0x00, - 0x00, 0x00, +static constexpr uint8_t bitmap_icon_peripherals_details_data[] = { + 0x54, 0x01, + 0x54, 0x01, + 0xFF, 0x07, + 0xFC, 0x01, + 0x3F, 0x00, + 0xBC, 0x3F, + 0xBF, 0x60, + 0xBC, 0xEE, + 0xBF, 0x80, + 0x94, 0xBE, + 0x94, 0x80, + 0x80, 0xBE, + 0x80, 0x80, + 0x80, 0xBE, + 0x80, 0x80, + 0x80, 0xFF, }; -static constexpr Bitmap bitmap_icon_bht { - { 16, 16 }, bitmap_icon_bht_data +static constexpr Bitmap bitmap_icon_peripherals_details { + { 16, 16 }, bitmap_icon_peripherals_details_data }; -static constexpr uint8_t bitmap_icon_biast_off_data[] = { - 0x00, 0x00, - 0xFE, 0x7F, - 0x00, 0x04, - 0x00, 0x08, - 0x00, 0x10, - 0x00, 0x08, - 0x88, 0x04, - 0x50, 0x08, - 0x20, 0x10, - 0x50, 0x08, - 0x88, 0x04, - 0x00, 0x08, - 0x00, 0x10, - 0x00, 0x08, - 0x00, 0x04, +static constexpr uint8_t bitmap_icon_tools_antenna_data[] = { + 0x38, 0x3E, + 0x10, 0x22, + 0x10, 0x26, + 0x10, 0x22, + 0x10, 0x2E, + 0x10, 0x22, + 0x10, 0x26, + 0x10, 0x22, + 0x38, 0x2E, + 0x38, 0x22, + 0x38, 0x26, + 0x38, 0x22, + 0x38, 0x2E, + 0x38, 0x22, + 0x38, 0x3E, 0x00, 0x00, }; -static constexpr Bitmap bitmap_icon_biast_off { - { 16, 16 }, bitmap_icon_biast_off_data +static constexpr Bitmap bitmap_icon_tools_antenna { + { 16, 16 }, bitmap_icon_tools_antenna_data }; -static constexpr uint8_t bitmap_icon_biast_on_data[] = { - 0x00, 0x00, - 0xFE, 0x7F, - 0x00, 0x04, - 0x00, 0x08, - 0x20, 0x10, - 0x20, 0x08, - 0x30, 0x04, - 0x30, 0x08, - 0xF8, 0x10, - 0x60, 0x08, - 0x60, 0x04, - 0x20, 0x08, - 0x20, 0x10, - 0x00, 0x08, - 0x00, 0x04, +static constexpr uint8_t bitmap_icon_cwgen_data[] = { + 0x18, 0x00, + 0x24, 0x00, + 0x42, 0x00, + 0x42, 0x00, + 0x42, 0x00, + 0x42, 0x00, + 0x81, 0x00, + 0xAB, 0x6A, + 0x80, 0x40, + 0x00, 0x21, + 0x00, 0x21, + 0x00, 0x21, + 0x00, 0x21, + 0x00, 0x12, + 0x00, 0x0C, 0x00, 0x00, }; -static constexpr Bitmap bitmap_icon_biast_on { - { 16, 16 }, bitmap_icon_biast_on_data -}; - -static constexpr uint8_t bitmap_icon_btle_data[] = { - 0xE0, 0x03, - 0x30, 0x07, - 0x38, 0x0E, - 0x3C, 0x1C, - 0x24, 0x19, - 0x0C, 0x13, - 0x1C, 0x19, - 0x3C, 0x1C, - 0x3C, 0x1C, - 0x1C, 0x19, - 0x0C, 0x13, - 0x24, 0x19, - 0x3C, 0x1C, - 0x38, 0x0E, - 0x30, 0x07, - 0xE0, 0x03, -}; -static constexpr Bitmap bitmap_icon_btle { - { 16, 16 }, bitmap_icon_btle_data +static constexpr Bitmap bitmap_icon_cwgen { + { 16, 16 }, bitmap_icon_cwgen_data }; -static constexpr uint8_t bitmap_icon_burger_data[] = { +static constexpr uint8_t bitmap_icon_bht_data[] = { 0x00, 0x00, 0xE0, 0x07, - 0xF8, 0x1F, - 0xFC, 0x3F, - 0xFE, 0x7F, - 0xFF, 0xFF, - 0xFF, 0xFF, - 0x00, 0x00, - 0x55, 0x55, - 0xAA, 0xAA, - 0x55, 0x55, - 0x00, 0x00, - 0xFF, 0xFF, - 0xFF, 0xFF, - 0xFE, 0x7F, + 0xF8, 0x08, + 0x9C, 0x07, + 0x0C, 0x00, + 0x8E, 0x0A, + 0x46, 0x12, + 0x26, 0x22, + 0x06, 0x02, + 0x06, 0x00, + 0x06, 0x00, + 0x06, 0x00, + 0x06, 0x00, + 0x06, 0x00, + 0x06, 0x00, 0x00, 0x00, }; -static constexpr Bitmap bitmap_icon_burger { - { 16, 16 }, bitmap_icon_burger_data +static constexpr Bitmap bitmap_icon_bht { + { 16, 16 }, bitmap_icon_bht_data }; -static constexpr uint8_t bitmap_icon_camera_data[] = { - 0x00, 0x00, - 0x00, 0x00, - 0xE0, 0x07, - 0xF0, 0x0F, - 0x3E, 0x7C, - 0xDE, 0x7B, - 0xEE, 0x77, - 0xEE, 0x77, - 0xEE, 0x77, - 0xEE, 0x77, - 0xDE, 0x7B, - 0x3E, 0x7C, - 0xFE, 0x7F, - 0x00, 0x00, - 0x00, 0x00, +static constexpr uint8_t bitmap_icon_speaker_mute_data[] = { 0x00, 0x00, + 0x40, 0x00, + 0x60, 0x00, + 0x70, 0x00, + 0x78, 0x00, + 0x7F, 0x22, + 0x7F, 0x36, + 0x7F, 0x1C, + 0x7F, 0x08, + 0x7F, 0x1C, + 0x7F, 0x36, + 0x7F, 0x22, + 0x78, 0x00, + 0x70, 0x00, + 0x60, 0x00, + 0x40, 0x00, }; -static constexpr Bitmap bitmap_icon_camera { - { 16, 16 }, bitmap_icon_camera_data +static constexpr Bitmap bitmap_icon_speaker_mute { + { 16, 16 }, bitmap_icon_speaker_mute_data }; -static constexpr uint8_t bitmap_icon_capture_data[] = { +static constexpr uint8_t bitmap_icon_search_data[] = { + 0xF8, 0x01, + 0xFC, 0x03, + 0x0E, 0x07, + 0x07, 0x0E, + 0x03, 0x0C, + 0x0B, 0x0C, + 0x0B, 0x0C, + 0x13, 0x0C, + 0x07, 0x0E, + 0x0E, 0x07, + 0xFC, 0x1F, + 0xF8, 0x3D, + 0x00, 0x7C, + 0x00, 0xF8, + 0x00, 0xF0, + 0x00, 0x60, +}; +static constexpr Bitmap bitmap_icon_search { + { 16, 16 }, bitmap_icon_search_data +}; + +static constexpr uint8_t bitmap_icon_adsb_data[] = { + 0x80, 0x01, + 0xC0, 0x03, + 0xC0, 0x03, + 0xC0, 0x03, + 0xC0, 0x03, 0xE0, 0x07, 0xF8, 0x1F, - 0xFC, 0x3F, 0xFE, 0x7F, - 0xFE, 0x7F, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, - 0xFF, 0xFF, - 0xFF, 0xFF, - 0xFE, 0x7F, - 0xFE, 0x7F, - 0xFC, 0x3F, - 0xF8, 0x1F, + 0xC0, 0x03, + 0xC0, 0x03, + 0xC0, 0x03, 0xE0, 0x07, + 0xF0, 0x0F, + 0xF8, 0x1F, }; -static constexpr Bitmap bitmap_icon_capture { - { 16, 16 }, bitmap_icon_capture_data -}; - -static constexpr uint8_t bitmap_icon_clk_ext_data[] = { - 0x00, - 0x00, - 0xDC, - 0x54, - 0x54, - 0x54, - 0x54, - 0x76, - 0x00, - 0x10, - 0x38, - 0x7C, - 0x10, - 0x10, - 0x10, - 0x00, -}; -static constexpr Bitmap bitmap_icon_clk_ext { - { 8, 16 }, bitmap_icon_clk_ext_data -}; - -static constexpr uint8_t bitmap_icon_clk_int_data[] = { - 0x00, - 0x00, - 0xDC, - 0x54, - 0x54, - 0x54, - 0x54, - 0x76, - 0x00, - 0x44, - 0x6C, - 0x38, - 0x38, - 0x6C, - 0x44, - 0x00, -}; -static constexpr Bitmap bitmap_icon_clk_int { - { 8, 16 }, bitmap_icon_clk_int_data +static constexpr Bitmap bitmap_icon_adsb { + { 16, 16 }, bitmap_icon_adsb_data }; static constexpr uint8_t bitmap_icon_codetx_data[] = { @@ -427,268 +339,70 @@ static constexpr Bitmap bitmap_icon_codetx { { 16, 16 }, bitmap_icon_codetx_data }; -static constexpr uint8_t bitmap_icon_controls_data[] = { - 0x8C, 0x31, - 0x5A, 0x6B, - 0xDE, 0x7B, - 0x8C, 0x31, - 0x00, 0x00, - 0x8C, 0x31, - 0x5A, 0x7B, - 0xDE, 0x7B, - 0x8C, 0x31, - 0x00, 0x00, - 0x8C, 0x31, - 0xDA, 0x7B, - 0xDE, 0x7B, - 0x8C, 0x31, - 0x00, 0x00, - 0x00, 0x00, -}; -static constexpr Bitmap bitmap_icon_controls { - { 16, 16 }, bitmap_icon_controls_data -}; - -static constexpr uint8_t bitmap_icon_cwgen_data[] = { - 0x18, 0x00, - 0x24, 0x00, - 0x42, 0x00, - 0x42, 0x00, - 0x42, 0x00, - 0x42, 0x00, - 0x81, 0x00, - 0xAB, 0x6A, - 0x80, 0x40, - 0x00, 0x21, - 0x00, 0x21, - 0x00, 0x21, - 0x00, 0x21, - 0x00, 0x12, - 0x00, 0x0C, - 0x00, 0x00, -}; -static constexpr Bitmap bitmap_icon_cwgen { - { 16, 16 }, bitmap_icon_cwgen_data -}; - -static constexpr uint8_t bitmap_icon_debug_data[] = { - 0xFE, 0x03, - 0x02, 0x07, - 0x2A, 0x0D, - 0x52, 0x0F, - 0x2A, 0x08, - 0x52, 0x09, - 0xAA, 0x0A, - 0x52, 0x09, - 0xAA, 0x0A, - 0x52, 0x01, - 0xAA, 0x12, - 0x02, 0x08, - 0x02, 0xFC, - 0x02, 0x08, - 0xFE, 0x13, - 0x00, 0x00, -}; -static constexpr Bitmap bitmap_icon_debug { - { 16, 16 }, bitmap_icon_debug_data -}; - -static constexpr uint8_t bitmap_icon_delete_data[] = { - 0x00, 0x00, - 0x00, 0x00, - 0x0C, 0x30, - 0x1C, 0x38, - 0x38, 0x1C, - 0x70, 0x0E, - 0xE0, 0x07, - 0xC0, 0x03, - 0xC0, 0x03, - 0xE0, 0x07, - 0x70, 0x0E, - 0x38, 0x1C, - 0x1C, 0x38, - 0x0C, 0x30, - 0x00, 0x00, - 0x00, 0x00, +static constexpr uint8_t bitmap_icon_gps_sim_data[] = { + 0xC0, 0x07, + 0xE0, 0x0F, + 0x70, 0x1F, + 0x78, 0x3E, + 0x78, 0x3C, + 0x78, 0x38, + 0x78, 0x30, + 0x78, 0x38, + 0x78, 0x3C, + 0x70, 0x1E, + 0x70, 0x1F, + 0xE0, 0x0F, + 0xC0, 0x07, + 0x80, 0x03, + 0x20, 0x09, + 0x50, 0x14, }; -static constexpr Bitmap bitmap_icon_delete { - { 16, 16 }, bitmap_icon_delete_data +static constexpr Bitmap bitmap_icon_gps_sim { + { 16, 16 }, bitmap_icon_gps_sim_data }; -static constexpr uint8_t bitmap_icon_dir_data[] = { - 0x00, 0x00, - 0x3E, 0x00, - 0x41, 0x00, - 0xC1, 0x7F, - 0xFF, 0xFF, - 0xFF, 0xFF, - 0xFF, 0xFF, - 0xFF, 0xFF, - 0xFF, 0xFF, - 0xFF, 0xFF, - 0xAF, 0xEA, - 0x57, 0xF5, - 0xEF, 0xEF, - 0xF7, 0xF7, - 0xEE, 0x6F, +static constexpr uint8_t bitmap_icon_rename_numeric_data[] = { 0x00, 0x00, -}; -static constexpr Bitmap bitmap_icon_dir { - { 16, 16 }, bitmap_icon_dir_data -}; - -static constexpr uint8_t bitmap_icon_dmr_data[] = { 0x00, 0x00, - 0xFE, 0x1F, - 0xFE, 0x3F, - 0x0E, 0x78, - 0x0E, 0x70, - 0x0E, 0x70, - 0x0E, 0x70, - 0x0E, 0x78, - 0xFE, 0x3F, - 0xFE, 0x1F, - 0x8E, 0x07, - 0x0E, 0x0F, - 0x0E, 0x1E, - 0x0E, 0x3C, - 0x0E, 0x78, + 0x00, 0x0E, + 0x00, 0x04, + 0xFF, 0xF5, + 0x01, 0x84, + 0xC9, 0x85, + 0x0D, 0x85, + 0xC9, 0x85, + 0x49, 0x84, + 0xDD, 0x85, + 0x01, 0x84, + 0xFF, 0xF5, + 0x00, 0x04, + 0x00, 0x0E, 0x00, 0x00, }; -static constexpr Bitmap bitmap_icon_dmr { - { 16, 16 }, bitmap_icon_dmr_data +static constexpr Bitmap bitmap_icon_rename_numeric { + { 16, 16 }, bitmap_icon_rename_numeric_data }; -static constexpr uint8_t bitmap_icon_ert_data[] = { - 0x00, 0x00, - 0x00, 0x0F, - 0x80, 0x7F, - 0xC0, 0x0F, - 0xFC, 0x0F, - 0xC2, 0x0F, - 0x82, 0x7F, - 0x01, 0x0F, - 0x01, 0x00, - 0x21, 0x05, - 0x53, 0x09, - 0x56, 0x09, - 0x50, 0x05, - 0x50, 0x05, - 0x20, 0xAD, +static constexpr uint8_t bitmap_icon_rename_data[] = { 0x00, 0x00, -}; -static constexpr Bitmap bitmap_icon_ert { - { 16, 16 }, bitmap_icon_ert_data -}; - -static constexpr uint8_t bitmap_icon_file_data[] = { - 0xFC, 0x03, - 0x04, 0x06, - 0x04, 0x0E, - 0x04, 0x1E, - 0x04, 0x3E, - 0x04, 0x20, - 0x04, 0x20, - 0x04, 0x20, - 0x04, 0x20, - 0x04, 0x20, - 0x04, 0x20, - 0x04, 0x20, - 0x04, 0x20, - 0x04, 0x20, - 0x04, 0x20, - 0xFC, 0x3F, -}; -static constexpr Bitmap bitmap_icon_file { - { 16, 16 }, bitmap_icon_file_data -}; - -static constexpr uint8_t bitmap_icon_file_image_data[] = { 0x00, 0x00, - 0xFF, 0xFF, - 0x01, 0x80, - 0x01, 0x80, - 0x89, 0x80, - 0xC1, 0x81, - 0xE1, 0xA3, - 0xB1, 0xB3, - 0x89, 0xDC, - 0x07, 0x8C, - 0x01, 0x90, - 0x01, 0x80, - 0xAB, 0x82, - 0xFF, 0xD5, - 0xFF, 0xFF, + 0x00, 0x0E, + 0x00, 0x04, + 0xFF, 0xF5, + 0x01, 0x84, + 0xC9, 0x84, + 0x55, 0x85, + 0xDD, 0x84, + 0x55, 0x85, + 0xD5, 0x84, + 0x01, 0x84, + 0xFF, 0xF5, + 0x00, 0x04, + 0x00, 0x0E, 0x00, 0x00, }; -static constexpr Bitmap bitmap_icon_file_image { - { 16, 16 }, bitmap_icon_file_image_data -}; - -static constexpr uint8_t bitmap_icon_file_iq_data[] = { - 0xFC, 0x03, - 0x04, 0x06, - 0x04, 0x0E, - 0x04, 0x1E, - 0x04, 0x3E, - 0x04, 0x20, - 0x04, 0x20, - 0x04, 0x21, - 0x44, 0x25, - 0x54, 0x25, - 0xF4, 0x2F, - 0xA4, 0x2A, - 0x84, 0x22, - 0x04, 0x22, - 0x04, 0x20, - 0xFC, 0x3F, -}; -static constexpr Bitmap bitmap_icon_file_iq { - { 16, 16 }, bitmap_icon_file_iq_data -}; - -static constexpr uint8_t bitmap_icon_file_text_data[] = { - 0xFC, 0x03, - 0x04, 0x06, - 0x04, 0x0E, - 0x04, 0x1E, - 0xF4, 0x3E, - 0x04, 0x20, - 0xF4, 0x2F, - 0x04, 0x20, - 0xF4, 0x2F, - 0x04, 0x20, - 0xF4, 0x2F, - 0x04, 0x20, - 0xF4, 0x2F, - 0x04, 0x20, - 0x04, 0x20, - 0xFC, 0x3F, -}; -static constexpr Bitmap bitmap_icon_file_text { - { 16, 16 }, bitmap_icon_file_text_data -}; - -static constexpr uint8_t bitmap_icon_file_wav_data[] = { - 0xFC, 0x03, - 0x04, 0x06, - 0x04, 0x0E, - 0x04, 0x1E, - 0x04, 0x3E, - 0x84, 0x20, - 0xC4, 0x22, - 0xF4, 0x20, - 0xF4, 0x2E, - 0xF4, 0x20, - 0xC4, 0x22, - 0x84, 0x24, - 0x04, 0x28, - 0x04, 0x20, - 0x04, 0x20, - 0xFC, 0x3F, -}; -static constexpr Bitmap bitmap_icon_file_wav { - { 16, 16 }, bitmap_icon_file_wav_data +static constexpr Bitmap bitmap_icon_rename { + { 16, 16 }, bitmap_icon_rename_data }; static constexpr uint8_t bitmap_icon_fox_data[] = { @@ -709,162 +423,82 @@ static constexpr uint8_t bitmap_icon_fox_data[] = { 0x80, 0x01, 0x00, 0x00, }; -static constexpr Bitmap bitmap_icon_fox { - { 16, 16 }, bitmap_icon_fox_data -}; - -static constexpr uint8_t bitmap_icon_freqman_data[] = { - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x7E, 0x7E, - 0x81, 0x81, - 0xBD, 0xBD, - 0x81, 0x81, - 0xBD, 0xBD, - 0x81, 0x81, - 0xBD, 0x9D, - 0x81, 0x81, - 0xBD, 0xE1, - 0x81, 0x61, - 0x7E, 0x3E, - 0x00, 0x00, - 0x00, 0x00, -}; -static constexpr Bitmap bitmap_icon_freqman { - { 16, 16 }, bitmap_icon_freqman_data -}; - -static constexpr uint8_t bitmap_icon_gps_sim_data[] = { - 0xC0, 0x07, - 0xE0, 0x0F, - 0x70, 0x1F, - 0x78, 0x3E, - 0x78, 0x3C, - 0x78, 0x38, - 0x78, 0x30, - 0x78, 0x38, - 0x78, 0x3C, - 0x70, 0x1E, - 0x70, 0x1F, - 0xE0, 0x0F, - 0xC0, 0x07, - 0x80, 0x03, - 0x20, 0x09, - 0x50, 0x14, -}; -static constexpr Bitmap bitmap_icon_gps_sim { - { 16, 16 }, bitmap_icon_gps_sim_data -}; - -static constexpr uint8_t bitmap_icon_hackrf_data[] = { - 0xF0, 0x0F, - 0x10, 0x08, - 0x50, 0x0A, - 0x10, 0x08, - 0x10, 0x08, - 0x10, 0x08, - 0xF8, 0x1F, - 0xF8, 0x1F, - 0xF8, 0x1F, - 0xF8, 0x1F, - 0xF8, 0x1F, - 0xF8, 0x1F, - 0xF8, 0x1F, - 0xF0, 0x0F, - 0x80, 0x01, - 0x80, 0x01, -}; -static constexpr Bitmap bitmap_icon_hackrf { - { 16, 16 }, bitmap_icon_hackrf_data -}; - -static constexpr uint8_t bitmap_icon_jammer_data[] = { - 0xE0, 0x07, - 0xF8, 0x1F, - 0x1C, 0x38, - 0x0E, 0x78, - 0x06, 0x7C, - 0x03, 0xCE, - 0x03, 0xC7, - 0x83, 0xC3, - 0xC3, 0xC1, - 0xE3, 0xC0, - 0x73, 0xC0, - 0x3E, 0x60, - 0x1E, 0x70, - 0x1C, 0x38, - 0xF8, 0x1F, - 0xE0, 0x07, -}; -static constexpr Bitmap bitmap_icon_jammer { - { 16, 16 }, bitmap_icon_jammer_data -}; - -static constexpr uint8_t bitmap_icon_keyfob_data[] = { - 0x30, 0x00, - 0x30, 0x00, - 0x30, 0x00, - 0x30, 0x00, - 0x30, 0x00, - 0x30, 0x00, - 0xFC, 0x00, - 0xCE, 0x01, - 0x86, 0x01, - 0xFE, 0x01, - 0x86, 0x31, - 0x86, 0x49, - 0xCE, 0x87, - 0xFC, 0x84, - 0xFC, 0x4B, - 0x78, 0x30, -}; -static constexpr Bitmap bitmap_icon_keyfob { - { 16, 16 }, bitmap_icon_keyfob_data -}; - -static constexpr uint8_t bitmap_icon_lcr_data[] = { - 0x0C, 0x00, - 0xFF, 0x7F, - 0x01, 0x80, - 0xC1, 0x9B, - 0xFF, 0x7F, - 0x0C, 0x00, - 0xFF, 0x7F, - 0x01, 0x80, - 0xC1, 0x9D, - 0xFF, 0x7F, - 0x0C, 0x00, - 0x0C, 0x00, - 0x0C, 0x00, - 0x0C, 0x00, - 0x0C, 0x00, - 0x0C, 0x00, -}; -static constexpr Bitmap bitmap_icon_lcr { - { 16, 16 }, bitmap_icon_lcr_data +static constexpr Bitmap bitmap_icon_fox { + { 16, 16 }, bitmap_icon_fox_data }; -static constexpr uint8_t bitmap_icon_lge_data[] = { +static constexpr uint8_t bitmap_sd_card_ok_data[] = { 0x00, 0x00, - 0x80, 0x00, - 0xA4, 0x12, - 0xA8, 0x0A, - 0xD0, 0x05, - 0xEC, 0x1B, - 0xF0, 0x07, - 0xFE, 0xFF, - 0xF0, 0x07, - 0xEC, 0x1B, - 0xD0, 0x05, - 0xA8, 0x0A, - 0xA4, 0x12, - 0x80, 0x00, + 0x00, 0x00, + 0xC0, 0x1F, + 0xE0, 0x1F, + 0xF0, 0x1F, + 0xF8, 0x1F, + 0xF8, 0x1F, + 0x98, 0x15, + 0x68, 0x19, + 0x68, 0x1D, + 0x68, 0x19, + 0x98, 0x15, + 0xF8, 0x1F, + 0xF8, 0x1F, 0x00, 0x00, 0x00, 0x00, }; -static constexpr Bitmap bitmap_icon_lge { - { 16, 16 }, bitmap_icon_lge_data +static constexpr Bitmap bitmap_sd_card_ok { + { 16, 16 }, bitmap_sd_card_ok_data +}; + +static constexpr uint8_t bitmap_bulb_ignore_data[] = { + 0x00, 0x3C, 0x00, + 0x00, 0xC3, 0x00, + 0x80, 0x00, 0x01, + 0x40, 0x3C, 0x02, + 0x20, 0x7E, 0x04, + 0x20, 0xE7, 0x04, + 0x10, 0xC3, 0x08, + 0x10, 0xE3, 0x08, + 0x10, 0x70, 0x08, + 0x10, 0x38, 0x08, + 0x10, 0x18, 0x08, + 0x20, 0x18, 0x04, + 0x20, 0x00, 0x04, + 0x40, 0x18, 0x02, + 0x80, 0x18, 0x01, + 0x00, 0xC3, 0x00, + 0x00, 0xFF, 0x00, + 0x00, 0xBD, 0x00, + 0x00, 0xC3, 0x00, + 0x00, 0xBD, 0x00, + 0x00, 0xC3, 0x00, + 0x00, 0xBD, 0x00, + 0x00, 0x42, 0x00, + 0x00, 0x3C, 0x00, +}; +static constexpr Bitmap bitmap_bulb_ignore { + { 24, 24 }, bitmap_bulb_ignore_data +}; + +static constexpr uint8_t bitmap_icon_clk_ext_data[] = { + 0x00, + 0x00, + 0xDC, + 0x54, + 0x54, + 0x54, + 0x54, + 0x76, + 0x00, + 0x10, + 0x38, + 0x7C, + 0x10, + 0x10, + 0x10, + 0x00, +}; +static constexpr Bitmap bitmap_icon_clk_ext { + { 8, 16 }, bitmap_icon_clk_ext_data }; static constexpr uint8_t bitmap_icon_load_data[] = { @@ -889,290 +523,180 @@ static constexpr Bitmap bitmap_icon_load { { 16, 16 }, bitmap_icon_load_data }; -static constexpr uint8_t bitmap_icon_lora_data[] = { - 0xC0, 0x03, - 0x30, 0x0C, - 0x00, 0x00, - 0xC0, 0x03, - 0x00, 0x00, - 0xC0, 0x03, - 0x60, 0x06, - 0x60, 0x06, - 0x60, 0x06, - 0x60, 0x06, - 0xC0, 0x03, - 0x00, 0x00, - 0xC0, 0x03, - 0x00, 0x00, - 0x30, 0x0C, - 0xC0, 0x03, -}; -static constexpr Bitmap bitmap_icon_lora { - { 16, 16 }, bitmap_icon_lora_data -}; - -static constexpr uint8_t bitmap_icon_memory_data[] = { - 0x54, 0x15, - 0x54, 0x15, - 0xFF, 0x7F, - 0xFC, 0x1F, - 0xFF, 0x7F, - 0xCC, 0x19, - 0xAF, 0x7A, - 0x6C, 0x1B, - 0xEF, 0x7B, - 0xEC, 0x1B, - 0xFF, 0x7F, - 0xFC, 0x1F, - 0xFF, 0x7F, - 0x54, 0x15, - 0x54, 0x15, - 0x00, 0x00, -}; -static constexpr Bitmap bitmap_icon_memory { - { 16, 16 }, bitmap_icon_memory_data -}; - -static constexpr uint8_t bitmap_icon_microphone_data[] = { - 0xC0, 0x03, - 0xE0, 0x07, - 0xE0, 0x07, - 0xE0, 0x07, - 0xE8, 0x17, - 0xE8, 0x17, - 0xE8, 0x17, - 0xE8, 0x17, - 0xE8, 0x17, - 0xC8, 0x13, - 0x18, 0x18, +static constexpr uint8_t bitmap_icon_hackrf_data[] = { + 0xF0, 0x0F, + 0x10, 0x08, + 0x50, 0x0A, + 0x10, 0x08, + 0x10, 0x08, + 0x10, 0x08, + 0xF8, 0x1F, + 0xF8, 0x1F, + 0xF8, 0x1F, + 0xF8, 0x1F, + 0xF8, 0x1F, + 0xF8, 0x1F, + 0xF8, 0x1F, 0xF0, 0x0F, - 0xC0, 0x03, 0x80, 0x01, 0x80, 0x01, - 0xE0, 0x07, -}; -static constexpr Bitmap bitmap_icon_microphone { - { 16, 16 }, bitmap_icon_microphone_data -}; - -static constexpr uint8_t bitmap_icon_modem_data[] = { - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0xF8, 0x1F, - 0x04, 0x20, - 0x02, 0x40, - 0xFF, 0xFF, - 0xFF, 0xFF, - 0xAB, 0xDF, - 0xAB, 0xDF, - 0xFF, 0xFF, - 0xFF, 0xFF, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, -}; -static constexpr Bitmap bitmap_icon_modem { - { 16, 16 }, bitmap_icon_modem_data -}; - -static constexpr uint8_t bitmap_icon_morse_data[] = { - 0x00, 0x00, - 0xFE, 0x7F, - 0xFF, 0xFF, - 0xBB, 0xD0, - 0xFF, 0xFF, - 0xFF, 0xFF, - 0x0B, 0xE1, - 0xFF, 0xFF, - 0xFF, 0xFF, - 0xEB, 0xD0, - 0xFF, 0xFF, - 0xFE, 0x7F, - 0x70, 0x00, - 0x30, 0x00, - 0x10, 0x00, - 0x00, 0x00, -}; -static constexpr Bitmap bitmap_icon_morse { - { 16, 16 }, bitmap_icon_morse_data -}; - -static constexpr uint8_t bitmap_icon_new_category_data[] = { - 0x00, 0x18, - 0x3E, 0x18, - 0x41, 0x7E, - 0xC1, 0x7E, - 0xFF, 0x18, - 0xFF, 0xDB, - 0xFF, 0xC3, - 0xFF, 0xFF, - 0xFF, 0xFF, - 0xFF, 0xFF, - 0xAF, 0xEA, - 0x57, 0xF5, - 0xEF, 0xEF, - 0xF7, 0xF7, - 0xEE, 0x6F, - 0x00, 0x00, }; -static constexpr Bitmap bitmap_icon_new_category { - { 16, 16 }, bitmap_icon_new_category_data +static constexpr Bitmap bitmap_icon_hackrf { + { 16, 16 }, bitmap_icon_hackrf_data }; -static constexpr uint8_t bitmap_icon_notepad_data[] = { - 0x0C, 0x00, - 0x1E, 0x00, - 0x2F, 0x00, - 0x47, 0x00, - 0xE2, 0x00, - 0xD4, 0x01, - 0xB8, 0x03, - 0x70, 0x07, - 0xE0, 0x0E, - 0xC0, 0x1D, - 0x80, 0x3B, - 0x00, 0x4F, - 0x00, 0x46, - 0x00, 0x84, - 0x00, 0xD8, - 0x00, 0xE0, +static constexpr uint8_t bitmap_icon_soundboard_data[] = { + 0xF0, 0x0F, + 0x1C, 0x18, + 0x17, 0x38, + 0x15, 0x78, + 0x15, 0xF8, + 0x15, 0x82, + 0x15, 0x8B, + 0xD5, 0x83, + 0xD5, 0xBB, + 0xD5, 0x83, + 0x15, 0x8B, + 0x15, 0x92, + 0x15, 0xA0, + 0x17, 0x80, + 0x1C, 0x80, + 0xF0, 0xFF, }; -static constexpr Bitmap bitmap_icon_notepad { - { 16, 16 }, bitmap_icon_notepad_data +static constexpr Bitmap bitmap_icon_soundboard { + { 16, 16 }, bitmap_icon_soundboard_data }; -static constexpr uint8_t bitmap_icon_nrf_data[] = { - 0x00, 0x01, - 0x00, 0x01, - 0x00, 0x01, - 0x00, 0x01, - 0x00, 0x01, - 0x00, 0x01, - 0x00, 0x01, - 0xF8, 0x3F, - 0xFC, 0x7F, - 0xFC, 0x7F, - 0xDC, 0x7F, - 0x8C, 0x6B, - 0xDC, 0x7F, - 0xFC, 0x7F, - 0xFC, 0x7F, - 0xF8, 0x3F, +static constexpr uint8_t bitmap_icon_dmr_data[] = { + 0x00, 0x00, + 0xFE, 0x1F, + 0xFE, 0x3F, + 0x0E, 0x78, + 0x0E, 0x70, + 0x0E, 0x70, + 0x0E, 0x70, + 0x0E, 0x78, + 0xFE, 0x3F, + 0xFE, 0x1F, + 0x8E, 0x07, + 0x0E, 0x0F, + 0x0E, 0x1E, + 0x0E, 0x3C, + 0x0E, 0x78, + 0x00, 0x00, }; -static constexpr Bitmap bitmap_icon_nrf { - { 16, 16 }, bitmap_icon_nrf_data +static constexpr Bitmap bitmap_icon_dmr { + { 16, 16 }, bitmap_icon_dmr_data }; -static constexpr uint8_t bitmap_icon_nuoptix_data[] = { - 0x80, 0x01, - 0x80, 0x01, - 0x40, 0x02, - 0x40, 0x1A, - 0x40, 0x1A, - 0x20, 0x0C, - 0x20, 0x0F, - 0x20, 0x1E, - 0x10, 0x0E, - 0x10, 0x0B, - 0x10, 0x0B, - 0xF8, 0x1F, - 0xF8, 0x1F, +static constexpr uint8_t bitmap_icon_burger_data[] = { + 0x00, 0x00, + 0xE0, 0x07, 0xF8, 0x1F, 0xFC, 0x3F, - 0xFC, 0x3F, + 0xFE, 0x7F, + 0xFF, 0xFF, + 0xFF, 0xFF, + 0x00, 0x00, + 0x55, 0x55, + 0xAA, 0xAA, + 0x55, 0x55, + 0x00, 0x00, + 0xFF, 0xFF, + 0xFF, 0xFF, + 0xFE, 0x7F, + 0x00, 0x00, }; -static constexpr Bitmap bitmap_icon_nuoptix { - { 16, 16 }, bitmap_icon_nuoptix_data +static constexpr Bitmap bitmap_icon_burger { + { 16, 16 }, bitmap_icon_burger_data }; -static constexpr uint8_t bitmap_icon_options_datetime_data[] = { - 0x0C, 0x06, - 0xFF, 0x1F, - 0x49, 0x12, - 0x49, 0x12, - 0xFF, 0x1F, - 0x49, 0x00, - 0x49, 0x1C, - 0x7F, 0x63, - 0x09, 0x49, - 0x89, 0x88, - 0xBE, 0xB8, - 0x80, 0x80, - 0x00, 0x41, - 0x00, 0x63, - 0x00, 0x1C, - 0x00, 0x00, +static constexpr uint8_t bitmap_icon_microphone_data[] = { + 0xC0, 0x03, + 0xE0, 0x07, + 0xE0, 0x07, + 0xE0, 0x07, + 0xE8, 0x17, + 0xE8, 0x17, + 0xE8, 0x17, + 0xE8, 0x17, + 0xE8, 0x17, + 0xC8, 0x13, + 0x18, 0x18, + 0xF0, 0x0F, + 0xC0, 0x03, + 0x80, 0x01, + 0x80, 0x01, + 0xE0, 0x07, }; -static constexpr Bitmap bitmap_icon_options_datetime { - { 16, 16 }, bitmap_icon_options_datetime_data +static constexpr Bitmap bitmap_icon_microphone { + { 16, 16 }, bitmap_icon_microphone_data }; -static constexpr uint8_t bitmap_icon_options_radio_data[] = { - 0x00, 0x00, +static constexpr uint8_t bitmap_icon_ais_data[] = { + 0x00, 0x01, + 0x80, 0x01, + 0xC0, 0x01, + 0xC0, 0x0D, + 0xE0, 0x3D, + 0xF0, 0x3D, + 0xF8, 0x7D, + 0xFC, 0x7D, + 0xFC, 0x7D, + 0xFE, 0x7D, + 0xFF, 0x7D, 0x00, 0x00, - 0x04, 0x20, - 0x12, 0x48, - 0x8A, 0x51, - 0xCA, 0x53, - 0xCA, 0x53, - 0x8A, 0x51, - 0x12, 0x48, - 0x84, 0x21, - 0xC0, 0x03, - 0x40, 0x02, - 0x60, 0x06, - 0x20, 0x04, - 0x30, 0x0C, + 0xF8, 0x7F, + 0xF8, 0x3F, 0xF0, 0x0F, + 0x00, 0x00, }; -static constexpr Bitmap bitmap_icon_options_radio { - { 16, 16 }, bitmap_icon_options_radio_data +static constexpr Bitmap bitmap_icon_ais { + { 16, 16 }, bitmap_icon_ais_data }; -static constexpr uint8_t bitmap_icon_options_touch_data[] = { - 0xC7, 0xF1, - 0x97, 0xF4, - 0x27, 0xF2, - 0x8F, 0xF8, - 0x5F, 0xFD, - 0x47, 0xFD, - 0x53, 0xC1, - 0x4B, 0x9F, - 0x43, 0xB5, - 0x6F, 0xA0, - 0x2F, 0xA0, - 0x20, 0x20, - 0x60, 0x20, - 0x40, 0x10, - 0xC0, 0x1F, +static constexpr uint8_t bitmap_icon_utilities_data[] = { + 0x30, 0x24, + 0x78, 0x66, + 0x78, 0x66, + 0x78, 0x7E, + 0x78, 0x3C, + 0x78, 0x18, + 0x78, 0x18, + 0x30, 0x3C, + 0x30, 0x3C, + 0x30, 0x3C, + 0x30, 0x3C, + 0x30, 0x3C, + 0x30, 0x3C, + 0x30, 0x3C, + 0x30, 0x18, 0x00, 0x00, }; -static constexpr Bitmap bitmap_icon_options_touch { - { 16, 16 }, bitmap_icon_options_touch_data +static constexpr Bitmap bitmap_icon_utilities { + { 16, 16 }, bitmap_icon_utilities_data }; -static constexpr uint8_t bitmap_icon_options_ui_data[] = { - 0xFF, 0x1F, - 0xFF, 0x13, - 0xFF, 0x1F, - 0x01, 0x10, - 0x01, 0x10, - 0x01, 0x10, - 0x01, 0x04, - 0x01, 0x0C, - 0x01, 0x1C, - 0x01, 0x3C, - 0xFF, 0x7D, - 0x00, 0xFC, - 0x00, 0x34, - 0x00, 0x20, - 0x00, 0x60, +static constexpr uint8_t bitmap_icon_delete_data[] = { + 0x00, 0x00, + 0x00, 0x00, + 0x0C, 0x30, + 0x1C, 0x38, + 0x38, 0x1C, + 0x70, 0x0E, + 0xE0, 0x07, + 0xC0, 0x03, + 0xC0, 0x03, + 0xE0, 0x07, + 0x70, 0x0E, + 0x38, 0x1C, + 0x1C, 0x38, + 0x0C, 0x30, + 0x00, 0x00, 0x00, 0x00, }; -static constexpr Bitmap bitmap_icon_options_ui { - { 16, 16 }, bitmap_icon_options_ui_data +static constexpr Bitmap bitmap_icon_delete { + { 16, 16 }, bitmap_icon_delete_data }; static constexpr uint8_t bitmap_icon_peripherals_data[] = { @@ -1197,48 +721,48 @@ static constexpr Bitmap bitmap_icon_peripherals { { 16, 16 }, bitmap_icon_peripherals_data }; -static constexpr uint8_t bitmap_icon_peripherals_details_data[] = { - 0x54, 0x01, - 0x54, 0x01, - 0xFF, 0x07, - 0xFC, 0x01, - 0x3F, 0x00, - 0xBC, 0x3F, - 0xBF, 0x60, - 0xBC, 0xEE, - 0xBF, 0x80, - 0x94, 0xBE, - 0x94, 0x80, - 0x80, 0xBE, - 0x80, 0x80, - 0x80, 0xBE, - 0x80, 0x80, - 0x80, 0xFF, +static constexpr uint8_t bitmap_icon_file_data[] = { + 0xFC, 0x03, + 0x04, 0x06, + 0x04, 0x0E, + 0x04, 0x1E, + 0x04, 0x3E, + 0x04, 0x20, + 0x04, 0x20, + 0x04, 0x20, + 0x04, 0x20, + 0x04, 0x20, + 0x04, 0x20, + 0x04, 0x20, + 0x04, 0x20, + 0x04, 0x20, + 0x04, 0x20, + 0xFC, 0x3F, }; -static constexpr Bitmap bitmap_icon_peripherals_details { - { 16, 16 }, bitmap_icon_peripherals_details_data +static constexpr Bitmap bitmap_icon_file { + { 16, 16 }, bitmap_icon_file_data }; -static constexpr uint8_t bitmap_icon_pocsag_data[] = { - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0xFC, 0x3F, - 0xFE, 0x7F, - 0x02, 0x40, - 0xBA, 0x45, - 0x02, 0x40, - 0xFE, 0x7F, - 0xFE, 0x7F, - 0x92, 0x7C, - 0x92, 0x7C, - 0xFC, 0x3F, - 0x00, 0x00, - 0x00, 0x00, +static constexpr uint8_t bitmap_icon_debug_data[] = { + 0xFE, 0x03, + 0x02, 0x07, + 0x2A, 0x0D, + 0x52, 0x0F, + 0x2A, 0x08, + 0x52, 0x09, + 0xAA, 0x0A, + 0x52, 0x09, + 0xAA, 0x0A, + 0x52, 0x01, + 0xAA, 0x12, + 0x02, 0x08, + 0x02, 0xFC, + 0x02, 0x08, + 0xFE, 0x13, 0x00, 0x00, }; -static constexpr Bitmap bitmap_icon_pocsag { - { 16, 16 }, bitmap_icon_pocsag_data +static constexpr Bitmap bitmap_icon_debug { + { 16, 16 }, bitmap_icon_debug_data }; static constexpr uint8_t bitmap_icon_previous_data[] = { @@ -1263,158 +787,204 @@ static constexpr Bitmap bitmap_icon_previous { { 16, 16 }, bitmap_icon_previous_data }; -static constexpr uint8_t bitmap_icon_rds_data[] = { - 0x00, 0x00, +static constexpr uint8_t bitmap_icon_freqman_data[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3C, 0x3C, 0x7E, 0x7E, - 0x67, 0xE7, - 0x83, 0xC3, - 0xC7, 0xE1, - 0xFD, 0xBC, - 0x42, 0x42, - 0x3C, 0x3C, - 0x00, 0x00, - 0x00, 0x00, + 0x81, 0x81, + 0xBD, 0xBD, + 0x81, 0x81, + 0xBD, 0xBD, + 0x81, 0x81, + 0xBD, 0x9D, + 0x81, 0x81, + 0xBD, 0xE1, + 0x81, 0x61, + 0x7E, 0x3E, 0x00, 0x00, 0x00, 0x00, }; -static constexpr Bitmap bitmap_icon_rds { - { 16, 16 }, bitmap_icon_rds_data +static constexpr Bitmap bitmap_icon_freqman { + { 16, 16 }, bitmap_icon_freqman_data }; -static constexpr uint8_t bitmap_icon_receivers_data[] = { - 0x80, 0x01, - 0x80, 0x01, - 0x80, 0x01, - 0x80, 0x01, - 0x80, 0x01, - 0x80, 0x01, - 0x80, 0x01, - 0x80, 0x01, - 0x98, 0x19, - 0xB0, 0x0D, - 0xE0, 0x07, - 0xC0, 0x03, - 0x83, 0xC1, - 0x03, 0xC0, +static constexpr uint8_t bitmap_stop_data[] = { 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, + 0xFF, 0xFF, + 0xFF, 0xFF, + 0x8B, 0xCD, + 0xDD, 0xAA, + 0xDB, 0xCA, + 0xDB, 0xEA, + 0xDD, 0xED, + 0xFF, 0xFF, + 0xFF, 0xFF, + 0xFF, 0xFF, + 0xFF, 0xFF, + 0xFF, 0xFF, + 0x00, 0x00, }; -static constexpr Bitmap bitmap_icon_receivers { - { 16, 16 }, bitmap_icon_receivers_data -}; - -static constexpr uint8_t bitmap_icon_remote_data[] = { - 0x20, 0x00, - 0x20, 0x00, - 0x20, 0x00, - 0x20, 0x00, - 0xE0, 0x07, - 0xF0, 0x0F, - 0x30, 0x0C, - 0x30, 0x0C, - 0xF0, 0x0F, - 0xF0, 0x0F, - 0x70, 0x0D, - 0xB0, 0x0E, - 0x70, 0x0D, - 0xB0, 0x0E, - 0xF0, 0x0F, - 0xE0, 0x07, -}; -static constexpr Bitmap bitmap_icon_remote { - { 16, 16 }, bitmap_icon_remote_data +static constexpr Bitmap bitmap_stop { + { 16, 16 }, bitmap_stop_data }; -static constexpr uint8_t bitmap_icon_rename_data[] = { - 0x00, 0x00, +static constexpr uint8_t bitmap_icon_biast_off_data[] = { 0x00, 0x00, - 0x00, 0x0E, + 0xFE, 0x7F, 0x00, 0x04, - 0xFF, 0xF5, - 0x01, 0x84, - 0xC9, 0x84, - 0x55, 0x85, - 0xDD, 0x84, - 0x55, 0x85, - 0xD5, 0x84, - 0x01, 0x84, - 0xFF, 0xF5, + 0x00, 0x08, + 0x00, 0x10, + 0x00, 0x08, + 0x88, 0x04, + 0x50, 0x08, + 0x20, 0x10, + 0x50, 0x08, + 0x88, 0x04, + 0x00, 0x08, + 0x00, 0x10, + 0x00, 0x08, 0x00, 0x04, - 0x00, 0x0E, 0x00, 0x00, }; -static constexpr Bitmap bitmap_icon_rename { - { 16, 16 }, bitmap_icon_rename_data +static constexpr Bitmap bitmap_icon_biast_off { + { 16, 16 }, bitmap_icon_biast_off_data }; -static constexpr uint8_t bitmap_icon_rename_numeric_data[] = { - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x0E, - 0x00, 0x04, - 0xFF, 0xF5, - 0x01, 0x84, - 0xC9, 0x85, - 0x0D, 0x85, - 0xC9, 0x85, - 0x49, 0x84, - 0xDD, 0x85, - 0x01, 0x84, - 0xFF, 0xF5, - 0x00, 0x04, - 0x00, 0x0E, +static constexpr uint8_t bitmap_tab_edge_data[] = { + 0x00, + 0x01, + 0x01, + 0x03, + 0x03, + 0x03, + 0x07, + 0x07, + 0x07, + 0x0F, + 0x0F, + 0x0F, + 0x1F, + 0x1F, + 0x1F, + 0x1F, + 0x3F, + 0x3F, + 0x3F, + 0x7F, + 0x7F, + 0x7F, + 0xFF, + 0xFF, +}; +static constexpr Bitmap bitmap_tab_edge { + { 8, 24 }, bitmap_tab_edge_data +}; + +static constexpr uint8_t bitmap_sig_square_data[] = { + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0xFE, 0x83, 0xFF, 0x60, + 0xFE, 0x83, 0xFF, 0x60, + 0x06, 0x83, 0xC1, 0x60, + 0x06, 0x83, 0xC1, 0x60, + 0x06, 0x83, 0xC1, 0x60, + 0x06, 0x83, 0xC1, 0x60, + 0x06, 0x83, 0xC1, 0x60, + 0x06, 0x83, 0xC1, 0x60, + 0x06, 0x83, 0xC1, 0x60, + 0x06, 0x83, 0xC1, 0x60, + 0x06, 0x83, 0xC1, 0x60, + 0x06, 0x83, 0xC1, 0x60, + 0x06, 0x83, 0xC1, 0x60, + 0x06, 0x83, 0xC1, 0x60, + 0x06, 0xFF, 0xC1, 0x7F, + 0x06, 0xFF, 0xC1, 0x7F, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, +}; +static constexpr Bitmap bitmap_sig_square { + { 32, 32 }, bitmap_sig_square_data +}; + +static constexpr uint8_t bitmap_icon_new_category_data[] = { + 0x00, 0x18, + 0x3E, 0x18, + 0x41, 0x7E, + 0xC1, 0x7E, + 0xFF, 0x18, + 0xFF, 0xDB, + 0xFF, 0xC3, + 0xFF, 0xFF, + 0xFF, 0xFF, + 0xFF, 0xFF, + 0xAF, 0xEA, + 0x57, 0xF5, + 0xEF, 0xEF, + 0xF7, 0xF7, + 0xEE, 0x6F, 0x00, 0x00, }; -static constexpr Bitmap bitmap_icon_rename_numeric { - { 16, 16 }, bitmap_icon_rename_numeric_data +static constexpr Bitmap bitmap_icon_new_category { + { 16, 16 }, bitmap_icon_new_category_data }; -static constexpr uint8_t bitmap_icon_replay_data[] = { +static constexpr uint8_t bitmap_icon_lcr_data[] = { + 0x0C, 0x00, + 0xFF, 0x7F, + 0x01, 0x80, + 0xC1, 0x9B, + 0xFF, 0x7F, + 0x0C, 0x00, + 0xFF, 0x7F, + 0x01, 0x80, + 0xC1, 0x9D, + 0xFF, 0x7F, + 0x0C, 0x00, + 0x0C, 0x00, + 0x0C, 0x00, + 0x0C, 0x00, + 0x0C, 0x00, + 0x0C, 0x00, +}; +static constexpr Bitmap bitmap_icon_lcr { + { 16, 16 }, bitmap_icon_lcr_data +}; + +static constexpr uint8_t bitmap_icon_pocsag_data[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0C, 0x00, - 0x3C, 0x00, - 0xFC, 0x00, - 0xFC, 0x03, - 0xFC, 0x0F, 0xFC, 0x3F, + 0xFE, 0x7F, + 0x02, 0x40, + 0xBA, 0x45, + 0x02, 0x40, + 0xFE, 0x7F, + 0xFE, 0x7F, + 0x92, 0x7C, + 0x92, 0x7C, 0xFC, 0x3F, - 0xFC, 0x0F, - 0xFC, 0x03, - 0xFC, 0x00, - 0x3C, 0x00, - 0x0C, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -static constexpr Bitmap bitmap_icon_replay { - { 16, 16 }, bitmap_icon_replay_data -}; - -static constexpr uint8_t bitmap_icon_save_data[] = { - 0x00, 0x01, - 0x00, 0x01, - 0x00, 0x01, - 0x00, 0x01, - 0x4E, 0x05, - 0x91, 0x03, - 0x3F, 0x19, - 0x01, 0x20, - 0xF9, 0xFF, - 0xF9, 0xFF, - 0xFD, 0x7F, - 0xFD, 0x7F, - 0xFF, 0x3F, - 0xFF, 0x3F, - 0xFF, 0x1F, - 0xFF, 0x1F, -}; -static constexpr Bitmap bitmap_icon_save { - { 16, 16 }, bitmap_icon_save_data +static constexpr Bitmap bitmap_icon_pocsag { + { 16, 16 }, bitmap_icon_pocsag_data }; static constexpr uint8_t bitmap_icon_scanner_data[] = { @@ -1439,180 +1009,180 @@ static constexpr Bitmap bitmap_icon_scanner { { 16, 16 }, bitmap_icon_scanner_data }; -static constexpr uint8_t bitmap_icon_script_data[] = { - 0xFC, 0x07, - 0xFA, 0x0F, - 0x19, 0x1A, - 0xF9, 0x1F, - 0x1E, 0x1D, - 0xF8, 0x1F, - 0x98, 0x1F, - 0xF8, 0x1F, - 0xF8, 0x1F, - 0x08, 0x14, - 0xF8, 0x1F, - 0x48, 0x1E, - 0xF8, 0xFF, - 0x78, 0x80, - 0x30, 0x40, - 0xE0, 0x3F, +static constexpr uint8_t bitmap_more_data[] = { + 0x10, + 0x10, + 0x10, + 0x10, + 0x54, + 0x38, + 0x10, + 0x00, }; -static constexpr Bitmap bitmap_icon_script { - { 16, 16 }, bitmap_icon_script_data +static constexpr Bitmap bitmap_more { + { 8, 8 }, bitmap_more_data }; -static constexpr uint8_t bitmap_icon_sd_data[] = { +static constexpr uint8_t bitmap_icon_modem_data[] = { + 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xC0, 0x1F, - 0xE0, 0x1F, - 0xF0, 0x1F, - 0xF8, 0x1F, - 0x98, 0x18, - 0xE8, 0x16, - 0xC8, 0x16, - 0x98, 0x16, - 0xB8, 0x16, - 0xC8, 0x18, - 0xF8, 0x1F, 0xF8, 0x1F, + 0x04, 0x20, + 0x02, 0x40, + 0xFF, 0xFF, + 0xFF, 0xFF, + 0xAB, 0xDF, + 0xAB, 0xDF, + 0xFF, 0xFF, + 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -static constexpr Bitmap bitmap_icon_sd { - { 16, 16 }, bitmap_icon_sd_data +static constexpr Bitmap bitmap_icon_modem { + { 16, 16 }, bitmap_icon_modem_data }; -static constexpr uint8_t bitmap_icon_sdcard_data[] = { - 0xF0, 0x3F, - 0x58, 0x35, - 0x5C, 0x35, - 0xFC, 0x3F, - 0xFC, 0x3F, - 0xFC, 0x3F, - 0xFC, 0x3F, - 0xFC, 0x3F, - 0xFC, 0x3F, - 0xAC, 0x3A, - 0x5C, 0x35, - 0xAC, 0x3A, - 0x5C, 0x35, - 0xAC, 0x3A, - 0x5C, 0x35, - 0xAC, 0x3A, +static constexpr uint8_t bitmap_icon_file_image_data[] = { + 0x00, 0x00, + 0xFF, 0xFF, + 0x01, 0x80, + 0x01, 0x80, + 0x89, 0x80, + 0xC1, 0x81, + 0xE1, 0xA3, + 0xB1, 0xB3, + 0x89, 0xDC, + 0x07, 0x8C, + 0x01, 0x90, + 0x01, 0x80, + 0xAB, 0x82, + 0xFF, 0xD5, + 0xFF, 0xFF, + 0x00, 0x00, }; -static constexpr Bitmap bitmap_icon_sdcard { - { 16, 16 }, bitmap_icon_sdcard_data +static constexpr Bitmap bitmap_icon_file_image { + { 16, 16 }, bitmap_icon_file_image_data }; -static constexpr uint8_t bitmap_icon_search_data[] = { - 0xF8, 0x01, - 0xFC, 0x03, - 0x0E, 0x07, - 0x07, 0x0E, - 0x03, 0x0C, - 0x0B, 0x0C, - 0x0B, 0x0C, - 0x13, 0x0C, - 0x07, 0x0E, - 0x0E, 0x07, - 0xFC, 0x1F, - 0xF8, 0x3D, - 0x00, 0x7C, - 0x00, 0xF8, - 0x00, 0xF0, - 0x00, 0x60, +static constexpr uint8_t bitmap_icon_save_data[] = { + 0x00, 0x01, + 0x00, 0x01, + 0x00, 0x01, + 0x00, 0x01, + 0x4E, 0x05, + 0x91, 0x03, + 0x3F, 0x19, + 0x01, 0x20, + 0xF9, 0xFF, + 0xF9, 0xFF, + 0xFD, 0x7F, + 0xFD, 0x7F, + 0xFF, 0x3F, + 0xFF, 0x3F, + 0xFF, 0x1F, + 0xFF, 0x1F, }; -static constexpr Bitmap bitmap_icon_search { - { 16, 16 }, bitmap_icon_search_data +static constexpr Bitmap bitmap_icon_save { + { 16, 16 }, bitmap_icon_save_data }; -static constexpr uint8_t bitmap_icon_setup_data[] = { - 0xC0, 0x01, - 0xC0, 0x01, - 0xE4, 0x13, - 0xFE, 0x3F, - 0xFF, 0x7F, - 0x3E, 0x3E, - 0x1C, 0x1C, - 0x1C, 0x1C, - 0x1C, 0x1C, - 0x3E, 0x3E, - 0xFF, 0x7F, - 0xFE, 0x3F, - 0xE4, 0x13, - 0xC0, 0x01, - 0xC0, 0x01, +static constexpr uint8_t bitmap_icon_stealth_data[] = { + 0x00, 0x00, + 0xC0, 0x03, + 0xE0, 0x07, + 0xE0, 0x07, + 0xF8, 0x1F, + 0x00, 0x00, + 0xE0, 0x07, + 0x60, 0x06, + 0x00, 0x00, + 0xF0, 0x0F, + 0xF0, 0x0F, + 0xF8, 0x1E, + 0xFC, 0x3F, + 0xFC, 0x3E, + 0xFC, 0x3F, + 0x00, 0x00, +}; +static constexpr Bitmap bitmap_icon_stealth { + { 16, 16 }, bitmap_icon_stealth_data +}; + +static constexpr uint8_t bitmap_icon_controls_data[] = { + 0x8C, 0x31, + 0x5A, 0x6B, + 0xDE, 0x7B, + 0x8C, 0x31, + 0x00, 0x00, + 0x8C, 0x31, + 0x5A, 0x7B, + 0xDE, 0x7B, + 0x8C, 0x31, + 0x00, 0x00, + 0x8C, 0x31, + 0xDA, 0x7B, + 0xDE, 0x7B, + 0x8C, 0x31, + 0x00, 0x00, 0x00, 0x00, }; -static constexpr Bitmap bitmap_icon_setup { - { 16, 16 }, bitmap_icon_setup_data +static constexpr Bitmap bitmap_icon_controls { + { 16, 16 }, bitmap_icon_controls_data }; -static constexpr uint8_t bitmap_icon_sleep_data[] = { +static constexpr uint8_t bitmap_icon_rds_data[] = { 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, - 0x00, 0x08, - 0x00, 0x18, - 0x00, 0x18, - 0x00, 0x38, - 0x00, 0x3C, - 0x00, 0x3C, - 0x00, 0x3E, - 0x84, 0x1F, - 0xF8, 0x1F, - 0xF0, 0x0F, - 0xC0, 0x03, 0x00, 0x00, 0x00, 0x00, -}; -static constexpr Bitmap bitmap_icon_sleep { - { 16, 16 }, bitmap_icon_sleep_data -}; - -static constexpr uint8_t bitmap_icon_sonde_data[] = { - 0x80, 0x03, - 0xE0, 0x0F, - 0xE0, 0x0F, - 0xF0, 0x1F, - 0xF0, 0x1F, - 0xF0, 0x1F, - 0xE0, 0x0F, - 0xE0, 0x0F, + 0x3C, 0x3C, + 0x7E, 0x7E, + 0x67, 0xE7, + 0x83, 0xC3, + 0xC7, 0xE1, + 0xFD, 0xBC, + 0x42, 0x42, + 0x3C, 0x3C, + 0x00, 0x00, 0x00, 0x00, - 0x20, 0x09, 0x00, 0x00, - 0x40, 0x05, 0x00, 0x00, - 0xC0, 0x07, - 0xC0, 0x07, - 0xC0, 0x07, }; -static constexpr Bitmap bitmap_icon_sonde { - { 16, 16 }, bitmap_icon_sonde_data +static constexpr Bitmap bitmap_icon_rds { + { 16, 16 }, bitmap_icon_rds_data }; -static constexpr uint8_t bitmap_icon_soundboard_data[] = { - 0xF0, 0x0F, - 0x1C, 0x18, - 0x17, 0x38, - 0x15, 0x78, - 0x15, 0xF8, - 0x15, 0x82, - 0x15, 0x8B, - 0xD5, 0x83, - 0xD5, 0xBB, - 0xD5, 0x83, - 0x15, 0x8B, - 0x15, 0x92, - 0x15, 0xA0, - 0x17, 0x80, - 0x1C, 0x80, - 0xF0, 0xFF, +static constexpr uint8_t bitmap_bulb_off_data[] = { + 0x00, 0x3C, 0x00, + 0x00, 0xC3, 0x00, + 0x80, 0x00, 0x01, + 0x40, 0x00, 0x02, + 0x20, 0x00, 0x04, + 0x20, 0x00, 0x04, + 0x10, 0x00, 0x08, + 0x10, 0x42, 0x08, + 0x10, 0x42, 0x08, + 0x10, 0x24, 0x08, + 0x10, 0x24, 0x08, + 0x20, 0x24, 0x04, + 0x20, 0x2C, 0x04, + 0x40, 0x34, 0x02, + 0x80, 0x3C, 0x01, + 0x00, 0xFF, 0x00, + 0x00, 0xE3, 0x00, + 0x00, 0xBD, 0x00, + 0x00, 0xC3, 0x00, + 0x00, 0xBD, 0x00, + 0x00, 0xC3, 0x00, + 0x00, 0xBD, 0x00, + 0x00, 0x42, 0x00, + 0x00, 0x3C, 0x00, }; -static constexpr Bitmap bitmap_icon_soundboard { - { 16, 16 }, bitmap_icon_soundboard_data +static constexpr Bitmap bitmap_bulb_off { + { 24, 24 }, bitmap_bulb_off_data }; static constexpr uint8_t bitmap_icon_speaker_data[] = { @@ -1637,158 +1207,136 @@ static constexpr Bitmap bitmap_icon_speaker { { 16, 16 }, bitmap_icon_speaker_data }; -static constexpr uint8_t bitmap_icon_speaker_mute_data[] = { - 0x00, 0x00, - 0x40, 0x00, - 0x60, 0x00, - 0x70, 0x00, - 0x78, 0x00, - 0x7F, 0x22, - 0x7F, 0x36, - 0x7F, 0x1C, - 0x7F, 0x08, - 0x7F, 0x1C, - 0x7F, 0x36, - 0x7F, 0x22, - 0x78, 0x00, - 0x70, 0x00, - 0x60, 0x00, - 0x40, 0x00, +static constexpr uint8_t bitmap_icon_btle_data[] = { + 0xE0, 0x03, + 0x30, 0x07, + 0x38, 0x0E, + 0x3C, 0x1C, + 0x24, 0x19, + 0x0C, 0x13, + 0x1C, 0x19, + 0x3C, 0x1C, + 0x3C, 0x1C, + 0x1C, 0x19, + 0x0C, 0x13, + 0x24, 0x19, + 0x3C, 0x1C, + 0x38, 0x0E, + 0x30, 0x07, + 0xE0, 0x03, }; -static constexpr Bitmap bitmap_icon_speaker_mute { - { 16, 16 }, bitmap_icon_speaker_mute_data +static constexpr Bitmap bitmap_icon_btle { + { 16, 16 }, bitmap_icon_btle_data }; -static constexpr uint8_t bitmap_icon_sstv_data[] = { - 0x00, 0x00, +static constexpr uint8_t bitmap_icon_biast_on_data[] = { 0x00, 0x00, 0xFE, 0x7F, - 0x03, 0xC0, - 0x53, 0xD5, - 0xAB, 0xCA, - 0x53, 0xD5, - 0xAB, 0xCA, - 0x53, 0xD5, - 0xAB, 0xCA, - 0x53, 0xD5, - 0x03, 0xC0, - 0xFF, 0xFF, - 0xFB, 0xD7, - 0xFE, 0x7F, + 0x00, 0x04, + 0x00, 0x08, + 0x20, 0x10, + 0x20, 0x08, + 0x30, 0x04, + 0x30, 0x08, + 0xF8, 0x10, + 0x60, 0x08, + 0x60, 0x04, + 0x20, 0x08, + 0x20, 0x10, + 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, }; -static constexpr Bitmap bitmap_icon_sstv { - { 16, 16 }, bitmap_icon_sstv_data +static constexpr Bitmap bitmap_icon_biast_on { + { 16, 16 }, bitmap_icon_biast_on_data }; -static constexpr uint8_t bitmap_icon_stealth_data[] = { - 0x00, 0x00, +static constexpr uint8_t bitmap_icon_transmit_data[] = { + 0x80, 0x01, 0xC0, 0x03, 0xE0, 0x07, - 0xE0, 0x07, - 0xF8, 0x1F, - 0x00, 0x00, - 0xE0, 0x07, - 0x60, 0x06, - 0x00, 0x00, - 0xF0, 0x0F, - 0xF0, 0x0F, - 0xF8, 0x1E, - 0xFC, 0x3F, - 0xFC, 0x3E, - 0xFC, 0x3F, - 0x00, 0x00, -}; -static constexpr Bitmap bitmap_icon_stealth { - { 16, 16 }, bitmap_icon_stealth_data -}; - -static constexpr uint8_t bitmap_icon_temperature_data[] = { - 0x00, 0x01, + 0xB0, 0x0D, + 0x98, 0x19, 0x80, 0x01, - 0x80, 0x05, - 0xC0, 0x0D, - 0x40, 0x0D, - 0xD0, 0x1F, - 0x70, 0x15, - 0xB0, 0x1A, - 0x58, 0x35, - 0xB8, 0x3A, - 0x58, 0x34, - 0x28, 0x28, - 0x18, 0x30, - 0x30, 0x18, - 0x60, 0x0C, - 0xC0, 0x07, + 0x80, 0x01, + 0x80, 0x01, + 0x80, 0x01, + 0x80, 0x01, + 0x80, 0x01, + 0x80, 0x01, + 0x83, 0xC1, + 0x03, 0xC0, + 0xFF, 0xFF, + 0xFF, 0xFF, }; -static constexpr Bitmap bitmap_icon_temperature { - { 16, 16 }, bitmap_icon_temperature_data +static constexpr Bitmap bitmap_icon_transmit { + { 16, 16 }, bitmap_icon_transmit_data }; -static constexpr uint8_t bitmap_icon_tetra_data[] = { - 0xE0, 0x0F, - 0x18, 0x38, - 0xE4, 0x67, - 0x7E, 0xCE, - 0xC7, 0xCC, +static constexpr uint8_t bitmap_sd_card_unknown_data[] = { + 0x00, 0x00, + 0x00, 0x00, + 0xC0, 0x1F, + 0xE0, 0x1F, + 0xF0, 0x1F, + 0xF8, 0x1F, + 0x38, 0x1C, + 0x98, 0x19, + 0xF8, 0x1C, + 0x78, 0x1E, + 0x78, 0x1E, + 0xF8, 0x1F, + 0x78, 0x1E, + 0xF8, 0x1F, 0x00, 0x00, - 0xFF, 0x4F, - 0xBA, 0xB2, - 0x9A, 0xEE, - 0xBA, 0xB2, 0x00, 0x00, - 0x3B, 0xE3, - 0x73, 0x7E, - 0xC6, 0x27, - 0x1C, 0x18, - 0xF0, 0x07, }; -static constexpr Bitmap bitmap_icon_tetra { - { 16, 16 }, bitmap_icon_tetra_data +static constexpr Bitmap bitmap_sd_card_unknown { + { 16, 16 }, bitmap_sd_card_unknown_data }; -static constexpr uint8_t bitmap_icon_tools_antenna_data[] = { - 0x38, 0x3E, - 0x10, 0x22, - 0x10, 0x26, - 0x10, 0x22, - 0x10, 0x2E, - 0x10, 0x22, - 0x10, 0x26, - 0x10, 0x22, - 0x38, 0x2E, - 0x38, 0x22, - 0x38, 0x26, - 0x38, 0x22, - 0x38, 0x2E, - 0x38, 0x22, - 0x38, 0x3E, - 0x00, 0x00, +static constexpr uint8_t bitmap_icon_notepad_data[] = { + 0x0C, 0x00, + 0x1E, 0x00, + 0x2F, 0x00, + 0x47, 0x00, + 0xE2, 0x00, + 0xD4, 0x01, + 0xB8, 0x03, + 0x70, 0x07, + 0xE0, 0x0E, + 0xC0, 0x1D, + 0x80, 0x3B, + 0x00, 0x4F, + 0x00, 0x46, + 0x00, 0x84, + 0x00, 0xD8, + 0x00, 0xE0, }; -static constexpr Bitmap bitmap_icon_tools_antenna { - { 16, 16 }, bitmap_icon_tools_antenna_data +static constexpr Bitmap bitmap_icon_notepad { + { 16, 16 }, bitmap_icon_notepad_data }; -static constexpr uint8_t bitmap_icon_tools_wipesd_data[] = { - 0xF0, 0x3F, - 0x58, 0x35, - 0x5C, 0x35, - 0xFC, 0x3F, - 0xFC, 0x3F, - 0xFC, 0x3F, - 0x3C, 0x1C, - 0xBC, 0xC9, - 0xBC, 0xE3, - 0x2C, 0x77, - 0x5C, 0x3E, - 0xAC, 0x1C, - 0x5C, 0x3E, - 0x2C, 0x77, - 0x9C, 0xE3, - 0xAC, 0xC1, +static constexpr uint8_t bitmap_icon_memory_data[] = { + 0x54, 0x15, + 0x54, 0x15, + 0xFF, 0x7F, + 0xFC, 0x1F, + 0xFF, 0x7F, + 0xCC, 0x19, + 0xAF, 0x7A, + 0x6C, 0x1B, + 0xEF, 0x7B, + 0xEC, 0x1B, + 0xFF, 0x7F, + 0xFC, 0x1F, + 0xFF, 0x7F, + 0x54, 0x15, + 0x54, 0x15, + 0x00, 0x00, }; -static constexpr Bitmap bitmap_icon_tools_wipesd { - { 16, 16 }, bitmap_icon_tools_wipesd_data +static constexpr Bitmap bitmap_icon_memory { + { 16, 16 }, bitmap_icon_memory_data }; static constexpr uint8_t bitmap_icon_tpms_data[] = { @@ -1813,259 +1361,285 @@ static constexpr Bitmap bitmap_icon_tpms { { 16, 16 }, bitmap_icon_tpms_data }; -static constexpr uint8_t bitmap_icon_transmit_data[] = { - 0x80, 0x01, - 0xC0, 0x03, - 0xE0, 0x07, - 0xB0, 0x0D, - 0x98, 0x19, - 0x80, 0x01, - 0x80, 0x01, - 0x80, 0x01, - 0x80, 0x01, - 0x80, 0x01, - 0x80, 0x01, - 0x80, 0x01, - 0x83, 0xC1, - 0x03, 0xC0, - 0xFF, 0xFF, - 0xFF, 0xFF, -}; -static constexpr Bitmap bitmap_icon_transmit { - { 16, 16 }, bitmap_icon_transmit_data -}; - -static constexpr uint8_t bitmap_icon_utilities_data[] = { - 0x30, 0x24, - 0x78, 0x66, - 0x78, 0x66, - 0x78, 0x7E, - 0x78, 0x3C, - 0x78, 0x18, - 0x78, 0x18, - 0x30, 0x3C, - 0x30, 0x3C, - 0x30, 0x3C, - 0x30, 0x3C, - 0x30, 0x3C, - 0x30, 0x3C, - 0x30, 0x3C, - 0x30, 0x18, +static constexpr uint8_t bitmap_icon_tetra_data[] = { + 0xE0, 0x0F, + 0x18, 0x38, + 0xE4, 0x67, + 0x7E, 0xCE, + 0xC7, 0xCC, 0x00, 0x00, + 0xFF, 0x4F, + 0xBA, 0xB2, + 0x9A, 0xEE, + 0xBA, 0xB2, + 0x00, 0x00, + 0x3B, 0xE3, + 0x73, 0x7E, + 0xC6, 0x27, + 0x1C, 0x18, + 0xF0, 0x07, }; -static constexpr Bitmap bitmap_icon_utilities { - { 16, 16 }, bitmap_icon_utilities_data -}; - -static constexpr uint8_t bitmap_more_data[] = { - 0x10, - 0x10, - 0x10, - 0x10, - 0x54, - 0x38, - 0x10, - 0x00, -}; -static constexpr Bitmap bitmap_more { - { 8, 8 }, bitmap_more_data +static constexpr Bitmap bitmap_icon_tetra { + { 16, 16 }, bitmap_icon_tetra_data }; -static constexpr uint8_t bitmap_play_data[] = { - 0x00, 0x00, - 0x00, 0x00, - 0x0C, 0x00, - 0x3C, 0x00, - 0xFC, 0x00, - 0xFC, 0x03, - 0xFC, 0x0F, +static constexpr uint8_t bitmap_icon_capture_data[] = { + 0xE0, 0x07, + 0xF8, 0x1F, 0xFC, 0x3F, + 0xFE, 0x7F, + 0xFE, 0x7F, + 0xFF, 0xFF, + 0xFF, 0xFF, + 0xFF, 0xFF, + 0xFF, 0xFF, + 0xFF, 0xFF, + 0xFF, 0xFF, + 0xFE, 0x7F, + 0xFE, 0x7F, 0xFC, 0x3F, - 0xFC, 0x0F, - 0xFC, 0x03, - 0xFC, 0x00, - 0x3C, 0x00, - 0x0C, 0x00, - 0x00, 0x00, - 0x00, 0x00, + 0xF8, 0x1F, + 0xE0, 0x07, }; -static constexpr Bitmap bitmap_play { - { 16, 16 }, bitmap_play_data +static constexpr Bitmap bitmap_icon_capture { + { 16, 16 }, bitmap_icon_capture_data }; -static constexpr uint8_t bitmap_record_data[] = { - 0xC0, 0x07, - 0xF0, 0x1F, - 0xF8, 0x3F, - 0xFC, 0x7F, - 0xFC, 0x7F, - 0x66, 0xCC, - 0x56, 0xF7, - 0x66, 0xF6, - 0x56, 0xF7, - 0x56, 0xCC, - 0xFC, 0x7F, - 0xFC, 0x7F, - 0xF8, 0x3F, - 0xF0, 0x1F, - 0xC0, 0x07, - 0x00, 0x00, +static constexpr uint8_t bitmap_icon_file_wav_data[] = { + 0xFC, 0x03, + 0x04, 0x06, + 0x04, 0x0E, + 0x04, 0x1E, + 0x04, 0x3E, + 0x84, 0x20, + 0xC4, 0x22, + 0xF4, 0x20, + 0xF4, 0x2E, + 0xF4, 0x20, + 0xC4, 0x22, + 0x84, 0x24, + 0x04, 0x28, + 0x04, 0x20, + 0x04, 0x20, + 0xFC, 0x3F, }; -static constexpr Bitmap bitmap_record { - { 16, 16 }, bitmap_record_data +static constexpr Bitmap bitmap_icon_file_wav { + { 16, 16 }, bitmap_icon_file_wav_data }; -static constexpr uint8_t bitmap_rssipwm_data[] = { - 0x00, 0x00, 0x00, - 0x8F, 0xE7, 0x7D, - 0x51, 0x10, 0x10, - 0x51, 0x10, 0x10, - 0x8F, 0xE3, 0x10, - 0x09, 0x04, 0x11, - 0x11, 0x04, 0x11, - 0xD1, 0xF3, 0x7C, - 0x00, 0x00, 0x00, - 0x3F, 0x1E, 0x1E, - 0x21, 0x12, 0x12, - 0x21, 0x12, 0x12, - 0x21, 0x12, 0x12, - 0x21, 0x12, 0x12, - 0x21, 0x12, 0x12, - 0xE1, 0xF3, 0x73, +static constexpr uint8_t bitmap_icon_file_text_data[] = { + 0xFC, 0x03, + 0x04, 0x06, + 0x04, 0x0E, + 0x04, 0x1E, + 0xF4, 0x3E, + 0x04, 0x20, + 0xF4, 0x2F, + 0x04, 0x20, + 0xF4, 0x2F, + 0x04, 0x20, + 0xF4, 0x2F, + 0x04, 0x20, + 0xF4, 0x2F, + 0x04, 0x20, + 0x04, 0x20, + 0xFC, 0x3F, }; -static constexpr Bitmap bitmap_rssipwm { - { 24, 16 }, bitmap_rssipwm_data +static constexpr Bitmap bitmap_icon_file_text { + { 16, 16 }, bitmap_icon_file_text_data }; -static constexpr uint8_t bitmap_sd_card_error_data[] = { +static constexpr uint8_t bitmap_icon_sd_data[] = { 0x00, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0xE0, 0x1F, 0xF0, 0x1F, 0xF8, 0x1F, - 0xC8, 0x13, - 0x98, 0x19, - 0x38, 0x1C, - 0x78, 0x1E, - 0x38, 0x1C, - 0x98, 0x19, - 0xC8, 0x13, + 0x98, 0x18, + 0xE8, 0x16, + 0xC8, 0x16, + 0x98, 0x16, + 0xB8, 0x16, + 0xC8, 0x18, + 0xF8, 0x1F, 0xF8, 0x1F, 0x00, 0x00, 0x00, 0x00, }; -static constexpr Bitmap bitmap_sd_card_error { - { 16, 16 }, bitmap_sd_card_error_data +static constexpr Bitmap bitmap_icon_sd { + { 16, 16 }, bitmap_icon_sd_data }; -static constexpr uint8_t bitmap_sd_card_ok_data[] = { +static constexpr uint8_t bitmap_icon_dir_data[] = { 0x00, 0x00, + 0x3E, 0x00, + 0x41, 0x00, + 0xC1, 0x7F, + 0xFF, 0xFF, + 0xFF, 0xFF, + 0xFF, 0xFF, + 0xFF, 0xFF, + 0xFF, 0xFF, + 0xFF, 0xFF, + 0xAF, 0xEA, + 0x57, 0xF5, + 0xEF, 0xEF, + 0xF7, 0xF7, + 0xEE, 0x6F, 0x00, 0x00, +}; +static constexpr Bitmap bitmap_icon_dir { + { 16, 16 }, bitmap_icon_dir_data +}; + +static constexpr uint8_t bitmap_icon_options_touch_data[] = { + 0xC7, 0xF1, + 0x97, 0xF4, + 0x27, 0xF2, + 0x8F, 0xF8, + 0x5F, 0xFD, + 0x47, 0xFD, + 0x53, 0xC1, + 0x4B, 0x9F, + 0x43, 0xB5, + 0x6F, 0xA0, + 0x2F, 0xA0, + 0x20, 0x20, + 0x60, 0x20, + 0x40, 0x10, 0xC0, 0x1F, - 0xE0, 0x1F, - 0xF0, 0x1F, - 0xF8, 0x1F, + 0x00, 0x00, +}; +static constexpr Bitmap bitmap_icon_options_touch { + { 16, 16 }, bitmap_icon_options_touch_data +}; + +static constexpr uint8_t bitmap_icon_nuoptix_data[] = { + 0x80, 0x01, + 0x80, 0x01, + 0x40, 0x02, + 0x40, 0x1A, + 0x40, 0x1A, + 0x20, 0x0C, + 0x20, 0x0F, + 0x20, 0x1E, + 0x10, 0x0E, + 0x10, 0x0B, + 0x10, 0x0B, 0xF8, 0x1F, - 0x98, 0x15, - 0x68, 0x19, - 0x68, 0x1D, - 0x68, 0x19, - 0x98, 0x15, 0xF8, 0x1F, 0xF8, 0x1F, - 0x00, 0x00, - 0x00, 0x00, + 0xFC, 0x3F, + 0xFC, 0x3F, }; -static constexpr Bitmap bitmap_sd_card_ok { - { 16, 16 }, bitmap_sd_card_ok_data +static constexpr Bitmap bitmap_icon_nuoptix { + { 16, 16 }, bitmap_icon_nuoptix_data }; -static constexpr uint8_t bitmap_sd_card_unknown_data[] = { +static constexpr uint8_t bitmap_icon_aprs_data[] = { 0x00, 0x00, 0x00, 0x00, - 0xC0, 0x1F, - 0xE0, 0x1F, + 0x00, 0x00, + 0xF0, 0x0F, + 0x4C, 0x32, + 0xFE, 0x7F, + 0x25, 0xA4, + 0x25, 0xA4, + 0xFF, 0xFF, + 0x25, 0xA4, + 0x25, 0xA4, + 0xFE, 0x7F, + 0x4C, 0x32, + 0xF0, 0x0F, + 0x00, 0x00, + 0x00, 0x00, +}; +static constexpr Bitmap bitmap_icon_aprs { + { 16, 16 }, bitmap_icon_aprs_data +}; + +static constexpr uint8_t bitmap_stripes_data[] = { + 0xFF, 0x03, 0xC0, + 0xFF, 0x01, 0xE0, + 0xFF, 0x00, 0xF0, + 0x7F, 0x00, 0xF8, + 0x3F, 0x00, 0xFC, + 0x1F, 0x00, 0xFE, + 0x0F, 0x00, 0xFF, + 0x07, 0x80, 0xFF, +}; +static constexpr Bitmap bitmap_stripes { + { 24, 8 }, bitmap_stripes_data +}; + +static constexpr uint8_t bitmap_icon_sonde_data[] = { + 0x80, 0x03, + 0xE0, 0x0F, + 0xE0, 0x0F, 0xF0, 0x1F, - 0xF8, 0x1F, - 0x38, 0x1C, - 0x98, 0x19, - 0xF8, 0x1C, - 0x78, 0x1E, - 0x78, 0x1E, - 0xF8, 0x1F, - 0x78, 0x1E, - 0xF8, 0x1F, + 0xF0, 0x1F, + 0xF0, 0x1F, + 0xE0, 0x0F, + 0xE0, 0x0F, 0x00, 0x00, + 0x20, 0x09, + 0x00, 0x00, + 0x40, 0x05, 0x00, 0x00, + 0xC0, 0x07, + 0xC0, 0x07, + 0xC0, 0x07, }; -static constexpr Bitmap bitmap_sd_card_unknown { - { 16, 16 }, bitmap_sd_card_unknown_data +static constexpr Bitmap bitmap_icon_sonde { + { 16, 16 }, bitmap_icon_sonde_data }; -static constexpr uint8_t bitmap_sig_cw_data[] = { - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0xFE, 0xFF, 0xFF, 0x7F, - 0xFE, 0xFF, 0xFF, 0x7F, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, +static constexpr uint8_t bitmap_icon_sleep_data[] = { + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x04, + 0x00, 0x08, + 0x00, 0x18, + 0x00, 0x18, + 0x00, 0x38, + 0x00, 0x3C, + 0x00, 0x3C, + 0x00, 0x3E, + 0x84, 0x1F, + 0xF8, 0x1F, + 0xF0, 0x0F, + 0xC0, 0x03, + 0x00, 0x00, + 0x00, 0x00, }; -static constexpr Bitmap bitmap_sig_cw { - { 32, 32 }, bitmap_sig_cw_data +static constexpr Bitmap bitmap_icon_sleep { + { 16, 16 }, bitmap_icon_sleep_data }; -static constexpr uint8_t bitmap_sig_noise_data[] = { - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x20, 0x00, 0x00, - 0x00, 0x30, 0x80, 0x00, - 0x00, 0x30, 0x80, 0x01, - 0x40, 0x30, 0xC0, 0x03, - 0xC0, 0x30, 0xC0, 0x03, - 0xC0, 0x39, 0xC0, 0x72, - 0xC0, 0x7B, 0x60, 0x76, - 0x60, 0x6E, 0x60, 0x1E, - 0x60, 0xCE, 0x6C, 0x0C, - 0x66, 0xC4, 0x6E, 0x0C, - 0x66, 0xC0, 0x3E, 0x00, - 0x2C, 0xC0, 0x3B, 0x00, - 0x3C, 0xC0, 0x39, 0x00, - 0x3C, 0xC0, 0x18, 0x00, - 0x18, 0x40, 0x10, 0x00, - 0x18, 0x40, 0x10, 0x00, +static constexpr uint8_t bitmap_icon_keyfob_data[] = { + 0x30, 0x00, + 0x30, 0x00, + 0x30, 0x00, + 0x30, 0x00, + 0x30, 0x00, + 0x30, 0x00, + 0xFC, 0x00, + 0xCE, 0x01, + 0x86, 0x01, + 0xFE, 0x01, + 0x86, 0x31, + 0x86, 0x49, + 0xCE, 0x87, + 0xFC, 0x84, + 0xFC, 0x4B, + 0x78, 0x30, +}; +static constexpr Bitmap bitmap_icon_keyfob { + { 16, 16 }, bitmap_icon_keyfob_data +}; + +static constexpr uint8_t bitmap_sig_cw_data[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -2074,12 +1648,6 @@ static constexpr uint8_t bitmap_sig_noise_data[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -static constexpr Bitmap bitmap_sig_noise { - { 32, 32 }, bitmap_sig_noise_data -}; - -static constexpr uint8_t bitmap_sig_saw_down_data[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -2087,23 +1655,15 @@ static constexpr uint8_t bitmap_sig_saw_down_data[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFE, 0xFF, 0xFF, 0x7F, + 0xFE, 0xFF, 0xFF, 0x7F, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0E, 0x80, 0x00, 0x60, - 0x1E, 0x80, 0x01, 0x60, - 0x3E, 0x80, 0x03, 0x60, - 0x76, 0x80, 0x07, 0x60, - 0xE6, 0x80, 0x0F, 0x60, - 0xC6, 0x81, 0x1D, 0x60, - 0x86, 0x83, 0x39, 0x60, - 0x06, 0x87, 0x71, 0x60, - 0x06, 0x8E, 0xE1, 0x60, - 0x06, 0x9C, 0xC1, 0x61, - 0x06, 0xB8, 0x81, 0x63, - 0x06, 0xF0, 0x01, 0x67, - 0x06, 0xE0, 0x01, 0x6E, - 0x06, 0xC0, 0x01, 0x7C, - 0x06, 0x80, 0x01, 0x78, - 0x06, 0x00, 0x01, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -2113,8 +1673,8 @@ static constexpr uint8_t bitmap_sig_saw_down_data[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -static constexpr Bitmap bitmap_sig_saw_down { - { 32, 32 }, bitmap_sig_saw_down_data +static constexpr Bitmap bitmap_sig_cw { + { 32, 32 }, bitmap_sig_cw_data }; static constexpr uint8_t bitmap_sig_saw_up_data[] = { @@ -2151,8 +1711,266 @@ static constexpr uint8_t bitmap_sig_saw_up_data[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -static constexpr Bitmap bitmap_sig_saw_up { - { 32, 32 }, bitmap_sig_saw_up_data +static constexpr Bitmap bitmap_sig_saw_up { + { 32, 32 }, bitmap_sig_saw_up_data +}; + +static constexpr uint8_t bitmap_icon_options_datetime_data[] = { + 0x0C, 0x06, + 0xFF, 0x1F, + 0x49, 0x12, + 0x49, 0x12, + 0xFF, 0x1F, + 0x49, 0x00, + 0x49, 0x1C, + 0x7F, 0x63, + 0x09, 0x49, + 0x89, 0x88, + 0xBE, 0xB8, + 0x80, 0x80, + 0x00, 0x41, + 0x00, 0x63, + 0x00, 0x1C, + 0x00, 0x00, +}; +static constexpr Bitmap bitmap_icon_options_datetime { + { 16, 16 }, bitmap_icon_options_datetime_data +}; + +static constexpr uint8_t bitmap_target_calibrate_data[] = { + 0x02, 0x00, 0x00, 0x40, + 0x07, 0x00, 0x00, 0xE0, + 0x0E, 0x00, 0x00, 0x70, + 0x1C, 0x00, 0x00, 0x38, + 0x38, 0x00, 0x00, 0x1C, + 0x70, 0x00, 0x00, 0x0E, + 0xE0, 0x00, 0x00, 0x07, + 0xC0, 0x01, 0x80, 0x03, + 0x80, 0x03, 0xC0, 0x01, + 0x00, 0x07, 0xE0, 0x00, + 0x00, 0x0E, 0x70, 0x00, + 0x00, 0x1C, 0x38, 0x00, + 0x00, 0x38, 0x1C, 0x00, + 0x00, 0x70, 0x0E, 0x00, + 0x00, 0xE0, 0x07, 0x00, + 0x00, 0xC0, 0x03, 0x00, + 0x00, 0xC0, 0x03, 0x00, + 0x00, 0xE0, 0x07, 0x00, + 0x00, 0x70, 0x0E, 0x00, + 0x00, 0x38, 0x1C, 0x00, + 0x00, 0x1C, 0x38, 0x00, + 0x00, 0x0E, 0x70, 0x00, + 0x00, 0x07, 0xE0, 0x00, + 0x80, 0x03, 0xC0, 0x01, + 0xC0, 0x01, 0x80, 0x03, + 0xE0, 0x00, 0x00, 0x07, + 0x70, 0x00, 0x00, 0x0E, + 0x38, 0x00, 0x00, 0x1C, + 0x1C, 0x00, 0x00, 0x38, + 0x0E, 0x00, 0x00, 0x70, + 0x07, 0x00, 0x00, 0xE0, + 0x02, 0x00, 0x00, 0x40, +}; +static constexpr Bitmap bitmap_target_calibrate { + { 32, 32 }, bitmap_target_calibrate_data +}; + +static constexpr uint8_t bitmap_rssipwm_data[] = { + 0x00, 0x00, 0x00, + 0x8F, 0xE7, 0x7D, + 0x51, 0x10, 0x10, + 0x51, 0x10, 0x10, + 0x8F, 0xE3, 0x10, + 0x09, 0x04, 0x11, + 0x11, 0x04, 0x11, + 0xD1, 0xF3, 0x7C, + 0x00, 0x00, 0x00, + 0x3F, 0x1E, 0x1E, + 0x21, 0x12, 0x12, + 0x21, 0x12, 0x12, + 0x21, 0x12, 0x12, + 0x21, 0x12, 0x12, + 0x21, 0x12, 0x12, + 0xE1, 0xF3, 0x73, +}; +static constexpr Bitmap bitmap_rssipwm { + { 24, 16 }, bitmap_rssipwm_data +}; + +static constexpr uint8_t bitmap_icon_ert_data[] = { + 0x00, 0x00, + 0x00, 0x0F, + 0x80, 0x7F, + 0xC0, 0x0F, + 0xFC, 0x0F, + 0xC2, 0x0F, + 0x82, 0x7F, + 0x01, 0x0F, + 0x01, 0x00, + 0x21, 0x05, + 0x53, 0x09, + 0x56, 0x09, + 0x50, 0x05, + 0x50, 0x05, + 0x20, 0xAD, + 0x00, 0x00, +}; +static constexpr Bitmap bitmap_icon_ert { + { 16, 16 }, bitmap_icon_ert_data +}; + +static constexpr uint8_t bitmap_icon_receivers_data[] = { + 0x80, 0x01, + 0x80, 0x01, + 0x80, 0x01, + 0x80, 0x01, + 0x80, 0x01, + 0x80, 0x01, + 0x80, 0x01, + 0x80, 0x01, + 0x98, 0x19, + 0xB0, 0x0D, + 0xE0, 0x07, + 0xC0, 0x03, + 0x83, 0xC1, + 0x03, 0xC0, + 0xFF, 0xFF, + 0xFF, 0xFF, +}; +static constexpr Bitmap bitmap_icon_receivers { + { 16, 16 }, bitmap_icon_receivers_data +}; + +static constexpr uint8_t bitmap_icon_remote_data[] = { + 0x20, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0x20, 0x00, + 0xE0, 0x07, + 0xF0, 0x0F, + 0x30, 0x0C, + 0x30, 0x0C, + 0xF0, 0x0F, + 0xF0, 0x0F, + 0x70, 0x0D, + 0xB0, 0x0E, + 0x70, 0x0D, + 0xB0, 0x0E, + 0xF0, 0x0F, + 0xE0, 0x07, +}; +static constexpr Bitmap bitmap_icon_remote { + { 16, 16 }, bitmap_icon_remote_data +}; + +static constexpr uint8_t bitmap_record_data[] = { + 0xC0, 0x07, + 0xF0, 0x1F, + 0xF8, 0x3F, + 0xFC, 0x7F, + 0xFC, 0x7F, + 0x66, 0xCC, + 0x56, 0xF7, + 0x66, 0xF6, + 0x56, 0xF7, + 0x56, 0xCC, + 0xFC, 0x7F, + 0xFC, 0x7F, + 0xF8, 0x3F, + 0xF0, 0x1F, + 0xC0, 0x07, + 0x00, 0x00, +}; +static constexpr Bitmap bitmap_record { + { 16, 16 }, bitmap_record_data +}; + +static constexpr uint8_t bitmap_sd_card_error_data[] = { + 0x00, 0x00, + 0x00, 0x00, + 0xC0, 0x1F, + 0xE0, 0x1F, + 0xF0, 0x1F, + 0xF8, 0x1F, + 0xC8, 0x13, + 0x98, 0x19, + 0x38, 0x1C, + 0x78, 0x1E, + 0x38, 0x1C, + 0x98, 0x19, + 0xC8, 0x13, + 0xF8, 0x1F, + 0x00, 0x00, + 0x00, 0x00, +}; +static constexpr Bitmap bitmap_sd_card_error { + { 16, 16 }, bitmap_sd_card_error_data +}; + +static constexpr uint8_t bitmap_icon_script_data[] = { + 0xFC, 0x07, + 0xFA, 0x0F, + 0x19, 0x1A, + 0xF9, 0x1F, + 0x1E, 0x1D, + 0xF8, 0x1F, + 0x98, 0x1F, + 0xF8, 0x1F, + 0xF8, 0x1F, + 0x08, 0x14, + 0xF8, 0x1F, + 0x48, 0x1E, + 0xF8, 0xFF, + 0x78, 0x80, + 0x30, 0x40, + 0xE0, 0x3F, +}; +static constexpr Bitmap bitmap_icon_script { + { 16, 16 }, bitmap_icon_script_data +}; + +static constexpr uint8_t bitmap_icon_replay_data[] = { + 0x00, 0x00, + 0x00, 0x00, + 0x0C, 0x00, + 0x3C, 0x00, + 0xFC, 0x00, + 0xFC, 0x03, + 0xFC, 0x0F, + 0xFC, 0x3F, + 0xFC, 0x3F, + 0xFC, 0x0F, + 0xFC, 0x03, + 0xFC, 0x00, + 0x3C, 0x00, + 0x0C, 0x00, + 0x00, 0x00, + 0x00, 0x00, +}; +static constexpr Bitmap bitmap_icon_replay { + { 16, 16 }, bitmap_icon_replay_data +}; + +static constexpr uint8_t bitmap_icon_setup_data[] = { + 0xC0, 0x01, + 0xC0, 0x01, + 0xE4, 0x13, + 0xFE, 0x3F, + 0xFF, 0x7F, + 0x3E, 0x3E, + 0x1C, 0x1C, + 0x1C, 0x1C, + 0x1C, 0x1C, + 0x3E, 0x3E, + 0xFF, 0x7F, + 0xFE, 0x3F, + 0xE4, 0x13, + 0xC0, 0x01, + 0xC0, 0x01, + 0x00, 0x00, +}; +static constexpr Bitmap bitmap_icon_setup { + { 16, 16 }, bitmap_icon_setup_data }; static constexpr uint8_t bitmap_sig_sine_data[] = { @@ -2193,7 +2011,161 @@ static constexpr Bitmap bitmap_sig_sine { { 32, 32 }, bitmap_sig_sine_data }; -static constexpr uint8_t bitmap_sig_square_data[] = { +static constexpr uint8_t bitmap_icon_sstv_data[] = { + 0x00, 0x00, + 0x00, 0x00, + 0xFE, 0x7F, + 0x03, 0xC0, + 0x53, 0xD5, + 0xAB, 0xCA, + 0x53, 0xD5, + 0xAB, 0xCA, + 0x53, 0xD5, + 0xAB, 0xCA, + 0x53, 0xD5, + 0x03, 0xC0, + 0xFF, 0xFF, + 0xFB, 0xD7, + 0xFE, 0x7F, + 0x00, 0x00, +}; +static constexpr Bitmap bitmap_icon_sstv { + { 16, 16 }, bitmap_icon_sstv_data +}; + +static constexpr uint8_t bitmap_titlebar_image_data[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x22, 0xC7, 0x8B, 0x9E, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xA2, 0x28, 0x48, 0xA6, 0x81, 0x31, 0x67, 0x36, 0x73, 0x63, + 0xBE, 0x2F, 0x38, 0x9E, 0x87, 0xBB, 0x6D, 0x36, 0x1B, 0x77, + 0xA2, 0x28, 0x48, 0xA6, 0x81, 0xBF, 0x6D, 0x36, 0x1B, 0x7F, + 0xA2, 0xC8, 0x8B, 0xA6, 0x81, 0xB5, 0xCF, 0xF3, 0x7B, 0x6B, + 0x00, 0x00, 0x00, 0x00, 0x80, 0xB1, 0x8D, 0x31, 0x1B, 0x63, + 0xEE, 0xEE, 0xEE, 0xEE, 0x8A, 0xB1, 0x8D, 0x31, 0x1B, 0x63, + 0xAE, 0x46, 0xEE, 0x2E, 0x86, 0xB1, 0x8D, 0x31, 0x73, 0x63, + 0xE2, 0x4A, 0x2A, 0xEA, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +static constexpr Bitmap bitmap_titlebar_image { + { 80, 16 }, bitmap_titlebar_image_data +}; + +static constexpr uint8_t bitmap_icon_lora_data[] = { + 0xC0, 0x03, + 0x30, 0x0C, + 0x00, 0x00, + 0xC0, 0x03, + 0x00, 0x00, + 0xC0, 0x03, + 0x60, 0x06, + 0x60, 0x06, + 0x60, 0x06, + 0x60, 0x06, + 0xC0, 0x03, + 0x00, 0x00, + 0xC0, 0x03, + 0x00, 0x00, + 0x30, 0x0C, + 0xC0, 0x03, +}; +static constexpr Bitmap bitmap_icon_lora { + { 16, 16 }, bitmap_icon_lora_data +}; + +static constexpr uint8_t bitmap_icon_temperature_data[] = { + 0x00, 0x01, + 0x80, 0x01, + 0x80, 0x05, + 0xC0, 0x0D, + 0x40, 0x0D, + 0xD0, 0x1F, + 0x70, 0x15, + 0xB0, 0x1A, + 0x58, 0x35, + 0xB8, 0x3A, + 0x58, 0x34, + 0x28, 0x28, + 0x18, 0x30, + 0x30, 0x18, + 0x60, 0x0C, + 0xC0, 0x07, +}; +static constexpr Bitmap bitmap_icon_temperature { + { 16, 16 }, bitmap_icon_temperature_data +}; + +static constexpr uint8_t bitmap_icon_tools_wipesd_data[] = { + 0xF0, 0x3F, + 0x58, 0x35, + 0x5C, 0x35, + 0xFC, 0x3F, + 0xFC, 0x3F, + 0xFC, 0x3F, + 0x3C, 0x1C, + 0xBC, 0xC9, + 0xBC, 0xE3, + 0x2C, 0x77, + 0x5C, 0x3E, + 0xAC, 0x1C, + 0x5C, 0x3E, + 0x2C, 0x77, + 0x9C, 0xE3, + 0xAC, 0xC1, +}; +static constexpr Bitmap bitmap_icon_tools_wipesd { + { 16, 16 }, bitmap_icon_tools_wipesd_data +}; + +static constexpr uint8_t bitmap_icon_clk_int_data[] = { + 0x00, + 0x00, + 0xDC, + 0x54, + 0x54, + 0x54, + 0x54, + 0x76, + 0x00, + 0x44, + 0x6C, + 0x38, + 0x38, + 0x6C, + 0x44, + 0x00, +}; +static constexpr Bitmap bitmap_icon_clk_int { + { 8, 16 }, bitmap_icon_clk_int_data +}; + +static constexpr uint8_t bitmap_icon_file_iq_data[] = { + 0xFC, 0x03, + 0x04, 0x06, + 0x04, 0x0E, + 0x04, 0x1E, + 0x04, 0x3E, + 0x04, 0x20, + 0x04, 0x20, + 0x04, 0x21, + 0x44, 0x25, + 0x54, 0x25, + 0xF4, 0x2F, + 0xA4, 0x2A, + 0x84, 0x22, + 0x04, 0x22, + 0x04, 0x20, + 0xFC, 0x3F, +}; +static constexpr Bitmap bitmap_icon_file_iq { + { 16, 16 }, bitmap_icon_file_iq_data +}; + +static constexpr uint8_t bitmap_sig_noise_data[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -2202,22 +2174,22 @@ static constexpr uint8_t bitmap_sig_square_data[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFE, 0x83, 0xFF, 0x60, - 0xFE, 0x83, 0xFF, 0x60, - 0x06, 0x83, 0xC1, 0x60, - 0x06, 0x83, 0xC1, 0x60, - 0x06, 0x83, 0xC1, 0x60, - 0x06, 0x83, 0xC1, 0x60, - 0x06, 0x83, 0xC1, 0x60, - 0x06, 0x83, 0xC1, 0x60, - 0x06, 0x83, 0xC1, 0x60, - 0x06, 0x83, 0xC1, 0x60, - 0x06, 0x83, 0xC1, 0x60, - 0x06, 0x83, 0xC1, 0x60, - 0x06, 0x83, 0xC1, 0x60, - 0x06, 0x83, 0xC1, 0x60, - 0x06, 0xFF, 0xC1, 0x7F, - 0x06, 0xFF, 0xC1, 0x7F, + 0x00, 0x20, 0x00, 0x00, + 0x00, 0x30, 0x80, 0x00, + 0x00, 0x30, 0x80, 0x01, + 0x40, 0x30, 0xC0, 0x03, + 0xC0, 0x30, 0xC0, 0x03, + 0xC0, 0x39, 0xC0, 0x72, + 0xC0, 0x7B, 0x60, 0x76, + 0x60, 0x6E, 0x60, 0x1E, + 0x60, 0xCE, 0x6C, 0x0C, + 0x66, 0xC4, 0x6E, 0x0C, + 0x66, 0xC0, 0x3E, 0x00, + 0x2C, 0xC0, 0x3B, 0x00, + 0x3C, 0xC0, 0x39, 0x00, + 0x3C, 0xC0, 0x18, 0x00, + 0x18, 0x40, 0x10, 0x00, + 0x18, 0x40, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -2227,8 +2199,74 @@ static constexpr uint8_t bitmap_sig_square_data[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -static constexpr Bitmap bitmap_sig_square { - { 32, 32 }, bitmap_sig_square_data +static constexpr Bitmap bitmap_sig_noise { + { 32, 32 }, bitmap_sig_noise_data +}; + +static constexpr uint8_t bitmap_icon_back_data[] = { + 0x00, 0x00, + 0x30, 0x00, + 0x38, 0x00, + 0x1C, 0x00, + 0x0E, 0x00, + 0xFF, 0x3F, + 0xFF, 0x7F, + 0x0E, 0xE0, + 0x1C, 0xC0, + 0x38, 0xC0, + 0x30, 0xC0, + 0x00, 0xE0, + 0x00, 0x7F, + 0x00, 0x3F, + 0x00, 0x00, + 0x00, 0x00, +}; +static constexpr Bitmap bitmap_icon_back { + { 16, 16 }, bitmap_icon_back_data +}; + +static constexpr uint8_t bitmap_icon_nrf_data[] = { + 0x00, 0x01, + 0x00, 0x01, + 0x00, 0x01, + 0x00, 0x01, + 0x00, 0x01, + 0x00, 0x01, + 0x00, 0x01, + 0xF8, 0x3F, + 0xFC, 0x7F, + 0xFC, 0x7F, + 0xDC, 0x7F, + 0x8C, 0x6B, + 0xDC, 0x7F, + 0xFC, 0x7F, + 0xFC, 0x7F, + 0xF8, 0x3F, +}; +static constexpr Bitmap bitmap_icon_nrf { + { 16, 16 }, bitmap_icon_nrf_data +}; + +static constexpr uint8_t bitmap_icon_camera_data[] = { + 0x00, 0x00, + 0x00, 0x00, + 0xE0, 0x07, + 0xF0, 0x0F, + 0x3E, 0x7C, + 0xDE, 0x7B, + 0xEE, 0x77, + 0xEE, 0x77, + 0xEE, 0x77, + 0xEE, 0x77, + 0xDE, 0x7B, + 0x3E, 0x7C, + 0xFE, 0x7F, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, +}; +static constexpr Bitmap bitmap_icon_camera { + { 16, 16 }, bitmap_icon_camera_data }; static constexpr uint8_t bitmap_sig_tri_data[] = { @@ -2269,130 +2307,26 @@ static constexpr Bitmap bitmap_sig_tri { { 32, 32 }, bitmap_sig_tri_data }; -static constexpr uint8_t bitmap_stop_data[] = { - 0xFF, 0xFF, - 0xFF, 0xFF, - 0xFF, 0xFF, - 0xFF, 0xFF, - 0xFF, 0xFF, - 0x8B, 0xCD, - 0xDD, 0xAA, - 0xDB, 0xCA, - 0xDB, 0xEA, - 0xDD, 0xED, - 0xFF, 0xFF, - 0xFF, 0xFF, - 0xFF, 0xFF, - 0xFF, 0xFF, - 0xFF, 0xFF, +static constexpr uint8_t bitmap_icon_options_radio_data[] = { 0x00, 0x00, -}; -static constexpr Bitmap bitmap_stop { - { 16, 16 }, bitmap_stop_data -}; - -static constexpr uint8_t bitmap_stripes_data[] = { - 0xFF, 0x03, 0xC0, - 0xFF, 0x01, 0xE0, - 0xFF, 0x00, 0xF0, - 0x7F, 0x00, 0xF8, - 0x3F, 0x00, 0xFC, - 0x1F, 0x00, 0xFE, - 0x0F, 0x00, 0xFF, - 0x07, 0x80, 0xFF, -}; -static constexpr Bitmap bitmap_stripes { - { 24, 8 }, bitmap_stripes_data -}; - -static constexpr uint8_t bitmap_tab_edge_data[] = { - 0x00, - 0x01, - 0x01, - 0x03, - 0x03, - 0x03, - 0x07, - 0x07, - 0x07, - 0x0F, - 0x0F, - 0x0F, - 0x1F, - 0x1F, - 0x1F, - 0x1F, - 0x3F, - 0x3F, - 0x3F, - 0x7F, - 0x7F, - 0x7F, - 0xFF, - 0xFF, -}; -static constexpr Bitmap bitmap_tab_edge { - { 8, 24 }, bitmap_tab_edge_data -}; - -static constexpr uint8_t bitmap_target_data[] = { - 0x80, 0x00, - 0x80, 0x00, - 0xE0, 0x03, - 0x90, 0x04, - 0x88, 0x08, - 0x04, 0x10, - 0x04, 0x10, - 0x1F, 0x7C, - 0x04, 0x10, - 0x04, 0x10, - 0x88, 0x08, - 0x90, 0x04, - 0xE0, 0x03, - 0x80, 0x00, - 0x80, 0x00, 0x00, 0x00, + 0x04, 0x20, + 0x12, 0x48, + 0x8A, 0x51, + 0xCA, 0x53, + 0xCA, 0x53, + 0x8A, 0x51, + 0x12, 0x48, + 0x84, 0x21, + 0xC0, 0x03, + 0x40, 0x02, + 0x60, 0x06, + 0x20, 0x04, + 0x30, 0x0C, + 0xF0, 0x0F, }; -static constexpr Bitmap bitmap_target { - { 16, 16 }, bitmap_target_data -}; - -static constexpr uint8_t bitmap_target_calibrate_data[] = { - 0x02, 0x00, 0x00, 0x40, - 0x07, 0x00, 0x00, 0xE0, - 0x0E, 0x00, 0x00, 0x70, - 0x1C, 0x00, 0x00, 0x38, - 0x38, 0x00, 0x00, 0x1C, - 0x70, 0x00, 0x00, 0x0E, - 0xE0, 0x00, 0x00, 0x07, - 0xC0, 0x01, 0x80, 0x03, - 0x80, 0x03, 0xC0, 0x01, - 0x00, 0x07, 0xE0, 0x00, - 0x00, 0x0E, 0x70, 0x00, - 0x00, 0x1C, 0x38, 0x00, - 0x00, 0x38, 0x1C, 0x00, - 0x00, 0x70, 0x0E, 0x00, - 0x00, 0xE0, 0x07, 0x00, - 0x00, 0xC0, 0x03, 0x00, - 0x00, 0xC0, 0x03, 0x00, - 0x00, 0xE0, 0x07, 0x00, - 0x00, 0x70, 0x0E, 0x00, - 0x00, 0x38, 0x1C, 0x00, - 0x00, 0x1C, 0x38, 0x00, - 0x00, 0x0E, 0x70, 0x00, - 0x00, 0x07, 0xE0, 0x00, - 0x80, 0x03, 0xC0, 0x01, - 0xC0, 0x01, 0x80, 0x03, - 0xE0, 0x00, 0x00, 0x07, - 0x70, 0x00, 0x00, 0x0E, - 0x38, 0x00, 0x00, 0x1C, - 0x1C, 0x00, 0x00, 0x38, - 0x0E, 0x00, 0x00, 0x70, - 0x07, 0x00, 0x00, 0xE0, - 0x02, 0x00, 0x00, 0x40, -}; -static constexpr Bitmap bitmap_target_calibrate { - { 32, 32 }, bitmap_target_calibrate_data +static constexpr Bitmap bitmap_icon_options_radio { + { 16, 16 }, bitmap_icon_options_radio_data }; static constexpr uint8_t bitmap_target_verify_data[] = { @@ -2433,6 +2367,94 @@ static constexpr Bitmap bitmap_target_verify { { 32, 32 }, bitmap_target_verify_data }; +static constexpr uint8_t bitmap_play_data[] = { + 0x00, 0x00, + 0x00, 0x00, + 0x0C, 0x00, + 0x3C, 0x00, + 0xFC, 0x00, + 0xFC, 0x03, + 0xFC, 0x0F, + 0xFC, 0x3F, + 0xFC, 0x3F, + 0xFC, 0x0F, + 0xFC, 0x03, + 0xFC, 0x00, + 0x3C, 0x00, + 0x0C, 0x00, + 0x00, 0x00, + 0x00, 0x00, +}; +static constexpr Bitmap bitmap_play { + { 16, 16 }, bitmap_play_data +}; + +static constexpr uint8_t bitmap_icon_options_ui_data[] = { + 0xFF, 0x1F, + 0xFF, 0x13, + 0xFF, 0x1F, + 0x01, 0x10, + 0x01, 0x10, + 0x01, 0x10, + 0x01, 0x04, + 0x01, 0x0C, + 0x01, 0x1C, + 0x01, 0x3C, + 0xFF, 0x7D, + 0x00, 0xFC, + 0x00, 0x34, + 0x00, 0x20, + 0x00, 0x60, + 0x00, 0x00, +}; +static constexpr Bitmap bitmap_icon_options_ui { + { 16, 16 }, bitmap_icon_options_ui_data +}; + +static constexpr uint8_t bitmap_target_data[] = { + 0x80, 0x00, + 0x80, 0x00, + 0xE0, 0x03, + 0x90, 0x04, + 0x88, 0x08, + 0x04, 0x10, + 0x04, 0x10, + 0x1F, 0x7C, + 0x04, 0x10, + 0x04, 0x10, + 0x88, 0x08, + 0x90, 0x04, + 0xE0, 0x03, + 0x80, 0x00, + 0x80, 0x00, + 0x00, 0x00, +}; +static constexpr Bitmap bitmap_target { + { 16, 16 }, bitmap_target_data +}; + +static constexpr uint8_t bitmap_icon_lge_data[] = { + 0x00, 0x00, + 0x80, 0x00, + 0xA4, 0x12, + 0xA8, 0x0A, + 0xD0, 0x05, + 0xEC, 0x1B, + 0xF0, 0x07, + 0xFE, 0xFF, + 0xF0, 0x07, + 0xEC, 0x1B, + 0xD0, 0x05, + 0xA8, 0x0A, + 0xA4, 0x12, + 0x80, 0x00, + 0x00, 0x00, + 0x00, 0x00, +}; +static constexpr Bitmap bitmap_icon_lge { + { 16, 16 }, bitmap_icon_lge_data +}; + } /* namespace ui */ diff --git a/firmware/application/ui/ui_btngrid.cpp b/firmware/application/ui/ui_btngrid.cpp index 0c756af4e03660247755dfbbc289b055e053756d..2ad7907eb55524615a912563be7d54c0710546f1 100644 --- a/firmware/application/ui/ui_btngrid.cpp +++ b/firmware/application/ui/ui_btngrid.cpp @@ -95,6 +95,15 @@ void BtnGridView::set_parent_rect(const Rect new_parent_rect) { update_items(); } +void BtnGridView::set_arrow_enabled(bool new_value) { + if(new_value){ + add_child(&arrow_more); + } + else{ + remove_child(&arrow_more); + } +}; + void BtnGridView::on_tick_second() { if (more && blink) arrow_more.set_foreground(Color::white()); diff --git a/firmware/application/ui/ui_btngrid.hpp b/firmware/application/ui/ui_btngrid.hpp index 1ce14ccacf7bacd793c990b64ebf6fa6179c3c5e..5f922f78b11a6aca0ed5da85972bcf9c7d121677 100644 --- a/firmware/application/ui/ui_btngrid.hpp +++ b/firmware/application/ui/ui_btngrid.hpp @@ -62,6 +62,7 @@ public: uint32_t highlighted_index(); void set_parent_rect(const Rect new_parent_rect) override; + void set_arrow_enabled(bool new_value); void on_focus() override; void on_blur() override; bool on_key(const KeyEvent event) override; diff --git a/firmware/application/ui/ui_spectrum.cpp b/firmware/application/ui/ui_spectrum.cpp index 9940503716d327b139ef6e0c824bcdac5b1b826e..2a458b969c6eaa0449cfeebee3955347d09826cc 100644 --- a/firmware/application/ui/ui_spectrum.cpp +++ b/firmware/application/ui/ui_spectrum.cpp @@ -120,8 +120,8 @@ void FrequencyScale::paint(Painter& painter) { if (_blink) { const Rect r_cursor { - 120 + cursor_position, r.bottom() - filter_band_height, - 2, filter_band_height + 118 + cursor_position, r.bottom() - filter_band_height, + 5, filter_band_height }; painter.fill_rectangle( r_cursor, diff --git a/firmware/application/ui_navigation.cpp b/firmware/application/ui_navigation.cpp index 7d36f046e0cb3d4c34ccd7fff2caba78e3b39135..01782d891aeabe66a5ceeba2e0e91e449be504d4 100644 --- a/firmware/application/ui_navigation.cpp +++ b/firmware/application/ui_navigation.cpp @@ -30,7 +30,7 @@ #include "bmp_modal_warning.hpp" #include "portapack_persistent_memory.hpp" -#include "ui_about.hpp" +#include "ui_about_simple.hpp" #include "ui_adsb_rx.hpp" #include "ui_adsb_tx.hpp" #include "ui_afsk_rx.hpp" @@ -106,6 +106,7 @@ SystemStatusView::SystemStatusView( &backdrop, &button_back, &title, + &button_title, &button_speaker, &button_stealth, //&button_textentry, @@ -138,6 +139,10 @@ SystemStatusView::SystemStatusView( if (this->on_back) this->on_back(); }; + + button_title.on_select = [this](ImageButton&) { + this->on_title(); + }; button_speaker.on_select = [this](ImageButton&) { this->on_speaker(); @@ -194,8 +199,23 @@ void SystemStatusView::refresh() { } void SystemStatusView::set_back_enabled(bool new_value) { - button_back.set_foreground(new_value ? Color::white() : Color::dark_grey()); - button_back.set_focusable(new_value); + + if(new_value){ + add_child(&button_back); + } + else{ + remove_child(&button_back); + } +} + +void SystemStatusView::set_title_image_enabled(bool new_value) { + + if(new_value){ + add_child(&button_title); + } + else{ + remove_child(&button_title); + } } void SystemStatusView::set_title(const std::string new_value) { @@ -282,6 +302,39 @@ void SystemStatusView::on_camera() { } } +void SystemStatusView::on_title() { + if(nav_.is_top()) + nav_.push<AboutView>(); + else + nav_.pop(); +} + +/* Information View *****************************************************/ + +InformationView::InformationView( + NavigationView& nav +) : nav_ (nav) +{ + static constexpr Style style_infobar { + .font = font::fixed_8x16, + .background = {33, 33, 33}, + .foreground = Color::white(), + }; + + add_children({ + &backdrop, + &version, + <ime + }); + + version.set_style(&style_infobar); + ltime.set_style(&style_infobar); + ltime.set_seconds_enabled(true); + ltime.set_date_enabled(false); + + set_dirty(); +} + /* Navigation ************************************************************/ bool NavigationView::is_top() const { @@ -383,7 +436,7 @@ ReceiversMenuView::ReceiversMenuView(NavigationView& nav) { add_items({ //{ "..", ui::Color::light_grey(),&bitmap_icon_previous, [&nav](){ nav.pop(); } }, { "ADS-B", ui::Color::green(), &bitmap_icon_adsb, [&nav](){ nav.push<ADSBRxView>(); }, }, - { "ACARS", ui::Color::yellow(), &bitmap_icon_adsb, [&nav](){ nav.push<ACARSAppView>(); }, }, + //{ "ACARS", ui::Color::yellow(), &bitmap_icon_adsb, [&nav](){ nav.push<ACARSAppView>(); }, }, { "AIS Boats", ui::Color::green(), &bitmap_icon_ais, [&nav](){ nav.push<AISAppView>(); } }, { "AFSK", ui::Color::yellow(), &bitmap_icon_modem, [&nav](){ nav.push<AFSKRxView>(); } }, { "BTLE", ui::Color::yellow(), &bitmap_icon_btle, [&nav](){ nav.push<BTLERxView>(); } }, @@ -392,7 +445,7 @@ ReceiversMenuView::ReceiversMenuView(NavigationView& nav) { { "Analog TV", ui::Color::yellow(), &bitmap_icon_sstv, [&nav](){ nav.push<AnalogTvView>(); } }, { "ERT Meter", ui::Color::green(), &bitmap_icon_ert, [&nav](){ nav.push<ERTAppView>(); } }, { "POCSAG", ui::Color::green(), &bitmap_icon_pocsag, [&nav](){ nav.push<POCSAGAppView>(); } }, - { "Radiosnde", ui::Color::yellow(), &bitmap_icon_sonde, [&nav](){ nav.push<SondeView>(); } }, + { "Radiosnde", ui::Color::green(), &bitmap_icon_sonde, [&nav](){ nav.push<SondeView>(); } }, { "TPMS Cars", ui::Color::green(), &bitmap_icon_tpms, [&nav](){ nav.push<TPMSAppView>(); } }, /*{ "APRS", ui::Color::dark_grey(), &bitmap_icon_aprs, [&nav](){ nav.push<NotImplementedView>(); } }, { "DMR", ui::Color::dark_grey(), &bitmap_icon_dmr, [&nav](){ nav.push<NotImplementedView>(); } }, @@ -478,6 +531,7 @@ SystemMenuView::SystemMenuView(NavigationView& nav) { //{ "About", ui::Color::cyan(), nullptr, [&nav](){ nav.push<AboutView>(); } } }); set_max_rows(2); // allow wider buttons + set_arrow_enabled(false); //set_highlighted(1); // Startup selection } @@ -498,6 +552,7 @@ SystemView::SystemView( set_style(&style_default); constexpr ui::Dim status_view_height = 16; + constexpr ui::Dim info_view_height = 16; add_child(&status_view); status_view.set_parent_rect({ @@ -513,11 +568,30 @@ SystemView::SystemView( { 0, status_view_height }, { parent_rect.width(), static_cast<ui::Dim>(parent_rect.height() - status_view_height) } }); + + add_child(&info_view); + info_view.set_parent_rect({ + {0, 19 * 16}, + { parent_rect.width(), info_view_height } + }); + navigation_view.on_view_changed = [this](const View& new_view) { + + if(!this->navigation_view.is_top()){ + remove_child(&info_view); + } + else{ + add_child(&info_view); + } + this->status_view.set_back_enabled(!this->navigation_view.is_top()); + this->status_view.set_title_image_enabled(this->navigation_view.is_top()); this->status_view.set_title(new_view.title()); + this->status_view.set_dirty(); + }; + // portapack::persistent_memory::set_playdead_sequence(0x8D1); // Initial view @@ -530,6 +604,9 @@ SystemView::SystemView( if (portapack::persistent_memory::config_splash()) navigation_view.push<BMPView>(); + status_view.set_back_enabled(false); + status_view.set_title_image_enabled(true); + status_view.set_dirty(); //else // navigation_view.push<SystemMenuView>(); diff --git a/firmware/application/ui_navigation.hpp b/firmware/application/ui_navigation.hpp index c5e7d1f86f27fa990f28e5a79fe697974a8b4d77..02aaf1338b7b7a40bac76f590d222e9e659b5568 100644 --- a/firmware/application/ui_navigation.hpp +++ b/firmware/application/ui_navigation.hpp @@ -106,10 +106,11 @@ public: SystemStatusView(NavigationView& nav); void set_back_enabled(bool new_value); + void set_title_image_enabled(bool new_value); void set_title(const std::string new_value); private: - static constexpr auto default_title = "MAYHEM v1.1.1"; // TODO: Move the version somewhere + static constexpr auto default_title = ""; NavigationView& nav_; @@ -130,6 +131,13 @@ private: default_title, }; + ImageButton button_title { + {2, 0, 80, 16}, + &bitmap_titlebar_image, + Color::white(), + Color::dark_grey() + }; + ImageButton button_speaker { { 17 * 8, 0, 2 * 8, 1 * 16 }, &bitmap_icon_speaker_mute, @@ -188,6 +196,7 @@ private: void on_bias_tee(); //void on_textentry(); void on_camera(); + void on_title(); void refresh(); MessageHandlerRegistration message_handler_refresh { @@ -199,6 +208,29 @@ private: }; }; +class InformationView : public View { +public: + InformationView(NavigationView& nav); + +private: + static constexpr auto version_string = "v1.1.1"; + NavigationView& nav_; + + Rectangle backdrop { + { 0, 0 * 16, 240, 16 }, + {33, 33, 33} + }; + + Text version { + {2, 0, 11 * 8, 16}, + version_string + }; + + LiveDateTime ltime { + {174, 0, 8 * 8, 16} + }; +}; + class BMPView : public View { public: BMPView(NavigationView& nav); @@ -253,6 +285,7 @@ public: private: SystemStatusView status_view { navigation_view }; + InformationView info_view { navigation_view }; NavigationView navigation_view { }; Context& context_; }; diff --git a/firmware/baseband/proc_sonde.hpp b/firmware/baseband/proc_sonde.hpp index de15fff0818c4a4be0c9597265fc49c77d52e3fe..92e535803d83eb92bd6744d56cc299661b4248c6 100644 --- a/firmware/baseband/proc_sonde.hpp +++ b/firmware/baseband/proc_sonde.hpp @@ -140,7 +140,8 @@ private: } }; PacketBuilder<BitPattern, NeverMatch, FixedLength> packet_builder_fsk_4800_Vaisala { - { 0b00001000011011010101001110001000, 32, 1 }, + { 0b00001000011011010101001110001000, 32, 1 }, //euquiq Header detects 4 of 8 bytes 0x10B6CA11 /this is in raw format) (these bits are not passed at the beginning of packet) + //{ 0b0000100001101101010100111000100001000100011010010100100000011111, 64, 1 }, //euquiq whole header detection would be 8 bytes. { }, { 320 * 8 }, [this](const baseband::Packet& packet) { diff --git a/firmware/common/sonde_packet.cpp b/firmware/common/sonde_packet.cpp index 22f547938ab7376ce3daffea29cc0b1481513fd5..b1c22430cddf9232cc02f8d13ecc7f362846c9d3 100644 --- a/firmware/common/sonde_packet.cpp +++ b/firmware/common/sonde_packet.cpp @@ -22,9 +22,25 @@ #include "sonde_packet.hpp" #include "string_format.hpp" +#include <cstring> +//#include <complex> namespace sonde { +//Defines for Vaisala RS41, from https://github.com/rs1729/RS/blob/master/rs41/rs41sg.c +#define MASK_LEN 64 +#define pos_FrameNb 0x37 //0x03B // 2 byte +#define pos_SondeID 0x39 //0x03D // 8 byte +#define pos_Voltage 0x041 //0x045 // 3 bytes (but first one is the important one) voltage x 10 ie: 26 = 2.6v +#define pos_CalData 0x04E //0x052 // 1 byte, counter 0x00..0x32 +#define pos_GPSweek 0x091 //0x095 // 2 byte +#define pos_GPSTOW 0x093 //0x097 // 4 byte +#define pos_GPSecefX 0x110 //0x114 // 4 byte +#define pos_GPSecefY 0x114 //0x118 // 4 byte (not actually used since Y and Z are following X, and grabbed in that same loop) +#define pos_GPSecefZ 0x118 //0x11C // 4 byte (same as Y) + +#define PI 3.1415926535897932384626433832795 //3.1416 //(3.1415926535897932384626433832795) + Packet::Packet( const baseband::Packet& packet, const Type type @@ -60,37 +76,65 @@ Packet::Type Packet::type() const { return type_; } -/*uint8_t Packet::vaisala_descramble(const uint32_t pos) { - return reader_raw.read(pos * 8, 8) ^ vaisala_mask[pos & 63]; -};*/ - -uint32_t Packet::GPS_altitude() const { - if ((type_ == Type::Meteomodem_M10) || (type_ == Type::Meteomodem_M2K2)) - return (reader_bi_m.read(22 * 8, 32) / 1000) - 48; - else if (type_ == Type::Vaisala_RS41_SG) { - /*uint32_t altitude_ecef = 0; - for (uint32_t i = 0; i < 4; i++) - altitude_ecef = (altitude_ecef << 8) + vaisala_descramble(0x11C + i);*/ - // TODO: and a bunch of maths (see ecef2elli() from RS1729) - return 0; - } else - return 0; // Unknown -} - -float Packet::GPS_latitude() const { - if ((type_ == Type::Meteomodem_M10) || (type_ == Type::Meteomodem_M2K2)) - return reader_bi_m.read(14 * 8, 32) / ((1ULL << 32) / 360.0); - //else if (type_ == Type::Vaisala_RS41_SG) - // return vaisala_descramble(); - else - return 0; // Unknown -} +//euquiq here: +//RS41SG 320 bits header, 320bytes frame (or more if it is an "extended frame") +//The raw data is xor-scrambled with the values in the 64 bytes vaisala_mask (see.hpp) + + +uint8_t Packet::vaisala_descramble(const uint32_t pos) const { + //return reader_raw.read(pos * 8, 8) ^ vaisala_mask[pos & 63]; + // packet_[i]; its a bit; packet_.size the total (should be 2560 bits) + uint8_t value = 0; + for (uint8_t i = 0; i < 8; i++) + value = (value << 1) | packet_[(pos * 8) + (7 -i)]; //get the byte from the bits collection + + //packetReader reader { packet_ }; //This works just as above. + //value = reader.read(pos * 8,8); + //shift pos because first 4 bytes are consumed by proc_sonde in finding the vaisala signature + uint32_t mask_pos = pos + 4; + value = value ^ vaisala_mask[mask_pos % MASK_LEN]; //descramble with the xor pseudorandom table + return value; +}; + +GPS_data Packet::get_GPS_data() const { + GPS_data result; + if ((type_ == Type::Meteomodem_M10) || (type_ == Type::Meteomodem_M2K2)) { + + result.alt = (reader_bi_m.read(22 * 8, 32) / 1000) - 48; + result.lat = reader_bi_m.read(14 * 8, 32) / ((1ULL << 32) / 360.0); + result.lon = reader_bi_m.read(18 * 8, 32) / ((1ULL << 32) / 360.0); + + } else if (type_ == Type::Vaisala_RS41_SG) { + + uint8_t XYZ_bytes[4]; + int32_t XYZ; // 32bit + double_t X[3]; + for (int32_t k = 0; k < 3; k++) { //Get X,Y,Z ECEF position from GPS + for (int32_t i = 0; i < 4; i++) //each one is 4 bytes (32 bits) + XYZ_bytes[i] = vaisala_descramble(pos_GPSecefX + (4*k) + i); + memcpy(&XYZ, XYZ_bytes, 4); + X[k] = XYZ / 100.0; + } + + double_t a = 6378137.0; + double_t b = 6356752.31424518; + double_t e = sqrt( (a*a - b*b) / (a*a) ); + double_t ee = sqrt( (a*a - b*b) / (b*b) ); + + double_t lam = atan2( X[1] , X[0] ); + double_t p = sqrt( X[0]*X[0] + X[1]*X[1] ); + double_t t = atan2( X[2]*a , p*b ); + double_t phi = atan2( X[2] + ee*ee * b * sin(t)*sin(t)*sin(t) , + p - e*e * a * cos(t)*cos(t)*cos(t) ); + + double_t R = a / sqrt( 1 - e*e*sin(phi)*sin(phi) ); + + result.alt = p / cos(phi) - R; + result.lat = phi*180/PI; + result.lon = lam*180/PI; -float Packet::GPS_longitude() const { - if ((type_ == Type::Meteomodem_M10) || (type_ == Type::Meteomodem_M2K2)) - return reader_bi_m.read(18 * 8, 32) / ((1ULL << 32) / 360.0); - else - return 0; // Unknown + } + return result; } uint32_t Packet::battery_voltage() const { @@ -98,8 +142,13 @@ uint32_t Packet::battery_voltage() const { return (reader_bi_m.read(69 * 8, 8) + (reader_bi_m.read(70 * 8, 8) << 8)) * 1000 / 150; else if (type_ == Type::Meteomodem_M2K2) return reader_bi_m.read(69 * 8, 8) * 66; // Actually 65.8 - else + else if (type_ == Type::Vaisala_RS41_SG) { + uint32_t voltage = vaisala_descramble(pos_Voltage) * 100; //byte 69 = voltage * 10 (check if this value needs to be multiplied) + return voltage; + } + else { return 0; // Unknown + } } std::string Packet::type_string() const { @@ -127,12 +176,33 @@ std::string Packet::serial_number() const { to_string_dec_uint(reader_bi_m.read(93 * 8 + 24, 3), 1) + to_string_dec_uint(reader_bi_m.read(93 * 8 + 27, 13), 4, '0'); - } else + } else if(type() == Type::Vaisala_RS41_SG) { + std::string serial_id = ""; + uint8_t achar; + for (uint8_t i=0; i<8; i++) { //euquiq: Serial ID is 8 bytes long, each byte a char + achar = vaisala_descramble(pos_SondeID + i); + if (achar < 32 || achar > 126) return "?"; //Maybe there are ids with less than 8 bytes and this is not OK. + serial_id += (char)achar; + } + return serial_id; + } else return "?"; } FormattedSymbols Packet::symbols_formatted() const { - return format_symbols(decoder_); + if (type() == Type::Vaisala_RS41_SG) { //Euquiq: now we distinguish different types + uint32_t bytes = packet_.size() / 8; //Need the byte amount, which if full, it SHOULD be 320 size() should return 2560 + std::string hex_data; + std::string hex_error; + hex_data.reserve(bytes * 2); //2 hexa chars per byte + hex_error.reserve(1); + for (uint32_t i=0; i < bytes; i++) //log will show the packet starting on the last 4 bytes from signature 93DF1A60 + hex_data += to_string_hex(vaisala_descramble(i),2); + return { hex_data, hex_error }; + + } else { + return format_symbols(decoder_); + } } bool Packet::crc_ok() const { diff --git a/firmware/common/sonde_packet.hpp b/firmware/common/sonde_packet.hpp index 4ecbc08a475e09e8337e72b2029fdc227c859294..746d42e3117d2a20bd0ba8a6c159c5d41bc5b1b8 100644 --- a/firmware/common/sonde_packet.hpp +++ b/firmware/common/sonde_packet.hpp @@ -32,6 +32,12 @@ namespace sonde { + struct GPS_data { + uint32_t alt { 0 }; + float lat { 0 }; + float lon { 0 }; + }; + class Packet { public: enum class Type : uint32_t { @@ -41,7 +47,7 @@ public: Meteomodem_M2K2 = 3, Vaisala_RS41_SG = 4, }; - + Packet(const baseband::Packet& packet, const Type type); size_t length() const; @@ -56,9 +62,7 @@ public: std::string serial_number() const; uint32_t battery_voltage() const; - uint32_t GPS_altitude() const; - float GPS_latitude() const; - float GPS_longitude() const; + GPS_data get_GPS_data() const; FormattedSymbols symbols_formatted() const; @@ -75,17 +79,20 @@ private: 0xD0, 0xBC, 0xB4, 0xB6, 0x06, 0xAA, 0xF4, 0x23, 0x78, 0x6E, 0x3B, 0xAE, 0xBF, 0x7B, 0x4C, 0xC1 }; + + GPS_data ecef_to_gps() const; - //uint8_t vaisala_descramble(const uint32_t pos); + uint8_t vaisala_descramble(uint32_t pos) const; const baseband::Packet packet_; const BiphaseMDecoder decoder_; const FieldReader<BiphaseMDecoder, BitRemapNone> reader_bi_m; Type type_; + using packetReader = FieldReader<baseband::Packet, BitRemapByteReverse>; //baseband::Packet instead of BiphaseMDecoder bool crc_ok_M10() const; }; } /* namespace sonde */ -#endif/*__SONDE_PACKET_H__*/ +#endif/*__SONDE_PACKET_H__*/ \ No newline at end of file diff --git a/firmware/common/ui_widget.cpp b/firmware/common/ui_widget.cpp index 01639e0c5ec3cd5eaf4dac6e3c8aad389f7a80ff..ee586f840e0537cefea6dff8cc63e5a982ff86de 100644 --- a/firmware/common/ui_widget.cpp +++ b/firmware/common/ui_widget.cpp @@ -409,10 +409,26 @@ void Labels::paint(Painter& painter) { void LiveDateTime::on_tick_second() { rtcGetTime(&RTCD1, &datetime); + text = ""; - text = to_string_dec_uint(datetime.month(), 2, '0') + "/" + to_string_dec_uint(datetime.day(), 2, '0') + " " + - to_string_dec_uint(datetime.hour(), 2, '0') + ":" + to_string_dec_uint(datetime.minute(), 2, '0'); + if(date_enabled){ + text = to_string_dec_uint(datetime.month(), 2, '0') + "/" + to_string_dec_uint(datetime.day(), 2, '0') + " "; + } + text = text + to_string_dec_uint(datetime.hour(), 2, '0') + ":" + to_string_dec_uint(datetime.minute(), 2, '0'); + + if(seconds_enabled){ + text += ":"; + + if(init_delay==0) + text += to_string_dec_uint(datetime.second(), 2, '0'); + else + { + // Placeholder while the seconds are not updated + text += "XX"; + init_delay--; + } + } set_dirty(); } @@ -444,6 +460,14 @@ void LiveDateTime::paint(Painter& painter) { ); } +void LiveDateTime::set_date_enabled(bool new_value){ + this->date_enabled = new_value; +} + +void LiveDateTime::set_seconds_enabled(bool new_value) { + this->seconds_enabled = new_value; +} + /* BigFrequency **********************************************************/ BigFrequency::BigFrequency( @@ -625,7 +649,8 @@ void Console::write(std::string message) { void Console::writeln(std::string message) { write(message); - crlf(); + write("\n"); + //crlf(); } void Console::paint(Painter&) { diff --git a/firmware/common/ui_widget.hpp b/firmware/common/ui_widget.hpp index 61ffeb7258125103085e40dbb03f4cd8e8cb192c..51de42773a9539f299ff32ce9696f1325e7cdde2 100644 --- a/firmware/common/ui_widget.hpp +++ b/firmware/common/ui_widget.hpp @@ -243,7 +243,10 @@ public: ~LiveDateTime(); void paint(Painter& painter) override; - + + void set_seconds_enabled(bool new_value); + void set_date_enabled(bool new_value); + std::string& string() { return text; } @@ -251,6 +254,10 @@ public: private: void on_tick_second(); + uint16_t init_delay = 4; + bool date_enabled = true; + bool seconds_enabled = false; + rtc::RTC datetime { }; SignalToken signal_token_tick_second { }; std::string text { }; diff --git a/firmware/graphics/titlebar_image.png b/firmware/graphics/titlebar_image.png new file mode 100644 index 0000000000000000000000000000000000000000..2c65c09428ee08bdc86ff495449f1f3c6305c7f2 Binary files /dev/null and b/firmware/graphics/titlebar_image.png differ