diff --git a/applications/main/subghz/scenes/subghz_scene_read_raw.c b/applications/main/subghz/scenes/subghz_scene_read_raw.c index 5734a8e9f..db2cf4763 100644 --- a/applications/main/subghz/scenes/subghz_scene_read_raw.c +++ b/applications/main/subghz/scenes/subghz_scene_read_raw.c @@ -124,7 +124,7 @@ void subghz_scene_read_raw_on_enter(void* context) { view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewIdReadRAW); // Start sending immediately with favorites - if(scene_manager_get_scene_state(subghz->scene_manager, SubGhzSceneReadRAW)) { + if(subghz->fav_timeout) { with_view_model( subghz->subghz_read_raw->view, SubGhzReadRAWModel * model, @@ -293,7 +293,7 @@ bool subghz_scene_read_raw_on_event(void* context, SceneManagerEvent event) { subghz_read_raw_stop_send(subghz->subghz_read_raw); // Exit / stop with favorites - if(scene_manager_get_scene_state(subghz->scene_manager, SubGhzSceneReadRAW)) { + if(subghz->fav_timeout) { while(scene_manager_handle_back_event(subghz->scene_manager)) ; view_dispatcher_stop(subghz->view_dispatcher); diff --git a/applications/main/subghz/scenes/subghz_scene_transmitter.c b/applications/main/subghz/scenes/subghz_scene_transmitter.c index 7877e3c14..78b26688f 100644 --- a/applications/main/subghz/scenes/subghz_scene_transmitter.c +++ b/applications/main/subghz/scenes/subghz_scene_transmitter.c @@ -51,8 +51,6 @@ bool subghz_scene_transmitter_update_data_show(void* context) { return ret; } -FuriTimer* fav_timer = NULL; - void fav_timer_callback(void* context) { SubGhz* subghz = context; scene_manager_handle_custom_event( @@ -77,7 +75,7 @@ void subghz_scene_transmitter_on_enter(void* context) { view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewIdTransmitter); // Auto send and exit with favorites - if(scene_manager_get_scene_state(subghz->scene_manager, SubGhzSceneTransmitter)) { + if(subghz->fav_timeout) { subghz_custom_btn_set(0); scene_manager_handle_custom_event( subghz->scene_manager, SubGhzCustomEventViewTransmitterSendStart); @@ -86,9 +84,10 @@ void subghz_scene_transmitter_on_enter(void* context) { SubGhzViewTransmitterModel * model, { model->show_button = false; }, true); - fav_timer = furi_timer_alloc(fav_timer_callback, FuriTimerTypeOnce, subghz); + subghz->fav_timer = furi_timer_alloc(fav_timer_callback, FuriTimerTypeOnce, subghz); furi_timer_start( - fav_timer, XTREME_SETTINGS()->favorite_timeout * furi_kernel_get_tick_frequency()); + subghz->fav_timer, + XTREME_SETTINGS()->favorite_timeout * furi_kernel_get_tick_frequency()); subghz->state_notifications = SubGhzNotificationStateTx; } } @@ -134,11 +133,7 @@ bool subghz_scene_transmitter_on_event(void* context, SceneManagerEvent event) { subghz_sleep(subghz); furi_hal_subghz_set_rolling_counter_mult(tmp_counter); } - if(scene_manager_get_scene_state(subghz->scene_manager, SubGhzSceneTransmitter)) { - if(fav_timer) { - furi_timer_stop(fav_timer); - furi_timer_free(fav_timer); - } + if(subghz->fav_timeout) { while(scene_manager_handle_back_event(subghz->scene_manager)) ; view_dispatcher_stop(subghz->view_dispatcher); diff --git a/applications/main/subghz/subghz.c b/applications/main/subghz/subghz.c index 6752b4e55..fa6e10b7a 100644 --- a/applications/main/subghz/subghz.c +++ b/applications/main/subghz/subghz.c @@ -474,16 +474,13 @@ int32_t subghz_app(char* p) { if(subghz_key_load(subghz, p, true)) { furi_string_set(subghz->file_path, (const char*)p); + subghz->fav_timeout = is_favorite; if((!strcmp(subghz->txrx->decoder_result->protocol->name, "RAW"))) { //Load Raw TX subghz->txrx->rx_key_state = SubGhzRxKeyStateRAWLoad; - scene_manager_set_scene_state( - subghz->scene_manager, SubGhzSceneReadRAW, is_favorite); scene_manager_next_scene(subghz->scene_manager, SubGhzSceneReadRAW); } else { //Load transmitter TX - scene_manager_set_scene_state( - subghz->scene_manager, SubGhzSceneTransmitter, is_favorite); scene_manager_next_scene(subghz->scene_manager, SubGhzSceneTransmitter); } } else { @@ -512,6 +509,11 @@ int32_t subghz_app(char* p) { view_dispatcher_run(subghz->view_dispatcher); + if(subghz->fav_timer) { + furi_timer_stop(subghz->fav_timer); + furi_timer_free(subghz->fav_timer); + } + furi_hal_power_suppress_charge_exit(); // Disable power for External CC1101 if it was enabled and module is connected furi_hal_subghz_disable_ext_power(); diff --git a/applications/main/subghz/subghz_i.h b/applications/main/subghz/subghz_i.h index faae35fa2..37318580f 100644 --- a/applications/main/subghz/subghz_i.h +++ b/applications/main/subghz/subghz_i.h @@ -131,6 +131,9 @@ struct SubGhz { SubGhzDecodeRawState decode_raw_state; SubGhzFileEncoderWorker* decode_raw_file_worker_encoder; + bool fav_timeout; + FuriTimer* fav_timer; + void* rpc_ctx; };