From bbf68d15e513d4799f651acd4fd9f88fe3a03ffd Mon Sep 17 00:00:00 2001 From: "bernard.xiong@gmail.com" Date: Sun, 5 Jun 2011 15:16:41 +0000 Subject: change graphic driver as RT-Thread device driver git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1454 bbd45198-f89e-11dd-88c7-29a3b14d5316 --- components/rtgui/server/driver.c | 96 ++++++++++++++++++++-------------------- 1 file changed, 48 insertions(+), 48 deletions(-) (limited to 'components/rtgui/server/driver.c') 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 -#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; } -- cgit v1.3.1