bt_debug_app.c 3.0 KB

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