seader_scene_card_menu.c 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  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. scene_manager_next_scene(seader->scene_manager, SeaderSceneSaveName);
  54. consumed = true;
  55. } else if(event.event == SubmenuIndexSavePicopass) {
  56. scene_manager_set_scene_state(
  57. seader->scene_manager, SeaderSceneCardMenu, SubmenuIndexSavePicopass);
  58. seader->credential->save_format = SeaderCredentialSaveFormatPicopass;
  59. scene_manager_next_scene(seader->scene_manager, SeaderSceneSaveName);
  60. consumed = true;
  61. } else if(event.event == SubmenuIndexSaveRFID) {
  62. scene_manager_set_scene_state(
  63. seader->scene_manager, SeaderSceneCardMenu, SubmenuIndexSaveRFID);
  64. seader->credential->save_format = SeaderCredentialSaveFormatRFID;
  65. scene_manager_next_scene(seader->scene_manager, SeaderSceneSaveName);
  66. consumed = true;
  67. } else if(event.event == SubmenuIndexSaveSR) {
  68. scene_manager_set_scene_state(
  69. seader->scene_manager, SeaderSceneCardMenu, SubmenuIndexSaveSR);
  70. seader->credential->save_format = SeaderCredentialSaveFormatSR;
  71. scene_manager_next_scene(seader->scene_manager, SeaderSceneSaveName);
  72. consumed = true;
  73. } else if(event.event == SubmenuIndexSaveMFC) {
  74. scene_manager_set_scene_state(
  75. seader->scene_manager, SeaderSceneCardMenu, SubmenuIndexSaveMFC);
  76. seader->credential->save_format = SeaderCredentialSaveFormatMFC;
  77. scene_manager_next_scene(seader->scene_manager, SeaderSceneSaveName);
  78. consumed = true;
  79. }
  80. } else if(event.type == SceneManagerEventTypeBack) {
  81. consumed = scene_manager_search_and_switch_to_previous_scene(
  82. seader->scene_manager, SeaderSceneSamPresent);
  83. }
  84. return consumed;
  85. }
  86. void seader_scene_card_menu_on_exit(void* context) {
  87. Seader* seader = context;
  88. submenu_reset(seader->submenu);
  89. }