From 633145495c42cfc1126672b31bd160c415e26170 Mon Sep 17 00:00:00 2001 From: derskythe Date: Mon, 26 Sep 2022 21:10:41 +0400 Subject: [PATCH] fix twice button press in manual mode --- .../plugins/subbrute/helpers/subbrute_worker.c | 12 +++++++++--- .../plugins/subbrute/helpers/subbrute_worker.h | 2 +- .../subbrute/scenes/subbrute_scene_run_attack.c | 2 +- .../subbrute/scenes/subbrute_scene_setup_attack.c | 2 +- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/applications/plugins/subbrute/helpers/subbrute_worker.c b/applications/plugins/subbrute/helpers/subbrute_worker.c index e12d7c9f6..2fab20e95 100644 --- a/applications/plugins/subbrute/helpers/subbrute_worker.c +++ b/applications/plugins/subbrute/helpers/subbrute_worker.c @@ -157,10 +157,16 @@ bool subbrute_worker_can_transmit(SubBruteWorker* instance) { return (furi_get_tick() - instance->last_time_tx_data) > SUBBRUTE_SEND_DELAY; } -bool subbrute_worker_can_manual_transmit(SubBruteWorker* instance) { +bool subbrute_worker_can_manual_transmit(SubBruteWorker* instance, bool is_button_pressed) { furi_assert(instance); - return !instance->worker_manual_mode; + if(is_button_pressed) { + // It's human pressed, trying to reset twice pressing + return !instance->worker_manual_mode && + (furi_get_tick() - instance->last_time_tx_data) > 500; + } else { + return !instance->worker_manual_mode; + } } bool subbrute_worker_transmit(SubBruteWorker* instance, const char* payload) { @@ -204,7 +210,7 @@ bool subbrute_worker_init_manual_transmit( frequency, protocol_name); #endif - if(instance->worker_manual_mode || !subbrute_worker_can_manual_transmit(instance) || + if(instance->worker_manual_mode || !subbrute_worker_can_manual_transmit(instance, false) || instance->worker_running) { #ifdef FURI_DEBUG FURI_LOG_D(TAG, "cannot transmit"); diff --git a/applications/plugins/subbrute/helpers/subbrute_worker.h b/applications/plugins/subbrute/helpers/subbrute_worker.h index 3338657d1..d96fbdde2 100644 --- a/applications/plugins/subbrute/helpers/subbrute_worker.h +++ b/applications/plugins/subbrute/helpers/subbrute_worker.h @@ -28,7 +28,7 @@ void subbrute_worker_set_continuous_worker(SubBruteWorker* instance, bool is_con //bool subbrute_worker_write(SubBruteWorker* instance, uint8_t* data, size_t size); bool subbrute_worker_is_running(SubBruteWorker* instance); bool subbrute_worker_can_transmit(SubBruteWorker* instance); -bool subbrute_worker_can_manual_transmit(SubBruteWorker* instance); +bool subbrute_worker_can_manual_transmit(SubBruteWorker* instance, bool is_button_pressed); bool subbrute_worker_transmit(SubBruteWorker* instance, const char* payload); bool subbrute_worker_init_manual_transmit( SubBruteWorker* instance, diff --git a/applications/plugins/subbrute/scenes/subbrute_scene_run_attack.c b/applications/plugins/subbrute/scenes/subbrute_scene_run_attack.c index 5f5ba3e27..978c7de40 100644 --- a/applications/plugins/subbrute/scenes/subbrute_scene_run_attack.c +++ b/applications/plugins/subbrute/scenes/subbrute_scene_run_attack.c @@ -161,7 +161,7 @@ bool subbrute_scene_run_attack_on_event(void* context, SceneManagerEvent event) notification_message(instance->notifications, &sequence_blink_stop); } } else { - if(subbrute_worker_can_manual_transmit(instance->worker)) { + if(subbrute_worker_can_manual_transmit(instance->worker, false)) { // Blink notification_message(instance->notifications, &sequence_blink_yellow_100); diff --git a/applications/plugins/subbrute/scenes/subbrute_scene_setup_attack.c b/applications/plugins/subbrute/scenes/subbrute_scene_setup_attack.c index c645a899a..f707ff3cb 100644 --- a/applications/plugins/subbrute/scenes/subbrute_scene_setup_attack.c +++ b/applications/plugins/subbrute/scenes/subbrute_scene_setup_attack.c @@ -135,7 +135,7 @@ bool subbrute_scene_setup_attack_on_event(void* context, SceneManagerEvent event } subbrute_attack_view_set_current_step(view, instance->device->key_index); } else if(event.event == SubBruteCustomEventTypeTransmitCustom) { - if(subbrute_worker_can_manual_transmit(instance->worker)) { + if(subbrute_worker_can_manual_transmit(instance->worker, true)) { // Blink notification_message(instance->notifications, &sequence_blink_green_100);