diff options
| author | Che-Liang Chiou <clchiou@chromium.org> | 2011-10-20 23:04:22 +0000 | 
|---|---|---|
| committer | Anatolij Gustschin <agust@denx.de> | 2011-11-15 23:58:27 +0100 | 
| commit | a2a5729fc1247bb45d794e9d731c0b03bf58096f (patch) | |
| tree | a89f1b03ebc2e3987b8068aefe0f0a30c1c357c4 /api | |
| parent | d3983ee85325d2be730830ebcf82585ee7cd2ecb (diff) | |
| download | olio-uboot-2014.01-a2a5729fc1247bb45d794e9d731c0b03bf58096f.tar.xz olio-uboot-2014.01-a2a5729fc1247bb45d794e9d731c0b03bf58096f.zip | |
api: export LCD device to external apps
This patch exports LCD info-query and bitmap-rendering functions to
external apps.
This patch is tested on a Seaboard.  Because the LCD driver is not yet
upstreamed, the test was done in a local downstream repo.
Signed-off-by: Che-Liang Chiou <clchiou@chromium.org>
Diffstat (limited to 'api')
| -rw-r--r-- | api/Makefile | 3 | ||||
| -rw-r--r-- | api/api.c | 47 | ||||
| -rw-r--r-- | api/api_display.c | 74 | ||||
| -rw-r--r-- | api/api_private.h | 4 | 
4 files changed, 127 insertions, 1 deletions
| diff --git a/api/Makefile b/api/Makefile index 2a64c4ddf..0e99f741b 100644 --- a/api/Makefile +++ b/api/Makefile @@ -24,7 +24,8 @@ include $(TOPDIR)/config.mk  LIB	= $(obj)libapi.o -COBJS-$(CONFIG_API) += api.o api_net.o api_storage.o api_platform-$(ARCH).o +COBJS-$(CONFIG_API) += api.o api_display.o api_net.o api_storage.o \ +		       api_platform-$(ARCH).o  COBJS	:= $(COBJS-y)  SRCS	:= $(COBJS:.o=.c) @@ -553,6 +553,50 @@ static int API_env_enum(va_list ap)  	return 0;  } +/* + * pseudo signature: + * + * int API_display_get_info(int type, struct display_info *di) + */ +static int API_display_get_info(va_list ap) +{ +	int type; +	struct display_info *di; + +	type = va_arg(ap, int); +	di = va_arg(ap, struct display_info *); + +	return display_get_info(type, di); +} + +/* + * pseudo signature: + * + * int API_display_draw_bitmap(ulong bitmap, int x, int y) + */ +static int API_display_draw_bitmap(va_list ap) +{ +	ulong bitmap; +	int x, y; + +	bitmap = va_arg(ap, ulong); +	x = va_arg(ap, int); +	y = va_arg(ap, int); + +	return display_draw_bitmap(bitmap, x, y); +} + +/* + * pseudo signature: + * + * void API_display_clear(void) + */ +static int API_display_clear(va_list ap) +{ +	display_clear(); +	return 0; +} +  static cfp_t calls_table[API_MAXCALL] = { NULL, };  /* @@ -616,6 +660,9 @@ void api_init(void)  	calls_table[API_ENV_GET] = &API_env_get;  	calls_table[API_ENV_SET] = &API_env_set;  	calls_table[API_ENV_ENUM] = &API_env_enum; +	calls_table[API_DISPLAY_GET_INFO] = &API_display_get_info; +	calls_table[API_DISPLAY_DRAW_BITMAP] = &API_display_draw_bitmap; +	calls_table[API_DISPLAY_CLEAR] = &API_display_clear;  	calls_no = API_MAXCALL;  	debugf("API initialized with %d calls\n", calls_no); diff --git a/api/api_display.c b/api/api_display.c new file mode 100644 index 000000000..643917088 --- /dev/null +++ b/api/api_display.c @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2011 The Chromium OS Authors. + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +#include <common.h> +#include <api_public.h> +#include <lcd.h> +#include <video_font.h> /* Get font width and height */ + +/* lcd.h needs BMP_LOGO_HEIGHT to calculate CONSOLE_ROWS */ +#if defined(CONFIG_LCD_LOGO) && !defined(CONFIG_LCD_INFO_BELOW_LOGO) +#include <bmp_logo.h> +#endif + +/* TODO(clchiou): add support of video device */ + +int display_get_info(int type, struct display_info *di) +{ +	if (!di) +		return API_EINVAL; + +	switch (type) { +	default: +		debug("%s: unsupport display device type: %d\n", +				__FILE__, type); +		return API_ENODEV; +#ifdef CONFIG_LCD +	case DISPLAY_TYPE_LCD: +		di->pixel_width  = panel_info.vl_col; +		di->pixel_height = panel_info.vl_row; +		di->screen_rows = CONSOLE_ROWS; +		di->screen_cols = CONSOLE_COLS; +		break; +#endif +	} + +	di->type = type; +	return 0; +} + +int display_draw_bitmap(ulong bitmap, int x, int y) +{ +	if (!bitmap) +		return API_EINVAL; +#ifdef CONFIG_LCD +	return lcd_display_bitmap(bitmap, x, y); +#else +	return API_ENODEV; +#endif +} + +void display_clear(void) +{ +#ifdef CONFIG_LCD +	lcd_clear(); +#endif +} diff --git a/api/api_private.h b/api/api_private.h index 94a7fc509..988f70235 100644 --- a/api/api_private.h +++ b/api/api_private.h @@ -45,4 +45,8 @@ int		dev_write_net(void *, void *, int);  void dev_stor_init(void); +int display_get_info(int type, struct display_info *di); +int display_draw_bitmap(ulong bitmap, int x, int y); +void display_clear(void); +  #endif /* _API_PRIVATE_H_ */ |