seos_scene_main_menu.c 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. #include "../seos_i.h"
  2. #define TAG "SceneMainMenu"
  3. #define SEADER_PATH "/ext/apps_data/seader"
  4. enum SubmenuIndex {
  5. SubmenuIndexSaved,
  6. SubmenuIndexRead,
  7. SubmenuIndexBLEReader,
  8. SubmenuIndexScannerMenu,
  9. SubmenuIndexBLECredInterrogate,
  10. SubmenuIndexAbout,
  11. SubmenuIndexInspect,
  12. SubmenuIndexSavedSeader,
  13. };
  14. void seos_scene_main_menu_submenu_callback(void* context, uint32_t index) {
  15. Seos* seos = context;
  16. view_dispatcher_send_custom_event(seos->view_dispatcher, index);
  17. }
  18. void seos_scene_main_menu_on_enter(void* context) {
  19. Seos* seos = context;
  20. Submenu* submenu = seos->submenu;
  21. submenu_reset(submenu);
  22. submenu_add_item(
  23. submenu, "Saved", SubmenuIndexSaved, seos_scene_main_menu_submenu_callback, seos);
  24. submenu_add_item(
  25. submenu, "Read NFC", SubmenuIndexRead, seos_scene_main_menu_submenu_callback, seos);
  26. submenu_add_item(
  27. submenu,
  28. "Start BLE Reader",
  29. SubmenuIndexBLEReader,
  30. seos_scene_main_menu_submenu_callback,
  31. seos);
  32. if(seos->has_external_ble) {
  33. submenu_add_item(
  34. submenu,
  35. "Scanners >",
  36. SubmenuIndexScannerMenu,
  37. seos_scene_main_menu_submenu_callback,
  38. seos);
  39. /*
  40. submenu_add_item(
  41. submenu,
  42. "BLE Cred Interrogate",
  43. SubmenuIndexBLECredInterrogate,
  44. seos_scene_main_menu_submenu_callback,
  45. seos);
  46. */
  47. }
  48. /*
  49. submenu_add_item(
  50. submenu, "Inspect", SubmenuIndexInspect, seos_scene_main_menu_submenu_callback, seos);
  51. */
  52. submenu_add_item(
  53. submenu, "About", SubmenuIndexAbout, seos_scene_main_menu_submenu_callback, seos);
  54. if(storage_dir_exists(seos->credential->storage, SEADER_PATH)) {
  55. submenu_add_item(
  56. submenu,
  57. "Saved (Seader)",
  58. SubmenuIndexSavedSeader,
  59. seos_scene_main_menu_submenu_callback,
  60. seos);
  61. }
  62. submenu_set_selected_item(
  63. seos->submenu, scene_manager_get_scene_state(seos->scene_manager, SeosSceneMainMenu));
  64. view_dispatcher_switch_to_view(seos->view_dispatcher, SeosViewMenu);
  65. }
  66. bool seos_scene_main_menu_on_event(void* context, SceneManagerEvent event) {
  67. Seos* seos = context;
  68. bool consumed = false;
  69. if(event.type == SceneManagerEventTypeCustom) {
  70. if(event.event == SubmenuIndexRead) {
  71. scene_manager_set_scene_state(
  72. seos->scene_manager, SeosSceneMainMenu, SubmenuIndexRead);
  73. scene_manager_next_scene(seos->scene_manager, SeosSceneRead);
  74. consumed = true;
  75. } else if(event.event == SubmenuIndexBLEReader) {
  76. scene_manager_set_scene_state(
  77. seos->scene_manager, SeosSceneMainMenu, SubmenuIndexBLEReader);
  78. seos->flow_mode = FLOW_READER;
  79. scene_manager_next_scene(seos->scene_manager, SeosSceneBlePeripheral);
  80. consumed = true;
  81. } else if(event.event == SubmenuIndexScannerMenu) {
  82. scene_manager_set_scene_state(
  83. seos->scene_manager, SeosSceneMainMenu, SubmenuIndexScannerMenu);
  84. scene_manager_next_scene(seos->scene_manager, SeosSceneScannerMenu);
  85. consumed = true;
  86. } else if(event.event == SubmenuIndexBLECredInterrogate) {
  87. scene_manager_set_scene_state(
  88. seos->scene_manager, SeosSceneMainMenu, SubmenuIndexBLECredInterrogate);
  89. seos->flow_mode = FLOW_READER;
  90. scene_manager_next_scene(seos->scene_manager, SeosSceneBleCentral);
  91. consumed = true;
  92. } else if(event.event == SubmenuIndexSaved) {
  93. scene_manager_set_scene_state(
  94. seos->scene_manager, SeosSceneMainMenu, SubmenuIndexSaved);
  95. seos->credential->load_type = SeosLoadSeos;
  96. scene_manager_next_scene(seos->scene_manager, SeosSceneFileSelect);
  97. consumed = true;
  98. } else if(event.event == SubmenuIndexSavedSeader) {
  99. scene_manager_set_scene_state(
  100. seos->scene_manager, SeosSceneMainMenu, SubmenuIndexSavedSeader);
  101. seos->credential->load_type = SeosLoadSeader;
  102. scene_manager_next_scene(seos->scene_manager, SeosSceneFileSelect);
  103. consumed = true;
  104. } else if(event.event == SubmenuIndexInspect) {
  105. scene_manager_set_scene_state(
  106. seos->scene_manager, SeosSceneMainMenu, SubmenuIndexInspect);
  107. seos->flow_mode = FLOW_INSPECT;
  108. scene_manager_next_scene(seos->scene_manager, SeosSceneEmulate);
  109. consumed = true;
  110. } else if(event.event == SubmenuIndexAbout) {
  111. scene_manager_set_scene_state(
  112. seos->scene_manager, SeosSceneMainMenu, SubmenuIndexAbout);
  113. scene_manager_next_scene(seos->scene_manager, SeosSceneAbout);
  114. consumed = true;
  115. }
  116. } else if(event.type == SceneManagerEventTypeBack) {
  117. while(scene_manager_previous_scene(seos->scene_manager))
  118. ;
  119. }
  120. return consumed;
  121. }
  122. void seos_scene_main_menu_on_exit(void* context) {
  123. Seos* seos = context;
  124. submenu_reset(seos->submenu);
  125. }