subghz_scene_start.c 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. #include "../subghz_i.h"
  2. enum SubmenuIndex {
  3. SubmenuIndexRead = 10,
  4. SubmenuIndexSaved,
  5. #ifdef LAB_TESTS
  6. SubmenuIndexTest,
  7. #endif
  8. SubmenuIndexAddManualy,
  9. SubmenuIndexFrequencyAnalyzer,
  10. SubmenuIndexReadRAW,
  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. SubmenuIndexAddManualy,
  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. #ifdef LAB_TESTS
  44. submenu_add_item(
  45. subghz->submenu, "Test", SubmenuIndexTest, subghz_scene_start_submenu_callback, subghz);
  46. #endif
  47. submenu_set_selected_item(
  48. subghz->submenu, scene_manager_get_scene_state(subghz->scene_manager, SubGhzSceneStart));
  49. view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewMenu);
  50. }
  51. bool subghz_scene_start_on_event(void* context, SceneManagerEvent event) {
  52. SubGhz* subghz = context;
  53. if(event.type == SceneManagerEventTypeCustom) {
  54. if(event.event == SubmenuIndexReadRAW) {
  55. scene_manager_set_scene_state(
  56. subghz->scene_manager, SubGhzSceneStart, SubmenuIndexReadRAW);
  57. subghz->txrx->rx_key_state = SubGhzRxKeyStateIDLE;
  58. scene_manager_next_scene(subghz->scene_manager, SubGhzSceneReadRAW);
  59. return true;
  60. } else if(event.event == SubmenuIndexRead) {
  61. scene_manager_set_scene_state(
  62. subghz->scene_manager, SubGhzSceneStart, SubmenuIndexRead);
  63. scene_manager_next_scene(subghz->scene_manager, SubGhzSceneReceiver);
  64. return true;
  65. } else if(event.event == SubmenuIndexSaved) {
  66. scene_manager_set_scene_state(
  67. subghz->scene_manager, SubGhzSceneStart, SubmenuIndexSaved);
  68. scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSaved);
  69. return true;
  70. } else if(event.event == SubmenuIndexAddManualy) {
  71. scene_manager_set_scene_state(
  72. subghz->scene_manager, SubGhzSceneStart, SubmenuIndexAddManualy);
  73. scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSetType);
  74. return true;
  75. } else if(event.event == SubmenuIndexFrequencyAnalyzer) {
  76. scene_manager_set_scene_state(
  77. subghz->scene_manager, SubGhzSceneStart, SubmenuIndexFrequencyAnalyzer);
  78. scene_manager_next_scene(subghz->scene_manager, SubGhzSceneFrequencyAnalyzer);
  79. return true;
  80. #ifdef LAB_TESTS
  81. } else if(event.event == SubmenuIndexTest) {
  82. scene_manager_set_scene_state(
  83. subghz->scene_manager, SubGhzSceneStart, SubmenuIndexTest);
  84. scene_manager_next_scene(subghz->scene_manager, SubGhzSceneTest);
  85. return true;
  86. #endif
  87. }
  88. }
  89. return false;
  90. }
  91. void subghz_scene_start_on_exit(void* context) {
  92. SubGhz* subghz = context;
  93. submenu_clean(subghz->submenu);
  94. }