nfc_scene_card_menu.c 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #include "nfc_scene_card_menu.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. SubmenuIndexRunApp,
  8. SubmenuIndexChooseScript,
  9. SubmenuIndexEmulate,
  10. SubmenuIndexSave,
  11. } SubmenuIndex;
  12. void nfc_scene_card_menu_submenu_callback(void* context, uint32_t index) {
  13. Nfc* nfc = (Nfc*)context;
  14. view_dispatcher_send_custom_event(nfc->nfc_common.view_dispatcher, index);
  15. }
  16. const void nfc_scene_card_menu_on_enter(void* context) {
  17. Nfc* nfc = (Nfc*)context;
  18. Submenu* submenu = nfc->submenu;
  19. submenu_add_item(
  20. submenu,
  21. "Run compatible app",
  22. SubmenuIndexRunApp,
  23. nfc_scene_card_menu_submenu_callback,
  24. nfc);
  25. submenu_add_item(
  26. submenu,
  27. "Additional reading scripts",
  28. SubmenuIndexChooseScript,
  29. nfc_scene_card_menu_submenu_callback,
  30. nfc);
  31. submenu_add_item(
  32. submenu, "Emulate UID", SubmenuIndexEmulate, nfc_scene_card_menu_submenu_callback, nfc);
  33. submenu_add_item(
  34. submenu, "Name and save UID", SubmenuIndexSave, nfc_scene_card_menu_submenu_callback, nfc);
  35. view_dispatcher_switch_to_view(nfc->nfc_common.view_dispatcher, NfcViewMenu);
  36. }
  37. const bool nfc_scene_card_menu_on_event(void* context, uint32_t event) {
  38. Nfc* nfc = (Nfc*)context;
  39. if(event == SubmenuIndexRunApp) {
  40. view_dispatcher_add_scene(nfc->nfc_common.view_dispatcher, nfc->scene_not_implemented);
  41. view_dispatcher_send_navigation_event(
  42. nfc->nfc_common.view_dispatcher, ViewNavigatorEventNext);
  43. return true;
  44. } else if(event == SubmenuIndexChooseScript) {
  45. view_dispatcher_add_scene(nfc->nfc_common.view_dispatcher, nfc->scene_not_implemented);
  46. view_dispatcher_send_navigation_event(
  47. nfc->nfc_common.view_dispatcher, ViewNavigatorEventNext);
  48. return true;
  49. } else if(event == SubmenuIndexEmulate) {
  50. view_dispatcher_add_scene(nfc->nfc_common.view_dispatcher, nfc->scene_emulate_uid);
  51. view_dispatcher_send_navigation_event(
  52. nfc->nfc_common.view_dispatcher, ViewNavigatorEventNext);
  53. return true;
  54. } else if(event == SubmenuIndexSave) {
  55. view_dispatcher_add_scene(nfc->nfc_common.view_dispatcher, nfc->scene_not_implemented);
  56. view_dispatcher_send_navigation_event(
  57. nfc->nfc_common.view_dispatcher, ViewNavigatorEventNext);
  58. return true;
  59. } else if(event == ViewNavigatorEventBack) {
  60. view_dispatcher_send_back_search_scene_event(
  61. nfc->nfc_common.view_dispatcher, NfcSceneStart);
  62. return true;
  63. }
  64. return false;
  65. }
  66. const void nfc_scene_card_menu_on_exit(void* context) {
  67. Nfc* nfc = (Nfc*)context;
  68. submenu_clean(nfc->submenu);
  69. }
  70. AppScene* nfc_scene_card_menu_alloc() {
  71. AppScene* scene = furi_alloc(sizeof(AppScene));
  72. scene->id = NfcSceneCardMenu;
  73. scene->on_enter = nfc_scene_card_menu_on_enter;
  74. scene->on_event = nfc_scene_card_menu_on_event;
  75. scene->on_exit = nfc_scene_card_menu_on_exit;
  76. return scene;
  77. }
  78. void nfc_scene_card_menu_free(AppScene* scene) {
  79. free(scene);
  80. }