From f9dd3f5a9601b5ec7eb2a6091943b4a12ba9db80 Mon Sep 17 00:00:00 2001 From: furrtek Date: Fri, 3 Feb 2017 08:21:12 +0000 Subject: [PATCH] Icons and icon tool update --- firmware/application/bitmap.hpp | 1555 +++++++++-------- firmware/application/ui_alphanum.hpp | 2 +- firmware/application/ui_bht_tx.hpp | 2 +- firmware/application/ui_navigation.cpp | 12 +- firmware/application/ui_navigation.hpp | 10 +- .../graphics/{PP_ADSB.png => icon_adsb.png} | Bin .../graphics/{PP_AIS.png => icon_ais.png} | Bin .../{PP_AUDIOTX.png => icon_audiotx.png} | Bin .../graphics/{PP_BHT.png => icon_bht.png} | Bin firmware/graphics/icon_camera.png | Bin 0 -> 122 bytes .../{PP_CAPTURE.png => icon_capture.png} | Bin .../{PP_CLOSECALL.png => icon_closecall.png} | Bin .../{PP_CODETX.png => icon_codetx.png} | Bin .../graphics/{PP_ERT.png => icon_ert.png} | Bin .../graphics/{PP_FOXHUNT.png => icon_fox.png} | Bin .../{PP_HACKRF.png => icon_hackrf.png} | Bin .../{PP_JAMMER.png => icon_jammer.png} | Bin firmware/graphics/icon_keyboard.png | Bin 0 -> 110 bytes .../graphics/{PP_LCR.png => icon_lcr.png} | Bin ...{PP_MICROPHONE.png => icon_microphone.png} | Bin .../graphics/{PP_MORSE.png => icon_morse.png} | Bin .../{PP_NORDIC.png => icon_nordic.png} | Bin .../{PP_NUMBERS.png => icon_numbers.png} | Bin .../{PP_NUOPTIX.png => icon_nuoptix.png} | Bin .../{PP_PLAYDEAD.png => icon_playdead.png} | Bin firmware/graphics/icon_pocsag.png | Bin 0 -> 117 bytes .../{PREVIOUS.png => icon_previous.png} | Bin .../graphics/{PP_RDS.png => icon_rds.png} | Bin .../{PP_RECEIVER.png => icon_receivers.png} | Bin .../{PP_REMOTE.png => icon_remote.png} | Bin .../{PP_REPLAY.png => icon_replay.png} | Bin firmware/graphics/icon_script.png | Bin 0 -> 146 bytes firmware/graphics/icon_sd.png | Bin 0 -> 130 bytes firmware/graphics/icon_sleep.png | Bin 0 -> 126 bytes ...{PP_SOUNDBOARD.png => icon_soundboard.png} | Bin firmware/graphics/icon_speaker.png | Bin 0 -> 121 bytes firmware/graphics/icon_stealth.png | Bin 0 -> 133 bytes .../graphics/{PP_TPMS.png => icon_tpms.png} | Bin firmware/graphics/icon_unistroke.png | Bin 0 -> 148 bytes .../{PP_WHISTLE.png => icon_whistle.png} | Bin firmware/graphics/more.png | Bin 0 -> 93 bytes firmware/graphics/record.png | Bin 0 -> 127 bytes firmware/graphics/rssipwm.png | Bin 0 -> 153 bytes firmware/graphics/sd_card_error.png | Bin 0 -> 128 bytes firmware/graphics/sd_card_ok.png | Bin 0 -> 122 bytes firmware/graphics/sd_card_unknown.png | Bin 0 -> 118 bytes firmware/graphics/stop.png | Bin 0 -> 87 bytes firmware/graphics/target_calibrate.png | Bin 0 -> 223 bytes firmware/graphics/target_verify.png | Bin 0 -> 208 bytes firmware/portapack-h1-havoc.bin | Bin 823664 -> 824064 bytes firmware/tools/make_bitmap.py | 110 +- 51 files changed, 891 insertions(+), 800 deletions(-) rename firmware/graphics/{PP_ADSB.png => icon_adsb.png} (100%) rename firmware/graphics/{PP_AIS.png => icon_ais.png} (100%) rename firmware/graphics/{PP_AUDIOTX.png => icon_audiotx.png} (100%) rename firmware/graphics/{PP_BHT.png => icon_bht.png} (100%) create mode 100644 firmware/graphics/icon_camera.png rename firmware/graphics/{PP_CAPTURE.png => icon_capture.png} (100%) rename firmware/graphics/{PP_CLOSECALL.png => icon_closecall.png} (100%) rename firmware/graphics/{PP_CODETX.png => icon_codetx.png} (100%) rename firmware/graphics/{PP_ERT.png => icon_ert.png} (100%) rename firmware/graphics/{PP_FOXHUNT.png => icon_fox.png} (100%) rename firmware/graphics/{PP_HACKRF.png => icon_hackrf.png} (100%) rename firmware/graphics/{PP_JAMMER.png => icon_jammer.png} (100%) create mode 100644 firmware/graphics/icon_keyboard.png rename firmware/graphics/{PP_LCR.png => icon_lcr.png} (100%) rename firmware/graphics/{PP_MICROPHONE.png => icon_microphone.png} (100%) rename firmware/graphics/{PP_MORSE.png => icon_morse.png} (100%) rename firmware/graphics/{PP_NORDIC.png => icon_nordic.png} (100%) rename firmware/graphics/{PP_NUMBERS.png => icon_numbers.png} (100%) rename firmware/graphics/{PP_NUOPTIX.png => icon_nuoptix.png} (100%) rename firmware/graphics/{PP_PLAYDEAD.png => icon_playdead.png} (100%) create mode 100644 firmware/graphics/icon_pocsag.png rename firmware/graphics/{PREVIOUS.png => icon_previous.png} (100%) rename firmware/graphics/{PP_RDS.png => icon_rds.png} (100%) rename firmware/graphics/{PP_RECEIVER.png => icon_receivers.png} (100%) rename firmware/graphics/{PP_REMOTE.png => icon_remote.png} (100%) rename firmware/graphics/{PP_REPLAY.png => icon_replay.png} (100%) create mode 100644 firmware/graphics/icon_script.png create mode 100644 firmware/graphics/icon_sd.png create mode 100644 firmware/graphics/icon_sleep.png rename firmware/graphics/{PP_SOUNDBOARD.png => icon_soundboard.png} (100%) create mode 100644 firmware/graphics/icon_speaker.png create mode 100644 firmware/graphics/icon_stealth.png rename firmware/graphics/{PP_TPMS.png => icon_tpms.png} (100%) create mode 100644 firmware/graphics/icon_unistroke.png rename firmware/graphics/{PP_WHISTLE.png => icon_whistle.png} (100%) create mode 100644 firmware/graphics/more.png create mode 100644 firmware/graphics/record.png create mode 100644 firmware/graphics/rssipwm.png create mode 100644 firmware/graphics/sd_card_error.png create mode 100644 firmware/graphics/sd_card_ok.png create mode 100644 firmware/graphics/sd_card_unknown.png create mode 100644 firmware/graphics/stop.png create mode 100644 firmware/graphics/target_calibrate.png create mode 100644 firmware/graphics/target_verify.png diff --git a/firmware/application/bitmap.hpp b/firmware/application/bitmap.hpp index bba7d1a9..b61e3d55 100644 --- a/firmware/application/bitmap.hpp +++ b/firmware/application/bitmap.hpp @@ -11,7 +11,7 @@ * * 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 + * 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 @@ -20,6 +20,8 @@ * Boston, MA 02110-1301, USA. */ +// This file was generated by make_bitmap.py + #ifndef __BITMAP_HPP__ #define __BITMAP_HPP__ @@ -27,101 +29,6 @@ namespace ui { -// Use firmware/tools/make_bitmap.py ! - -static constexpr uint8_t bitmap_previous_data[] = { - 0x00, 0x00, - 0x00, 0x00, - 0xE0, 0x03, - 0x10, 0x03, - 0x88, 0x01, - 0xC4, 0x00, - 0xE2, 0x3F, - 0x01, 0x20, - 0x01, 0x20, - 0xE3, 0x3F, - 0xC6, 0x3F, - 0x8C, 0x00, - 0x18, 0x01, - 0xF0, 0x03, - 0xE0, 0x03, - 0x00, 0x00, -}; - -static constexpr Bitmap bitmap_previous { - { 16, 16 }, bitmap_previous_data -}; - - -static constexpr uint8_t bitmap_icon_adsb_data[] = { - 0x80, 0x01, - 0xC0, 0x03, - 0xC0, 0x03, - 0xC0, 0x03, - 0xC0, 0x03, - 0xE8, 0x17, - 0xFA, 0x5F, - 0xFE, 0x7F, - 0xFF, 0xFF, - 0xC7, 0xE3, - 0xC0, 0x03, - 0xC0, 0x03, - 0xC0, 0x03, - 0xE0, 0x07, - 0xF8, 0x1F, - 0x38, 0x1C, -}; - -static constexpr Bitmap bitmap_icon_adsb { - { 16, 16 }, bitmap_icon_adsb_data -}; - -static constexpr uint8_t bitmap_icon_ais_data[] = { - 0x00, 0x01, - 0x80, 0x01, - 0xC0, 0x0D, - 0xC0, 0x3D, - 0xE0, 0x3D, - 0xF0, 0x7D, - 0xF8, 0x7D, - 0xF8, 0x7D, - 0xFC, 0x7D, - 0xFE, 0x7D, - 0x00, 0x00, - 0xF8, 0x3F, - 0xF8, 0x1F, - 0xFB, 0xCF, - 0x00, 0x00, - 0x00, 0x00, -}; - -static constexpr Bitmap bitmap_icon_ais { - { 16, 16 }, bitmap_icon_ais_data -}; - -static constexpr uint8_t bitmap_icon_audiotx_data[] = { - 0x00, 0x70, - 0x00, 0x7F, - 0xC0, 0x4F, - 0xC0, 0x60, - 0x40, 0x5E, - 0xC0, 0x41, - 0x40, 0x40, - 0x40, 0x40, - 0x40, 0x40, - 0x40, 0x70, - 0x70, 0x7C, - 0x7C, 0x7E, - 0x7E, 0x3E, - 0x3E, 0x1C, - 0x1C, 0x00, - 0x00, 0x00, -}; - -static constexpr Bitmap bitmap_icon_audiotx { - { 16, 16 }, bitmap_icon_audiotx_data -}; - static constexpr uint8_t bitmap_icon_bht_data[] = { 0x00, 0x00, 0xE0, 0x07, @@ -140,308 +47,184 @@ static constexpr uint8_t bitmap_icon_bht_data[] = { 0x06, 0x00, 0x00, 0x00, }; - static constexpr Bitmap bitmap_icon_bht { { 16, 16 }, bitmap_icon_bht_data }; -static constexpr uint8_t bitmap_icon_capture_data[] = { - 0xEF, 0x29, - 0xEF, 0x69, - 0xEF, 0xE9, - 0xEF, 0xE9, - 0xEF, 0xEF, - 0x1F, 0xF0, - 0xFF, 0xFF, - 0xFF, 0xFF, - 0x03, 0xC0, - 0xFB, 0xDF, - 0x0B, 0xD9, - 0xFB, 0xDF, - 0x4B, 0xDE, - 0xFB, 0xDF, - 0x03, 0xC0, - 0xFE, 0x7F, -}; - -static constexpr Bitmap bitmap_icon_capture { - { 16, 16 }, bitmap_icon_capture_data -}; - -static constexpr uint8_t bitmap_icon_closecall_data[] = { - 0x00, 0x00, - 0x00, 0x10, - 0x00, 0x38, - 0x00, 0x7C, - 0x00, 0x00, - 0x3E, 0x00, - 0xE3, 0x00, - 0x80, 0x01, - 0x1C, 0x03, - 0x22, 0x02, - 0x41, 0x06, - 0x88, 0x04, - 0x9C, 0x04, - 0x88, 0x04, - 0x41, 0x06, - 0x22, 0x02, -}; - -static constexpr Bitmap bitmap_icon_closecall { - { 16, 16 }, bitmap_icon_closecall_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, +static constexpr uint8_t bitmap_icon_sd_data[] = { 0x00, 0x00, 0x00, 0x00, - 0xBB, 0x6D, - 0x2A, 0x49, - 0x2A, 0x49, - 0x3A, 0x49, + 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_codetx { - { 16, 16 }, bitmap_icon_codetx_data +static constexpr Bitmap bitmap_icon_sd { + { 16, 16 }, bitmap_icon_sd_data }; -static constexpr uint8_t bitmap_icon_ert_data[] = { +static constexpr uint8_t bitmap_sd_card_error_data[] = { 0x00, 0x00, 0x00, 0x00, - 0x77, 0x77, - 0x55, 0x41, - 0x75, 0x77, - 0x55, 0x44, - 0x55, 0x44, - 0x77, 0x77, - 0x00, 0x00, - 0x20, 0x04, - 0x02, 0x26, - 0x04, 0x12, - 0x00, 0x03, - 0x80, 0x01, - 0xC3, 0x61, - 0x80, 0x00, -}; - -static constexpr Bitmap bitmap_icon_ert { - { 16, 16 }, bitmap_icon_ert_data -}; - -static constexpr uint8_t bitmap_icon_foxhunt_data[] = { - 0x18, 0x18, - 0x28, 0x14, - 0x68, 0x16, - 0x68, 0x16, + 0xC0, 0x1F, + 0xE0, 0x1F, + 0xF0, 0x1F, + 0xF8, 0x1F, 0xC8, 0x13, - 0x88, 0x11, - 0x04, 0x20, - 0x24, 0x24, - 0x22, 0x44, - 0x01, 0x80, - 0x06, 0x60, 0x98, 0x19, - 0x20, 0x04, - 0x40, 0x02, - 0x80, 0x01, + 0x38, 0x1C, + 0x78, 0x1E, + 0x38, 0x1C, + 0x98, 0x19, + 0xC8, 0x13, + 0xF8, 0x1F, + 0x00, 0x00, 0x00, 0x00, }; - -static constexpr Bitmap bitmap_icon_foxhunt { - { 16, 16 }, bitmap_icon_foxhunt_data +static constexpr Bitmap bitmap_sd_card_error { + { 16, 16 }, bitmap_sd_card_error_data }; -static constexpr uint8_t bitmap_icon_hackrf_data[] = { - 0x80, 0x00, - 0xC0, 0x01, - 0xE0, 0x03, - 0x80, 0x00, - 0x80, 0x0E, - 0x90, 0x0E, - 0xB8, 0x0E, - 0x90, 0x04, - 0x90, 0x02, - 0xA0, 0x01, - 0xC0, 0x00, - 0x80, 0x00, - 0xC0, 0x01, - 0xE0, 0x03, - 0xE0, 0x03, - 0xC0, 0x01, +static constexpr uint8_t bitmap_icon_unistroke_data[] = { + 0x33, 0xC0, + 0x33, 0x00, + 0xB3, 0xCD, + 0xB3, 0xDF, + 0xB3, 0xD9, + 0xB3, 0xD9, + 0x9E, 0xD9, + 0x00, 0x00, + 0x00, 0x00, + 0x0C, 0x1C, + 0x06, 0x3E, + 0x06, 0x67, + 0xCE, 0x43, + 0xFC, 0x01, + 0x78, 0x40, + 0x00, 0x00, +}; +static constexpr Bitmap bitmap_icon_unistroke { + { 16, 16 }, bitmap_icon_unistroke_data }; -static constexpr Bitmap bitmap_icon_hackrf { - { 16, 16 }, bitmap_icon_hackrf_data -}; - -static constexpr uint8_t bitmap_icon_jammer_data[] = { - 0xA6, 0x2C, - 0x73, 0x47, - 0x2E, 0xB9, - 0x55, 0xD7, - 0x7E, 0xAE, - 0xD3, 0x45, - 0xCA, 0xBA, - 0x71, 0x15, - 0xDA, 0xBE, - 0xF5, 0xAB, - 0xAD, 0x98, - 0x48, 0x77, - 0xAD, 0xCA, - 0x58, 0x7D, - 0xBF, 0xAF, - 0x5A, 0x65, -}; - -static constexpr Bitmap bitmap_icon_jammer { - { 16, 16 }, bitmap_icon_jammer_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_microphone_data[] = { +static constexpr uint8_t bitmap_icon_adsb_data[] = { + 0x80, 0x01, + 0xC0, 0x03, + 0xC0, 0x03, + 0xC0, 0x03, + 0xC0, 0x03, + 0xE8, 0x17, + 0xFA, 0x5F, + 0xFE, 0x7F, + 0xFF, 0xFF, + 0xC7, 0xE3, + 0xC0, 0x03, + 0xC0, 0x03, 0xC0, 0x03, - 0x60, 0x05, - 0xB0, 0x0A, - 0x50, 0x0D, - 0xB0, 0x0E, - 0x60, 0x05, 0xE0, 0x07, - 0x20, 0x04, - 0x20, 0x04, - 0xE0, 0x04, - 0xE0, 0x04, - 0xC0, 0x02, - 0x40, 0x02, - 0x40, 0x02, - 0x40, 0x02, - 0xC0, 0x03, + 0xF8, 0x1F, + 0x38, 0x1C, +}; +static constexpr Bitmap bitmap_icon_adsb { + { 16, 16 }, bitmap_icon_adsb_data }; -static constexpr Bitmap bitmap_icon_microphone { - { 16, 16 }, bitmap_icon_microphone_data -}; - -static constexpr uint8_t bitmap_icon_morse_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, - 0x18, 0x00, - 0x18, 0x00, - 0x18, 0x00, - 0x0C, 0x00, - 0x0C, 0x00, - 0x0C, 0x00, - 0x0C, 0x1F, - 0x06, 0x1F, - 0x06, 0x00, - 0x66, 0xC0, - 0x66, 0xC0, - 0x03, 0x00, - 0x03, 0x00, - 0x03, 0x00, 0x00, 0x00, }; - -static constexpr Bitmap bitmap_icon_morse { - { 16, 16 }, bitmap_icon_morse_data +static constexpr Bitmap bitmap_sd_card_unknown { + { 16, 16 }, bitmap_sd_card_unknown_data }; -static constexpr uint8_t bitmap_icon_nordic_data[] = { +static constexpr uint8_t bitmap_icon_stealth_data[] = { 0x00, 0x00, - 0x18, 0x18, - 0x26, 0x6C, - 0xC1, 0x8E, - 0x07, 0x8F, - 0x1F, 0x8C, - 0x3F, 0x80, - 0xFF, 0x80, - 0xFF, 0x83, - 0xFF, 0x87, - 0xEF, 0x9F, - 0x8F, 0xFF, - 0x4F, 0xFF, - 0x2E, 0x7C, - 0x18, 0x18, 0x00, 0x00, -}; - -static constexpr Bitmap bitmap_icon_nordic { - { 16, 16 }, bitmap_icon_nordic_data -}; - -static constexpr uint8_t bitmap_icon_numbers_data[] = { - 0x00, 0x00, - 0x68, 0x1B, - 0x48, 0x09, - 0x48, 0x1A, - 0x48, 0x5B, + 0x30, 0x1C, + 0xFC, 0x3F, + 0xFE, 0x7F, + 0xFE, 0x7F, + 0xC6, 0x63, + 0x86, 0x61, + 0xCE, 0x73, + 0xFC, 0x3F, + 0x7C, 0x3E, + 0x38, 0x1C, + 0x08, 0x00, + 0x08, 0x00, 0x08, 0x00, - 0x14, 0x00, - 0x1C, 0x00, - 0x14, 0x00, - 0x14, 0x00, - 0x1C, 0x00, - 0x14, 0x00, - 0x22, 0x00, - 0x3E, 0x00, - 0x22, 0x00, 0x00, 0x00, }; - -static constexpr Bitmap bitmap_icon_numbers { - { 16, 16 }, bitmap_icon_numbers_data +static constexpr Bitmap bitmap_icon_stealth { + { 16, 16 }, bitmap_icon_stealth_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, +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, - 0xF8, 0x1F, - 0xF8, 0x1F, - 0xFC, 0x3F, - 0xFC, 0x3F, + 0xF0, 0x0F, + 0xC0, 0x03, + 0x00, 0x00, + 0x00, 0x00, +}; +static constexpr Bitmap bitmap_icon_sleep { + { 16, 16 }, bitmap_icon_sleep_data }; -static constexpr Bitmap bitmap_icon_nuoptix { - { 16, 16 }, bitmap_icon_nuoptix_data +static constexpr uint8_t bitmap_icon_speaker_data[] = { + 0x00, 0x00, + 0x00, 0x20, + 0x00, 0x30, + 0x00, 0x38, + 0x00, 0x3C, + 0xDC, 0x3E, + 0xDC, 0x3F, + 0xDC, 0x3F, + 0xDC, 0x3F, + 0xDC, 0x3F, + 0xDC, 0x3E, + 0x00, 0x3C, + 0x00, 0x38, + 0x00, 0x30, + 0x00, 0x20, + 0x00, 0x00, +}; +static constexpr Bitmap bitmap_icon_speaker { + { 16, 16 }, bitmap_icon_speaker_data }; static constexpr uint8_t bitmap_icon_playdead_data[] = { @@ -462,11 +245,288 @@ static constexpr uint8_t bitmap_icon_playdead_data[] = { 0x04, 0x20, 0xF8, 0x1F, }; - static constexpr Bitmap bitmap_icon_playdead { { 16, 16 }, bitmap_icon_playdead_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_record_data[] = { + 0x00, 0x00, + 0x00, 0x00, + 0xC0, 0x03, + 0xF0, 0x0F, + 0xF8, 0x1F, + 0x18, 0x1C, + 0x9C, 0x39, + 0x9C, 0x39, + 0x1C, 0x3C, + 0x9C, 0x3C, + 0x98, 0x19, + 0xF8, 0x1F, + 0xF0, 0x0F, + 0xC0, 0x03, + 0x00, 0x00, + 0x00, 0x00, +}; +static constexpr Bitmap bitmap_record { + { 16, 16 }, bitmap_record_data +}; + +static constexpr uint8_t bitmap_icon_ais_data[] = { + 0x00, 0x01, + 0x80, 0x01, + 0xC0, 0x0D, + 0xC0, 0x3D, + 0xE0, 0x3D, + 0xF0, 0x7D, + 0xF8, 0x7D, + 0xF8, 0x7D, + 0xFC, 0x7D, + 0xFE, 0x7D, + 0x00, 0x00, + 0xF8, 0x3F, + 0xF8, 0x1F, + 0xFB, 0xCF, + 0x00, 0x00, + 0x00, 0x00, +}; +static constexpr Bitmap bitmap_icon_ais { + { 16, 16 }, bitmap_icon_ais_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_closecall_data[] = { + 0x00, 0x00, + 0x00, 0x10, + 0x00, 0x38, + 0x00, 0x7C, + 0x00, 0x00, + 0x3E, 0x00, + 0xE3, 0x00, + 0x80, 0x01, + 0x1C, 0x03, + 0x22, 0x02, + 0x41, 0x06, + 0x88, 0x04, + 0x9C, 0x04, + 0x88, 0x04, + 0x41, 0x06, + 0x22, 0x02, +}; +static constexpr Bitmap bitmap_icon_closecall { + { 16, 16 }, bitmap_icon_closecall_data +}; + +static constexpr uint8_t bitmap_icon_script_data[] = { + 0xFC, 0x07, + 0xFA, 0x0F, + 0x19, 0x1A, + 0xF9, 0x1F, + 0x1E, 0x1D, + 0xF8, 0x1F, + 0x98, 0x1F, + 0xF8, 0x1F, + 0xF8, 0x1F, + 0x08, 0x14, + 0xF8, 0x1F, + 0x48, 0x1E, + 0xF8, 0xFF, + 0x78, 0x80, + 0x30, 0x40, + 0xE0, 0x3F, +}; +static constexpr Bitmap bitmap_icon_script { + { 16, 16 }, bitmap_icon_script_data +}; + +static constexpr uint8_t bitmap_icon_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_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_more_data[] = { + 0x18, + 0x18, + 0x18, + 0x18, + 0xFF, + 0x7E, + 0x3C, + 0x18, +}; +static constexpr Bitmap bitmap_more { + { 8, 8 }, bitmap_more_data +}; + +static constexpr uint8_t bitmap_icon_whistle_data[] = { + 0x00, 0x00, + 0x60, 0x00, + 0xFC, 0x01, + 0xFF, 0x03, + 0xFF, 0x0F, + 0xF9, 0x11, + 0x66, 0x30, + 0x88, 0x3C, + 0x10, 0x7F, + 0x10, 0x7E, + 0x08, 0x7C, + 0x08, 0x7C, + 0x10, 0x3C, + 0x20, 0x0E, + 0xC0, 0x03, + 0x00, 0x00, +}; +static constexpr Bitmap bitmap_icon_whistle { + { 16, 16 }, bitmap_icon_whistle_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_microphone_data[] = { + 0xC0, 0x03, + 0x60, 0x05, + 0xB0, 0x0A, + 0x50, 0x0D, + 0xB0, 0x0E, + 0x60, 0x05, + 0xE0, 0x07, + 0x20, 0x04, + 0x20, 0x04, + 0xE0, 0x04, + 0xE0, 0x04, + 0xC0, 0x02, + 0x40, 0x02, + 0x40, 0x02, + 0x40, 0x02, + 0xC0, 0x03, +}; +static constexpr Bitmap bitmap_icon_microphone { + { 16, 16 }, bitmap_icon_microphone_data +}; + +static constexpr uint8_t bitmap_icon_numbers_data[] = { + 0x00, 0x00, + 0x68, 0x1B, + 0x48, 0x09, + 0x48, 0x1A, + 0x48, 0x5B, + 0x08, 0x00, + 0x14, 0x00, + 0x1C, 0x00, + 0x14, 0x00, + 0x14, 0x00, + 0x1C, 0x00, + 0x14, 0x00, + 0x22, 0x00, + 0x3E, 0x00, + 0x22, 0x00, + 0x00, 0x00, +}; +static constexpr Bitmap bitmap_icon_numbers { + { 16, 16 }, bitmap_icon_numbers_data +}; + static constexpr uint8_t bitmap_icon_rds_data[] = { 0x00, 0x00, 0x00, 0x00, @@ -485,12 +545,55 @@ static constexpr uint8_t bitmap_icon_rds_data[] = { 0x00, 0x00, 0x00, 0x00, }; - static constexpr Bitmap bitmap_icon_rds { { 16, 16 }, bitmap_icon_rds_data }; -static constexpr uint8_t bitmap_icon_receiver_data[] = { +static constexpr uint8_t bitmap_icon_nordic_data[] = { + 0x00, 0x00, + 0x18, 0x18, + 0x26, 0x6C, + 0xC1, 0x8E, + 0x07, 0x8F, + 0x1F, 0x8C, + 0x3F, 0x80, + 0xFF, 0x80, + 0xFF, 0x83, + 0xFF, 0x87, + 0xEF, 0x9F, + 0x8F, 0xFF, + 0x4F, 0xFF, + 0x2E, 0x7C, + 0x18, 0x18, + 0x00, 0x00, +}; +static constexpr Bitmap bitmap_icon_nordic { + { 16, 16 }, bitmap_icon_nordic_data +}; + +static constexpr uint8_t bitmap_icon_previous_data[] = { + 0x00, 0x00, + 0x00, 0x00, + 0xE0, 0x03, + 0x10, 0x03, + 0x88, 0x01, + 0xC4, 0x00, + 0xE2, 0x3F, + 0x01, 0x20, + 0x01, 0x20, + 0xE3, 0x3F, + 0xC6, 0x3F, + 0x8C, 0x00, + 0x18, 0x01, + 0xF0, 0x03, + 0xE0, 0x03, + 0x00, 0x00, +}; +static constexpr Bitmap bitmap_icon_previous { + { 16, 16 }, bitmap_icon_previous_data +}; + +static constexpr uint8_t bitmap_icon_receivers_data[] = { 0xC0, 0x07, 0x30, 0x18, 0x10, 0x10, @@ -508,9 +611,156 @@ static constexpr uint8_t bitmap_icon_receiver_data[] = { 0xE0, 0x00, 0x00, 0x00, }; +static constexpr Bitmap bitmap_icon_receivers { + { 16, 16 }, bitmap_icon_receivers_data +}; -static constexpr Bitmap bitmap_icon_receiver { - { 16, 16 }, bitmap_icon_receiver_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_stop_data[] = { + 0x00, 0x00, + 0x00, 0x00, + 0xFC, 0x3F, + 0xFC, 0x3F, + 0xFC, 0x3F, + 0xFC, 0x3F, + 0xFC, 0x3F, + 0xFC, 0x3F, + 0xFC, 0x3F, + 0xFC, 0x3F, + 0xFC, 0x3F, + 0xFC, 0x3F, + 0xFC, 0x3F, + 0xFC, 0x3F, + 0x00, 0x00, + 0x00, 0x00, +}; +static constexpr Bitmap bitmap_stop { + { 16, 16 }, bitmap_stop_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_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_tpms_data[] = { + 0xE0, 0x07, + 0xF8, 0x1A, + 0x78, 0x10, + 0x3C, 0x20, + 0x34, 0x27, + 0x9A, 0x4C, + 0x96, 0x6C, + 0xBA, 0x4C, + 0x96, 0x6C, + 0xB2, 0x4C, + 0x92, 0x4E, + 0x24, 0x27, + 0x24, 0x20, + 0x48, 0x10, + 0xD8, 0x1A, + 0xE0, 0x07, +}; +static constexpr Bitmap bitmap_icon_tpms { + { 16, 16 }, bitmap_icon_tpms_data +}; + +static constexpr uint8_t bitmap_icon_hackrf_data[] = { + 0x80, 0x00, + 0xC0, 0x01, + 0xE0, 0x03, + 0x80, 0x00, + 0x80, 0x0E, + 0x90, 0x0E, + 0xB8, 0x0E, + 0x90, 0x04, + 0x90, 0x02, + 0xA0, 0x01, + 0xC0, 0x00, + 0x80, 0x00, + 0xC0, 0x01, + 0xE0, 0x03, + 0xE0, 0x03, + 0xC0, 0x01, +}; +static constexpr Bitmap bitmap_icon_hackrf { + { 16, 16 }, bitmap_icon_hackrf_data }; static constexpr uint8_t bitmap_icon_remote_data[] = { @@ -531,11 +781,120 @@ static constexpr uint8_t bitmap_icon_remote_data[] = { 0x10, 0x08, 0xE0, 0x07, }; - static constexpr Bitmap bitmap_icon_remote { { 16, 16 }, bitmap_icon_remote_data }; +static constexpr uint8_t bitmap_icon_camera_data[] = { + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0xCC, 0x03, + 0xE8, 0x07, + 0xFC, 0x3F, + 0x3C, 0x3C, + 0x9C, 0x39, + 0xDC, 0x3B, + 0xDC, 0x3B, + 0x9C, 0x39, + 0x3C, 0x3C, + 0xFC, 0x3F, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, +}; +static constexpr Bitmap bitmap_icon_camera { + { 16, 16 }, bitmap_icon_camera_data +}; + +static constexpr uint8_t bitmap_icon_ert_data[] = { + 0x00, 0x00, + 0x00, 0x00, + 0x77, 0x77, + 0x55, 0x41, + 0x75, 0x77, + 0x55, 0x44, + 0x55, 0x44, + 0x77, 0x77, + 0x00, 0x00, + 0x20, 0x04, + 0x02, 0x26, + 0x04, 0x12, + 0x00, 0x03, + 0x80, 0x01, + 0xC3, 0x61, + 0x80, 0x00, +}; +static constexpr Bitmap bitmap_icon_ert { + { 16, 16 }, bitmap_icon_ert_data +}; + +static constexpr uint8_t bitmap_icon_keyboard_data[] = { + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0xF0, 0x1F, + 0x18, 0x11, + 0x18, 0x11, + 0x18, 0x11, + 0xFC, 0x7F, + 0x46, 0x44, + 0x46, 0x44, + 0x46, 0x44, + 0xFE, 0x7F, + 0xFE, 0x3F, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, +}; +static constexpr Bitmap bitmap_icon_keyboard { + { 16, 16 }, bitmap_icon_keyboard_data +}; + +static constexpr uint8_t bitmap_icon_capture_data[] = { + 0xEF, 0x29, + 0xEF, 0x69, + 0xEF, 0xE9, + 0xEF, 0xE9, + 0xEF, 0xEF, + 0x1F, 0xF0, + 0xFF, 0xFF, + 0xFF, 0xFF, + 0x03, 0xC0, + 0xFB, 0xDF, + 0x0B, 0xD9, + 0xFB, 0xDF, + 0x4B, 0xDE, + 0xFB, 0xDF, + 0x03, 0xC0, + 0xFE, 0x7F, +}; +static constexpr Bitmap bitmap_icon_capture { + { 16, 16 }, bitmap_icon_capture_data +}; + +static constexpr uint8_t bitmap_icon_morse_data[] = { + 0x00, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x18, 0x00, + 0x0C, 0x00, + 0x0C, 0x00, + 0x0C, 0x00, + 0x0C, 0x1F, + 0x06, 0x1F, + 0x06, 0x00, + 0x66, 0xC0, + 0x66, 0xC0, + 0x03, 0x00, + 0x03, 0x00, + 0x03, 0x00, + 0x00, 0x00, +}; +static constexpr Bitmap bitmap_icon_morse { + { 16, 16 }, bitmap_icon_morse_data +}; + static constexpr uint8_t bitmap_icon_replay_data[] = { 0x00, 0x00, 0xC0, 0x07, @@ -554,7 +913,6 @@ static constexpr uint8_t bitmap_icon_replay_data[] = { 0x80, 0x03, 0x00, 0x00, }; - static constexpr Bitmap bitmap_icon_replay { { 16, 16 }, bitmap_icon_replay_data }; @@ -577,404 +935,93 @@ static constexpr uint8_t bitmap_icon_soundboard_data[] = { 0x00, 0x00, 0x00, 0x00, }; - static constexpr Bitmap bitmap_icon_soundboard { { 16, 16 }, bitmap_icon_soundboard_data }; -static constexpr uint8_t bitmap_icon_tpms_data[] = { - 0xE0, 0x07, - 0xF8, 0x1A, - 0x78, 0x10, - 0x3C, 0x20, - 0x34, 0x27, - 0x9A, 0x4C, - 0x96, 0x6C, - 0xBA, 0x4C, - 0x96, 0x6C, - 0xB2, 0x4C, - 0x92, 0x4E, - 0x24, 0x27, - 0x24, 0x20, - 0x48, 0x10, - 0xD8, 0x1A, - 0xE0, 0x07, -}; - -static constexpr Bitmap bitmap_icon_tpms { - { 16, 16 }, bitmap_icon_tpms_data -}; - -static constexpr uint8_t bitmap_icon_whistle_data[] = { - 0x00, 0x00, - 0x60, 0x00, - 0xFC, 0x01, - 0xFF, 0x03, - 0xFF, 0x0F, - 0xF9, 0x11, - 0x66, 0x30, - 0x88, 0x3C, - 0x10, 0x7F, - 0x10, 0x7E, - 0x08, 0x7C, - 0x08, 0x7C, - 0x10, 0x3C, - 0x20, 0x0E, - 0xC0, 0x03, - 0x00, 0x00, -}; - -static constexpr Bitmap bitmap_icon_whistle { - { 16, 16 }, bitmap_icon_whistle_data -}; - -static constexpr uint8_t bitmap_stealth_data[] = { - 0x00, 0x00, - 0x00, 0x00, - 0xE0, 0x07, - 0xF8, 0x1F, - 0xFC, 0x3F, - 0xFC, 0x3F, - 0xE4, 0x27, - 0xC4, 0x23, - 0xEC, 0x37, - 0x7C, 0x3E, - 0x7C, 0x1E, - 0x2C, 0x0C, - 0x0C, 0x00, - 0x0C, 0x00, - 0x0C, 0x00, - 0x00, 0x00 -}; - -static constexpr Bitmap bitmap_stealth { - { 16, 16 }, bitmap_stealth_data -}; - -static constexpr uint8_t bitmap_speaker_data[] = { - 0x00, 0x00, - 0x00, 0x20, - 0x00, 0x30, - 0x00, 0x38, - 0x00, 0x3C, - 0xDC, 0x3E, - 0xDC, 0x3F, - 0xDC, 0x3F, - 0xDC, 0x3F, - 0xDC, 0x3F, - 0xDC, 0x3E, - 0x00, 0x3C, - 0x00, 0x38, - 0x00, 0x30, - 0x00, 0x20, - 0x00, 0x00 -}; - -static constexpr Bitmap bitmap_speaker { - { 16, 16 }, bitmap_speaker_data -}; - -static constexpr uint8_t bitmap_more_data[] = { - 0x18, - 0x18, - 0x18, - 0x18, - 0xFF, - 0x7E, - 0x3C, - 0x18, -}; - -static constexpr Bitmap bitmap_more { - { 8, 8 }, bitmap_more_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_keyboard_data[] = { - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0xF0, 0x1F, - 0x10, 0x11, - 0x10, 0x11, - 0x10, 0x11, - 0xFC, 0x7F, - 0x44, 0x44, - 0x44, 0x44, - 0x44, 0x44, - 0xFC, 0x7F, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, -}; - -static constexpr Bitmap bitmap_keyboard { - { 16, 16 }, bitmap_keyboard_data -}; - -static constexpr uint8_t bitmap_unistroke_data[] = { - 0x33, 0xC0, - 0x33, 0x00, - 0xB3, 0xCD, - 0xB3, 0xDF, - 0xB3, 0xD9, - 0xB3, 0xD9, - 0x9E, 0xD9, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x1C, - 0x06, 0x3E, - 0x06, 0x67, - 0xCE, 0x43, - 0xFC, 0x01, - 0x78, 0x40, - 0x00, 0x00 -}; - -static constexpr Bitmap bitmap_unistroke { - { 16, 16 }, bitmap_unistroke_data -}; - -static constexpr uint8_t bitmap_record_data[] = { - 0x00, 0x00, - 0x00, 0x00, - 0xc0, 0x03, - 0xf0, 0x0f, - 0xf8, 0x1f, - 0xf8, 0x1f, - 0xfc, 0x3f, - 0xfc, 0x3f, - 0xfc, 0x3f, - 0xfc, 0x3f, - 0xf8, 0x1f, - 0xf8, 0x1f, - 0xf0, 0x0f, - 0xc0, 0x03, - 0x00, 0x00, - 0x00, 0x00, -}; - -static constexpr Bitmap bitmap_record { - { 16, 16 }, bitmap_record_data -}; - -static constexpr uint8_t bitmap_stop_data[] = { - 0x00, 0x00, - 0x00, 0x00, - 0xfc, 0x3f, - 0xfc, 0x3f, - 0xfc, 0x3f, - 0xfc, 0x3f, - 0xfc, 0x3f, - 0xfc, 0x3f, - 0xfc, 0x3f, - 0xfc, 0x3f, - 0xfc, 0x3f, - 0xfc, 0x3f, - 0xfc, 0x3f, - 0xfc, 0x3f, - 0x00, 0x00, - 0x00, 0x00, -}; - -static constexpr Bitmap bitmap_stop { - { 16, 16 }, bitmap_stop_data -}; - -static constexpr uint8_t bitmap_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_sleep { - { 16, 16 }, bitmap_sleep_data -}; - -static constexpr uint8_t bitmap_camera_data[] = { - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - 0xcc, 0x03, - 0xe8, 0x07, - 0xfc, 0x3f, - 0x3c, 0x3c, - 0x9c, 0x39, - 0xdc, 0x3b, - 0xdc, 0x3b, - 0x9c, 0x39, - 0x3c, 0x3c, - 0xfc, 0x3f, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, -}; - -static constexpr Bitmap bitmap_camera { - { 16, 16 }, bitmap_camera_data -}; - -static constexpr uint8_t bitmap_sd_card_ok_data[] = { - 0x00, 0x00, 0x00, 0x00, 0xe0, 0x1f, 0xf0, 0x1f, - 0xf8, 0x1f, 0xf8, 0x1f, 0xf8, 0x1f, 0xf8, 0x1f, - 0xf8, 0x1f, 0xf8, 0x1f, 0xf8, 0x1f, 0xf8, 0x1f, - 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_sd_card_unknown_data[] = { - 0x00, 0x00, 0x00, 0x00, 0xe0, 0x1f, 0xf0, 0x1f, - 0x38, 0x1c, 0x98, 0x19, 0xf8, 0x19, 0xf8, 0x1c, - 0x78, 0x1e, 0x78, 0x1e, 0xf8, 0x1f, 0x78, 0x1e, - 0xf8, 0x1f, 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_sd_card_error_data[] = { - 0x00, 0x00, 0x00, 0x00, 0xe0, 0x1f, 0xf0, 0x1f, - 0xf8, 0x1f, 0xd8, 0x1b, 0x98, 0x19, 0x38, 0x1c, - 0x78, 0x1e, 0x38, 0x1c, 0x98, 0x19, 0xd8, 0x1b, - 0xf8, 0x1f, 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_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, 0x30, 0x0c, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x30, 0x0c, 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_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, + 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_audiotx_data[] = { + 0x00, 0x70, + 0x00, 0x7F, + 0xC0, 0x4F, + 0xC0, 0x60, + 0x40, 0x5E, + 0xC0, 0x41, + 0x40, 0x40, + 0x40, 0x40, + 0x40, 0x40, + 0x40, 0x70, + 0x70, 0x7C, + 0x7C, 0x7E, + 0x7E, 0x3E, + 0x3E, 0x1C, + 0x1C, 0x00, + 0x00, 0x00, +}; +static constexpr Bitmap bitmap_icon_audiotx { + { 16, 16 }, bitmap_icon_audiotx_data +}; + +static constexpr uint8_t bitmap_icon_jammer_data[] = { + 0xA6, 0x2C, + 0x73, 0x47, + 0x2E, 0xB9, + 0x55, 0xD7, + 0x7E, 0xAE, + 0xD3, 0x45, + 0xCA, 0xBA, + 0x71, 0x15, + 0xDA, 0xBE, + 0xF5, 0xAB, + 0xAD, 0x98, + 0x48, 0x77, + 0xAD, 0xCA, + 0x58, 0x7D, + 0xBF, 0xAF, + 0x5A, 0x65, +}; +static constexpr Bitmap bitmap_icon_jammer { + { 16, 16 }, bitmap_icon_jammer_data +}; + + } /* namespace ui */ #endif/*__BITMAP_HPP__*/ diff --git a/firmware/application/ui_alphanum.hpp b/firmware/application/ui_alphanum.hpp index 74f5f91d..92f73d93 100644 --- a/firmware/application/ui_alphanum.hpp +++ b/firmware/application/ui_alphanum.hpp @@ -71,7 +71,7 @@ private: { 8, 0, 232, 16 } }; - std::array buttons; + std::array buttons { }; Button button_lowercase { { 21 * 8, 270, 32, 24 }, diff --git a/firmware/application/ui_bht_tx.hpp b/firmware/application/ui_bht_tx.hpp index 8bee501c..93509e45 100644 --- a/firmware/application/ui_bht_tx.hpp +++ b/firmware/application/ui_bht_tx.hpp @@ -98,7 +98,7 @@ private: }; Image bmp_speaker { { 204, 8, 16, 16 }, - &bitmap_speaker, + &bitmap_icon_speaker, ui::Color::white(), ui::Color::black() }; diff --git a/firmware/application/ui_navigation.cpp b/firmware/application/ui_navigation.cpp index 1e8f50fe..f862bfb5 100644 --- a/firmware/application/ui_navigation.cpp +++ b/firmware/application/ui_navigation.cpp @@ -88,9 +88,9 @@ SystemStatusView::SystemStatusView() { title.set_style(&style_systemstatus); if (!portapack::persistent_memory::ui_config_textentry()) - button_textentry.set_bitmap(&bitmap_keyboard); + button_textentry.set_bitmap(&bitmap_icon_keyboard); else - button_textentry.set_bitmap(&bitmap_unistroke); + button_textentry.set_bitmap(&bitmap_icon_unistroke); if (portapack::persistent_memory::stealth_mode()) button_stealth.set_foreground(ui::Color::green()); @@ -152,9 +152,9 @@ void SystemStatusView::on_textentry() { portapack::persistent_memory::set_config_textentry(cfg ^ 1); if (!cfg) - button_textentry.set_bitmap(&bitmap_unistroke); + button_textentry.set_bitmap(&bitmap_icon_unistroke); else - button_textentry.set_bitmap(&bitmap_keyboard); + button_textentry.set_bitmap(&bitmap_icon_keyboard); } void SystemStatusView::on_camera() { @@ -292,7 +292,7 @@ ReceiverMenuView::ReceiverMenuView(NavigationView& nav) { { "CCIR", ui::Color::grey(), nullptr, [&nav](){ nav.push(); } }, { "Nordic/BTLE", ui::Color::grey(), &bitmap_icon_nordic, [&nav](){ nav.push(); } }, { "POCSAG", ui::Color::cyan(), nullptr, [&nav](){ nav.push(); } }, - { "SIGFOX", ui::Color::grey(), &bitmap_icon_foxhunt, [&nav](){ nav.push(); } }, // SIGFRXView + { "SIGFOX", ui::Color::grey(), &bitmap_icon_fox, [&nav](){ nav.push(); } }, // SIGFRXView { "Transponders", ui::Color::green(), nullptr, [&nav](){ nav.push(); } }, } }); on_left = [&nav](){ nav.pop(); }; @@ -351,7 +351,7 @@ void SystemMenuView::hackrf_mode(NavigationView& nav) { SystemMenuView::SystemMenuView(NavigationView& nav) { add_items<12>({ { { "Play dead", ui::Color::red(), &bitmap_icon_playdead, [&nav](){ nav.push(); } }, - { "Receivers", ui::Color::cyan(), &bitmap_icon_receiver, [&nav](){ nav.push(); } }, + { "Receivers", ui::Color::cyan(), &bitmap_icon_receivers, [&nav](){ nav.push(); } }, { "Capture", ui::Color::cyan(), &bitmap_icon_capture, [&nav](){ nav.push(); } }, //CaptureAppView { "Replay", ui::Color::grey(), &bitmap_icon_replay, [&nav](){ nav.push(); } }, { "Code transmitters", ui::Color::green(), &bitmap_icon_codetx, [&nav](){ nav.push(); } }, diff --git a/firmware/application/ui_navigation.hpp b/firmware/application/ui_navigation.hpp index 28bfecbf..942f62fd 100644 --- a/firmware/application/ui_navigation.hpp +++ b/firmware/application/ui_navigation.hpp @@ -72,7 +72,7 @@ private: ImageButton button_back { { 2, 0 * 16, 16, 16 }, - &bitmap_previous, + &bitmap_icon_previous, Color::white(), Color::dark_grey() }; @@ -84,28 +84,28 @@ private: ImageButton button_stealth { { 152, 0, 2 * 8, 1 * 16 }, - &bitmap_stealth, + &bitmap_icon_stealth, Color::light_grey(), Color::dark_grey() }; ImageButton button_textentry { { 170, 0, 2 * 8, 1 * 16 }, - &bitmap_unistroke, + &bitmap_icon_unistroke, Color::white(), Color::dark_grey() }; ImageButton button_camera { { 188, 0, 2 * 8, 1 * 16 }, - &bitmap_camera, + &bitmap_icon_camera, Color::white(), Color::dark_grey() }; ImageButton button_sleep { { 206, 0, 2 * 8, 1 * 16 }, - &bitmap_sleep, + &bitmap_icon_sleep, Color::white(), Color::dark_grey() }; diff --git a/firmware/graphics/PP_ADSB.png b/firmware/graphics/icon_adsb.png similarity index 100% rename from firmware/graphics/PP_ADSB.png rename to firmware/graphics/icon_adsb.png diff --git a/firmware/graphics/PP_AIS.png b/firmware/graphics/icon_ais.png similarity index 100% rename from firmware/graphics/PP_AIS.png rename to firmware/graphics/icon_ais.png diff --git a/firmware/graphics/PP_AUDIOTX.png b/firmware/graphics/icon_audiotx.png similarity index 100% rename from firmware/graphics/PP_AUDIOTX.png rename to firmware/graphics/icon_audiotx.png diff --git a/firmware/graphics/PP_BHT.png b/firmware/graphics/icon_bht.png similarity index 100% rename from firmware/graphics/PP_BHT.png rename to firmware/graphics/icon_bht.png diff --git a/firmware/graphics/icon_camera.png b/firmware/graphics/icon_camera.png new file mode 100644 index 0000000000000000000000000000000000000000..9b10509f582650e7076aee1735cca10ec948f7e0 GIT binary patch literal 122 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`j-D=#Ar`&K2?+^5{1xSN*bXpQ z$;Zm9=T6`%WLy;Epreq%u*+9P(!pnkfCJ4M8Ji9CCv-FR_j8J@ T3bEG(8ph!1>gTe~DWM4fuQVS% literal 0 HcmV?d00001 diff --git a/firmware/graphics/PP_CAPTURE.png b/firmware/graphics/icon_capture.png similarity index 100% rename from firmware/graphics/PP_CAPTURE.png rename to firmware/graphics/icon_capture.png diff --git a/firmware/graphics/PP_CLOSECALL.png b/firmware/graphics/icon_closecall.png similarity index 100% rename from firmware/graphics/PP_CLOSECALL.png rename to firmware/graphics/icon_closecall.png diff --git a/firmware/graphics/PP_CODETX.png b/firmware/graphics/icon_codetx.png similarity index 100% rename from firmware/graphics/PP_CODETX.png rename to firmware/graphics/icon_codetx.png diff --git a/firmware/graphics/PP_ERT.png b/firmware/graphics/icon_ert.png similarity index 100% rename from firmware/graphics/PP_ERT.png rename to firmware/graphics/icon_ert.png diff --git a/firmware/graphics/PP_FOXHUNT.png b/firmware/graphics/icon_fox.png similarity index 100% rename from firmware/graphics/PP_FOXHUNT.png rename to firmware/graphics/icon_fox.png diff --git a/firmware/graphics/PP_HACKRF.png b/firmware/graphics/icon_hackrf.png similarity index 100% rename from firmware/graphics/PP_HACKRF.png rename to firmware/graphics/icon_hackrf.png diff --git a/firmware/graphics/PP_JAMMER.png b/firmware/graphics/icon_jammer.png similarity index 100% rename from firmware/graphics/PP_JAMMER.png rename to firmware/graphics/icon_jammer.png diff --git a/firmware/graphics/icon_keyboard.png b/firmware/graphics/icon_keyboard.png new file mode 100644 index 0000000000000000000000000000000000000000..aec982956e2ed6180b14d9a95eaa41ac81681fb3 GIT binary patch literal 110 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`rk*a2Ar`&K2?+^5{1xSL*#7+g z)~j$VlfjI&X55`CDjfAnKm!;&UHx3v IIVCg!0AP(F!~g&Q literal 0 HcmV?d00001 diff --git a/firmware/graphics/PP_LCR.png b/firmware/graphics/icon_lcr.png similarity index 100% rename from firmware/graphics/PP_LCR.png rename to firmware/graphics/icon_lcr.png diff --git a/firmware/graphics/PP_MICROPHONE.png b/firmware/graphics/icon_microphone.png similarity index 100% rename from firmware/graphics/PP_MICROPHONE.png rename to firmware/graphics/icon_microphone.png diff --git a/firmware/graphics/PP_MORSE.png b/firmware/graphics/icon_morse.png similarity index 100% rename from firmware/graphics/PP_MORSE.png rename to firmware/graphics/icon_morse.png diff --git a/firmware/graphics/PP_NORDIC.png b/firmware/graphics/icon_nordic.png similarity index 100% rename from firmware/graphics/PP_NORDIC.png rename to firmware/graphics/icon_nordic.png diff --git a/firmware/graphics/PP_NUMBERS.png b/firmware/graphics/icon_numbers.png similarity index 100% rename from firmware/graphics/PP_NUMBERS.png rename to firmware/graphics/icon_numbers.png diff --git a/firmware/graphics/PP_NUOPTIX.png b/firmware/graphics/icon_nuoptix.png similarity index 100% rename from firmware/graphics/PP_NUOPTIX.png rename to firmware/graphics/icon_nuoptix.png diff --git a/firmware/graphics/PP_PLAYDEAD.png b/firmware/graphics/icon_playdead.png similarity index 100% rename from firmware/graphics/PP_PLAYDEAD.png rename to firmware/graphics/icon_playdead.png diff --git a/firmware/graphics/icon_pocsag.png b/firmware/graphics/icon_pocsag.png new file mode 100644 index 0000000000000000000000000000000000000000..d59ca106860e9d28adbae97070271ac0f07f66dd GIT binary patch literal 117 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Hl8kyAr`&K2?+^5{1xSN*d}lV z@F<8ckZ@Rad81TAo|V5^{)z4*}Q$iB}ylo+~ literal 0 HcmV?d00001 diff --git a/firmware/graphics/PREVIOUS.png b/firmware/graphics/icon_previous.png similarity index 100% rename from firmware/graphics/PREVIOUS.png rename to firmware/graphics/icon_previous.png diff --git a/firmware/graphics/PP_RDS.png b/firmware/graphics/icon_rds.png similarity index 100% rename from firmware/graphics/PP_RDS.png rename to firmware/graphics/icon_rds.png diff --git a/firmware/graphics/PP_RECEIVER.png b/firmware/graphics/icon_receivers.png similarity index 100% rename from firmware/graphics/PP_RECEIVER.png rename to firmware/graphics/icon_receivers.png diff --git a/firmware/graphics/PP_REMOTE.png b/firmware/graphics/icon_remote.png similarity index 100% rename from firmware/graphics/PP_REMOTE.png rename to firmware/graphics/icon_remote.png diff --git a/firmware/graphics/PP_REPLAY.png b/firmware/graphics/icon_replay.png similarity index 100% rename from firmware/graphics/PP_REPLAY.png rename to firmware/graphics/icon_replay.png diff --git a/firmware/graphics/icon_script.png b/firmware/graphics/icon_script.png new file mode 100644 index 0000000000000000000000000000000000000000..39203dd10834b23e631ebac71cc2f1ff62095154 GIT binary patch literal 146 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k)AG&Ar`%RC*S5`P~dR>{@*^= z-}6k^%s_>f>5nB?8Q2c^`MqD-AiiE9Imq;5ldi%_CBAjr{25bOPc>&dL^^UR$aP=; ur}^M_Fh9pK##8)3l9M|ha-8^gitX0iwrR%8QiOn(FnGH9xvXSjxIJr)78&qol`;+0AxcYWdHyG literal 0 HcmV?d00001 diff --git a/firmware/graphics/PP_SOUNDBOARD.png b/firmware/graphics/icon_soundboard.png similarity index 100% rename from firmware/graphics/PP_SOUNDBOARD.png rename to firmware/graphics/icon_soundboard.png diff --git a/firmware/graphics/icon_speaker.png b/firmware/graphics/icon_speaker.png new file mode 100644 index 0000000000000000000000000000000000000000..049266d1950f1815067e3649d3d817fc58e63775 GIT binary patch literal 121 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`4xTQKAr`&K2?+^5{1w$=FaQ7l z|D-ts+X*8E$q6|ORtF3iVuhq<>o6BIPE29A*yvGca>+(9P*qb|+G!%=2?+-4FTX_W T9tphxn#JJh>gTe~DWM4ff)698 literal 0 HcmV?d00001 diff --git a/firmware/graphics/icon_stealth.png b/firmware/graphics/icon_stealth.png new file mode 100644 index 0000000000000000000000000000000000000000..d7874e20cb70eb91f95404038e3e38ab2c0278ee GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`KAtX)Ar`&K2?+^5{1umNVl-&* zmg$yR#+1a+#rTBjm2|`D^E;k=kaB3U_$F}dDbt#`1r}ljk`6sG%x3!+YAWa{9ux_j gGKKvfLy-Z)^{1Mj>(*b=0-DR<>FVdQ&MBb@0L9)b0ssI2 literal 0 HcmV?d00001 diff --git a/firmware/graphics/PP_TPMS.png b/firmware/graphics/icon_tpms.png similarity index 100% rename from firmware/graphics/PP_TPMS.png rename to firmware/graphics/icon_tpms.png diff --git a/firmware/graphics/icon_unistroke.png b/firmware/graphics/icon_unistroke.png new file mode 100644 index 0000000000000000000000000000000000000000..6629d47dd3f0223a66e4c996ed527f23cc17587c GIT binary patch literal 148 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`(Vi}jAr`%BCk1jbC~!EJ|M$M_ z&#_cGi?eyr&j_&`aR%mu@AFR91~+&!-qAB+L}{bF_ZI4w6+nUTeKCs*gg6w&Y3fYva0y85}Sb4q9e0BayIjQ{`u literal 0 HcmV?d00001 diff --git a/firmware/graphics/PP_WHISTLE.png b/firmware/graphics/icon_whistle.png similarity index 100% rename from firmware/graphics/PP_WHISTLE.png rename to firmware/graphics/icon_whistle.png diff --git a/firmware/graphics/more.png b/firmware/graphics/more.png new file mode 100644 index 0000000000000000000000000000000000000000..9a96ee75a7f5b9f49bbeb23dd8f5a67511290fa5 GIT binary patch literal 93 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqDxNNmAre!Q6A}`B@Ehp a14G&z2HCi}1BZboGI+ZBxvXbP0l+XkK D#xOX~ literal 0 HcmV?d00001 diff --git a/firmware/graphics/sd_card_error.png b/firmware/graphics/sd_card_error.png new file mode 100644 index 0000000000000000000000000000000000000000..44d737eb7708d1aadbac71a0b0e1aff6031933c4 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`?w&4=Ar`&K2?+^5{1ul?Wc literal 0 HcmV?d00001 diff --git a/firmware/graphics/sd_card_ok.png b/firmware/graphics/sd_card_ok.png new file mode 100644 index 0000000000000000000000000000000000000000..1d671eaabcdc457d1b57ba14a2d9151e80d068de GIT binary patch literal 122 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`j-D=#Ar`&K2?+^5{1ul?Wc7{%{OV Q1{%cR>FVdQ&MBb@0IJO)z5oCK literal 0 HcmV?d00001 diff --git a/firmware/graphics/stop.png b/firmware/graphics/stop.png new file mode 100644 index 0000000000000000000000000000000000000000..1a72cb0549f969a7a7182526473345131f120512 GIT binary patch literal 87 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`a-J@ZAr`&K2?+^5{1ul?VqDS` k$n3@|v5t)=B9Db($Ii9+_vN#0164A3y85}Sb4q9e06={f*Z=?k literal 0 HcmV?d00001 diff --git a/firmware/graphics/target_calibrate.png b/firmware/graphics/target_calibrate.png new file mode 100644 index 0000000000000000000000000000000000000000..c40c481c6cfcd4bd469b4d48d843779c8ee9b9f1 GIT binary patch literal 223 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJWu7jMArY-tr#tdB7;v!s{J;ET zLei>jK{r?zb&5ZJ=fga`t7FBgRUK3Ii3hhY7qT;mm)Cl@++pgGro?{}IQMg>cuLHD z#~^Gcp5U2Nc7QcwTA0Y$0&eC*dxBZrkImHHp#P&t@$@UP3MR)2p9D3*w?CIVyyl3S z{(+mt<3T|{6EnNYi`IKQ;&LZGJv`SZvtzL~|Gt|ux$nO?*Dl@jY;~k+jpD^>TYH8^ X6*2n&*LSypE@tp_^>bP0l+XkK`AJr9 literal 0 HcmV?d00001 diff --git a/firmware/graphics/target_verify.png b/firmware/graphics/target_verify.png new file mode 100644 index 0000000000000000000000000000000000000000..45ec0aafc5ec2984ac2ae3abfa1b6ae384e304aa GIT binary patch literal 208 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 z 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�~ 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 Qafn4V(RkON{WOOE1GK{XWdHyG diff --git a/firmware/tools/make_bitmap.py b/firmware/tools/make_bitmap.py index 42cfaed9..e5f4f21c 100644 --- a/firmware/tools/make_bitmap.py +++ b/firmware/tools/make_bitmap.py @@ -21,51 +21,95 @@ import sys import struct from PIL import Image +from os import listdir +from os import path usage_message = """ -1BPP PortaPack bitmap generator +1BPP PortaPack bitmap.hpp generator -Usage: +Usage: """ -if len(sys.argv) < 3: +if len(sys.argv) < 1: print(usage_message) sys.exit(-1) -c = 0 -data = 0 +def convert_png(file): + c = 0 + data = 0 -im = Image.open(sys.argv[2]) -rgb_im = im.convert('RGBA') + im = Image.open(file) + rgb_im = im.convert('RGBA') -if rgb_im.size[0] % 8 or rgb_im.size[1] % 8: - print('Bitmap size isn\'t a multiple of 8') - sys.exit(-1) + if rgb_im.size[0] % 8 or rgb_im.size[1] % 8: + print(file + ": Size isn\'t a multiple of 8") + sys.exit(-1) -name = sys.argv[1] + name = path.basename(file).split(".")[0].lower(); -print "static constexpr uint8_t bitmap_" + name + "_data[] = {" -print ' ', # Tab + f.write("static constexpr uint8_t bitmap_" + name + "_data[] = {\n") + f.write(' ') # Tab -for i in range(rgb_im.size[0]): - for j in range(rgb_im.size[1]): - r, g, b, a = rgb_im.getpixel((j, i)) - - data >>= 1 - - if r > 127 and g > 127 and b > 127 and a > 127: - data += 128 - - if j % 8 == 7: - print "0x%0.2X," % data, - data = 0 + for i in range(rgb_im.size[1]): + for j in range(rgb_im.size[0]): + r, g, b, a = rgb_im.getpixel((j, i)) + + data >>= 1 + + if r > 127 and g > 127 and b > 127 and a > 127: + data += 128 + + if j % 8 == 7: + f.write("0x%0.2X, " % data) + data = 0 - print '' - if i < rgb_im.size[0] - 1: - print ' ', # Tab + f.write("\n") + if i < rgb_im.size[0] - 1: + f.write(' ') # Tab -print "};" -print '' -print "static constexpr Bitmap bitmap_" + name + " {" -print " { " + str(rgb_im.size[0]) + ", " + str(rgb_im.size[1]) + " }, bitmap_" + name+ "_data" -print "};" + f.write("};\n") + f.write("static constexpr Bitmap bitmap_" + name + " {\n") + f.write(" { " + str(rgb_im.size[0]) + ", " + str(rgb_im.size[1]) + " }, bitmap_" + name+ "_data\n") + f.write("};\n\n") + return + +count = 0 + +f = open('bitmap.hpp', 'w') +f.write("/*\n") +f.write(" * Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc.\n") +f.write(" * Copyright (C) 2016 Furrtek\n") +f.write(" *\n") +f.write(" * This file is part of PortaPack.\n") +f.write(" *\n") +f.write(" * This program is free software; you can redistribute it and/or modify\n") +f.write(" * it under the terms of the GNU General Public License as published by\n") +f.write(" * the Free Software Foundation; either version 2, or (at your option)\n") +f.write(" * any later version.\n") +f.write(" *\n") +f.write(" * This program is distributed in the hope that it will be useful,\n") +f.write(" * but WITHOUT ANY WARRANTY; without even the implied warranty of\n") +f.write(" * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n") +f.write(" * GNU General Public License for more details.\n") +f.write(" *\n") +f.write(" * You should have received a copy of the GNU General Public License\n") +f.write(" * along with this program; see the file COPYING. If not, write to\n") +f.write(" * the Free Software Foundation, Inc., 51 Franklin Street,\n") +f.write(" * Boston, MA 02110-1301, USA.\n") +f.write(" */\n\n") +f.write("// This file was generated by make_bitmap.py\n\n") +f.write("#ifndef __BITMAP_HPP__\n") +f.write("#define __BITMAP_HPP__\n\n") +f.write("#include \"ui.hpp\"\n\n") +f.write("namespace ui {\n\n") + +for file in listdir(sys.argv[1]): + if file.endswith(".png"): + convert_png(sys.argv[1] + file) + count += 1 + +f.write("\n") +f.write("} /* namespace ui */\n\n") +f.write("#endif/*__BITMAP_HPP__*/\n") + +print "Converted " + str(count) + " files"