lfrfid_scene_extra_actions.c 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #include "../lfrfid_i.h"
  2. #include <dolphin/dolphin.h>
  3. typedef enum {
  4. SubmenuIndexASK,
  5. SubmenuIndexPSK,
  6. SubmenuIndexRAW,
  7. } SubmenuIndex;
  8. static void lfrfid_scene_extra_actions_submenu_callback(void* context, uint32_t index) {
  9. LfRfid* app = context;
  10. view_dispatcher_send_custom_event(app->view_dispatcher, index);
  11. }
  12. void lfrfid_scene_extra_actions_on_enter(void* context) {
  13. LfRfid* app = context;
  14. Submenu* submenu = app->submenu;
  15. submenu_add_item(
  16. submenu,
  17. "Read ASK (Animal, Ordinary Card)",
  18. SubmenuIndexASK,
  19. lfrfid_scene_extra_actions_submenu_callback,
  20. app);
  21. submenu_add_item(
  22. submenu,
  23. "Read PSK (Indala)",
  24. SubmenuIndexPSK,
  25. lfrfid_scene_extra_actions_submenu_callback,
  26. app);
  27. if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug)) {
  28. submenu_add_item(
  29. submenu,
  30. "Read RAW RFID data",
  31. SubmenuIndexRAW,
  32. lfrfid_scene_extra_actions_submenu_callback,
  33. app);
  34. }
  35. submenu_set_selected_item(
  36. submenu, scene_manager_get_scene_state(app->scene_manager, LfRfidSceneExtraActions));
  37. // clear key
  38. furi_string_reset(app->file_name);
  39. app->protocol_id = PROTOCOL_NO;
  40. app->read_type = LFRFIDWorkerReadTypeAuto;
  41. view_dispatcher_switch_to_view(app->view_dispatcher, LfRfidViewSubmenu);
  42. }
  43. bool lfrfid_scene_extra_actions_on_event(void* context, SceneManagerEvent event) {
  44. LfRfid* app = context;
  45. bool consumed = false;
  46. if(event.type == SceneManagerEventTypeCustom) {
  47. if(event.event == SubmenuIndexASK) {
  48. app->read_type = LFRFIDWorkerReadTypeASKOnly;
  49. scene_manager_next_scene(app->scene_manager, LfRfidSceneRead);
  50. DOLPHIN_DEED(DolphinDeedRfidRead);
  51. consumed = true;
  52. } else if(event.event == SubmenuIndexPSK) {
  53. app->read_type = LFRFIDWorkerReadTypePSKOnly;
  54. scene_manager_next_scene(app->scene_manager, LfRfidSceneRead);
  55. DOLPHIN_DEED(DolphinDeedRfidRead);
  56. consumed = true;
  57. } else if(event.event == SubmenuIndexRAW) {
  58. scene_manager_next_scene(app->scene_manager, LfRfidSceneRawName);
  59. consumed = true;
  60. }
  61. scene_manager_set_scene_state(app->scene_manager, LfRfidSceneExtraActions, event.event);
  62. }
  63. return consumed;
  64. }
  65. void lfrfid_scene_extra_actions_on_exit(void* context) {
  66. LfRfid* app = context;
  67. submenu_reset(app->submenu);
  68. }