seos_scene_main_menu.c 4.4 KB

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