lfrfid_scene_extra_actions.c 2.3 KB

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