screen_manager.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  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 (uint8_t)0
  11. #define SCM_FRAMWORK_TYPE_GUI (uint8_t)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); // 安装ui框架的回调函数
  32. int (*uninstall)(void *args); // 卸载ui框架的回调函数
  33. int (*enable)(void *args); // 启用ui框架的回调函数
  34. int (*disable)(void *args); // 禁用ui框架的回调函数
  35. int (*change)(struct scm_buffer_info_t *buf); // 改变ui框架的帧缓冲区的回调函数
  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. };
  46. /**
  47. * @brief 初始化屏幕管理模块
  48. *
  49. */
  50. void scm_init();
  51. /**
  52. * @brief 当内存管理单元被初始化之后,重新处理帧缓冲区问题
  53. *
  54. */
  55. void scm_reinit();
  56. /**
  57. * @brief 向屏幕管理器注册UI框架(动态获取框架对象结构体)
  58. *
  59. * @param name 框架名
  60. * @param type 类型
  61. * @param ops 框架操作方法
  62. * @return int
  63. */
  64. int scm_register_alloc(const char *name, const uint8_t type, struct scm_ui_framework_operations_t *ops);
  65. /**
  66. * @brief 向屏幕管理器注册UI框架(静态设置的框架对象)
  67. *
  68. * @param ui 框架结构体指针
  69. * @return int 错误码
  70. */
  71. int scm_register(struct scm_ui_framework_t *ui);
  72. /**
  73. * @brief 向屏幕管理器卸载UI框架
  74. *
  75. * @param ui ui框架结构体
  76. * @return int
  77. */
  78. int scm_unregister(struct scm_ui_framework_t *ui);
  79. /**
  80. * @brief 向屏幕管理器卸载动态创建的UI框架
  81. *
  82. * @param ui ui框架结构体
  83. * @return int
  84. */
  85. int scm_unregister_alloc(struct scm_ui_framework_t *ui);
  86. /**
  87. * @brief 允许动态申请内存
  88. *
  89. * @return int
  90. */
  91. int scm_enable_alloc();
  92. /**
  93. * @brief 允许双缓冲区
  94. *
  95. * @return int
  96. */
  97. int scm_enable_double_buffer();
  98. /**
  99. * @brief 启用某个ui框架,将它的帧缓冲区渲染到屏幕上
  100. *
  101. * @param ui 要启动的ui框架
  102. * @return int 返回码
  103. */
  104. int scm_framework_enable(struct scm_ui_framework_t *ui);