Update subghz_frequency_analyzer.c

This commit is contained in:
RogueMaster
2022-09-22 03:09:50 -04:00
committed by GitHub
parent 55ede48b5b
commit abb8e894b3

View File

@@ -18,18 +18,6 @@
#define RSSI_SCALE 2 #define RSSI_SCALE 2
#define TRIGGER_STEP 1 #define TRIGGER_STEP 1
static const NotificationSequence sequence_hw_blink = {
&message_blink_start_10,
&message_blink_set_color_cyan,
&message_do_not_reset,
NULL,
};
static const NotificationSequence sequence_hw_blink_stop = {
&message_blink_stop,
NULL,
};
typedef enum { typedef enum {
SubGhzFrequencyAnalyzerStatusIDLE, SubGhzFrequencyAnalyzerStatusIDLE,
} SubGhzFrequencyAnalyzerStatus; } SubGhzFrequencyAnalyzerStatus;
@@ -40,11 +28,9 @@ struct SubGhzFrequencyAnalyzer {
SubGhzFrequencyAnalyzerCallback callback; SubGhzFrequencyAnalyzerCallback callback;
void* context; void* context;
bool locked; bool locked;
uint8_t feedback_level; // 0 - no feedback, 1 - vibro only, 2 - vibro and sound
float rssi_last; float rssi_last;
uint32_t frequency_last; uint32_t frequency_last;
uint32_t frequency_last_vis; uint32_t frequency_last_vis;
NotificationApp* notifications;
}; };
typedef struct { typedef struct {
@@ -53,7 +39,6 @@ typedef struct {
float rssi; float rssi;
float rssi_last; float rssi_last;
float trigger; float trigger;
uint8_t feedback_level;
} SubGhzFrequencyAnalyzerModel; } SubGhzFrequencyAnalyzerModel;
void subghz_frequency_analyzer_set_callback( void subghz_frequency_analyzer_set_callback(
@@ -143,21 +128,6 @@ void subghz_frequency_analyzer_draw(Canvas* canvas, SubGhzFrequencyAnalyzerModel
} }
canvas_draw_str(canvas, 9, 42, buffer); 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 // Buttons hint
elements_button_left(canvas, "T-"); elements_button_left(canvas, "T-");
elements_button_right(canvas, "T+"); elements_button_right(canvas, "T+");
@@ -191,16 +161,6 @@ bool subghz_frequency_analyzer_input(InputEvent* event, void* context) {
need_redraw = true; need_redraw = true;
} }
if(event->type == InputTypePress && event->key == InputKeyDown) {
if(instance->feedback_level == 0) {
instance->feedback_level = 2;
} else {
instance->feedback_level--;
}
FURI_LOG_D(TAG, "feedback_level = %d", instance->feedback_level);
need_redraw = true;
}
if(need_redraw) { if(need_redraw) {
SubGhzFrequencyAnalyzer* instance = context; SubGhzFrequencyAnalyzer* instance = context;
with_view_model( with_view_model(
@@ -209,7 +169,6 @@ bool subghz_frequency_analyzer_input(InputEvent* event, void* context) {
model->frequency_last = instance->frequency_last; model->frequency_last = instance->frequency_last;
model->trigger = model->trigger =
subghz_frequency_analyzer_worker_get_trigger_level(instance->worker); subghz_frequency_analyzer_worker_get_trigger_level(instance->worker);
model->feedback_level = instance->feedback_level;
return true; return true;
}); });
} }
@@ -234,8 +193,14 @@ void subghz_frequency_analyzer_pair_callback(void* context, uint32_t frequency,
SubGhzFrequencyAnalyzer* instance = context; SubGhzFrequencyAnalyzer* instance = context;
if((rssi == 0.f) && (instance->locked)) { if((rssi == 0.f) && (instance->locked)) {
notification_message(instance->notifications, &sequence_hw_blink); if(instance->callback) {
instance->callback(SubGhzCustomEventSceneAnalyzerUnlock, instance->context);
}
instance->frequency_last_vis = instance->frequency_last; 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)) { if((rssi != 0.f) && (frequency != 0)) {
@@ -245,19 +210,6 @@ void subghz_frequency_analyzer_pair_callback(void* context, uint32_t frequency,
if(!instance->locked) { if(!instance->locked) {
// Triggered! // Triggered!
instance->rssi_last = rssi; 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"); FURI_LOG_D(TAG, "triggered");
} }
// Update values // Update values
@@ -275,7 +227,6 @@ void subghz_frequency_analyzer_pair_callback(void* context, uint32_t frequency,
model->frequency = frequency; model->frequency = frequency;
model->frequency_last = instance->frequency_last_vis; model->frequency_last = instance->frequency_last_vis;
model->trigger = subghz_frequency_analyzer_worker_get_trigger_level(instance->worker); model->trigger = subghz_frequency_analyzer_worker_get_trigger_level(instance->worker);
model->feedback_level = instance->feedback_level;
return true; return true;
}); });
} }
@@ -284,10 +235,6 @@ void subghz_frequency_analyzer_enter(void* context) {
furi_assert(context); furi_assert(context);
SubGhzFrequencyAnalyzer* instance = context; SubGhzFrequencyAnalyzer* instance = context;
// Notifications
instance->notifications = furi_record_open(RECORD_NOTIFICATION);
notification_message(instance->notifications, &sequence_hw_blink);
//Start worker //Start worker
instance->worker = subghz_frequency_analyzer_worker_alloc(instance->context); instance->worker = subghz_frequency_analyzer_worker_alloc(instance->context);
@@ -318,24 +265,23 @@ void subghz_frequency_analyzer_exit(void* context) {
furi_assert(context); furi_assert(context);
SubGhzFrequencyAnalyzer* instance = context; SubGhzFrequencyAnalyzer* instance = context;
// Stop blinking //Stop worker
notification_message(instance->notifications, &sequence_hw_blink_stop);
// Stop worker
if(subghz_frequency_analyzer_worker_is_running(instance->worker)) { if(subghz_frequency_analyzer_worker_is_running(instance->worker)) {
subghz_frequency_analyzer_worker_stop(instance->worker); subghz_frequency_analyzer_worker_stop(instance->worker);
} }
subghz_frequency_analyzer_worker_free(instance->worker); subghz_frequency_analyzer_worker_free(instance->worker);
furi_record_close(RECORD_NOTIFICATION); with_view_model(
instance->view, (SubGhzFrequencyAnalyzerModel * model) {
model->rssi = 0;
return true;
});
} }
SubGhzFrequencyAnalyzer* subghz_frequency_analyzer_alloc() { SubGhzFrequencyAnalyzer* subghz_frequency_analyzer_alloc() {
SubGhzFrequencyAnalyzer* instance = malloc(sizeof(SubGhzFrequencyAnalyzer)); SubGhzFrequencyAnalyzer* instance = malloc(sizeof(SubGhzFrequencyAnalyzer));
furi_assert(instance); furi_assert(instance);
instance->feedback_level = 2;
// View allocation and configuration // View allocation and configuration
instance->view = view_alloc(); instance->view = view_alloc();
view_allocate_model( view_allocate_model(
@@ -346,6 +292,12 @@ SubGhzFrequencyAnalyzer* subghz_frequency_analyzer_alloc() {
view_set_enter_callback(instance->view, subghz_frequency_analyzer_enter); view_set_enter_callback(instance->view, subghz_frequency_analyzer_enter);
view_set_exit_callback(instance->view, subghz_frequency_analyzer_exit); view_set_exit_callback(instance->view, subghz_frequency_analyzer_exit);
with_view_model(
instance->view, (SubGhzFrequencyAnalyzerModel * model) {
model->rssi = 0;
return true;
});
return instance; return instance;
} }
@@ -359,4 +311,4 @@ void subghz_frequency_analyzer_free(SubGhzFrequencyAnalyzer* instance) {
View* subghz_frequency_analyzer_get_view(SubGhzFrequencyAnalyzer* instance) { View* subghz_frequency_analyzer_get_view(SubGhzFrequencyAnalyzer* instance) {
furi_assert(instance); furi_assert(instance);
return instance->view; return instance->view;
} }