screen_manager.h 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. #pragma once
  2. #include <common/sys/types.h>
  3. #include <common/glib.h>
  4. // 帧缓冲区标志位
  5. #define SCM_BF_FB (1 << 0) // 当前buffer是设备显存中的帧缓冲区
  6. #define SCM_BF_DB (1 << 1) // 当前buffer是双缓冲
  7. #define SCM_BF_TEXT (1 << 2) // 使用文本模式
  8. #define SCM_BF_PIXEL (1 << 3) // 使用图像模式
  9. // ui框架类型
  10. #define SCM_FRAMWORK_TYPE_TEXT 0
  11. #define SCM_FRAMWORK_TYPE_GUI 1
  12. /**
  13. * @brief 帧缓冲区信息结构体
  14. *
  15. */
  16. struct scm_buffer_info_t
  17. {
  18. uint32_t width; // 帧缓冲区宽度(pixel或columns)
  19. uint32_t height; // 帧缓冲区高度(pixel或lines)
  20. uint32_t size; // 帧缓冲区大小(bytes)
  21. uint32_t bit_depth; // 像素点位深度
  22. uint64_t vaddr; // 帧缓冲区的地址
  23. uint64_t flags; // 帧缓冲区标志位
  24. };
  25. /**
  26. * @brief 上层ui框架应当实现的接口
  27. *
  28. */
  29. struct scm_ui_framework_operations_t
  30. {
  31. int (*install)(struct scm_buffer_info_t *buf);
  32. int (*uninstall)(void *args);
  33. int (*enable)(void *args);
  34. int (*disable)(void *args);
  35. int (*change)(struct scm_buffer_info_t *buf);
  36. };
  37. struct scm_ui_framework_t
  38. {
  39. struct List list;
  40. uint16_t id;
  41. char name[16];
  42. uint8_t type;
  43. struct scm_ui_framework_operations_t *ui_ops;
  44. struct scm_buffer_info_t *buf;
  45. }__attribute__((aligned(sizeof(uint64_t))));
  46. /**
  47. * @brief 初始化屏幕管理模块
  48. *
  49. */
  50. void scm_init();
  51. /**
  52. * @brief 向屏幕管理器注册UI框架(动态获取框架对象结构体)
  53. *
  54. * @param name 框架名
  55. * @param type 类型
  56. * @param ops 框架操作方法
  57. * @return int
  58. */
  59. int scm_register_alloc(const char* name, const uint8_t type, struct scm_ui_framework_operations_t * ops);
  60. /**
  61. * @brief 向屏幕管理器注册UI框架(静态设置的框架对象)
  62. *
  63. * @param ui 框架结构体指针
  64. * @return int 错误码
  65. */
  66. int scm_register(struct scm_ui_framework_t*ui);
  67. /**
  68. * @brief 向屏幕管理器卸载UI框架
  69. *
  70. * @param ui ui框架结构体
  71. * @return int
  72. */
  73. int scm_unregister(struct scm_ui_framework_t*ui);
  74. /**
  75. * @brief 向屏幕管理器卸载动态创建的UI框架
  76. *
  77. * @param ui ui框架结构体
  78. * @return int
  79. */
  80. int scm_unregister_alloc(struct scm_ui_framework_t*ui);
  81. /**
  82. * @brief 允许动态申请内存
  83. *
  84. * @return int
  85. */
  86. int scm_enable_alloc();
  87. /**
  88. * @brief 允许双缓冲区
  89. *
  90. * @return int
  91. */
  92. int scm_enable_double_buffer();
  93. /**
  94. * @brief 启用某个ui框架,将它的帧缓冲区渲染到屏幕上
  95. *
  96. * @param ui 要启动的ui框架
  97. * @return int 返回码
  98. */
  99. int scm_framework_enable(struct scm_ui_framework_t*ui);