display_test.c 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. #include "display_test.h"
  2. #include <furi-hal.h>
  3. #include <furi.h>
  4. #include <gui/gui.h>
  5. #include <gui/view_dispatcher.h>
  6. #include <gui/modules/submenu.h>
  7. #include <gui/modules/variable-item-list.h>
  8. #include "view_display_test.h"
  9. typedef struct {
  10. Gui* gui;
  11. ViewDispatcher* view_dispatcher;
  12. ViewDisplayTest* view_display_test;
  13. VariableItemList* variable_item_list;
  14. Submenu* submenu;
  15. } DisplayTest;
  16. typedef enum {
  17. DisplayTestViewSubmenu,
  18. DisplayTestViewConfigure,
  19. DisplayTestViewDisplayTest,
  20. } DisplayTestView;
  21. static void display_test_submenu_callback(void* context, uint32_t index) {
  22. DisplayTest* instance = (DisplayTest*)context;
  23. view_dispatcher_switch_to_view(instance->view_dispatcher, index);
  24. }
  25. static uint32_t display_test_previous_callback(void* context) {
  26. return DisplayTestViewSubmenu;
  27. }
  28. static uint32_t display_test_exit_callback(void* context) {
  29. return VIEW_NONE;
  30. }
  31. DisplayTest* display_test_alloc() {
  32. DisplayTest* instance = furi_alloc(sizeof(DisplayTest));
  33. View* view = NULL;
  34. instance->gui = furi_record_open("gui");
  35. instance->view_dispatcher = view_dispatcher_alloc();
  36. instance->view_display_test = view_display_test_alloc();
  37. view_dispatcher_enable_queue(instance->view_dispatcher);
  38. view_dispatcher_attach_to_gui(
  39. instance->view_dispatcher, instance->gui, ViewDispatcherTypeFullscreen);
  40. view = view_display_test_get_view(instance->view_display_test);
  41. view_set_previous_callback(view, display_test_previous_callback);
  42. view_dispatcher_add_view(instance->view_dispatcher, DisplayTestViewDisplayTest, view);
  43. instance->submenu = submenu_alloc();
  44. view = submenu_get_view(instance->submenu);
  45. view_set_previous_callback(view, display_test_exit_callback);
  46. view_dispatcher_add_view(instance->view_dispatcher, DisplayTestViewSubmenu, view);
  47. submenu_add_item(
  48. instance->submenu,
  49. "Test",
  50. DisplayTestViewDisplayTest,
  51. display_test_submenu_callback,
  52. instance);
  53. // submenu_add_item(instance->submenu, "Configure", DisplayTestViewConfigure, display_test_submenu_callback, instance);
  54. return instance;
  55. }
  56. void display_test_free(DisplayTest* instance) {
  57. view_dispatcher_remove_view(instance->view_dispatcher, DisplayTestViewSubmenu);
  58. submenu_free(instance->submenu);
  59. view_dispatcher_remove_view(instance->view_dispatcher, DisplayTestViewDisplayTest);
  60. view_display_test_free(instance->view_display_test);
  61. view_dispatcher_free(instance->view_dispatcher);
  62. furi_record_close("gui");
  63. free(instance);
  64. }
  65. int32_t display_test_run(DisplayTest* instance) {
  66. view_dispatcher_switch_to_view(instance->view_dispatcher, DisplayTestViewSubmenu);
  67. view_dispatcher_run(instance->view_dispatcher);
  68. return 0;
  69. }
  70. int32_t display_test_app(void* p) {
  71. DisplayTest* instance = display_test_alloc();
  72. int32_t ret = display_test_run(instance);
  73. display_test_free(instance);
  74. return ret;
  75. }