From e73c22786039103b865ee51442b9be7c6425c793 Mon Sep 17 00:00:00 2001 From: zxkmm Date: Sat, 28 Sep 2024 22:05:39 +0800 Subject: [PATCH 01/27] copy paste from afsk --- firmware/application/external/external.cmake | 199 +- firmware/application/external/external.ld | 7 +- firmware/application/external/random/main.cpp | 82 + .../application/external/random/ui_random.cpp | 142 + .../application/external/random/ui_random.hpp | 133 + firmware/graphics/key.png | Bin 0 -> 5218 bytes firmware/tools/bitmap_tools/bitmap.hpp | 6068 +++++++++++++++++ 7 files changed, 6533 insertions(+), 98 deletions(-) create mode 100644 firmware/application/external/random/main.cpp create mode 100644 firmware/application/external/random/ui_random.cpp create mode 100644 firmware/application/external/random/ui_random.hpp create mode 100644 firmware/graphics/key.png create mode 100644 firmware/tools/bitmap_tools/bitmap.hpp diff --git a/firmware/application/external/external.cmake b/firmware/application/external/external.cmake index 8bc794ec..5aaf8d77 100644 --- a/firmware/application/external/external.cmake +++ b/firmware/application/external/external.cmake @@ -1,125 +1,130 @@ set(EXTCPPSRC - #tetris - external/tetris/main.cpp - external/tetris/ui_tetris.cpp + #tetris + external/tetris/main.cpp + external/tetris/ui_tetris.cpp - #afsk_rx - external/afsk_rx/main.cpp - external/afsk_rx/ui_afsk_rx.cpp + #afsk_rx + external/afsk_rx/main.cpp + external/afsk_rx/ui_afsk_rx.cpp - #calculator - external/calculator/main.cpp - external/calculator/ui_calculator.cpp + #calculator + external/calculator/main.cpp + external/calculator/ui_calculator.cpp - #font_viewer - external/font_viewer/main.cpp - external/font_viewer/ui_font_viewer.cpp + #font_viewer + external/font_viewer/main.cpp + external/font_viewer/ui_font_viewer.cpp - #blespam - external/blespam/main.cpp - external/blespam/ui_blespam.cpp + #blespam + external/blespam/main.cpp + external/blespam/ui_blespam.cpp - #analogtv - external/analogtv/main.cpp - external/analogtv/analog_tv_app.cpp + #analogtv + external/analogtv/main.cpp + external/analogtv/analog_tv_app.cpp - #nrf_rx - external/nrf_rx/main.cpp - external/nrf_rx/ui_nrf_rx.cpp + #nrf_rx + external/nrf_rx/main.cpp + external/nrf_rx/ui_nrf_rx.cpp - #coasterp - external/coasterp/main.cpp - external/coasterp/ui_coasterp.cpp + #coasterp + external/coasterp/main.cpp + external/coasterp/ui_coasterp.cpp - #lge - external/lge/main.cpp - external/lge/lge_app.cpp + #lge + external/lge/main.cpp + external/lge/lge_app.cpp - #lcr - external/lcr/main.cpp - external/lcr/ui_lcr.cpp + #lcr + external/lcr/main.cpp + external/lcr/ui_lcr.cpp - #jammer - external/jammer/main.cpp - external/jammer/ui_jammer.cpp + #jammer + external/jammer/main.cpp + external/jammer/ui_jammer.cpp - #gpssim - external/gpssim/main.cpp - external/gpssim/gps_sim_app.cpp + #gpssim + external/gpssim/main.cpp + external/gpssim/gps_sim_app.cpp - #spainter - external/spainter/main.cpp - external/spainter/ui_spectrum_painter.cpp - external/spainter/ui_spectrum_painter_text.cpp - external/spainter/ui_spectrum_painter_image.cpp + #spainter + external/spainter/main.cpp + external/spainter/ui_spectrum_painter.cpp + external/spainter/ui_spectrum_painter_text.cpp + external/spainter/ui_spectrum_painter_image.cpp - #keyfob - external/keyfob/main.cpp - external/keyfob/ui_keyfob.cpp - external/keyfob/ui_keyfob.hpp + #keyfob + external/keyfob/main.cpp + external/keyfob/ui_keyfob.cpp + external/keyfob/ui_keyfob.hpp - #extsensors - external/extsensors/main.cpp - external/extsensors/ui_extsensors.cpp - external/extsensors/ui_extsensors.hpp + #extsensors + external/extsensors/main.cpp + external/extsensors/ui_extsensors.cpp + external/extsensors/ui_extsensors.hpp - #foxhunt - external/foxhunt/main.cpp - external/foxhunt/ui_foxhunt_rx.cpp - external/foxhunt/ui_foxhunt_rx.hpp + #foxhunt + external/foxhunt/main.cpp + external/foxhunt/ui_foxhunt_rx.cpp + external/foxhunt/ui_foxhunt_rx.hpp - #audio_test - external/audio_test/main.cpp - external/audio_test/ui_audio_test.cpp + #audio_test + external/audio_test/main.cpp + external/audio_test/ui_audio_test.cpp - #wardrivemap - external/wardrivemap/main.cpp - external/wardrivemap/ui_wardrivemap.cpp + #wardrivemap + external/wardrivemap/main.cpp + external/wardrivemap/ui_wardrivemap.cpp - #tpmsrx - external/tpmsrx/main.cpp - external/tpmsrx/tpms_app.cpp + #tpmsrx + external/tpmsrx/main.cpp + external/tpmsrx/tpms_app.cpp - #protoview - external/protoview/main.cpp - external/protoview/ui_protoview.cpp + #protoview + external/protoview/main.cpp + external/protoview/ui_protoview.cpp - #adsbtx - external/adsbtx/main.cpp - external/adsbtx/ui_adsb_tx.cpp + #adsbtx + external/adsbtx/main.cpp + external/adsbtx/ui_adsb_tx.cpp - #morse_tx - external/morse_tx/main.cpp - external/morse_tx/ui_morse.cpp + #morse_tx + external/morse_tx/main.cpp + external/morse_tx/ui_morse.cpp - #sstvtx - external/sstvtx/main.cpp - external/sstvtx/ui_sstvtx.cpp + #sstvtx + external/sstvtx/main.cpp + external/sstvtx/ui_sstvtx.cpp + + #random + external/random/main.cpp + external/random/ui_random.cpp ) set(EXTAPPLIST - afsk_rx - calculator - font_viewer - blespam - nrf_rx - analogtv - coasterp - lge - lcr - jammer - gpssim - spainter - keyfob - tetris - extsensors - foxhunt_rx - audio_test - wardrivemap - tpmsrx - protoview - adsbtx - morse_tx - sstvtx + afsk_rx + calculator + font_viewer + blespam + nrf_rx + analogtv + coasterp + lge + lcr + jammer + gpssim + spainter + keyfob + tetris + extsensors + foxhunt_rx + audio_test + wardrivemap + tpmsrx + protoview + adsbtx + morse_tx + sstvtx + random ) diff --git a/firmware/application/external/external.ld b/firmware/application/external/external.ld index 932c76a6..3a26ea5e 100644 --- a/firmware/application/external/external.ld +++ b/firmware/application/external/external.ld @@ -46,6 +46,7 @@ MEMORY ram_external_app_adsbtx(rwx) : org = 0xADC50000, len = 32k ram_external_app_morse_tx(rwx) : org = 0xADC60000, len = 32k ram_external_app_sstvtx(rwx) : org = 0xADC70000, len = 32k + ram_external_app_random(rwx) : org = 0xADC80000, len = 32k } SECTIONS @@ -190,6 +191,10 @@ SECTIONS *(*ui*external_app*sstvtx*); } > ram_external_app_sstvtx - + .external_app_random : ALIGN(4) SUBALIGN(4) + { + KEEP(*(.external_app.app_random.application_information)); + *(*ui*external_app*random*); + } > ram_external_app_random } diff --git a/firmware/application/external/random/main.cpp b/firmware/application/external/random/main.cpp new file mode 100644 index 00000000..fb180918 --- /dev/null +++ b/firmware/application/external/random/main.cpp @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2023 Bernd Herzog + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include "ui.hpp" +#include "ui_random.hpp" +#include "ui_navigation.hpp" +#include "external_app.hpp" + +namespace ui::external_app::random { +void initialize_app(ui::NavigationView& nav) { + nav.push(); +} +} // namespace ui::external_app::random + +extern "C" { + +__attribute__((section(".external_app.app_random.application_information"), used)) application_information_t _application_information_random = { + /*.memory_location = */ (uint8_t*)0x00000000, + /*.externalAppEntry = */ ui::external_app::random::initialize_app, + /*.header_version = */ CURRENT_HEADER_VERSION, + /*.app_version = */ VERSION_MD5, + + /*.app_name = */ "random", + /*.bitmap_data = */ { + 0xC0, + 0x03, + 0xE0, + 0x07, + 0x30, + 0x0C, + 0x30, + 0x0C, + 0x30, + 0x0C, + 0x30, + 0x0C, + 0xE0, + 0x07, + 0xC0, + 0x03, + 0x80, + 0x01, + 0x80, + 0x01, + 0x80, + 0x01, + 0x80, + 0x01, + 0x80, + 0x07, + 0x80, + 0x03, + 0x80, + 0x07, + 0x80, + 0x01, + }, + /*.icon_color = */ ui::Color::yellow().v, + /*.menu_location = */ app_location_t::RX, + + /*.m4_app_tag = portapack::spi_flash::image_tag_afsk_rx */ {'P', 'A', 'F', 'R'}, + /*.m4_app_offset = */ 0x00000000, // will be filled at compile time +}; +} diff --git a/firmware/application/external/random/ui_random.cpp b/firmware/application/external/random/ui_random.cpp new file mode 100644 index 00000000..95a785bf --- /dev/null +++ b/firmware/application/external/random/ui_random.cpp @@ -0,0 +1,142 @@ +/* + * Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc. + * Copyright (C) 2017 Furrtek + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include "ui_random.hpp" +#include "ui_modemsetup.hpp" + +#include "modems.hpp" +#include "audio.hpp" +#include "rtc_time.hpp" +#include "baseband_api.hpp" +#include "string_format.hpp" +#include "portapack_persistent_memory.hpp" +#include "file_path.hpp" + +using namespace portapack; +using namespace modems; +using namespace ui; + +namespace ui::external_app::random { + +void RandomLogger::log_raw_data(const std::string& data) { + log_file.write_entry(data); +} + +void RandomView::focus() { + field_frequency.focus(); +} + +RandomView::RandomView(NavigationView& nav) + : nav_{nav} { + baseband::run_prepared_image(portapack::memory::map::m4_code.base()); + + add_children({&rssi, + &channel, + &field_rf_amp, + &field_lna, + &field_vga, + &field_volume, + &field_frequency, + &check_log, + &text_debug, + &button_modem_setup, + &console}); + + // Auto-configure modem for LCR RX (TODO remove) + field_frequency.set_value(467225500); + auto def_bell202 = &modem_defs[0]; + persistent_memory::set_modem_baudrate(def_bell202->baudrate); + serial_format_t serial_format; + serial_format.data_bits = 7; + serial_format.parity = EVEN; + serial_format.stop_bits = 1; + serial_format.bit_order = LSB_FIRST; + persistent_memory::set_serial_format(serial_format); + + field_frequency.set_step(100); + + check_log.set_value(logging); + check_log.on_select = [this](Checkbox&, bool v) { + logging = v; + }; + + button_modem_setup.on_select = [&nav](Button&) { + nav.push(); + }; + + logger = std::make_unique(); + if (logger) + logger->append(logs_dir / u"AFSK.TXT"); + + // Auto-configure modem for LCR RX (will be removed later) + baseband::set_afsk(persistent_memory::modem_baudrate(), 8, 0, false); + + audio::set_rate(audio::Rate::Hz_24000); + audio::output::start(); + + receiver_model.enable(); +} + +void RandomView::on_data(uint32_t value, bool is_data) { + std::string str_console = "\x1B"; + std::string str_byte = ""; + + if (is_data) { + // Colorize differently after message splits + str_console += (char)((console_color & 3) + 9); + + // Directly print the received value without decoding + str_console += "[" + to_string_hex(value, 2) + "]"; + str_byte += "[" + to_string_hex(value, 2) + "]"; + + console.write(str_console); + + if (logger && logging) str_log += str_byte; + + if ((value != 0x7F) && (prev_value == 0x7F)) { + // Message split + console.writeln(""); + console_color++; + + if (logger && logging) { + logger->log_raw_data(str_log); + str_log = ""; + } + } + prev_value = value; + } else { + // Baudrate estimation + text_debug.set("Baudrate estimation: ~" + to_string_dec_uint(value)); + } +} + +void RandomView::on_freqchg(int64_t freq) { + field_frequency.set_value(freq); +} + +RandomView::~RandomView() { + audio::output::stop(); + receiver_model.disable(); + baseband::shutdown(); +} + +} // namespace ui::external_app::random diff --git a/firmware/application/external/random/ui_random.hpp b/firmware/application/external/random/ui_random.hpp new file mode 100644 index 00000000..0243795c --- /dev/null +++ b/firmware/application/external/random/ui_random.hpp @@ -0,0 +1,133 @@ +/* + * Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc. + * Copyright (C) 2017 Furrtek + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __UI_AFSK_RX_H__ +#define __UI_AFSK_RX_H__ + +#include "ui.hpp" +#include "ui_language.hpp" +#include "ui_navigation.hpp" +#include "ui_receiver.hpp" +#include "ui_freq_field.hpp" +#include "ui_record_view.hpp" +#include "app_settings.hpp" +#include "radio_state.hpp" +#include "log_file.hpp" +#include "utility.hpp" + +using namespace ui; + +namespace ui::external_app::random { + +class RandomLogger { + public: + Optional append(const std::filesystem::path& filename) { + return log_file.append(filename); + } + + void log_raw_data(const std::string& data); + + private: + LogFile log_file{}; +}; + +class RandomView : public View { + public: + RandomView(NavigationView& nav); + ~RandomView(); + + void focus() override; + + std::string title() const override { return "AFSK RX"; }; + + private: + void on_data(uint32_t value, bool is_data); + + NavigationView& nav_; + RxRadioState radio_state_{}; + app_settings::SettingsManager settings_{ + "rx_afsk", app_settings::Mode::RX}; + + uint8_t console_color{0}; + uint32_t prev_value{0}; + std::string str_log{""}; + bool logging{false}; + + RFAmpField field_rf_amp{ + {13 * 8, 0 * 16}}; + LNAGainField field_lna{ + {15 * 8, 0 * 16}}; + VGAGainField field_vga{ + {18 * 8, 0 * 16}}; + RSSI rssi{ + {21 * 8, 0, 6 * 8, 4}}; + Channel channel{ + {21 * 8, 5, 6 * 8, 4}}; + + AudioVolumeField field_volume{ + {28 * 8, 0 * 16}}; + + RxFrequencyField field_frequency{ + {0 * 8, 0 * 16}, + nav_}; + + Checkbox check_log{ + {0 * 8, 1 * 16}, + 3, + LanguageHelper::currentMessages[LANG_LOG], + false}; + + Text text_debug{ + {0 * 8, 12 + 2 * 16, screen_width, 16}, + LanguageHelper::currentMessages[LANG_DEBUG]}; + + Button button_modem_setup{ + {screen_width - 12 * 8, 1 * 16, 96, 24}, + LanguageHelper::currentMessages[LANG_MODEM_SETUP]}; + + Console console{ + {0, 4 * 16, 240, screen_width}}; + + void on_data_afsk(const AFSKDataMessage& message); + + std::unique_ptr logger{}; + + MessageHandlerRegistration message_handler_packet{ + Message::ID::AFSKData, + [this](Message* const p) { + const auto message = static_cast(p); + this->on_data(message->value, message->is_data); + }}; + + MessageHandlerRegistration message_handler_freqchg{ + Message::ID::FreqChangeCommand, + [this](Message* const p) { + const auto message = static_cast(p); + this->on_freqchg(message->freq); + }}; + + void on_freqchg(int64_t freq); +}; + +} // namespace ui::external_app::random + +#endif /*__UI_AFSK_RX_H__*/ diff --git a/firmware/graphics/key.png b/firmware/graphics/key.png new file mode 100644 index 0000000000000000000000000000000000000000..4328e0d9f741b9e1ce50779f4bd7085e639acb6e GIT binary patch literal 5218 zcmeHLdu$VR9KUXkjlsr%ZM@^93p&8-J$ilIWn~#_VMRJBEs8h{*Sp`9gY`l0wsn)C zVThuO_<*PgB1V)Lz{ljFC=)OOCO%Pt_?kfxHHv}(6(fG{+I3qbF-zbdvo^o}Uf=KM z_x*mp-`}^ruJ+f?D99h1k6~DWx5hmO`XasMWy5DVF)RSx2WXyG_If8{c`yM<(>0h$ zmw{&LHO?|+W4hKVXd_^(%jj*aDaYvBVLUE9UJK*$w2ZDpo3gM1=r=%PU|bCS^U#!g zQfKXhvHr?4-iJU%m+0I8j?VR?$<83#_=d4}UD8qPO8)nk#4RQFf( z2-vq$sjl{WtE=&NA|@;K2*Z*aS|4)N9P}68Jv*>v?&QM8qK3o%joaGpbACFxc=NQa zCG#7o=I^g%m74i=<8zL!Xsf(`Ztke?f(dmwRlnrEbz;BwL(k0D$w{x=`|JL1TQ^*I z@9TXRvCTKh>pv;UX5U!+?1-iGBMVBhUpT#=S`i${bhLBcnFrL?FAg5Mu($mEv->W5 z_d`G}&0c0++CD~JmuySQ9gE{%USHVp^tKV3My`3{WBk{$VG$|jS_1vk| z2j2>9Zd+F_O_)fRw?z)Lo;)bWP3SK^$d#UZKj-6)%k3{E`7iyiy&mSr; zI-aw>;j_P|?)vG};I2Cd?f7k1=SP@a>3w1M&cnk$=q#wK+igR`_Iz#{v}x#xwG)oa zp7_nVH!qH94U~@FlhbnS^H+DixAaf!8Rh09F0+Bl!&qM?&A1_= zEpeIWK^|4d5(sB4tc4;xNu`l7PtC_G5|Yf%aZgV}z|3V{q-k-UB%7L=EKOEREDjYB^JeXOd%9&&|GFS?Bm_`MdChR20p5$ zSpYuBq!1@*3q?jEWN!^s^E3iT+Mvs7sKMqqBIh7A){qd9rx8W9vfdDqn9+|nBSLR}W4P1X5KzzH_L1)P-4F&T zpO1IP#0K3wuiItT&*!C>s7Smq6rD213XGkwg&ZQm(oRGONR$b|MzONh;iT+rs27ws zs%k=1L^>3JTNJ>NCB)I9L=!ffY$I5S0|*IXYj@fl6tZ%nEYrOpW+xQLN};~DRXUUe zP$*<&?TB*{cAFinVL6H5oUA~wNS3Wun<&zPWI#zGKRuR+2oO#sB7_kckA{s6op8R& z?{%3O3)QpYuNO2K6kO(6O0*%_vk_DxD4+>Co3w**u#C;Y(yWzZ9gZHMn^8iAOw=)r z+G*_QVd23UAXd=x6ab8M@P)5VAVG^Ig0Wb=%bcmYnQb3jCrQu*x1b>a&D7ywcO9NW zIe98&z7FS$Ns8S3U()*J!7D%>LSCb&aDKC~l)6y?v@|tKP3sloD&e?sDR@Clxu6P- zD8(>frMARHLNtt^dZg2}dtJFqDlm-1*;&R(a1Of@q9%xh;IvT$YYlM@2P1|APBd7^ zpsO)iYZ4NuDhxaVSCF2@HxyoO1Zq-W>83?Uj{*=zP#nQH48rWZl}-~zUVRtA52q|U z?1V&fx?^^MaMB@`unTqvC$f|*+E8DkuYimCcXMACD@eU8b_cbB{8!jh0=?=eP?K7N z`V8fs%+&idXAqLB`AVnT)jR^n2M*~MzXNm)(A6&n`XxM&T?2IWi-CR#4`kOBqbtAX zi4jHNhh7sr4;H;Mwh6G)kQ zj_z8vH7|SR8vIDfn^f`9`H!{C%<)Hr1EC?S^2@WaGjmOcE%>`zKoRqLYTY}gEnM*r Dug2NR literal 0 HcmV?d00001 diff --git a/firmware/tools/bitmap_tools/bitmap.hpp b/firmware/tools/bitmap_tools/bitmap.hpp new file mode 100644 index 00000000..ea143823 --- /dev/null +++ b/firmware/tools/bitmap_tools/bitmap.hpp @@ -0,0 +1,6068 @@ +/* + * Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc. + * Copyright (C) 2016 Furrtek + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +// This file was generated by make_bitmap.py + +#ifndef __BITMAP_HPP__ +#define __BITMAP_HPP__ + +#include "ui.hpp" + +namespace ui { + +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_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_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 Bitmap bitmap_icon_bht{ + {16, 16}, + bitmap_icon_bht_data}; + +static constexpr uint8_t bitmap_icon_cut_data[] = { + 0x00, + 0x00, + 0x10, + 0x10, + 0x30, + 0x18, + 0x20, + 0x08, + 0x60, + 0x0C, + 0x40, + 0x04, + 0xC0, + 0x06, + 0x80, + 0x00, + 0x80, + 0x01, + 0x80, + 0x01, + 0xC0, + 0x03, + 0x78, + 0x1E, + 0x44, + 0x22, + 0x44, + 0x22, + 0x44, + 0x22, + 0x38, + 0x1C, +}; +static constexpr Bitmap bitmap_icon_cut{ + {16, 16}, + bitmap_icon_cut_data}; + +static constexpr uint8_t bitmap_icon_codetx_data[] = { + 0x00, + 0x00, + 0xF0, + 0x07, + 0x0C, + 0x18, + 0x03, + 0x60, + 0xE0, + 0x03, + 0x18, + 0x0C, + 0x04, + 0x10, + 0xC0, + 0x01, + 0x20, + 0x02, + 0x00, + 0x00, + 0x00, + 0x00, + 0xBB, + 0x6D, + 0x2A, + 0x49, + 0x2A, + 0x49, + 0x3A, + 0x49, + 0x00, + 0x00, +}; +static constexpr Bitmap bitmap_icon_codetx{ + {16, 16}, + bitmap_icon_codetx_data}; + +static constexpr uint8_t bitmap_sig_saw_up_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, + 0x06, + 0x00, + 0x01, + 0x70, + 0x06, + 0x80, + 0x01, + 0x78, + 0x06, + 0xC0, + 0x01, + 0x7C, + 0x06, + 0xE0, + 0x01, + 0x6E, + 0x06, + 0xF0, + 0x01, + 0x67, + 0x06, + 0xB8, + 0x81, + 0x63, + 0x06, + 0x9C, + 0xC1, + 0x61, + 0x06, + 0x8E, + 0xE1, + 0x60, + 0x06, + 0x87, + 0x71, + 0x60, + 0x86, + 0x83, + 0x39, + 0x60, + 0xC6, + 0x81, + 0x1D, + 0x60, + 0xE6, + 0x80, + 0x0F, + 0x60, + 0x76, + 0x80, + 0x07, + 0x60, + 0x3E, + 0x80, + 0x03, + 0x60, + 0x1E, + 0x80, + 0x01, + 0x60, + 0x0E, + 0x80, + 0x00, + 0x60, + 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_saw_up{ + {32, 32}, + bitmap_sig_saw_up_data}; + +static constexpr uint8_t bitmap_icon_thermometer_data[] = { + 0xC0, + 0x00, + 0x20, + 0x01, + 0x10, + 0x02, + 0x10, + 0x3A, + 0x10, + 0x02, + 0x10, + 0x1A, + 0x10, + 0x02, + 0xD0, + 0x3A, + 0xD0, + 0x02, + 0xD0, + 0x1A, + 0xD0, + 0x02, + 0xE8, + 0x05, + 0xE8, + 0x05, + 0xC8, + 0x04, + 0x10, + 0x02, + 0xE0, + 0x01, +}; +static constexpr Bitmap bitmap_icon_thermometer{ + {16, 16}, + bitmap_icon_thermometer_data}; + +static constexpr uint8_t bitmap_icon_previous_data[] = { + 0x00, + 0x00, + 0xC0, + 0x00, + 0xE0, + 0x00, + 0x70, + 0x00, + 0x38, + 0x00, + 0x1C, + 0x00, + 0x0E, + 0x00, + 0xFF, + 0xFF, + 0xFF, + 0xFF, + 0x0E, + 0x00, + 0x1C, + 0x00, + 0x38, + 0x00, + 0x70, + 0x00, + 0xE0, + 0x00, + 0xC0, + 0x00, + 0x00, + 0x00, +}; +static constexpr Bitmap bitmap_icon_previous{ + {16, 16}, + bitmap_icon_previous_data}; + +static constexpr uint8_t bitmap_icon_rename_data[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 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_rename{ + {16, 16}, + bitmap_icon_rename_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_key_data[] = { + 0xC0, + 0x03, + 0xE0, + 0x07, + 0x30, + 0x0C, + 0x30, + 0x0C, + 0x30, + 0x0C, + 0x30, + 0x0C, + 0xE0, + 0x07, + 0xC0, + 0x03, + 0x80, + 0x01, + 0x80, + 0x01, + 0x80, + 0x01, + 0x80, + 0x01, + 0x80, + 0x07, + 0x80, + 0x03, + 0x80, + 0x07, + 0x80, + 0x01, +}; +static constexpr Bitmap bitmap_key{ + {16, 16}, + bitmap_key_data}; + +static constexpr uint8_t bitmap_icon_speaker_data[] = { + 0x00, + 0x00, + 0x40, + 0x10, + 0x60, + 0x20, + 0x70, + 0x44, + 0x78, + 0x48, + 0x7F, + 0x91, + 0x7F, + 0x92, + 0x7F, + 0x92, + 0x7F, + 0x92, + 0x7F, + 0x92, + 0x7F, + 0x92, + 0x7F, + 0x91, + 0x78, + 0x48, + 0x70, + 0x44, + 0x60, + 0x20, + 0x40, + 0x10, +}; +static constexpr Bitmap bitmap_icon_speaker{ + {16, 16}, + bitmap_icon_speaker_data}; + +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, + 0xF8, + 0x1F, + 0xE0, + 0x07, +}; +static constexpr Bitmap bitmap_icon_capture{ + {16, 16}, + bitmap_icon_capture_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, + 0x00, + 0x00, +}; +static constexpr Bitmap bitmap_icon_options_touch{ + {16, 16}, + bitmap_icon_options_touch_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, + 0x00, + 0x00, +}; +static constexpr Bitmap bitmap_icon_pocsag{ + {16, 16}, + bitmap_icon_pocsag_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, + 0x00, +}; +static constexpr Bitmap bitmap_icon_file_image{ + {16, 16}, + bitmap_icon_file_image_data}; + +static constexpr uint8_t bitmap_icon_adsb_data[] = { + 0x80, + 0x01, + 0xC0, + 0x03, + 0xC0, + 0x03, + 0xC0, + 0x03, + 0xC0, + 0x03, + 0xE0, + 0x07, + 0xF8, + 0x1F, + 0xFE, + 0x7F, + 0xFF, + 0xFF, + 0xFF, + 0xFF, + 0xC0, + 0x03, + 0xC0, + 0x03, + 0xC0, + 0x03, + 0xE0, + 0x07, + 0xF0, + 0x0F, + 0xF8, + 0x1F, +}; +static constexpr Bitmap bitmap_icon_adsb{ + {16, 16}, + bitmap_icon_adsb_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_paste_data[] = { + 0x00, + 0x00, + 0xE0, + 0x00, + 0x18, + 0x03, + 0xE4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x84, + 0x3F, + 0x84, + 0x20, + 0x84, + 0x2E, + 0x84, + 0x20, + 0x84, + 0x2E, + 0x84, + 0x20, + 0x84, + 0x2E, + 0xF8, + 0x20, + 0x80, + 0x3F, + 0x00, + 0x00, +}; +static constexpr Bitmap bitmap_icon_paste{ + {16, 16}, + bitmap_icon_paste_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_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_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_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_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, + 0x00, + 0x00, +}; +static constexpr Bitmap bitmap_icon_biast_on{ + {16, 16}, + bitmap_icon_biast_on_data}; + +static constexpr uint8_t bitmap_icon_paint_data[] = { + 0xFE, + 0x3F, + 0xFF, + 0x3F, + 0xFF, + 0xFF, + 0xFF, + 0xBF, + 0xFE, + 0xBF, + 0x00, + 0x80, + 0x80, + 0xFF, + 0x80, + 0x00, + 0x80, + 0x00, + 0xC0, + 0x01, + 0xC0, + 0x01, + 0xC0, + 0x01, + 0xC0, + 0x01, + 0xC0, + 0x01, + 0xC0, + 0x01, + 0xC0, + 0x01, +}; +static constexpr Bitmap bitmap_icon_paint{ + {16, 16}, + bitmap_icon_paint_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_clean_data[] = { + 0x00, + 0x00, + 0xC0, + 0x01, + 0x20, + 0x02, + 0xFC, + 0x1F, + 0x00, + 0x00, + 0x08, + 0x08, + 0xE8, + 0x08, + 0xA8, + 0x09, + 0xA8, + 0x0B, + 0x28, + 0x0A, + 0x28, + 0x0A, + 0x28, + 0x0A, + 0xE8, + 0x0B, + 0x08, + 0x08, + 0xF0, + 0x07, + 0x00, + 0x00, +}; +static constexpr Bitmap bitmap_icon_clean{ + {16, 16}, + bitmap_icon_clean_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_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_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 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_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 uint8_t bitmap_icon_tpms_data[] = { + 0xC0, + 0x03, + 0xF0, + 0x0F, + 0x18, + 0x18, + 0xEC, + 0x37, + 0x36, + 0x6D, + 0x3A, + 0x59, + 0x4B, + 0xD5, + 0x8B, + 0xD3, + 0xCB, + 0xD1, + 0xAB, + 0xD2, + 0x9A, + 0x5C, + 0xB6, + 0x6C, + 0xEC, + 0x37, + 0x18, + 0x18, + 0xF0, + 0x0F, + 0xC0, + 0x03, +}; +static constexpr Bitmap bitmap_icon_tpms{ + {16, 16}, + bitmap_icon_tpms_data}; + +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_sig_saw_down{ + {32, 32}, + bitmap_sig_saw_down_data}; + +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_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_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_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_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_tetra{ + {16, 16}, + bitmap_icon_tetra_data}; + +static constexpr uint8_t bitmap_icon_protoview_data[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 0xF8, + 0x87, + 0x08, + 0x84, + 0x0F, + 0xFC, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xE0, + 0x92, + 0xA0, + 0x9E, + 0xBF, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFC, + 0xF3, + 0x04, + 0x12, + 0x07, + 0x1E, +}; +static constexpr Bitmap bitmap_icon_protoview{ + {16, 16}, + bitmap_icon_protoview_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_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_sdcard{ + {16, 16}, + bitmap_icon_sdcard_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_bulb_on_data[] = { + 0x04, + 0x3C, + 0x20, + 0x08, + 0xFF, + 0x10, + 0x90, + 0xFF, + 0x09, + 0xC0, + 0xFF, + 0x03, + 0xE0, + 0xFF, + 0x07, + 0xE0, + 0xFF, + 0x07, + 0xF0, + 0xE7, + 0x0F, + 0xF0, + 0xBD, + 0x0F, + 0xF7, + 0xBD, + 0xEF, + 0xF0, + 0xDB, + 0x0F, + 0xF0, + 0xDB, + 0x0F, + 0xE0, + 0xDB, + 0x07, + 0xE0, + 0xCB, + 0x07, + 0xC0, + 0xD3, + 0x03, + 0x90, + 0xCB, + 0x09, + 0x08, + 0xFD, + 0x10, + 0x04, + 0xE3, + 0x20, + 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_on{ + {24, 24}, + bitmap_bulb_on_data}; + +static constexpr uint8_t bitmap_icon_rds_data[] = { + 0x00, + 0x00, + 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, + 0x00, + 0x00, + 0x00, + 0x00, +}; +static constexpr Bitmap bitmap_icon_rds{ + {16, 16}, + bitmap_icon_rds_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 Bitmap bitmap_sig_cw{ + {32, 32}, + bitmap_sig_cw_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_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_icon_load_data[] = { + 0x00, + 0x01, + 0x80, + 0x03, + 0x40, + 0x05, + 0x00, + 0x01, + 0x0E, + 0x01, + 0x11, + 0x01, + 0x7F, + 0x1D, + 0x01, + 0x20, + 0xF9, + 0xFF, + 0xF9, + 0xFF, + 0xFD, + 0x7F, + 0xFD, + 0x7F, + 0xFF, + 0x3F, + 0xFF, + 0x3F, + 0xFF, + 0x1F, + 0xFF, + 0x1F, +}; +static constexpr Bitmap bitmap_icon_load{ + {16, 16}, + bitmap_icon_load_data}; + +static constexpr uint8_t bitmap_icon_trim_data[] = { + 0x10, + 0x10, + 0x30, + 0x12, + 0x50, + 0x15, + 0x50, + 0x15, + 0x50, + 0x15, + 0x52, + 0x95, + 0x56, + 0xD5, + 0x5F, + 0xF5, + 0x56, + 0xD5, + 0x52, + 0x95, + 0x50, + 0x15, + 0x50, + 0x15, + 0x50, + 0x15, + 0x90, + 0x18, + 0x10, + 0x10, + 0x00, + 0x00, +}; +static constexpr Bitmap bitmap_icon_trim{ + {16, 16}, + bitmap_icon_trim_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_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_arrow_right_data[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x0C, + 0x00, + 0x1C, + 0xFE, + 0x3F, + 0xFE, + 0x7F, + 0xFE, + 0x3F, + 0x00, + 0x1C, + 0x00, + 0x0C, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, +}; +static constexpr Bitmap bitmap_arrow_right{ + {16, 16}, + bitmap_arrow_right_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, + 0x00, + 0x00, +}; +static constexpr Bitmap bitmap_icon_utilities{ + {16, 16}, + bitmap_icon_utilities_data}; + +static constexpr uint8_t bitmap_icon_speaker_and_headphones_data[] = { + 0x20, + 0x10, + 0x30, + 0x20, + 0x38, + 0x44, + 0x3E, + 0x48, + 0x3E, + 0x91, + 0x3E, + 0x92, + 0x38, + 0x92, + 0x30, + 0x92, + 0x20, + 0x92, + 0x00, + 0x92, + 0x30, + 0x91, + 0x48, + 0x48, + 0x84, + 0x44, + 0x84, + 0x20, + 0x86, + 0x11, + 0x86, + 0x01, +}; +static constexpr Bitmap bitmap_icon_speaker_and_headphones{ + {16, 16}, + bitmap_icon_speaker_and_headphones_data}; + +static constexpr uint8_t bitmap_icon_tetris_data[] = { + 0xF8, + 0xFF, + 0x88, + 0x88, + 0x88, + 0x88, + 0x88, + 0x88, + 0xF8, + 0xFF, + 0x80, + 0x08, + 0x80, + 0x08, + 0x9F, + 0x08, + 0x91, + 0x0F, + 0x11, + 0x00, + 0x11, + 0x00, + 0xFF, + 0xF1, + 0x11, + 0x91, + 0x11, + 0x91, + 0x11, + 0x91, + 0xFF, + 0xF1, +}; +static constexpr Bitmap bitmap_icon_tetris{ + {16, 16}, + bitmap_icon_tetris_data}; + +static constexpr uint8_t bitmap_icon_brightness_data[] = { + 0x00, + 0x00, + 0x80, + 0x01, + 0x84, + 0x21, + 0x08, + 0x10, + 0xC0, + 0x03, + 0xE0, + 0x07, + 0xF0, + 0x0F, + 0xF6, + 0x6F, + 0xF6, + 0x6F, + 0xF0, + 0x0F, + 0xE0, + 0x07, + 0xC0, + 0x03, + 0x08, + 0x10, + 0x84, + 0x21, + 0x80, + 0x01, + 0x00, + 0x00, +}; +static constexpr Bitmap bitmap_icon_brightness{ + {16, 16}, + bitmap_icon_brightness_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_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, + 0xF8, + 0x1F, + 0xFC, + 0x3F, + 0xFC, + 0x3F, +}; +static constexpr Bitmap bitmap_icon_nuoptix{ + {16, 16}, + bitmap_icon_nuoptix_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 Bitmap bitmap_icon_ais{ + {16, 16}, + bitmap_icon_ais_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_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, + 0x00, + 0x00, +}; +static constexpr Bitmap bitmap_sd_card_unknown{ + {16, 16}, + bitmap_sd_card_unknown_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, + 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_noise{ + {32, 32}, + bitmap_sig_noise_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 Bitmap bitmap_icon_aprs{ + {16, 16}, + bitmap_icon_aprs_data}; + +static constexpr uint8_t bitmap_icon_save_data[] = { + 0xFC, + 0x07, + 0x0A, + 0x0A, + 0x0A, + 0x12, + 0xF2, + 0x21, + 0x02, + 0x20, + 0x02, + 0x20, + 0x02, + 0x20, + 0x02, + 0x20, + 0xFA, + 0x27, + 0xFA, + 0x2F, + 0x0A, + 0x28, + 0xFA, + 0x2F, + 0x0A, + 0x28, + 0xFA, + 0x2F, + 0xFC, + 0x1F, + 0x00, + 0x00, +}; +static constexpr Bitmap bitmap_icon_save{ + {16, 16}, + bitmap_icon_save_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_shift_data[] = { + 0x00, + 0x00, + 0x80, + 0x00, + 0xC0, + 0x01, + 0xE0, + 0x03, + 0xF0, + 0x07, + 0xF8, + 0x0F, + 0xFC, + 0x1F, + 0xE0, + 0x03, + 0xE0, + 0x03, + 0xE0, + 0x03, + 0x20, + 0x02, + 0xE0, + 0x03, + 0x20, + 0x02, + 0xE0, + 0x03, + 0x00, + 0x00, + 0x00, + 0x00, +}; +static constexpr Bitmap bitmap_icon_shift{ + {16, 16}, + bitmap_icon_shift_data}; + +static constexpr uint8_t bitmap_icon_batt_icon_data[] = { + 0xC0, + 0x03, + 0xC0, + 0x03, + 0xF0, + 0x0F, + 0x10, + 0x08, + 0x10, + 0x08, + 0x10, + 0x08, + 0x10, + 0x08, + 0x10, + 0x08, + 0xF0, + 0x0F, + 0xF0, + 0x0F, + 0xF0, + 0x0F, + 0xF0, + 0x0F, + 0xF0, + 0x0F, + 0xF0, + 0x0F, + 0xF0, + 0x0F, + 0x00, + 0x00, +}; +static constexpr Bitmap bitmap_icon_batt_icon{ + {16, 16}, + bitmap_icon_batt_icon_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_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_icon_sleep{ + {16, 16}, + bitmap_icon_sleep_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_icon_copy_data[] = { + 0x00, + 0x00, + 0xFC, + 0x00, + 0x84, + 0x01, + 0xC4, + 0x0F, + 0x74, + 0x18, + 0x44, + 0x38, + 0x44, + 0x78, + 0x74, + 0x40, + 0x44, + 0x44, + 0x44, + 0x44, + 0x74, + 0x5F, + 0x44, + 0x44, + 0x44, + 0x44, + 0x7C, + 0x40, + 0xC0, + 0x7F, + 0x00, + 0x00, +}; +static constexpr Bitmap bitmap_icon_copy{ + {16, 16}, + bitmap_icon_copy_data}; + +static constexpr uint8_t bitmap_icon_burger_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, + 0x00, + 0x00, +}; +static constexpr Bitmap bitmap_icon_burger{ + {16, 16}, + bitmap_icon_burger_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_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_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_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_arrow_left_data[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x30, + 0x00, + 0x38, + 0x00, + 0xFC, + 0x7F, + 0xFE, + 0x7F, + 0xFC, + 0x7F, + 0x38, + 0x00, + 0x30, + 0x00, + 0x20, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, +}; +static constexpr Bitmap bitmap_arrow_left{ + {16, 16}, + bitmap_arrow_left_data}; + +static constexpr uint8_t bitmap_icon_add_data[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x80, + 0x01, + 0x80, + 0x01, + 0x80, + 0x01, + 0x80, + 0x01, + 0xF8, + 0x1F, + 0xF8, + 0x1F, + 0x80, + 0x01, + 0x80, + 0x01, + 0x80, + 0x01, + 0x80, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, +}; +static constexpr Bitmap bitmap_icon_add{ + {16, 16}, + bitmap_icon_add_data}; + +static constexpr uint8_t bitmap_icon_upconvert_data[] = { + 0x80, + 0x01, + 0xC0, + 0x03, + 0xE0, + 0x07, + 0xF0, + 0x0F, + 0xF8, + 0x1F, + 0x80, + 0x01, + 0x80, + 0x01, + 0x80, + 0x01, + 0x80, + 0x01, + 0x00, + 0x00, + 0x77, + 0x77, + 0x51, + 0x51, + 0x33, + 0x53, + 0x51, + 0x51, + 0x51, + 0x77, + 0x00, + 0x80, +}; +static constexpr Bitmap bitmap_icon_upconvert{ + {16, 16}, + bitmap_icon_upconvert_data}; + +static constexpr uint8_t bitmap_icon_sd_data[] = { + 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, + 0x00, + 0x00, + 0x00, + 0x00, +}; +static constexpr Bitmap bitmap_icon_sd{ + {16, 16}, + bitmap_icon_sd_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_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_icon_font_viewer_data[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 0x10, + 0x0C, + 0x38, + 0x0C, + 0x38, + 0x0C, + 0x6C, + 0x0C, + 0x6C, + 0x0C, + 0xC6, + 0x7C, + 0xFE, + 0xFC, + 0xFF, + 0x8D, + 0x83, + 0x8D, + 0x83, + 0xFD, + 0x01, + 0x7D, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, +}; +static constexpr Bitmap bitmap_icon_font_viewer{ + {16, 16}, + bitmap_icon_font_viewer_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, + 0x00, + 0x00, +}; +static constexpr Bitmap bitmap_icon_rename_numeric{ + {16, 16}, + bitmap_icon_rename_numeric_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_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_soundboard{ + {16, 16}, + bitmap_icon_soundboard_data}; + +static constexpr uint8_t bitmap_icon_new_dir_data[] = { + 0x00, + 0x00, + 0x1E, + 0x00, + 0x21, + 0x00, + 0xE1, + 0x7F, + 0x01, + 0xC0, + 0x81, + 0x81, + 0x81, + 0x81, + 0x81, + 0x81, + 0xF1, + 0x8F, + 0xF1, + 0x8F, + 0x81, + 0x81, + 0x81, + 0x81, + 0x81, + 0x81, + 0x03, + 0xC0, + 0xFE, + 0x7F, + 0x00, + 0x00, +}; +static constexpr Bitmap bitmap_icon_new_dir{ + {16, 16}, + bitmap_icon_new_dir_data}; + +static constexpr uint8_t bitmap_icon_hide_data[] = { + 0x00, + 0x00, + 0x00, + 0x40, + 0x00, + 0x20, + 0xE0, + 0x17, + 0x18, + 0x18, + 0xC4, + 0x27, + 0x62, + 0x42, + 0x21, + 0x85, + 0xA1, + 0x84, + 0x62, + 0x46, + 0xA4, + 0x23, + 0x18, + 0x18, + 0xE8, + 0x07, + 0x04, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, +}; +static constexpr Bitmap bitmap_icon_hide{ + {16, 16}, + bitmap_icon_hide_data}; + +static constexpr uint8_t bitmap_icon_qr_code_data[] = { + 0x00, + 0x00, + 0xFE, + 0x7E, + 0xC6, + 0x62, + 0xFA, + 0x5A, + 0xFA, + 0x5A, + 0xDA, + 0x5A, + 0xFE, + 0x7E, + 0x7E, + 0x7E, + 0x00, + 0x00, + 0xFE, + 0x46, + 0xC2, + 0x06, + 0xFA, + 0x18, + 0xFA, + 0x18, + 0xC6, + 0x60, + 0xFE, + 0x62, + 0x00, + 0x00, +}; +static constexpr Bitmap bitmap_icon_qr_code{ + {16, 16}, + bitmap_icon_qr_code_data}; + +static constexpr uint8_t bitmap_sig_sine_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, + 0x03, + 0xC0, + 0x00, + 0x80, + 0x07, + 0xE0, + 0x01, + 0xC0, + 0x0F, + 0xF0, + 0x03, + 0xC0, + 0x0C, + 0x30, + 0x03, + 0x60, + 0x18, + 0x18, + 0x06, + 0x60, + 0x18, + 0x18, + 0x06, + 0x60, + 0x18, + 0x18, + 0x06, + 0x60, + 0x18, + 0x18, + 0x06, + 0x30, + 0x30, + 0x0C, + 0x0C, + 0x30, + 0x30, + 0x0C, + 0x0C, + 0x30, + 0x30, + 0x0C, + 0x0C, + 0x30, + 0x30, + 0x0C, + 0x0C, + 0x18, + 0x60, + 0x06, + 0x18, + 0x1E, + 0xE0, + 0x07, + 0x78, + 0x0E, + 0xC0, + 0x03, + 0x70, + 0x06, + 0x80, + 0x01, + 0x60, + 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_sine{ + {32, 32}, + bitmap_sig_sine_data}; + +static constexpr uint8_t bitmap_icon_touchtunes_data[] = { + 0xE0, + 0x07, + 0x30, + 0x0C, + 0x7C, + 0x3E, + 0xC4, + 0x23, + 0x26, + 0x64, + 0x12, + 0x48, + 0x0F, + 0xF3, + 0x09, + 0x95, + 0x0F, + 0xF1, + 0x09, + 0x91, + 0x0F, + 0xF1, + 0xC9, + 0x91, + 0xE9, + 0x91, + 0xC9, + 0x90, + 0x0F, + 0xF0, + 0xFF, + 0xFF, +}; +static constexpr Bitmap bitmap_icon_touchtunes{ + {16, 16}, + bitmap_icon_touchtunes_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 Bitmap bitmap_icon_tools_antenna{ + {16, 16}, + bitmap_icon_tools_antenna_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, + 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 uint8_t bitmap_icon_looking_data[] = { + 0xF8, + 0x01, + 0xFC, + 0x03, + 0x0E, + 0x07, + 0x07, + 0x0E, + 0xF3, + 0x0C, + 0x9F, + 0x0F, + 0x9F, + 0x0F, + 0xF3, + 0x0C, + 0x07, + 0x0E, + 0x0E, + 0x07, + 0xFC, + 0x1F, + 0xF8, + 0x3D, + 0x00, + 0x7C, + 0x00, + 0xF8, + 0x00, + 0xF0, + 0x00, + 0x60, +}; +static constexpr Bitmap bitmap_icon_looking{ + {16, 16}, + bitmap_icon_looking_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_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_target_verify_data[] = { + 0x00, + 0xE0, + 0x07, + 0x00, + 0x00, + 0xFC, + 0x3F, + 0x00, + 0x00, + 0x1F, + 0xF8, + 0x00, + 0xC0, + 0x03, + 0xC0, + 0x03, + 0xE0, + 0x00, + 0x00, + 0x07, + 0x70, + 0x00, + 0x00, + 0x0E, + 0x38, + 0x00, + 0x00, + 0x1C, + 0x18, + 0x00, + 0x00, + 0x18, + 0x0C, + 0x00, + 0x00, + 0x30, + 0x0C, + 0x00, + 0x00, + 0x30, + 0x06, + 0x00, + 0x00, + 0x60, + 0x06, + 0x00, + 0x00, + 0x60, + 0x06, + 0x00, + 0x00, + 0x60, + 0x03, + 0x80, + 0x01, + 0xC0, + 0x03, + 0x80, + 0x01, + 0xC0, + 0x03, + 0xE0, + 0x07, + 0xC0, + 0x03, + 0xE0, + 0x07, + 0xC0, + 0x03, + 0x80, + 0x01, + 0xC0, + 0x03, + 0x80, + 0x01, + 0xC0, + 0x06, + 0x00, + 0x00, + 0x60, + 0x06, + 0x00, + 0x00, + 0x60, + 0x06, + 0x00, + 0x00, + 0x60, + 0x0C, + 0x00, + 0x00, + 0x30, + 0x0C, + 0x00, + 0x00, + 0x30, + 0x18, + 0x00, + 0x00, + 0x18, + 0x38, + 0x00, + 0x00, + 0x1C, + 0x70, + 0x00, + 0x00, + 0x0E, + 0xE0, + 0x00, + 0x00, + 0x07, + 0xC0, + 0x03, + 0xC0, + 0x03, + 0x00, + 0x1F, + 0xF8, + 0x00, + 0x00, + 0xFC, + 0x3F, + 0x00, + 0x00, + 0xE0, + 0x07, + 0x00, +}; +static constexpr Bitmap bitmap_target_verify{ + {32, 32}, + bitmap_target_verify_data}; + +static constexpr uint8_t bitmap_icon_fox_data[] = { + 0x18, + 0x18, + 0x28, + 0x14, + 0x68, + 0x16, + 0x68, + 0x16, + 0xC8, + 0x13, + 0x88, + 0x11, + 0x04, + 0x20, + 0x24, + 0x24, + 0x22, + 0x44, + 0x01, + 0x80, + 0x06, + 0x60, + 0x98, + 0x19, + 0x20, + 0x04, + 0x40, + 0x02, + 0x80, + 0x01, + 0x00, + 0x00, +}; +static constexpr Bitmap bitmap_icon_fox{ + {16, 16}, + bitmap_icon_fox_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, + 0x00, +}; +static constexpr Bitmap bitmap_icon_dmr{ + {16, 16}, + bitmap_icon_dmr_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_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_peripherals_details{ + {16, 16}, + bitmap_icon_peripherals_details_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_options_radio_data[] = { + 0x00, + 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_icon_options_radio{ + {16, 16}, + bitmap_icon_options_radio_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 Bitmap bitmap_icon_delete{ + {16, 16}, + bitmap_icon_delete_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_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_icon_trash_data[] = { + 0x00, + 0x00, + 0xC0, + 0x01, + 0x20, + 0x02, + 0xFC, + 0x1F, + 0x00, + 0x00, + 0xA8, + 0x0A, + 0xA8, + 0x0A, + 0xA8, + 0x0A, + 0xA8, + 0x0A, + 0xA8, + 0x0A, + 0xA8, + 0x0A, + 0xA8, + 0x0A, + 0xA8, + 0x0A, + 0x08, + 0x08, + 0xF0, + 0x07, + 0x00, + 0x00, +}; +static constexpr Bitmap bitmap_icon_trash{ + {16, 16}, + bitmap_icon_trash_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}; + +static constexpr uint8_t bitmap_icon_new_file_data[] = { + 0x00, + 0x00, + 0xFC, + 0x07, + 0x04, + 0x0C, + 0x04, + 0x1C, + 0x04, + 0x3C, + 0x84, + 0x21, + 0x84, + 0x21, + 0x84, + 0x21, + 0xF4, + 0x2F, + 0xF4, + 0x2F, + 0x84, + 0x21, + 0x84, + 0x21, + 0x84, + 0x21, + 0x04, + 0x20, + 0xFC, + 0x3F, + 0x00, + 0x00, +}; +static constexpr Bitmap bitmap_icon_new_file{ + {16, 16}, + bitmap_icon_new_file_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_sd_card_ok_data[] = { + 0x00, + 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_sd_card_ok{ + {16, 16}, + bitmap_sd_card_ok_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_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_notepad{ + {16, 16}, + bitmap_icon_notepad_data}; + +static constexpr uint8_t bitmap_sig_tri_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, + 0x03, + 0xC0, + 0x00, + 0x00, + 0x03, + 0xC0, + 0x00, + 0x80, + 0x07, + 0xE0, + 0x01, + 0x80, + 0x07, + 0xE0, + 0x01, + 0xC0, + 0x0C, + 0x30, + 0x03, + 0xC0, + 0x0C, + 0x30, + 0x03, + 0x60, + 0x18, + 0x18, + 0x06, + 0x60, + 0x18, + 0x18, + 0x06, + 0x30, + 0x30, + 0x0C, + 0x0C, + 0x30, + 0x30, + 0x0C, + 0x0C, + 0x18, + 0x60, + 0x06, + 0x18, + 0x18, + 0x60, + 0x06, + 0x18, + 0x0E, + 0xC0, + 0x03, + 0x70, + 0x0E, + 0xC0, + 0x03, + 0x70, + 0x06, + 0x80, + 0x01, + 0x60, + 0x06, + 0x80, + 0x01, + 0x60, + 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_tri{ + {32, 32}, + bitmap_sig_tri_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_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_speaker_mute{ + {16, 16}, + bitmap_icon_speaker_mute_data}; + +static constexpr uint8_t bitmap_icon_downconvert_data[] = { + 0x00, + 0x00, + 0x77, + 0x77, + 0x51, + 0x51, + 0x33, + 0x53, + 0x51, + 0x51, + 0x51, + 0x77, + 0x00, + 0x80, + 0x80, + 0x01, + 0x80, + 0x01, + 0x80, + 0x01, + 0x80, + 0x01, + 0xF8, + 0x1F, + 0xF0, + 0x0F, + 0xE0, + 0x07, + 0xC0, + 0x03, + 0x80, + 0x01, +}; +static constexpr Bitmap bitmap_icon_downconvert{ + {16, 16}, + bitmap_icon_downconvert_data}; + +static constexpr uint8_t bitmap_icon_peripherals_data[] = { + 0x54, + 0x01, + 0x54, + 0x01, + 0xFF, + 0x07, + 0x7C, + 0x01, + 0xBF, + 0x07, + 0xDC, + 0x18, + 0x6F, + 0x10, + 0x2C, + 0x21, + 0xAF, + 0x20, + 0x34, + 0x20, + 0x54, + 0x10, + 0xC0, + 0x38, + 0x00, + 0x77, + 0x00, + 0xE0, + 0x00, + 0xC0, + 0x00, + 0x00, +}; +static constexpr Bitmap bitmap_icon_peripherals{ + {16, 16}, + bitmap_icon_peripherals_data}; + +static constexpr uint8_t bitmap_icon_batt_text_data[] = { + 0x00, + 0x00, + 0x30, + 0x06, + 0x48, + 0x09, + 0x48, + 0x09, + 0x70, + 0x0E, + 0x40, + 0x08, + 0x30, + 0x06, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x20, + 0x00, + 0x10, + 0x00, + 0x48, + 0x00, + 0x00, + 0x00, +}; +static constexpr Bitmap bitmap_icon_batt_text{ + {16, 16}, + bitmap_icon_batt_text_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_icon_scanner_data[] = { + 0x03, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0x0F, + 0x00, + 0x00, + 0x00, + 0x03, + 0x01, + 0x80, + 0x01, + 0xC3, + 0x00, + 0xE0, + 0xFF, + 0xEF, + 0xFF, + 0xC0, + 0x00, + 0x83, + 0x01, + 0x00, + 0x01, + 0x03, + 0x00, + 0x00, + 0x00, +}; +static constexpr Bitmap bitmap_icon_scanner{ + {16, 16}, + bitmap_icon_scanner_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_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_microphone{ + {16, 16}, + bitmap_icon_microphone_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_more_data[] = { + 0x10, + 0x10, + 0x10, + 0x10, + 0x54, + 0x38, + 0x10, + 0x00, +}; +static constexpr Bitmap bitmap_more{ + {8, 8}, + bitmap_more_data}; + +static constexpr uint8_t bitmap_icon_speaker_and_headphones_mute_data[] = { + 0x40, + 0x00, + 0x60, + 0x44, + 0x70, + 0x6C, + 0x7C, + 0x38, + 0x7C, + 0x10, + 0x7C, + 0x38, + 0x70, + 0x6C, + 0x60, + 0x44, + 0x40, + 0x00, + 0x00, + 0x44, + 0x30, + 0x6C, + 0x48, + 0x38, + 0x84, + 0x10, + 0x84, + 0x38, + 0x86, + 0x6D, + 0x86, + 0x45, +}; +static constexpr Bitmap bitmap_icon_speaker_and_headphones_mute{ + {16, 16}, + bitmap_icon_speaker_and_headphones_mute_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, + 0x00, + 0x00, +}; +static constexpr Bitmap bitmap_icon_biast_off{ + {16, 16}, + bitmap_icon_biast_off_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 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}; + +} /* namespace ui */ + +#endif/*__BITMAP_HPP__*/ From c06f1715441a246fe38c59d49c47863f8cebbd83 Mon Sep 17 00:00:00 2001 From: zxkmm Date: Sat, 28 Sep 2024 22:40:08 +0800 Subject: [PATCH 02/27] add generate thing --- .../application/external/random/ui_random.cpp | 106 +++++++++++++++++- .../application/external/random/ui_random.hpp | 58 +++++++++- 2 files changed, 161 insertions(+), 3 deletions(-) diff --git a/firmware/application/external/random/ui_random.cpp b/firmware/application/external/random/ui_random.cpp index 95a785bf..af84ec18 100644 --- a/firmware/application/external/random/ui_random.cpp +++ b/firmware/application/external/random/ui_random.cpp @@ -59,7 +59,18 @@ RandomView::RandomView(NavigationView& nav) &check_log, &text_debug, &button_modem_setup, - &console}); + &console, + &labels, + &text_generated_passwd, + &text_char_type_hints, + &check_digits, + &check_latin_lower, + &check_latin_upper, + &check_punctuation, + &button_refresh, + &button_show_qr, + &field_digits, + &check_allow_confusable_chars}); // Auto-configure modem for LCR RX (TODO remove) field_frequency.set_value(467225500); @@ -83,6 +94,44 @@ RandomView::RandomView(NavigationView& nav) nav.push(); }; + check_digits.on_select = [this](Checkbox&, bool) { + this->new_password(); + }; + + check_latin_lower.on_select = [this](Checkbox&, bool) { + this->new_password(); + }; + + check_latin_upper.on_select = [this](Checkbox&, bool) { + this->new_password(); + }; + + check_punctuation.on_select = [this](Checkbox&, bool) { + this->new_password(); + }; + + check_allow_confusable_chars.on_select = [this](Checkbox&, bool) { + this->new_password(); + }; + + button_refresh.on_select = [this](Button&) { + this->new_password(); + }; + + button_show_qr.on_select = [this](Button&) { + // TODO + }; + + field_digits.on_change = [this](int32_t) { + this->new_password(); + }; + + /// v init setting + check_digits.set_value(true); + check_latin_lower.set_value(true); + field_digits.set_value(8); + ///^ init setting + logger = std::make_unique(); if (logger) logger->append(logs_dir / u"AFSK.TXT"); @@ -94,6 +143,7 @@ RandomView::RandomView(NavigationView& nav) audio::output::start(); receiver_model.enable(); + new_password(); } void RandomView::on_data(uint32_t value, bool is_data) { @@ -101,6 +151,7 @@ void RandomView::on_data(uint32_t value, bool is_data) { std::string str_byte = ""; if (is_data) { + seed = static_cast(value); // Colorize differently after message splits str_console += (char)((console_color & 3) + 9); @@ -133,6 +184,59 @@ void RandomView::on_freqchg(int64_t freq) { field_frequency.set_value(freq); } +void RandomView::new_password() { + std::string charset; + std::string password; + std::string char_type_hints; + + if (check_digits.value()) + charset += "0123456789"; + if (check_latin_lower.value()) + charset += "abcdefghijklmnopqrstuvwxyz"; + if (check_latin_upper.value()) + charset += "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + if (check_punctuation.value()) + charset += ".,-!?"; + + if (!check_allow_confusable_chars.value()) { + charset.erase(std::remove_if(charset.begin(), charset.end(), + [](char c) { return c == '0' || c == 'O' || c == 'o' || c == '1' || c == 'l'; }), + charset.end()); + } + + if (charset.empty()) { + text_generated_passwd.set("generate failed,"); + text_char_type_hints.set("select at least 1 type"); + + return; + } + + if (seed == 0) { + text_generated_passwd.set("generate failed,"); + text_char_type_hints.set("random seed exception"); + }else { + std::srand(seed); // extern void srand (unsigned int __seed) __THROW; + } + + int password_length = field_digits.value(); + for (int i = 0; i < password_length; i++) { + char c = charset[std::rand() % charset.length()]; + password += c; + + if (std::isdigit(c)) + char_type_hints += "1"; + else if (std::islower(c)) + char_type_hints += "a"; + else if (std::isupper(c)) + char_type_hints += "A"; + else + char_type_hints += ","; + } + + text_generated_passwd.set(password); + text_char_type_hints.set(char_type_hints); +} + RandomView::~RandomView() { audio::output::stop(); receiver_model.disable(); diff --git a/firmware/application/external/random/ui_random.hpp b/firmware/application/external/random/ui_random.hpp index 0243795c..004c30b5 100644 --- a/firmware/application/external/random/ui_random.hpp +++ b/firmware/application/external/random/ui_random.hpp @@ -57,10 +57,13 @@ class RandomView : public View { void focus() override; - std::string title() const override { return "AFSK RX"; }; + std::string title() const override { return "random"; }; private: + unsigned int seed = 0; // extern void srand (unsigned int __seed) __THROW; + void on_data(uint32_t value, bool is_data); + void new_password(); NavigationView& nav_; RxRadioState radio_state_{}; @@ -105,7 +108,58 @@ class RandomView : public View { LanguageHelper::currentMessages[LANG_MODEM_SETUP]}; Console console{ - {0, 4 * 16, 240, screen_width}}; + {0, 3 * 16, 240, 16}}; + + Labels labels{ + {{5 * 8, 9 * 16}, "digits:", Theme::getInstance()->fg_light->foreground}}; + + Text text_generated_passwd{ + {0, 5 * 16, screen_width, 28}, + "000000000000000000000000000000"}; + + Text text_char_type_hints{ + {0, 6 * 16, screen_width, 28}, + "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"}; + + Checkbox check_digits{ + {3 * 8, 13 * 16}, + 3, + "123"}; + + Checkbox check_punctuation{ + {20 * 8, 13 * 16}, + 6, + ".,-!?"}; + + Checkbox check_latin_lower{ + {3 * 8, 15 * 16}, + 3, + "abc"}; + + Checkbox check_latin_upper{ + {20 * 8, 15 * 16}, + 3, + "ABC"}; + + Checkbox check_allow_confusable_chars{ + {3 * 8, 11 * 16}, + 20, + "Include 0 O o 1 l"}; + + Button button_refresh{ + {0 * 8, 17 * 16 + 10, screen_width / 2, 24}, + "refresh"}; + + Button button_show_qr{ + {screen_width / 2, 17 * 16 + 10, screen_width / 2, 24}, + "show QR"}; + + NumberField field_digits{ + {24 * 8, 9 * 16}, + 2, + {1, 30}, + 1, + ' '}; void on_data_afsk(const AFSKDataMessage& message); From 42138b44d5501ce612d99c31970d8238943c00d5 Mon Sep 17 00:00:00 2001 From: zxkmm Date: Sat, 28 Sep 2024 23:28:56 +0800 Subject: [PATCH 03/27] todo: remove uneeded code --- .../application/external/random/ui_random.cpp | 24 ++++++++++++++----- .../application/external/random/ui_random.hpp | 3 ++- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/firmware/application/external/random/ui_random.cpp b/firmware/application/external/random/ui_random.cpp index af84ec18..7c1b715e 100644 --- a/firmware/application/external/random/ui_random.cpp +++ b/firmware/application/external/random/ui_random.cpp @@ -134,7 +134,7 @@ RandomView::RandomView(NavigationView& nav) logger = std::make_unique(); if (logger) - logger->append(logs_dir / u"AFSK.TXT"); + logger->append(logs_dir / u"random.TXT"); // Auto-configure modem for LCR RX (will be removed later) baseband::set_afsk(persistent_memory::modem_baudrate(), 8, 0, false); @@ -161,17 +161,14 @@ void RandomView::on_data(uint32_t value, bool is_data) { console.write(str_console); - if (logger && logging) str_log += str_byte; +// if (logger && logging) str_log += str_byte; if ((value != 0x7F) && (prev_value == 0x7F)) { // Message split console.writeln(""); console_color++; - if (logger && logging) { - logger->log_raw_data(str_log); - str_log = ""; - } + } prev_value = value; } else { @@ -235,8 +232,23 @@ void RandomView::new_password() { text_generated_passwd.set(password); text_char_type_hints.set(char_type_hints); + + if (logger && logging) { + str_log += generate_log_line(password); + logger->log_raw_data(str_log); + str_log = ""; + } } +std::string RandomView::generate_log_line(const std::string &password) { + std::string line = "\npassword=" + password + + "\nseed=" + std::to_string(seed) + + "\n"; + return line; +} + +bool RandomView::seed_protect_helper(const unsigned int &seed){} + RandomView::~RandomView() { audio::output::stop(); receiver_model.disable(); diff --git a/firmware/application/external/random/ui_random.hpp b/firmware/application/external/random/ui_random.hpp index 004c30b5..dc801c37 100644 --- a/firmware/application/external/random/ui_random.hpp +++ b/firmware/application/external/random/ui_random.hpp @@ -60,10 +60,11 @@ class RandomView : public View { std::string title() const override { return "random"; }; private: - unsigned int seed = 0; // extern void srand (unsigned int __seed) __THROW; + unsigned int seed = nullptr; // extern void srand (unsigned int __seed) __THROW; void on_data(uint32_t value, bool is_data); void new_password(); + std::string generate_log_line(const std::string &password); NavigationView& nav_; RxRadioState radio_state_{}; From 73765ba72318727cef5e5972c0a693807c0bbcb7 Mon Sep 17 00:00:00 2001 From: zxkmm Date: Sat, 28 Sep 2024 23:45:37 +0800 Subject: [PATCH 04/27] todo: remove uneeded code --- .../application/external/random/ui_random.cpp | 26 +++++++++++++------ .../application/external/random/ui_random.hpp | 9 ++++--- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/firmware/application/external/random/ui_random.cpp b/firmware/application/external/random/ui_random.cpp index 7c1b715e..5b3e085c 100644 --- a/firmware/application/external/random/ui_random.cpp +++ b/firmware/application/external/random/ui_random.cpp @@ -115,6 +115,7 @@ RandomView::RandomView(NavigationView& nav) }; button_refresh.on_select = [this](Button&) { + this->set_random_freq(); this->new_password(); }; @@ -143,6 +144,7 @@ RandomView::RandomView(NavigationView& nav) audio::output::start(); receiver_model.enable(); + set_random_freq(); new_password(); } @@ -161,14 +163,12 @@ void RandomView::on_data(uint32_t value, bool is_data) { console.write(str_console); -// if (logger && logging) str_log += str_byte; + // if (logger && logging) str_log += str_byte; if ((value != 0x7F) && (prev_value == 0x7F)) { // Message split console.writeln(""); console_color++; - - } prev_value = value; } else { @@ -181,6 +181,16 @@ void RandomView::on_freqchg(int64_t freq) { field_frequency.set_value(freq); } +void RandomView::set_random_freq() { + + std::srand(LPC_RTC->CTIME0); + // this is only for seed to visit random freq, the radio is still real random + + auto random_freq = 100000000 + (std::rand() % 900000000); // 100mhz to 1ghz + receiver_model.set_target_frequency(random_freq); + field_frequency.set_value(random_freq); +} + void RandomView::new_password() { std::string charset; std::string password; @@ -209,9 +219,9 @@ void RandomView::new_password() { } if (seed == 0) { - text_generated_passwd.set("generate failed,"); - text_char_type_hints.set("random seed exception"); - }else { + text_generated_passwd.set("generate failed,"); + text_char_type_hints.set("random seed exception"); + } else { std::srand(seed); // extern void srand (unsigned int __seed) __THROW; } @@ -240,14 +250,14 @@ void RandomView::new_password() { } } -std::string RandomView::generate_log_line(const std::string &password) { +std::string RandomView::generate_log_line(const std::string& password) { std::string line = "\npassword=" + password + "\nseed=" + std::to_string(seed) + "\n"; return line; } -bool RandomView::seed_protect_helper(const unsigned int &seed){} +bool RandomView::seed_protect_helper(const unsigned int& seed) {} RandomView::~RandomView() { audio::output::stop(); diff --git a/firmware/application/external/random/ui_random.hpp b/firmware/application/external/random/ui_random.hpp index dc801c37..5d76f7a6 100644 --- a/firmware/application/external/random/ui_random.hpp +++ b/firmware/application/external/random/ui_random.hpp @@ -60,7 +60,7 @@ class RandomView : public View { std::string title() const override { return "random"; }; private: - unsigned int seed = nullptr; // extern void srand (unsigned int __seed) __THROW; + unsigned int seed = 0; // extern void srand (unsigned int __seed) __THROW; void on_data(uint32_t value, bool is_data); void new_password(); @@ -97,7 +97,7 @@ class RandomView : public View { Checkbox check_log{ {0 * 8, 1 * 16}, 3, - LanguageHelper::currentMessages[LANG_LOG], + "save gened pw", false}; Text text_debug{ @@ -106,7 +106,7 @@ class RandomView : public View { Button button_modem_setup{ {screen_width - 12 * 8, 1 * 16, 96, 24}, - LanguageHelper::currentMessages[LANG_MODEM_SETUP]}; + "AFSK modem"}; Console console{ {0, 3 * 16, 240, 16}}; @@ -180,7 +180,10 @@ class RandomView : public View { this->on_freqchg(message->freq); }}; + bool seed_protect_helper(const unsigned int& seed); + void on_freqchg(int64_t freq); + void set_random_freq(); }; } // namespace ui::external_app::random From 7f7e3cf024057242fe70ab16fbeb18df41e4d3a8 Mon Sep 17 00:00:00 2001 From: zxkmm Date: Sun, 29 Sep 2024 00:21:04 +0800 Subject: [PATCH 05/27] todo: asycnmsg detect indicate, check way to not use global password --- firmware/application/external/random/ui_random.cpp | 10 ++++++++-- firmware/application/external/random/ui_random.hpp | 4 ++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/firmware/application/external/random/ui_random.cpp b/firmware/application/external/random/ui_random.cpp index 5b3e085c..bb862c3f 100644 --- a/firmware/application/external/random/ui_random.cpp +++ b/firmware/application/external/random/ui_random.cpp @@ -119,8 +119,9 @@ RandomView::RandomView(NavigationView& nav) this->new_password(); }; - button_show_qr.on_select = [this](Button&) { - // TODO + button_show_qr.on_select = [this, &nav](Button&) { +// std::string qr = text_generated_passwd. + nav.push(global_password.data()); }; field_digits.on_change = [this](int32_t) { @@ -248,6 +249,11 @@ void RandomView::new_password() { logger->log_raw_data(str_log); str_log = ""; } + + global_password = password; + portapack::async_tx_enabled = true; + UsbSerialAsyncmsg::asyncmsg(password); + portapack::async_tx_enabled = false; } std::string RandomView::generate_log_line(const std::string& password) { diff --git a/firmware/application/external/random/ui_random.hpp b/firmware/application/external/random/ui_random.hpp index 5d76f7a6..80cc35df 100644 --- a/firmware/application/external/random/ui_random.hpp +++ b/firmware/application/external/random/ui_random.hpp @@ -33,6 +33,9 @@ #include "radio_state.hpp" #include "log_file.hpp" #include "utility.hpp" +#include "ui_qrcode.hpp" +#include "usb_serial_asyncmsg.hpp" + using namespace ui; @@ -61,6 +64,7 @@ class RandomView : public View { private: unsigned int seed = 0; // extern void srand (unsigned int __seed) __THROW; + std::string global_password = ""; //this is a temp one for test, TODO void on_data(uint32_t value, bool is_data); void new_password(); From a42237845f658b6f5768e8913b5e638ea617746f Mon Sep 17 00:00:00 2001 From: zxkmm Date: Sun, 29 Sep 2024 01:56:17 +0800 Subject: [PATCH 06/27] removed audio --- firmware/application/external/random/ui_random.cpp | 5 ----- firmware/application/external/random/ui_random.hpp | 3 +-- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/firmware/application/external/random/ui_random.cpp b/firmware/application/external/random/ui_random.cpp index bb862c3f..be0dec33 100644 --- a/firmware/application/external/random/ui_random.cpp +++ b/firmware/application/external/random/ui_random.cpp @@ -24,7 +24,6 @@ #include "ui_modemsetup.hpp" #include "modems.hpp" -#include "audio.hpp" #include "rtc_time.hpp" #include "baseband_api.hpp" #include "string_format.hpp" @@ -54,7 +53,6 @@ RandomView::RandomView(NavigationView& nav) &field_rf_amp, &field_lna, &field_vga, - &field_volume, &field_frequency, &check_log, &text_debug, @@ -141,8 +139,6 @@ RandomView::RandomView(NavigationView& nav) // Auto-configure modem for LCR RX (will be removed later) baseband::set_afsk(persistent_memory::modem_baudrate(), 8, 0, false); - audio::set_rate(audio::Rate::Hz_24000); - audio::output::start(); receiver_model.enable(); set_random_freq(); @@ -266,7 +262,6 @@ std::string RandomView::generate_log_line(const std::string& password) { bool RandomView::seed_protect_helper(const unsigned int& seed) {} RandomView::~RandomView() { - audio::output::stop(); receiver_model.disable(); baseband::shutdown(); } diff --git a/firmware/application/external/random/ui_random.hpp b/firmware/application/external/random/ui_random.hpp index 80cc35df..d411fee1 100644 --- a/firmware/application/external/random/ui_random.hpp +++ b/firmware/application/external/random/ui_random.hpp @@ -91,8 +91,7 @@ class RandomView : public View { Channel channel{ {21 * 8, 5, 6 * 8, 4}}; - AudioVolumeField field_volume{ - {28 * 8, 0 * 16}}; + RxFrequencyField field_frequency{ {0 * 8, 0 * 16}, From fd93767bfb398f3caf9115df1816912ed3fa5f80 Mon Sep 17 00:00:00 2001 From: zxkmm Date: Sun, 29 Sep 2024 02:25:02 +0800 Subject: [PATCH 07/27] add log warn modal --- .../application/external/random/ui_random.cpp | 34 +++++++++++++++---- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/firmware/application/external/random/ui_random.cpp b/firmware/application/external/random/ui_random.cpp index be0dec33..e60932dd 100644 --- a/firmware/application/external/random/ui_random.cpp +++ b/firmware/application/external/random/ui_random.cpp @@ -85,7 +85,29 @@ RandomView::RandomView(NavigationView& nav) check_log.set_value(logging); check_log.on_select = [this](Checkbox&, bool v) { - logging = v; + if (v) { + nav_.display_modal( + "Warning", + "Sure?\n" + "this will save all generated\n" + "password to sdcard\n" + "in plain text\n" + "those which generated before\n" + "you check me, will lost", + YESNO, + [this, v](bool c) { + if (c) { + logging = v; + } else { + check_log.set_value(false); + // this is needed to check back to false cuz when trigger by human, the check to true already happened + // this blocked interface so won't accidently saved even if user checked but selected no later here, + // but take care of here if in the future implemented ticking/auto/batch save etc + } + }); + } else { + logging = v; + } }; button_modem_setup.on_select = [&nav](Button&) { @@ -118,7 +140,7 @@ RandomView::RandomView(NavigationView& nav) }; button_show_qr.on_select = [this, &nav](Button&) { -// std::string qr = text_generated_passwd. + // std::string qr = text_generated_passwd. nav.push(global_password.data()); }; @@ -139,7 +161,6 @@ RandomView::RandomView(NavigationView& nav) // Auto-configure modem for LCR RX (will be removed later) baseband::set_afsk(persistent_memory::modem_baudrate(), 8, 0, false); - receiver_model.enable(); set_random_freq(); new_password(); @@ -179,7 +200,6 @@ void RandomView::on_freqchg(int64_t freq) { } void RandomView::set_random_freq() { - std::srand(LPC_RTC->CTIME0); // this is only for seed to visit random freq, the radio is still real random @@ -247,9 +267,9 @@ void RandomView::new_password() { } global_password = password; - portapack::async_tx_enabled = true; - UsbSerialAsyncmsg::asyncmsg(password); - portapack::async_tx_enabled = false; + // portapack::async_tx_enabled = true; + // UsbSerialAsyncmsg::asyncmsg(password); + // portapack::async_tx_enabled = false; } std::string RandomView::generate_log_line(const std::string& password) { From a480b1311fda8d56389980abdd8a70c6f080301d Mon Sep 17 00:00:00 2001 From: zxkmm Date: Sun, 29 Sep 2024 02:34:44 +0800 Subject: [PATCH 08/27] small tune --- firmware/application/external/random/ui_random.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/firmware/application/external/random/ui_random.cpp b/firmware/application/external/random/ui_random.cpp index e60932dd..26e0a4f9 100644 --- a/firmware/application/external/random/ui_random.cpp +++ b/firmware/application/external/random/ui_random.cpp @@ -41,7 +41,7 @@ void RandomLogger::log_raw_data(const std::string& data) { } void RandomView::focus() { - field_frequency.focus(); + field_digits.focus(); } RandomView::RandomView(NavigationView& nav) @@ -71,7 +71,7 @@ RandomView::RandomView(NavigationView& nav) &check_allow_confusable_chars}); // Auto-configure modem for LCR RX (TODO remove) - field_frequency.set_value(467225500); +// field_frequency.set_value(467225500); auto def_bell202 = &modem_defs[0]; persistent_memory::set_modem_baudrate(def_bell202->baudrate); serial_format_t serial_format; From bfcf68d88dc322fa99d60dc0e2620396bc5fc3fb Mon Sep 17 00:00:00 2001 From: zxkmm Date: Sun, 29 Sep 2024 09:26:48 +0800 Subject: [PATCH 09/27] remove drunk code --- firmware/application/external/random/ui_random.cpp | 10 ++++------ firmware/application/external/random/ui_random.hpp | 6 +++--- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/firmware/application/external/random/ui_random.cpp b/firmware/application/external/random/ui_random.cpp index 26e0a4f9..8ffeacc6 100644 --- a/firmware/application/external/random/ui_random.cpp +++ b/firmware/application/external/random/ui_random.cpp @@ -141,7 +141,7 @@ RandomView::RandomView(NavigationView& nav) button_show_qr.on_select = [this, &nav](Button&) { // std::string qr = text_generated_passwd. - nav.push(global_password.data()); + nav.push(password.data()); }; field_digits.on_change = [this](int32_t) { @@ -210,7 +210,6 @@ void RandomView::set_random_freq() { void RandomView::new_password() { std::string charset; - std::string password; std::string char_type_hints; if (check_digits.value()) @@ -261,25 +260,24 @@ void RandomView::new_password() { text_char_type_hints.set(char_type_hints); if (logger && logging) { - str_log += generate_log_line(password); + str_log += generate_log_line(); logger->log_raw_data(str_log); str_log = ""; } - global_password = password; // portapack::async_tx_enabled = true; // UsbSerialAsyncmsg::asyncmsg(password); // portapack::async_tx_enabled = false; } -std::string RandomView::generate_log_line(const std::string& password) { +std::string RandomView::generate_log_line() { std::string line = "\npassword=" + password + "\nseed=" + std::to_string(seed) + "\n"; return line; } -bool RandomView::seed_protect_helper(const unsigned int& seed) {} +bool RandomView::seed_protect_helper() {} RandomView::~RandomView() { receiver_model.disable(); diff --git a/firmware/application/external/random/ui_random.hpp b/firmware/application/external/random/ui_random.hpp index d411fee1..2f7d7af4 100644 --- a/firmware/application/external/random/ui_random.hpp +++ b/firmware/application/external/random/ui_random.hpp @@ -64,11 +64,11 @@ class RandomView : public View { private: unsigned int seed = 0; // extern void srand (unsigned int __seed) __THROW; - std::string global_password = ""; //this is a temp one for test, TODO + std::string password = ""; void on_data(uint32_t value, bool is_data); void new_password(); - std::string generate_log_line(const std::string &password); + std::string generate_log_line(); NavigationView& nav_; RxRadioState radio_state_{}; @@ -183,7 +183,7 @@ class RandomView : public View { this->on_freqchg(message->freq); }}; - bool seed_protect_helper(const unsigned int& seed); + bool seed_protect_helper(); void on_freqchg(int64_t freq); void set_random_freq(); From d5f60ccef47561041e6e99b8eb6083bdf962ce01 Mon Sep 17 00:00:00 2001 From: zxkmm Date: Sun, 29 Sep 2024 10:39:08 +0800 Subject: [PATCH 10/27] password var global --- firmware/application/external/random/ui_random.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/firmware/application/external/random/ui_random.cpp b/firmware/application/external/random/ui_random.cpp index 8ffeacc6..3292e934 100644 --- a/firmware/application/external/random/ui_random.cpp +++ b/firmware/application/external/random/ui_random.cpp @@ -209,6 +209,7 @@ void RandomView::set_random_freq() { } void RandomView::new_password() { + password = ""; std::string charset; std::string char_type_hints; From f7bb8421c2fb06adcabd854d1922cb6b5a86dffc Mon Sep 17 00:00:00 2001 From: zxkmm Date: Sun, 29 Sep 2024 10:57:35 +0800 Subject: [PATCH 11/27] seed as text instead of console --- .../application/external/random/ui_random.cpp | 15 +++++++++------ .../application/external/random/ui_random.hpp | 6 +++++- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/firmware/application/external/random/ui_random.cpp b/firmware/application/external/random/ui_random.cpp index 3292e934..ee40d184 100644 --- a/firmware/application/external/random/ui_random.cpp +++ b/firmware/application/external/random/ui_random.cpp @@ -68,10 +68,11 @@ RandomView::RandomView(NavigationView& nav) &button_refresh, &button_show_qr, &field_digits, - &check_allow_confusable_chars}); + &check_allow_confusable_chars, + &text_seed}); // Auto-configure modem for LCR RX (TODO remove) -// field_frequency.set_value(467225500); + // field_frequency.set_value(467225500); auto def_bell202 = &modem_defs[0]; persistent_memory::set_modem_baudrate(def_bell202->baudrate); serial_format_t serial_format; @@ -172,21 +173,23 @@ void RandomView::on_data(uint32_t value, bool is_data) { if (is_data) { seed = static_cast(value); + text_seed.set( to_string_dec_uint(seed)); + // Colorize differently after message splits - str_console += (char)((console_color & 3) + 9); + // str_console += (char)((console_color & 3) + 9); // Directly print the received value without decoding str_console += "[" + to_string_hex(value, 2) + "]"; str_byte += "[" + to_string_hex(value, 2) + "]"; - console.write(str_console); + // console.write(str_console); // if (logger && logging) str_log += str_byte; if ((value != 0x7F) && (prev_value == 0x7F)) { // Message split - console.writeln(""); - console_color++; + // console.writeln(""); + // console_color++; } prev_value = value; } else { diff --git a/firmware/application/external/random/ui_random.hpp b/firmware/application/external/random/ui_random.hpp index 2f7d7af4..58d921c1 100644 --- a/firmware/application/external/random/ui_random.hpp +++ b/firmware/application/external/random/ui_random.hpp @@ -112,7 +112,11 @@ class RandomView : public View { "AFSK modem"}; Console console{ - {0, 3 * 16, 240, 16}}; + {0, 3 * 16, 1, 16}}; + Text text_seed{ + {0, 4 * 16, 240, 16}, + "test seed" + }; Labels labels{ {{5 * 8, 9 * 16}, "digits:", Theme::getInstance()->fg_light->foreground}}; From 6ed071b9181d4218daeb9b070da8f31297690784 Mon Sep 17 00:00:00 2001 From: zxkmm Date: Sun, 29 Sep 2024 11:01:10 +0800 Subject: [PATCH 12/27] remove console --- .../application/external/random/ui_random.cpp | 22 ++----------------- .../application/external/random/ui_random.hpp | 3 --- 2 files changed, 2 insertions(+), 23 deletions(-) diff --git a/firmware/application/external/random/ui_random.cpp b/firmware/application/external/random/ui_random.cpp index ee40d184..56be064d 100644 --- a/firmware/application/external/random/ui_random.cpp +++ b/firmware/application/external/random/ui_random.cpp @@ -57,7 +57,6 @@ RandomView::RandomView(NavigationView& nav) &check_log, &text_debug, &button_modem_setup, - &console, &labels, &text_generated_passwd, &text_char_type_hints, @@ -168,33 +167,16 @@ RandomView::RandomView(NavigationView& nav) } void RandomView::on_data(uint32_t value, bool is_data) { - std::string str_console = "\x1B"; - std::string str_byte = ""; if (is_data) { seed = static_cast(value); text_seed.set( to_string_dec_uint(seed)); - // Colorize differently after message splits - // str_console += (char)((console_color & 3) + 9); - // Directly print the received value without decoding - str_console += "[" + to_string_hex(value, 2) + "]"; - str_byte += "[" + to_string_hex(value, 2) + "]"; - - // console.write(str_console); - - // if (logger && logging) str_log += str_byte; - - if ((value != 0x7F) && (prev_value == 0x7F)) { - // Message split - // console.writeln(""); - // console_color++; - } prev_value = value; } else { - // Baudrate estimation - text_debug.set("Baudrate estimation: ~" + to_string_dec_uint(value)); + text_generated_passwd.set("Baudrate estimation: ~"); + text_char_type_hints.set(to_string_dec_uint(value)); } } diff --git a/firmware/application/external/random/ui_random.hpp b/firmware/application/external/random/ui_random.hpp index 58d921c1..cdc405bf 100644 --- a/firmware/application/external/random/ui_random.hpp +++ b/firmware/application/external/random/ui_random.hpp @@ -75,7 +75,6 @@ class RandomView : public View { app_settings::SettingsManager settings_{ "rx_afsk", app_settings::Mode::RX}; - uint8_t console_color{0}; uint32_t prev_value{0}; std::string str_log{""}; bool logging{false}; @@ -111,8 +110,6 @@ class RandomView : public View { {screen_width - 12 * 8, 1 * 16, 96, 24}, "AFSK modem"}; - Console console{ - {0, 3 * 16, 1, 16}}; Text text_seed{ {0, 4 * 16, 240, 16}, "test seed" From 8f67ae85ac92d2e094678f350e1247121c767e09 Mon Sep 17 00:00:00 2001 From: zxkmm Date: Sun, 29 Sep 2024 13:42:27 +0800 Subject: [PATCH 13/27] should be almost done --- .../application/external/random/ui_random.cpp | 84 ++++++++++++--- .../application/external/random/ui_random.hpp | 101 ++++++++++-------- 2 files changed, 124 insertions(+), 61 deletions(-) diff --git a/firmware/application/external/random/ui_random.cpp b/firmware/application/external/random/ui_random.cpp index 56be064d..c09d9cd0 100644 --- a/firmware/application/external/random/ui_random.cpp +++ b/firmware/application/external/random/ui_random.cpp @@ -55,7 +55,6 @@ RandomView::RandomView(NavigationView& nav) &field_vga, &field_frequency, &check_log, - &text_debug, &button_modem_setup, &labels, &text_generated_passwd, @@ -64,8 +63,12 @@ RandomView::RandomView(NavigationView& nav) &check_latin_lower, &check_latin_upper, &check_punctuation, + &check_show_seeds, + &check_auto_send, &button_refresh, &button_show_qr, + &button_pause, + &button_send, &field_digits, &check_allow_confusable_chars, &text_seed}); @@ -144,15 +147,33 @@ RandomView::RandomView(NavigationView& nav) nav.push(password.data()); }; + button_pause.on_select = [this](Button&) { + if (paused) { + paused = false; + button_pause.set_text("pause"); + } else { + paused = true; + button_pause.set_text("resume"); + } + }; + button_send.on_select = [this, &nav](Button&) { + portapack::async_tx_enabled = true; + UsbSerialAsyncmsg::asyncmsg(password); + portapack::async_tx_enabled = false; + }; + field_digits.on_change = [this](int32_t) { this->new_password(); }; - /// v init setting + /// v check defauly val init check_digits.set_value(true); check_latin_lower.set_value(true); + check_latin_upper.set_value(true); + check_punctuation.set_value(true); + check_show_seeds.set_value(true); field_digits.set_value(8); - ///^ init setting + ///^ check defauly val init logger = std::make_unique(); if (logger) @@ -167,13 +188,11 @@ RandomView::RandomView(NavigationView& nav) } void RandomView::on_data(uint32_t value, bool is_data) { - + if (paused) + return; if (is_data) { seed = static_cast(value); - text_seed.set( to_string_dec_uint(seed)); - - - prev_value = value; + text_seed.set(to_string_dec_uint(check_show_seeds.value() ? seed : 0)); } else { text_generated_passwd.set("Baudrate estimation: ~"); text_char_type_hints.set(to_string_dec_uint(value)); @@ -228,32 +247,65 @@ void RandomView::new_password() { } int password_length = field_digits.value(); + for (int i = 0; i < password_length; i++) { char c = charset[std::rand() % charset.length()]; password += c; - if (std::isdigit(c)) + if (std::isdigit(c)) { char_type_hints += "1"; - else if (std::islower(c)) + } else if (std::islower(c)) { char_type_hints += "a"; - else if (std::isupper(c)) + } else if (std::isupper(c)) { char_type_hints += "A"; - else + } else { char_type_hints += ","; + } } text_generated_passwd.set(password); text_char_type_hints.set(char_type_hints); + paint_password_hints(); // TODO: why flash and disappeared + if (logger && logging) { str_log += generate_log_line(); logger->log_raw_data(str_log); str_log = ""; } - // portapack::async_tx_enabled = true; - // UsbSerialAsyncmsg::asyncmsg(password); - // portapack::async_tx_enabled = false; + if (check_auto_send.value()) { + portapack::async_tx_enabled = true; + UsbSerialAsyncmsg::asyncmsg(password); + portapack::async_tx_enabled = false; + } +} + +void RandomView::paint_password_hints() { // TODO: why flash and disappeared + Painter painter; + const int char_width = 8; + const int char_height = 16; + const int start_y = 6 * char_height + 5; + const int rect_height = 4; + + for (size_t i = 0; i < password.length(); i++) { + char c = password[i]; + Color color; + if (std::isdigit(c)) { + color = Color::red(); + } else if (std::islower(c)) { + color = Color::green(); + } else if (std::isupper(c)) { + color = Color::blue(); + } else { + color = Color::white(); + } + + painter.fill_rectangle( + {{static_cast(i) * char_width, start_y}, + {char_width, rect_height}}, + color); + } } std::string RandomView::generate_log_line() { @@ -263,8 +315,6 @@ std::string RandomView::generate_log_line() { return line; } -bool RandomView::seed_protect_helper() {} - RandomView::~RandomView() { receiver_model.disable(); baseband::shutdown(); diff --git a/firmware/application/external/random/ui_random.hpp b/firmware/application/external/random/ui_random.hpp index cdc405bf..c42839eb 100644 --- a/firmware/application/external/random/ui_random.hpp +++ b/firmware/application/external/random/ui_random.hpp @@ -36,7 +36,6 @@ #include "ui_qrcode.hpp" #include "usb_serial_asyncmsg.hpp" - using namespace ui; namespace ui::external_app::random { @@ -69,98 +68,114 @@ class RandomView : public View { void on_data(uint32_t value, bool is_data); void new_password(); std::string generate_log_line(); + void paint_password_hints(); NavigationView& nav_; RxRadioState radio_state_{}; app_settings::SettingsManager settings_{ "rx_afsk", app_settings::Mode::RX}; - uint32_t prev_value{0}; std::string str_log{""}; bool logging{false}; + bool paused{false}; + + Labels labels{ + {{0 * 8, 0 * 16}, "------------seeds-------------", Theme::getInstance()->fg_light->foreground}, + {{0 * 8, 3 * 16}, "-----------password-----------", Theme::getInstance()->fg_light->foreground}, + {{5 * 8, 7 * 16}, "digits:", Theme::getInstance()->fg_light->foreground}, + }; RFAmpField field_rf_amp{ - {13 * 8, 0 * 16}}; + {13 * 8, 1 * 16}}; LNAGainField field_lna{ - {15 * 8, 0 * 16}}; + {15 * 8, 1 * 16}}; VGAGainField field_vga{ - {18 * 8, 0 * 16}}; + {18 * 8, 1 * 16}}; + RSSI rssi{ - {21 * 8, 0, 6 * 8, 4}}; + {21 * 8, 1 * 16 + 0, 6 * 8, 4}}; Channel channel{ - {21 * 8, 5, 6 * 8, 4}}; - - + {21 * 8, 1 * 16 + 5, 6 * 8, 4}}; RxFrequencyField field_frequency{ - {0 * 8, 0 * 16}, + {0 * 8, 1 * 16}, nav_}; - Checkbox check_log{ - {0 * 8, 1 * 16}, - 3, - "save gened pw", - false}; - - Text text_debug{ - {0 * 8, 12 + 2 * 16, screen_width, 16}, - LanguageHelper::currentMessages[LANG_DEBUG]}; - Button button_modem_setup{ - {screen_width - 12 * 8, 1 * 16, 96, 24}, + {screen_width - 12 * 8, 2 * 16, 96, 16}, "AFSK modem"}; Text text_seed{ - {0, 4 * 16, 240, 16}, - "test seed" - }; - - Labels labels{ - {{5 * 8, 9 * 16}, "digits:", Theme::getInstance()->fg_light->foreground}}; + {0, 2 * 16, screen_width / 2, 16}, + "0000000000"}; Text text_generated_passwd{ - {0, 5 * 16, screen_width, 28}, + {0, 4 * 16, screen_width, 28}, "000000000000000000000000000000"}; Text text_char_type_hints{ - {0, 6 * 16, screen_width, 28}, + {0, 5 * 16, screen_width, 28}, "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"}; - Checkbox check_digits{ - {3 * 8, 13 * 16}, - 3, - "123"}; + Checkbox check_show_seeds{ + {17 * 8, 8 * 16}, + 6, + "show seed"}; + + Checkbox check_auto_send{ + {1 * 8, 8 * 16}, + 20, + "auto send"}; Checkbox check_punctuation{ - {20 * 8, 13 * 16}, + {17 * 8, 12 * 16}, 6, ".,-!?"}; + Checkbox check_allow_confusable_chars{ + {1 * 8, 10 * 16}, + 20, + "0 O o 1 l"}; + + Checkbox check_digits{ + {1 * 8, 12 * 16}, + 3, + "123"}; + Checkbox check_latin_lower{ - {3 * 8, 15 * 16}, + {1 * 8, 14 * 16}, 3, "abc"}; Checkbox check_latin_upper{ - {20 * 8, 15 * 16}, + {17 * 8, 14 * 16}, 3, "ABC"}; - Checkbox check_allow_confusable_chars{ - {3 * 8, 11 * 16}, - 20, - "Include 0 O o 1 l"}; + Checkbox check_log{ + {17 * 8, 10 * 16}, + 3, + "savin", + false}; + + Button button_pause{ + {0 * 8, 15 * 16 + 20, screen_width / 2, 24}, + "pause"}; + + Button button_send{ + {screen_width / 2, 15 * 16 + 20, screen_width / 2, 24}, + "send pwd"}; Button button_refresh{ {0 * 8, 17 * 16 + 10, screen_width / 2, 24}, - "refresh"}; + "generate"}; Button button_show_qr{ {screen_width / 2, 17 * 16 + 10, screen_width / 2, 24}, "show QR"}; NumberField field_digits{ - {24 * 8, 9 * 16}, + {16 * 8, 7 * 16}, 2, {1, 30}, 1, @@ -184,8 +199,6 @@ class RandomView : public View { this->on_freqchg(message->freq); }}; - bool seed_protect_helper(); - void on_freqchg(int64_t freq); void set_random_freq(); }; From 3e3f8a43cb73b0da6fc0406b1fd05cc7a044bae8 Mon Sep 17 00:00:00 2001 From: zxkmm Date: Sun, 29 Sep 2024 15:32:46 +0800 Subject: [PATCH 14/27] naming fix --- .../application/external/random/ui_random.cpp | 21 ++++++++++++------- .../application/external/random/ui_random.hpp | 7 ++++--- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/firmware/application/external/random/ui_random.cpp b/firmware/application/external/random/ui_random.cpp index c09d9cd0..caa7b0aa 100644 --- a/firmware/application/external/random/ui_random.cpp +++ b/firmware/application/external/random/ui_random.cpp @@ -1,6 +1,7 @@ /* * Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc. * Copyright (C) 2017 Furrtek + * copyleft zxkmm * * This file is part of PortaPack. * @@ -73,8 +74,7 @@ RandomView::RandomView(NavigationView& nav) &check_allow_confusable_chars, &text_seed}); - // Auto-configure modem for LCR RX (TODO remove) - // field_frequency.set_value(467225500); + // no idea what's these, i copied from afsk rx app and they seems needed' auto def_bell202 = &modem_defs[0]; persistent_memory::set_modem_baudrate(def_bell202->baudrate); serial_format_t serial_format; @@ -84,8 +84,6 @@ RandomView::RandomView(NavigationView& nav) serial_format.bit_order = LSB_FIRST; persistent_memory::set_serial_format(serial_format); - field_frequency.set_step(100); - check_log.set_value(logging); check_log.on_select = [this](Checkbox&, bool v) { if (v) { @@ -113,7 +111,7 @@ RandomView::RandomView(NavigationView& nav) } }; - button_modem_setup.on_select = [&nav](Button&) { + button_modem_setup.on_select = [&nav](Button&) { //copied from afsk rx app nav.push(); }; @@ -143,7 +141,6 @@ RandomView::RandomView(NavigationView& nav) }; button_show_qr.on_select = [this, &nav](Button&) { - // std::string qr = text_generated_passwd. nav.push(password.data()); }; @@ -179,7 +176,7 @@ RandomView::RandomView(NavigationView& nav) if (logger) logger->append(logs_dir / u"random.TXT"); - // Auto-configure modem for LCR RX (will be removed later) + // Auto-configure modem for LCR RX (will be removed later), copied from afsk rx app baseband::set_afsk(persistent_memory::modem_baudrate(), 8, 0, false); receiver_model.enable(); @@ -281,7 +278,15 @@ void RandomView::new_password() { } } -void RandomView::paint_password_hints() { // TODO: why flash and disappeared + // TODO: why flash and disappeared + // tried: + // 1. paint inline in new_password func + // 2. paint in a seperate func and call from new_password + // 3. override nav's paint func (i think it can tried to capture same obj) and paint, hoping set_dirty handle it correctly + // 4. override nav's paint func (i think it can tried to capture same obj) and paint in a seperate func, hoping set_dirty handle it correctly + // all these methods failed, and all of them only flash and disappeared. only when set_dirty in on_data (which seems incorrect), and it keep flashing never stop. but see painted content (flashing too) + // btw this is not caused by the seed text set thing, cuz commented it out not helping. +void RandomView::paint_password_hints() { Painter painter; const int char_width = 8; const int char_height = 16; diff --git a/firmware/application/external/random/ui_random.hpp b/firmware/application/external/random/ui_random.hpp index c42839eb..4f1040e1 100644 --- a/firmware/application/external/random/ui_random.hpp +++ b/firmware/application/external/random/ui_random.hpp @@ -1,6 +1,7 @@ /* * Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc. * Copyright (C) 2017 Furrtek + * copyleft zxkmm * * This file is part of PortaPack. * @@ -20,8 +21,8 @@ * Boston, MA 02110-1301, USA. */ -#ifndef __UI_AFSK_RX_H__ -#define __UI_AFSK_RX_H__ +#ifndef __UI_RANDOM_H__ +#define __UI_RANDOM_H__ #include "ui.hpp" #include "ui_language.hpp" @@ -205,4 +206,4 @@ class RandomView : public View { } // namespace ui::external_app::random -#endif /*__UI_AFSK_RX_H__*/ +#endif /*__UI_RANDOM_H__*/ From ff03208be8eb09633f8567c702f13e3be297d06a Mon Sep 17 00:00:00 2001 From: zxkmm Date: Sun, 29 Sep 2024 15:38:36 +0800 Subject: [PATCH 15/27] bitmap now moved to seperate folder, that header i deleted isn't related to firmware --- firmware/tools/bitmap_tools/bitmap.hpp | 6068 ------------------------ 1 file changed, 6068 deletions(-) delete mode 100644 firmware/tools/bitmap_tools/bitmap.hpp diff --git a/firmware/tools/bitmap_tools/bitmap.hpp b/firmware/tools/bitmap_tools/bitmap.hpp deleted file mode 100644 index ea143823..00000000 --- a/firmware/tools/bitmap_tools/bitmap.hpp +++ /dev/null @@ -1,6068 +0,0 @@ -/* - * Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc. - * Copyright (C) 2016 Furrtek - * - * This file is part of PortaPack. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -// This file was generated by make_bitmap.py - -#ifndef __BITMAP_HPP__ -#define __BITMAP_HPP__ - -#include "ui.hpp" - -namespace ui { - -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_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_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 Bitmap bitmap_icon_bht{ - {16, 16}, - bitmap_icon_bht_data}; - -static constexpr uint8_t bitmap_icon_cut_data[] = { - 0x00, - 0x00, - 0x10, - 0x10, - 0x30, - 0x18, - 0x20, - 0x08, - 0x60, - 0x0C, - 0x40, - 0x04, - 0xC0, - 0x06, - 0x80, - 0x00, - 0x80, - 0x01, - 0x80, - 0x01, - 0xC0, - 0x03, - 0x78, - 0x1E, - 0x44, - 0x22, - 0x44, - 0x22, - 0x44, - 0x22, - 0x38, - 0x1C, -}; -static constexpr Bitmap bitmap_icon_cut{ - {16, 16}, - bitmap_icon_cut_data}; - -static constexpr uint8_t bitmap_icon_codetx_data[] = { - 0x00, - 0x00, - 0xF0, - 0x07, - 0x0C, - 0x18, - 0x03, - 0x60, - 0xE0, - 0x03, - 0x18, - 0x0C, - 0x04, - 0x10, - 0xC0, - 0x01, - 0x20, - 0x02, - 0x00, - 0x00, - 0x00, - 0x00, - 0xBB, - 0x6D, - 0x2A, - 0x49, - 0x2A, - 0x49, - 0x3A, - 0x49, - 0x00, - 0x00, -}; -static constexpr Bitmap bitmap_icon_codetx{ - {16, 16}, - bitmap_icon_codetx_data}; - -static constexpr uint8_t bitmap_sig_saw_up_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, - 0x06, - 0x00, - 0x01, - 0x70, - 0x06, - 0x80, - 0x01, - 0x78, - 0x06, - 0xC0, - 0x01, - 0x7C, - 0x06, - 0xE0, - 0x01, - 0x6E, - 0x06, - 0xF0, - 0x01, - 0x67, - 0x06, - 0xB8, - 0x81, - 0x63, - 0x06, - 0x9C, - 0xC1, - 0x61, - 0x06, - 0x8E, - 0xE1, - 0x60, - 0x06, - 0x87, - 0x71, - 0x60, - 0x86, - 0x83, - 0x39, - 0x60, - 0xC6, - 0x81, - 0x1D, - 0x60, - 0xE6, - 0x80, - 0x0F, - 0x60, - 0x76, - 0x80, - 0x07, - 0x60, - 0x3E, - 0x80, - 0x03, - 0x60, - 0x1E, - 0x80, - 0x01, - 0x60, - 0x0E, - 0x80, - 0x00, - 0x60, - 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_saw_up{ - {32, 32}, - bitmap_sig_saw_up_data}; - -static constexpr uint8_t bitmap_icon_thermometer_data[] = { - 0xC0, - 0x00, - 0x20, - 0x01, - 0x10, - 0x02, - 0x10, - 0x3A, - 0x10, - 0x02, - 0x10, - 0x1A, - 0x10, - 0x02, - 0xD0, - 0x3A, - 0xD0, - 0x02, - 0xD0, - 0x1A, - 0xD0, - 0x02, - 0xE8, - 0x05, - 0xE8, - 0x05, - 0xC8, - 0x04, - 0x10, - 0x02, - 0xE0, - 0x01, -}; -static constexpr Bitmap bitmap_icon_thermometer{ - {16, 16}, - bitmap_icon_thermometer_data}; - -static constexpr uint8_t bitmap_icon_previous_data[] = { - 0x00, - 0x00, - 0xC0, - 0x00, - 0xE0, - 0x00, - 0x70, - 0x00, - 0x38, - 0x00, - 0x1C, - 0x00, - 0x0E, - 0x00, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0x0E, - 0x00, - 0x1C, - 0x00, - 0x38, - 0x00, - 0x70, - 0x00, - 0xE0, - 0x00, - 0xC0, - 0x00, - 0x00, - 0x00, -}; -static constexpr Bitmap bitmap_icon_previous{ - {16, 16}, - bitmap_icon_previous_data}; - -static constexpr uint8_t bitmap_icon_rename_data[] = { - 0x00, - 0x00, - 0x00, - 0x00, - 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_rename{ - {16, 16}, - bitmap_icon_rename_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_key_data[] = { - 0xC0, - 0x03, - 0xE0, - 0x07, - 0x30, - 0x0C, - 0x30, - 0x0C, - 0x30, - 0x0C, - 0x30, - 0x0C, - 0xE0, - 0x07, - 0xC0, - 0x03, - 0x80, - 0x01, - 0x80, - 0x01, - 0x80, - 0x01, - 0x80, - 0x01, - 0x80, - 0x07, - 0x80, - 0x03, - 0x80, - 0x07, - 0x80, - 0x01, -}; -static constexpr Bitmap bitmap_key{ - {16, 16}, - bitmap_key_data}; - -static constexpr uint8_t bitmap_icon_speaker_data[] = { - 0x00, - 0x00, - 0x40, - 0x10, - 0x60, - 0x20, - 0x70, - 0x44, - 0x78, - 0x48, - 0x7F, - 0x91, - 0x7F, - 0x92, - 0x7F, - 0x92, - 0x7F, - 0x92, - 0x7F, - 0x92, - 0x7F, - 0x92, - 0x7F, - 0x91, - 0x78, - 0x48, - 0x70, - 0x44, - 0x60, - 0x20, - 0x40, - 0x10, -}; -static constexpr Bitmap bitmap_icon_speaker{ - {16, 16}, - bitmap_icon_speaker_data}; - -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, - 0xF8, - 0x1F, - 0xE0, - 0x07, -}; -static constexpr Bitmap bitmap_icon_capture{ - {16, 16}, - bitmap_icon_capture_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, - 0x00, - 0x00, -}; -static constexpr Bitmap bitmap_icon_options_touch{ - {16, 16}, - bitmap_icon_options_touch_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, - 0x00, - 0x00, -}; -static constexpr Bitmap bitmap_icon_pocsag{ - {16, 16}, - bitmap_icon_pocsag_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, - 0x00, -}; -static constexpr Bitmap bitmap_icon_file_image{ - {16, 16}, - bitmap_icon_file_image_data}; - -static constexpr uint8_t bitmap_icon_adsb_data[] = { - 0x80, - 0x01, - 0xC0, - 0x03, - 0xC0, - 0x03, - 0xC0, - 0x03, - 0xC0, - 0x03, - 0xE0, - 0x07, - 0xF8, - 0x1F, - 0xFE, - 0x7F, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xC0, - 0x03, - 0xC0, - 0x03, - 0xC0, - 0x03, - 0xE0, - 0x07, - 0xF0, - 0x0F, - 0xF8, - 0x1F, -}; -static constexpr Bitmap bitmap_icon_adsb{ - {16, 16}, - bitmap_icon_adsb_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_paste_data[] = { - 0x00, - 0x00, - 0xE0, - 0x00, - 0x18, - 0x03, - 0xE4, - 0x04, - 0x04, - 0x04, - 0x04, - 0x04, - 0x84, - 0x3F, - 0x84, - 0x20, - 0x84, - 0x2E, - 0x84, - 0x20, - 0x84, - 0x2E, - 0x84, - 0x20, - 0x84, - 0x2E, - 0xF8, - 0x20, - 0x80, - 0x3F, - 0x00, - 0x00, -}; -static constexpr Bitmap bitmap_icon_paste{ - {16, 16}, - bitmap_icon_paste_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_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_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_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_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, - 0x00, - 0x00, -}; -static constexpr Bitmap bitmap_icon_biast_on{ - {16, 16}, - bitmap_icon_biast_on_data}; - -static constexpr uint8_t bitmap_icon_paint_data[] = { - 0xFE, - 0x3F, - 0xFF, - 0x3F, - 0xFF, - 0xFF, - 0xFF, - 0xBF, - 0xFE, - 0xBF, - 0x00, - 0x80, - 0x80, - 0xFF, - 0x80, - 0x00, - 0x80, - 0x00, - 0xC0, - 0x01, - 0xC0, - 0x01, - 0xC0, - 0x01, - 0xC0, - 0x01, - 0xC0, - 0x01, - 0xC0, - 0x01, - 0xC0, - 0x01, -}; -static constexpr Bitmap bitmap_icon_paint{ - {16, 16}, - bitmap_icon_paint_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_clean_data[] = { - 0x00, - 0x00, - 0xC0, - 0x01, - 0x20, - 0x02, - 0xFC, - 0x1F, - 0x00, - 0x00, - 0x08, - 0x08, - 0xE8, - 0x08, - 0xA8, - 0x09, - 0xA8, - 0x0B, - 0x28, - 0x0A, - 0x28, - 0x0A, - 0x28, - 0x0A, - 0xE8, - 0x0B, - 0x08, - 0x08, - 0xF0, - 0x07, - 0x00, - 0x00, -}; -static constexpr Bitmap bitmap_icon_clean{ - {16, 16}, - bitmap_icon_clean_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_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_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 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_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 uint8_t bitmap_icon_tpms_data[] = { - 0xC0, - 0x03, - 0xF0, - 0x0F, - 0x18, - 0x18, - 0xEC, - 0x37, - 0x36, - 0x6D, - 0x3A, - 0x59, - 0x4B, - 0xD5, - 0x8B, - 0xD3, - 0xCB, - 0xD1, - 0xAB, - 0xD2, - 0x9A, - 0x5C, - 0xB6, - 0x6C, - 0xEC, - 0x37, - 0x18, - 0x18, - 0xF0, - 0x0F, - 0xC0, - 0x03, -}; -static constexpr Bitmap bitmap_icon_tpms{ - {16, 16}, - bitmap_icon_tpms_data}; - -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_sig_saw_down{ - {32, 32}, - bitmap_sig_saw_down_data}; - -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_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_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_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_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_tetra{ - {16, 16}, - bitmap_icon_tetra_data}; - -static constexpr uint8_t bitmap_icon_protoview_data[] = { - 0x00, - 0x00, - 0x00, - 0x00, - 0xF8, - 0x87, - 0x08, - 0x84, - 0x0F, - 0xFC, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xF3, - 0xE0, - 0x92, - 0xA0, - 0x9E, - 0xBF, - 0x00, - 0x00, - 0x00, - 0x00, - 0xFC, - 0xF3, - 0x04, - 0x12, - 0x07, - 0x1E, -}; -static constexpr Bitmap bitmap_icon_protoview{ - {16, 16}, - bitmap_icon_protoview_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_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_sdcard{ - {16, 16}, - bitmap_icon_sdcard_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_bulb_on_data[] = { - 0x04, - 0x3C, - 0x20, - 0x08, - 0xFF, - 0x10, - 0x90, - 0xFF, - 0x09, - 0xC0, - 0xFF, - 0x03, - 0xE0, - 0xFF, - 0x07, - 0xE0, - 0xFF, - 0x07, - 0xF0, - 0xE7, - 0x0F, - 0xF0, - 0xBD, - 0x0F, - 0xF7, - 0xBD, - 0xEF, - 0xF0, - 0xDB, - 0x0F, - 0xF0, - 0xDB, - 0x0F, - 0xE0, - 0xDB, - 0x07, - 0xE0, - 0xCB, - 0x07, - 0xC0, - 0xD3, - 0x03, - 0x90, - 0xCB, - 0x09, - 0x08, - 0xFD, - 0x10, - 0x04, - 0xE3, - 0x20, - 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_on{ - {24, 24}, - bitmap_bulb_on_data}; - -static constexpr uint8_t bitmap_icon_rds_data[] = { - 0x00, - 0x00, - 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, - 0x00, - 0x00, - 0x00, - 0x00, -}; -static constexpr Bitmap bitmap_icon_rds{ - {16, 16}, - bitmap_icon_rds_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 Bitmap bitmap_sig_cw{ - {32, 32}, - bitmap_sig_cw_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_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_icon_load_data[] = { - 0x00, - 0x01, - 0x80, - 0x03, - 0x40, - 0x05, - 0x00, - 0x01, - 0x0E, - 0x01, - 0x11, - 0x01, - 0x7F, - 0x1D, - 0x01, - 0x20, - 0xF9, - 0xFF, - 0xF9, - 0xFF, - 0xFD, - 0x7F, - 0xFD, - 0x7F, - 0xFF, - 0x3F, - 0xFF, - 0x3F, - 0xFF, - 0x1F, - 0xFF, - 0x1F, -}; -static constexpr Bitmap bitmap_icon_load{ - {16, 16}, - bitmap_icon_load_data}; - -static constexpr uint8_t bitmap_icon_trim_data[] = { - 0x10, - 0x10, - 0x30, - 0x12, - 0x50, - 0x15, - 0x50, - 0x15, - 0x50, - 0x15, - 0x52, - 0x95, - 0x56, - 0xD5, - 0x5F, - 0xF5, - 0x56, - 0xD5, - 0x52, - 0x95, - 0x50, - 0x15, - 0x50, - 0x15, - 0x50, - 0x15, - 0x90, - 0x18, - 0x10, - 0x10, - 0x00, - 0x00, -}; -static constexpr Bitmap bitmap_icon_trim{ - {16, 16}, - bitmap_icon_trim_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_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_arrow_right_data[] = { - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x04, - 0x00, - 0x0C, - 0x00, - 0x1C, - 0xFE, - 0x3F, - 0xFE, - 0x7F, - 0xFE, - 0x3F, - 0x00, - 0x1C, - 0x00, - 0x0C, - 0x00, - 0x04, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, -}; -static constexpr Bitmap bitmap_arrow_right{ - {16, 16}, - bitmap_arrow_right_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, - 0x00, - 0x00, -}; -static constexpr Bitmap bitmap_icon_utilities{ - {16, 16}, - bitmap_icon_utilities_data}; - -static constexpr uint8_t bitmap_icon_speaker_and_headphones_data[] = { - 0x20, - 0x10, - 0x30, - 0x20, - 0x38, - 0x44, - 0x3E, - 0x48, - 0x3E, - 0x91, - 0x3E, - 0x92, - 0x38, - 0x92, - 0x30, - 0x92, - 0x20, - 0x92, - 0x00, - 0x92, - 0x30, - 0x91, - 0x48, - 0x48, - 0x84, - 0x44, - 0x84, - 0x20, - 0x86, - 0x11, - 0x86, - 0x01, -}; -static constexpr Bitmap bitmap_icon_speaker_and_headphones{ - {16, 16}, - bitmap_icon_speaker_and_headphones_data}; - -static constexpr uint8_t bitmap_icon_tetris_data[] = { - 0xF8, - 0xFF, - 0x88, - 0x88, - 0x88, - 0x88, - 0x88, - 0x88, - 0xF8, - 0xFF, - 0x80, - 0x08, - 0x80, - 0x08, - 0x9F, - 0x08, - 0x91, - 0x0F, - 0x11, - 0x00, - 0x11, - 0x00, - 0xFF, - 0xF1, - 0x11, - 0x91, - 0x11, - 0x91, - 0x11, - 0x91, - 0xFF, - 0xF1, -}; -static constexpr Bitmap bitmap_icon_tetris{ - {16, 16}, - bitmap_icon_tetris_data}; - -static constexpr uint8_t bitmap_icon_brightness_data[] = { - 0x00, - 0x00, - 0x80, - 0x01, - 0x84, - 0x21, - 0x08, - 0x10, - 0xC0, - 0x03, - 0xE0, - 0x07, - 0xF0, - 0x0F, - 0xF6, - 0x6F, - 0xF6, - 0x6F, - 0xF0, - 0x0F, - 0xE0, - 0x07, - 0xC0, - 0x03, - 0x08, - 0x10, - 0x84, - 0x21, - 0x80, - 0x01, - 0x00, - 0x00, -}; -static constexpr Bitmap bitmap_icon_brightness{ - {16, 16}, - bitmap_icon_brightness_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_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, - 0xF8, - 0x1F, - 0xFC, - 0x3F, - 0xFC, - 0x3F, -}; -static constexpr Bitmap bitmap_icon_nuoptix{ - {16, 16}, - bitmap_icon_nuoptix_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 Bitmap bitmap_icon_ais{ - {16, 16}, - bitmap_icon_ais_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_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, - 0x00, - 0x00, -}; -static constexpr Bitmap bitmap_sd_card_unknown{ - {16, 16}, - bitmap_sd_card_unknown_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, - 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_noise{ - {32, 32}, - bitmap_sig_noise_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 Bitmap bitmap_icon_aprs{ - {16, 16}, - bitmap_icon_aprs_data}; - -static constexpr uint8_t bitmap_icon_save_data[] = { - 0xFC, - 0x07, - 0x0A, - 0x0A, - 0x0A, - 0x12, - 0xF2, - 0x21, - 0x02, - 0x20, - 0x02, - 0x20, - 0x02, - 0x20, - 0x02, - 0x20, - 0xFA, - 0x27, - 0xFA, - 0x2F, - 0x0A, - 0x28, - 0xFA, - 0x2F, - 0x0A, - 0x28, - 0xFA, - 0x2F, - 0xFC, - 0x1F, - 0x00, - 0x00, -}; -static constexpr Bitmap bitmap_icon_save{ - {16, 16}, - bitmap_icon_save_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_shift_data[] = { - 0x00, - 0x00, - 0x80, - 0x00, - 0xC0, - 0x01, - 0xE0, - 0x03, - 0xF0, - 0x07, - 0xF8, - 0x0F, - 0xFC, - 0x1F, - 0xE0, - 0x03, - 0xE0, - 0x03, - 0xE0, - 0x03, - 0x20, - 0x02, - 0xE0, - 0x03, - 0x20, - 0x02, - 0xE0, - 0x03, - 0x00, - 0x00, - 0x00, - 0x00, -}; -static constexpr Bitmap bitmap_icon_shift{ - {16, 16}, - bitmap_icon_shift_data}; - -static constexpr uint8_t bitmap_icon_batt_icon_data[] = { - 0xC0, - 0x03, - 0xC0, - 0x03, - 0xF0, - 0x0F, - 0x10, - 0x08, - 0x10, - 0x08, - 0x10, - 0x08, - 0x10, - 0x08, - 0x10, - 0x08, - 0xF0, - 0x0F, - 0xF0, - 0x0F, - 0xF0, - 0x0F, - 0xF0, - 0x0F, - 0xF0, - 0x0F, - 0xF0, - 0x0F, - 0xF0, - 0x0F, - 0x00, - 0x00, -}; -static constexpr Bitmap bitmap_icon_batt_icon{ - {16, 16}, - bitmap_icon_batt_icon_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_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_icon_sleep{ - {16, 16}, - bitmap_icon_sleep_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_icon_copy_data[] = { - 0x00, - 0x00, - 0xFC, - 0x00, - 0x84, - 0x01, - 0xC4, - 0x0F, - 0x74, - 0x18, - 0x44, - 0x38, - 0x44, - 0x78, - 0x74, - 0x40, - 0x44, - 0x44, - 0x44, - 0x44, - 0x74, - 0x5F, - 0x44, - 0x44, - 0x44, - 0x44, - 0x7C, - 0x40, - 0xC0, - 0x7F, - 0x00, - 0x00, -}; -static constexpr Bitmap bitmap_icon_copy{ - {16, 16}, - bitmap_icon_copy_data}; - -static constexpr uint8_t bitmap_icon_burger_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, - 0x00, - 0x00, -}; -static constexpr Bitmap bitmap_icon_burger{ - {16, 16}, - bitmap_icon_burger_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_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_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_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_arrow_left_data[] = { - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x20, - 0x00, - 0x30, - 0x00, - 0x38, - 0x00, - 0xFC, - 0x7F, - 0xFE, - 0x7F, - 0xFC, - 0x7F, - 0x38, - 0x00, - 0x30, - 0x00, - 0x20, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, -}; -static constexpr Bitmap bitmap_arrow_left{ - {16, 16}, - bitmap_arrow_left_data}; - -static constexpr uint8_t bitmap_icon_add_data[] = { - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x80, - 0x01, - 0x80, - 0x01, - 0x80, - 0x01, - 0x80, - 0x01, - 0xF8, - 0x1F, - 0xF8, - 0x1F, - 0x80, - 0x01, - 0x80, - 0x01, - 0x80, - 0x01, - 0x80, - 0x01, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, -}; -static constexpr Bitmap bitmap_icon_add{ - {16, 16}, - bitmap_icon_add_data}; - -static constexpr uint8_t bitmap_icon_upconvert_data[] = { - 0x80, - 0x01, - 0xC0, - 0x03, - 0xE0, - 0x07, - 0xF0, - 0x0F, - 0xF8, - 0x1F, - 0x80, - 0x01, - 0x80, - 0x01, - 0x80, - 0x01, - 0x80, - 0x01, - 0x00, - 0x00, - 0x77, - 0x77, - 0x51, - 0x51, - 0x33, - 0x53, - 0x51, - 0x51, - 0x51, - 0x77, - 0x00, - 0x80, -}; -static constexpr Bitmap bitmap_icon_upconvert{ - {16, 16}, - bitmap_icon_upconvert_data}; - -static constexpr uint8_t bitmap_icon_sd_data[] = { - 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, - 0x00, - 0x00, - 0x00, - 0x00, -}; -static constexpr Bitmap bitmap_icon_sd{ - {16, 16}, - bitmap_icon_sd_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_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_icon_font_viewer_data[] = { - 0x00, - 0x00, - 0x00, - 0x00, - 0x10, - 0x0C, - 0x38, - 0x0C, - 0x38, - 0x0C, - 0x6C, - 0x0C, - 0x6C, - 0x0C, - 0xC6, - 0x7C, - 0xFE, - 0xFC, - 0xFF, - 0x8D, - 0x83, - 0x8D, - 0x83, - 0xFD, - 0x01, - 0x7D, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, -}; -static constexpr Bitmap bitmap_icon_font_viewer{ - {16, 16}, - bitmap_icon_font_viewer_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, - 0x00, - 0x00, -}; -static constexpr Bitmap bitmap_icon_rename_numeric{ - {16, 16}, - bitmap_icon_rename_numeric_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_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_soundboard{ - {16, 16}, - bitmap_icon_soundboard_data}; - -static constexpr uint8_t bitmap_icon_new_dir_data[] = { - 0x00, - 0x00, - 0x1E, - 0x00, - 0x21, - 0x00, - 0xE1, - 0x7F, - 0x01, - 0xC0, - 0x81, - 0x81, - 0x81, - 0x81, - 0x81, - 0x81, - 0xF1, - 0x8F, - 0xF1, - 0x8F, - 0x81, - 0x81, - 0x81, - 0x81, - 0x81, - 0x81, - 0x03, - 0xC0, - 0xFE, - 0x7F, - 0x00, - 0x00, -}; -static constexpr Bitmap bitmap_icon_new_dir{ - {16, 16}, - bitmap_icon_new_dir_data}; - -static constexpr uint8_t bitmap_icon_hide_data[] = { - 0x00, - 0x00, - 0x00, - 0x40, - 0x00, - 0x20, - 0xE0, - 0x17, - 0x18, - 0x18, - 0xC4, - 0x27, - 0x62, - 0x42, - 0x21, - 0x85, - 0xA1, - 0x84, - 0x62, - 0x46, - 0xA4, - 0x23, - 0x18, - 0x18, - 0xE8, - 0x07, - 0x04, - 0x00, - 0x02, - 0x00, - 0x00, - 0x00, -}; -static constexpr Bitmap bitmap_icon_hide{ - {16, 16}, - bitmap_icon_hide_data}; - -static constexpr uint8_t bitmap_icon_qr_code_data[] = { - 0x00, - 0x00, - 0xFE, - 0x7E, - 0xC6, - 0x62, - 0xFA, - 0x5A, - 0xFA, - 0x5A, - 0xDA, - 0x5A, - 0xFE, - 0x7E, - 0x7E, - 0x7E, - 0x00, - 0x00, - 0xFE, - 0x46, - 0xC2, - 0x06, - 0xFA, - 0x18, - 0xFA, - 0x18, - 0xC6, - 0x60, - 0xFE, - 0x62, - 0x00, - 0x00, -}; -static constexpr Bitmap bitmap_icon_qr_code{ - {16, 16}, - bitmap_icon_qr_code_data}; - -static constexpr uint8_t bitmap_sig_sine_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, - 0x03, - 0xC0, - 0x00, - 0x80, - 0x07, - 0xE0, - 0x01, - 0xC0, - 0x0F, - 0xF0, - 0x03, - 0xC0, - 0x0C, - 0x30, - 0x03, - 0x60, - 0x18, - 0x18, - 0x06, - 0x60, - 0x18, - 0x18, - 0x06, - 0x60, - 0x18, - 0x18, - 0x06, - 0x60, - 0x18, - 0x18, - 0x06, - 0x30, - 0x30, - 0x0C, - 0x0C, - 0x30, - 0x30, - 0x0C, - 0x0C, - 0x30, - 0x30, - 0x0C, - 0x0C, - 0x30, - 0x30, - 0x0C, - 0x0C, - 0x18, - 0x60, - 0x06, - 0x18, - 0x1E, - 0xE0, - 0x07, - 0x78, - 0x0E, - 0xC0, - 0x03, - 0x70, - 0x06, - 0x80, - 0x01, - 0x60, - 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_sine{ - {32, 32}, - bitmap_sig_sine_data}; - -static constexpr uint8_t bitmap_icon_touchtunes_data[] = { - 0xE0, - 0x07, - 0x30, - 0x0C, - 0x7C, - 0x3E, - 0xC4, - 0x23, - 0x26, - 0x64, - 0x12, - 0x48, - 0x0F, - 0xF3, - 0x09, - 0x95, - 0x0F, - 0xF1, - 0x09, - 0x91, - 0x0F, - 0xF1, - 0xC9, - 0x91, - 0xE9, - 0x91, - 0xC9, - 0x90, - 0x0F, - 0xF0, - 0xFF, - 0xFF, -}; -static constexpr Bitmap bitmap_icon_touchtunes{ - {16, 16}, - bitmap_icon_touchtunes_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 Bitmap bitmap_icon_tools_antenna{ - {16, 16}, - bitmap_icon_tools_antenna_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, - 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 uint8_t bitmap_icon_looking_data[] = { - 0xF8, - 0x01, - 0xFC, - 0x03, - 0x0E, - 0x07, - 0x07, - 0x0E, - 0xF3, - 0x0C, - 0x9F, - 0x0F, - 0x9F, - 0x0F, - 0xF3, - 0x0C, - 0x07, - 0x0E, - 0x0E, - 0x07, - 0xFC, - 0x1F, - 0xF8, - 0x3D, - 0x00, - 0x7C, - 0x00, - 0xF8, - 0x00, - 0xF0, - 0x00, - 0x60, -}; -static constexpr Bitmap bitmap_icon_looking{ - {16, 16}, - bitmap_icon_looking_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_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_target_verify_data[] = { - 0x00, - 0xE0, - 0x07, - 0x00, - 0x00, - 0xFC, - 0x3F, - 0x00, - 0x00, - 0x1F, - 0xF8, - 0x00, - 0xC0, - 0x03, - 0xC0, - 0x03, - 0xE0, - 0x00, - 0x00, - 0x07, - 0x70, - 0x00, - 0x00, - 0x0E, - 0x38, - 0x00, - 0x00, - 0x1C, - 0x18, - 0x00, - 0x00, - 0x18, - 0x0C, - 0x00, - 0x00, - 0x30, - 0x0C, - 0x00, - 0x00, - 0x30, - 0x06, - 0x00, - 0x00, - 0x60, - 0x06, - 0x00, - 0x00, - 0x60, - 0x06, - 0x00, - 0x00, - 0x60, - 0x03, - 0x80, - 0x01, - 0xC0, - 0x03, - 0x80, - 0x01, - 0xC0, - 0x03, - 0xE0, - 0x07, - 0xC0, - 0x03, - 0xE0, - 0x07, - 0xC0, - 0x03, - 0x80, - 0x01, - 0xC0, - 0x03, - 0x80, - 0x01, - 0xC0, - 0x06, - 0x00, - 0x00, - 0x60, - 0x06, - 0x00, - 0x00, - 0x60, - 0x06, - 0x00, - 0x00, - 0x60, - 0x0C, - 0x00, - 0x00, - 0x30, - 0x0C, - 0x00, - 0x00, - 0x30, - 0x18, - 0x00, - 0x00, - 0x18, - 0x38, - 0x00, - 0x00, - 0x1C, - 0x70, - 0x00, - 0x00, - 0x0E, - 0xE0, - 0x00, - 0x00, - 0x07, - 0xC0, - 0x03, - 0xC0, - 0x03, - 0x00, - 0x1F, - 0xF8, - 0x00, - 0x00, - 0xFC, - 0x3F, - 0x00, - 0x00, - 0xE0, - 0x07, - 0x00, -}; -static constexpr Bitmap bitmap_target_verify{ - {32, 32}, - bitmap_target_verify_data}; - -static constexpr uint8_t bitmap_icon_fox_data[] = { - 0x18, - 0x18, - 0x28, - 0x14, - 0x68, - 0x16, - 0x68, - 0x16, - 0xC8, - 0x13, - 0x88, - 0x11, - 0x04, - 0x20, - 0x24, - 0x24, - 0x22, - 0x44, - 0x01, - 0x80, - 0x06, - 0x60, - 0x98, - 0x19, - 0x20, - 0x04, - 0x40, - 0x02, - 0x80, - 0x01, - 0x00, - 0x00, -}; -static constexpr Bitmap bitmap_icon_fox{ - {16, 16}, - bitmap_icon_fox_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, - 0x00, -}; -static constexpr Bitmap bitmap_icon_dmr{ - {16, 16}, - bitmap_icon_dmr_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_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_peripherals_details{ - {16, 16}, - bitmap_icon_peripherals_details_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_options_radio_data[] = { - 0x00, - 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_icon_options_radio{ - {16, 16}, - bitmap_icon_options_radio_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 Bitmap bitmap_icon_delete{ - {16, 16}, - bitmap_icon_delete_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_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_icon_trash_data[] = { - 0x00, - 0x00, - 0xC0, - 0x01, - 0x20, - 0x02, - 0xFC, - 0x1F, - 0x00, - 0x00, - 0xA8, - 0x0A, - 0xA8, - 0x0A, - 0xA8, - 0x0A, - 0xA8, - 0x0A, - 0xA8, - 0x0A, - 0xA8, - 0x0A, - 0xA8, - 0x0A, - 0xA8, - 0x0A, - 0x08, - 0x08, - 0xF0, - 0x07, - 0x00, - 0x00, -}; -static constexpr Bitmap bitmap_icon_trash{ - {16, 16}, - bitmap_icon_trash_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}; - -static constexpr uint8_t bitmap_icon_new_file_data[] = { - 0x00, - 0x00, - 0xFC, - 0x07, - 0x04, - 0x0C, - 0x04, - 0x1C, - 0x04, - 0x3C, - 0x84, - 0x21, - 0x84, - 0x21, - 0x84, - 0x21, - 0xF4, - 0x2F, - 0xF4, - 0x2F, - 0x84, - 0x21, - 0x84, - 0x21, - 0x84, - 0x21, - 0x04, - 0x20, - 0xFC, - 0x3F, - 0x00, - 0x00, -}; -static constexpr Bitmap bitmap_icon_new_file{ - {16, 16}, - bitmap_icon_new_file_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_sd_card_ok_data[] = { - 0x00, - 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_sd_card_ok{ - {16, 16}, - bitmap_sd_card_ok_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_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_notepad{ - {16, 16}, - bitmap_icon_notepad_data}; - -static constexpr uint8_t bitmap_sig_tri_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, - 0x03, - 0xC0, - 0x00, - 0x00, - 0x03, - 0xC0, - 0x00, - 0x80, - 0x07, - 0xE0, - 0x01, - 0x80, - 0x07, - 0xE0, - 0x01, - 0xC0, - 0x0C, - 0x30, - 0x03, - 0xC0, - 0x0C, - 0x30, - 0x03, - 0x60, - 0x18, - 0x18, - 0x06, - 0x60, - 0x18, - 0x18, - 0x06, - 0x30, - 0x30, - 0x0C, - 0x0C, - 0x30, - 0x30, - 0x0C, - 0x0C, - 0x18, - 0x60, - 0x06, - 0x18, - 0x18, - 0x60, - 0x06, - 0x18, - 0x0E, - 0xC0, - 0x03, - 0x70, - 0x0E, - 0xC0, - 0x03, - 0x70, - 0x06, - 0x80, - 0x01, - 0x60, - 0x06, - 0x80, - 0x01, - 0x60, - 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_tri{ - {32, 32}, - bitmap_sig_tri_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_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_speaker_mute{ - {16, 16}, - bitmap_icon_speaker_mute_data}; - -static constexpr uint8_t bitmap_icon_downconvert_data[] = { - 0x00, - 0x00, - 0x77, - 0x77, - 0x51, - 0x51, - 0x33, - 0x53, - 0x51, - 0x51, - 0x51, - 0x77, - 0x00, - 0x80, - 0x80, - 0x01, - 0x80, - 0x01, - 0x80, - 0x01, - 0x80, - 0x01, - 0xF8, - 0x1F, - 0xF0, - 0x0F, - 0xE0, - 0x07, - 0xC0, - 0x03, - 0x80, - 0x01, -}; -static constexpr Bitmap bitmap_icon_downconvert{ - {16, 16}, - bitmap_icon_downconvert_data}; - -static constexpr uint8_t bitmap_icon_peripherals_data[] = { - 0x54, - 0x01, - 0x54, - 0x01, - 0xFF, - 0x07, - 0x7C, - 0x01, - 0xBF, - 0x07, - 0xDC, - 0x18, - 0x6F, - 0x10, - 0x2C, - 0x21, - 0xAF, - 0x20, - 0x34, - 0x20, - 0x54, - 0x10, - 0xC0, - 0x38, - 0x00, - 0x77, - 0x00, - 0xE0, - 0x00, - 0xC0, - 0x00, - 0x00, -}; -static constexpr Bitmap bitmap_icon_peripherals{ - {16, 16}, - bitmap_icon_peripherals_data}; - -static constexpr uint8_t bitmap_icon_batt_text_data[] = { - 0x00, - 0x00, - 0x30, - 0x06, - 0x48, - 0x09, - 0x48, - 0x09, - 0x70, - 0x0E, - 0x40, - 0x08, - 0x30, - 0x06, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x48, - 0x00, - 0x20, - 0x00, - 0x10, - 0x00, - 0x48, - 0x00, - 0x00, - 0x00, -}; -static constexpr Bitmap bitmap_icon_batt_text{ - {16, 16}, - bitmap_icon_batt_text_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_icon_scanner_data[] = { - 0x03, - 0x00, - 0x00, - 0x00, - 0x03, - 0x00, - 0x00, - 0x00, - 0x0F, - 0x00, - 0x00, - 0x00, - 0x03, - 0x01, - 0x80, - 0x01, - 0xC3, - 0x00, - 0xE0, - 0xFF, - 0xEF, - 0xFF, - 0xC0, - 0x00, - 0x83, - 0x01, - 0x00, - 0x01, - 0x03, - 0x00, - 0x00, - 0x00, -}; -static constexpr Bitmap bitmap_icon_scanner{ - {16, 16}, - bitmap_icon_scanner_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_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_microphone{ - {16, 16}, - bitmap_icon_microphone_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_more_data[] = { - 0x10, - 0x10, - 0x10, - 0x10, - 0x54, - 0x38, - 0x10, - 0x00, -}; -static constexpr Bitmap bitmap_more{ - {8, 8}, - bitmap_more_data}; - -static constexpr uint8_t bitmap_icon_speaker_and_headphones_mute_data[] = { - 0x40, - 0x00, - 0x60, - 0x44, - 0x70, - 0x6C, - 0x7C, - 0x38, - 0x7C, - 0x10, - 0x7C, - 0x38, - 0x70, - 0x6C, - 0x60, - 0x44, - 0x40, - 0x00, - 0x00, - 0x44, - 0x30, - 0x6C, - 0x48, - 0x38, - 0x84, - 0x10, - 0x84, - 0x38, - 0x86, - 0x6D, - 0x86, - 0x45, -}; -static constexpr Bitmap bitmap_icon_speaker_and_headphones_mute{ - {16, 16}, - bitmap_icon_speaker_and_headphones_mute_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, - 0x00, - 0x00, -}; -static constexpr Bitmap bitmap_icon_biast_off{ - {16, 16}, - bitmap_icon_biast_off_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 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}; - -} /* namespace ui */ - -#endif/*__BITMAP_HPP__*/ From 921f177762bcab4d8cb1328a683c63f4715c4964 Mon Sep 17 00:00:00 2001 From: zxkmm Date: Sun, 29 Sep 2024 15:39:39 +0800 Subject: [PATCH 16/27] get cmake format back --- firmware/application/external/external.cmake | 202 +++++++++---------- 1 file changed, 101 insertions(+), 101 deletions(-) diff --git a/firmware/application/external/external.cmake b/firmware/application/external/external.cmake index 5aaf8d77..a095d802 100644 --- a/firmware/application/external/external.cmake +++ b/firmware/application/external/external.cmake @@ -1,130 +1,130 @@ set(EXTCPPSRC - #tetris - external/tetris/main.cpp - external/tetris/ui_tetris.cpp + #tetris + external/tetris/main.cpp + external/tetris/ui_tetris.cpp - #afsk_rx - external/afsk_rx/main.cpp - external/afsk_rx/ui_afsk_rx.cpp + #afsk_rx + external/afsk_rx/main.cpp + external/afsk_rx/ui_afsk_rx.cpp - #calculator - external/calculator/main.cpp - external/calculator/ui_calculator.cpp + #calculator + external/calculator/main.cpp + external/calculator/ui_calculator.cpp - #font_viewer - external/font_viewer/main.cpp - external/font_viewer/ui_font_viewer.cpp + #font_viewer + external/font_viewer/main.cpp + external/font_viewer/ui_font_viewer.cpp - #blespam - external/blespam/main.cpp - external/blespam/ui_blespam.cpp + #blespam + external/blespam/main.cpp + external/blespam/ui_blespam.cpp - #analogtv - external/analogtv/main.cpp - external/analogtv/analog_tv_app.cpp + #analogtv + external/analogtv/main.cpp + external/analogtv/analog_tv_app.cpp - #nrf_rx - external/nrf_rx/main.cpp - external/nrf_rx/ui_nrf_rx.cpp + #nrf_rx + external/nrf_rx/main.cpp + external/nrf_rx/ui_nrf_rx.cpp - #coasterp - external/coasterp/main.cpp - external/coasterp/ui_coasterp.cpp + #coasterp + external/coasterp/main.cpp + external/coasterp/ui_coasterp.cpp - #lge - external/lge/main.cpp - external/lge/lge_app.cpp + #lge + external/lge/main.cpp + external/lge/lge_app.cpp - #lcr - external/lcr/main.cpp - external/lcr/ui_lcr.cpp + #lcr + external/lcr/main.cpp + external/lcr/ui_lcr.cpp - #jammer - external/jammer/main.cpp - external/jammer/ui_jammer.cpp + #jammer + external/jammer/main.cpp + external/jammer/ui_jammer.cpp - #gpssim - external/gpssim/main.cpp - external/gpssim/gps_sim_app.cpp + #gpssim + external/gpssim/main.cpp + external/gpssim/gps_sim_app.cpp - #spainter - external/spainter/main.cpp - external/spainter/ui_spectrum_painter.cpp - external/spainter/ui_spectrum_painter_text.cpp - external/spainter/ui_spectrum_painter_image.cpp + #spainter + external/spainter/main.cpp + external/spainter/ui_spectrum_painter.cpp + external/spainter/ui_spectrum_painter_text.cpp + external/spainter/ui_spectrum_painter_image.cpp - #keyfob - external/keyfob/main.cpp - external/keyfob/ui_keyfob.cpp - external/keyfob/ui_keyfob.hpp + #keyfob + external/keyfob/main.cpp + external/keyfob/ui_keyfob.cpp + external/keyfob/ui_keyfob.hpp - #extsensors - external/extsensors/main.cpp - external/extsensors/ui_extsensors.cpp - external/extsensors/ui_extsensors.hpp + #extsensors + external/extsensors/main.cpp + external/extsensors/ui_extsensors.cpp + external/extsensors/ui_extsensors.hpp - #foxhunt - external/foxhunt/main.cpp - external/foxhunt/ui_foxhunt_rx.cpp - external/foxhunt/ui_foxhunt_rx.hpp + #foxhunt + external/foxhunt/main.cpp + external/foxhunt/ui_foxhunt_rx.cpp + external/foxhunt/ui_foxhunt_rx.hpp - #audio_test - external/audio_test/main.cpp - external/audio_test/ui_audio_test.cpp + #audio_test + external/audio_test/main.cpp + external/audio_test/ui_audio_test.cpp - #wardrivemap - external/wardrivemap/main.cpp - external/wardrivemap/ui_wardrivemap.cpp + #wardrivemap + external/wardrivemap/main.cpp + external/wardrivemap/ui_wardrivemap.cpp - #tpmsrx - external/tpmsrx/main.cpp - external/tpmsrx/tpms_app.cpp + #tpmsrx + external/tpmsrx/main.cpp + external/tpmsrx/tpms_app.cpp - #protoview - external/protoview/main.cpp - external/protoview/ui_protoview.cpp + #protoview + external/protoview/main.cpp + external/protoview/ui_protoview.cpp - #adsbtx - external/adsbtx/main.cpp - external/adsbtx/ui_adsb_tx.cpp + #adsbtx + external/adsbtx/main.cpp + external/adsbtx/ui_adsb_tx.cpp - #morse_tx - external/morse_tx/main.cpp - external/morse_tx/ui_morse.cpp + #morse_tx + external/morse_tx/main.cpp + external/morse_tx/ui_morse.cpp - #sstvtx - external/sstvtx/main.cpp - external/sstvtx/ui_sstvtx.cpp + #sstvtx + external/sstvtx/main.cpp + external/sstvtx/ui_sstvtx.cpp - #random - external/random/main.cpp - external/random/ui_random.cpp + #random + external/random/main.cpp + external/random/ui_random.cpp ) set(EXTAPPLIST - afsk_rx - calculator - font_viewer - blespam - nrf_rx - analogtv - coasterp - lge - lcr - jammer - gpssim - spainter - keyfob - tetris - extsensors - foxhunt_rx - audio_test - wardrivemap - tpmsrx - protoview - adsbtx - morse_tx - sstvtx - random + afsk_rx + calculator + font_viewer + blespam + nrf_rx + analogtv + coasterp + lge + lcr + jammer + gpssim + spainter + keyfob + tetris + extsensors + foxhunt_rx + audio_test + wardrivemap + tpmsrx + protoview + adsbtx + morse_tx + sstvtx + random ) From d5c2ef72800f06e4b2e6b79e9e662b3901161673 Mon Sep 17 00:00:00 2001 From: zxkmm Date: Sun, 29 Sep 2024 15:43:11 +0800 Subject: [PATCH 17/27] get cmake format back - try2 --- firmware/application/external/external.cmake | 4 ---- 1 file changed, 4 deletions(-) diff --git a/firmware/application/external/external.cmake b/firmware/application/external/external.cmake index a095d802..0695272f 100644 --- a/firmware/application/external/external.cmake +++ b/firmware/application/external/external.cmake @@ -96,10 +96,6 @@ set(EXTCPPSRC #sstvtx external/sstvtx/main.cpp external/sstvtx/ui_sstvtx.cpp - - #random - external/random/main.cpp - external/random/ui_random.cpp ) set(EXTAPPLIST From fd3b053a84a06a23ff15e269d8b6ef53b706be0e Mon Sep 17 00:00:00 2001 From: zxkmm Date: Sun, 29 Sep 2024 15:50:00 +0800 Subject: [PATCH 18/27] try to revert cmake file --- firmware/application/external/external.cmake | 200 ++++++++++--------- 1 file changed, 102 insertions(+), 98 deletions(-) diff --git a/firmware/application/external/external.cmake b/firmware/application/external/external.cmake index 0695272f..5aaf8d77 100644 --- a/firmware/application/external/external.cmake +++ b/firmware/application/external/external.cmake @@ -1,126 +1,130 @@ set(EXTCPPSRC - #tetris - external/tetris/main.cpp - external/tetris/ui_tetris.cpp + #tetris + external/tetris/main.cpp + external/tetris/ui_tetris.cpp - #afsk_rx - external/afsk_rx/main.cpp - external/afsk_rx/ui_afsk_rx.cpp + #afsk_rx + external/afsk_rx/main.cpp + external/afsk_rx/ui_afsk_rx.cpp - #calculator - external/calculator/main.cpp - external/calculator/ui_calculator.cpp + #calculator + external/calculator/main.cpp + external/calculator/ui_calculator.cpp - #font_viewer - external/font_viewer/main.cpp - external/font_viewer/ui_font_viewer.cpp + #font_viewer + external/font_viewer/main.cpp + external/font_viewer/ui_font_viewer.cpp - #blespam - external/blespam/main.cpp - external/blespam/ui_blespam.cpp + #blespam + external/blespam/main.cpp + external/blespam/ui_blespam.cpp - #analogtv - external/analogtv/main.cpp - external/analogtv/analog_tv_app.cpp + #analogtv + external/analogtv/main.cpp + external/analogtv/analog_tv_app.cpp - #nrf_rx - external/nrf_rx/main.cpp - external/nrf_rx/ui_nrf_rx.cpp + #nrf_rx + external/nrf_rx/main.cpp + external/nrf_rx/ui_nrf_rx.cpp - #coasterp - external/coasterp/main.cpp - external/coasterp/ui_coasterp.cpp + #coasterp + external/coasterp/main.cpp + external/coasterp/ui_coasterp.cpp - #lge - external/lge/main.cpp - external/lge/lge_app.cpp + #lge + external/lge/main.cpp + external/lge/lge_app.cpp - #lcr - external/lcr/main.cpp - external/lcr/ui_lcr.cpp + #lcr + external/lcr/main.cpp + external/lcr/ui_lcr.cpp - #jammer - external/jammer/main.cpp - external/jammer/ui_jammer.cpp + #jammer + external/jammer/main.cpp + external/jammer/ui_jammer.cpp - #gpssim - external/gpssim/main.cpp - external/gpssim/gps_sim_app.cpp + #gpssim + external/gpssim/main.cpp + external/gpssim/gps_sim_app.cpp - #spainter - external/spainter/main.cpp - external/spainter/ui_spectrum_painter.cpp - external/spainter/ui_spectrum_painter_text.cpp - external/spainter/ui_spectrum_painter_image.cpp + #spainter + external/spainter/main.cpp + external/spainter/ui_spectrum_painter.cpp + external/spainter/ui_spectrum_painter_text.cpp + external/spainter/ui_spectrum_painter_image.cpp - #keyfob - external/keyfob/main.cpp - external/keyfob/ui_keyfob.cpp - external/keyfob/ui_keyfob.hpp + #keyfob + external/keyfob/main.cpp + external/keyfob/ui_keyfob.cpp + external/keyfob/ui_keyfob.hpp - #extsensors - external/extsensors/main.cpp - external/extsensors/ui_extsensors.cpp - external/extsensors/ui_extsensors.hpp + #extsensors + external/extsensors/main.cpp + external/extsensors/ui_extsensors.cpp + external/extsensors/ui_extsensors.hpp - #foxhunt - external/foxhunt/main.cpp - external/foxhunt/ui_foxhunt_rx.cpp - external/foxhunt/ui_foxhunt_rx.hpp + #foxhunt + external/foxhunt/main.cpp + external/foxhunt/ui_foxhunt_rx.cpp + external/foxhunt/ui_foxhunt_rx.hpp - #audio_test - external/audio_test/main.cpp - external/audio_test/ui_audio_test.cpp + #audio_test + external/audio_test/main.cpp + external/audio_test/ui_audio_test.cpp - #wardrivemap - external/wardrivemap/main.cpp - external/wardrivemap/ui_wardrivemap.cpp + #wardrivemap + external/wardrivemap/main.cpp + external/wardrivemap/ui_wardrivemap.cpp - #tpmsrx - external/tpmsrx/main.cpp - external/tpmsrx/tpms_app.cpp + #tpmsrx + external/tpmsrx/main.cpp + external/tpmsrx/tpms_app.cpp - #protoview - external/protoview/main.cpp - external/protoview/ui_protoview.cpp + #protoview + external/protoview/main.cpp + external/protoview/ui_protoview.cpp - #adsbtx - external/adsbtx/main.cpp - external/adsbtx/ui_adsb_tx.cpp + #adsbtx + external/adsbtx/main.cpp + external/adsbtx/ui_adsb_tx.cpp - #morse_tx - external/morse_tx/main.cpp - external/morse_tx/ui_morse.cpp + #morse_tx + external/morse_tx/main.cpp + external/morse_tx/ui_morse.cpp - #sstvtx - external/sstvtx/main.cpp - external/sstvtx/ui_sstvtx.cpp + #sstvtx + external/sstvtx/main.cpp + external/sstvtx/ui_sstvtx.cpp + + #random + external/random/main.cpp + external/random/ui_random.cpp ) set(EXTAPPLIST - afsk_rx - calculator - font_viewer - blespam - nrf_rx - analogtv - coasterp - lge - lcr - jammer - gpssim - spainter - keyfob - tetris - extsensors - foxhunt_rx - audio_test - wardrivemap - tpmsrx - protoview - adsbtx - morse_tx - sstvtx - random + afsk_rx + calculator + font_viewer + blespam + nrf_rx + analogtv + coasterp + lge + lcr + jammer + gpssim + spainter + keyfob + tetris + extsensors + foxhunt_rx + audio_test + wardrivemap + tpmsrx + protoview + adsbtx + morse_tx + sstvtx + random ) From 60b2f265366137c494b27219c5c19de8b204a1aa Mon Sep 17 00:00:00 2001 From: zxkmm Date: Sun, 29 Sep 2024 15:52:01 +0800 Subject: [PATCH 19/27] get cmake format back - try3 --- firmware/application/external/external.cmake | 199 +++++++++---------- 1 file changed, 97 insertions(+), 102 deletions(-) diff --git a/firmware/application/external/external.cmake b/firmware/application/external/external.cmake index 5aaf8d77..8bc794ec 100644 --- a/firmware/application/external/external.cmake +++ b/firmware/application/external/external.cmake @@ -1,130 +1,125 @@ set(EXTCPPSRC - #tetris - external/tetris/main.cpp - external/tetris/ui_tetris.cpp + #tetris + external/tetris/main.cpp + external/tetris/ui_tetris.cpp - #afsk_rx - external/afsk_rx/main.cpp - external/afsk_rx/ui_afsk_rx.cpp + #afsk_rx + external/afsk_rx/main.cpp + external/afsk_rx/ui_afsk_rx.cpp - #calculator - external/calculator/main.cpp - external/calculator/ui_calculator.cpp + #calculator + external/calculator/main.cpp + external/calculator/ui_calculator.cpp - #font_viewer - external/font_viewer/main.cpp - external/font_viewer/ui_font_viewer.cpp + #font_viewer + external/font_viewer/main.cpp + external/font_viewer/ui_font_viewer.cpp - #blespam - external/blespam/main.cpp - external/blespam/ui_blespam.cpp + #blespam + external/blespam/main.cpp + external/blespam/ui_blespam.cpp - #analogtv - external/analogtv/main.cpp - external/analogtv/analog_tv_app.cpp + #analogtv + external/analogtv/main.cpp + external/analogtv/analog_tv_app.cpp - #nrf_rx - external/nrf_rx/main.cpp - external/nrf_rx/ui_nrf_rx.cpp + #nrf_rx + external/nrf_rx/main.cpp + external/nrf_rx/ui_nrf_rx.cpp - #coasterp - external/coasterp/main.cpp - external/coasterp/ui_coasterp.cpp + #coasterp + external/coasterp/main.cpp + external/coasterp/ui_coasterp.cpp - #lge - external/lge/main.cpp - external/lge/lge_app.cpp + #lge + external/lge/main.cpp + external/lge/lge_app.cpp - #lcr - external/lcr/main.cpp - external/lcr/ui_lcr.cpp + #lcr + external/lcr/main.cpp + external/lcr/ui_lcr.cpp - #jammer - external/jammer/main.cpp - external/jammer/ui_jammer.cpp + #jammer + external/jammer/main.cpp + external/jammer/ui_jammer.cpp - #gpssim - external/gpssim/main.cpp - external/gpssim/gps_sim_app.cpp + #gpssim + external/gpssim/main.cpp + external/gpssim/gps_sim_app.cpp - #spainter - external/spainter/main.cpp - external/spainter/ui_spectrum_painter.cpp - external/spainter/ui_spectrum_painter_text.cpp - external/spainter/ui_spectrum_painter_image.cpp + #spainter + external/spainter/main.cpp + external/spainter/ui_spectrum_painter.cpp + external/spainter/ui_spectrum_painter_text.cpp + external/spainter/ui_spectrum_painter_image.cpp - #keyfob - external/keyfob/main.cpp - external/keyfob/ui_keyfob.cpp - external/keyfob/ui_keyfob.hpp + #keyfob + external/keyfob/main.cpp + external/keyfob/ui_keyfob.cpp + external/keyfob/ui_keyfob.hpp - #extsensors - external/extsensors/main.cpp - external/extsensors/ui_extsensors.cpp - external/extsensors/ui_extsensors.hpp + #extsensors + external/extsensors/main.cpp + external/extsensors/ui_extsensors.cpp + external/extsensors/ui_extsensors.hpp - #foxhunt - external/foxhunt/main.cpp - external/foxhunt/ui_foxhunt_rx.cpp - external/foxhunt/ui_foxhunt_rx.hpp + #foxhunt + external/foxhunt/main.cpp + external/foxhunt/ui_foxhunt_rx.cpp + external/foxhunt/ui_foxhunt_rx.hpp - #audio_test - external/audio_test/main.cpp - external/audio_test/ui_audio_test.cpp + #audio_test + external/audio_test/main.cpp + external/audio_test/ui_audio_test.cpp - #wardrivemap - external/wardrivemap/main.cpp - external/wardrivemap/ui_wardrivemap.cpp + #wardrivemap + external/wardrivemap/main.cpp + external/wardrivemap/ui_wardrivemap.cpp - #tpmsrx - external/tpmsrx/main.cpp - external/tpmsrx/tpms_app.cpp + #tpmsrx + external/tpmsrx/main.cpp + external/tpmsrx/tpms_app.cpp - #protoview - external/protoview/main.cpp - external/protoview/ui_protoview.cpp + #protoview + external/protoview/main.cpp + external/protoview/ui_protoview.cpp - #adsbtx - external/adsbtx/main.cpp - external/adsbtx/ui_adsb_tx.cpp + #adsbtx + external/adsbtx/main.cpp + external/adsbtx/ui_adsb_tx.cpp - #morse_tx - external/morse_tx/main.cpp - external/morse_tx/ui_morse.cpp + #morse_tx + external/morse_tx/main.cpp + external/morse_tx/ui_morse.cpp - #sstvtx - external/sstvtx/main.cpp - external/sstvtx/ui_sstvtx.cpp - - #random - external/random/main.cpp - external/random/ui_random.cpp + #sstvtx + external/sstvtx/main.cpp + external/sstvtx/ui_sstvtx.cpp ) set(EXTAPPLIST - afsk_rx - calculator - font_viewer - blespam - nrf_rx - analogtv - coasterp - lge - lcr - jammer - gpssim - spainter - keyfob - tetris - extsensors - foxhunt_rx - audio_test - wardrivemap - tpmsrx - protoview - adsbtx - morse_tx - sstvtx - random + afsk_rx + calculator + font_viewer + blespam + nrf_rx + analogtv + coasterp + lge + lcr + jammer + gpssim + spainter + keyfob + tetris + extsensors + foxhunt_rx + audio_test + wardrivemap + tpmsrx + protoview + adsbtx + morse_tx + sstvtx ) From 51c455ab031baed1f81ef745cbfe5f1d023cf7c5 Mon Sep 17 00:00:00 2001 From: zxkmm Date: Sun, 29 Sep 2024 15:53:09 +0800 Subject: [PATCH 20/27] get cmake format back - try4 --- firmware/application/external/external.cmake | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/firmware/application/external/external.cmake b/firmware/application/external/external.cmake index 8bc794ec..88a34e94 100644 --- a/firmware/application/external/external.cmake +++ b/firmware/application/external/external.cmake @@ -96,6 +96,10 @@ set(EXTCPPSRC #sstvtx external/sstvtx/main.cpp external/sstvtx/ui_sstvtx.cpp + + #random + external/random/main.cpp + external/random/ui_random.cpp ) set(EXTAPPLIST @@ -122,4 +126,5 @@ set(EXTAPPLIST adsbtx morse_tx sstvtx + random ) From 87383eaf6f24a43aaa96c7aeb8e5f9aa70308654 Mon Sep 17 00:00:00 2001 From: zxkmm Date: Sun, 29 Sep 2024 15:54:33 +0800 Subject: [PATCH 21/27] move to util --- firmware/application/external/random/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/application/external/random/main.cpp b/firmware/application/external/random/main.cpp index fb180918..8bdd013d 100644 --- a/firmware/application/external/random/main.cpp +++ b/firmware/application/external/random/main.cpp @@ -74,7 +74,7 @@ __attribute__((section(".external_app.app_random.application_information"), used 0x01, }, /*.icon_color = */ ui::Color::yellow().v, - /*.menu_location = */ app_location_t::RX, + /*.menu_location = */ app_location_t::UTILITIES, /*.m4_app_tag = portapack::spi_flash::image_tag_afsk_rx */ {'P', 'A', 'F', 'R'}, /*.m4_app_offset = */ 0x00000000, // will be filled at compile time From 423bb9ec6a80a80d20dc4e41c4c55b9efeafad8a Mon Sep 17 00:00:00 2001 From: zxkmm Date: Sun, 29 Sep 2024 15:59:31 +0800 Subject: [PATCH 22/27] disable amp when launch --- .../application/external/random/ui_random.cpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/firmware/application/external/random/ui_random.cpp b/firmware/application/external/random/ui_random.cpp index caa7b0aa..2c874119 100644 --- a/firmware/application/external/random/ui_random.cpp +++ b/firmware/application/external/random/ui_random.cpp @@ -111,7 +111,7 @@ RandomView::RandomView(NavigationView& nav) } }; - button_modem_setup.on_select = [&nav](Button&) { //copied from afsk rx app + button_modem_setup.on_select = [&nav](Button&) { // copied from afsk rx app nav.push(); }; @@ -180,6 +180,7 @@ RandomView::RandomView(NavigationView& nav) baseband::set_afsk(persistent_memory::modem_baudrate(), 8, 0, false); receiver_model.enable(); + receiver_model.set_rf_amp(false); set_random_freq(); new_password(); } @@ -278,14 +279,14 @@ void RandomView::new_password() { } } - // TODO: why flash and disappeared - // tried: - // 1. paint inline in new_password func - // 2. paint in a seperate func and call from new_password - // 3. override nav's paint func (i think it can tried to capture same obj) and paint, hoping set_dirty handle it correctly - // 4. override nav's paint func (i think it can tried to capture same obj) and paint in a seperate func, hoping set_dirty handle it correctly - // all these methods failed, and all of them only flash and disappeared. only when set_dirty in on_data (which seems incorrect), and it keep flashing never stop. but see painted content (flashing too) - // btw this is not caused by the seed text set thing, cuz commented it out not helping. +// TODO: why flash and disappeared +// tried: +// 1. paint inline in new_password func +// 2. paint in a seperate func and call from new_password +// 3. override nav's paint func (i think it can tried to capture same obj) and paint, hoping set_dirty handle it correctly +// 4. override nav's paint func (i think it can tried to capture same obj) and paint in a seperate func, hoping set_dirty handle it correctly +// all these methods failed, and all of them only flash and disappeared. only when set_dirty in on_data (which seems incorrect), and it keep flashing never stop. but see painted content (flashing too) +// btw this is not caused by the seed text set thing, cuz commented it out not helping. void RandomView::paint_password_hints() { Painter painter; const int char_width = 8; From 35edb7f7eacd208669627ffaaaa7d062d7bed443 Mon Sep 17 00:00:00 2001 From: zxkmm Date: Sun, 29 Sep 2024 16:29:53 +0800 Subject: [PATCH 23/27] refactor name --- firmware/application/external/external.cmake | 6 ++-- firmware/application/external/external.ld | 10 +++---- .../{random => random_password}/main.cpp | 14 +++++----- .../ui_random_password.cpp} | 28 +++++++++---------- .../ui_random_password.hpp} | 22 +++++++-------- 5 files changed, 40 insertions(+), 40 deletions(-) rename firmware/application/external/{random => random_password}/main.cpp (80%) rename firmware/application/external/{random/ui_random.cpp => random_password/ui_random_password.cpp} (93%) rename firmware/application/external/{random/ui_random.hpp => random_password/ui_random_password.hpp} (91%) diff --git a/firmware/application/external/external.cmake b/firmware/application/external/external.cmake index 88a34e94..5a29ebc4 100644 --- a/firmware/application/external/external.cmake +++ b/firmware/application/external/external.cmake @@ -98,8 +98,8 @@ set(EXTCPPSRC external/sstvtx/ui_sstvtx.cpp #random - external/random/main.cpp - external/random/ui_random.cpp + external/random_password/main.cpp + external/random_password/ui_random_password.cpp ) set(EXTAPPLIST @@ -126,5 +126,5 @@ set(EXTAPPLIST adsbtx morse_tx sstvtx - random + random_password ) diff --git a/firmware/application/external/external.ld b/firmware/application/external/external.ld index 3a26ea5e..f93a617e 100644 --- a/firmware/application/external/external.ld +++ b/firmware/application/external/external.ld @@ -46,7 +46,7 @@ MEMORY ram_external_app_adsbtx(rwx) : org = 0xADC50000, len = 32k ram_external_app_morse_tx(rwx) : org = 0xADC60000, len = 32k ram_external_app_sstvtx(rwx) : org = 0xADC70000, len = 32k - ram_external_app_random(rwx) : org = 0xADC80000, len = 32k + ram_external_app_random_password(rwx) : org = 0xADC80000, len = 32k } SECTIONS @@ -191,10 +191,10 @@ SECTIONS *(*ui*external_app*sstvtx*); } > ram_external_app_sstvtx - .external_app_random : ALIGN(4) SUBALIGN(4) + .external_app_random_password : ALIGN(4) SUBALIGN(4) { - KEEP(*(.external_app.app_random.application_information)); - *(*ui*external_app*random*); - } > ram_external_app_random + KEEP(*(.external_app.app_random_password.application_information)); + *(*ui*external_app*random_password*); + } > ram_external_app_random_password } diff --git a/firmware/application/external/random/main.cpp b/firmware/application/external/random_password/main.cpp similarity index 80% rename from firmware/application/external/random/main.cpp rename to firmware/application/external/random_password/main.cpp index 8bdd013d..0d1ddc75 100644 --- a/firmware/application/external/random/main.cpp +++ b/firmware/application/external/random_password/main.cpp @@ -20,25 +20,25 @@ */ #include "ui.hpp" -#include "ui_random.hpp" +#include "ui_random_password.hpp" #include "ui_navigation.hpp" #include "external_app.hpp" -namespace ui::external_app::random { +namespace ui::external_app::random_password { void initialize_app(ui::NavigationView& nav) { - nav.push(); + nav.push(); } -} // namespace ui::external_app::random +} // namespace ui::external_app::random_password extern "C" { -__attribute__((section(".external_app.app_random.application_information"), used)) application_information_t _application_information_random = { +__attribute__((section(".external_app.app_random_password.application_information"), used)) application_information_t _application_information_random_password = { /*.memory_location = */ (uint8_t*)0x00000000, - /*.externalAppEntry = */ ui::external_app::random::initialize_app, + /*.externalAppEntry = */ ui::external_app::random_password::initialize_app, /*.header_version = */ CURRENT_HEADER_VERSION, /*.app_version = */ VERSION_MD5, - /*.app_name = */ "random", + /*.app_name = */ "random_password", /*.bitmap_data = */ { 0xC0, 0x03, diff --git a/firmware/application/external/random/ui_random.cpp b/firmware/application/external/random_password/ui_random_password.cpp similarity index 93% rename from firmware/application/external/random/ui_random.cpp rename to firmware/application/external/random_password/ui_random_password.cpp index 2c874119..b5e322a2 100644 --- a/firmware/application/external/random/ui_random.cpp +++ b/firmware/application/external/random_password/ui_random_password.cpp @@ -21,7 +21,7 @@ * Boston, MA 02110-1301, USA. */ -#include "ui_random.hpp" +#include "ui_random_password.hpp" #include "ui_modemsetup.hpp" #include "modems.hpp" @@ -35,17 +35,17 @@ using namespace portapack; using namespace modems; using namespace ui; -namespace ui::external_app::random { +namespace ui::external_app::random_password { -void RandomLogger::log_raw_data(const std::string& data) { +void RandomPasswordLogger::log_raw_data(const std::string& data) { log_file.write_entry(data); } -void RandomView::focus() { +void RandomPasswordView::focus() { field_digits.focus(); } -RandomView::RandomView(NavigationView& nav) +RandomPasswordView::RandomPasswordView(NavigationView& nav) : nav_{nav} { baseband::run_prepared_image(portapack::memory::map::m4_code.base()); @@ -172,7 +172,7 @@ RandomView::RandomView(NavigationView& nav) field_digits.set_value(8); ///^ check defauly val init - logger = std::make_unique(); + logger = std::make_unique(); if (logger) logger->append(logs_dir / u"random.TXT"); @@ -185,7 +185,7 @@ RandomView::RandomView(NavigationView& nav) new_password(); } -void RandomView::on_data(uint32_t value, bool is_data) { +void RandomPasswordView::on_data(uint32_t value, bool is_data) { if (paused) return; if (is_data) { @@ -197,11 +197,11 @@ void RandomView::on_data(uint32_t value, bool is_data) { } } -void RandomView::on_freqchg(int64_t freq) { +void RandomPasswordView::on_freqchg(int64_t freq) { field_frequency.set_value(freq); } -void RandomView::set_random_freq() { +void RandomPasswordView::set_random_freq() { std::srand(LPC_RTC->CTIME0); // this is only for seed to visit random freq, the radio is still real random @@ -210,7 +210,7 @@ void RandomView::set_random_freq() { field_frequency.set_value(random_freq); } -void RandomView::new_password() { +void RandomPasswordView::new_password() { password = ""; std::string charset; std::string char_type_hints; @@ -287,7 +287,7 @@ void RandomView::new_password() { // 4. override nav's paint func (i think it can tried to capture same obj) and paint in a seperate func, hoping set_dirty handle it correctly // all these methods failed, and all of them only flash and disappeared. only when set_dirty in on_data (which seems incorrect), and it keep flashing never stop. but see painted content (flashing too) // btw this is not caused by the seed text set thing, cuz commented it out not helping. -void RandomView::paint_password_hints() { +void RandomPasswordView::paint_password_hints() { Painter painter; const int char_width = 8; const int char_height = 16; @@ -314,16 +314,16 @@ void RandomView::paint_password_hints() { } } -std::string RandomView::generate_log_line() { +std::string RandomPasswordView::generate_log_line() { std::string line = "\npassword=" + password + "\nseed=" + std::to_string(seed) + "\n"; return line; } -RandomView::~RandomView() { +RandomPasswordView::~RandomPasswordView() { receiver_model.disable(); baseband::shutdown(); } -} // namespace ui::external_app::random +} // namespace ui::external_app::random_password diff --git a/firmware/application/external/random/ui_random.hpp b/firmware/application/external/random_password/ui_random_password.hpp similarity index 91% rename from firmware/application/external/random/ui_random.hpp rename to firmware/application/external/random_password/ui_random_password.hpp index 4f1040e1..c3e5d659 100644 --- a/firmware/application/external/random/ui_random.hpp +++ b/firmware/application/external/random_password/ui_random_password.hpp @@ -21,8 +21,8 @@ * Boston, MA 02110-1301, USA. */ -#ifndef __UI_RANDOM_H__ -#define __UI_RANDOM_H__ +#ifndef __UI_RANDOM_PASSWORD_H__ +#define __UI_RANDOM_PASSWORD_H__ #include "ui.hpp" #include "ui_language.hpp" @@ -39,9 +39,9 @@ using namespace ui; -namespace ui::external_app::random { +namespace ui::external_app::random_password { -class RandomLogger { +class RandomPasswordLogger { public: Optional append(const std::filesystem::path& filename) { return log_file.append(filename); @@ -53,14 +53,14 @@ class RandomLogger { LogFile log_file{}; }; -class RandomView : public View { +class RandomPasswordView : public View { public: - RandomView(NavigationView& nav); - ~RandomView(); + RandomPasswordView(NavigationView& nav); + ~RandomPasswordView(); void focus() override; - std::string title() const override { return "random"; }; + std::string title() const override { return "r.passwd"; }; private: unsigned int seed = 0; // extern void srand (unsigned int __seed) __THROW; @@ -184,7 +184,7 @@ class RandomView : public View { void on_data_afsk(const AFSKDataMessage& message); - std::unique_ptr logger{}; + std::unique_ptr logger{}; MessageHandlerRegistration message_handler_packet{ Message::ID::AFSKData, @@ -204,6 +204,6 @@ class RandomView : public View { void set_random_freq(); }; -} // namespace ui::external_app::random +} // namespace ui::external_app::random_password -#endif /*__UI_RANDOM_H__*/ +#endif /*__UI_RANDOM_PASSWORD_H__*/ From c4cbc9112c8f755aa46703ff60a9ced8cde30b94 Mon Sep 17 00:00:00 2001 From: zxkmm Date: Sun, 29 Sep 2024 16:37:18 +0800 Subject: [PATCH 24/27] cmake fix --- firmware/application/external/external.cmake | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/firmware/application/external/external.cmake b/firmware/application/external/external.cmake index 5a29ebc4..400515f8 100644 --- a/firmware/application/external/external.cmake +++ b/firmware/application/external/external.cmake @@ -97,9 +97,9 @@ set(EXTCPPSRC external/sstvtx/main.cpp external/sstvtx/ui_sstvtx.cpp - #random - external/random_password/main.cpp - external/random_password/ui_random_password.cpp + #random + external/random_password/main.cpp + external/random_password/ui_random_password.cpp ) set(EXTAPPLIST @@ -126,5 +126,5 @@ set(EXTAPPLIST adsbtx morse_tx sstvtx - random_password + random_password ) From 548e37cd7263a116a37e7863be66bcacc2d09feb Mon Sep 17 00:00:00 2001 From: zxkmm Date: Sun, 29 Sep 2024 16:41:22 +0800 Subject: [PATCH 25/27] try to revert cmake file --- firmware/application/external/external.cmake | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/firmware/application/external/external.cmake b/firmware/application/external/external.cmake index 400515f8..cf0b6b8e 100644 --- a/firmware/application/external/external.cmake +++ b/firmware/application/external/external.cmake @@ -97,9 +97,9 @@ set(EXTCPPSRC external/sstvtx/main.cpp external/sstvtx/ui_sstvtx.cpp - #random - external/random_password/main.cpp - external/random_password/ui_random_password.cpp + #random + external/random_password/main.cpp + external/random_password/ui_random_password.cpp ) set(EXTAPPLIST @@ -126,5 +126,5 @@ set(EXTAPPLIST adsbtx morse_tx sstvtx - random_password + random_password ) From 14ef1332aa65a43b3b35675e5e67ed080509b6d6 Mon Sep 17 00:00:00 2001 From: zxkmm Date: Sun, 29 Sep 2024 21:28:36 +0800 Subject: [PATCH 26/27] init in methods local var --- .../external/random_password/ui_random_password.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/firmware/application/external/random_password/ui_random_password.cpp b/firmware/application/external/random_password/ui_random_password.cpp index b5e322a2..0d748cee 100644 --- a/firmware/application/external/random_password/ui_random_password.cpp +++ b/firmware/application/external/random_password/ui_random_password.cpp @@ -212,8 +212,8 @@ void RandomPasswordView::set_random_freq() { void RandomPasswordView::new_password() { password = ""; - std::string charset; - std::string char_type_hints; + std::string charset = ""; + std::string char_type_hints = ""; if (check_digits.value()) charset += "0123456789"; From 193545b6daf59c82fe2a9fcde83754138f5985dd Mon Sep 17 00:00:00 2001 From: zxkmm Date: Mon, 30 Sep 2024 01:06:30 +0800 Subject: [PATCH 27/27] user another methods to generate --- .../random_password/ui_random_password.cpp | 43 ++++++++++++++++--- .../random_password/ui_random_password.hpp | 13 +++++- 2 files changed, 48 insertions(+), 8 deletions(-) diff --git a/firmware/application/external/random_password/ui_random_password.cpp b/firmware/application/external/random_password/ui_random_password.cpp index 0d748cee..e36b0f8d 100644 --- a/firmware/application/external/random_password/ui_random_password.cpp +++ b/firmware/application/external/random_password/ui_random_password.cpp @@ -2,6 +2,7 @@ * Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc. * Copyright (C) 2017 Furrtek * copyleft zxkmm + * Copyright (C) 2024 HToToo * * This file is part of PortaPack. * @@ -72,7 +73,8 @@ RandomPasswordView::RandomPasswordView(NavigationView& nav) &button_send, &field_digits, &check_allow_confusable_chars, - &text_seed}); + &text_seed, + &progressbar}); // no idea what's these, i copied from afsk rx app and they seems needed' auto def_bell202 = &modem_defs[0]; @@ -84,6 +86,8 @@ RandomPasswordView::RandomPasswordView(NavigationView& nav) serial_format.bit_order = LSB_FIRST; persistent_memory::set_serial_format(serial_format); + progressbar.set_max(30); + check_log.set_value(logging); check_log.on_select = [this](Checkbox&, bool v) { if (v) { @@ -160,6 +164,7 @@ RandomPasswordView::RandomPasswordView(NavigationView& nav) }; field_digits.on_change = [this](int32_t) { + clean_buffer(); this->new_password(); }; @@ -191,12 +196,27 @@ void RandomPasswordView::on_data(uint32_t value, bool is_data) { if (is_data) { seed = static_cast(value); text_seed.set(to_string_dec_uint(check_show_seeds.value() ? seed : 0)); + + /// v feed deque + seeds_deque.push_back(value); + if (seeds_deque.size() > MAX_DIGITS) { + seeds_deque.pop_front(); + } + ///^ feed deque + + progressbar.set_value(seeds_deque.size()); + } else { text_generated_passwd.set("Baudrate estimation: ~"); text_char_type_hints.set(to_string_dec_uint(value)); } } +void RandomPasswordView::clean_buffer() { + seeds_deque = {0}; + char_deque = {""}; +} + void RandomPasswordView::on_freqchg(int64_t freq) { field_frequency.set_value(freq); } @@ -233,22 +253,31 @@ void RandomPasswordView::new_password() { if (charset.empty()) { text_generated_passwd.set("generate failed,"); text_char_type_hints.set("select at least 1 type"); - return; } - if (seed == 0) { - text_generated_passwd.set("generate failed,"); - text_char_type_hints.set("random seed exception"); - } else { - std::srand(seed); // extern void srand (unsigned int __seed) __THROW; + if (seeds_deque.size() < MAX_DIGITS) { + seeds_buffer_not_full = true; + text_generated_passwd.set("wait seeds buffer full"); + text_char_type_hints.set("then press generate"); + return; } int password_length = field_digits.value(); + /*the seeds_buffer were feed streaming by AFSK, + * and when generate, it use each seed for each char, and uint seeds totally can generate UINT_MAX result, + * which already cover the 10+26+25+4 (123+abc+abc+.!) + * so total possible password would be PW_LENGTH ^ (10+26+25+4), which already covered all the possible solution + * (assume AFSK data is averaged in chaotic space, which maybe no one can garentee but I hope so) + * */ + for (int i = 0; i < password_length; i++) { + unsigned int seed = seeds_deque[i]; + std::srand(seed); char c = charset[std::rand() % charset.length()]; password += c; + char_deque.push_back(std::string(1, c)); if (std::isdigit(c)) { char_type_hints += "1"; diff --git a/firmware/application/external/random_password/ui_random_password.hpp b/firmware/application/external/random_password/ui_random_password.hpp index c3e5d659..fb0e3dd2 100644 --- a/firmware/application/external/random_password/ui_random_password.hpp +++ b/firmware/application/external/random_password/ui_random_password.hpp @@ -2,6 +2,7 @@ * Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc. * Copyright (C) 2017 Furrtek * copyleft zxkmm + * Copyright (C) 2024 HToToo * * This file is part of PortaPack. * @@ -24,6 +25,8 @@ #ifndef __UI_RANDOM_PASSWORD_H__ #define __UI_RANDOM_PASSWORD_H__ +#define MAX_DIGITS 30 + #include "ui.hpp" #include "ui_language.hpp" #include "ui_navigation.hpp" @@ -36,12 +39,13 @@ #include "utility.hpp" #include "ui_qrcode.hpp" #include "usb_serial_asyncmsg.hpp" +#include using namespace ui; namespace ui::external_app::random_password { -class RandomPasswordLogger { +class RandomPasswordLogger { // TODO: log is broken after introduced the buffer thing public: Optional append(const std::filesystem::path& filename) { return log_file.append(filename); @@ -65,8 +69,12 @@ class RandomPasswordView : public View { private: unsigned int seed = 0; // extern void srand (unsigned int __seed) __THROW; std::string password = ""; + std::deque seeds_deque = {0}; + std::deque char_deque = {""}; + bool seeds_buffer_not_full = true; void on_data(uint32_t value, bool is_data); + void clean_buffer(); void new_password(); std::string generate_log_line(); void paint_password_hints(); @@ -110,6 +118,9 @@ class RandomPasswordView : public View { {0, 2 * 16, screen_width / 2, 16}, "0000000000"}; + ProgressBar progressbar{ + {screen_width / 2 + 1, 2 * 16, screen_width - 96 - (0 * 8 + screen_width / 2 + 1) - 1, 16}}; + Text text_generated_passwd{ {0, 4 * 16, screen_width, 28}, "000000000000000000000000000000"};