diff --git a/ChangeLog.md b/ChangeLog.md index d04cb5074..5b16bf535 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -42,6 +42,11 @@ ### Fixed: - OFW: USB: IRQ, CDC and EP fixes, no more "Operation timeout (generic)" updating from OFW (by @skotopes) +- Sub-GHz: + - UL: Fix add manually princeton (by @xMasterX) + - UL: Fix decode raw signals showing up in read menu (by @xMasterX) + - UL: Sync signal delete scene with OFW (by @xMasterX) + - OFW: Fixed transition to Saved menu after Delete RAW (by @Skorpionm) - Archive: Fix favorite's parent folders thinking they are favorited too (by @Willy-JL) - FBT: Consistent version/branch info, fix gitorigin (by @Willy-JL) - AssetPacker: Pack pre-compiled icons and fonts too (by @Willy-JL) @@ -49,7 +54,6 @@ - OFW: JS: Disable logging in mjs +2k free flash (by @hedger) - OFW: NFC: Fixed infinite loop in dictionary attack scene (by @RebornedBrain) - OFW: Desktop: Lockup fix, GUI improvements (by @skotopes) -- OFW: Sub-GHz: Fixed transition to Saved menu after Delete RAW (by @Skorpionm) - OFW: Loader: Fix crash on locked via cli loader (by @DrZlo13) - OFW: Archive: Fix memory leak in favorites add/remove (by @skotopes) - OFW: Accessor: Disable expansion service on start (by @skotopes) diff --git a/applications/main/subghz/helpers/subghz_custom_event.h b/applications/main/subghz/helpers/subghz_custom_event.h index 416de2cd8..8163060bc 100644 --- a/applications/main/subghz/helpers/subghz_custom_event.h +++ b/applications/main/subghz/helpers/subghz_custom_event.h @@ -8,6 +8,7 @@ typedef enum { //SubGhzCustomEvent SubGhzCustomEventSceneDeleteSuccess = 100, SubGhzCustomEventSceneDelete, + SubGhzCustomEventSceneDeleteBack, SubGhzCustomEventSceneDeleteRAW, SubGhzCustomEventSceneDeleteRAWBack, diff --git a/applications/main/subghz/helpers/subghz_txrx_create_protocol_key.c b/applications/main/subghz/helpers/subghz_txrx_create_protocol_key.c index 1d57c3a9b..42e91a330 100644 --- a/applications/main/subghz/helpers/subghz_txrx_create_protocol_key.c +++ b/applications/main/subghz/helpers/subghz_txrx_create_protocol_key.c @@ -81,11 +81,11 @@ bool subghz_txrx_gen_data_protocol_and_te( ret = true; } } - if(ret == SubGhzProtocolStatusOk) { + if(ret) { uint32_t guard_time = 30; if(!flipper_format_update_uint32( instance->fff_data, "Guard_time", (uint32_t*)&guard_time, 1)) { - ret = SubGhzProtocolStatusErrorParserOthers; + ret = false; FURI_LOG_E(TAG, "Unable to update Guard_time"); } } diff --git a/applications/main/subghz/scenes/subghz_scene_decode_raw.c b/applications/main/subghz/scenes/subghz_scene_decode_raw.c index 2595b7c49..ae040ce97 100644 --- a/applications/main/subghz/scenes/subghz_scene_decode_raw.c +++ b/applications/main/subghz/scenes/subghz_scene_decode_raw.c @@ -256,6 +256,8 @@ bool subghz_scene_decode_raw_on_event(void* context, SceneManagerEvent event) { subghz_txrx_set_rx_callback(subghz->txrx, NULL, subghz); + subghz_rx_key_state_set(subghz, SubGhzRxKeyStateIDLE); + if(subghz_file_encoder_worker_is_running(subghz->decode_raw_file_worker_encoder)) { subghz_file_encoder_worker_stop(subghz->decode_raw_file_worker_encoder); } diff --git a/applications/main/subghz/scenes/subghz_scene_delete.c b/applications/main/subghz/scenes/subghz_scene_delete.c index 3fc4be069..601e2711d 100644 --- a/applications/main/subghz/scenes/subghz_scene_delete.c +++ b/applications/main/subghz/scenes/subghz_scene_delete.c @@ -6,43 +6,57 @@ void subghz_scene_delete_callback(GuiButtonType result, InputType type, void* co SubGhz* subghz = context; if((result == GuiButtonTypeRight) && (type == InputTypeShort)) { view_dispatcher_send_custom_event(subghz->view_dispatcher, SubGhzCustomEventSceneDelete); + } else if((result == GuiButtonTypeLeft) && (type == InputTypeShort)) { + view_dispatcher_send_custom_event( + subghz->view_dispatcher, SubGhzCustomEventSceneDeleteBack); } } void subghz_scene_delete_on_enter(void* context) { SubGhz* subghz = context; - FuriString* frequency_str = furi_string_alloc(); - FuriString* modulation_str = furi_string_alloc(); - FuriString* text = furi_string_alloc(); - subghz_txrx_get_frequency_and_modulation(subghz->txrx, frequency_str, modulation_str, false); - widget_add_string_element( - subghz->widget, - 78, - 0, - AlignLeft, - AlignTop, - FontSecondary, - furi_string_get_cstr(frequency_str)); + FuriString* frequency_str; + FuriString* modulation_str; + FuriString* text_out; + FuriString* text; + text_out = furi_string_alloc(); + text = furi_string_alloc(); - widget_add_string_element( - subghz->widget, - 113, - 0, - AlignLeft, - AlignTop, - FontSecondary, - furi_string_get_cstr(modulation_str)); + path_extract_filename(subghz->file_path, text, true); + furi_string_cat_printf(text_out, "\e#Delete %s?\e#\n", furi_string_get_cstr(text)); + + furi_string_reset(text); subghz_protocol_decoder_base_get_string(subghz_txrx_get_decoder(subghz->txrx), text); - widget_add_string_multiline_element( - subghz->widget, 0, 0, AlignLeft, AlignTop, FontSecondary, furi_string_get_cstr(text)); + + size_t dot = furi_string_search_char(text, '\r'); + if(dot > 0) { + furi_string_left(text, dot); + } + furi_string_cat_printf(text_out, "%s\n", furi_string_get_cstr(text)); + + furi_string_free(text); + + frequency_str = furi_string_alloc(); + modulation_str = furi_string_alloc(); + subghz_txrx_get_frequency_and_modulation(subghz->txrx, frequency_str, modulation_str, false); + + furi_string_cat_printf( + text_out, + "%s %s", + furi_string_get_cstr(frequency_str), + furi_string_get_cstr(modulation_str)); + + widget_add_text_box_element( + subghz->widget, 0, 0, 128, 54, AlignCenter, AlignTop, furi_string_get_cstr(text_out), false); furi_string_free(frequency_str); furi_string_free(modulation_str); - furi_string_free(text); + furi_string_free(text_out); widget_add_button_element( subghz->widget, GuiButtonTypeRight, "Delete", subghz_scene_delete_callback, subghz); + widget_add_button_element( + subghz->widget, GuiButtonTypeLeft, "Cancel", subghz_scene_delete_callback, subghz); view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewIdWidget); } @@ -59,6 +73,8 @@ bool subghz_scene_delete_on_event(void* context, SceneManagerEvent event) { subghz->scene_manager, SubGhzSceneStart); } return true; + } else if(event.event == SubGhzCustomEventSceneDeleteBack) { + return scene_manager_previous_scene(subghz->scene_manager); } } return false;