subghz.c 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. #include "subghz_i.h"
  2. const uint32_t subghz_frequencies[] = {
  3. /* 300 - 348 */
  4. 300000000,
  5. 315000000,
  6. 348000000,
  7. /* 387 - 464 */
  8. 387000000,
  9. 433075000, /* LPD433 first */
  10. 433920000, /* LPD433 mid */
  11. 434775000, /* LPD433 last channels */
  12. 438900000,
  13. 464000000,
  14. /* 779 - 928 */
  15. 779000000,
  16. 868350000,
  17. 915000000,
  18. 925000000,
  19. 928000000,
  20. };
  21. const uint32_t subghz_frequencies_count = sizeof(subghz_frequencies) / sizeof(uint32_t);
  22. const uint32_t subghz_frequencies_433_92 = 5;
  23. void subghz_menu_callback(void* context, uint32_t index) {
  24. furi_assert(context);
  25. SubGhz* subghz = context;
  26. view_dispatcher_switch_to_view(subghz->view_dispatcher, index);
  27. }
  28. uint32_t subghz_exit(void* context) {
  29. return VIEW_NONE;
  30. }
  31. SubGhz* subghz_alloc() {
  32. SubGhz* subghz = furi_alloc(sizeof(SubGhz));
  33. // GUI
  34. subghz->gui = furi_record_open("gui");
  35. // View Dispatcher
  36. subghz->view_dispatcher = view_dispatcher_alloc();
  37. view_dispatcher_enable_queue(subghz->view_dispatcher);
  38. view_dispatcher_attach_to_gui(
  39. subghz->view_dispatcher, subghz->gui, ViewDispatcherTypeFullscreen);
  40. // Menu
  41. subghz->submenu = submenu_alloc();
  42. submenu_add_item(subghz->submenu, "Capture", SubGhzViewCapture, subghz_menu_callback, subghz);
  43. submenu_add_item(
  44. subghz->submenu, "Basic Test", SubGhzViewTestBasic, subghz_menu_callback, subghz);
  45. submenu_add_item(
  46. subghz->submenu, "Packet Test", SubGhzViewTestPacket, subghz_menu_callback, subghz);
  47. submenu_add_item(
  48. subghz->submenu, "Static Code", SubGhzViewStatic, subghz_menu_callback, subghz);
  49. View* submenu_view = submenu_get_view(subghz->submenu);
  50. view_set_previous_callback(submenu_view, subghz_exit);
  51. view_dispatcher_add_view(subghz->view_dispatcher, SubGhzViewMenu, submenu_view);
  52. // Capture
  53. subghz->subghz_capture = subghz_capture_alloc();
  54. view_dispatcher_add_view(
  55. subghz->view_dispatcher,
  56. SubGhzViewCapture,
  57. subghz_capture_get_view(subghz->subghz_capture));
  58. // Basic Test Module
  59. subghz->subghz_test_basic = subghz_test_basic_alloc();
  60. view_dispatcher_add_view(
  61. subghz->view_dispatcher,
  62. SubGhzViewTestBasic,
  63. subghz_test_basic_get_view(subghz->subghz_test_basic));
  64. // Packet Test
  65. subghz->subghz_test_packet = subghz_test_packet_alloc();
  66. view_dispatcher_add_view(
  67. subghz->view_dispatcher,
  68. SubGhzViewTestPacket,
  69. subghz_test_packet_get_view(subghz->subghz_test_packet));
  70. // Static send
  71. subghz->subghz_static = subghz_static_alloc();
  72. view_dispatcher_add_view(
  73. subghz->view_dispatcher, SubGhzViewStatic, subghz_static_get_view(subghz->subghz_static));
  74. // Switch to menu
  75. view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewMenu);
  76. return subghz;
  77. }
  78. void subghz_free(SubGhz* subghz) {
  79. furi_assert(subghz);
  80. // Packet Test
  81. view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewStatic);
  82. subghz_static_free(subghz->subghz_static);
  83. // Packet Test
  84. view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewTestPacket);
  85. subghz_test_packet_free(subghz->subghz_test_packet);
  86. // Basic Test
  87. view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewTestBasic);
  88. subghz_test_basic_free(subghz->subghz_test_basic);
  89. // Submenu
  90. view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewMenu);
  91. submenu_free(subghz->submenu);
  92. // Capture
  93. view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewCapture);
  94. subghz_capture_free(subghz->subghz_capture);
  95. // View Dispatcher
  96. view_dispatcher_free(subghz->view_dispatcher);
  97. // GUI
  98. furi_record_close("gui");
  99. subghz->gui = NULL;
  100. // The rest
  101. free(subghz);
  102. }
  103. int32_t subghz_app(void* context) {
  104. SubGhz* subghz = subghz_alloc();
  105. view_dispatcher_run(subghz->view_dispatcher);
  106. subghz_free(subghz);
  107. return 0;
  108. }