lfrfid_debug.c 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #include "lfrfid_debug_i.h"
  2. static bool lfrfid_debug_custom_event_callback(void* context, uint32_t event) {
  3. furi_assert(context);
  4. LfRfidDebug* app = context;
  5. return scene_manager_handle_custom_event(app->scene_manager, event);
  6. }
  7. static bool lfrfid_debug_back_event_callback(void* context) {
  8. furi_assert(context);
  9. LfRfidDebug* app = context;
  10. return scene_manager_handle_back_event(app->scene_manager);
  11. }
  12. static LfRfidDebug* lfrfid_debug_alloc() {
  13. LfRfidDebug* app = malloc(sizeof(LfRfidDebug));
  14. app->view_dispatcher = view_dispatcher_alloc();
  15. app->scene_manager = scene_manager_alloc(&lfrfid_debug_scene_handlers, app);
  16. view_dispatcher_enable_queue(app->view_dispatcher);
  17. view_dispatcher_set_event_callback_context(app->view_dispatcher, app);
  18. view_dispatcher_set_custom_event_callback(
  19. app->view_dispatcher, lfrfid_debug_custom_event_callback);
  20. view_dispatcher_set_navigation_event_callback(
  21. app->view_dispatcher, lfrfid_debug_back_event_callback);
  22. // Open GUI record
  23. app->gui = furi_record_open(RECORD_GUI);
  24. view_dispatcher_attach_to_gui(app->view_dispatcher, app->gui, ViewDispatcherTypeFullscreen);
  25. // Submenu
  26. app->submenu = submenu_alloc();
  27. view_dispatcher_add_view(
  28. app->view_dispatcher, LfRfidDebugViewSubmenu, submenu_get_view(app->submenu));
  29. // Tune view
  30. app->tune_view = lfrfid_debug_view_tune_alloc();
  31. view_dispatcher_add_view(
  32. app->view_dispatcher,
  33. LfRfidDebugViewTune,
  34. lfrfid_debug_view_tune_get_view(app->tune_view));
  35. return app;
  36. }
  37. static void lfrfid_debug_free(LfRfidDebug* app) {
  38. furi_assert(app);
  39. // Submenu
  40. view_dispatcher_remove_view(app->view_dispatcher, LfRfidDebugViewSubmenu);
  41. submenu_free(app->submenu);
  42. // Tune view
  43. view_dispatcher_remove_view(app->view_dispatcher, LfRfidDebugViewTune);
  44. lfrfid_debug_view_tune_free(app->tune_view);
  45. // View Dispatcher
  46. view_dispatcher_free(app->view_dispatcher);
  47. // Scene Manager
  48. scene_manager_free(app->scene_manager);
  49. // GUI
  50. furi_record_close(RECORD_GUI);
  51. app->gui = NULL;
  52. free(app);
  53. }
  54. int32_t lfrfid_debug_app(void* p) {
  55. UNUSED(p);
  56. LfRfidDebug* app = lfrfid_debug_alloc();
  57. scene_manager_next_scene(app->scene_manager, LfRfidDebugSceneStart);
  58. view_dispatcher_run(app->view_dispatcher);
  59. lfrfid_debug_free(app);
  60. return 0;
  61. }