seader_scene_card_menu.c 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  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. SeaderWorker* seader_worker = seader->worker;
  16. SeaderCredential* credential = seader_worker->credential;
  17. Submenu* submenu = seader->submenu;
  18. submenu_add_item(
  19. submenu, "Save", SubmenuIndexSave, seader_scene_card_menu_submenu_callback, seader);
  20. submenu_add_item(
  21. submenu,
  22. "Save Picopass",
  23. SubmenuIndexSavePicopass,
  24. seader_scene_card_menu_submenu_callback,
  25. seader);
  26. submenu_add_item(
  27. submenu,
  28. "Save RFID",
  29. SubmenuIndexSaveRFID,
  30. seader_scene_card_menu_submenu_callback,
  31. seader);
  32. if(seader->is_debug_enabled) {
  33. if(credential->sio[0] == 0x30) {
  34. submenu_add_item(
  35. submenu,
  36. "Save SR",
  37. SubmenuIndexSaveSR,
  38. seader_scene_card_menu_submenu_callback,
  39. seader);
  40. }
  41. submenu_add_item(
  42. submenu,
  43. "Save MFC",
  44. SubmenuIndexSaveMFC,
  45. seader_scene_card_menu_submenu_callback,
  46. seader);
  47. }
  48. submenu_set_selected_item(
  49. seader->submenu,
  50. scene_manager_get_scene_state(seader->scene_manager, SeaderSceneCardMenu));
  51. view_dispatcher_switch_to_view(seader->view_dispatcher, SeaderViewMenu);
  52. }
  53. bool seader_scene_card_menu_on_event(void* context, SceneManagerEvent event) {
  54. Seader* seader = context;
  55. bool consumed = false;
  56. if(event.type == SceneManagerEventTypeCustom) {
  57. if(event.event == SubmenuIndexSave) {
  58. scene_manager_set_scene_state(
  59. seader->scene_manager, SeaderSceneCardMenu, SubmenuIndexSave);
  60. scene_manager_next_scene(seader->scene_manager, SeaderSceneSaveName);
  61. consumed = true;
  62. } else if(event.event == SubmenuIndexSavePicopass) {
  63. scene_manager_set_scene_state(
  64. seader->scene_manager, SeaderSceneCardMenu, SubmenuIndexSavePicopass);
  65. seader->credential->save_format = SeaderCredentialSaveFormatPicopass;
  66. scene_manager_next_scene(seader->scene_manager, SeaderSceneSaveName);
  67. consumed = true;
  68. } else if(event.event == SubmenuIndexSaveRFID) {
  69. scene_manager_set_scene_state(
  70. seader->scene_manager, SeaderSceneCardMenu, SubmenuIndexSaveRFID);
  71. seader->credential->save_format = SeaderCredentialSaveFormatRFID;
  72. scene_manager_next_scene(seader->scene_manager, SeaderSceneSaveName);
  73. consumed = true;
  74. } else if(event.event == SubmenuIndexSaveSR) {
  75. scene_manager_set_scene_state(
  76. seader->scene_manager, SeaderSceneCardMenu, SubmenuIndexSaveSR);
  77. seader->credential->save_format = SeaderCredentialSaveFormatSR;
  78. scene_manager_next_scene(seader->scene_manager, SeaderSceneSaveName);
  79. consumed = true;
  80. } else if(event.event == SubmenuIndexSaveMFC) {
  81. scene_manager_set_scene_state(
  82. seader->scene_manager, SeaderSceneCardMenu, SubmenuIndexSaveMFC);
  83. seader->credential->save_format = SeaderCredentialSaveFormatMFC;
  84. scene_manager_next_scene(seader->scene_manager, SeaderSceneSaveName);
  85. consumed = true;
  86. }
  87. } else if(event.type == SceneManagerEventTypeBack) {
  88. consumed = scene_manager_search_and_switch_to_previous_scene(
  89. seader->scene_manager, SeaderSceneSamPresent);
  90. }
  91. return consumed;
  92. }
  93. void seader_scene_card_menu_on_exit(void* context) {
  94. Seader* seader = context;
  95. submenu_reset(seader->submenu);
  96. }