subghz_scene_start.c 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. #include "../subghz_i.h"
  2. #include <dolphin/dolphin.h>
  3. enum SubmenuIndex {
  4. SubmenuIndexRead = 10,
  5. SubmenuIndexSaved,
  6. SubmenuIndexTest,
  7. SubmenuIndexAddManually,
  8. SubmenuIndexFrequencyAnalyzer,
  9. SubmenuIndexReadRAW,
  10. SubmenuIndexShowRegionInfo
  11. };
  12. void subghz_scene_start_submenu_callback(void* context, uint32_t index) {
  13. SubGhz* subghz = context;
  14. view_dispatcher_send_custom_event(subghz->view_dispatcher, index);
  15. }
  16. void subghz_scene_start_on_enter(void* context) {
  17. SubGhz* subghz = context;
  18. if(subghz->state_notifications == SubGhzNotificationStateStarting) {
  19. subghz->state_notifications = SubGhzNotificationStateIDLE;
  20. }
  21. submenu_add_item(
  22. subghz->submenu, "Read", SubmenuIndexRead, subghz_scene_start_submenu_callback, subghz);
  23. submenu_add_item(
  24. subghz->submenu,
  25. "Read RAW",
  26. SubmenuIndexReadRAW,
  27. subghz_scene_start_submenu_callback,
  28. subghz);
  29. submenu_add_item(
  30. subghz->submenu, "Saved", SubmenuIndexSaved, subghz_scene_start_submenu_callback, subghz);
  31. submenu_add_item(
  32. subghz->submenu,
  33. "Add Manually",
  34. SubmenuIndexAddManually,
  35. subghz_scene_start_submenu_callback,
  36. subghz);
  37. submenu_add_item(
  38. subghz->submenu,
  39. "Frequency Analyzer",
  40. SubmenuIndexFrequencyAnalyzer,
  41. subghz_scene_start_submenu_callback,
  42. subghz);
  43. submenu_add_item(
  44. subghz->submenu,
  45. "Region Information",
  46. SubmenuIndexShowRegionInfo,
  47. subghz_scene_start_submenu_callback,
  48. subghz);
  49. if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug)) {
  50. submenu_add_item(
  51. subghz->submenu, "Test", SubmenuIndexTest, subghz_scene_start_submenu_callback, subghz);
  52. }
  53. submenu_set_selected_item(
  54. subghz->submenu, scene_manager_get_scene_state(subghz->scene_manager, SubGhzSceneStart));
  55. view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewIdMenu);
  56. }
  57. bool subghz_scene_start_on_event(void* context, SceneManagerEvent event) {
  58. SubGhz* subghz = context;
  59. if(event.type == SceneManagerEventTypeBack) {
  60. //exit app
  61. scene_manager_stop(subghz->scene_manager);
  62. view_dispatcher_stop(subghz->view_dispatcher);
  63. return true;
  64. } else if(event.type == SceneManagerEventTypeCustom) {
  65. if(event.event == SubmenuIndexReadRAW) {
  66. scene_manager_set_scene_state(
  67. subghz->scene_manager, SubGhzSceneStart, SubmenuIndexReadRAW);
  68. subghz->txrx->rx_key_state = SubGhzRxKeyStateIDLE;
  69. scene_manager_next_scene(subghz->scene_manager, SubGhzSceneReadRAW);
  70. return true;
  71. } else if(event.event == SubmenuIndexRead) {
  72. scene_manager_set_scene_state(
  73. subghz->scene_manager, SubGhzSceneStart, SubmenuIndexRead);
  74. scene_manager_next_scene(subghz->scene_manager, SubGhzSceneReceiver);
  75. return true;
  76. } else if(event.event == SubmenuIndexSaved) {
  77. scene_manager_set_scene_state(
  78. subghz->scene_manager, SubGhzSceneStart, SubmenuIndexSaved);
  79. scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSaved);
  80. return true;
  81. } else if(event.event == SubmenuIndexAddManually) {
  82. scene_manager_set_scene_state(
  83. subghz->scene_manager, SubGhzSceneStart, SubmenuIndexAddManually);
  84. scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSetType);
  85. return true;
  86. } else if(event.event == SubmenuIndexFrequencyAnalyzer) {
  87. scene_manager_set_scene_state(
  88. subghz->scene_manager, SubGhzSceneStart, SubmenuIndexFrequencyAnalyzer);
  89. scene_manager_next_scene(subghz->scene_manager, SubGhzSceneFrequencyAnalyzer);
  90. DOLPHIN_DEED(DolphinDeedSubGhzFrequencyAnalyzer);
  91. return true;
  92. } else if(event.event == SubmenuIndexTest) {
  93. scene_manager_set_scene_state(
  94. subghz->scene_manager, SubGhzSceneStart, SubmenuIndexTest);
  95. scene_manager_next_scene(subghz->scene_manager, SubGhzSceneTest);
  96. return true;
  97. } else if(event.event == SubmenuIndexShowRegionInfo) {
  98. scene_manager_set_scene_state(
  99. subghz->scene_manager, SubGhzSceneStart, SubmenuIndexShowRegionInfo);
  100. scene_manager_next_scene(subghz->scene_manager, SubGhzSceneRegionInfo);
  101. return true;
  102. }
  103. }
  104. return false;
  105. }
  106. void subghz_scene_start_on_exit(void* context) {
  107. SubGhz* subghz = context;
  108. submenu_reset(subghz->submenu);
  109. }