diff --git a/applications/plugins/morse_code/morse_code.c b/applications/plugins/morse_code/morse_code.c index a29454371..beb661222 100644 --- a/applications/plugins/morse_code/morse_code.c +++ b/applications/plugins/morse_code/morse_code.c @@ -123,9 +123,11 @@ int32_t morse_code_app() { while(furi_message_queue_get(morse_code->input_queue, &input, FuriWaitForever) == FuriStatusOk) { furi_check(furi_mutex_acquire(morse_code->model_mutex, FuriWaitForever) == FuriStatusOk); - if(input.key == InputKeyBack) { + if(input.key == InputKeyBack && input.type == InputTypeLong) { furi_mutex_release(morse_code->model_mutex); break; + } else if(input.key == InputKeyBack && input.type == InputTypeShort) { + morse_code_worker_reset_text(morse_code->worker); } else if(input.key == InputKeyOk) { if(input.type == InputTypePress) morse_code_worker_play(morse_code->worker, true); diff --git a/applications/plugins/morse_code/morse_code_worker.c b/applications/plugins/morse_code/morse_code_worker.c index b465abc5b..3b7bd4417 100644 --- a/applications/plugins/morse_code/morse_code_worker.c +++ b/applications/plugins/morse_code/morse_code_worker.c @@ -44,10 +44,10 @@ void morse_code_worker_fill_letter(MorseCodeWorker* instance) { for(size_t i = 0; i < sizeof(morse_array); i++) { if(furi_string_cmp_str(instance->buffer, morse_array[i]) == 0) { furi_string_push_back(instance->words, symbol_array[i]); - furi_string_reset(instance->buffer); break; } } + furi_string_reset(instance->buffer); FURI_LOG_D("MorseCode: Words", "%s", furi_string_get_cstr(instance->words)); } @@ -117,6 +117,8 @@ MorseCodeWorker* morse_code_worker_alloc() { void morse_code_worker_free(MorseCodeWorker* instance) { furi_assert(instance); + furi_string_free(instance->buffer); + furi_string_free(instance->words); furi_thread_free(instance->thread); free(instance); } @@ -145,6 +147,12 @@ void morse_code_worker_set_dit_delta(MorseCodeWorker* instance, uint32_t delta) instance->dit_delta = delta; } +void morse_code_worker_reset_text(MorseCodeWorker* instance) { + furi_assert(instance); + furi_string_reset(instance->buffer); + furi_string_reset(instance->words); +} + void morse_code_worker_start(MorseCodeWorker* instance) { furi_assert(instance); furi_assert(instance->is_running == false); diff --git a/applications/plugins/morse_code/morse_code_worker.h b/applications/plugins/morse_code/morse_code_worker.h index 524876476..e880c9579 100644 --- a/applications/plugins/morse_code/morse_code_worker.h +++ b/applications/plugins/morse_code/morse_code_worker.h @@ -29,6 +29,8 @@ void morse_code_worker_stop(MorseCodeWorker* instance); void morse_code_worker_play(MorseCodeWorker* instance, bool play); +void morse_code_worker_reset_text(MorseCodeWorker* instance); + void morse_code_worker_set_volume(MorseCodeWorker* instance, float level); void morse_code_worker_set_dit_delta(MorseCodeWorker* instance, uint32_t delta);