diff --git a/applications/main/ibutton/scenes/ibutton_scene_delete_confirm.c b/applications/main/ibutton/scenes/ibutton_scene_delete_confirm.c index 51f1f2794..fccefe6ec 100644 --- a/applications/main/ibutton/scenes/ibutton_scene_delete_confirm.c +++ b/applications/main/ibutton/scenes/ibutton_scene_delete_confirm.c @@ -23,7 +23,7 @@ void ibutton_scene_delete_confirm_on_enter(void* context) { ibutton_text_store_set(ibutton, "\e#Delete %s?\e#", string_get_cstr(key_name)); widget_add_text_box_element( - widget, 0, 0, 128, 27, AlignCenter, AlignCenter, ibutton->text_store, false); + widget, 0, 0, 128, 27, AlignCenter, AlignCenter, ibutton->text_store, true); widget_add_button_element( widget, GuiButtonTypeLeft, "Cancel", ibutton_scene_delete_confirm_widget_callback, ibutton); widget_add_button_element( @@ -47,24 +47,24 @@ void ibutton_scene_delete_confirm_on_enter(void* context) { key_data[6], key_data[7]); widget_add_string_element( - widget, 64, 45, AlignCenter, AlignBottom, FontSecondary, "Dallas"); + widget, 64, 34, AlignCenter, AlignBottom, FontSecondary, "Dallas"); break; case iButtonKeyCyfral: ibutton_text_store_set(ibutton, "%02X %02X", key_data[0], key_data[1]); widget_add_string_element( - widget, 64, 45, AlignCenter, AlignBottom, FontSecondary, "Cyfral"); + widget, 64, 34, AlignCenter, AlignBottom, FontSecondary, "Cyfral"); break; case iButtonKeyMetakom: ibutton_text_store_set( ibutton, "%02X %02X %02X %02X", key_data[0], key_data[1], key_data[2], key_data[3]); widget_add_string_element( - widget, 64, 45, AlignCenter, AlignBottom, FontSecondary, "Metakom"); + widget, 64, 34, AlignCenter, AlignBottom, FontSecondary, "Metakom"); break; } widget_add_string_element( - widget, 64, 33, AlignCenter, AlignBottom, FontSecondary, ibutton->text_store); + widget, 64, 46, AlignCenter, AlignBottom, FontSecondary, ibutton->text_store); view_dispatcher_switch_to_view(ibutton->view_dispatcher, iButtonViewWidget); diff --git a/applications/main/ibutton/scenes/ibutton_scene_emulate.c b/applications/main/ibutton/scenes/ibutton_scene_emulate.c index 3420f8471..e6e0ec688 100644 --- a/applications/main/ibutton/scenes/ibutton_scene_emulate.c +++ b/applications/main/ibutton/scenes/ibutton_scene_emulate.c @@ -15,7 +15,7 @@ static void ibutton_scene_emulate_callback(void* context, bool emulated) { void ibutton_scene_emulate_on_enter(void* context) { iButton* ibutton = context; - Popup* popup = ibutton->popup; + Widget* widget = ibutton->widget; iButtonKey* key = ibutton->key; const uint8_t* key_data = ibutton_key_get_data_p(key); @@ -26,20 +26,18 @@ void ibutton_scene_emulate_on_enter(void* context) { path_extract_filename(ibutton->file_path, key_name, true); } - uint8_t line_count = 2; DOLPHIN_DEED(DolphinDeedIbuttonEmulate); // check that stored key has name if(!string_empty_p(key_name)) { - ibutton_text_store_set(ibutton, "emulating\n%s", string_get_cstr(key_name)); - line_count = 2; + ibutton_text_store_set(ibutton, "%s", string_get_cstr(key_name)); } else { // if not, show key data switch(ibutton_key_get_type(key)) { case iButtonKeyDS1990: ibutton_text_store_set( ibutton, - "emulating\n%02X %02X %02X %02X\n%02X %02X %02X %02X", + "%02X %02X %02X %02X\n%02X %02X %02X %02X", key_data[0], key_data[1], key_data[2], @@ -48,40 +46,24 @@ void ibutton_scene_emulate_on_enter(void* context) { key_data[5], key_data[6], key_data[7]); - line_count = 3; break; case iButtonKeyCyfral: - ibutton_text_store_set(ibutton, "emulating\n%02X %02X", key_data[0], key_data[1]); - line_count = 2; + ibutton_text_store_set(ibutton, "%02X %02X", key_data[0], key_data[1]); break; case iButtonKeyMetakom: ibutton_text_store_set( - ibutton, - "emulating\n%02X %02X %02X %02X", - key_data[0], - key_data[1], - key_data[2], - key_data[3]); - line_count = 2; + ibutton, "%02X %02X %02X %02X", key_data[0], key_data[1], key_data[2], key_data[3]); break; } } - switch(line_count) { - case 3: - popup_set_header(popup, "iButton", 82, 18, AlignCenter, AlignBottom); - popup_set_text(popup, ibutton->text_store, 82, 22, AlignCenter, AlignTop); - break; + widget_add_string_multiline_element( + widget, 90, 10, AlignCenter, AlignTop, FontPrimary, "iButton\nemulating"); + widget_add_icon_element(widget, 3, 10, &I_iButtonKey_49x44); + widget_add_text_box_element( + widget, 54, 39, 75, 22, AlignCenter, AlignCenter, ibutton->text_store, true); - default: - popup_set_header(popup, "iButton", 82, 24, AlignCenter, AlignBottom); - popup_set_text(popup, ibutton->text_store, 82, 28, AlignCenter, AlignTop); - break; - } - - popup_set_icon(popup, 2, 10, &I_iButtonKey_49x44); - - view_dispatcher_switch_to_view(ibutton->view_dispatcher, iButtonViewPopup); + view_dispatcher_switch_to_view(ibutton->view_dispatcher, iButtonViewWidget); ibutton_worker_emulate_set_callback( ibutton->key_worker, ibutton_scene_emulate_callback, ibutton); @@ -122,10 +104,7 @@ bool ibutton_scene_emulate_on_event(void* context, SceneManagerEvent event) { void ibutton_scene_emulate_on_exit(void* context) { iButton* ibutton = context; - Popup* popup = ibutton->popup; ibutton_worker_stop(ibutton->key_worker); - popup_set_header(popup, NULL, 0, 0, AlignCenter, AlignBottom); - popup_set_text(popup, NULL, 0, 0, AlignCenter, AlignTop); - popup_set_icon(popup, 0, 0, NULL); + widget_reset(ibutton->widget); ibutton_notification_message(ibutton, iButtonNotificationMessageBlinkStop); } diff --git a/applications/main/ibutton/scenes/ibutton_scene_info.c b/applications/main/ibutton/scenes/ibutton_scene_info.c index bd364ada8..9eec2bee1 100644 --- a/applications/main/ibutton/scenes/ibutton_scene_info.c +++ b/applications/main/ibutton/scenes/ibutton_scene_info.c @@ -14,7 +14,7 @@ void ibutton_scene_info_on_enter(void* context) { ibutton_text_store_set(ibutton, "%s", string_get_cstr(key_name)); widget_add_text_box_element( - widget, 0, 0, 128, 28, AlignCenter, AlignCenter, ibutton->text_store, false); + widget, 0, 0, 128, 23, AlignCenter, AlignCenter, ibutton->text_store, true); switch(ibutton_key_get_type(key)) { case iButtonKeyDS1990: @@ -29,26 +29,24 @@ void ibutton_scene_info_on_enter(void* context) { key_data[5], key_data[6], key_data[7]); - widget_add_string_element( - widget, 64, 51, AlignCenter, AlignBottom, FontSecondary, "Dallas"); + widget_add_string_element(widget, 64, 36, AlignCenter, AlignBottom, FontPrimary, "Dallas"); break; case iButtonKeyMetakom: ibutton_text_store_set( ibutton, "%02X %02X %02X %02X", key_data[0], key_data[1], key_data[2], key_data[3]); widget_add_string_element( - widget, 64, 51, AlignCenter, AlignBottom, FontSecondary, "Metakom"); + widget, 64, 36, AlignCenter, AlignBottom, FontPrimary, "Metakom"); break; case iButtonKeyCyfral: ibutton_text_store_set(ibutton, "%02X %02X", key_data[0], key_data[1]); - widget_add_string_element( - widget, 64, 51, AlignCenter, AlignBottom, FontSecondary, "Cyfral"); + widget_add_string_element(widget, 64, 36, AlignCenter, AlignBottom, FontPrimary, "Cyfral"); break; } widget_add_string_element( - widget, 64, 35, AlignCenter, AlignBottom, FontPrimary, ibutton->text_store); + widget, 64, 50, AlignCenter, AlignBottom, FontSecondary, ibutton->text_store); view_dispatcher_switch_to_view(ibutton->view_dispatcher, iButtonViewWidget); diff --git a/applications/main/ibutton/scenes/ibutton_scene_save_success.c b/applications/main/ibutton/scenes/ibutton_scene_save_success.c index 6c24a897c..43237f429 100644 --- a/applications/main/ibutton/scenes/ibutton_scene_save_success.c +++ b/applications/main/ibutton/scenes/ibutton_scene_save_success.c @@ -29,10 +29,8 @@ bool ibutton_scene_save_success_on_event(void* context, SceneManagerEvent event) if(event.type == SceneManagerEventTypeCustom) { consumed = true; if(event.event == iButtonCustomEventBack) { - const uint32_t possible_scenes[] = { - iButtonSceneReadKeyMenu, iButtonSceneSavedKeyMenu, iButtonSceneAddType}; - scene_manager_search_and_switch_to_previous_scene_one_of( - ibutton->scene_manager, possible_scenes, COUNT_OF(possible_scenes)); + scene_manager_search_and_switch_to_another_scene( + ibutton->scene_manager, iButtonSceneSelectKey); } } diff --git a/applications/main/ibutton/scenes/ibutton_scene_write.c b/applications/main/ibutton/scenes/ibutton_scene_write.c index 195758d2c..af65575c2 100644 --- a/applications/main/ibutton/scenes/ibutton_scene_write.c +++ b/applications/main/ibutton/scenes/ibutton_scene_write.c @@ -14,8 +14,8 @@ static void ibutton_scene_write_callback(void* context, iButtonWorkerWriteResult void ibutton_scene_write_on_enter(void* context) { iButton* ibutton = context; - Popup* popup = ibutton->popup; iButtonKey* key = ibutton->key; + Widget* widget = ibutton->widget; iButtonWorker* worker = ibutton->key_worker; const uint8_t* key_data = ibutton_key_get_data_p(key); @@ -26,19 +26,16 @@ void ibutton_scene_write_on_enter(void* context) { path_extract_filename(ibutton->file_path, key_name, true); } - uint8_t line_count = 2; - // check that stored key has name if(!string_empty_p(key_name)) { - ibutton_text_store_set(ibutton, "writing\n%s", string_get_cstr(key_name)); - line_count = 2; + ibutton_text_store_set(ibutton, "%s", string_get_cstr(key_name)); } else { // if not, show key data switch(ibutton_key_get_type(key)) { case iButtonKeyDS1990: ibutton_text_store_set( ibutton, - "writing\n%02X %02X %02X %02X\n%02X %02X %02X %02X", + "%02X %02X %02X %02X\n%02X %02X %02X %02X", key_data[0], key_data[1], key_data[2], @@ -47,40 +44,24 @@ void ibutton_scene_write_on_enter(void* context) { key_data[5], key_data[6], key_data[7]); - line_count = 3; break; case iButtonKeyCyfral: - ibutton_text_store_set(ibutton, "writing\n%02X %02X", key_data[0], key_data[1]); - line_count = 2; + ibutton_text_store_set(ibutton, "%02X %02X", key_data[0], key_data[1]); break; case iButtonKeyMetakom: ibutton_text_store_set( - ibutton, - "writing\n%02X %02X %02X %02X", - key_data[0], - key_data[1], - key_data[2], - key_data[3]); - line_count = 2; + ibutton, "%02X %02X %02X %02X", key_data[0], key_data[1], key_data[2], key_data[3]); break; } } - switch(line_count) { - case 3: - popup_set_header(popup, "iButton", 82, 18, AlignCenter, AlignBottom); - popup_set_text(popup, ibutton->text_store, 82, 22, AlignCenter, AlignTop); - break; + widget_add_string_multiline_element( + widget, 90, 10, AlignCenter, AlignTop, FontPrimary, "iButton\nwriting"); + widget_add_icon_element(widget, 3, 10, &I_iButtonKey_49x44); + widget_add_text_box_element( + widget, 54, 39, 75, 22, AlignCenter, AlignCenter, ibutton->text_store, true); - default: - popup_set_header(popup, "iButton", 82, 24, AlignCenter, AlignBottom); - popup_set_text(popup, ibutton->text_store, 82, 28, AlignCenter, AlignTop); - break; - } - - popup_set_icon(popup, 2, 10, &I_iButtonKey_49x44); - - view_dispatcher_switch_to_view(ibutton->view_dispatcher, iButtonViewPopup); + view_dispatcher_switch_to_view(ibutton->view_dispatcher, iButtonViewWidget); ibutton_worker_write_set_callback(worker, ibutton_scene_write_callback, ibutton); ibutton_worker_write_start(worker, key); @@ -114,11 +95,8 @@ bool ibutton_scene_write_on_event(void* context, SceneManagerEvent event) { void ibutton_scene_write_on_exit(void* context) { iButton* ibutton = context; - Popup* popup = ibutton->popup; ibutton_worker_stop(ibutton->key_worker); - popup_set_header(popup, NULL, 0, 0, AlignCenter, AlignBottom); - popup_set_text(popup, NULL, 0, 0, AlignCenter, AlignTop); - popup_set_icon(popup, 0, 0, NULL); + widget_reset(ibutton->widget); ibutton_notification_message(ibutton, iButtonNotificationMessageBlinkStop); } diff --git a/applications/main/subghz/scenes/subghz_scene_frequency_analyzer.c b/applications/main/subghz/scenes/subghz_scene_frequency_analyzer.c index a78fccd3f..1f1957e32 100644 --- a/applications/main/subghz/scenes/subghz_scene_frequency_analyzer.c +++ b/applications/main/subghz/scenes/subghz_scene_frequency_analyzer.c @@ -1,6 +1,8 @@ #include "../subghz_i.h" #include +#define TAG "SubGhzSceneFrequencyAnalyzer" + void subghz_scene_frequency_analyzer_callback(SubGhzCustomEvent event, void* context) { furi_assert(context); SubGhz* subghz = context; @@ -17,16 +19,24 @@ void subghz_scene_frequency_analyzer_on_enter(void* context) { bool subghz_scene_frequency_analyzer_on_event(void* context, SceneManagerEvent event) { SubGhz* subghz = context; - if(event.type == SceneManagerEventTypeCustom && - event.event == SubGhzCustomEventViewReceiverOK) { - uint32_t frequency = - subghz_frequency_analyzer_get_frequency_to_save(subghz->subghz_frequency_analyzer); - if(frequency > 0) { - subghz->last_settings->frequency = frequency; - subghz_last_settings_save(subghz->last_settings); - } + if(event.type == SceneManagerEventTypeCustom) { + if(event.event == SubGhzCustomEventViewReceiverOK) { + uint32_t frequency = + subghz_frequency_analyzer_get_frequency_to_save(subghz->subghz_frequency_analyzer); + if(frequency > 0) { + subghz->last_settings->frequency = frequency; + subghz_last_settings_save(subghz->last_settings); + } - return true; + return true; + } else if(event.event == SubGhzCustomEventViewReceiverUnlock) { + // Don't need to save, we already saved on short event +#if FURI_DEBUG + FURI_LOG_W(TAG, "Goto next scene!"); +#endif + scene_manager_next_scene(subghz->scene_manager, SubGhzSceneReceiver); + return true; + } } return false; } diff --git a/applications/main/subghz/views/subghz_frequency_analyzer.c b/applications/main/subghz/views/subghz_frequency_analyzer.c index 9900c32c9..98b3fe01d 100644 --- a/applications/main/subghz/views/subghz_frequency_analyzer.c +++ b/applications/main/subghz/views/subghz_frequency_analyzer.c @@ -40,13 +40,13 @@ static const NotificationSequence sequence_saved = { &message_vibro_off, NULL, }; -static const NotificationSequence sequence_not_saved = { - &message_blink_stop, - &message_green_255, - &message_blue_255, - &message_red_255, - NULL, -}; +//static const NotificationSequence sequence_not_saved = { +// &message_blink_stop, +// &message_green_255, +// &message_blue_255, +// &message_red_255, +// NULL, +//}; static const uint32_t subghz_frequency_list[] = { 300000000, 302757000, 303875000, 304250000, 307000000, 307500000, 307800000, @@ -255,7 +255,8 @@ bool subghz_frequency_analyzer_input(InputEvent* event, void* context) { need_redraw = true; } - if(event->type == InputTypeShort && event->key == InputKeyOk) { + if(event->key == InputKeyOk) { + bool updated = false; with_view_model( instance->view, (SubGhzFrequencyAnalyzerModel * model) { uint32_t prev_freq_to_save = model->frequency_to_save; @@ -282,14 +283,39 @@ bool subghz_frequency_analyzer_input(InputEvent* event, void* context) { #endif model->frequency_to_save = frequency_candidate; notification_message(instance->notifications, &sequence_saved); - instance->callback(SubGhzCustomEventViewReceiverOK, instance->context); - notification_message(instance->notifications, &sequence_hw_blink); - } else { - notification_message(instance->notifications, &sequence_not_saved); notification_message(instance->notifications, &sequence_hw_blink); + updated = true; } return true; }); + +#if FURI_DEBUG + FURI_LOG_I( + TAG, + "updated: %d, long: %d, type: %d", + updated, + (event->type == InputTypeLong), + event->type); +#endif + + if(updated) { + instance->callback(SubGhzCustomEventViewReceiverOK, instance->context); + } + + // First device receive short, then when user release button we get long + if(event->type == InputTypeLong) { +#if FURI_DEBUG + FURI_LOG_I(TAG, "Longpress!"); +#endif + // Stop blinking + notification_message(instance->notifications, &sequence_hw_blink_stop); + + // Stop worker + if(subghz_frequency_analyzer_worker_is_running(instance->worker)) { + subghz_frequency_analyzer_worker_stop(instance->worker); + } + instance->callback(SubGhzCustomEventViewReceiverUnlock, instance->context); + } } if(need_redraw) {