summaryrefslogtreecommitdiff
path: root/components/rtgui/server/driver.c
diff options
context:
space:
mode:
Diffstat (limited to 'components/rtgui/server/driver.c')
-rw-r--r--components/rtgui/server/driver.c96
1 files changed, 48 insertions, 48 deletions
diff --git a/components/rtgui/server/driver.c b/components/rtgui/server/driver.c
index 5e086f022e..43b4b8ac43 100644
--- a/components/rtgui/server/driver.c
+++ b/components/rtgui/server/driver.c
@@ -13,72 +13,72 @@
*/
#include <rtgui/driver.h>
-#ifdef RTGUI_USING_GRAPHIC_DRIVER_LIST
-struct rtgui_list_node _rtgui_graphic_driver_list = {RT_NULL};
+struct rtgui_graphic_driver _driver;
-void rtgui_graphic_driver_add(struct rtgui_graphic_driver* driver)
+extern const struct rtgui_graphic_driver_ops *rtgui_pixel_device_get_ops(int pixel_format);
+extern const struct rtgui_graphic_driver_ops *rtgui_framebuffer_get_ops(int pixel_format);
+
+/* get default driver */
+struct rtgui_graphic_driver* rtgui_graphic_driver_get_default()
{
- rtgui_list_insert(&_rtgui_graphic_driver_list, &(driver->list));
+ return &_driver;
}
-void rtgui_graphic_driver_remove(struct rtgui_graphic_driver* driver)
+void rtgui_graphic_driver_get_rect(const struct rtgui_graphic_driver *driver, rtgui_rect_t *rect)
{
- rtgui_list_remove(&_rtgui_graphic_driver_list, &(driver->list));
+ RT_ASSERT(rect != RT_NULL);
+ RT_ASSERT(driver != RT_NULL);
+
+ rect->x1 = rect->y1 = 0;
+ rect->x2 = driver->width;
+ rect->y2 = driver->height;
}
-struct rtgui_graphic_driver* rtgui_graphic_driver_find(char* name)
+rt_err_t rtgui_graphic_set_device(rt_device_t device)
{
- struct rtgui_list_node* node;
- struct rtgui_graphic_driver* driver;
+ rt_err_t result;
+ struct rt_lcd_info info;
- /* search in list */
- rtgui_list_foreach(node, &(_rtgui_graphic_driver_list))
+ /* get framebuffer address */
+ result = rt_device_control(device, LCD_GET_INFO, &info);
+ if (result != RT_EOK)
{
- driver = rtgui_list_entry(node, struct rtgui_graphic_driver, list);
-
- /* find it */
- if (rt_strncmp(driver->name, name, RTGUI_NAME_MAX) == 0)
- {
- return driver;
- }
+ /* get device information failed */
+ return -RT_ERROR;
}
- return RT_NULL;
-}
-
-struct rtgui_graphic_driver* rtgui_graphic_driver_get_default()
-{
- return rtgui_list_entry(_rtgui_graphic_driver_list.next,
- struct rtgui_graphic_driver, list);
-}
-#else
-static const struct rtgui_graphic_driver* _default_graphic_driver = RT_NULL;
+ /* initialize framebuffer driver */
+ _driver.device = device;
+ _driver.pixel_format = info.pixel_format;
+ _driver.byte_per_pixel = info.byte_per_pixel;
+ _driver.width = info.width;
+ _driver.height = info.height;
+ _driver.pitch = _driver.width * _driver.byte_per_pixel;
+ _driver.framebuffer = info.framebuffer;
-void rtgui_graphic_driver_add(const struct rtgui_graphic_driver* driver)
-{
- _default_graphic_driver = driver;
+ if (info.framebuffer != RT_NULL)
+ {
+ /* is a frame buffer device */
+ _driver.ops = rtgui_framebuffer_get_ops(_driver.pixel_format);
+ }
+ else
+ {
+ /* is a pixel device */
+ _driver.ops = rtgui_pixel_device_get_ops(_driver.pixel_format);
+ }
+
+ return RT_EOK;
}
-const struct rtgui_graphic_driver* rtgui_graphic_driver_get_default()
+/* screen update */
+void rtgui_graphic_driver_screen_update(struct rtgui_graphic_driver* driver, rtgui_rect_t *rect)
{
- return _default_graphic_driver;
-}
-#endif
-
-
-void rtgui_graphic_driver_get_rect(const struct rtgui_graphic_driver *driver, rtgui_rect_t *rect)
-{
- RT_ASSERT(rect != RT_NULL);
- RT_ASSERT(driver != RT_NULL);
-
- rect->x1 = rect->y1 = 0;
- rect->x2 = driver->width;
- rect->y2 = driver->height;
+ rt_device_control(driver->device, LCD_RECT_UPDATE, rect);
}
-void rtgui_graphic_driver_get_default_rect(rtgui_rect_t *rect)
+/* get video frame buffer */
+rt_uint8_t* rtgui_graphic_driver_get_framebuffer(struct rtgui_graphic_driver* driver)
{
- /* return default the extent of default driver */
- rtgui_graphic_driver_get_rect(rtgui_graphic_driver_get_default(), rect);
+ return (rt_uint8_t*)driver->framebuffer;
}