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

📄 cfb_console.c

📁 PPC Linux Driver, use makefile to compare the routen in Linux.
💻 C
📖 第 1 页 / 共 3 页
字号:
            0x00000000, 0x0000ffff, 0xffff0000, 0xffffffff };static const int video_font_draw_table24[16][3] = {            { 0x00000000, 0x00000000, 0x00000000 },            { 0x00000000, 0x00000000, 0x00ffffff },            { 0x00000000, 0x0000ffff, 0xff000000 },            { 0x00000000, 0x0000ffff, 0xffffffff },            { 0x000000ff, 0xffff0000, 0x00000000 },            { 0x000000ff, 0xffff0000, 0x00ffffff },            { 0x000000ff, 0xffffffff, 0xff000000 },            { 0x000000ff, 0xffffffff, 0xffffffff },            { 0xffffff00, 0x00000000, 0x00000000 },            { 0xffffff00, 0x00000000, 0x00ffffff },            { 0xffffff00, 0x0000ffff, 0xff000000 },            { 0xffffff00, 0x0000ffff, 0xffffffff },            { 0xffffffff, 0xffff0000, 0x00000000 },            { 0xffffffff, 0xffff0000, 0x00ffffff },            { 0xffffffff, 0xffffffff, 0xff000000 },            { 0xffffffff, 0xffffffff, 0xffffffff } };static const int video_font_draw_table32[16][4] = {            { 0x00000000, 0x00000000, 0x00000000, 0x00000000 },            { 0x00000000, 0x00000000, 0x00000000, 0x00ffffff },            { 0x00000000, 0x00000000, 0x00ffffff, 0x00000000 },            { 0x00000000, 0x00000000, 0x00ffffff, 0x00ffffff },            { 0x00000000, 0x00ffffff, 0x00000000, 0x00000000 },            { 0x00000000, 0x00ffffff, 0x00000000, 0x00ffffff },            { 0x00000000, 0x00ffffff, 0x00ffffff, 0x00000000 },            { 0x00000000, 0x00ffffff, 0x00ffffff, 0x00ffffff },            { 0x00ffffff, 0x00000000, 0x00000000, 0x00000000 },            { 0x00ffffff, 0x00000000, 0x00000000, 0x00ffffff },            { 0x00ffffff, 0x00000000, 0x00ffffff, 0x00000000 },            { 0x00ffffff, 0x00000000, 0x00ffffff, 0x00ffffff },            { 0x00ffffff, 0x00ffffff, 0x00000000, 0x00000000 },            { 0x00ffffff, 0x00ffffff, 0x00000000, 0x00ffffff },            { 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00000000 },            { 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff } };/******************************************************************************/static void video_drawchars (int xx, int yy, unsigned char *s, int count){    u8  *cdat, *dest, *dest0;    int rows, offset, c;    offset = yy * VIDEO_LINE_LEN + xx * VIDEO_PIXEL_SIZE;    dest0 = video_fb_address + offset;    switch (VIDEO_DATA_FORMAT)    {    case GDF__8BIT_INDEX:    case GDF__8BIT_332RGB:        while (count--)        {        c = *s ;        cdat = video_fontdata + c * VIDEO_FONT_HEIGHT;        for (rows = VIDEO_FONT_HEIGHT, dest = dest0; rows--; dest += VIDEO_LINE_LEN)        {            u8 bits = *cdat++;            ((u32 *)dest)[0] = (video_font_draw_table8[bits >> 4] & eorx) ^ bgx;            ((u32 *)dest)[1] = (video_font_draw_table8[bits & 15] & eorx) ^ bgx;        }        dest0 += VIDEO_FONT_WIDTH * VIDEO_PIXEL_SIZE;        s++;        }        break;    case GDF_15BIT_555RGB:        while (count--)        {        c = *s ;        cdat = video_fontdata + c * VIDEO_FONT_HEIGHT;        for (rows = VIDEO_FONT_HEIGHT, dest = dest0; rows--; dest += VIDEO_LINE_LEN)        {            u8 bits = *cdat++;            ((u32 *)dest)[0] = SHORTSWAP32((video_font_draw_table15[bits >> 6] & eorx) ^ bgx);            ((u32 *)dest)[1] = SHORTSWAP32((video_font_draw_table15[bits >> 4 & 3] & eorx) ^ bgx);            ((u32 *)dest)[2] = SHORTSWAP32((video_font_draw_table15[bits >> 2 & 3] & eorx) ^ bgx);            ((u32 *)dest)[3] = SHORTSWAP32((video_font_draw_table15[bits & 3] & eorx) ^ bgx);            }            dest0 += VIDEO_FONT_WIDTH * VIDEO_PIXEL_SIZE;            s++ ;        }        break;    case GDF_16BIT_565RGB:        while (count--)        {        c = *s ;        cdat = video_fontdata + c * VIDEO_FONT_HEIGHT;        for (rows = VIDEO_FONT_HEIGHT, dest = dest0; rows--; dest += VIDEO_LINE_LEN)        {            u8 bits = *cdat++;            ((u32 *)dest)[0] = SHORTSWAP32((video_font_draw_table16[bits >> 6] & eorx) ^ bgx);            ((u32 *)dest)[1] = SHORTSWAP32((video_font_draw_table16[bits >> 4 & 3] & eorx) ^ bgx);            ((u32 *)dest)[2] = SHORTSWAP32((video_font_draw_table16[bits >> 2 & 3] & eorx) ^ bgx);            ((u32 *)dest)[3] = SHORTSWAP32((video_font_draw_table16[bits & 3] & eorx) ^ bgx);        }        dest0 += VIDEO_FONT_WIDTH * VIDEO_PIXEL_SIZE;        s++ ;        }        break;    case GDF_32BIT_X888RGB:        while (count--)        {        c = *s ;        cdat = video_fontdata + c * VIDEO_FONT_HEIGHT;        for (rows = VIDEO_FONT_HEIGHT, dest = dest0; rows--; dest += VIDEO_LINE_LEN)        {            u8 bits = *cdat++;            ((u32 *)dest)[0] = SWAP32((video_font_draw_table32[bits >> 4][0] & eorx) ^ bgx);            ((u32 *)dest)[1] = SWAP32((video_font_draw_table32[bits >> 4][1] & eorx) ^ bgx);            ((u32 *)dest)[2] = SWAP32((video_font_draw_table32[bits >> 4][2] & eorx) ^ bgx);            ((u32 *)dest)[3] = SWAP32((video_font_draw_table32[bits >> 4][3] & eorx) ^ bgx);            ((u32 *)dest)[4] = SWAP32((video_font_draw_table32[bits & 15][0] & eorx) ^ bgx);            ((u32 *)dest)[5] = SWAP32((video_font_draw_table32[bits & 15][1] & eorx) ^ bgx);            ((u32 *)dest)[6] = SWAP32((video_font_draw_table32[bits & 15][2] & eorx) ^ bgx);            ((u32 *)dest)[7] = SWAP32((video_font_draw_table32[bits & 15][3] & eorx) ^ bgx);        }        dest0 += VIDEO_FONT_WIDTH * VIDEO_PIXEL_SIZE;        s++ ;        }        break;    case GDF_24BIT_888RGB:        while (count--)        {        c = *s ;        cdat = video_fontdata + c * VIDEO_FONT_HEIGHT;        for (rows = VIDEO_FONT_HEIGHT, dest = dest0; rows--; dest += VIDEO_LINE_LEN)        {            u8 bits = *cdat++;            ((u32 *)dest)[0] = (video_font_draw_table24[bits >> 4][0] & eorx) ^ bgx;            ((u32 *)dest)[1] = (video_font_draw_table24[bits >> 4][1] & eorx) ^ bgx;            ((u32 *)dest)[2] = (video_font_draw_table24[bits >> 4][2] & eorx) ^ bgx;            ((u32 *)dest)[3] = (video_font_draw_table24[bits & 15][0] & eorx) ^ bgx;            ((u32 *)dest)[4] = (video_font_draw_table24[bits & 15][1] & eorx) ^ bgx;            ((u32 *)dest)[5] = (video_font_draw_table24[bits & 15][2] & eorx) ^ bgx;        }        dest0 += VIDEO_FONT_WIDTH * VIDEO_PIXEL_SIZE;        s++ ;        }        break;    }}/*****************************************************************************/static inline void video_drawstring(int xx, int yy, unsigned char *s){    video_drawchars (xx, yy, s, strlen(s));}/*****************************************************************************/static void video_putchar(int xx, int yy, unsigned char c){#ifdef CONFIG_VIDEO_LOGO    video_drawchars (xx, yy + VIDEO_LOGO_HEIGHT, &c, 1);#else    video_drawchars (xx, yy, &c, 1);#endif}/*****************************************************************************/#if defined(CONFIG_CONSOLE_CURSOR) || defined(CONFIG_VIDEO_SW_CURSOR)static void video_set_cursor(void){            /* swap drawing colors */    eorx = fgx;    fgx  = bgx;    bgx  = eorx;    eorx = fgx ^ bgx;    /* draw cursor */    video_putchar (console_col * VIDEO_FONT_WIDTH,                   console_row * VIDEO_FONT_HEIGHT, ' ');    /* restore drawing colors */    eorx = fgx;    fgx  = bgx;    bgx  = eorx;    eorx = fgx ^ bgx;}#endif/*****************************************************************************/#ifdef CONFIG_CONSOLE_CURSORvoid console_cursor (int state){    static int last_state = 0;#ifdef CONFIG_CONSOLE_TIME    struct rtc_time tm;    char info[16];    /* time update only if cursor is on (faster scroll) */    if (state)    {    rtc_get (&tm);    sprintf(info, " %02d:%02d:%02d ", tm.tm_hour, tm.tm_min, tm.tm_sec);    video_drawstring(VIDEO_VISIBLE_COLS-10*VIDEO_FONT_WIDTH,             VIDEO_INFO_Y, info);    sprintf(info, "%02d.%02d.%04d", tm.tm_mday, tm.tm_mon, tm.tm_year);    video_drawstring(VIDEO_VISIBLE_COLS-10*VIDEO_FONT_WIDTH,             VIDEO_INFO_Y+1*VIDEO_FONT_HEIGHT, info);    }#endif    if (state && (last_state != state))    {        video_set_cursor();    }    if (!state && (last_state != state))    {        /* clear cursor */        video_putchar (console_col * VIDEO_FONT_WIDTH,                       console_row * VIDEO_FONT_HEIGHT, ' ');    }    last_state = state;}#endif/*****************************************************************************/#ifndef VIDEO_HW_RECTFILLstatic void memsetl (int *p, int c, int v){    while (c--)        *(p++) = v;}#endif/*****************************************************************************/#ifndef VIDEO_HW_BITBLTstatic void memcpyl (int *d, int *s, int c){    while (c--)        *(d++) = *(s++);}#endif/*****************************************************************************/static void console_scrollup (void){    /* copy up rows ignoring the first one */#ifdef VIDEO_HW_BITBLT    video_hw_bitblt (    VIDEO_PIXEL_SIZE,     /* bytes per pixel */    0,                    /* source pos x */    VIDEO_LOGO_HEIGHT + VIDEO_FONT_HEIGHT, /* source pos y */    0,                    /* dest pos x */    VIDEO_LOGO_HEIGHT,    /* dest pos y */    VIDEO_VISIBLE_COLS,   /* frame width */    VIDEO_VISIBLE_ROWS - VIDEO_LOGO_HEIGHT - VIDEO_FONT_HEIGHT /* frame height */    );#else    memcpyl (CONSOLE_ROW_FIRST, CONSOLE_ROW_SECOND, CONSOLE_SCROLL_SIZE >> 2);#endif    /* clear the last one */#ifdef VIDEO_HW_RECTFILL    video_hw_rectfill (    VIDEO_PIXEL_SIZE,     /* bytes per pixel */    0,                    /* dest pos x */    VIDEO_VISIBLE_ROWS - VIDEO_FONT_HEIGHT,  /* dest pos y */    VIDEO_VISIBLE_COLS,   /* frame width */    VIDEO_FONT_HEIGHT,    /* frame height */    CONSOLE_BG_COL          /* fill color */    );#else    memsetl (CONSOLE_ROW_LAST, CONSOLE_ROW_SIZE >> 2, CONSOLE_BG_COL);#endif}/*****************************************************************************/static void console_back (void){    CURSOR_OFF    console_col--;    if (console_col < 0)    {        console_col = CONSOLE_COLS - 1;        console_row--;        if (console_row < 0)        console_row = 0;    }    video_putchar (console_col * VIDEO_FONT_WIDTH,                   console_row * VIDEO_FONT_HEIGHT, ' ');}/*****************************************************************************/static void console_newline (void){    CURSOR_OFF    console_row++;

⌨️ 快捷键说明

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