subghz.c 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. #include "subghz_i.h"
  2. const SubGhzFrequency subghz_frequencies[] = {
  3. /* 301 */
  4. {
  5. .frequency = 301000000,
  6. .path = ApiHalSubGhzPath315,
  7. },
  8. /* 315 */
  9. {
  10. .frequency = 315000000,
  11. .path = ApiHalSubGhzPath315,
  12. },
  13. /* 346 - 385 */
  14. {
  15. .frequency = 346000000,
  16. .path = ApiHalSubGhzPath315,
  17. },
  18. {
  19. .frequency = 385000000,
  20. .path = ApiHalSubGhzPath315,
  21. },
  22. /* LPD433 first, mid, last channels */
  23. {
  24. .frequency = 433075000,
  25. .path = ApiHalSubGhzPath433,
  26. },
  27. {
  28. .frequency = 433920000,
  29. .path = ApiHalSubGhzPath433,
  30. },
  31. {
  32. .frequency = 434775000,
  33. .path = ApiHalSubGhzPath433,
  34. },
  35. /* 438.9 - 781 */
  36. {
  37. .frequency = 438900000,
  38. .path = ApiHalSubGhzPath433,
  39. },
  40. {
  41. .frequency = 463000000,
  42. .path = ApiHalSubGhzPath433,
  43. },
  44. {
  45. .frequency = 781000000,
  46. .path = ApiHalSubGhzPath868,
  47. },
  48. /* 868.35 */
  49. {
  50. .frequency = 868350000,
  51. .path = ApiHalSubGhzPath868,
  52. },
  53. /* 915 */
  54. {
  55. .frequency = 915000000,
  56. .path = ApiHalSubGhzPath868,
  57. },
  58. /* 925 */
  59. {
  60. .frequency = 925000000,
  61. .path = ApiHalSubGhzPath868,
  62. },
  63. };
  64. const uint32_t subghz_frequencies_count = sizeof(subghz_frequencies) / sizeof(SubGhzFrequency);
  65. const uint32_t subghz_frequencies_433_92 = 5;
  66. void subghz_menu_callback(void* context, uint32_t index) {
  67. furi_assert(context);
  68. SubGhz* subghz = context;
  69. if(index == 0) {
  70. view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewTestBasic);
  71. } else if(index == 1) {
  72. view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewTestPacket);
  73. } else if(index == 2) {
  74. view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewStatic);
  75. }
  76. }
  77. uint32_t subghz_exit(void* context) {
  78. return VIEW_NONE;
  79. }
  80. SubGhz* subghz_alloc() {
  81. SubGhz* subghz = furi_alloc(sizeof(SubGhz));
  82. // GUI
  83. subghz->gui = furi_record_open("gui");
  84. // View Dispatcher
  85. subghz->view_dispatcher = view_dispatcher_alloc();
  86. view_dispatcher_enable_queue(subghz->view_dispatcher);
  87. view_dispatcher_attach_to_gui(
  88. subghz->view_dispatcher, subghz->gui, ViewDispatcherTypeFullscreen);
  89. // Menu
  90. subghz->submenu = submenu_alloc();
  91. submenu_add_item(subghz->submenu, "Basic Test", 0, subghz_menu_callback, subghz);
  92. submenu_add_item(subghz->submenu, "Packet Test", 1, subghz_menu_callback, subghz);
  93. submenu_add_item(subghz->submenu, "Static Code", 2, subghz_menu_callback, subghz);
  94. View* submenu_view = submenu_get_view(subghz->submenu);
  95. view_set_previous_callback(submenu_view, subghz_exit);
  96. view_dispatcher_add_view(subghz->view_dispatcher, SubGhzViewMenu, submenu_view);
  97. // Basic Test Module
  98. subghz->subghz_test_basic = subghz_test_basic_alloc();
  99. view_dispatcher_add_view(
  100. subghz->view_dispatcher,
  101. SubGhzViewTestBasic,
  102. subghz_test_basic_get_view(subghz->subghz_test_basic));
  103. // Packet Test
  104. subghz->subghz_test_packet = subghz_test_packet_alloc();
  105. view_dispatcher_add_view(
  106. subghz->view_dispatcher,
  107. SubGhzViewTestPacket,
  108. subghz_test_packet_get_view(subghz->subghz_test_packet));
  109. // Static send
  110. subghz->subghz_static = subghz_static_alloc();
  111. view_dispatcher_add_view(
  112. subghz->view_dispatcher, SubGhzViewStatic, subghz_static_get_view(subghz->subghz_static));
  113. // Switch to menu
  114. view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewMenu);
  115. return subghz;
  116. }
  117. void subghz_free(SubGhz* subghz) {
  118. furi_assert(subghz);
  119. // Packet Test
  120. view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewTestPacket);
  121. subghz_test_packet_free(subghz->subghz_test_packet);
  122. // Basic Test
  123. view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewTestBasic);
  124. subghz_test_basic_free(subghz->subghz_test_basic);
  125. // Submenu
  126. view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewMenu);
  127. submenu_free(subghz->submenu);
  128. // View Dispatcher
  129. view_dispatcher_free(subghz->view_dispatcher);
  130. // GUI
  131. furi_record_close("gui");
  132. subghz->gui = NULL;
  133. // The rest
  134. free(subghz);
  135. }
  136. int32_t subghz_app(void* context) {
  137. SubGhz* subghz = subghz_alloc();
  138. view_dispatcher_run(subghz->view_dispatcher);
  139. subghz_free(subghz);
  140. return 0;
  141. }