bt_debug_app.c 3.7 KB

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