seader_scene_card_menu.c 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #include "../seader_i.h"
  2. enum SubmenuIndex {
  3. SubmenuIndexSave,
  4. SubmenuIndexSavePicopass,
  5. SubmenuIndexSaveRFID,
  6. SubmenuIndexSaveSR,
  7. SubmenuIndexSaveMFC,
  8. };
  9. void seader_scene_card_menu_submenu_callback(void* context, uint32_t index) {
  10. Seader* seader = context;
  11. view_dispatcher_send_custom_event(seader->view_dispatcher, index);
  12. }
  13. void seader_scene_card_menu_on_enter(void* context) {
  14. Seader* seader = context;
  15. SeaderCredential* credential = seader->credential;
  16. Submenu* submenu = seader->submenu;
  17. submenu_add_item(
  18. submenu, "Save", SubmenuIndexSave, seader_scene_card_menu_submenu_callback, seader);
  19. submenu_add_item(
  20. submenu,
  21. "Save Picopass",
  22. SubmenuIndexSavePicopass,
  23. seader_scene_card_menu_submenu_callback,
  24. seader);
  25. submenu_add_item(
  26. submenu,
  27. "Save RFID",
  28. SubmenuIndexSaveRFID,
  29. seader_scene_card_menu_submenu_callback,
  30. seader);
  31. if(credential->sio[0] == 0x30 && credential->diversifier_len == RFAL_PICOPASS_UID_LEN) {
  32. submenu_add_item(
  33. submenu,
  34. "Save SR",
  35. SubmenuIndexSaveSR,
  36. seader_scene_card_menu_submenu_callback,
  37. seader);
  38. }
  39. submenu_add_item(
  40. submenu, "Save MFC", SubmenuIndexSaveMFC, seader_scene_card_menu_submenu_callback, seader);
  41. submenu_set_selected_item(
  42. seader->submenu,
  43. scene_manager_get_scene_state(seader->scene_manager, SeaderSceneCardMenu));
  44. view_dispatcher_switch_to_view(seader->view_dispatcher, SeaderViewMenu);
  45. }
  46. bool seader_scene_card_menu_on_event(void* context, SceneManagerEvent event) {
  47. Seader* seader = context;
  48. bool consumed = false;
  49. if(event.type == SceneManagerEventTypeCustom) {
  50. if(event.event == SubmenuIndexSave) {
  51. scene_manager_set_scene_state(
  52. seader->scene_manager, SeaderSceneCardMenu, SubmenuIndexSave);
  53. seader->credential->save_format = SeaderCredentialSaveFormatAgnostic;
  54. scene_manager_next_scene(seader->scene_manager, SeaderSceneSaveName);
  55. consumed = true;
  56. } else if(event.event == SubmenuIndexSavePicopass) {
  57. scene_manager_set_scene_state(
  58. seader->scene_manager, SeaderSceneCardMenu, SubmenuIndexSavePicopass);
  59. seader->credential->save_format = SeaderCredentialSaveFormatPicopass;
  60. scene_manager_next_scene(seader->scene_manager, SeaderSceneSaveName);
  61. consumed = true;
  62. } else if(event.event == SubmenuIndexSaveRFID) {
  63. scene_manager_set_scene_state(
  64. seader->scene_manager, SeaderSceneCardMenu, SubmenuIndexSaveRFID);
  65. seader->credential->save_format = SeaderCredentialSaveFormatRFID;
  66. scene_manager_next_scene(seader->scene_manager, SeaderSceneSaveName);
  67. consumed = true;
  68. } else if(event.event == SubmenuIndexSaveSR) {
  69. scene_manager_set_scene_state(
  70. seader->scene_manager, SeaderSceneCardMenu, SubmenuIndexSaveSR);
  71. seader->credential->save_format = SeaderCredentialSaveFormatSR;
  72. scene_manager_next_scene(seader->scene_manager, SeaderSceneSaveName);
  73. consumed = true;
  74. } else if(event.event == SubmenuIndexSaveMFC) {
  75. scene_manager_set_scene_state(
  76. seader->scene_manager, SeaderSceneCardMenu, SubmenuIndexSaveMFC);
  77. seader->credential->save_format = SeaderCredentialSaveFormatMFC;
  78. scene_manager_next_scene(seader->scene_manager, SeaderSceneSaveName);
  79. consumed = true;
  80. }
  81. } else if(event.type == SceneManagerEventTypeBack) {
  82. consumed = scene_manager_search_and_switch_to_previous_scene(
  83. seader->scene_manager, SeaderSceneSamPresent);
  84. }
  85. return consumed;
  86. }
  87. void seader_scene_card_menu_on_exit(void* context) {
  88. Seader* seader = context;
  89. submenu_reset(seader->submenu);
  90. }