nfc_scene_start.c 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. #include "nfc_scene_start.h"
  2. #include "../nfc_i.h"
  3. #include <furi.h>
  4. #include <gui/modules/submenu.h>
  5. #include <gui/view_dispatcher.h>
  6. typedef enum {
  7. SubmenuIndexRead,
  8. SubmenuIndexRunScript,
  9. SubmenuIndexSaved,
  10. SubmenuIndexAddManualy,
  11. SubmenuIndexDebug,
  12. } SubmenuIndex;
  13. void nfc_scene_start_submenu_callback(void* context, uint32_t index) {
  14. Nfc* nfc = (Nfc*)context;
  15. view_dispatcher_send_custom_event(nfc->nfc_common.view_dispatcher, index);
  16. }
  17. const void nfc_scene_start_on_enter(void* context) {
  18. Nfc* nfc = (Nfc*)context;
  19. Submenu* submenu = nfc->submenu;
  20. submenu_add_item(
  21. submenu, "Read card", SubmenuIndexRead, nfc_scene_start_submenu_callback, nfc);
  22. submenu_add_item(
  23. submenu,
  24. "Run special action",
  25. SubmenuIndexRunScript,
  26. nfc_scene_start_submenu_callback,
  27. nfc);
  28. submenu_add_item(
  29. submenu, "Saved cards", SubmenuIndexSaved, nfc_scene_start_submenu_callback, nfc);
  30. submenu_add_item(
  31. submenu, "Add manualy", SubmenuIndexAddManualy, nfc_scene_start_submenu_callback, nfc);
  32. submenu_add_item(submenu, "Debug", SubmenuIndexDebug, nfc_scene_start_submenu_callback, nfc);
  33. view_dispatcher_switch_to_view(nfc->nfc_common.view_dispatcher, NfcViewMenu);
  34. }
  35. const bool nfc_scene_start_on_event(void* context, uint32_t event) {
  36. Nfc* nfc = (Nfc*)context;
  37. if(event == SubmenuIndexRead) {
  38. view_dispatcher_add_scene(nfc->nfc_common.view_dispatcher, nfc->scene_read_card);
  39. view_dispatcher_send_navigation_event(
  40. nfc->nfc_common.view_dispatcher, ViewNavigatorEventNext);
  41. return true;
  42. } else if(event == SubmenuIndexRunScript) {
  43. view_dispatcher_add_scene(nfc->nfc_common.view_dispatcher, nfc->scene_not_implemented);
  44. view_dispatcher_send_navigation_event(
  45. nfc->nfc_common.view_dispatcher, ViewNavigatorEventNext);
  46. return true;
  47. } else if(event == SubmenuIndexSaved) {
  48. view_dispatcher_add_scene(nfc->nfc_common.view_dispatcher, nfc->scene_not_implemented);
  49. view_dispatcher_send_navigation_event(
  50. nfc->nfc_common.view_dispatcher, ViewNavigatorEventNext);
  51. return true;
  52. } else if(event == SubmenuIndexAddManualy) {
  53. view_dispatcher_add_scene(nfc->nfc_common.view_dispatcher, nfc->scene_not_implemented);
  54. view_dispatcher_send_navigation_event(
  55. nfc->nfc_common.view_dispatcher, ViewNavigatorEventNext);
  56. return true;
  57. } else if(event == SubmenuIndexDebug) {
  58. view_dispatcher_add_scene(nfc->nfc_common.view_dispatcher, nfc->scene_debug_menu);
  59. view_dispatcher_send_navigation_event(
  60. nfc->nfc_common.view_dispatcher, ViewNavigatorEventNext);
  61. }
  62. return false;
  63. }
  64. const void nfc_scene_start_on_exit(void* context) {
  65. Nfc* nfc = (Nfc*)context;
  66. submenu_clean(nfc->submenu);
  67. }
  68. AppScene* nfc_scene_start_alloc() {
  69. AppScene* scene = furi_alloc(sizeof(AppScene));
  70. scene->id = NfcSceneStart;
  71. scene->on_enter = nfc_scene_start_on_enter;
  72. scene->on_event = nfc_scene_start_on_event;
  73. scene->on_exit = nfc_scene_start_on_exit;
  74. return scene;
  75. }
  76. void nfc_scene_start_free(AppScene* scene) {
  77. free(scene);
  78. }