From cf25d85d5118f2bbfc16bc0ba3aeda9ab0fd548a Mon Sep 17 00:00:00 2001 From: Mark Thompson <129641948+NotherNgineer@users.noreply.github.com> Date: Fri, 25 Aug 2023 20:01:37 -0500 Subject: [PATCH] Declare escape strings for colored text (#1409) * Color strings * Color strings * Color strings * Color strings * Color strings * Color strings & fix first group scrolling off screen * Color strings * Color strings * Clang * Clang * Clang attempt #3 * Update ui_painter.cpp * Update ui_widget.cpp * Clang test * Clang * Clang test * Update ui_about_simple.cpp * Update lge_app.cpp --- firmware/application/apps/lge_app.cpp | 18 +++++++----------- firmware/application/apps/pocsag_app.cpp | 8 ++++---- firmware/application/apps/ui_about_simple.cpp | 18 ++++++++++-------- firmware/application/apps/ui_adsb_rx.cpp | 10 ++++------ firmware/application/apps/ui_aprs_rx.cpp | 5 +---- firmware/common/ui.cpp | 1 + firmware/common/ui.hpp | 19 +++++++++++++++++++ firmware/common/ui_painter.cpp | 4 ++-- firmware/common/ui_widget.cpp | 2 +- 9 files changed, 49 insertions(+), 36 deletions(-) diff --git a/firmware/application/apps/lge_app.cpp b/firmware/application/apps/lge_app.cpp index 9754f83c..36fbca1a 100644 --- a/firmware/application/apps/lge_app.cpp +++ b/firmware/application/apps/lge_app.cpp @@ -69,7 +69,7 @@ void LGEView::generate_frame_touche() { // 0D 96 02 12 0E 00 46 28 01 45 27 01 44 23 66 30 std::vector data{0x46, 0x28, 0x01, 0x45, 0x27, 0x01, 0x44, 0x23}; - console.write("\n\x1B\x07Touche:\x1B\x10"); + console.write("\n" STR_COLOR_LIGHT_GREY "Touche:"); generate_lge_frame(0x96, (field_player.value() << 8) | field_room.value(), 0x0001, data); } @@ -111,7 +111,7 @@ void LGEView::generate_frame_nickname() { data.insert(data.end(), data_footer.begin(), data_footer.end()); - console.write("\n\x1B\x0ESet nickname:\x1B\x10"); + console.write("\n" STR_COLOR_YELLOW "Set nickname:"); generate_lge_frame(0x02, 0x001A, field_player.value(), data); } @@ -141,7 +141,7 @@ void LGEView::generate_frame_team() { data.push_back(field_team.value() - 1); // Color ? - console.write("\n\x1B\x0ASet team:\x1B\x10"); + console.write("\n" STR_COLOR_GREEN "Set team:"); generate_lge_frame(0x03, data); } @@ -173,9 +173,7 @@ void LGEView::generate_frame_broadcast_nickname() { data.push_back(field_team.value()); - console.write( - "\n\x1B\x09" - "Broadcast nickname:\x1B\x10"); + console.write("\n" STR_COLOR_BLUE "Broadcast nickname:"); generate_lge_frame(0x04, data); } @@ -187,14 +185,14 @@ void LGEView::generate_frame_start() { // data[0] = field_room.value(); // ? - console.write("\n\x1B\x0DStart:\x1B\x10"); + console.write("\n" STR_COLOR_MAGENTA "Start:"); generate_lge_frame(0x05, data); } void LGEView::generate_frame_gameover() { std::vector data{(uint8_t)field_room.value()}; - console.write("\n\x1B\x0CGameover:\x1B\x10"); + console.write("\n" STR_COLOR_RED "Gameover:"); generate_lge_frame(0x0D, data); } @@ -229,9 +227,7 @@ void LGEView::generate_frame_collier() { data.push_back(checksum - id); - console.write( - "\n\x1B\x06" - "Config:\x1B\x10"); + console.write("\n" STR_COLOR_DARK_YELLOW "Config:"); generate_lge_frame(0x00, 0x3713, 0x3713, data); } diff --git a/firmware/application/apps/pocsag_app.cpp b/firmware/application/apps/pocsag_app.cpp index 45b63b17..564f8cfd 100644 --- a/firmware/application/apps/pocsag_app.cpp +++ b/firmware/application/apps/pocsag_app.cpp @@ -159,7 +159,7 @@ void POCSAGAppView::on_packet(const POCSAGPacketMessage* message) { logger.log_raw_data(message->packet, receiver_model.target_frequency()); if (message->packet.flag() != NORMAL) { - console.writeln("\n\x1B\x04" + prefix + " CRC ERROR: " + pocsag::flag_str(message->packet.flag())); + console.writeln("\n" STR_COLOR_DARK_RED + prefix + " CRC ERROR: " + pocsag::flag_str(message->packet.flag())); last_address = 0; return; } else { @@ -168,7 +168,7 @@ void POCSAGAppView::on_packet(const POCSAGPacketMessage* message) { /* // Too many errors for reliable decode. if (pocsag_state.errors >= 3) { - console.write("\n\x1B\x0D" + prefix + " Too many decode errors."); + console.write("\n" STR_COLOR_MAGENTA + prefix + " Too many decode errors."); last_address = 0; return; } @@ -176,13 +176,13 @@ void POCSAGAppView::on_packet(const POCSAGPacketMessage* message) { // Ignored address. if (ignore() && pocsag_state.address == settings_.address_to_ignore) { - console.write("\n\x1B\x03" + prefix + " Ignored: " + to_string_dec_uint(pocsag_state.address)); + console.write("\n" STR_COLOR_DARK_CYAN + prefix + " Ignored: " + to_string_dec_uint(pocsag_state.address)); last_address = pocsag_state.address; return; } // Color indicates the message has lots of decoding errors. - std::string color = pocsag_state.errors >= 3 ? "\x1B\x07" : ""; + std::string color = pocsag_state.errors >= 3 ? STR_COLOR_MAGENTA : ""; std::string console_info = "\n" + color + prefix; console_info += " #" + to_string_dec_uint(pocsag_state.address); diff --git a/firmware/application/apps/ui_about_simple.cpp b/firmware/application/apps/ui_about_simple.cpp index 574b2a91..3be7187a 100644 --- a/firmware/application/apps/ui_about_simple.cpp +++ b/firmware/application/apps/ui_about_simple.cpp @@ -8,7 +8,7 @@ AboutView::AboutView(NavigationView& nav) { nav.pop(); }; - console.writeln("\x1B\x07List of contributors:\x1B\x10"); + console.writeln(STR_COLOR_LIGHT_GREY "List of contributors:"); console.writeln(""); } @@ -20,7 +20,7 @@ void AboutView::update() { case 1: // TODO: Generate this automatically from github // https://github.com/eried/portapack-mayhem/graphs/contributors?to=2022-01-01&from=2020-04-12&type=c - console.writeln("\x1B\x06Mayhem:\x1B\x10"); + console.writeln(STR_COLOR_DARK_YELLOW "Mayhem:"); console.writeln("eried,euquiq,gregoryfenton"); console.writeln("johnelder,jwetzell,nnemanjan00"); console.writeln("N0vaPixel,klockee,GullCode"); @@ -34,13 +34,15 @@ void AboutView::update() { console.writeln("notpike,jLynx,zigad"); console.writeln("MichalLeonBorsuk,jimilinuxguy"); console.writeln("kallanreed,bernd-herzog"); + break; + case 2: console.writeln("NotherNgineer,zxkmm,u-foka"); console.writeln(""); break; - case 2: + case 3: // https://github.com/eried/portapack-mayhem/graphs/contributors?to=2020-04-12&from=2015-07-31&type=c - console.writeln("\x1B\x06Havoc:\x1B\x10"); + console.writeln(STR_COLOR_DARK_YELLOW "Havoc:"); console.writeln("furrtek,mrmookie,NotPike"); console.writeln("mjwaxios,ImDroided,Giorgiofox"); console.writeln("F4GEV,z4ziggy,xmycroftx"); @@ -51,16 +53,16 @@ void AboutView::update() { console.writeln(""); break; - case 3: + case 4: // https://github.com/eried/portapack-mayhem/graphs/contributors?from=2014-07-05&to=2015-07-31&type=c - console.writeln("\x1B\x06PortaPack:\x1B\x10"); + console.writeln(STR_COLOR_DARK_YELLOW "PortaPack:"); console.writeln("jboone,argilo"); console.writeln(""); break; - case 4: + case 5: // https://github.com/mossmann/hackrf/graphs/contributors - console.writeln("\x1B\x06HackRF:\x1B\x10"); + console.writeln(STR_COLOR_DARK_YELLOW "HackRF:"); console.writeln("mossmann,dominicgs,bvernoux"); console.writeln("bgamari,schneider42,miek"); console.writeln("willcode,hessu,Sec42"); diff --git a/firmware/application/apps/ui_adsb_rx.cpp b/firmware/application/apps/ui_adsb_rx.cpp index e7924be1..b59a18fb 100644 --- a/firmware/application/apps/ui_adsb_rx.cpp +++ b/firmware/application/apps/ui_adsb_rx.cpp @@ -40,24 +40,22 @@ void RecentEntriesTable::draw( const Rect& target_rect, Painter& painter, const Style& style) { - char aged_color; Color target_color; auto entry_age = entry.age; + std::string entry_string; // Color decay for flights not being updated anymore if (entry_age < ADSB_CURRENT) { - aged_color = 0x10; + entry_string = ""; target_color = Color::green(); } else if (entry_age < ADSB_RECENT) { - aged_color = 0x07; + entry_string = STR_COLOR_LIGHT_GREY; target_color = Color::light_grey(); } else { - aged_color = 0x08; + entry_string = STR_COLOR_DARK_GREY; target_color = Color::grey(); } - std::string entry_string = "\x1B"; - entry_string += aged_color; entry_string += (entry.callsign[0] != ' ' ? entry.callsign + " " : entry.icaoStr + " ") + to_string_dec_uint((unsigned int)(entry.pos.altitude / 100), 4) + diff --git a/firmware/application/apps/ui_aprs_rx.cpp b/firmware/application/apps/ui_aprs_rx.cpp index 414bd44f..e2c6e759 100644 --- a/firmware/application/apps/ui_aprs_rx.cpp +++ b/firmware/application/apps/ui_aprs_rx.cpp @@ -42,15 +42,12 @@ void RecentEntriesTable::draw( const Rect& target_rect, Painter& painter, const Style& style) { - char aged_color; Color target_color; // auto entry_age = entry.age; target_color = Color::green(); - aged_color = 0x10; - std::string entry_string = "\x1B"; - entry_string += aged_color; + std::string entry_string = ""; entry_string += entry.source_formatted; entry_string.append(10 - entry.source_formatted.size(), ' '); diff --git a/firmware/common/ui.cpp b/firmware/common/ui.cpp index 925526f3..58a838f6 100644 --- a/firmware/common/ui.cpp +++ b/firmware/common/ui.cpp @@ -29,6 +29,7 @@ namespace ui { // CGA palette +// Index into this table should match STR_COLOR_ escape string in ui.hpp Color term_colors[16] = { Color::black(), Color::dark_blue(), diff --git a/firmware/common/ui.hpp b/firmware/common/ui.hpp index c4412aea..49ec3c43 100644 --- a/firmware/common/ui.hpp +++ b/firmware/common/ui.hpp @@ -26,6 +26,25 @@ namespace ui { +// Escape sequences for colored text; second character is index into term_colors[] +#define STR_COLOR_BLACK "\x1B\x00" +#define STR_COLOR_DARK_BLUE "\x1B\x01" +#define STR_COLOR_DARK_GREEN "\x1B\x02" +#define STR_COLOR_DARK_CYAN "\x1B\x03" +#define STR_COLOR_DARK_RED "\x1B\x04" +#define STR_COLOR_DARK_MAGENTA "\x1B\x05" +#define STR_COLOR_DARK_YELLOW "\x1B\x06" +#define STR_COLOR_LIGHT_GREY "\x1B\x07" +#define STR_COLOR_DARK_GREY "\x1B\x08" +#define STR_COLOR_BLUE "\x1B\x09" +#define STR_COLOR_GREEN "\x1B\x0A" +#define STR_COLOR_CYAN "\x1B\x0B" +#define STR_COLOR_RED "\x1B\x0C" +#define STR_COLOR_MAGENTA "\x1B\x0D" +#define STR_COLOR_YELLOW "\x1B\x0E" +#define STR_COLOR_WHITE "\x1B\x0F" +#define STR_COLOR_FOREGROUND "\x1B\x10" + #define DEG_TO_RAD(d) (d * (2 * pi) / 360.0) using Coord = int16_t; diff --git a/firmware/common/ui_painter.cpp b/firmware/common/ui_painter.cpp index 29079608..b5711453 100644 --- a/firmware/common/ui_painter.cpp +++ b/firmware/common/ui_painter.cpp @@ -57,8 +57,8 @@ int Painter::draw_string( for (auto c : text) { if (escape) { - if (c <= 15) - pen = term_colors[c & 15]; + if (c < std::size(term_colors)) + pen = term_colors[(uint8_t)c]; else pen = foreground; escape = false; diff --git a/firmware/common/ui_widget.cpp b/firmware/common/ui_widget.cpp index 3ede238d..422d9e7d 100644 --- a/firmware/common/ui_widget.cpp +++ b/firmware/common/ui_widget.cpp @@ -617,7 +617,7 @@ void Console::write(std::string message) { for (const auto c : message) { if (escape) { - if (c <= 15) + if (c < std::size(term_colors)) pen_color = term_colors[(uint8_t)c]; else pen_color = s.foreground;