seader_scene_card_menu.c 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #include "../seader_i.h"
  2. enum SubmenuIndex {
  3. SubmenuIndexSave,
  4. SubmenuIndexSavePicopass,
  5. SubmenuIndexSaveRFID,
  6. SubmenuIndexSaveSR,
  7. };
  8. void seader_scene_card_menu_submenu_callback(void* context, uint32_t index) {
  9. Seader* seader = context;
  10. view_dispatcher_send_custom_event(seader->view_dispatcher, index);
  11. }
  12. void seader_scene_card_menu_on_enter(void* context) {
  13. Seader* seader = context;
  14. SeaderWorker* seader_worker = seader->worker;
  15. SeaderCredential* credential = seader_worker->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(seader->is_debug_enabled) {
  32. if(credential->sio[0] != 0) {
  33. submenu_add_item(
  34. submenu,
  35. "Save SR",
  36. SubmenuIndexSaveSR,
  37. seader_scene_card_menu_submenu_callback,
  38. seader);
  39. }
  40. }
  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. }
  74. } else if(event.type == SceneManagerEventTypeBack) {
  75. consumed = scene_manager_search_and_switch_to_previous_scene(
  76. seader->scene_manager, SeaderSceneSamPresent);
  77. }
  78. return consumed;
  79. }
  80. void seader_scene_card_menu_on_exit(void* context) {
  81. Seader* seader = context;
  82. submenu_reset(seader->submenu);
  83. }