diff --git a/applications/main/subghz/scenes/subghz_scene_transmitter.c b/applications/main/subghz/scenes/subghz_scene_transmitter.c index ab9155fb7..77ae97cba 100644 --- a/applications/main/subghz/scenes/subghz_scene_transmitter.c +++ b/applications/main/subghz/scenes/subghz_scene_transmitter.c @@ -1,6 +1,7 @@ #include "../subghz_i.h" #include "../views/transmitter.h" #include +#include #include #include @@ -50,6 +51,14 @@ 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( + subghz->scene_manager, SubGhzCustomEventViewTransmitterSendStop); +} + void subghz_scene_transmitter_on_enter(void* context) { SubGhz* subghz = context; @@ -66,6 +75,23 @@ void subghz_scene_transmitter_on_enter(void* context) { subghz->state_notifications = SubGhzNotificationStateIDLE; 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)) { + subghz_custom_btn_set(0); + scene_manager_handle_custom_event( + subghz->scene_manager, SubGhzCustomEventViewTransmitterSendStart); + with_view_model( + subghz->subghz_transmitter->view, + SubGhzViewTransmitterModel * model, + { + model->show_button = false; + }, + true); + 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->state_notifications = SubGhzNotificationStateTx; + } } bool subghz_scene_transmitter_on_event(void* context, SceneManagerEvent event) { @@ -109,6 +135,15 @@ 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); + } + while(scene_manager_handle_back_event(subghz->scene_manager)) + ; + view_dispatcher_stop(subghz->view_dispatcher); + } return true; } else if(event.event == SubGhzCustomEventViewTransmitterBack) { subghz->state_notifications = SubGhzNotificationStateIDLE; diff --git a/applications/main/subghz/subghz.c b/applications/main/subghz/subghz.c index 906b8e074..6752b4e55 100644 --- a/applications/main/subghz/subghz.c +++ b/applications/main/subghz/subghz.c @@ -482,6 +482,8 @@ int32_t subghz_app(char* p) { 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 { diff --git a/applications/main/subghz/views/transmitter.c b/applications/main/subghz/views/transmitter.c index 2bec77690..5667cd59f 100644 --- a/applications/main/subghz/views/transmitter.c +++ b/applications/main/subghz/views/transmitter.c @@ -6,21 +6,6 @@ #include -struct SubGhzViewTransmitter { - View* view; - SubGhzViewTransmitterCallback callback; - void* context; -}; - -typedef struct { - FuriString* frequency_str; - FuriString* preset_str; - FuriString* key_str; - uint8_t show_button; - FuriString* temp_button_id; - bool draw_temp_button; -} SubGhzViewTransmitterModel; - void subghz_view_transmitter_set_callback( SubGhzViewTransmitter* subghz_transmitter, SubGhzViewTransmitterCallback callback, diff --git a/applications/main/subghz/views/transmitter.h b/applications/main/subghz/views/transmitter.h index 64bcbd1af..1ae51afbd 100644 --- a/applications/main/subghz/views/transmitter.h +++ b/applications/main/subghz/views/transmitter.h @@ -3,10 +3,23 @@ #include #include "../helpers/subghz_custom_event.h" -typedef struct SubGhzViewTransmitter SubGhzViewTransmitter; +typedef struct { + FuriString* frequency_str; + FuriString* preset_str; + FuriString* key_str; + uint8_t show_button; + FuriString* temp_button_id; + bool draw_temp_button; +} SubGhzViewTransmitterModel; typedef void (*SubGhzViewTransmitterCallback)(SubGhzCustomEvent event, void* context); +typedef struct { + View* view; + SubGhzViewTransmitterCallback callback; + void* context; +} SubGhzViewTransmitter; + void subghz_view_transmitter_set_callback( SubGhzViewTransmitter* subghz_transmitter, SubGhzViewTransmitterCallback callback,