From d1dddbddec8a1bfbee70e7be512e26556a26bd17 Mon Sep 17 00:00:00 2001 From: RogueMaster Date: Wed, 28 Sep 2022 02:39:23 -0400 Subject: [PATCH] fix? --- .../subghz/views/subghz_frequency_analyzer.c | 66 +++++++++++++------ 1 file changed, 46 insertions(+), 20 deletions(-) diff --git a/applications/main/subghz/views/subghz_frequency_analyzer.c b/applications/main/subghz/views/subghz_frequency_analyzer.c index 4afeffc5c..9900c32c9 100644 --- a/applications/main/subghz/views/subghz_frequency_analyzer.c +++ b/applications/main/subghz/views/subghz_frequency_analyzer.c @@ -66,9 +66,11 @@ struct SubGhzFrequencyAnalyzer { SubGhzFrequencyAnalyzerCallback callback; void* context; bool locked; + uint8_t feedback_level; // 0 - no feedback, 1 - vibro only, 2 - vibro and sound float rssi_last; uint32_t frequency_last; uint32_t frequency_last_vis; + NotificationApp* notifications; }; typedef struct { @@ -78,6 +80,7 @@ typedef struct { float rssi; float rssi_last; float trigger; + uint8_t feedback_level; } SubGhzFrequencyAnalyzerModel; void subghz_frequency_analyzer_set_callback( @@ -167,6 +170,21 @@ void subghz_frequency_analyzer_draw(Canvas* canvas, SubGhzFrequencyAnalyzerModel } canvas_draw_str(canvas, 9, 42, buffer); + switch(model->feedback_level) { + case 2: + canvas_draw_icon(canvas, 128 - 8 - 1, 1, &I_Volup_8x6); + break; + case 1: + canvas_draw_icon(canvas, 128 - 8 - 1, 1, &I_Voldwn_6x6); + break; + case 0: + canvas_draw_icon(canvas, 128 - 8 - 1, 1, &I_Voldwn_6x6); + canvas_set_color(canvas, ColorWhite); + canvas_draw_box(canvas, 128 - 2 - 1 - 2, 1, 2, 6); + canvas_set_color(canvas, ColorBlack); + break; + } + // Buttons hint elements_button_left(canvas, "T-"); elements_button_right(canvas, "T+"); @@ -282,6 +300,7 @@ bool subghz_frequency_analyzer_input(InputEvent* event, void* context) { model->frequency_last = instance->frequency_last; model->trigger = subghz_frequency_analyzer_worker_get_trigger_level(instance->worker); + model->feedback_level = instance->feedback_level; return true; }); } @@ -306,14 +325,8 @@ void subghz_frequency_analyzer_pair_callback(void* context, uint32_t frequency, SubGhzFrequencyAnalyzer* instance = context; if((rssi == 0.f) && (instance->locked)) { - if(instance->callback) { - instance->callback(SubGhzCustomEventSceneAnalyzerUnlock, instance->context); - } + notification_message(instance->notifications, &sequence_hw_blink); instance->frequency_last_vis = instance->frequency_last; - } else if((rssi != 0.f) && (!instance->locked)) { - if(instance->callback) { - instance->callback(SubGhzCustomEventSceneAnalyzerLock, instance->context); - } } if((rssi != 0.f) && (frequency != 0)) { @@ -323,6 +336,19 @@ void subghz_frequency_analyzer_pair_callback(void* context, uint32_t frequency, if(!instance->locked) { // Triggered! instance->rssi_last = rssi; + notification_message(instance->notifications, &sequence_hw_blink_stop); + + switch(instance->feedback_level) { + case 1: // 1 - only vibro + notification_message(instance->notifications, &sequence_single_vibro); + break; + case 2: // 2 - vibro and beep + notification_message(instance->notifications, &sequence_success); + break; + default: // 0 - no feedback + break; + } + FURI_LOG_D(TAG, "triggered"); } // Update values @@ -340,6 +366,7 @@ void subghz_frequency_analyzer_pair_callback(void* context, uint32_t frequency, model->frequency = frequency; model->frequency_last = instance->frequency_last_vis; model->trigger = subghz_frequency_analyzer_worker_get_trigger_level(instance->worker); + model->feedback_level = instance->feedback_level; return true; }); } @@ -348,6 +375,10 @@ void subghz_frequency_analyzer_enter(void* context) { furi_assert(context); SubGhzFrequencyAnalyzer* instance = context; + // Notifications + instance->notifications = furi_record_open(RECORD_NOTIFICATION); + notification_message(instance->notifications, &sequence_hw_blink); + //Start worker instance->worker = subghz_frequency_analyzer_worker_alloc(instance->context); @@ -379,23 +410,24 @@ void subghz_frequency_analyzer_exit(void* context) { furi_assert(context); SubGhzFrequencyAnalyzer* instance = context; - //Stop worker + // Stop blinking + notification_message(instance->notifications, &sequence_hw_blink_stop); + + // Stop worker if(subghz_frequency_analyzer_worker_is_running(instance->worker)) { subghz_frequency_analyzer_worker_stop(instance->worker); } subghz_frequency_analyzer_worker_free(instance->worker); - with_view_model( - instance->view, (SubGhzFrequencyAnalyzerModel * model) { - model->rssi = 0; - return true; - }); + furi_record_close(RECORD_NOTIFICATION); } SubGhzFrequencyAnalyzer* subghz_frequency_analyzer_alloc() { SubGhzFrequencyAnalyzer* instance = malloc(sizeof(SubGhzFrequencyAnalyzer)); furi_assert(instance); + instance->feedback_level = 2; + // View allocation and configuration instance->view = view_alloc(); view_allocate_model( @@ -406,12 +438,6 @@ SubGhzFrequencyAnalyzer* subghz_frequency_analyzer_alloc() { view_set_enter_callback(instance->view, subghz_frequency_analyzer_enter); view_set_exit_callback(instance->view, subghz_frequency_analyzer_exit); - with_view_model( - instance->view, (SubGhzFrequencyAnalyzerModel * model) { - model->rssi = 0; - return true; - }); - return instance; } @@ -437,4 +463,4 @@ uint32_t subghz_frequency_analyzer_get_frequency_to_save(SubGhzFrequencyAnalyzer }); return frequency; -} +} \ No newline at end of file