bt_debug_app.c 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. #include "bt_debug_app.h"
  2. #include <furi-hal-bt.h>
  3. enum BtDebugSubmenuIndex {
  4. BtDebugSubmenuIndexCarrierTest,
  5. BtDebugSubmenuIndexPacketTest,
  6. };
  7. void bt_debug_submenu_callback(void* context, uint32_t index) {
  8. furi_assert(context);
  9. BtDebugApp* app = context;
  10. if(index == BtDebugSubmenuIndexCarrierTest) {
  11. view_dispatcher_switch_to_view(app->view_dispatcher, BtDebugAppViewCarrierTest);
  12. } else if(index == BtDebugSubmenuIndexPacketTest) {
  13. view_dispatcher_switch_to_view(app->view_dispatcher, BtDebugAppViewPacketTest);
  14. }
  15. }
  16. uint32_t bt_debug_exit(void* context) {
  17. return VIEW_NONE;
  18. }
  19. uint32_t bt_debug_start_view(void* context) {
  20. return BtDebugAppViewSubmenu;
  21. }
  22. BtDebugApp* bt_debug_app_alloc() {
  23. BtDebugApp* app = furi_alloc(sizeof(BtDebugApp));
  24. // Load settings
  25. bt_settings_load(&app->settings);
  26. // Gui
  27. app->gui = furi_record_open("gui");
  28. // View dispatcher
  29. app->view_dispatcher = view_dispatcher_alloc();
  30. view_dispatcher_enable_queue(app->view_dispatcher);
  31. view_dispatcher_attach_to_gui(app->view_dispatcher, app->gui, ViewDispatcherTypeFullscreen);
  32. // Views
  33. app->submenu = submenu_alloc();
  34. submenu_add_item(
  35. app->submenu,
  36. "Carrier test",
  37. BtDebugSubmenuIndexCarrierTest,
  38. bt_debug_submenu_callback,
  39. app);
  40. submenu_add_item(
  41. app->submenu, "Packet test", BtDebugSubmenuIndexPacketTest, bt_debug_submenu_callback, app);
  42. view_set_previous_callback(submenu_get_view(app->submenu), bt_debug_exit);
  43. view_dispatcher_add_view(
  44. app->view_dispatcher, BtDebugAppViewSubmenu, submenu_get_view(app->submenu));
  45. app->bt_carrier_test = bt_carrier_test_alloc();
  46. view_set_previous_callback(
  47. bt_carrier_test_get_view(app->bt_carrier_test), bt_debug_start_view);
  48. view_dispatcher_add_view(
  49. app->view_dispatcher,
  50. BtDebugAppViewCarrierTest,
  51. bt_carrier_test_get_view(app->bt_carrier_test));
  52. app->bt_packet_test = bt_packet_test_alloc();
  53. view_set_previous_callback(bt_packet_test_get_view(app->bt_packet_test), bt_debug_start_view);
  54. view_dispatcher_add_view(
  55. app->view_dispatcher,
  56. BtDebugAppViewPacketTest,
  57. bt_packet_test_get_view(app->bt_packet_test));
  58. // Switch to menu
  59. view_dispatcher_switch_to_view(app->view_dispatcher, BtDebugAppViewSubmenu);
  60. return app;
  61. }
  62. void bt_debug_app_free(BtDebugApp* app) {
  63. furi_assert(app);
  64. // Free views
  65. view_dispatcher_remove_view(app->view_dispatcher, BtDebugAppViewSubmenu);
  66. submenu_free(app->submenu);
  67. view_dispatcher_remove_view(app->view_dispatcher, BtDebugAppViewCarrierTest);
  68. bt_carrier_test_free(app->bt_carrier_test);
  69. view_dispatcher_remove_view(app->view_dispatcher, BtDebugAppViewPacketTest);
  70. bt_packet_test_free(app->bt_packet_test);
  71. view_dispatcher_free(app->view_dispatcher);
  72. // Close gui record
  73. furi_record_close("gui");
  74. app->gui = NULL;
  75. // Free rest
  76. free(app);
  77. }
  78. int32_t bt_debug_app(void* p) {
  79. BtDebugApp* app = bt_debug_app_alloc();
  80. // Stop advertising
  81. furi_hal_bt_stop_advertising();
  82. view_dispatcher_run(app->view_dispatcher);
  83. // Restart advertising
  84. if(app->settings.enabled) {
  85. furi_hal_bt_start_advertising();
  86. }
  87. bt_debug_app_free(app);
  88. return 0;
  89. }