[FL-2700] Fix IR hangup with short signals (#1535)
* Do not use infrared worker callback for notifications * Remove tx callback * Port Infrared notifications to hardware blinker * Move all blink message definitions to notification_messages.h * Fix potential hangup after leaving debug scene
This commit is contained in:
		
							parent
							
								
									4460010e76
								
							
						
					
					
						commit
						8a370d70dc
					
				| @ -9,20 +9,6 @@ | |||||||
| 
 | 
 | ||||||
| #define TAG "iButtonApp" | #define TAG "iButtonApp" | ||||||
| 
 | 
 | ||||||
| static const NotificationSequence sequence_blink_start_cyan = { |  | ||||||
|     &message_blink_start_10, |  | ||||||
|     &message_blink_set_color_cyan, |  | ||||||
|     &message_do_not_reset, |  | ||||||
|     NULL, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| static const NotificationSequence sequence_blink_start_magenta = { |  | ||||||
|     &message_blink_start_10, |  | ||||||
|     &message_blink_set_color_magenta, |  | ||||||
|     &message_do_not_reset, |  | ||||||
|     NULL, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| static const NotificationSequence sequence_blink_set_yellow = { | static const NotificationSequence sequence_blink_set_yellow = { | ||||||
|     &message_blink_set_color_yellow, |     &message_blink_set_color_yellow, | ||||||
|     NULL, |     NULL, | ||||||
| @ -33,11 +19,6 @@ static const NotificationSequence sequence_blink_set_magenta = { | |||||||
|     NULL, |     NULL, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| static const NotificationSequence sequence_blink_stop = { |  | ||||||
|     &message_blink_stop, |  | ||||||
|     NULL, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| static const NotificationSequence* ibutton_notification_sequences[] = { | static const NotificationSequence* ibutton_notification_sequences[] = { | ||||||
|     &sequence_error, |     &sequence_error, | ||||||
|     &sequence_success, |     &sequence_success, | ||||||
|  | |||||||
| @ -7,10 +7,12 @@ static const NotificationSequence* infrared_notification_sequences[] = { | |||||||
|     &sequence_success, |     &sequence_success, | ||||||
|     &sequence_set_only_green_255, |     &sequence_set_only_green_255, | ||||||
|     &sequence_reset_green, |     &sequence_reset_green, | ||||||
|     &sequence_blink_cyan_10, |  | ||||||
|     &sequence_blink_magenta_10, |  | ||||||
|     &sequence_solid_yellow, |     &sequence_solid_yellow, | ||||||
|     &sequence_reset_rgb}; |     &sequence_reset_rgb, | ||||||
|  |     &sequence_blink_start_cyan, | ||||||
|  |     &sequence_blink_start_magenta, | ||||||
|  |     &sequence_blink_stop, | ||||||
|  | }; | ||||||
| 
 | 
 | ||||||
| static void infrared_make_app_folder(Infrared* infrared) { | static void infrared_make_app_folder(Infrared* infrared) { | ||||||
|     if(!storage_simply_mkdir(infrared->storage, INFRARED_APP_FOLDER)) { |     if(!storage_simply_mkdir(infrared->storage, INFRARED_APP_FOLDER)) { | ||||||
| @ -301,6 +303,7 @@ void infrared_tx_start_signal(Infrared* infrared, InfraredSignal* signal) { | |||||||
| 
 | 
 | ||||||
|     DOLPHIN_DEED(DolphinDeedIrSend); |     DOLPHIN_DEED(DolphinDeedIrSend); | ||||||
|     infrared_worker_tx_start(infrared->worker); |     infrared_worker_tx_start(infrared->worker); | ||||||
|  |     infrared_play_notification_message(infrared, InfraredNotificationMessageBlinkStartSend); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void infrared_tx_start_button_index(Infrared* infrared, size_t button_index) { | void infrared_tx_start_button_index(Infrared* infrared, size_t button_index) { | ||||||
| @ -310,14 +313,17 @@ void infrared_tx_start_button_index(Infrared* infrared, size_t button_index) { | |||||||
|     InfraredSignal* signal = infrared_remote_button_get_signal(button); |     InfraredSignal* signal = infrared_remote_button_get_signal(button); | ||||||
| 
 | 
 | ||||||
|     infrared_tx_start_signal(infrared, signal); |     infrared_tx_start_signal(infrared, signal); | ||||||
|  |     infrared_play_notification_message(infrared, InfraredNotificationMessageBlinkStartSend); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void infrared_tx_start_received(Infrared* infrared) { | void infrared_tx_start_received(Infrared* infrared) { | ||||||
|     infrared_tx_start_signal(infrared, infrared->received_signal); |     infrared_tx_start_signal(infrared, infrared->received_signal); | ||||||
|  |     infrared_play_notification_message(infrared, InfraredNotificationMessageBlinkStartSend); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void infrared_tx_stop(Infrared* infrared) { | void infrared_tx_stop(Infrared* infrared) { | ||||||
|     infrared_worker_tx_stop(infrared->worker); |     infrared_worker_tx_stop(infrared->worker); | ||||||
|  |     infrared_play_notification_message(infrared, InfraredNotificationMessageBlinkStop); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void infrared_text_store_set(Infrared* infrared, uint32_t bank, const char* text, ...) { | void infrared_text_store_set(Infrared* infrared, uint32_t bank, const char* text, ...) { | ||||||
| @ -354,12 +360,6 @@ void infrared_show_loading_popup(Infrared* infrared, bool show) { | |||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void infrared_signal_sent_callback(void* context) { |  | ||||||
|     furi_assert(context); |  | ||||||
|     Infrared* infrared = context; |  | ||||||
|     infrared_play_notification_message(infrared, InfraredNotificationMessageBlinkSend); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void infrared_signal_received_callback(void* context, InfraredWorkerSignal* received_signal) { | void infrared_signal_received_callback(void* context, InfraredWorkerSignal* received_signal) { | ||||||
|     furi_assert(context); |     furi_assert(context); | ||||||
|     Infrared* infrared = context; |     Infrared* infrared = context; | ||||||
|  | |||||||
| @ -115,10 +115,11 @@ typedef enum { | |||||||
|     InfraredNotificationMessageSuccess, |     InfraredNotificationMessageSuccess, | ||||||
|     InfraredNotificationMessageGreenOn, |     InfraredNotificationMessageGreenOn, | ||||||
|     InfraredNotificationMessageGreenOff, |     InfraredNotificationMessageGreenOff, | ||||||
|     InfraredNotificationMessageBlinkRead, |  | ||||||
|     InfraredNotificationMessageBlinkSend, |  | ||||||
|     InfraredNotificationMessageYellowOn, |     InfraredNotificationMessageYellowOn, | ||||||
|     InfraredNotificationMessageYellowOff, |     InfraredNotificationMessageYellowOff, | ||||||
|  |     InfraredNotificationMessageBlinkStartRead, | ||||||
|  |     InfraredNotificationMessageBlinkStartSend, | ||||||
|  |     InfraredNotificationMessageBlinkStop, | ||||||
| } InfraredNotificationMessage; | } InfraredNotificationMessage; | ||||||
| 
 | 
 | ||||||
| bool infrared_add_remote_with_button(Infrared* infrared, const char* name, InfraredSignal* signal); | bool infrared_add_remote_with_button(Infrared* infrared, const char* name, InfraredSignal* signal); | ||||||
| @ -132,7 +133,6 @@ void infrared_text_store_clear(Infrared* infrared, uint32_t bank); | |||||||
| void infrared_play_notification_message(Infrared* infrared, uint32_t message); | void infrared_play_notification_message(Infrared* infrared, uint32_t message); | ||||||
| void infrared_show_loading_popup(Infrared* infrared, bool show); | void infrared_show_loading_popup(Infrared* infrared, bool show); | ||||||
| 
 | 
 | ||||||
| void infrared_signal_sent_callback(void* context); |  | ||||||
| void infrared_signal_received_callback(void* context, InfraredWorkerSignal* received_signal); | void infrared_signal_received_callback(void* context, InfraredWorkerSignal* received_signal); | ||||||
| void infrared_text_input_callback(void* context); | void infrared_text_input_callback(void* context); | ||||||
| void infrared_popup_closed_callback(void* context); | void infrared_popup_closed_callback(void* context); | ||||||
|  | |||||||
| @ -21,12 +21,14 @@ static void infrared_scene_universal_common_show_popup(Infrared* infrared, uint3 | |||||||
|     infrared_progress_view_set_back_callback( |     infrared_progress_view_set_back_callback( | ||||||
|         progress, infrared_scene_universal_common_progress_back_callback, infrared); |         progress, infrared_scene_universal_common_progress_back_callback, infrared); | ||||||
|     view_stack_add_view(view_stack, infrared_progress_view_get_view(progress)); |     view_stack_add_view(view_stack, infrared_progress_view_get_view(progress)); | ||||||
|  |     infrared_play_notification_message(infrared, InfraredNotificationMessageBlinkStartSend); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void infrared_scene_universal_common_hide_popup(Infrared* infrared) { | static void infrared_scene_universal_common_hide_popup(Infrared* infrared) { | ||||||
|     ViewStack* view_stack = infrared->view_stack; |     ViewStack* view_stack = infrared->view_stack; | ||||||
|     InfraredProgressView* progress = infrared->progress; |     InfraredProgressView* progress = infrared->progress; | ||||||
|     view_stack_remove_view(view_stack, infrared_progress_view_get_view(progress)); |     view_stack_remove_view(view_stack, infrared_progress_view_get_view(progress)); | ||||||
|  |     infrared_play_notification_message(infrared, InfraredNotificationMessageBlinkStop); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void infrared_scene_universal_common_on_enter(void* context) { | void infrared_scene_universal_common_on_enter(void* context) { | ||||||
| @ -42,7 +44,6 @@ bool infrared_scene_universal_common_on_event(void* context, SceneManagerEvent e | |||||||
| 
 | 
 | ||||||
|     if(infrared_brute_force_is_started(brute_force)) { |     if(infrared_brute_force_is_started(brute_force)) { | ||||||
|         if(event.type == SceneManagerEventTypeTick) { |         if(event.type == SceneManagerEventTypeTick) { | ||||||
|             infrared_play_notification_message(infrared, InfraredNotificationMessageBlinkSend); |  | ||||||
|             bool success = infrared_brute_force_send_next(brute_force); |             bool success = infrared_brute_force_send_next(brute_force); | ||||||
|             if(success) { |             if(success) { | ||||||
|                 success = infrared_progress_view_increase_progress(infrared->progress); |                 success = infrared_progress_view_increase_progress(infrared->progress); | ||||||
| @ -71,8 +72,6 @@ bool infrared_scene_universal_common_on_event(void* context, SceneManagerEvent e | |||||||
|                        brute_force, infrared_custom_event_get_value(event.event), &record_count)) { |                        brute_force, infrared_custom_event_get_value(event.event), &record_count)) { | ||||||
|                     DOLPHIN_DEED(DolphinDeedIrBruteForce); |                     DOLPHIN_DEED(DolphinDeedIrBruteForce); | ||||||
|                     infrared_scene_universal_common_show_popup(infrared, record_count); |                     infrared_scene_universal_common_show_popup(infrared, record_count); | ||||||
|                     infrared_play_notification_message( |  | ||||||
|                         infrared, InfraredNotificationMessageBlinkSend); |  | ||||||
|                 } else { |                 } else { | ||||||
|                     scene_manager_next_scene(scene_manager, InfraredSceneErrorDatabases); |                     scene_manager_next_scene(scene_manager, InfraredSceneErrorDatabases); | ||||||
|                 } |                 } | ||||||
|  | |||||||
| @ -65,4 +65,5 @@ void infrared_scene_debug_on_exit(void* context) { | |||||||
|     InfraredWorker* worker = infrared->worker; |     InfraredWorker* worker = infrared->worker; | ||||||
|     infrared_worker_rx_stop(worker); |     infrared_worker_rx_stop(worker); | ||||||
|     infrared_worker_rx_enable_blink_on_receiving(worker, false); |     infrared_worker_rx_enable_blink_on_receiving(worker, false); | ||||||
|  |     infrared_worker_rx_set_received_signal_callback(worker, NULL, NULL); | ||||||
| } | } | ||||||
|  | |||||||
| @ -8,6 +8,7 @@ void infrared_scene_learn_on_enter(void* context) { | |||||||
|     infrared_worker_rx_set_received_signal_callback( |     infrared_worker_rx_set_received_signal_callback( | ||||||
|         worker, infrared_signal_received_callback, context); |         worker, infrared_signal_received_callback, context); | ||||||
|     infrared_worker_rx_start(worker); |     infrared_worker_rx_start(worker); | ||||||
|  |     infrared_play_notification_message(infrared, InfraredNotificationMessageBlinkStartRead); | ||||||
| 
 | 
 | ||||||
|     popup_set_icon(popup, 0, 32, &I_InfraredLearnShort_128x31); |     popup_set_icon(popup, 0, 32, &I_InfraredLearnShort_128x31); | ||||||
|     popup_set_header(popup, NULL, 0, 0, AlignCenter, AlignCenter); |     popup_set_header(popup, NULL, 0, 0, AlignCenter, AlignCenter); | ||||||
| @ -22,10 +23,7 @@ bool infrared_scene_learn_on_event(void* context, SceneManagerEvent event) { | |||||||
|     Infrared* infrared = context; |     Infrared* infrared = context; | ||||||
|     bool consumed = false; |     bool consumed = false; | ||||||
| 
 | 
 | ||||||
|     if(event.type == SceneManagerEventTypeTick) { |     if(event.type == SceneManagerEventTypeCustom) { | ||||||
|         infrared_play_notification_message(infrared, InfraredNotificationMessageBlinkRead); |  | ||||||
|         consumed = true; |  | ||||||
|     } else if(event.type == SceneManagerEventTypeCustom) { |  | ||||||
|         if(event.event == InfraredCustomEventTypeSignalReceived) { |         if(event.event == InfraredCustomEventTypeSignalReceived) { | ||||||
|             infrared_worker_rx_set_received_signal_callback(infrared->worker, NULL, NULL); |             infrared_worker_rx_set_received_signal_callback(infrared->worker, NULL, NULL); | ||||||
|             infrared_play_notification_message(infrared, InfraredNotificationMessageSuccess); |             infrared_play_notification_message(infrared, InfraredNotificationMessageSuccess); | ||||||
| @ -41,6 +39,7 @@ void infrared_scene_learn_on_exit(void* context) { | |||||||
|     Infrared* infrared = context; |     Infrared* infrared = context; | ||||||
|     Popup* popup = infrared->popup; |     Popup* popup = infrared->popup; | ||||||
|     infrared_worker_rx_stop(infrared->worker); |     infrared_worker_rx_stop(infrared->worker); | ||||||
|  |     infrared_play_notification_message(infrared, InfraredNotificationMessageBlinkStop); | ||||||
|     popup_set_icon(popup, 0, 0, NULL); |     popup_set_icon(popup, 0, 0, NULL); | ||||||
|     popup_set_text(popup, NULL, 0, 0, AlignCenter, AlignCenter); |     popup_set_text(popup, NULL, 0, 0, AlignCenter, AlignCenter); | ||||||
| } | } | ||||||
|  | |||||||
| @ -23,8 +23,6 @@ void infrared_scene_learn_success_on_enter(void* context) { | |||||||
| 
 | 
 | ||||||
|     infrared_worker_tx_set_get_signal_callback( |     infrared_worker_tx_set_get_signal_callback( | ||||||
|         infrared->worker, infrared_worker_tx_get_signal_steady_callback, context); |         infrared->worker, infrared_worker_tx_get_signal_steady_callback, context); | ||||||
|     infrared_worker_tx_set_signal_sent_callback( |  | ||||||
|         infrared->worker, infrared_signal_sent_callback, context); |  | ||||||
| 
 | 
 | ||||||
|     if(infrared_signal_is_raw(signal)) { |     if(infrared_signal_is_raw(signal)) { | ||||||
|         InfraredRawSignal* raw = infrared_signal_get_raw_signal(signal); |         InfraredRawSignal* raw = infrared_signal_get_raw_signal(signal); | ||||||
| @ -104,6 +102,8 @@ bool infrared_scene_learn_success_on_event(void* context, SceneManagerEvent even | |||||||
|                     InfraredSceneLearnSuccess, |                     InfraredSceneLearnSuccess, | ||||||
|                     InfraredSceneLearnSuccessStateSending); |                     InfraredSceneLearnSuccessStateSending); | ||||||
|                 infrared_tx_start_received(infrared); |                 infrared_tx_start_received(infrared); | ||||||
|  |                 infrared_play_notification_message( | ||||||
|  |                     infrared, InfraredNotificationMessageBlinkStartSend); | ||||||
|             } |             } | ||||||
|             consumed = true; |             consumed = true; | ||||||
|         } else if(event.event == DialogExReleaseCenter) { |         } else if(event.event == DialogExReleaseCenter) { | ||||||
| @ -111,6 +111,7 @@ bool infrared_scene_learn_success_on_event(void* context, SceneManagerEvent even | |||||||
|                 scene_manager_set_scene_state( |                 scene_manager_set_scene_state( | ||||||
|                     scene_manager, InfraredSceneLearnSuccess, InfraredSceneLearnSuccessStateIdle); |                     scene_manager, InfraredSceneLearnSuccess, InfraredSceneLearnSuccessStateIdle); | ||||||
|                 infrared_tx_stop(infrared); |                 infrared_tx_stop(infrared); | ||||||
|  |                 infrared_play_notification_message(infrared, InfraredNotificationMessageBlinkStop); | ||||||
|                 infrared_play_notification_message(infrared, InfraredNotificationMessageGreenOff); |                 infrared_play_notification_message(infrared, InfraredNotificationMessageGreenOff); | ||||||
|             } |             } | ||||||
|             consumed = true; |             consumed = true; | ||||||
| @ -124,7 +125,7 @@ void infrared_scene_learn_success_on_exit(void* context) { | |||||||
|     Infrared* infrared = context; |     Infrared* infrared = context; | ||||||
|     InfraredWorker* worker = infrared->worker; |     InfraredWorker* worker = infrared->worker; | ||||||
|     dialog_ex_reset(infrared->dialog_ex); |     dialog_ex_reset(infrared->dialog_ex); | ||||||
|  |     infrared_play_notification_message(infrared, InfraredNotificationMessageBlinkStop); | ||||||
|     infrared_play_notification_message(infrared, InfraredNotificationMessageGreenOff); |     infrared_play_notification_message(infrared, InfraredNotificationMessageGreenOff); | ||||||
|     infrared_worker_tx_set_get_signal_callback(worker, NULL, NULL); |     infrared_worker_tx_set_get_signal_callback(worker, NULL, NULL); | ||||||
|     infrared_worker_tx_set_signal_sent_callback(worker, NULL, NULL); |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -33,8 +33,6 @@ void infrared_scene_remote_on_enter(void* context) { | |||||||
| 
 | 
 | ||||||
|     infrared_worker_tx_set_get_signal_callback( |     infrared_worker_tx_set_get_signal_callback( | ||||||
|         infrared->worker, infrared_worker_tx_get_signal_steady_callback, infrared); |         infrared->worker, infrared_worker_tx_get_signal_steady_callback, infrared); | ||||||
|     infrared_worker_tx_set_signal_sent_callback( |  | ||||||
|         infrared->worker, infrared_signal_sent_callback, infrared); |  | ||||||
| 
 | 
 | ||||||
|     size_t button_count = infrared_remote_get_button_count(remote); |     size_t button_count = infrared_remote_get_button_count(remote); | ||||||
|     for(size_t i = 0; i < button_count; ++i) { |     for(size_t i = 0; i < button_count; ++i) { | ||||||
| @ -112,7 +110,7 @@ bool infrared_scene_remote_on_event(void* context, SceneManagerEvent event) { | |||||||
| 
 | 
 | ||||||
| void infrared_scene_remote_on_exit(void* context) { | void infrared_scene_remote_on_exit(void* context) { | ||||||
|     Infrared* infrared = context; |     Infrared* infrared = context; | ||||||
|  |     infrared_tx_stop(infrared); | ||||||
|     infrared_worker_tx_set_get_signal_callback(infrared->worker, NULL, NULL); |     infrared_worker_tx_set_get_signal_callback(infrared->worker, NULL, NULL); | ||||||
|     infrared_worker_tx_set_signal_sent_callback(infrared->worker, NULL, NULL); |  | ||||||
|     button_menu_reset(infrared->button_menu); |     button_menu_reset(infrared->button_menu); | ||||||
| } | } | ||||||
|  | |||||||
| @ -36,8 +36,6 @@ bool infrared_scene_rpc_on_event(void* context, SceneManagerEvent event) { | |||||||
|                 result = infrared_remote_load(infrared->remote, infrared->file_path); |                 result = infrared_remote_load(infrared->remote, infrared->file_path); | ||||||
|                 infrared_worker_tx_set_get_signal_callback( |                 infrared_worker_tx_set_get_signal_callback( | ||||||
|                     infrared->worker, infrared_worker_tx_get_signal_steady_callback, infrared); |                     infrared->worker, infrared_worker_tx_get_signal_steady_callback, infrared); | ||||||
|                 infrared_worker_tx_set_signal_sent_callback( |  | ||||||
|                     infrared->worker, infrared_signal_sent_callback, infrared); |  | ||||||
|             } |             } | ||||||
|             const char* remote_name = infrared_remote_get_name(infrared->remote); |             const char* remote_name = infrared_remote_get_name(infrared->remote); | ||||||
| 
 | 
 | ||||||
| @ -74,5 +72,6 @@ bool infrared_scene_rpc_on_event(void* context, SceneManagerEvent event) { | |||||||
| 
 | 
 | ||||||
| void infrared_scene_rpc_on_exit(void* context) { | void infrared_scene_rpc_on_exit(void* context) { | ||||||
|     Infrared* infrared = context; |     Infrared* infrared = context; | ||||||
|  |     infrared_tx_stop(infrared); | ||||||
|     popup_reset(infrared->popup); |     popup_reset(infrared->popup); | ||||||
| } | } | ||||||
|  | |||||||
| @ -2,18 +2,6 @@ | |||||||
| #include <core/common_defines.h> | #include <core/common_defines.h> | ||||||
| #include <dolphin/dolphin.h> | #include <dolphin/dolphin.h> | ||||||
| 
 | 
 | ||||||
| static const NotificationSequence sequence_blink_start_magenta = { |  | ||||||
|     &message_blink_start_10, |  | ||||||
|     &message_blink_set_color_magenta, |  | ||||||
|     &message_do_not_reset, |  | ||||||
|     NULL, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| static const NotificationSequence sequence_blink_stop = { |  | ||||||
|     &message_blink_stop, |  | ||||||
|     NULL, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| void LfRfidAppSceneEmulate::on_enter(LfRfidApp* app, bool /* need_restore */) { | void LfRfidAppSceneEmulate::on_enter(LfRfidApp* app, bool /* need_restore */) { | ||||||
|     string_init(data_string); |     string_init(data_string); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -3,18 +3,6 @@ | |||||||
| #include <dolphin/dolphin.h> | #include <dolphin/dolphin.h> | ||||||
| #include <rpc/rpc_app.h> | #include <rpc/rpc_app.h> | ||||||
| 
 | 
 | ||||||
| static const NotificationSequence sequence_blink_start_magenta = { |  | ||||||
|     &message_blink_start_10, |  | ||||||
|     &message_blink_set_color_magenta, |  | ||||||
|     &message_do_not_reset, |  | ||||||
|     NULL, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| static const NotificationSequence sequence_blink_stop = { |  | ||||||
|     &message_blink_stop, |  | ||||||
|     NULL, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| void LfRfidAppSceneRpc::on_enter(LfRfidApp* app, bool /* need_restore */) { | void LfRfidAppSceneRpc::on_enter(LfRfidApp* app, bool /* need_restore */) { | ||||||
|     auto popup = app->view_controller.get<PopupVM>(); |     auto popup = app->view_controller.get<PopupVM>(); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -199,18 +199,6 @@ void nfc_text_store_clear(Nfc* nfc) { | |||||||
|     memset(nfc->text_store, 0, sizeof(nfc->text_store)); |     memset(nfc->text_store, 0, sizeof(nfc->text_store)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static const NotificationSequence sequence_blink_start_blue = { |  | ||||||
|     &message_blink_start_10, |  | ||||||
|     &message_blink_set_color_blue, |  | ||||||
|     &message_do_not_reset, |  | ||||||
|     NULL, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| static const NotificationSequence sequence_blink_stop = { |  | ||||||
|     &message_blink_stop, |  | ||||||
|     NULL, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| void nfc_blink_start(Nfc* nfc) { | void nfc_blink_start(Nfc* nfc) { | ||||||
|     notification_message(nfc->notifications, &sequence_blink_start_blue); |     notification_message(nfc->notifications, &sequence_blink_start_blue); | ||||||
| } | } | ||||||
|  | |||||||
| @ -431,6 +431,54 @@ const NotificationSequence sequence_blink_white_100 = { | |||||||
|     NULL, |     NULL, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | // Hardware blink
 | ||||||
|  | const NotificationSequence sequence_blink_start_blue = { | ||||||
|  |     &message_blink_start_10, | ||||||
|  |     &message_blink_set_color_blue, | ||||||
|  |     &message_do_not_reset, | ||||||
|  |     NULL, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | const NotificationSequence sequence_blink_start_red = { | ||||||
|  |     &message_blink_start_10, | ||||||
|  |     &message_blink_set_color_red, | ||||||
|  |     &message_do_not_reset, | ||||||
|  |     NULL, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | const NotificationSequence sequence_blink_start_green = { | ||||||
|  |     &message_blink_start_10, | ||||||
|  |     &message_blink_set_color_green, | ||||||
|  |     &message_do_not_reset, | ||||||
|  |     NULL, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | const NotificationSequence sequence_blink_start_yellow = { | ||||||
|  |     &message_blink_start_10, | ||||||
|  |     &message_blink_set_color_yellow, | ||||||
|  |     &message_do_not_reset, | ||||||
|  |     NULL, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | const NotificationSequence sequence_blink_start_cyan = { | ||||||
|  |     &message_blink_start_10, | ||||||
|  |     &message_blink_set_color_cyan, | ||||||
|  |     &message_do_not_reset, | ||||||
|  |     NULL, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | const NotificationSequence sequence_blink_start_magenta = { | ||||||
|  |     &message_blink_start_10, | ||||||
|  |     &message_blink_set_color_magenta, | ||||||
|  |     &message_do_not_reset, | ||||||
|  |     NULL, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | const NotificationSequence sequence_blink_stop = { | ||||||
|  |     &message_blink_stop, | ||||||
|  |     NULL, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| //General
 | //General
 | ||||||
| const NotificationSequence sequence_single_vibro = { | const NotificationSequence sequence_single_vibro = { | ||||||
|     &message_vibro_on, |     &message_vibro_on, | ||||||
|  | |||||||
| @ -122,6 +122,15 @@ extern const NotificationSequence sequence_blink_cyan_100; | |||||||
| extern const NotificationSequence sequence_blink_magenta_100; | extern const NotificationSequence sequence_blink_magenta_100; | ||||||
| extern const NotificationSequence sequence_blink_white_100; | extern const NotificationSequence sequence_blink_white_100; | ||||||
| 
 | 
 | ||||||
|  | // Hardware blink
 | ||||||
|  | extern const NotificationSequence sequence_blink_start_blue; | ||||||
|  | extern const NotificationSequence sequence_blink_start_red; | ||||||
|  | extern const NotificationSequence sequence_blink_start_green; | ||||||
|  | extern const NotificationSequence sequence_blink_start_yellow; | ||||||
|  | extern const NotificationSequence sequence_blink_start_cyan; | ||||||
|  | extern const NotificationSequence sequence_blink_start_magenta; | ||||||
|  | extern const NotificationSequence sequence_blink_stop; | ||||||
|  | 
 | ||||||
| // General
 | // General
 | ||||||
| extern const NotificationSequence sequence_single_vibro; | extern const NotificationSequence sequence_single_vibro; | ||||||
| extern const NotificationSequence sequence_double_vibro; | extern const NotificationSequence sequence_double_vibro; | ||||||
|  | |||||||
| @ -5,18 +5,6 @@ | |||||||
| #include "subghz_i.h" | #include "subghz_i.h" | ||||||
| #include <lib/toolbox/path.h> | #include <lib/toolbox/path.h> | ||||||
| 
 | 
 | ||||||
| static const NotificationSequence sequence_blink_start_magenta = { |  | ||||||
|     &message_blink_start_10, |  | ||||||
|     &message_blink_set_color_magenta, |  | ||||||
|     &message_do_not_reset, |  | ||||||
|     NULL, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| static const NotificationSequence sequence_blink_stop = { |  | ||||||
|     &message_blink_stop, |  | ||||||
|     NULL, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| bool subghz_custom_event_callback(void* context, uint32_t event) { | bool subghz_custom_event_callback(void* context, uint32_t event) { | ||||||
|     furi_assert(context); |     furi_assert(context); | ||||||
|     SubGhz* subghz = context; |     SubGhz* subghz = context; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Georgii Surkov
						Georgii Surkov