mirror of
https://github.com/meshtastic/firmware.git
synced 2025-08-15 01:35:03 +00:00

* Update Favorite Node Message Options to unify against other screens * Rebuild Horizontal Battery, Resolve overlap concerns * Update positioning on Message frame and fix drawCommonHeader overlay * Beginnings of creating isHighResolution bool * Fixup determineResolution() * Implement isHighResolution in place of SCREEN_WIDTH > 128 checks * Line Spacing bound to isHighResolution * Analog Clock for all * Add AM/PM to Analog Clock if isHighResolution and not TWatch * Simple Menu Queue, and add time menu * Fix prompt string for 12/24 hour picker * More menu banners into functions * Fix Action Menu on Home frame * Correct pop-up calculation size and continue to leverage isHighResolution * Move menu bits to MenuHandler * Plumb in the digital/analog picker * Correct Clock Face Picker title * Clock picker fixes * Migrate the rest of the menus to MenuHandler.* * Add compass menu and needle point option * Minor fix for compass point menu * Correct Home menu into typical format * Fix emoji bounce, overlap, and missing commonHeader * Sanitize long_names and removed unused variables * Slightly better sanitizeString variation * Resolved apostrophe being shown as upside down question mark * Gotta keep height and width in expected order * Remove Second Hand for Analog Clock on EInk displays * Fix Clock menu option decision tree * Improvements to Eink Navigation * Pause Banner for Eink moved to bottom * Updated working for 12-/24-hour menu and Added US/Arizona to timezone picker * Add Adhoc Ping and resolve error with std::string sanitized * Hide quick toggle as option is available within Action Menu, commented out for the moment * Remove old battery icon and option, use drawCommonHeader throughout, re-add battery to Clock frames * fix misc build warnings. NFC * Update Analog Clock on EInk to show more digits * Establish Action Menu on all node list screens, add NodeDB reset (with confirmation) option * Add Toggle Backlight for EInk Displays * Suppress action screen Full refresh for Eink * Adjust drawBluetoothConnectedIcon on TWatch * Maintain clock frame when switching between Clock Faces * Move modules beyond the clock in navigation * addressed the conflicts, and changed target branch to 2.7-MiscFixes-Week1 * cleanup, cheers * Add AM/PM to low resolution clock also * Small adjustments to AM/PM replacement across various devices * Resolve dangling pointer issues with sanitize code * Update comments for Screen.cpp related to module load change * Trunk runs * Update message caching to correct aged timestamp * Menu wording adjustments * Time Format wording * Use all the rows on EInk since with autohide the navigation bar * Finalize Time Format picker word change * Retired drawFunctionOverlay code No longer being used * Actually honor the points-north setting * Trunk * Compressed action list * Update no-op showOverlayBanner function * trunk * Correct T_Watch_S3 specific line * Autosized Action menu per screen * Finalize Autosized Action menu per screen * Unify Message Titles * Reorder Timezones to match expectations * Adjust text location for pop-ups * Revert "Actually honor the points-north setting" This reverts commit20988aa4fa
. * Make NodeDB sort its internal vector when lastheard is updated. Don't sort in NodeListRenderer * Update src/graphics/draw/NodeListRenderer.cpp Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update src/mesh/NodeDB.cpp Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Pass by reference -- Thanks Copilot! * Throttle sorting just a touch * Check more carefully for own node * Eliminate some now-unneeded sorting * Move function after include * Putting Modules back to position 0 and some trunk checks found * Add Scrollbar for Action menus * Second attempt to move modules down the navigation bar * Continue effort of moving modules in the navigation * Canned Messages tweak * Replicate Function + Space through the Menu System * Move init button parameters into config struct (#7145) * Remove bundling of web-ui from ESP32 devices (#7143) * Fixed triple click GPS toggle bungle * Move init button parameters into config struct * Reapply "Actually honor the points-north setting" This reverts commit42c1967e7b
. * Actually do compass pointings correctly * Tweak to node bearings * Menu wording tweaks * Get the compass_north_top logic right * Don't jump frames after setting Compass * Get rid of the extra bearingTo functions * Don't blink Mail on EInk Clock Screens * Actually set lat and long * Calibrate * Convert Radians to Degrees * More degree vs radians fixes * De-duplicate draw arrow function * Don't advertise compass calibration without an accell thread. --------- Co-authored-by: Ben Meadors <benmmeadors@gmail.com> Co-authored-by: Jonathan Bennett <jbennett@incomsystems.biz> Co-authored-by: HarukiToreda <116696711+HarukiToreda@users.noreply.github.com> Co-authored-by: Thomas Göttgens <tgoettgens@gmail.com> Co-authored-by: csrutil <keming.cao@gmail.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
288 lines
12 KiB
C
288 lines
12 KiB
C
#pragma once
|
|
|
|
#define SATELLITE_IMAGE_WIDTH 16
|
|
#define SATELLITE_IMAGE_HEIGHT 15
|
|
const uint8_t SATELLITE_IMAGE[] PROGMEM = {0x00, 0x08, 0x00, 0x1C, 0x00, 0x0E, 0x20, 0x07, 0x70, 0x02,
|
|
0xF8, 0x00, 0xF0, 0x01, 0xE0, 0x03, 0xC8, 0x01, 0x9C, 0x54,
|
|
0x0E, 0x52, 0x07, 0x48, 0x02, 0x26, 0x00, 0x10, 0x00, 0x0E};
|
|
|
|
#define imgSatellite_width 8
|
|
#define imgSatellite_height 8
|
|
const uint8_t imgSatellite[] PROGMEM = {
|
|
0b00000000, 0b00000000, 0b00000000, 0b00011000, 0b11011011, 0b11111111, 0b11011011, 0b00011000,
|
|
};
|
|
|
|
const uint8_t imgUSB[] PROGMEM = {0x60, 0x60, 0x30, 0x18, 0x18, 0x18, 0x24, 0x42, 0x42, 0x42, 0x42, 0x7E, 0x24, 0x24, 0x24, 0x3C};
|
|
const uint8_t imgPower[] PROGMEM = {0x40, 0x40, 0x40, 0x58, 0x48, 0x08, 0x08, 0x08,
|
|
0x1C, 0x22, 0x22, 0x41, 0x7F, 0x22, 0x22, 0x22};
|
|
const uint8_t imgUser[] PROGMEM = {0x3C, 0x42, 0x99, 0xA5, 0xA5, 0x99, 0x42, 0x3C};
|
|
const uint8_t imgPositionEmpty[] PROGMEM = {0x20, 0x30, 0x28, 0x24, 0x42, 0xFF};
|
|
const uint8_t imgPositionSolid[] PROGMEM = {0x20, 0x30, 0x38, 0x3C, 0x7E, 0xFF};
|
|
|
|
const uint8_t bluetoothConnectedIcon[36] PROGMEM = {0xfe, 0x01, 0xff, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0xe3, 0x1f,
|
|
0xf3, 0x3f, 0x33, 0x30, 0x33, 0x33, 0x33, 0x33, 0x03, 0x33, 0xff, 0x33,
|
|
0xfe, 0x31, 0x00, 0x30, 0x30, 0x30, 0x30, 0x30, 0xf0, 0x3f, 0xe0, 0x1f};
|
|
|
|
#if (defined(USE_EINK) || defined(ILI9341_DRIVER) || defined(ILI9342_DRIVER) || defined(ST7701_CS) || defined(ST7735_CS) || \
|
|
defined(ST7789_CS) || defined(USE_ST7789) || defined(HX8357_CS) || defined(ILI9488_CS) || ARCH_PORTDUINO) && \
|
|
!defined(DISPLAY_FORCE_SMALL_FONTS)
|
|
const uint8_t imgQuestionL1[] PROGMEM = {0xff, 0x01, 0x01, 0x32, 0x7b, 0x49, 0x49, 0x6f, 0x26, 0x01, 0x01, 0xff};
|
|
const uint8_t imgQuestionL2[] PROGMEM = {0x0f, 0x08, 0x08, 0x08, 0x06, 0x0f, 0x0f, 0x06, 0x08, 0x08, 0x08, 0x0f};
|
|
const uint8_t imgInfoL1[] PROGMEM = {0xff, 0x01, 0x01, 0x01, 0x1e, 0x7f, 0x1e, 0x01, 0x01, 0x01, 0x01, 0xff};
|
|
const uint8_t imgInfoL2[] PROGMEM = {0x0f, 0x08, 0x08, 0x08, 0x06, 0x0f, 0x0f, 0x06, 0x08, 0x08, 0x08, 0x0f};
|
|
const uint8_t imgSFL1[] PROGMEM = {0xb6, 0x8f, 0x19, 0x11, 0x31, 0xe3, 0xc2, 0x01,
|
|
0x01, 0xf9, 0xf9, 0x89, 0x89, 0x89, 0x09, 0xeb};
|
|
const uint8_t imgSFL2[] PROGMEM = {0x0e, 0x09, 0x09, 0x09, 0x09, 0x09, 0x08, 0x08,
|
|
0x00, 0x0f, 0x0f, 0x00, 0x08, 0x08, 0x08, 0x0f};
|
|
#else
|
|
const uint8_t imgInfo[] PROGMEM = {0xff, 0x81, 0x00, 0xfb, 0xfb, 0x00, 0x81, 0xff};
|
|
const uint8_t imgQuestion[] PROGMEM = {0xbf, 0x41, 0xc0, 0x8b, 0xdb, 0x70, 0xa1, 0xdf};
|
|
const uint8_t imgSF[] PROGMEM = {0xd2, 0xb7, 0xad, 0xbb, 0x92, 0x01, 0xfd, 0xfd, 0x15, 0x85, 0xf5};
|
|
#endif
|
|
|
|
// === Horizontal battery ===
|
|
// Basic battery design and all related pieces
|
|
const unsigned char batteryBitmap_h_bottom[] PROGMEM = {
|
|
0b00011110, 0b00000000, 0b00000001, 0b00000000, 0b00000001, 0b00000000, 0b00000001, 0b00000000, 0b00000001,
|
|
0b00000000, 0b00000001, 0b00000000, 0b00000001, 0b00000000, 0b00000001, 0b00000000, 0b00000001, 0b00000000,
|
|
0b00000001, 0b00000000, 0b00000001, 0b00000000, 0b00000001, 0b00000000, 0b00011110, 0b00000000};
|
|
|
|
const unsigned char batteryBitmap_h_top[] PROGMEM = {
|
|
0b00111100, 0b00000000, 0b01000000, 0b00000000, 0b01000000, 0b00000000, 0b01000000, 0b00000000, 0b01000000,
|
|
0b00000000, 0b11000000, 0b00000000, 0b11000000, 0b00000000, 0b11000000, 0b00000000, 0b01000000, 0b00000000,
|
|
0b01000000, 0b00000000, 0b01000000, 0b00000000, 0b01000000, 0b00000000, 0b00111100, 0b00000000};
|
|
|
|
// Lightning Bolt
|
|
const unsigned char lightning_bolt_h[] PROGMEM = {
|
|
0b00000000, 0b00000000, 0b00100000, 0b00000000, 0b00110000, 0b00000000, 0b00111000, 0b00000000, 0b00111100,
|
|
0b00000000, 0b00011110, 0b00000000, 0b11111111, 0b00000000, 0b01111000, 0b00000000, 0b00111100, 0b00000000,
|
|
0b00011100, 0b00000000, 0b00001100, 0b00000000, 0b00000100, 0b00000000, 0b00000000, 0b00000000};
|
|
|
|
// === Vertical battery ===
|
|
// Basic battery design and all related pieces
|
|
const unsigned char batteryBitmap_v[] PROGMEM = {0b00011100, 0b00111110, 0b01000001, 0b01000001, 0b00000000, 0b00000000,
|
|
0b00000000, 0b01000001, 0b01000001, 0b01000001, 0b00111110};
|
|
// This is the left and right bars for the fill in
|
|
const unsigned char batteryBitmap_sidegaps_v[] PROGMEM = {0b10000010, 0b10000010, 0b10000010};
|
|
// Lightning Bolt
|
|
const unsigned char lightning_bolt_v[] PROGMEM = {0b00000100, 0b00000110, 0b00011111, 0b00001100, 0b00000100};
|
|
|
|
#define mail_width 10
|
|
#define mail_height 7
|
|
static const unsigned char mail[] PROGMEM = {
|
|
0b11111111, 0b00, // Top line
|
|
0b10000001, 0b00, // Edges
|
|
0b11000011, 0b00, // Diagonals start
|
|
0b10100101, 0b00, // Inner M part
|
|
0b10011001, 0b00, // Inner M part
|
|
0b10000001, 0b00, // Edges
|
|
0b11111111, 0b00 // Bottom line
|
|
};
|
|
|
|
// 📬 Mail / Message
|
|
const uint8_t icon_mail[] PROGMEM = {
|
|
0b11111111, // ████████ top border
|
|
0b10000001, // █ █ sides
|
|
0b11000011, // ██ ██ diagonal
|
|
0b10100101, // █ █ █ █ inner M
|
|
0b10011001, // █ ██ █ inner M
|
|
0b10000001, // █ █ sides
|
|
0b10000001, // █ █ sides
|
|
0b11111111 // ████████ bottom
|
|
};
|
|
|
|
// 📍 GPS Screen / Location Pin
|
|
const unsigned char icon_compass[] PROGMEM = {
|
|
0x3C, // Row 0: ..####..
|
|
0x52, // Row 1: .#..#.#.
|
|
0x91, // Row 2: #...#..#
|
|
0x91, // Row 3: #...#..#
|
|
0x91, // Row 4: #...#..#
|
|
0x81, // Row 5: #......#
|
|
0x42, // Row 6: .#....#.
|
|
0x3C // Row 7: ..####..
|
|
};
|
|
|
|
const uint8_t icon_radio[] PROGMEM = {
|
|
0x0F, // Row 0: ####....
|
|
0x10, // Row 1: ....#...
|
|
0x27, // Row 2: ###..#..
|
|
0x48, // Row 3: ...#..#.
|
|
0x93, // Row 4: ##..#..#
|
|
0xA4, // Row 5: ..#..#.#
|
|
0xA8, // Row 6: ...#.#.#
|
|
0xA9 // Row 7: #..#.#.#
|
|
};
|
|
|
|
// 🪙 Memory Icon
|
|
const uint8_t icon_memory[] PROGMEM = {
|
|
0x24, // Row 0: ..#..#..
|
|
0x3C, // Row 1: ..####..
|
|
0xC3, // Row 2: ##....##
|
|
0x5A, // Row 3: .#.##.#.
|
|
0x5A, // Row 4: .#.##.#.
|
|
0xC3, // Row 5: ##....##
|
|
0x3C, // Row 6: ..####..
|
|
0x24 // Row 7: ..#..#..
|
|
};
|
|
|
|
// 🌐 Wi-Fi
|
|
const uint8_t icon_wifi[] PROGMEM = {0b00000000, 0b00011000, 0b00111100, 0b01111110,
|
|
0b11011011, 0b00011000, 0b00011000, 0b00000000};
|
|
|
|
const uint8_t icon_nodes[] PROGMEM = {
|
|
0xF9, // Row 0 #..#######
|
|
0x00, // Row 1
|
|
0xF9, // Row 2 #..#######
|
|
0x00, // Row 3
|
|
0xF9, // Row 4 #..#######
|
|
0x00, // Row 5
|
|
0xF9, // Row 6 #..#######
|
|
0x00 // Row 7
|
|
};
|
|
|
|
// ➤ Chevron Triangle Arrow Icon (8x8)
|
|
const uint8_t icon_list[] PROGMEM = {
|
|
0x10, // Row 0: ...#....
|
|
0x10, // Row 1: ...#....
|
|
0x38, // Row 2: ..###...
|
|
0x38, // Row 3: ..###...
|
|
0x7C, // Row 4: .#####..
|
|
0x6C, // Row 5: .##.##..
|
|
0xC6, // Row 6: ##...##.
|
|
0x82 // Row 7: #.....#.
|
|
};
|
|
|
|
// 📶 Signal Bars Icon (left to right, small to large with spacing)
|
|
const uint8_t icon_signal[] PROGMEM = {
|
|
0b00000000, // ░░░░░░░
|
|
0b10000000, // ░░░░░░░
|
|
0b10100000, // ░░░░█░█
|
|
0b10100000, // ░░░░█░█
|
|
0b10101000, // ░░█░█░█
|
|
0b10101000, // ░░█░█░█
|
|
0b10101010, // █░█░█░█
|
|
0b11111111 // ███████
|
|
};
|
|
|
|
// ↔️ Distance / Measurement Icon (double-ended arrow)
|
|
const uint8_t icon_distance[] PROGMEM = {
|
|
0b00000000, // ░░░░░░░░
|
|
0b10000001, // █░░░░░█ arrowheads
|
|
0b01000010, // ░█░░░█░
|
|
0b00100100, // ░░█░█░░
|
|
0b00011000, // ░░░██░░ center
|
|
0b00100100, // ░░█░█░░
|
|
0b01000010, // ░█░░░█░
|
|
0b10000001 // █░░░░░█
|
|
};
|
|
|
|
// ⚠️ Error / Fault
|
|
const uint8_t icon_error[] PROGMEM = {
|
|
0b00011000, // ░░░██░░░
|
|
0b00011000, // ░░░██░░░
|
|
0b00011000, // ░░░██░░░
|
|
0b00011000, // ░░░██░░░
|
|
0b00000000, // ░░░░░░░░
|
|
0b00011000, // ░░░██░░░
|
|
0b00000000, // ░░░░░░░░
|
|
0b00000000 // ░░░░░░░░
|
|
};
|
|
|
|
// 🏠 Optimized Home Icon (8x8)
|
|
const uint8_t icon_home[] PROGMEM = {
|
|
0b00011000, // ██
|
|
0b00111100, // ████
|
|
0b01111110, // ██████
|
|
0b11111111, // ███████
|
|
0b11000011, // ██ ██
|
|
0b11011011, // ██ ██ ██
|
|
0b11011011, // ██ ██ ██
|
|
0b11111111 // ███████
|
|
};
|
|
|
|
// 🔧 Generic module (gear-like shape)
|
|
const uint8_t icon_module[] PROGMEM = {
|
|
0b00011000, // ░░░██░░░
|
|
0b00111100, // ░░████░░
|
|
0b01111110, // ░██████░
|
|
0b11011011, // ██░██░██
|
|
0b11011011, // ██░██░██
|
|
0b01111110, // ░██████░
|
|
0b00111100, // ░░████░░
|
|
0b00011000 // ░░░██░░░
|
|
};
|
|
|
|
#define mute_symbol_width 8
|
|
#define mute_symbol_height 8
|
|
const uint8_t mute_symbol[] PROGMEM = {
|
|
0b00011001, // █
|
|
0b00100110, // █
|
|
0b00100100, // ████
|
|
0b01001010, // █ █ █
|
|
0b01010010, // █ █ █
|
|
0b01100010, // ████████
|
|
0b11111111, // █ █
|
|
0b10011000, // █
|
|
};
|
|
|
|
#define mute_symbol_big_width 16
|
|
#define mute_symbol_big_height 16
|
|
const uint8_t mute_symbol_big[] PROGMEM = {0b00000001, 0b00000000, 0b11000010, 0b00000011, 0b00110100, 0b00001100, 0b00011000,
|
|
0b00001000, 0b00011000, 0b00010000, 0b00101000, 0b00010000, 0b01001000, 0b00010000,
|
|
0b10001000, 0b00010000, 0b00001000, 0b00010001, 0b00001000, 0b00010010, 0b00001000,
|
|
0b00010100, 0b00000100, 0b00101000, 0b11111100, 0b00111111, 0b01000000, 0b00100010,
|
|
0b10000000, 0b01000001, 0b00000000, 0b10000000};
|
|
|
|
// Bell icon for Alert Message
|
|
#define bell_alert_width 8
|
|
#define bell_alert_height 8
|
|
const unsigned char bell_alert[] PROGMEM = {0b00011000, 0b00100100, 0b00100100, 0b01000010,
|
|
0b01000010, 0b01000010, 0b11111111, 0b00011000};
|
|
|
|
#define key_symbol_width 8
|
|
#define key_symbol_height 8
|
|
const uint8_t key_symbol[] PROGMEM = {0b00000000, 0b00000000, 0b00000110, 0b11111001,
|
|
0b10101001, 0b10000110, 0b00000000, 0b00000000};
|
|
|
|
#define placeholder_width 8
|
|
#define placeholder_height 8
|
|
const uint8_t placeholder[] PROGMEM = {0b11111111, 0b11111111, 0b11111111, 0b11111111,
|
|
0b11111111, 0b11111111, 0b11111111, 0b11111111};
|
|
|
|
#define icon_node_width 8
|
|
#define icon_node_height 8
|
|
static const uint8_t icon_node[] PROGMEM = {
|
|
0x10, // #
|
|
0x10, // # ← antenna
|
|
0x10, // #
|
|
0xFE, // ####### ← device top
|
|
0x82, // # #
|
|
0xAA, // # # # # ← body with pattern
|
|
0x92, // # # #
|
|
0xFE // ####### ← device base
|
|
};
|
|
|
|
#define bluetoothdisabled_width 8
|
|
#define bluetoothdisabled_height 8
|
|
const uint8_t bluetoothdisabled[] PROGMEM = {0b11101100, 0b01010100, 0b01001100, 0b01010100,
|
|
0b01001100, 0b00000000, 0b00000000, 0b00000000};
|
|
|
|
#define smallbulletpoint_width 8
|
|
#define smallbulletpoint_height 8
|
|
const uint8_t smallbulletpoint[] PROGMEM = {0b00000011, 0b00000011, 0b00000000, 0b00000000,
|
|
0b00000000, 0b00000000, 0b00000000, 0b00000000};
|
|
|
|
// Digital Clock
|
|
#define digital_icon_clock_width 8
|
|
#define digital_icon_clock_height 8
|
|
const uint8_t digital_icon_clock[] PROGMEM = {0b00111100, 0b01000010, 0b10000101, 0b10101001,
|
|
0b10010001, 0b10000001, 0b01000010, 0b00111100};
|
|
// Analog Clock
|
|
#define analog_icon_clock_width 8
|
|
#define analog_icon_clock_height 8
|
|
const uint8_t analog_icon_clock[] PROGMEM = {0b11111111, 0b01000010, 0b00100100, 0b00011000,
|
|
0b00100100, 0b01000010, 0b01000010, 0b11111111};
|
|
|
|
#include "img/icon.xbm"
|
|
static_assert(sizeof(icon_bits) >= 0, "Silence unused variable warning"); |