📄 cfb_console.c
字号:
} 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 + -