cligui_main_i.h 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #pragma once
  2. #include <furi.h>
  3. #include <furi_hal.h>
  4. #include <furi_hal_usb_cdc.h>
  5. #include <furi_hal_usb.h>
  6. #include <gui/gui.h>
  7. #include <gui/view_dispatcher.h>
  8. #include <gui/modules/text_box.h>
  9. #include <gui/modules/text_input.h>
  10. #include <m-dict.h>
  11. #include <loader/loader.h>
  12. DICT_DEF2(ViewDict, uint32_t, M_DEFAULT_OPLIST, View*, M_PTR_OPLIST)
  13. #define TEXT_BOX_STORE_SIZE (4096)
  14. #define TEXT_INPUT_STORE_SIZE (512)
  15. typedef struct {
  16. FuriMessageQueue* queue;
  17. Gui* gui;
  18. ViewPort* view_port;
  19. ViewDict_t views;
  20. View* current_view;
  21. View* ongoing_input_view;
  22. uint8_t ongoing_input;
  23. ViewDispatcherCustomEventCallback custom_event_callback;
  24. ViewDispatcherNavigationEventCallback navigation_event_callback;
  25. ViewDispatcherTickEventCallback tick_event_callback;
  26. uint32_t tick_period;
  27. void* event_context;
  28. } ViewDispatcher_internal;
  29. typedef struct {
  30. Gui* gui;
  31. bool is_enabled;
  32. ViewPortOrientation orientation;
  33. uint8_t width;
  34. uint8_t height;
  35. ViewPortDrawCallback draw_callback;
  36. void* draw_callback_context;
  37. ViewPortInputCallback input_callback;
  38. void* input_callback_context;
  39. } ViewPort_internal;
  40. typedef struct {
  41. FuriThreadId loader_thread;
  42. const void* application;
  43. FuriThread* application_thread;
  44. char* application_arguments;
  45. void* cli;
  46. void* gui;
  47. void* view_dispatcher;
  48. void* primary_menu;
  49. void* plugins_menu;
  50. void* debug_menu;
  51. void* settings_menu;
  52. volatile uint8_t lock_count;
  53. void* pubsub;
  54. } Loader_internal;
  55. typedef enum {
  56. ViewTextInput,
  57. ViewConsoleOutput,
  58. } CliguiState;
  59. typedef struct {
  60. CliguiState state;
  61. struct {
  62. FuriStreamBuffer* app_tx;
  63. FuriStreamBuffer* app_rx;
  64. } streams;
  65. } CliguiData;
  66. typedef struct {
  67. CliguiData* data;
  68. Gui* gui;
  69. TextBox* text_box;
  70. FuriString* text_box_store;
  71. char text_input_store[TEXT_INPUT_STORE_SIZE + 1];
  72. TextInput* text_input;
  73. ViewDispatcher* view_dispatcher;
  74. ViewDispatcher_internal* view_dispatcher_i;
  75. } CliguiApp;