Nikolay Minaylov 3 лет назад
Родитель
Сommit
47acf24801

+ 34 - 3
applications/ibutton/ibutton.c

@@ -6,16 +6,47 @@
 #include <toolbox/path.h>
 #include <flipper_format/flipper_format.h>
 
+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 = {
+    &message_blink_set_color_yellow,
+    NULL,
+};
+
+static const NotificationSequence sequence_blink_set_magenta = {
+    &message_blink_set_color_magenta,
+    NULL,
+};
+
+static const NotificationSequence sequence_blink_stop = {
+    &message_blink_stop,
+    NULL,
+};
+
 static const NotificationSequence* ibutton_notification_sequences[] = {
     &sequence_error,
     &sequence_success,
-    &sequence_blink_cyan_10,
-    &sequence_blink_magenta_10,
-    &sequence_blink_yellow_10,
+    &sequence_blink_start_cyan,
+    &sequence_blink_start_magenta,
+    &sequence_blink_set_yellow,
+    &sequence_blink_set_magenta,
     &sequence_set_red_255,
     &sequence_reset_red,
     &sequence_set_green_255,
     &sequence_reset_green,
+    &sequence_blink_stop,
 };
 
 static void ibutton_make_app_folder(iButton* ibutton) {

+ 4 - 2
applications/ibutton/ibutton_i.h

@@ -64,13 +64,15 @@ typedef enum {
 typedef enum {
     iButtonNotificationMessageError,
     iButtonNotificationMessageSuccess,
-    iButtonNotificationMessageRead,
-    iButtonNotificationMessageEmulate,
+    iButtonNotificationMessageReadStart,
+    iButtonNotificationMessageEmulateStart,
     iButtonNotificationMessageYellowBlink,
+    iButtonNotificationMessageEmulateBlink,
     iButtonNotificationMessageRedOn,
     iButtonNotificationMessageRedOff,
     iButtonNotificationMessageGreenOn,
     iButtonNotificationMessageGreenOff,
+    iButtonNotificationMessageBlinkStop,
 } iButtonNotificationMessage;
 
 bool ibutton_file_select(iButton* ibutton);

+ 4 - 1
applications/ibutton/scenes/ibutton_scene_emulate.c

@@ -1,4 +1,5 @@
 #include "../ibutton_i.h"
+#include "furi/log.h"
 #include <dolphin/dolphin.h>
 #include <toolbox/path.h>
 
@@ -85,6 +86,8 @@ void ibutton_scene_emulate_on_enter(void* context) {
     ibutton_worker_emulate_start(ibutton->key_worker, key);
 
     string_clear(key_name);
+
+    ibutton_notification_message(ibutton, iButtonNotificationMessageEmulateStart);
 }
 
 bool ibutton_scene_emulate_on_event(void* context, SceneManagerEvent event) {
@@ -93,7 +96,6 @@ bool ibutton_scene_emulate_on_event(void* context, SceneManagerEvent event) {
 
     if(event.type == SceneManagerEventTypeTick) {
         consumed = true;
-        ibutton_notification_message(ibutton, iButtonNotificationMessageEmulate);
     } else if(event.type == SceneManagerEventTypeCustom) {
         consumed = true;
         if(event.event == iButtonCustomEventWorkerEmulated) {
@@ -111,4 +113,5 @@ void ibutton_scene_emulate_on_exit(void* context) {
     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);
+    ibutton_notification_message(ibutton, iButtonNotificationMessageBlinkStop);
 }

+ 4 - 1
applications/ibutton/scenes/ibutton_scene_read.c

@@ -22,6 +22,8 @@ void ibutton_scene_read_on_enter(void* context) {
 
     ibutton_worker_read_set_callback(worker, ibutton_scene_read_callback, ibutton);
     ibutton_worker_read_start(worker, key);
+
+    ibutton_notification_message(ibutton, iButtonNotificationMessageReadStart);
 }
 
 bool ibutton_scene_read_on_event(void* context, SceneManagerEvent event) {
@@ -31,7 +33,6 @@ bool ibutton_scene_read_on_event(void* context, SceneManagerEvent event) {
 
     if(event.type == SceneManagerEventTypeTick) {
         consumed = true;
-        ibutton_notification_message(ibutton, iButtonNotificationMessageRead);
     } else if(event.type == SceneManagerEventTypeCustom) {
         consumed = true;
         if(event.event == iButtonCustomEventWorkerRead) {
@@ -69,4 +70,6 @@ void ibutton_scene_read_on_exit(void* context) {
     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);
+
+    ibutton_notification_message(ibutton, iButtonNotificationMessageBlinkStop);
 }

+ 6 - 12
applications/ibutton/scenes/ibutton_scene_write.c

@@ -80,14 +80,14 @@ void ibutton_scene_write_on_enter(void* context) {
 
     popup_set_icon(popup, 2, 10, &I_iButtonKey_49x44);
 
-    scene_manager_set_scene_state(
-        ibutton->scene_manager, iButtonSceneWrite, iButtonSceneWriteStateDefault);
     view_dispatcher_switch_to_view(ibutton->view_dispatcher, iButtonViewPopup);
 
     ibutton_worker_write_set_callback(worker, ibutton_scene_write_callback, ibutton);
     ibutton_worker_write_start(worker, key);
 
     string_clear(key_name);
+
+    ibutton_notification_message(ibutton, iButtonNotificationMessageEmulateStart);
 }
 
 bool ibutton_scene_write_on_event(void* context, SceneManagerEvent event) {
@@ -100,21 +100,13 @@ bool ibutton_scene_write_on_event(void* context, SceneManagerEvent event) {
         if((event.event == iButtonWorkerWriteOK) || (event.event == iButtonWorkerWriteSameKey)) {
             scene_manager_next_scene(scene_manager, iButtonSceneWriteSuccess);
         } else if(event.event == iButtonWorkerWriteNoDetect) {
-            scene_manager_set_scene_state(
-                scene_manager, iButtonSceneWrite, iButtonSceneWriteStateDefault);
+            ibutton_notification_message(ibutton, iButtonNotificationMessageEmulateBlink);
         } else if(event.event == iButtonWorkerWriteCannotWrite) {
-            scene_manager_set_scene_state(
-                scene_manager, iButtonSceneWrite, iButtonSceneWriteStateBlinkYellow);
+            ibutton_notification_message(ibutton, iButtonNotificationMessageYellowBlink);
         }
 
     } else if(event.type == SceneManagerEventTypeTick) {
         consumed = true;
-        if(scene_manager_get_scene_state(scene_manager, iButtonSceneWrite) ==
-           iButtonSceneWriteStateBlinkYellow) {
-            ibutton_notification_message(ibutton, iButtonNotificationMessageYellowBlink);
-        } else {
-            ibutton_notification_message(ibutton, iButtonNotificationMessageEmulate);
-        }
     }
 
     return consumed;
@@ -127,4 +119,6 @@ void ibutton_scene_write_on_exit(void* context) {
     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);
+
+    ibutton_notification_message(ibutton, iButtonNotificationMessageBlinkStop);
 }

+ 18 - 5
applications/lfrfid/scene/lfrfid_app_scene_emulate.cpp

@@ -1,6 +1,19 @@
 #include "lfrfid_app_scene_emulate.h"
+#include "furi/common_defines.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 */) {
     string_init(data_string);
 
@@ -23,15 +36,14 @@ void LfRfidAppSceneEmulate::on_enter(LfRfidApp* app, bool /* need_restore */) {
 
     app->view_controller.switch_to<PopupVM>();
     app->worker.start_emulate();
+
+    notification_message(app->notification, &sequence_blink_start_magenta);
 }
 
 bool LfRfidAppSceneEmulate::on_event(LfRfidApp* app, LfRfidApp::Event* event) {
+    UNUSED(app);
+    UNUSED(event);
     bool consumed = false;
-
-    if(event->type == LfRfidApp::EventType::Tick) {
-        notification_message(app->notification, &sequence_blink_magenta_10);
-    }
-
     return consumed;
 }
 
@@ -39,4 +51,5 @@ void LfRfidAppSceneEmulate::on_exit(LfRfidApp* app) {
     app->view_controller.get<PopupVM>()->clean();
     app->worker.stop_emulate();
     string_clear(data_string);
+    notification_message(app->notification, &sequence_blink_stop);
 }

+ 20 - 0
applications/nfc/nfc.c

@@ -164,6 +164,26 @@ void nfc_text_store_clear(Nfc* nfc) {
     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) {
+    notification_message(nfc->notifications, &sequence_blink_start_blue);
+}
+
+void nfc_blink_stop(Nfc* nfc) {
+    notification_message(nfc->notifications, &sequence_blink_stop);
+}
+
 int32_t nfc_app(void* p) {
     Nfc* nfc = nfc_alloc();
     char* args = p;

+ 4 - 0
applications/nfc/nfc_i.h

@@ -76,3 +76,7 @@ int32_t nfc_task(void* p);
 void nfc_text_store_set(Nfc* nfc, const char* text, ...);
 
 void nfc_text_store_clear(Nfc* nfc);
+
+void nfc_blink_start(Nfc* nfc);
+
+void nfc_blink_stop(Nfc* nfc);

+ 7 - 7
applications/nfc/scenes/nfc_scene_emulate_apdu_sequence.c

@@ -1,4 +1,5 @@
 #include "../nfc_i.h"
+#include "furi/common_defines.h"
 
 void nfc_scene_emulate_apdu_sequence_on_enter(void* context) {
     Nfc* nfc = context;
@@ -10,17 +11,14 @@ void nfc_scene_emulate_apdu_sequence_on_enter(void* context) {
     // Setup and start worker
     view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewPopup);
     nfc_worker_start(nfc->worker, NfcWorkerStateEmulateApdu, &nfc->dev->dev_data, NULL, nfc);
+
+    nfc_blink_start(nfc);
 }
 
 bool nfc_scene_emulate_apdu_sequence_on_event(void* context, SceneManagerEvent event) {
-    Nfc* nfc = context;
+    UNUSED(context);
+    UNUSED(event);
     bool consumed = false;
-
-    if(event.type == SceneManagerEventTypeTick) {
-        notification_message(nfc->notifications, &sequence_blink_blue_10);
-        consumed = true;
-    }
-
     return consumed;
 }
 
@@ -31,4 +29,6 @@ void nfc_scene_emulate_apdu_sequence_on_exit(void* context) {
     nfc_worker_stop(nfc->worker);
     // Clear view
     popup_reset(nfc->popup);
+
+    nfc_blink_stop(nfc);
 }

+ 3 - 1
applications/nfc/scenes/nfc_scene_emulate_mifare_classic.c

@@ -32,6 +32,7 @@ void nfc_scene_emulate_mifare_classic_on_enter(void* context) {
         &nfc->dev->dev_data,
         nfc_emulate_mifare_classic_worker_callback,
         nfc);
+    nfc_blink_start(nfc);
 }
 
 bool nfc_scene_emulate_mifare_classic_on_event(void* context, SceneManagerEvent event) {
@@ -39,7 +40,6 @@ bool nfc_scene_emulate_mifare_classic_on_event(void* context, SceneManagerEvent
     bool consumed = false;
 
     if(event.type == SceneManagerEventTypeTick) {
-        notification_message(nfc->notifications, &sequence_blink_blue_10);
         consumed = true;
     } else if(event.type == SceneManagerEventTypeBack) {
         // Stop worker
@@ -61,4 +61,6 @@ void nfc_scene_emulate_mifare_classic_on_exit(void* context) {
 
     // Clear view
     popup_reset(nfc->popup);
+
+    nfc_blink_stop(nfc);
 }

+ 3 - 1
applications/nfc/scenes/nfc_scene_emulate_mifare_ul.c

@@ -32,6 +32,7 @@ void nfc_scene_emulate_mifare_ul_on_enter(void* context) {
         &nfc->dev->dev_data,
         nfc_emulate_mifare_ul_worker_callback,
         nfc);
+    nfc_blink_start(nfc);
 }
 
 bool nfc_scene_emulate_mifare_ul_on_event(void* context, SceneManagerEvent event) {
@@ -39,7 +40,6 @@ bool nfc_scene_emulate_mifare_ul_on_event(void* context, SceneManagerEvent event
     bool consumed = false;
 
     if(event.type == SceneManagerEventTypeTick) {
-        notification_message(nfc->notifications, &sequence_blink_blue_10);
         consumed = true;
     } else if(event.type == SceneManagerEventTypeBack) {
         // Stop worker
@@ -61,4 +61,6 @@ void nfc_scene_emulate_mifare_ul_on_exit(void* context) {
 
     // Clear view
     popup_reset(nfc->popup);
+
+    nfc_blink_stop(nfc);
 }

+ 4 - 1
applications/nfc/scenes/nfc_scene_emulate_uid.c

@@ -80,6 +80,8 @@ void nfc_scene_emulate_uid_on_enter(void* context) {
         &nfc->dev->dev_data,
         nfc_emulate_uid_worker_callback,
         nfc);
+
+    nfc_blink_start(nfc);
 }
 
 bool nfc_scene_emulate_uid_on_event(void* context, SceneManagerEvent event) {
@@ -89,7 +91,6 @@ bool nfc_scene_emulate_uid_on_event(void* context, SceneManagerEvent event) {
     bool consumed = false;
 
     if(event.type == SceneManagerEventTypeTick) {
-        notification_message(nfc->notifications, &sequence_blink_blue_10);
         consumed = true;
     } else if(event.type == SceneManagerEventTypeCustom) {
         if(event.event == NfcCustomEventWorkerExit) {
@@ -141,4 +142,6 @@ void nfc_scene_emulate_uid_on_exit(void* context) {
     widget_reset(nfc->widget);
     text_box_reset(nfc->text_box);
     string_reset(nfc->text_box_store);
+
+    nfc_blink_stop(nfc);
 }

+ 4 - 1
applications/nfc/scenes/nfc_scene_read_card.c

@@ -20,6 +20,8 @@ void nfc_scene_read_card_on_enter(void* context) {
     view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewPopup);
     nfc_worker_start(
         nfc->worker, NfcWorkerStateDetect, &nfc->dev->dev_data, nfc_read_card_worker_callback, nfc);
+
+    nfc_blink_start(nfc);
 }
 
 bool nfc_scene_read_card_on_event(void* context, SceneManagerEvent event) {
@@ -32,7 +34,6 @@ bool nfc_scene_read_card_on_event(void* context, SceneManagerEvent event) {
             consumed = true;
         }
     } else if(event.type == SceneManagerEventTypeTick) {
-        notification_message(nfc->notifications, &sequence_blink_blue_10);
         consumed = true;
     }
     return consumed;
@@ -45,4 +46,6 @@ void nfc_scene_read_card_on_exit(void* context) {
     nfc_worker_stop(nfc->worker);
     // Clear view
     popup_reset(nfc->popup);
+
+    nfc_blink_stop(nfc);
 }

+ 3 - 1
applications/nfc/scenes/nfc_scene_read_emv_app.c

@@ -24,6 +24,7 @@ void nfc_scene_read_emv_app_on_enter(void* context) {
         &nfc->dev->dev_data,
         nfc_read_emv_app_worker_callback,
         nfc);
+    nfc_blink_start(nfc);
 }
 
 bool nfc_scene_read_emv_app_on_event(void* context, SceneManagerEvent event) {
@@ -38,7 +39,6 @@ bool nfc_scene_read_emv_app_on_event(void* context, SceneManagerEvent event) {
             consumed = true;
         }
     } else if(event.type == SceneManagerEventTypeTick) {
-        notification_message(nfc->notifications, &sequence_blink_blue_10);
         consumed = true;
     }
 
@@ -53,4 +53,6 @@ void nfc_scene_read_emv_app_on_exit(void* context) {
 
     // Clear view
     popup_reset(nfc->popup);
+
+    nfc_blink_stop(nfc);
 }

+ 4 - 1
applications/nfc/scenes/nfc_scene_read_emv_data.c

@@ -26,6 +26,8 @@ void nfc_scene_read_emv_data_on_enter(void* context) {
         &nfc->dev->dev_data,
         nfc_read_emv_data_worker_callback,
         nfc);
+
+    nfc_blink_start(nfc);
 }
 
 bool nfc_scene_read_emv_data_on_event(void* context, SceneManagerEvent event) {
@@ -40,7 +42,6 @@ bool nfc_scene_read_emv_data_on_event(void* context, SceneManagerEvent event) {
             consumed = true;
         }
     } else if(event.type == SceneManagerEventTypeTick) {
-        notification_message(nfc->notifications, &sequence_blink_blue_10);
         consumed = true;
     }
     return consumed;
@@ -53,4 +54,6 @@ void nfc_scene_read_emv_data_on_exit(void* context) {
     nfc_worker_stop(nfc->worker);
     // Clear view
     popup_reset(nfc->popup);
+
+    nfc_blink_stop(nfc);
 }

+ 6 - 4
applications/nfc/scenes/nfc_scene_read_mifare_classic.c

@@ -33,17 +33,15 @@ void nfc_scene_read_mifare_classic_on_enter(void* context) {
         &nfc->dev->dev_data,
         nfc_read_mifare_classic_worker_callback,
         nfc);
+
+    nfc_blink_start(nfc);
 }
 
 bool nfc_scene_read_mifare_classic_on_event(void* context, SceneManagerEvent event) {
     Nfc* nfc = context;
     bool consumed = false;
 
-    uint32_t state = scene_manager_get_scene_state(nfc->scene_manager, NfcSceneReadMifareClassic);
     if(event.type == SceneManagerEventTypeTick) {
-        if(state == NfcSceneReadMifareClassicStateInProgress) {
-            notification_message(nfc->notifications, &sequence_blink_blue_10);
-        }
         consumed = true;
     } else if(event.type == SceneManagerEventTypeCustom) {
         if(event.event == NfcCustomEventDictAttackDone) {
@@ -70,12 +68,14 @@ bool nfc_scene_read_mifare_classic_on_event(void* context, SceneManagerEvent eve
         } else if(event.event == NfcWorkerEventSuccess) {
             scene_manager_set_scene_state(
                 nfc->scene_manager, NfcSceneReadMifareClassic, NfcSceneReadMifareClassicStateDone);
+            nfc_blink_stop(nfc);
             notification_message(nfc->notifications, &sequence_success);
             dict_attack_set_result(nfc->dict_attack, true);
             consumed = true;
         } else if(event.event == NfcWorkerEventFail) {
             scene_manager_set_scene_state(
                 nfc->scene_manager, NfcSceneReadMifareClassic, NfcSceneReadMifareClassicStateDone);
+            nfc_blink_stop(nfc);
             dict_attack_set_result(nfc->dict_attack, false);
             consumed = true;
         } else if(event.event == NfcWorkerEventNoDictFound) {
@@ -91,4 +91,6 @@ void nfc_scene_read_mifare_classic_on_exit(void* context) {
     // Stop worker
     nfc_worker_stop(nfc->worker);
     dict_attack_reset(nfc->dict_attack);
+
+    nfc_blink_stop(nfc);
 }

+ 4 - 2
applications/nfc/scenes/nfc_scene_read_mifare_desfire.c

@@ -24,6 +24,7 @@ void nfc_scene_read_mifare_desfire_on_enter(void* context) {
         &nfc->dev->dev_data,
         nfc_read_mifare_desfire_worker_callback,
         nfc);
+    nfc_blink_start(nfc);
 }
 
 bool nfc_scene_read_mifare_desfire_on_event(void* context, SceneManagerEvent event) {
@@ -33,12 +34,11 @@ bool nfc_scene_read_mifare_desfire_on_event(void* context, SceneManagerEvent eve
     if(event.type == SceneManagerEventTypeCustom) {
         if(event.event == NfcCustomEventWorkerExit) {
             notification_message(nfc->notifications, &sequence_success);
+            DOLPHIN_DEED(DolphinDeedNfcReadSuccess);
             scene_manager_next_scene(nfc->scene_manager, NfcSceneReadMifareDesfireSuccess);
             consumed = true;
         }
     } else if(event.type == SceneManagerEventTypeTick) {
-        notification_message(nfc->notifications, &sequence_blink_blue_10);
-        DOLPHIN_DEED(DolphinDeedNfcReadSuccess);
         consumed = true;
     }
     return consumed;
@@ -51,4 +51,6 @@ void nfc_scene_read_mifare_desfire_on_exit(void* context) {
     nfc_worker_stop(nfc->worker);
     // Clear view
     popup_reset(nfc->popup);
+
+    nfc_blink_stop(nfc);
 }

+ 3 - 1
applications/nfc/scenes/nfc_scene_read_mifare_ul.c

@@ -24,6 +24,7 @@ void nfc_scene_read_mifare_ul_on_enter(void* context) {
         &nfc->dev->dev_data,
         nfc_read_mifare_ul_worker_callback,
         nfc);
+    nfc_blink_start(nfc);
 }
 
 bool nfc_scene_read_mifare_ul_on_event(void* context, SceneManagerEvent event) {
@@ -36,7 +37,6 @@ bool nfc_scene_read_mifare_ul_on_event(void* context, SceneManagerEvent event) {
             consumed = true;
         }
     } else if(event.type == SceneManagerEventTypeTick) {
-        notification_message(nfc->notifications, &sequence_blink_blue_10);
         consumed = true;
     }
     return consumed;
@@ -49,4 +49,6 @@ void nfc_scene_read_mifare_ul_on_exit(void* context) {
     nfc_worker_stop(nfc->worker);
     // Clear view
     popup_reset(nfc->popup);
+
+    nfc_blink_stop(nfc);
 }