From 45a7fccd3d2a8c4fe0601a06ba446faaa2855daa Mon Sep 17 00:00:00 2001 From: RocketGod <57732082+RocketGod-git@users.noreply.github.com> Date: Mon, 15 Dec 2025 17:57:11 -0800 Subject: [PATCH] Add animated radar to receiver waiting screen Replaces the static waiting screen in the receiver view with an animated radar visualization featuring expanding waves, a rotating sweep line, and pulsing effects. Also refactors and animates the RSSI indicator, updates status bar layout, and adds an activity pulse when receiving. Removes the old static RSSI drawing function and introduces an animation frame counter to support the new visuals. --- dist/proto_pirate.fap | Bin 77740 -> 85580 bytes views/protopirate_receiver.c | 175 +++++++++++++++++++++++++++++------ 2 files changed, 145 insertions(+), 30 deletions(-) diff --git a/dist/proto_pirate.fap b/dist/proto_pirate.fap index 67caf709a21ef8166395eec645d3d5d7770dddbc..d3f9d03b6b165a3bc98a3c632ca9dc63af9da579 100644 GIT binary patch literal 85580 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 diff --git a/views/protopirate_receiver.c b/views/protopirate_receiver.c index af4a174..b36d127 100644 --- a/views/protopirate_receiver.c +++ b/views/protopirate_receiver.c @@ -4,6 +4,7 @@ #include #include #include +#include #define FRAME_HEIGHT 12 #define MAX_LEN_PX 112 @@ -34,6 +35,7 @@ typedef struct { bool external_radio; ProtoPirateLock lock; uint8_t lock_count; + uint8_t animation_frame; } ProtoPirateReceiverModel; void protopirate_view_receiver_set_rssi(ProtoPirateReceiver* receiver, float rssi) { @@ -133,27 +135,14 @@ static void protopirate_view_receiver_draw_frame(Canvas* canvas, uint16_t idx, b canvas_draw_dot(canvas, scrollbar ? 121 : 126, (0 + idx * FRAME_HEIGHT) + 11); } -static void protopirate_view_receiver_draw_rssi(Canvas* canvas, ProtoPirateReceiverModel* model) { - uint8_t x = 58; - uint8_t y = 51; - float rssi = model->rssi; - - if(rssi >= -60.0f) { - canvas_draw_box(canvas, x + 8, y + 2, 4, 5); - } - if(rssi >= -70.0f) { - canvas_draw_box(canvas, x + 4, y + 4, 4, 3); - } - if(rssi >= -80.0f) { - canvas_draw_box(canvas, x, y + 6, 4, 1); - } -} - void protopirate_view_receiver_draw(Canvas* canvas, ProtoPirateReceiverModel* model) { canvas_clear(canvas); canvas_set_color(canvas, ColorBlack); canvas_set_font(canvas, FontSecondary); + // Increment animation frame + model->animation_frame = (model->animation_frame + 1) % 96; + size_t item_count = ProtoPirateReceiverMenuItemArray_size(model->history_item_arr); bool scrollbar = item_count > MENU_ITEMS; @@ -161,6 +150,7 @@ void protopirate_view_receiver_draw(Canvas* canvas, ProtoPirateReceiverModel* mo str_buff = furi_string_alloc(); if(item_count > 0) { + // Draw received items list size_t shift_position = model->list_offset; for(size_t i = 0; i < MIN(item_count, MENU_ITEMS); i++) { @@ -184,34 +174,158 @@ void protopirate_view_receiver_draw(Canvas* canvas, ProtoPirateReceiverModel* mo elements_scrollbar_pos(canvas, 128, 0, 49, shift_position, item_count); } } else { - canvas_draw_str_aligned(canvas, 64, 14, AlignCenter, AlignCenter, "ProtoPirate"); - canvas_draw_str_aligned(canvas, 64, 26, AlignCenter, AlignCenter, "Waiting for signal..."); - canvas_draw_str_aligned(canvas, 64, 38, AlignCenter, AlignCenter, "<- to Config"); + // Cool animated radar with expanding dots + int center_x = 64; + int center_y = 22; + + // Three waves of expanding circles with different speeds + for(int wave = 0; wave < 3; wave++) { + // Calculate radius for this wave with offset + int base_radius = ((model->animation_frame + wave * 32) % 96) / 3; + + if(base_radius < 28) { + // Calculate fade based on distance from center + int dot_density = 24 - (base_radius / 2); + + // Draw circle with dots + for(int angle = 0; angle < 360; angle += (360 / dot_density)) { + float rad = (angle + wave * 15) * 3.14159 / 180.0; + int x = center_x + base_radius * cosf(rad); + int y = center_y + base_radius * sinf(rad); + + // Only draw if within bounds and create fade effect + if(x > 0 && x < 128 && y > 0 && y < 48) { + // Dots get smaller/fade as they expand + if(base_radius < 10) { + canvas_draw_dot(canvas, x, y); + // Double dot for inner circles for brightness + if(base_radius < 5) { + canvas_draw_dot(canvas, x+1, y); + } + } else if(base_radius < 20) { + // Skip some dots for fade effect + if(angle % 30 == 0) { + canvas_draw_dot(canvas, x, y); + } + } else { + // Very sparse dots at edge + if(angle % 60 == 0) { + canvas_draw_dot(canvas, x, y); + } + } + } + } + } + } + + // Static guide circles (very faint) + for(int angle = 0; angle < 360; angle += 45) { + float rad = angle * 3.14159 / 180.0; + canvas_draw_dot(canvas, center_x + 15 * cosf(rad), center_y + 15 * sinf(rad)); + } + + // Rotating sweep line with glow effect + float sweep_angle = (model->animation_frame * 3.75) * 3.14159 / 180.0; + + // Main sweep line + int sweep_x = center_x + 22 * cosf(sweep_angle); + int sweep_y = center_y + 22 * sinf(sweep_angle); + canvas_draw_line(canvas, center_x, center_y, sweep_x, sweep_y); + + // Sweep "glow" - additional lines at slight offsets + float glow_angle1 = sweep_angle - 0.05; + float glow_angle2 = sweep_angle + 0.05; + canvas_draw_line(canvas, center_x, center_y, + center_x + 20 * cosf(glow_angle1), + center_y + 20 * sinf(glow_angle1)); + canvas_draw_line(canvas, center_x, center_y, + center_x + 20 * cosf(glow_angle2), + center_y + 20 * sinf(glow_angle2)); + + // Sweep trail (fading dots) + for(int i = 1; i <= 12; i++) { + float trail_angle = sweep_angle - (i * 0.15); + int trail_radius = 22 - i; + if(trail_radius > 0) { + int trail_x = center_x + trail_radius * cosf(trail_angle); + int trail_y = center_y + trail_radius * sinf(trail_angle); + // Only draw every other dot in trail for fade effect + if(i % 2 == 0 || i < 4) { + canvas_draw_dot(canvas, trail_x, trail_y); + } + } + } + + // Pulsing center + int pulse = (model->animation_frame % 32); + if(pulse < 16) { + canvas_draw_disc(canvas, center_x, center_y, 2); + } else { + canvas_draw_circle(canvas, center_x, center_y, 2); + } + if(pulse < 8 || (pulse > 16 && pulse < 24)) { + canvas_draw_dot(canvas, center_x, center_y); + } + + // Left-aligned config hint + canvas_set_font(canvas, FontSecondary); + canvas_draw_str(canvas, 2, 45, "< Config"); } furi_string_free(str_buff); + // Status bar separator canvas_set_color(canvas, ColorBlack); canvas_draw_line(canvas, 0, 48, 127, 48); // Draw status bar canvas_set_font(canvas, FontSecondary); - canvas_draw_str(canvas, 2, 58, furi_string_get_cstr(model->frequency_str)); - canvas_draw_str(canvas, 40, 58, furi_string_get_cstr(model->preset_str)); + + // Activity indicator - pulsing when receiving + if(model->rssi > -90) { + int pulse = model->animation_frame % 16; + if(pulse < 8) { + canvas_draw_disc(canvas, 2, 54, 1); + } + } + + // Frequency + canvas_draw_str(canvas, 5, 58, furi_string_get_cstr(model->frequency_str)); + + // Preset + canvas_draw_str(canvas, 44, 58, furi_string_get_cstr(model->preset_str)); + + // History counter canvas_draw_str_aligned( - canvas, 110, 58, AlignCenter, AlignBottom, furi_string_get_cstr(model->history_stat_str)); + canvas, 108, 58, AlignCenter, AlignBottom, furi_string_get_cstr(model->history_stat_str)); - // Draw RSSI - protopirate_view_receiver_draw_rssi(canvas, model); + // Draw RSSI indicator with animation + uint8_t x = 70; + uint8_t y = 51; + float rssi = model->rssi; - // Draw external radio indicator if needed - if(model->external_radio) { - canvas_draw_str(canvas, 100, 58, "Ext"); + if(rssi >= -80.0f) { + canvas_draw_box(canvas, x, y + 5, 3, 2); + } + if(rssi >= -70.0f) { + canvas_draw_box(canvas, x + 4, y + 3, 3, 4); + } + if(rssi >= -60.0f) { + canvas_draw_box(canvas, x + 8, y + 1, 3, 6); + // Pulse effect for strong signal + if(model->animation_frame % 24 < 12) { + canvas_draw_frame(canvas, x + 7, y, 5, 8); + } } - // Draw lock indicator + // External radio indicator + if(model->external_radio) { + canvas_draw_str(canvas, 116, 58, "E"); + } + + // Lock indicator if(model->lock == ProtoPirateLockOn) { - canvas_draw_str(canvas, 119, 58, "L"); + canvas_draw_str(canvas, 122, 58, "L"); } } @@ -367,6 +481,7 @@ ProtoPirateReceiver* protopirate_view_receiver_alloc() { model->external_radio = false; model->lock = ProtoPirateLockOff; model->lock_count = 0; + model->animation_frame = 0; }, true); @@ -424,4 +539,4 @@ void protopirate_view_receiver_set_idx_menu(ProtoPirateReceiver* receiver, uint1 }, true); protopirate_view_receiver_update_offset(receiver); -} +} \ No newline at end of file