From a37b0d464c733f49255b075866bf9fd1ecef1f41 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Tue, 4 Oct 2022 21:07:10 +0300 Subject: [PATCH] Signal Generator app: UI update OFW PR 1829 by nminaylov --- .../scenes/signal_gen_scene_mco.c | 19 +++++++++++++++--- .../scenes/signal_gen_scene_start.c | 4 ++-- .../signal_generator/views/signal_gen_pwm.c | 14 ++++++------- assets/icons/Interface/SmallArrowDown_4x7.png | Bin 8340 -> 3592 bytes assets/icons/Interface/SmallArrowUp_4x7.png | Bin 8552 -> 7976 bytes 5 files changed, 25 insertions(+), 12 deletions(-) diff --git a/applications/plugins/signal_generator/scenes/signal_gen_scene_mco.c b/applications/plugins/signal_generator/scenes/signal_gen_scene_mco.c index 632b08c75e..0855cde0a0 100644 --- a/applications/plugins/signal_generator/scenes/signal_gen_scene_mco.c +++ b/applications/plugins/signal_generator/scenes/signal_gen_scene_mco.c @@ -1,12 +1,17 @@ #include "../signal_gen_app_i.h" typedef enum { + LineIndexPin, LineIndexSource, LineIndexDivision, } LineIndex; +static const char* const mco_pin_names[] = { + "13(Tx)", +}; + static const char* const mco_source_names[] = { - "32768", + "32768Hz", "64MHz", "~100K", "~200K", @@ -81,14 +86,22 @@ void signal_gen_scene_mco_on_enter(void* context) { VariableItem* item; + item = variable_item_list_add(var_item_list, "GPIO Pin", COUNT_OF(mco_pin_names), NULL, NULL); + variable_item_set_current_value_index(item, 0); + variable_item_set_current_value_text(item, mco_pin_names[0]); + item = variable_item_list_add( - var_item_list, "Source", COUNT_OF(mco_source_names), mco_source_list_change_callback, app); + var_item_list, + "Frequency", + COUNT_OF(mco_source_names), + mco_source_list_change_callback, + app); variable_item_set_current_value_index(item, 0); variable_item_set_current_value_text(item, mco_source_names[0]); item = variable_item_list_add( var_item_list, - "Division", + "Freq. divider", COUNT_OF(mco_divisor_names), mco_divisor_list_change_callback, app); diff --git a/applications/plugins/signal_generator/scenes/signal_gen_scene_start.c b/applications/plugins/signal_generator/scenes/signal_gen_scene_start.c index 91f6081d84..3c7b9cc32a 100644 --- a/applications/plugins/signal_generator/scenes/signal_gen_scene_start.c +++ b/applications/plugins/signal_generator/scenes/signal_gen_scene_start.c @@ -16,10 +16,10 @@ void signal_gen_scene_start_on_enter(void* context) { Submenu* submenu = app->submenu; submenu_add_item( - submenu, "PWM", SubmenuIndexPwm, signal_gen_scene_start_submenu_callback, app); + submenu, "PWM Generator", SubmenuIndexPwm, signal_gen_scene_start_submenu_callback, app); submenu_add_item( submenu, - "Clock Output", + "Clock Generator", SubmenuIndexClockOutput, signal_gen_scene_start_submenu_callback, app); diff --git a/applications/plugins/signal_generator/views/signal_gen_pwm.c b/applications/plugins/signal_generator/views/signal_gen_pwm.c index 00b4ef2674..9f263be3ce 100644 --- a/applications/plugins/signal_generator/views/signal_gen_pwm.c +++ b/applications/plugins/signal_generator/views/signal_gen_pwm.c @@ -9,7 +9,7 @@ typedef enum { LineIndexTotalCount } LineIndex; -static const char* const pwm_ch_names[] = {"TIM1(2)", "LPTIM2(4)"}; +static const char* const pwm_ch_names[] = {"2(A7)", "4(A4)"}; struct SignalGenPwm { View* view; @@ -31,8 +31,8 @@ typedef struct { #define ITEM_H 64 / 3 #define ITEM_W 128 -#define VALUE_X 95 -#define VALUE_W 55 +#define VALUE_X 100 +#define VALUE_W 45 #define FREQ_VALUE_X 62 #define FREQ_MAX 1000000UL @@ -126,11 +126,11 @@ static void signal_gen_pwm_draw_callback(Canvas* canvas, void* _model) { for(uint8_t line = 0; line < LineIndexTotalCount; line++) { if(line == LineIndexChannel) { - line_label = "PWM Channel"; + line_label = "GPIO Pin"; } else if(line == LineIndexFrequency) { line_label = "Frequency"; } else if(line == LineIndexDuty) { - line_label = "Duty Cycle"; + line_label = "Pulse width"; } canvas_set_color(canvas, ColorBlack); @@ -162,9 +162,9 @@ static void signal_gen_pwm_draw_callback(Canvas* canvas, void* _model) { canvas_set_font(canvas, FontSecondary); if(model->edit_mode) { - uint8_t icon_x = (FREQ_VALUE_X - 1) + (FREQ_DIGITS_NB - model->edit_digit - 1) * 6; + uint8_t icon_x = (FREQ_VALUE_X) + (FREQ_DIGITS_NB - model->edit_digit - 1) * 6; canvas_draw_icon(canvas, icon_x, text_y - 9, &I_SmallArrowUp_4x7); - canvas_draw_icon(canvas, icon_x, text_y + 4, &I_SmallArrowDown_4x7); + canvas_draw_icon(canvas, icon_x, text_y + 5, &I_SmallArrowDown_4x7); } } else if(line == LineIndexDuty) { snprintf(val_text, sizeof(val_text), "%d%%", model->duty); diff --git a/assets/icons/Interface/SmallArrowDown_4x7.png b/assets/icons/Interface/SmallArrowDown_4x7.png index 5c5252b167d2f9f9a1ce5e7b9f9c99123879c1b4..1912e5d246268d75a20984bdc8b996d503f3d166 100644 GIT binary patch delta 3197 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 W8UWjEeq_t38n86AL)9SMWB&_FWTOKB literal 8340 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