Support subghz parsed recs for favorite timeout

This commit is contained in:
Willy-JL
2023-05-02 13:55:31 +01:00
parent ca71eaf328
commit d2c1a91a3a
4 changed files with 51 additions and 16 deletions

View File

@@ -1,6 +1,7 @@
#include "../subghz_i.h"
#include "../views/transmitter.h"
#include <dolphin/dolphin.h>
#include <xtreme.h>
#include <lib/subghz/protocols/keeloq.h>
#include <lib/subghz/protocols/star_line.h>
@@ -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;

View File

@@ -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 {

View File

@@ -6,21 +6,6 @@
#include <lib/subghz/blocks/custom_btn.h>
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,

View File

@@ -3,10 +3,23 @@
#include <gui/view.h>
#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,