subghz.c 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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. }
  11. }
  12. uint32_t subghz_exit(void* context) {
  13. osThreadResume(subghz_thread_id);
  14. return VIEW_NONE;
  15. }
  16. SubGhz* subghz_alloc() {
  17. SubGhz* subghz = furi_alloc(sizeof(SubGhz));
  18. // Thread id
  19. subghz_thread_id = osThreadGetId();
  20. // GUI
  21. subghz->gui = furi_record_open("gui");
  22. // View Dispatcher
  23. subghz->view_dispatcher = view_dispatcher_alloc();
  24. view_dispatcher_attach_to_gui(
  25. subghz->view_dispatcher, subghz->gui, ViewDispatcherTypeFullscreen);
  26. // Menu
  27. subghz->submenu = submenu_alloc();
  28. submenu_add_item(subghz->submenu, "Basic Test", 0, subghz_menu_callback, subghz);
  29. submenu_add_item(subghz->submenu, "Packet Test", 1, subghz_menu_callback, subghz);
  30. View* submenu_view = submenu_get_view(subghz->submenu);
  31. view_set_previous_callback(submenu_view, subghz_exit);
  32. view_dispatcher_add_view(subghz->view_dispatcher, SubGhzViewMenu, submenu_view);
  33. // Basic Test Module
  34. subghz->subghz_test_basic = subghz_test_basic_alloc();
  35. view_dispatcher_add_view(
  36. subghz->view_dispatcher,
  37. SubGhzViewTestBasic,
  38. subghz_test_basic_get_view(subghz->subghz_test_basic));
  39. // Packet Test
  40. subghz->subghz_test_packet = subghz_test_packet_alloc();
  41. view_dispatcher_add_view(
  42. subghz->view_dispatcher,
  43. SubGhzViewTestPacket,
  44. subghz_test_packet_get_view(subghz->subghz_test_packet));
  45. // Switch to menu
  46. view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewMenu);
  47. return subghz;
  48. }
  49. void subghz_free(SubGhz* subghz) {
  50. furi_assert(subghz);
  51. // Packet Test
  52. view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewTestPacket);
  53. subghz_test_packet_free(subghz->subghz_test_packet);
  54. // Basic Test
  55. view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewTestBasic);
  56. subghz_test_basic_free(subghz->subghz_test_basic);
  57. // Submenu
  58. view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewMenu);
  59. submenu_free(subghz->submenu);
  60. // View Dispatcher
  61. view_dispatcher_free(subghz->view_dispatcher);
  62. // GUI
  63. furi_record_close("gui");
  64. subghz->gui = NULL;
  65. // The rest
  66. free(subghz);
  67. }
  68. int32_t subghz_app(void* context) {
  69. SubGhz* subghz = subghz_alloc();
  70. osThreadSuspend(subghz_thread_id);
  71. subghz_free(subghz);
  72. return 0;
  73. }