⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cfb_console.c

📁 F:worksip2440a board可启动u-boot-like.tar.gz F:worksip2440a board可启动u-boot-like.tar.gz
💻 C
📖 第 1 页 / 共 3 页
字号:
				}				bmap += padded_line;				fb -= (VIDEO_VISIBLE_COLS + width) * VIDEO_PIXEL_SIZE;			}			break;		case GDF_16BIT_565RGB:			while (ycount--) {				WATCHDOG_RESET ();				xcount = width;				while (xcount--) {					cte = bmp->color_table[*bmap++];					FILL_16BIT_565RGB (cte.red, cte.green, cte.blue);				}				bmap += padded_line;				fb -= (VIDEO_VISIBLE_COLS + width) * VIDEO_PIXEL_SIZE;			}			break;		case GDF_32BIT_X888RGB:			while (ycount--) {				WATCHDOG_RESET ();				xcount = width;				while (xcount--) {					cte = bmp->color_table[*bmap++];					FILL_32BIT_X888RGB (cte.red, cte.green, cte.blue);				}				bmap += padded_line;				fb -= (VIDEO_VISIBLE_COLS + width) * VIDEO_PIXEL_SIZE;			}			break;		case GDF_24BIT_888RGB:			while (ycount--) {				WATCHDOG_RESET ();				xcount = width;				while (xcount--) {					cte = bmp->color_table[*bmap++];					FILL_24BIT_888RGB (cte.red, cte.green, cte.blue);				}				bmap += padded_line;				fb -= (VIDEO_VISIBLE_COLS + width) * VIDEO_PIXEL_SIZE;			}			break;		}		break;	case 24:		padded_line -= 3 * width;		ycount = height;		switch (VIDEO_DATA_FORMAT) {		case GDF__8BIT_332RGB:			while (ycount--) {				WATCHDOG_RESET ();				xcount = width;				while (xcount--) {					FILL_8BIT_332RGB (bmap[2], bmap[1], bmap[0]);					bmap += 3;				}				bmap += padded_line;				fb -= (VIDEO_VISIBLE_COLS + width) * VIDEO_PIXEL_SIZE;			}			break;		case GDF_15BIT_555RGB:			while (ycount--) {				WATCHDOG_RESET ();				xcount = width;				while (xcount--) {					FILL_15BIT_555RGB (bmap[2], bmap[1], bmap[0]);					bmap += 3;				}				bmap += padded_line;				fb -= (VIDEO_VISIBLE_COLS + width) * VIDEO_PIXEL_SIZE;			}			break;		case GDF_16BIT_565RGB:			while (ycount--) {				WATCHDOG_RESET ();				xcount = width;				while (xcount--) {					FILL_16BIT_565RGB (bmap[2], bmap[1], bmap[0]);					bmap += 3;				}				bmap += padded_line;				fb -= (VIDEO_VISIBLE_COLS + width) * VIDEO_PIXEL_SIZE;			}			break;		case GDF_32BIT_X888RGB:			while (ycount--) {				WATCHDOG_RESET ();				xcount = width;				while (xcount--) {					FILL_32BIT_X888RGB (bmap[2], bmap[1], bmap[0]);					bmap += 3;				}				bmap += padded_line;				fb -= (VIDEO_VISIBLE_COLS + width) * VIDEO_PIXEL_SIZE;			}			break;		case GDF_24BIT_888RGB:			while (ycount--) {				WATCHDOG_RESET ();				xcount = width;				while (xcount--) {					FILL_24BIT_888RGB (bmap[2], bmap[1], bmap[0]);					bmap += 3;				}				bmap += padded_line;				fb -= (VIDEO_VISIBLE_COLS + width) * VIDEO_PIXEL_SIZE;			}			break;		default:			printf ("Error: 24 bits/pixel bitmap incompatible with current video mode\n");			break;		}		break;	default:		printf ("Error: %d bit/pixel bitmaps not supported by U-Boot\n",			le16_to_cpu (bmp->header.bit_count));		break;	}	return (0);}#endif /* (CONFIG_COMMANDS & CFG_CMD_BMP) || CONFIG_SPLASH_SCREEN *//*****************************************************************************/#ifdef CONFIG_VIDEO_LOGOvoid logo_plot (void *screen, int width, int x, int y){	int xcount, i;	int skip   = (width - VIDEO_LOGO_WIDTH) * VIDEO_PIXEL_SIZE;	int ycount = VIDEO_LOGO_HEIGHT;	unsigned char r, g, b, *logo_red, *logo_blue, *logo_green;	unsigned char *source;	unsigned char *dest = (unsigned char *)screen + ((y * width * VIDEO_PIXEL_SIZE) + x);#ifdef CONFIG_VIDEO_BMP_LOGO	source = bmp_logo_bitmap;	/* Allocate temporary space for computing colormap			 */	logo_red = malloc (BMP_LOGO_COLORS);	logo_green = malloc (BMP_LOGO_COLORS);	logo_blue = malloc (BMP_LOGO_COLORS);	/* Compute color map							 */	for (i = 0; i < VIDEO_LOGO_COLORS; i++) {		logo_red[i] = (bmp_logo_palette[i] & 0x0f00) >> 4;		logo_green[i] = (bmp_logo_palette[i] & 0x00f0);		logo_blue[i] = (bmp_logo_palette[i] & 0x000f) << 4;	}#else	source = linux_logo;	logo_red = linux_logo_red;	logo_green = linux_logo_green;	logo_blue = linux_logo_blue;#endif	if (VIDEO_DATA_FORMAT == GDF__8BIT_INDEX) {		for (i = 0; i < VIDEO_LOGO_COLORS; i++) {			video_set_lut (i + VIDEO_LOGO_LUT_OFFSET,				       logo_red[i], logo_green[i], logo_blue[i]);		}	}	while (ycount--) {		xcount = VIDEO_LOGO_WIDTH;		while (xcount--) {			r = logo_red[*source - VIDEO_LOGO_LUT_OFFSET];			g = logo_green[*source - VIDEO_LOGO_LUT_OFFSET];			b = logo_blue[*source - VIDEO_LOGO_LUT_OFFSET];			switch (VIDEO_DATA_FORMAT) {			case GDF__8BIT_INDEX:				*dest = *source;				break;			case GDF__8BIT_332RGB:				*dest = ((r >> 5) << 5) | ((g >> 5) << 2) | (b >> 6);				break;			case GDF_15BIT_555RGB:				*(unsigned short *) dest =					SWAP16 ((unsigned short) (((r >> 3) << 10) | ((g >> 3) << 5) | (b >> 3)));				break;			case GDF_16BIT_565RGB:				*(unsigned short *) dest =					SWAP16 ((unsigned short) (((r >> 3) << 11) | ((g >> 2) << 5) | (b >> 3)));				break;			case GDF_32BIT_X888RGB:				*(unsigned long *) dest =					SWAP32 ((unsigned long) ((r << 16) | (g << 8) | b));				break;			case GDF_24BIT_888RGB:#ifdef VIDEO_FB_LITTLE_ENDIAN				dest[0] = b;				dest[1] = g;				dest[2] = r;#else				dest[0] = r;				dest[1] = g;				dest[2] = b;#endif				break;			}			source++;			dest += VIDEO_PIXEL_SIZE;		}		dest += skip;	}#ifdef CONFIG_VIDEO_BMP_LOGO	free (logo_red);	free (logo_green);	free (logo_blue);#endif}/*****************************************************************************/static void *video_logo (void){	char info[128];	extern char version_string;#ifdef CONFIG_SPLASH_SCREEN	char *s;	ulong addr;	if ((s = getenv ("splashimage")) != NULL) {		addr = simple_strtoul (s, NULL, 16);		if (video_display_bitmap (addr, 0, 0) == 0) {			return ((void *) (video_fb_address));		}	}#endif /* CONFIG_SPLASH_SCREEN */	logo_plot (video_fb_address, VIDEO_COLS, 0, 0);	sprintf (info, " %s", &version_string);	video_drawstring (VIDEO_INFO_X, VIDEO_INFO_Y, info);#ifdef CONFIG_CONSOLE_EXTRA_INFO	{		int i, n = ((VIDEO_LOGO_HEIGHT - VIDEO_FONT_HEIGHT) / VIDEO_FONT_HEIGHT);		for (i = 1; i < n; i++) {			video_get_info_str (i, info);			if (*info)				video_drawstring (VIDEO_INFO_X,						  VIDEO_INFO_Y + i * VIDEO_FONT_HEIGHT,						  info);		}	}#endif	return (video_fb_address + VIDEO_LOGO_HEIGHT * VIDEO_LINE_LEN);}#endif/*****************************************************************************/static int video_init (void){	unsigned char color8;	if ((pGD = video_hw_init ()) == NULL)		return -1;	video_fb_address = (void *) VIDEO_FB_ADRS;#ifdef CONFIG_VIDEO_HW_CURSOR	video_init_hw_cursor (VIDEO_FONT_WIDTH, VIDEO_FONT_HEIGHT);#endif	/* Init drawing pats */	switch (VIDEO_DATA_FORMAT) {	case GDF__8BIT_INDEX:		video_set_lut (0x01, CONSOLE_FG_COL, CONSOLE_FG_COL, CONSOLE_FG_COL);		video_set_lut (0x00, CONSOLE_BG_COL, CONSOLE_BG_COL, CONSOLE_BG_COL);		fgx = 0x01010101;		bgx = 0x00000000;		break;	case GDF__8BIT_332RGB:		color8 = ((CONSOLE_FG_COL & 0xe0) |			  ((CONSOLE_FG_COL >> 3) & 0x1c) | CONSOLE_FG_COL >> 6);		fgx = (color8 << 24) | (color8 << 16) | (color8 << 8) | color8;		color8 = ((CONSOLE_BG_COL & 0xe0) |			  ((CONSOLE_BG_COL >> 3) & 0x1c) | CONSOLE_BG_COL >> 6);		bgx = (color8 << 24) | (color8 << 16) | (color8 << 8) | color8;		break;	case GDF_15BIT_555RGB:		fgx = (((CONSOLE_FG_COL >> 3) << 26) |		       ((CONSOLE_FG_COL >> 3) << 21) | ((CONSOLE_FG_COL >> 3) << 16) |		       ((CONSOLE_FG_COL >> 3) << 10) | ((CONSOLE_FG_COL >> 3) << 5) |		       (CONSOLE_FG_COL >> 3));		bgx = (((CONSOLE_BG_COL >> 3) << 26) |		       ((CONSOLE_BG_COL >> 3) << 21) | ((CONSOLE_BG_COL >> 3) << 16) |		       ((CONSOLE_BG_COL >> 3) << 10) | ((CONSOLE_BG_COL >> 3) << 5) |		       (CONSOLE_BG_COL >> 3));		break;	case GDF_16BIT_565RGB:		fgx = (((CONSOLE_FG_COL >> 3) << 27) |		       ((CONSOLE_FG_COL >> 2) << 21) | ((CONSOLE_FG_COL >> 3) << 16) |		       ((CONSOLE_FG_COL >> 3) << 11) | ((CONSOLE_FG_COL >> 2) << 5) |		       (CONSOLE_FG_COL >> 3));		bgx = (((CONSOLE_BG_COL >> 3) << 27) |		       ((CONSOLE_BG_COL >> 2) << 21) | ((CONSOLE_BG_COL >> 3) << 16) |		       ((CONSOLE_BG_COL >> 3) << 11) | ((CONSOLE_BG_COL >> 2) << 5) |		       (CONSOLE_BG_COL >> 3));		break;	case GDF_32BIT_X888RGB:		fgx = (CONSOLE_FG_COL << 16) | (CONSOLE_FG_COL << 8) | CONSOLE_FG_COL;		bgx = (CONSOLE_BG_COL << 16) | (CONSOLE_BG_COL << 8) | CONSOLE_BG_COL;		break;	case GDF_24BIT_888RGB:		fgx = (CONSOLE_FG_COL << 24) | (CONSOLE_FG_COL << 16) |			(CONSOLE_FG_COL << 8) | CONSOLE_FG_COL;		bgx = (CONSOLE_BG_COL << 24) | (CONSOLE_BG_COL << 16) |			(CONSOLE_BG_COL << 8) | CONSOLE_BG_COL;		break;	}	eorx = fgx ^ bgx;	video_clear ();#ifdef CONFIG_VIDEO_LOGO	/* Plot the logo and get start point of console */	PRINTD ("Video: Drawing the logo ...\n");	video_console_address = video_logo ();#else	video_console_address = video_fb_address;#endif	/* Initialize the console */	console_col = 0;	console_row = 0;	return 0;}static void video_clear (void){#ifdef CONFIG_VIDEO_SM501	video_hw_rectfill (VIDEO_PIXEL_SIZE,	/* bytes per pixel */			   0,	/* dest pos x */			   0,	/* dest pos y */			   VIDEO_VISIBLE_COLS,	/* frame width */			   VIDEO_VISIBLE_ROWS,	/* frame height */			   CONSOLE_BG_COL	/* fill color */		);#else	int size = pGD->winSizeX * pGD->winSizeY * pGD->gdfBytesPP;	memset ((void *)pGD->frameAdrs, 0x0, size);	#endif}/*****************************************************************************/int drv_video_init (void){	int skip_dev_init;	device_t console_dev;	skip_dev_init = 0;	/* Init video chip - returns with framebuffer cleared */	if (video_init () == -1)		skip_dev_init = 1;#ifdef CONFIG_VGA_AS_SINGLE_DEVICE	/* Devices VGA and Keyboard will be assigned seperately */	/* Init vga device */	if (!skip_dev_init) {		memset (&console_dev, 0, sizeof (console_dev));		strcpy (console_dev.name, "vga");		console_dev.ext = DEV_EXT_VIDEO;	/* Video extensions */		console_dev.flags = DEV_FLAGS_OUTPUT | DEV_FLAGS_SYSTEM;		console_dev.putc = video_putc;	/* 'putc' function */		console_dev.puts = video_puts;	/* 'puts' function */		console_dev.tstc = NULL;	/* 'tstc' function */		console_dev.getc = NULL;	/* 'getc' function */		if (device_register (&console_dev) == 0)			return 1;	}#else//    PRINTD("KBD: Keyboard init ...\n"); //   if (VIDEO_KBD_INIT_FCT == -1)//	skip_dev_init = 1;    /* Init console device *///    if (!skip_dev_init) //   {//	memset (&console_dev, 0, sizeof(console_dev));//	strcpy(console_dev.name, "console");//	console_dev.ext   = DEV_EXT_VIDEO;    /* Video extensions *///	console_dev.flags = DEV_FLAGS_OUTPUT | DEV_FLAGS_INPUT | DEV_FLAGS_SYSTEM;//	console_dev.putc  = video_putc;        /* 'putc' function *///	console_dev.puts  = video_puts;        /* 'puts' function *///	console_dev.tstc  = VIDEO_TSTC_FCT;    /* 'tstc' function *///	console_dev.getc  = VIDEO_GETC_FCT;    /* 'getc' function *///	if (device_register (&console_dev) == 0)//	    return 1; //   }#endif /* CONFIG_VGA_AS_SINGLE_DEVICE */	/* No console dev available */	return 0;}#ifdef CONFIG_VIDEO_SM501int do_clear(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]){	console_col = 0;	console_row = 0;	video_clear ();}U_BOOT_CMD(	clear, 5,	1,	do_clear,	"clear   - clear screen\n",);#endif#endif /* CONFIG_CFB_CONSOLE */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -