subghz.c 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. #include "subghz_i.h"
  2. osThreadId subghz_thread_id = NULL;
  3. void subghz_menu_callback(void* context, uint32_t index) {
  4. furi_assert(context);
  5. SubGhz* subghz = context;
  6. if(index == 0) {
  7. view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewTestBasic);
  8. } else if(index == 1) {
  9. view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewTestPacket);
  10. } else if(index == 2) {
  11. view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewStatic);
  12. }
  13. }
  14. uint32_t subghz_exit(void* context) {
  15. osThreadResume(subghz_thread_id);
  16. return VIEW_NONE;
  17. }
  18. SubGhz* subghz_alloc() {
  19. SubGhz* subghz = furi_alloc(sizeof(SubGhz));
  20. // Thread id
  21. subghz_thread_id = osThreadGetId();
  22. // GUI
  23. subghz->gui = furi_record_open("gui");
  24. // View Dispatcher
  25. subghz->view_dispatcher = view_dispatcher_alloc();
  26. view_dispatcher_attach_to_gui(
  27. subghz->view_dispatcher, subghz->gui, ViewDispatcherTypeFullscreen);
  28. // Menu
  29. subghz->submenu = submenu_alloc();
  30. submenu_add_item(subghz->submenu, "Basic Test", 0, subghz_menu_callback, subghz);
  31. submenu_add_item(subghz->submenu, "Packet Test", 1, subghz_menu_callback, subghz);
  32. submenu_add_item(subghz->submenu, "Static Code", 2, subghz_menu_callback, subghz);
  33. View* submenu_view = submenu_get_view(subghz->submenu);
  34. view_set_previous_callback(submenu_view, subghz_exit);
  35. view_dispatcher_add_view(subghz->view_dispatcher, SubGhzViewMenu, submenu_view);
  36. // Basic Test Module
  37. subghz->subghz_test_basic = subghz_test_basic_alloc();
  38. view_dispatcher_add_view(
  39. subghz->view_dispatcher,
  40. SubGhzViewTestBasic,
  41. subghz_test_basic_get_view(subghz->subghz_test_basic));
  42. // Packet Test
  43. subghz->subghz_test_packet = subghz_test_packet_alloc();
  44. view_dispatcher_add_view(
  45. subghz->view_dispatcher,
  46. SubGhzViewTestPacket,
  47. subghz_test_packet_get_view(subghz->subghz_test_packet));
  48. // Static send
  49. subghz->subghz_static = subghz_static_alloc();
  50. view_dispatcher_add_view(
  51. subghz->view_dispatcher, SubGhzViewStatic, subghz_static_get_view(subghz->subghz_static));
  52. // Switch to menu
  53. view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewMenu);
  54. return subghz;
  55. }
  56. void subghz_free(SubGhz* subghz) {
  57. furi_assert(subghz);
  58. // Packet Test
  59. view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewTestPacket);
  60. subghz_test_packet_free(subghz->subghz_test_packet);
  61. // Basic Test
  62. view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewTestBasic);
  63. subghz_test_basic_free(subghz->subghz_test_basic);
  64. // Submenu
  65. view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewMenu);
  66. submenu_free(subghz->submenu);
  67. // View Dispatcher
  68. view_dispatcher_free(subghz->view_dispatcher);
  69. // GUI
  70. furi_record_close("gui");
  71. subghz->gui = NULL;
  72. // The rest
  73. free(subghz);
  74. }
  75. int32_t subghz_app(void* context) {
  76. SubGhz* subghz = subghz_alloc();
  77. osThreadSuspend(subghz_thread_id);
  78. subghz_free(subghz);
  79. return 0;
  80. }