diff --git a/bsp/raspberry-pi/raspi4-32/.config b/bsp/raspberry-pi/raspi4-32/.config index 4da506e902..041075c70e 100644 --- a/bsp/raspberry-pi/raspi4-32/.config +++ b/bsp/raspberry-pi/raspi4-32/.config @@ -142,7 +142,9 @@ CONFIG_RT_USING_DFS_DEVFS=y # CONFIG_RT_USING_DEVICE_IPC=y CONFIG_RT_PIPE_BUFSZ=512 -# CONFIG_RT_USING_SYSTEM_WORKQUEUE is not set +CONFIG_RT_USING_SYSTEM_WORKQUEUE=y +CONFIG_RT_SYSTEM_WORKQUEUE_STACKSIZE=2048 +CONFIG_RT_SYSTEM_WORKQUEUE_PRIORITY=23 CONFIG_RT_USING_SERIAL=y CONFIG_RT_SERIAL_USING_DMA=y CONFIG_RT_SERIAL_RB_BUFSZ=64 @@ -175,7 +177,7 @@ CONFIG_RT_USING_SPI=y CONFIG_RT_USING_WDT=y # CONFIG_RT_USING_AUDIO is not set # CONFIG_RT_USING_SENSOR is not set -# CONFIG_RT_USING_TOUCH is not set +CONFIG_RT_USING_TOUCH=y # CONFIG_RT_USING_HWCRYPTO is not set # CONFIG_RT_USING_PULSE_ENCODER is not set # CONFIG_RT_USING_INPUT_CAPTURE is not set @@ -206,7 +208,13 @@ CONFIG_RT_USING_POSIX=y # # Socket abstraction layer # -# CONFIG_RT_USING_SAL is not set +CONFIG_RT_USING_SAL=y + +# +# protocol stack implement +# +CONFIG_SAL_USING_LWIP=y +CONFIG_SAL_USING_POSIX=y # # Network interface device @@ -616,8 +624,8 @@ CONFIG_BSP_USING_UART=y CONFIG_RT_USING_UART0=y # CONFIG_RT_USING_UART1 is not set CONFIG_RT_USING_UART3=y -CONFIG_RT_USING_UART4=y -# CONFIG_RT_USING_UART5 is not set +# CONFIG_RT_USING_UART4 is not set +CONFIG_RT_USING_UART5=y CONFIG_BSP_USING_GIC=y CONFIG_BSP_USING_GIC400=y # CONFIG_BSP_USING_GIC500 is not set @@ -625,10 +633,11 @@ CONFIG_BSP_USING_PIN=y CONFIG_BSP_USING_SPI=y CONFIG_BSP_USING_SPI0_BUS=y CONFIG_BSP_USING_SPI0_DEVICE0=y -# CONFIG_BSP_USING_SPI0_DEVICE1 is not set +CONFIG_BSP_USING_SPI0_DEVICE1=y CONFIG_BSP_USING_CORETIMER=y # CONFIG_BSP_USING_SYSTIMER is not set CONFIG_BSP_USING_WDT=y +CONFIG_BSP_USING_ETH=y # CONFIG_BSP_USING_RTC is not set CONFIG_BSP_USING_SDIO=y CONFIG_BSP_USING_SDIO0=y @@ -636,5 +645,11 @@ CONFIG_BSP_USING_SDIO0=y # # Board Peripheral Drivers # -CONFIG_BSP_USING_HDMI=y -CONFIG_BSP_USING_HDMI_DISPLAY=y +CONFIG_BSP_USING_LCD=y +# CONFIG_BSP_USING_HDMI_DISPLAY is not set +CONFIG_BSP_USING_DSI_DISPLAY=y +# CONFIG_BSP_USING_ILI9486 is not set +CONFIG_BSP_USING_TOUCH=y +CONFIG_BSP_USING_DSI_TOUCH_DEV=y +# CONFIG_BSP_USING_XPT_TOUCH_DEV is not set +# CONFIG_USING_LCD_CONSOLE is not set diff --git a/bsp/raspberry-pi/raspi4-32/driver/Kconfig b/bsp/raspberry-pi/raspi4-32/driver/Kconfig index 5dca313513..42a1045e60 100644 --- a/bsp/raspberry-pi/raspi4-32/driver/Kconfig +++ b/bsp/raspberry-pi/raspi4-32/driver/Kconfig @@ -93,6 +93,10 @@ menu "Hardware Drivers Config" select RT_USING_WDT default n + config BSP_USING_ETH + bool "Enable ETH" + default n + menuconfig BSP_USING_RTC bool "Enable RTC" select RT_USING_RTC @@ -119,14 +123,37 @@ menu "Hardware Drivers Config" endmenu menu "Board Peripheral Drivers" - menuconfig BSP_USING_HDMI - bool "Enable HDMI" + menuconfig BSP_USING_LCD + bool "Enable LCD" default n - if BSP_USING_HDMI + if BSP_USING_LCD config BSP_USING_HDMI_DISPLAY bool "HDMI DISPLAY" default n + config BSP_USING_DSI_DISPLAY + bool "DSI DISPLAY" + default n + config BSP_USING_ILI9486 + bool "ILI9486 DISPLAY" + default n endif + + menuconfig BSP_USING_TOUCH + bool "Enable Touch" + default n + + if BSP_USING_TOUCH + config BSP_USING_DSI_TOUCH_DEV + bool "DSI TOUCH" + default n + config BSP_USING_XPT_TOUCH_DEV + bool "XPT TOUCH" + default n + endif + + config USING_LCD_CONSOLE + bool "LCD CONSOLE" + default n endmenu endmenu diff --git a/bsp/raspberry-pi/raspi4-32/driver/SConscript b/bsp/raspberry-pi/raspi4-32/driver/SConscript index 64c764c1b3..c641378249 100644 --- a/bsp/raspberry-pi/raspi4-32/driver/SConscript +++ b/bsp/raspberry-pi/raspi4-32/driver/SConscript @@ -1,9 +1,17 @@ +# RT-Thread building script for component from building import * cwd = GetCurrentDir() src = Glob('*.c') + Glob('*.cpp') CPPPATH = [cwd, str(Dir('#'))] +if not GetDepend('BSP_USING_ETH'): + SrcRemove(src, ['drv_eth.c']) +if not GetDepend('BSP_USING_SPI'): + SrcRemove(src, ['drv_spi.c']) +if not GetDepend('BSP_USING_WDT'): + SrcRemove(src, ['drv_wdt.c']) + group = DefineGroup('driver', src, depend = [''], CPPPATH = CPPPATH) # build for sub-directory diff --git a/bsp/raspberry-pi/raspi4-32/driver/board.c b/bsp/raspberry-pi/raspi4-32/driver/board.c index 263745fafc..3e81b2e537 100644 --- a/bsp/raspberry-pi/raspi4-32/driver/board.c +++ b/bsp/raspberry-pi/raspi4-32/driver/board.c @@ -21,7 +21,8 @@ struct mem_desc platform_mem_desc[] = { {0x0, 0x6400000, 0x0, NORMAL_MEM}, {0x8000000, 0x8800000, 0x8000000, DEVICE_MEM}, //mbox msg - {0x0EA00000, 0x0EE00000, 0x0EA00000, DEVICE_MEM}, //framebuffer + {0x0E000000, 0x0EE00000, 0x0E000000, DEVICE_MEM}, //framebuffer + {0x0F400000, 0x0FA00000, 0x0F400000, DEVICE_MEM}, //dsi_touch {0xFD500000, 0xFDA00000, 0xFD500000, DEVICE_MEM}, //gmac {0xFE000000, 0xFE400000, 0xFE000000, DEVICE_MEM}, //peripheral {0xFF800000, 0xFFA00000, 0xFF800000, DEVICE_MEM} //gic diff --git a/bsp/raspberry-pi/raspi4-32/driver/drv_spi.c b/bsp/raspberry-pi/raspi4-32/driver/drv_spi.c index d256fca254..f0c6351d7f 100644 --- a/bsp/raspberry-pi/raspi4-32/driver/drv_spi.c +++ b/bsp/raspberry-pi/raspi4-32/driver/drv_spi.c @@ -75,7 +75,6 @@ static rt_err_t raspi_spi_configure(struct rt_spi_device *device, struct rt_spi_ { RT_ASSERT(cfg != RT_NULL); RT_ASSERT(device != RT_NULL); - rt_uint16_t divider; struct raspi_spi_device* hw_config = (struct raspi_spi_device *)(device->parent.user_data); struct raspi_spi_hw_config *hwcfg = (struct raspi_spi_hw_config *)hw_config->spi_hw_config; // spi clear fifo diff --git a/bsp/raspberry-pi/raspi4-32/driver/lcd/Sconscript b/bsp/raspberry-pi/raspi4-32/driver/lcd/Sconscript new file mode 100644 index 0000000000..ad749bcb9b --- /dev/null +++ b/bsp/raspberry-pi/raspi4-32/driver/lcd/Sconscript @@ -0,0 +1,18 @@ +# RT-Thread building script for component + +from building import * + +cwd = GetCurrentDir() +src = Glob('*.c') + Glob('*.cpp') +CPPPATH = [cwd] + +if not (GetDepend('BSP_USING_HDMI_DISPLAY') or GetDepend('BSP_USING_DSI_DISPLAY')): + SrcRemove(src, ['drv_hdmi.c']) +if not GetDepend('BSP_USING_ILI9486'): + SrcRemove(src, ['drv_ili9486.c']) +if not GetDepend('USING_LCD_CONSOLE'): + SrcRemove(src, ['lcd_console.c']) + +group = DefineGroup('drv_lcd', src, depend = ['BSP_USING_LCD'], CPPPATH = CPPPATH) + +Return('group') diff --git a/bsp/raspberry-pi/raspi4-32/driver/drv_hdmi.c b/bsp/raspberry-pi/raspi4-32/driver/lcd/drv_hdmi.c similarity index 94% rename from bsp/raspberry-pi/raspi4-32/driver/drv_hdmi.c rename to bsp/raspberry-pi/raspi4-32/driver/lcd/drv_hdmi.c index a8d68fd9cf..955e55bcf5 100644 --- a/bsp/raspberry-pi/raspi4-32/driver/drv_hdmi.c +++ b/bsp/raspberry-pi/raspi4-32/driver/lcd/drv_hdmi.c @@ -13,10 +13,14 @@ #include "mbox.h" #include "drv_hdmi.h" -#ifdef BSP_USING_HDMI +#ifdef USING_LCD_CONSOLE +#include "lcd_console.h" +#endif + +#if defined(BSP_USING_HDMI_DISPLAY) || defined(BSP_USING_DSI_DISPLAY) #define LCD_WIDTH (800) #define LCD_HEIGHT (480) -#define LCD_DEPTH (32) +#define LCD_DEPTH (4) #define LCD_BPP (32) #define TAG_ALLOCATE_BUFFER 0x00040001 @@ -84,6 +88,9 @@ rt_size_t hdmi_fb_read(rt_device_t dev, rt_off_t pos, void *buf, rt_size_t size) rt_size_t hdmi_fb_write(rt_device_t dev, rt_off_t pos, const void *buffer, rt_size_t size) { +#ifdef USING_LCD_CONSOLE + fb_print((char*)buffer); +#endif return size; } @@ -105,7 +112,7 @@ rt_err_t hdmi_fb_control(rt_device_t dev, int cmd, void *args) RT_ASSERT(info != RT_NULL); info->pixel_format = RTGRAPHIC_PIXEL_FORMAT_RGB888; - info->bits_per_pixel= LCD_DEPTH; + info->bits_per_pixel= 32; info->width = lcd->width; info->height = lcd->height; info->framebuffer = lcd->fb; @@ -285,12 +292,18 @@ void *bcm271x_mbox_fb_alloc(int width, int height, int bpp, int nrender) mbox[34] = TAG_END; mbox_call(8, MMU_DISABLE); + return (void *)((rt_uint32_t)(mbox[5] & 0x3fffffff)); } int hdmi_fb_init(void) { _hdmi.fb = (rt_uint8_t *)bcm271x_mbox_fb_alloc(LCD_WIDTH, LCD_HEIGHT, LCD_BPP, 1); + if(_hdmi.fb == RT_NULL) + { + rt_kprintf("init dsi or hdmi err!\n"); + return 0; + } bcm271x_mbox_fb_setoffset(0, 0); bcm271x_mbox_fb_set_porder(0); _hdmi.width = LCD_WIDTH; @@ -299,8 +312,9 @@ int hdmi_fb_init(void) _hdmi.pitch = 0; _hdmi.pixel_format = RTGRAPHIC_PIXEL_FORMAT_RGB888; + rt_memset(_hdmi.fb, 0, LCD_WIDTH*LCD_HEIGHT*(LCD_BPP/8)); //rt_kprintf("_hdmi.fb is %p\n", _hdmi.fb); - rt_hdmi_fb_device_init(&_hdmi, "lcd"); + rt_hdmi_fb_device_init(&_hdmi, "hdmi"); return 0; } diff --git a/bsp/raspberry-pi/raspi4-32/driver/drv_hdmi.h b/bsp/raspberry-pi/raspi4-32/driver/lcd/drv_hdmi.h similarity index 100% rename from bsp/raspberry-pi/raspi4-32/driver/drv_hdmi.h rename to bsp/raspberry-pi/raspi4-32/driver/lcd/drv_hdmi.h diff --git a/bsp/raspberry-pi/raspi4-32/driver/lcd/drv_ili9486.c b/bsp/raspberry-pi/raspi4-32/driver/lcd/drv_ili9486.c new file mode 100644 index 0000000000..c2317bd112 --- /dev/null +++ b/bsp/raspberry-pi/raspi4-32/driver/lcd/drv_ili9486.c @@ -0,0 +1,381 @@ +/* + * Copyright (c) 2006-2020, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2020-11-08 bigmagic first version + */ +#include +#include + +#include +#include +#include "drv_ili9486.h" + +#ifdef USING_LCD_CONSOLE +#include "lcd_console.h" +#endif + +//http://www.lcdwiki.com/MHS-3.5inch_RPi_Display +#define LCD_DEVICE_NAME ("spi0.0") + +#define LCD_SPI_SEND_FAST +//waveshare +#define LCD_SCREEN_WIDTH (320) +#define LCD_SCREEN_HEIGHT (480) + +#define LCD_RESET_PIN (25) +#define LCD_RS_PIN (24) + +#define LCD_SPI_FREQ_MAX (125*1000*1000) + +uint16_t LCD_HEIGHT = LCD_SCREEN_HEIGHT; +uint16_t LCD_WIDTH = LCD_SCREEN_WIDTH; + +#define SCREEN_VERTICAL_1 (0) +#define SCREEN_HORIZONTAL_1 (1) +#define SCREEN_VERTICAL_2 (2) +#define SCREEN_HORIZONTAL_2 (3) + +struct rt_semaphore lcd_spi_lock; +struct rt_semaphore lcd_lock; + +//rgb565 lcd buffer +uint16_t _lcd_buffer[LCD_SCREEN_WIDTH * LCD_SCREEN_HEIGHT]; +uint16_t send_buffer[LCD_SCREEN_WIDTH * LCD_SCREEN_HEIGHT]; + +static struct rt_spi_device *lcd_dev; + +static inline void send_cmd(void) +{ + rt_pin_write(LCD_RS_PIN, PIN_LOW); +} + +static inline void send_data(void) +{ + rt_pin_write(LCD_RS_PIN, PIN_HIGH); +} + +void writeData16(rt_uint16_t data) +{ + rt_uint8_t send_data[2]; + send_data[1] = data & 0x00FF; + send_data[0] = ((data >> 8) & 0x00FF); + rt_spi_transfer(lcd_dev, &send_data[0], RT_NULL, 2); +} + +void writeData(void* dev,rt_uint8_t data) +{ + writeData16((rt_uint16_t)(data)); +} + +void writeCommand(void* dev, rt_uint8_t cmd) +{ + send_cmd(); + writeData16((rt_uint16_t)(cmd)); + send_data(); +} + +void lcd_write_commmand(rt_uint8_t cmd) +{ + writeCommand(lcd_dev, cmd); +} + +void lcd_write_data(rt_uint8_t data) +{ + writeData(lcd_dev, data); +} + +/*Ser rotation of the screen - changes x0 and y0*/ +static inline void lcd_set_rotation(uint8_t rotation) +{ + writeCommand(lcd_dev, 0x36); + rt_thread_mdelay(100); + + switch(rotation) { + case SCREEN_VERTICAL_1: + writeData(lcd_dev, 0x48); + LCD_WIDTH = 320; + LCD_HEIGHT = 480; + break; + case SCREEN_HORIZONTAL_1: + writeData(lcd_dev, 0x28); + LCD_WIDTH = 480; + LCD_HEIGHT = 320; + break; + case SCREEN_VERTICAL_2: + writeData(lcd_dev, 0x98); + LCD_WIDTH = 320; + LCD_HEIGHT = 480; + break; + case SCREEN_HORIZONTAL_2: + writeData(lcd_dev, 0xF8); + LCD_WIDTH = 480; + LCD_HEIGHT = 320; + break; + default: + //EXIT IF SCREEN ROTATION NOT VALID! + break; + } + + if((rotation == SCREEN_VERTICAL_1) || (rotation == SCREEN_VERTICAL_2)) + { + lcd_write_commmand(0x2A); + lcd_write_data(0x00); + lcd_write_data(0x00); + lcd_write_data(0x01); + lcd_write_data(0x3F); + + lcd_write_commmand(0x2B); + lcd_write_data(0x00); + lcd_write_data(0x00); + lcd_write_data(0x01); + lcd_write_data(0xE0); + } + + if((rotation == SCREEN_HORIZONTAL_1) || (rotation == SCREEN_HORIZONTAL_2)) + { + lcd_write_commmand(0x2B); + lcd_write_data(0x00); + lcd_write_data(0x00); + lcd_write_data(0x01); + lcd_write_data(0x3F); + + lcd_write_commmand(0x2A); + lcd_write_data(0x00); + lcd_write_data(0x00); + lcd_write_data(0x01); + lcd_write_data(0xE0); + } +} + +static inline void fast_send_data(void) +{ + rt_uint32_t ii = 0; + rt_uint32_t tx_index = 0; + char *tx_data = (char *)send_buffer; + rt_sem_take(&lcd_spi_lock, RT_WAITING_FOREVER); + + SPI_REG_CS(SPI_0_BASE) &= (~(3 << 0)); + SPI_REG_CLK(SPI_0_BASE) = 4; + SPI_REG_CS(SPI_0_BASE) |= SPI_CS_TA; + for(tx_index=0;tx_index<(LCD_SCREEN_WIDTH * LCD_SCREEN_HEIGHT) * 2;tx_index++) + { + for(ii = 0; ii < 32; ii = ii + 2) + { + SPI_REG_FIFO(SPI_0_BASE) = tx_data[tx_index + ii + 1]; + SPI_REG_FIFO(SPI_0_BASE) = tx_data[tx_index + ii]; + } + while (!(SPI_REG_CS(SPI_0_BASE) & SPI_CS_DONE)); + SPI_REG_CS(SPI_0_BASE) |= (SPI_CS_CLEAR_TX) | (SPI_CS_CLEAR_RX); + tx_index = tx_index + 31; + } + SPI_REG_CS(SPI_0_BASE) |= (SPI_CS_CLEAR_TX) | (SPI_CS_CLEAR_RX); + SPI_REG_CS(SPI_0_BASE) &= (~SPI_CS_TA); + rt_sem_release(&lcd_spi_lock); +} + +static inline void lcd_show(void) +{ + + lcd_write_commmand(0x2C); // Memory write? + + //rt_thread_mdelay(150); + +#ifdef LCD_SPI_SEND_FAST + fast_send_data(); +#else + int i, j; + for (i = 0 ; i < 30 ; i ++) + { + uint16_t *tx_data = (uint16_t*)&send_buffer[5120* i]; + int32_t data_sz = 5120; + for( j=0; jpixel_format = RTGRAPHIC_PIXEL_FORMAT_RGB565; + info->bits_per_pixel= 16; + info->width = LCD_WIDTH; + info->height = LCD_HEIGHT; + info->framebuffer = (void *)_lcd_buffer;//lcd->fb; + } + break; + } + rt_sem_release(&lcd_lock); + return RT_EOK; +} + +#ifdef RT_USING_DEVICE_OPS +const static struct rt_device_ops ili9486_ops = +{ + RT_NULL, + ili9486_open, + ili9486_close, + ili9486_read, + ili9486_write, + ili9486_control, +}; +#endif + +static int hw_ili9486_lcd_init(void) +{ + struct rt_device *device; + device = rt_malloc(sizeof(struct rt_device)); + rt_memset(device, 0, sizeof(struct rt_device)); + + lcd_reset(); + rt_pin_mode(LCD_RS_PIN, PIN_MODE_OUTPUT); + lcd_dev = (struct rt_spi_device *)rt_device_find(LCD_DEVICE_NAME); + if (!lcd_dev) + { + rt_kprintf("no %s!\n", LCD_DEVICE_NAME); + } + lcd_dev->config.max_hz = LCD_SPI_FREQ_MAX;//125M + lcd_init(); + + rt_sem_init(&lcd_spi_lock, "lcd_spi_lock", 1, RT_IPC_FLAG_FIFO); + rt_sem_init(&lcd_lock, "lcd_spi_lock", 1, RT_IPC_FLAG_FIFO); + /* set device type */ + device->type = RT_Device_Class_Graphic; + /* initialize device interface */ +#ifdef RT_USING_DEVICE_OPS + device->ops = &ili9486_ops; +#else + device->init = RT_NULL; + device->open = ili9486_open; + device->close = ili9486_close; + device->read = ili9486_read; + device->write = ili9486_write; + device->control = ili9486_control; +#endif + /* register to device manager */ + rt_device_register(device, "lcd", RT_DEVICE_FLAG_RDWR); + + return RT_EOK; +} +INIT_DEVICE_EXPORT(hw_ili9486_lcd_init); diff --git a/bsp/raspberry-pi/raspi4-32/driver/lcd/drv_ili9486.h b/bsp/raspberry-pi/raspi4-32/driver/lcd/drv_ili9486.h new file mode 100644 index 0000000000..b9f2658d0f --- /dev/null +++ b/bsp/raspberry-pi/raspi4-32/driver/lcd/drv_ili9486.h @@ -0,0 +1,13 @@ +/* + * Copyright (c) 2006-2020, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2020-11-08 bigmagic first version + */ +#ifndef __DRV_ILI9486_H__ +#define __DRV_ILI9486_H__ + +#endif//ILI9486 diff --git a/bsp/raspberry-pi/raspi4-32/driver/lcd/lcd_console.c b/bsp/raspberry-pi/raspi4-32/driver/lcd/lcd_console.c new file mode 100644 index 0000000000..b362f80c05 --- /dev/null +++ b/bsp/raspberry-pi/raspi4-32/driver/lcd/lcd_console.c @@ -0,0 +1,258 @@ + +/* + * Copyright (c) 2006-2020, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2020-11-09 bigmagic first version + */ + +#include "lcd_console.h" +#include "lcd_font_20.h" + +#define LCD_CONSOLE_FLUSH_NOW 1 + +#define CONSOLE_NAME "hdmi" +#define COLOR_DELTA 0.05 + +#ifndef LCD_CONSOLE_FLUSH_NOW +static rt_thread_t console_flush_thread_tid = RT_NULL; +#define CONSOLE_FLUSH_THREAD_STACK_SIZE (1024) +#define CONSOLE_FLUSH_THREAD_PRIORITY (20) +#define CONSOLE_FLUSH_THREAD_TIMESLICE (10) +#define LCD_CONSOLE_DELAY (100) //100ms +#endif + +static rt_device_t console_dev = RT_NULL; + +static fb_t console_fb; +static rt_uint8_t* virt_buffer; + +static rt_uint32_t CHAR_W = 8; +static rt_uint32_t CHAR_H = 20; + +static int prev_x_offset = 0; + +static void newline(fb_t* fb) +{ + uint8_t* to; + uint8_t* from; + int i; + fb->y++; + fb->x = 5 * fb->depth; + + if (fb->y == (fb->height / CHAR_H)) + { + to = (uint8_t*) fb->vaddr; + from = to + (CHAR_H * fb->pitch); + + for (i = 0; i < ((fb->height - CHAR_H) * fb->pitch); i++) + { + *to++ = *from++; + } + + if(fb->depth >= 3) + { + uint32_t *addr_32bit = (uint32_t*) (fb->vaddr) + (fb->height - CHAR_H) * fb->width; + + for (i = 0; i < (CHAR_H * fb->width); i++) + { + *addr_32bit++ = fb->back; + } + } + else + { + uint16_t *addr_16bit = (uint16_t*) (fb->vaddr) + (fb->height - CHAR_H) * fb->width; + + for (i = 0; i < (CHAR_H * fb->width); i++) + { + *addr_16bit++ = fb->back; + } + } + fb->y = fb->y - 1; + } +} + + +static void fb_draw_char(fb_t *fb, char s) +{ + unsigned char* addr = (unsigned char*) fb->vaddr; + unsigned char *glyph = (unsigned char *)lcd_console_font_dejavu_20_glyph_bitmap + lcd_console_font_dejavu_20_glyph_dsc[s - 32].glyph_index; + CHAR_W = lcd_console_font_dejavu_20_glyph_dsc[s - 32].w_px; + + fb->x = fb->x + prev_x_offset * fb->depth; + + int i, j, line, mask, bytesperline = (CHAR_W + 7) / 8; + int kk = (bytesperline) * 8; + prev_x_offset = CHAR_W + 2; + // calculate the offset on screen + int offs = (fb->y * CHAR_H * fb->pitch) + fb->x; + + // display a character + for (j = 0; j < CHAR_H; j++) + { + // display one row + line = offs; + mask = 1; + mask = 0x80; + for (i = 0; i < kk; i++) + { + if(fb->depth >= 3) + { + *((unsigned int*) (addr + line)) = ((int) *(glyph + ((i)/8)) * 1) & mask ? fb->fore : fb->back; + } + else + { + *((unsigned short*) (addr + line)) = ((int) *(glyph + ((i)/8)) * 1) & mask ? fb->fore : fb->back; + } + + mask >>= 1; + if(mask == 0) + { + mask = 0x80; + } + line += fb->depth; + } + // adjust to next line + glyph += bytesperline; + offs += fb->pitch; + } +} + +void fb_print(char *s) +{ + fb_t *fb = &console_fb; + // draw next character if it's not zero + while (*s) + { + // handle carrige return + if (*s == '\r') + { + fb->x = 5 * fb->depth; + } + else if (*s == '\n') + { + newline(fb); + } + else if (*s == '\t') + { + //tab is 8 spaces + if((fb->x + 8 * fb->depth) < (fb->width) * fb->depth) + { + fb->x = fb->x + 8 * fb->depth; + } + } + else if (*s == '\b') + { + if (fb->x > 5 * fb->depth) + { + fb->x = fb->x - prev_x_offset * fb->depth; + fb_draw_char(fb, ' '); + } + } + else if((fb->x + prev_x_offset * fb->depth + 5 * fb->depth) >= (fb->width * fb->depth)) + { + newline(fb); + fb_draw_char(fb, *s); + } + else + { + fb_draw_char(fb, *s); + } + s++; + } + +#ifdef LCD_CONSOLE_FLUSH_NOW + rt_memcpy((void *)fb->paddr, (void *)fb->vaddr, fb->size); + if(console_dev != RT_NULL) + { + rt_device_control(console_dev,RTGRAPHIC_CTRL_RECT_UPDATE, RT_NULL); + } +#endif +} + +#ifndef LCD_CONSOLE_FLUSH_NOW +void lcd_console_task_entry(void *param) +{ + fb_t *fb = (fb_t *)param; + while (1) + { + rt_memcpy((void *)fb->paddr, (void *)fb->vaddr, fb->size); + if(console_dev != RT_NULL) + { + rt_device_control(console_dev,RTGRAPHIC_CTRL_RECT_UPDATE, RT_NULL); + } + rt_thread_mdelay(LCD_CONSOLE_DELAY); + } + +} +#endif + +int lcd_console_init(void) +{ + struct rt_device_graphic_info info; + console_dev = rt_device_find(CONSOLE_NAME); + if(console_dev == RT_NULL) + { + rt_kprintf("no console dev!\n"); + return 0; + } + + if(console_dev->ref_count >= 1) + { + rt_kprintf("lcd console has open!\n"); + return 0; + } + + rt_device_open(console_dev,RT_DEVICE_OFLAG_RDWR); + + rt_device_control(console_dev, RTGRAPHIC_CTRL_GET_INFO, &info); + + virt_buffer = (rt_uint8_t* )rt_malloc(info.width * info.height * (info.bits_per_pixel/8)); + rt_memset(virt_buffer, 0 , info.width * info.height * (info.bits_per_pixel/8)); + console_fb.width = info.width; + console_fb.height = info.height; + console_fb.pitch = info.width * (info.bits_per_pixel/8); + console_fb.vaddr = (rt_uint32_t)virt_buffer; + console_fb.paddr = (rt_uint32_t)info.framebuffer; + console_fb.size = info.width * info.height * (info.bits_per_pixel/8); + console_fb.depth = info.bits_per_pixel/8; + console_fb.x = 0; + console_fb.y = 0; + if(console_fb.depth >= 3) + { + console_fb.fore = CONSOLE_WHITE_32; + console_fb.back = CONSOLE_BLACK_32; + } + else + { + console_fb.fore = CONSOLE_WHITE_16; + console_fb.back = CONSOLE_BLACK_16; + } + +#ifndef LCD_CONSOLE_FLUSH_NOW + console_flush_thread_tid = rt_thread_create("lcd_console", lcd_console_task_entry, (void *)&console_fb, + CONSOLE_FLUSH_THREAD_STACK_SIZE, + CONSOLE_FLUSH_THREAD_PRIORITY, CONSOLE_FLUSH_THREAD_TIMESLICE); + if (console_flush_thread_tid != RT_NULL) + rt_thread_startup(console_flush_thread_tid); +#endif + /* + * note: + * if serial console and lcd console together + * you can add /src/kservice.c:rt_kprintf + * #ifdef USING_LCD_CONSOLE + * fb_print((char*)rt_log_buf); + * #endif + * + * remove rt_console_set_device(CONSOLE_NAME); + */ + rt_console_set_device(CONSOLE_NAME); + + rt_show_version();//show rt-thread logo + + return 0; +} +INIT_APP_EXPORT(lcd_console_init); diff --git a/bsp/raspberry-pi/raspi4-32/driver/lcd/lcd_console.h b/bsp/raspberry-pi/raspi4-32/driver/lcd/lcd_console.h new file mode 100644 index 0000000000..ebe6afa068 --- /dev/null +++ b/bsp/raspberry-pi/raspi4-32/driver/lcd/lcd_console.h @@ -0,0 +1,59 @@ + +/* + * Copyright (c) 2006-2020, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2020-11-09 bigmagic first version + */ +#ifndef __LCD_CONSOLE_H__ +#define __LCD_CONSOLE_H__ + +#include + +#define RGB(r, g, b) ((((r))<<16) | (((g))<<8) | ((b))) +#define COLOR_BLACK RGB(0, 0, 0) +#define COLOR_GREEN RGB(0, 255, 0) +#define COLOR_CYAN RGB(0, 255, 255) +#define COLOR_RED RGB(255, 0, 0) +#define COLOR_YELLOW RGB(255, 255, 0) +#define COLOR_WHITE RGB(255, 255, 255) + +#define CONSOLE_WHITE_32 COLOR_WHITE +#define CONSOLE_BLACK_32 COLOR_BLACK +#define CONSOLE_GREEN_32 COLOR_GREEN +#define CONSOLE_CYAN_32 COLOR_CYAN +#define CONSOLE_RED_32 COLOR_RED + + +#define RGB16(r, g, b) ((((r))<<11) | (((g))<<5) | ((b))) +#define CONSOLE_YELLOW_16 RGB16(0x1f,0x3f,0) +#define CONSOLE_WHITE_16 RGB16(0x1f,0x3f,0x1f) +#define CONSOLE_BLACK_16 RGB16(0,0,0) +#define CONSOLE_GREEN_16 RGB16(0,0x3f,0) +#define CONSOLE_CYAN_16 RGB16(0,0x3f,0x1f) +#define CONSOLE_RED_16 RGB16(0x1f,0,0) + +typedef struct +{ + rt_uint32_t width; + rt_uint32_t height; + rt_uint32_t vwidth; + rt_uint32_t vheight; + rt_uint32_t pitch; + rt_uint32_t depth; + rt_uint32_t fore; + rt_uint32_t back; + rt_uint32_t x; + rt_uint32_t y; + rt_uint32_t vaddr; + rt_uint32_t paddr; + rt_uint32_t size; +} fb_t; + +void fb_print(char *s); +int lcd_console_init(void); + +#endif//CONSOLE diff --git a/bsp/raspberry-pi/raspi4-32/driver/lcd/lcd_font_20.h b/bsp/raspberry-pi/raspi4-32/driver/lcd/lcd_font_20.h new file mode 100644 index 0000000000..7ef56d7e3c --- /dev/null +++ b/bsp/raspberry-pi/raspi4-32/driver/lcd/lcd_font_20.h @@ -0,0 +1,2299 @@ +/* + * Copyright (c) 2006-2020, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2020-11-26 bigmagic first version + */ +static const uint8_t lcd_console_font_dejavu_20_glyph_bitmap[] = { + /*Unicode: U+0020 ( ) , Width: 6 */ + 0x00, //...... + 0x00, //...... + 0x00, //...... + 0x00, //...... + 0x00, //...... + 0x00, //...... + 0x00, //...... + 0x00, //...... + 0x00, //...... + 0x00, //...... + 0x00, //...... + 0x00, //...... + 0x00, //...... + 0x00, //...... + 0x00, //...... + 0x00, //...... + 0x00, //...... + 0x00, //...... + 0x00, //...... + 0x00, //...... + + + /*Unicode: U+0021 (!) , Width: 2 */ + 0x00, //.. + 0x00, //.. + 0x00, //.. + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0x00, //.. + 0x00, //.. + 0xc0, //@@ + 0xc0, //@@ + 0x00, //.. + 0x00, //.. + 0x00, //.. + 0x00, //.. + + + /*Unicode: U+0022 (") , Width: 6 */ + 0x00, //...... + 0x00, //...... + 0x00, //...... + 0xcc, //@@..@@ + 0xcc, //@@..@@ + 0xcc, //@@..@@ + 0xcc, //@@..@@ + 0xcc, //@@..@@ + 0x00, //...... + 0x00, //...... + 0x00, //...... + 0x00, //...... + 0x00, //...... + 0x00, //...... + 0x00, //...... + 0x00, //...... + 0x00, //...... + 0x00, //...... + 0x00, //...... + 0x00, //...... + + + /*Unicode: U+0023 (#) , Width: 12 */ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x04, 0x40, //.....@..+@.. + 0x04, 0x40, //....+@..+@.. + 0x0c, 0xc0, //....%@..%%.. + 0x0c, 0x80, //....@%..@+.. + 0x7f, 0xf0, //.@@@@@@@@@@@ + 0x7f, 0xf0, //.@@@@@@@@@@@ + 0x09, 0x80, //...+@..%@... + 0x19, 0x00, //...@%..@+... + 0xff, 0xe0, //@@@@@@@@@@@. + 0xff, 0xe0, //@@@@@@@@@@@. + 0x13, 0x00, //..+@..%@.... + 0x33, 0x00, //..%%..%%.... + 0x32, 0x00, //..@%..@+.... + 0x22, 0x00, //..@+..@..... + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + + + /*Unicode: U+0024 ($) , Width: 9 */ + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x08, 0x00, //....@.... + 0x08, 0x00, //....@.... + 0x3e, 0x00, //.+%@@@%.. + 0x7f, 0x00, //+@@@@@@@. + 0xe9, 0x00, //@@%.@.+@. + 0xc8, 0x00, //@@..@.... + 0xf8, 0x00, //%@@%@.... + 0x7e, 0x00, //.@@@@@@+. + 0x0f, 0x00, //...+@@@@+ + 0x09, 0x80, //....@.+@@ + 0x09, 0x80, //....@..@@ + 0x8b, 0x80, //@+..@.%@@ + 0xff, 0x00, //@@@@@@@@+ + 0x7e, 0x00, //.%@@@@%+. + 0x08, 0x00, //....@.... + 0x08, 0x00, //....@.... + 0x08, 0x00, //....@.... + 0x00, 0x00, //......... + + + /*Unicode: U+0025 (%) , Width: 15 */ + 0x00, 0x00, //............... + 0x00, 0x00, //............... + 0x00, 0x00, //............... + 0x78, 0x10, //.%@@%.....+@... + 0x48, 0x20, //+@++@+....@.... + 0xcc, 0x60, //@@..@@...%%.... + 0xcc, 0x40, //@@..@@...@..... + 0xcc, 0x80, //@@..@@..@+..... + 0xc8, 0x80, //+@++@+.+%...... + 0x79, 0x3c, //.%@@%..@..%@@%. + 0x02, 0x24, //......%+.+@++@+ + 0x02, 0x66, //.....+@..@@..@@ + 0x04, 0x66, //.....@...@@..@@ + 0x0c, 0x66, //....%%...@@..@@ + 0x08, 0x24, //....@....+@++@+ + 0x10, 0x3c, //...@+.....%@@%. + 0x00, 0x00, //............... + 0x00, 0x00, //............... + 0x00, 0x00, //............... + 0x00, 0x00, //............... + + + /*Unicode: U+0026 (&) , Width: 12 */ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x0f, 0x00, //...+@@@%+... + 0x1f, 0x80, //..+@@@@@@... + 0x30, 0x80, //..@@+..+%... + 0x30, 0x00, //..@@........ + 0x38, 0x00, //..%@%....... + 0x3c, 0x00, //..%@@%...... + 0x7e, 0x60, //.%@%@@%..@@. + 0xc7, 0x60, //%@+.+@@%+@%. + 0xc3, 0xc0, //@@...+@@@@.. + 0xc1, 0x80, //@@+...+@@+.. + 0xe1, 0xc0, //%@@+..+@@%.. + 0x7f, 0xe0, //.@@@@@@@@@%. + 0x3e, 0x70, //..%@@@%.+@@% + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + + + /*Unicode: U+0027 (') , Width: 2 */ + 0x00, //.. + 0x00, //.. + 0x00, //.. + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0x00, //.. + 0x00, //.. + 0x00, //.. + 0x00, //.. + 0x00, //.. + 0x00, //.. + 0x00, //.. + 0x00, //.. + 0x00, //.. + 0x00, //.. + 0x00, //.. + 0x00, //.. + + + /*Unicode: U+0028 (() , Width: 4 */ + 0x00, //.... + 0x00, //.... + 0x30, //..%@ + 0x20, //..@+ + 0x60, //.%@. + 0x60, //.@%. + 0x40, //+@+. + 0xc0, //%@.. + 0xc0, //@@.. + 0xc0, //@@.. + 0xc0, //@@.. + 0xc0, //@@.. + 0xc0, //%@.. + 0x40, //+@+. + 0x60, //.@%. + 0x60, //.%@. + 0x20, //..@+ + 0x30, //..%@ + 0x00, //.... + 0x00, //.... + + + /*Unicode: U+0029 ()) , Width: 4 */ + 0x00, //.... + 0x00, //.... + 0xc0, //@%.. + 0x40, //+@.. + 0x60, //.@%. + 0x60, //.%@. + 0x20, //.+@+ + 0x30, //..@% + 0x30, //..@@ + 0x30, //..@@ + 0x30, //..@@ + 0x30, //..@@ + 0x30, //..@% + 0x20, //.+@+ + 0x60, //.%@. + 0x60, //.@%. + 0x40, //+@.. + 0xc0, //@%.. + 0x00, //.... + 0x00, //.... + + + /*Unicode: U+002a (*) , Width: 7 */ + 0x00, //....... + 0x00, //....... + 0x00, //....... + 0x10, //...@... + 0x92, //%..@..% + 0x54, //+@+@+@+ + 0x38, //..@@@.. + 0x38, //..@@@.. + 0x54, //+@+@+@+ + 0x92, //%..@..% + 0x10, //...@... + 0x00, //....... + 0x00, //....... + 0x00, //....... + 0x00, //....... + 0x00, //....... + 0x00, //....... + 0x00, //....... + 0x00, //....... + 0x00, //....... + + + /*Unicode: U+002b (+) , Width: 12 */ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x06, 0x00, //.....@@..... + 0x06, 0x00, //.....@@..... + 0x06, 0x00, //.....@@..... + 0x06, 0x00, //.....@@..... + 0x06, 0x00, //.....@@..... + 0xff, 0xf0, //@@@@@@@@@@@@ + 0xff, 0xf0, //@@@@@@@@@@@@ + 0x06, 0x00, //.....@@..... + 0x06, 0x00, //.....@@..... + 0x06, 0x00, //.....@@..... + 0x06, 0x00, //.....@@..... + 0x06, 0x00, //.....@@..... + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + + + /*Unicode: U+002c (,) , Width: 3 */ + 0x00, //... + 0x00, //... + 0x00, //... + 0x00, //... + 0x00, //... + 0x00, //... + 0x00, //... + 0x00, //... + 0x00, //... + 0x00, //... + 0x00, //... + 0x00, //... + 0x00, //... + 0x00, //... + 0x60, //.@@ + 0x60, //.@@ + 0x40, //+@. + 0x80, //@+. + 0x00, //... + 0x00, //... + + + /*Unicode: U+002d (-) , Width: 5 */ + 0x00, //..... + 0x00, //..... + 0x00, //..... + 0x00, //..... + 0x00, //..... + 0x00, //..... + 0x00, //..... + 0x00, //..... + 0x00, //..... + 0x00, //..... + 0xf8, //@@@@@ + 0xf8, //@@@@@ + 0x00, //..... + 0x00, //..... + 0x00, //..... + 0x00, //..... + 0x00, //..... + 0x00, //..... + 0x00, //..... + 0x00, //..... + + + /*Unicode: U+002e (.) , Width: 2 */ + 0x00, //.. + 0x00, //.. + 0x00, //.. + 0x00, //.. + 0x00, //.. + 0x00, //.. + 0x00, //.. + 0x00, //.. + 0x00, //.. + 0x00, //.. + 0x00, //.. + 0x00, //.. + 0x00, //.. + 0x00, //.. + 0xc0, //@@ + 0xc0, //@@ + 0x00, //.. + 0x00, //.. + 0x00, //.. + 0x00, //.. + + + /*Unicode: U+002f (/) , Width: 6 */ + 0x00, //...... + 0x00, //...... + 0x00, //...... + 0x0c, //....@@ + 0x0c, //...+@% + 0x18, //...%@+ + 0x18, //...@@. + 0x18, //...@@. + 0x38, //..+@%. + 0x30, //..@@+. + 0x30, //..@@.. + 0x30, //.+@@.. + 0x70, //.%@%.. + 0x60, //.@@+.. + 0x60, //.@@... + 0x60, //+@%... + 0xc0, //%@+... + 0xc0, //@@.... + 0x00, //...... + 0x00, //...... + + + /*Unicode: U+0030 (0) , Width: 9 */ + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x1c, 0x00, //..+@@@+.. + 0x7f, 0x00, //.%@@@@@%. + 0x63, 0x00, //+@@+.+@@+ + 0xc1, 0x80, //%@+...+@% + 0xc1, 0x80, //@@.....@@ + 0xc1, 0x80, //@@.....@@ + 0xc1, 0x80, //@@.....@@ + 0xc1, 0x80, //@@.....@@ + 0xc1, 0x80, //@@.....@@ + 0xc1, 0x80, //%@+...+@% + 0x63, 0x00, //+@@+.+@@+ + 0x7f, 0x00, //.%@@@@@%. + 0x3e, 0x00, //..+@@@+.. + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + + + /*Unicode: U+0031 (1) , Width: 8 */ + 0x00, //........ + 0x00, //........ + 0x00, //........ + 0x38, //.+@@@... + 0xf8, //@@@@@... + 0x98, //@+.@@... + 0x18, //...@@... + 0x18, //...@@... + 0x18, //...@@... + 0x18, //...@@... + 0x18, //...@@... + 0x18, //...@@... + 0x18, //...@@... + 0x18, //...@@... + 0xff, //@@@@@@@@ + 0xff, //@@@@@@@@ + 0x00, //........ + 0x00, //........ + 0x00, //........ + 0x00, //........ + + + /*Unicode: U+0032 (2) , Width: 9 */ + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x7c, 0x00, //.%@@@%... + 0xfe, 0x00, //@@@@@@@+. + 0x87, 0x00, //@+...@@@. + 0x03, 0x00, //......@@. + 0x03, 0x00, //......@@. + 0x06, 0x00, //.....%@+. + 0x06, 0x00, //....+@@.. + 0x0c, 0x00, //...+@@... + 0x18, 0x00, //..+@@+... + 0x30, 0x00, //.+@@+.... + 0x60, 0x00, //+@@+..... + 0xff, 0x00, //@@@@@@@@. + 0xff, 0x00, //@@@@@@@@. + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + + + /*Unicode: U+0033 (3) , Width: 9 */ + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x7e, 0x00, //.%@@@@%.. + 0xff, 0x00, //@@@@@@@@+ + 0x83, 0x80, //@+....%@@ + 0x01, 0x80, //.......@@ + 0x03, 0x80, //......%@% + 0x3e, 0x00, //..@@@@@+. + 0x3f, 0x00, //..@@@@@%. + 0x03, 0x80, //.....+@@% + 0x01, 0x80, //.......@@ + 0x01, 0x80, //.......@@ + 0x83, 0x80, //%+...+@@% + 0xff, 0x00, //@@@@@@@@. + 0x7e, 0x00, //.%@@@@%.. + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + + + /*Unicode: U+0034 (4) , Width: 10 */ + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + 0x07, 0x00, //.....%@@.. + 0x07, 0x00, //....+@@@.. + 0x0b, 0x00, //....@+@@.. + 0x1b, 0x00, //...%@.@@.. + 0x13, 0x00, //..+@..@@.. + 0x23, 0x00, //..@+..@@.. + 0x63, 0x00, //.@@...@@.. + 0x43, 0x00, //+@....@@.. + 0xff, 0xc0, //@@@@@@@@@@ + 0xff, 0xc0, //@@@@@@@@@@ + 0x03, 0x00, //......@@.. + 0x03, 0x00, //......@@.. + 0x03, 0x00, //......@@.. + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + + + /*Unicode: U+0035 (5) , Width: 8 */ + 0x00, //........ + 0x00, //........ + 0x00, //........ + 0x7e, //.@@@@@@. + 0x7e, //.@@@@@@. + 0x60, //.@@..... + 0x60, //.@@..... + 0x7c, //.@@@@@.. + 0x7e, //.@@@@@@. + 0x47, //.%...@@% + 0x03, //......@@ + 0x03, //......@@ + 0x03, //......@@ + 0x87, //%...+@@% + 0xfe, //@@@@@@@. + 0x7c, //.%@@@%.. + 0x00, //........ + 0x00, //........ + 0x00, //........ + 0x00, //........ + + + /*Unicode: U+0036 (6) , Width: 9 */ + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x1e, 0x00, //...%@@@+. + 0x3f, 0x00, //.+@@@@@@. + 0x71, 0x00, //.@@%...%. + 0xe0, 0x00, //+@@...... + 0xc0, 0x00, //@@+...... + 0xde, 0x00, //@@.%@@%.. + 0xff, 0x00, //@@%@@@@@. + 0xe3, 0x80, //@@%...%@% + 0xc1, 0x80, //@@.....@@ + 0xc1, 0x80, //%@.....@@ + 0x63, 0x80, //+@%...%@% + 0x7f, 0x00, //.%@@@@@@. + 0x1e, 0x00, //..+@@@%.. + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + + + /*Unicode: U+0037 (7) , Width: 8 */ + 0x00, //........ + 0x00, //........ + 0x00, //........ + 0xff, //@@@@@@@@ + 0xff, //@@@@@@@@ + 0x06, //.....%@+ + 0x06, //.....@@. + 0x06, //....+@@. + 0x0c, //....%@+. + 0x0c, //....@@.. + 0x0c, //....@@.. + 0x1c, //...%@%.. + 0x18, //...@@... + 0x18, //...@@... + 0x38, //..%@%... + 0x30, //..@@+... + 0x00, //........ + 0x00, //........ + 0x00, //........ + 0x00, //........ + + + /*Unicode: U+0038 (8) , Width: 9 */ + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x3e, 0x00, //.+%@@@%+. + 0x7f, 0x00, //+@@@@@@@+ + 0xe3, 0x80, //@@%...%@@ + 0xc1, 0x80, //@@.....@@ + 0xe3, 0x80, //%@%...%@% + 0x3e, 0x00, //.+@@@@@+. + 0x7f, 0x00, //.%@@@@@%. + 0xe3, 0x80, //%@%...%@% + 0xc1, 0x80, //@@.....@@ + 0xc1, 0x80, //@@.....@@ + 0xe3, 0x80, //@@%...%@@ + 0x7f, 0x00, //+@@@@@@@+ + 0x3e, 0x00, //..%@@@%.. + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + + + /*Unicode: U+0039 (9) , Width: 9 */ + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x3c, 0x00, //..%@@@+.. + 0x7f, 0x00, //.@@@@@@%. + 0xe3, 0x00, //%@%...%@. + 0xc1, 0x80, //@@.....@% + 0xc1, 0x80, //@@.....@@ + 0xe3, 0x80, //%@%...%@@ + 0x7f, 0x80, //.@@@@@%@@ + 0x3d, 0x80, //..%@@%.@@ + 0x01, 0x80, //......+@@ + 0x03, 0x00, //......@@+ + 0x47, 0x00, //.%...%@@. + 0x7e, 0x00, //.@@@@@@+. + 0x3c, 0x00, //.+@@@%... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + + + /*Unicode: U+003a (:) , Width: 2 */ + 0x00, //.. + 0x00, //.. + 0x00, //.. + 0x00, //.. + 0x00, //.. + 0x00, //.. + 0x00, //.. + 0xc0, //@@ + 0xc0, //@@ + 0x00, //.. + 0x00, //.. + 0x00, //.. + 0x00, //.. + 0x00, //.. + 0xc0, //@@ + 0xc0, //@@ + 0x00, //.. + 0x00, //.. + 0x00, //.. + 0x00, //.. + + + /*Unicode: U+003b (;) , Width: 3 */ + 0x00, //... + 0x00, //... + 0x00, //... + 0x00, //... + 0x00, //... + 0x00, //... + 0x00, //... + 0x60, //.@@ + 0x60, //.@@ + 0x00, //... + 0x00, //... + 0x00, //... + 0x00, //... + 0x00, //... + 0x60, //.@@ + 0x60, //.@@ + 0x40, //+@. + 0x80, //@+. + 0x00, //... + 0x00, //... + + + /*Unicode: U+003c (<) , Width: 11 */ + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x20, //.........+@ + 0x01, 0xe0, //.......%@@@ + 0x07, 0xc0, //....+@@@@%+ + 0x3e, 0x00, //.+%@@@@+... + 0xf8, 0x00, //@@@@%+..... + 0xf8, 0x00, //@@@@%+..... + 0x3e, 0x00, //.+%@@@@+... + 0x07, 0xc0, //....+@@@@%+ + 0x01, 0xe0, //......+%@@@ + 0x00, 0x20, //.........+@ + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + + + /*Unicode: U+003d (=) , Width: 11 */ + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0xff, 0xe0, //@@@@@@@@@@@ + 0xff, 0xe0, //@@@@@@@@@@@ + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0xff, 0xe0, //@@@@@@@@@@@ + 0xff, 0xe0, //@@@@@@@@@@@ + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + + + /*Unicode: U+003e (>) , Width: 11 */ + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x80, 0x00, //@+......... + 0xf0, 0x00, //@@@%....... + 0x7c, 0x00, //+%@@@@+.... + 0x0f, 0x80, //...+@@@@%+. + 0x03, 0xe0, //.....+%@@@@ + 0x03, 0xe0, //.....+%@@@@ + 0x0f, 0x80, //...+@@@@%+. + 0x7c, 0x00, //+%@@@@+.... + 0xf0, 0x00, //@@@%+...... + 0x80, 0x00, //@+......... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + + + /*Unicode: U+003f (?) , Width: 7 */ + 0x00, //....... + 0x00, //....... + 0x00, //....... + 0x78, //.%@@@+. + 0xfc, //@@@@@@+ + 0x8e, //@+..%@@ + 0x06, //.....@@ + 0x06, //....+@% + 0x0c, //....@@. + 0x18, //...@@.. + 0x30, //..@@... + 0x30, //..@@... + 0x30, //..@@... + 0x00, //....... + 0x30, //..@@... + 0x30, //..@@... + 0x00, //....... + 0x00, //....... + 0x00, //....... + 0x00, //....... + + + /*Unicode: U+0040 (@) , Width: 16 */ + 0x00, 0x00, //................ + 0x00, 0x00, //................ + 0x00, 0x00, //................ + 0x07, 0xe0, //.....%@@@@%+.... + 0x1f, 0xf8, //...%@@@@@@@@@+.. + 0x3c, 0x1c, //..%@@%....+%@@+. + 0x70, 0x06, //.%@@........+@@. + 0x60, 0x03, //.@@..........+@% + 0xe3, 0x63, //%@%...@@.@@...@@ + 0xc7, 0xe3, //@@...%@@@@@...@@ + 0xc6, 0x63, //@@...@@..@@..+@@ + 0xc6, 0x66, //@@...@@..@@.+@@+ + 0xc7, 0xfc, //@@...%@@@@@@@@+. + 0xe3, 0x70, //%@%...@@.@@%+... + 0x60, 0x00, //.@@............. + 0x70, 0x00, //.%@@............ + 0x3c, 0x30, //..@@@+....+@.... + 0x1f, 0xf0, //...%@@@@@@@@.... + 0x07, 0xc0, //....+%@@@%+..... + 0x00, 0x00, //................ + + + /*Unicode: U+0041 (A) , Width: 12 */ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x06, 0x00, //.....@@..... + 0x06, 0x00, //....+@@+.... + 0x0f, 0x00, //....@@@@.... + 0x0f, 0x00, //....@@@@.... + 0x19, 0x80, //...%@++@%... + 0x19, 0x80, //...@@..@@... + 0x19, 0x80, //..+@%..%@+.. + 0x30, 0xc0, //..@@....@@.. + 0x3f, 0xc0, //..@@@@@@@@.. + 0x7f, 0xe0, //.%@@@@@@@@%. + 0x60, 0x60, //.@@......@@. + 0x60, 0x60, //+@%......%@+ + 0xc0, 0x30, //@@+......+@@ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + + + /*Unicode: U+0042 (B) , Width: 9 */ + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0xfc, 0x00, //@@@@@@+.. + 0xff, 0x00, //@@@@@@@%. + 0xc3, 0x00, //@@...+@@. + 0xc3, 0x00, //@@....@@. + 0xc3, 0x00, //@@...+@%. + 0xfe, 0x00, //@@@@@@%.. + 0xfe, 0x00, //@@@@@@@+. + 0xc3, 0x00, //@@....%@+ + 0xc1, 0x80, //@@.....@@ + 0xc1, 0x80, //@@.....@@ + 0xc3, 0x80, //@@....%@@ + 0xff, 0x00, //@@@@@@@@+ + 0xfe, 0x00, //@@@@@@%.. + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + + + /*Unicode: U+0043 (C) , Width: 11 */ + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x0f, 0xc0, //...+%@@@@%. + 0x3f, 0xe0, //..@@@@@@@@@ + 0x70, 0x20, //.@@@+....+@ + 0x60, 0x00, //+@@........ + 0xc0, 0x00, //%@+........ + 0xc0, 0x00, //@@......... + 0xc0, 0x00, //@@......... + 0xc0, 0x00, //@@......... + 0xc0, 0x00, //%@+........ + 0x60, 0x00, //+@@........ + 0x70, 0x20, //.@@@+....+@ + 0x3f, 0xe0, //..@@@@@@@@@ + 0x0f, 0xc0, //...+%@@@@%. + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + + + /*Unicode: U+0044 (D) , Width: 11 */ + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0xfe, 0x00, //@@@@@@%+... + 0xff, 0x80, //@@@@@@@@@.. + 0xc1, 0xc0, //@@....+@@@. + 0xc0, 0xc0, //@@......@@+ + 0xc0, 0x60, //@@......+@@ + 0xc0, 0x60, //@@.......@@ + 0xc0, 0x60, //@@.......@@ + 0xc0, 0x60, //@@.......@@ + 0xc0, 0x60, //@@......+@@ + 0xc0, 0xc0, //@@......@@+ + 0xc1, 0xc0, //@@....+@@@. + 0xff, 0x80, //@@@@@@@@@.. + 0xfe, 0x00, //@@@@@@%+... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + + + /*Unicode: U+0045 (E) , Width: 8 */ + 0x00, //........ + 0x00, //........ + 0x00, //........ + 0xff, //@@@@@@@@ + 0xff, //@@@@@@@@ + 0xc0, //@@...... + 0xc0, //@@...... + 0xc0, //@@...... + 0xff, //@@@@@@@@ + 0xff, //@@@@@@@@ + 0xc0, //@@...... + 0xc0, //@@...... + 0xc0, //@@...... + 0xc0, //@@...... + 0xff, //@@@@@@@@ + 0xff, //@@@@@@@@ + 0x00, //........ + 0x00, //........ + 0x00, //........ + 0x00, //........ + + + /*Unicode: U+0046 (F) , Width: 8 */ + 0x00, //........ + 0x00, //........ + 0x00, //........ + 0xff, //@@@@@@@@ + 0xff, //@@@@@@@@ + 0xc0, //@@...... + 0xc0, //@@...... + 0xc0, //@@...... + 0xfe, //@@@@@@@. + 0xfe, //@@@@@@@. + 0xc0, //@@...... + 0xc0, //@@...... + 0xc0, //@@...... + 0xc0, //@@...... + 0xc0, //@@...... + 0xc0, //@@...... + 0x00, //........ + 0x00, //........ + 0x00, //........ + 0x00, //........ + + + /*Unicode: U+0047 (G) , Width: 11 */ + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x0f, 0xc0, //...+%@@@@%. + 0x3f, 0xe0, //..@@@@@@@@@ + 0x70, 0x20, //.@@@+....+@ + 0x60, 0x00, //+@@........ + 0xc0, 0x00, //%@+........ + 0xc3, 0xe0, //@@....@@@@@ + 0xc3, 0xe0, //@@....@@@@@ + 0xc0, 0x60, //@@.......@@ + 0xc0, 0x60, //@@+......@@ + 0x60, 0x60, //+@@......@@ + 0x70, 0x60, //.@@@+...+@@ + 0x3f, 0xc0, //..@@@@@@@@+ + 0x0f, 0x80, //...+@@@@%.. + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + + + /*Unicode: U+0048 (H) , Width: 10 */ + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + 0xc0, 0xc0, //@@......@@ + 0xc0, 0xc0, //@@......@@ + 0xc0, 0xc0, //@@......@@ + 0xc0, 0xc0, //@@......@@ + 0xc0, 0xc0, //@@......@@ + 0xff, 0xc0, //@@@@@@@@@@ + 0xff, 0xc0, //@@@@@@@@@@ + 0xc0, 0xc0, //@@......@@ + 0xc0, 0xc0, //@@......@@ + 0xc0, 0xc0, //@@......@@ + 0xc0, 0xc0, //@@......@@ + 0xc0, 0xc0, //@@......@@ + 0xc0, 0xc0, //@@......@@ + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + + + /*Unicode: U+0049 (I) , Width: 2 */ + 0x00, //.. + 0x00, //.. + 0x00, //.. + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0x00, //.. + 0x00, //.. + 0x00, //.. + 0x00, //.. + + + /*Unicode: U+004a (J) , Width: 4 */ + 0x00, //.... + 0x00, //.... + 0x00, //.... + 0x30, //..@@ + 0x30, //..@@ + 0x30, //..@@ + 0x30, //..@@ + 0x30, //..@@ + 0x30, //..@@ + 0x30, //..@@ + 0x30, //..@@ + 0x30, //..@@ + 0x30, //..@@ + 0x30, //..@@ + 0x30, //..@@ + 0x30, //..@@ + 0x30, //..@@ + 0x70, //.%@% + 0xe0, //@@@. + 0xc0, //@%.. + + + /*Unicode: U+004b (K) , Width: 11 */ + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0xc1, 0x80, //@@.....@@+. + 0xc3, 0x00, //@@....@@+.. + 0xc6, 0x00, //@@...@@+... + 0xcc, 0x00, //@@..@@+.... + 0xd8, 0x00, //@@.@@+..... + 0xf0, 0x00, //@@@@+...... + 0xf0, 0x00, //@@@@....... + 0xd8, 0x00, //@@+@@...... + 0xcc, 0x00, //@@.+@@..... + 0xc6, 0x00, //@@..+@@.... + 0xc3, 0x00, //@@...+@@... + 0xc1, 0x80, //@@....+@@.. + 0xc0, 0xc0, //@@.....+@@+ + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + + + /*Unicode: U+004c (L) , Width: 8 */ + 0x00, //........ + 0x00, //........ + 0x00, //........ + 0xc0, //@@...... + 0xc0, //@@...... + 0xc0, //@@...... + 0xc0, //@@...... + 0xc0, //@@...... + 0xc0, //@@...... + 0xc0, //@@...... + 0xc0, //@@...... + 0xc0, //@@...... + 0xc0, //@@...... + 0xc0, //@@...... + 0xff, //@@@@@@@@ + 0xff, //@@@@@@@@ + 0x00, //........ + 0x00, //........ + 0x00, //........ + 0x00, //........ + + + /*Unicode: U+004d (M) , Width: 12 */ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0xe0, 0x70, //@@@+....+@@@ + 0xf0, 0xf0, //@@@%....%@@@ + 0xf0, 0xf0, //@@%@....@%@@ + 0xd8, 0xb0, //@@.@+..+@.@@ + 0xd9, 0xb0, //@@.@@..@@.@@ + 0xd9, 0xb0, //@@.%@..@+.@@ + 0xcf, 0x30, //@@..@%%@..@@ + 0xcf, 0x30, //@@..@@@@..@@ + 0xc6, 0x30, //@@..+@@+..@@ + 0xc6, 0x30, //@@...@@...@@ + 0xc0, 0x30, //@@........@@ + 0xc0, 0x30, //@@........@@ + 0xc0, 0x30, //@@........@@ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + + + /*Unicode: U+004e (N) , Width: 10 */ + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + 0xe0, 0xc0, //@@%.....@@ + 0xe0, 0xc0, //@@@.....@@ + 0xf0, 0xc0, //@@@%....@@ + 0xf0, 0xc0, //@@%@+...@@ + 0xd8, 0xc0, //@@.@@...@@ + 0xd8, 0xc0, //@@.%@+..@@ + 0xcc, 0xc0, //@@..@@..@@ + 0xc6, 0xc0, //@@..+@%.@@ + 0xc6, 0xc0, //@@...@@.@@ + 0xc3, 0xc0, //@@...+@@@@ + 0xc3, 0xc0, //@@....%@@@ + 0xc1, 0xc0, //@@.....@@@ + 0xc1, 0xc0, //@@.....%@@ + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + + + /*Unicode: U+004f (O) , Width: 12 */ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x0f, 0x80, //...+@@@@+... + 0x3f, 0xc0, //..@@@@@@@@.. + 0x70, 0xe0, //.@@@+..+@@@. + 0x60, 0x60, //+@@......@@+ + 0xc0, 0x30, //%@+......+@% + 0xc0, 0x30, //@@........@@ + 0xc0, 0x30, //@@........@@ + 0xc0, 0x30, //@@........@@ + 0xc0, 0x30, //%@+......+@% + 0x60, 0x60, //+@@......@@+ + 0x70, 0xe0, //.@@@+..+@@@. + 0x3f, 0xc0, //..@@@@@@@@.. + 0x1f, 0x80, //...+@@@@+... + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + + + /*Unicode: U+0050 (P) , Width: 8 */ + 0x00, //........ + 0x00, //........ + 0x00, //........ + 0xfc, //@@@@@%+. + 0xfe, //@@@@@@@+ + 0xc7, //@@...%@@ + 0xc3, //@@....@@ + 0xc3, //@@....@@ + 0xc7, //@@...%@@ + 0xfe, //@@@@@@@+ + 0xfc, //@@@@@@+. + 0xc0, //@@...... + 0xc0, //@@...... + 0xc0, //@@...... + 0xc0, //@@...... + 0xc0, //@@...... + 0x00, //........ + 0x00, //........ + 0x00, //........ + 0x00, //........ + + + /*Unicode: U+0051 (Q) , Width: 12 */ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x0f, 0x80, //...+@@@@%... + 0x3f, 0xc0, //..@@@@@@@@.. + 0x70, 0xe0, //.@@@+..+@@@. + 0x60, 0x60, //+@@......@@+ + 0xc0, 0x30, //%@+......+@@ + 0xc0, 0x30, //@@........@@ + 0xc0, 0x30, //@@........@@ + 0xc0, 0x30, //@@........@@ + 0xc0, 0x30, //%@+......+@% + 0x60, 0x60, //+@@......@@+ + 0x70, 0xe0, //.@@@+..+@@%. + 0x3f, 0xc0, //..@@@@@@@%.. + 0x1f, 0x80, //...%@@@@%... + 0x01, 0x80, //......+@@+.. + 0x00, 0xc0, //.......+@@+. + 0x00, 0x00, //............ + 0x00, 0x00, //............ + + + /*Unicode: U+0052 (R) , Width: 10 */ + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + 0xfc, 0x00, //@@@@@@+... + 0xfe, 0x00, //@@@@@@@+.. + 0xc7, 0x00, //@@...%@@.. + 0xc3, 0x00, //@@....@@.. + 0xc3, 0x00, //@@....@@.. + 0xc7, 0x00, //@@...%@%.. + 0xfe, 0x00, //@@@@@@@... + 0xfc, 0x00, //@@@@@@+... + 0xc6, 0x00, //@@..+@@... + 0xc3, 0x00, //@@...+@@.. + 0xc3, 0x00, //@@....@@+. + 0xc1, 0x80, //@@....+@@. + 0xc1, 0xc0, //@@.....%@% + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + + + /*Unicode: U+0053 (S) , Width: 9 */ + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x3e, 0x00, //..%@@@%.. + 0x7f, 0x00, //+@@@@@@@. + 0xe1, 0x00, //@@%...+%. + 0xc0, 0x00, //@@....... + 0xc0, 0x00, //@@+...... + 0x7c, 0x00, //+@@@@%+.. + 0x3f, 0x00, //..%@@@@@. + 0x03, 0x80, //.....+@@% + 0x01, 0x80, //.......@@ + 0x01, 0x80, //.......@@ + 0x83, 0x80, //@+....%@@ + 0xff, 0x00, //@@@@@@@@+ + 0x7e, 0x00, //.%@@@@%.. + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + + + /*Unicode: U+0054 (T) , Width: 12 */ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0xff, 0xf0, //@@@@@@@@@@@@ + 0xff, 0xf0, //@@@@@@@@@@@@ + 0x06, 0x00, //.....@@..... + 0x06, 0x00, //.....@@..... + 0x06, 0x00, //.....@@..... + 0x06, 0x00, //.....@@..... + 0x06, 0x00, //.....@@..... + 0x06, 0x00, //.....@@..... + 0x06, 0x00, //.....@@..... + 0x06, 0x00, //.....@@..... + 0x06, 0x00, //.....@@..... + 0x06, 0x00, //.....@@..... + 0x06, 0x00, //.....@@..... + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + + + /*Unicode: U+0055 (U) , Width: 10 */ + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + 0xc0, 0xc0, //@@......@@ + 0xc0, 0xc0, //@@......@@ + 0xc0, 0xc0, //@@......@@ + 0xc0, 0xc0, //@@......@@ + 0xc0, 0xc0, //@@......@@ + 0xc0, 0xc0, //@@......@@ + 0xc0, 0xc0, //@@......@@ + 0xc0, 0xc0, //@@......@@ + 0xc0, 0xc0, //@@......@@ + 0xc0, 0xc0, //@@+....+@@ + 0x61, 0x80, //+@@+..+@@+ + 0x7f, 0x80, //.@@@@@@@@. + 0x1e, 0x00, //..+@@@@+.. + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + + + /*Unicode: U+0056 (V) , Width: 12 */ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0xc0, 0x30, //@@+......+@@ + 0x60, 0x60, //+@%......%@+ + 0x60, 0x60, //.@@......@@. + 0x60, 0x60, //.%@+....+@%. + 0x30, 0xc0, //..@@....@@.. + 0x30, 0xc0, //..@@....@@.. + 0x19, 0x80, //..+@%..%@+.. + 0x19, 0x80, //...@@..@@... + 0x19, 0x80, //...%@++@%... + 0x0f, 0x00, //....@@@@+... + 0x0f, 0x00, //....@@@@.... + 0x06, 0x00, //....+@@+.... + 0x06, 0x00, //.....@@..... + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + + + /*Unicode: U+0057 (W) , Width: 17 */ + 0x00, 0x00, 0x00, //................. + 0x00, 0x00, 0x00, //................. + 0x00, 0x00, 0x00, //................. + 0xc1, 0xc1, 0x80, //@@.....@@@.....@@ + 0xc1, 0xc1, 0x80, //%@+...+@@@+...+@% + 0x63, 0xe3, 0x00, //+@%...%@%@%...%@+ + 0x63, 0x63, 0x00, //.@@...@@.@@...@@. + 0x63, 0x63, 0x00, //.@@...@@.@@...@@. + 0x63, 0x63, 0x00, //.%@+.+@%.%@+.+@%. + 0x36, 0x36, 0x00, //.+@%.%@+.+@%.%@+. + 0x36, 0x36, 0x00, //..@@.@@...@@.@@.. + 0x36, 0x36, 0x00, //..@@+@@...@@+@@.. + 0x3e, 0x3e, 0x00, //..%@@@%...%@@@%.. + 0x1c, 0x1c, 0x00, //..+@@@+...+@@@+.. + 0x1c, 0x1c, 0x00, //...@@@.....@@@... + 0x1c, 0x1c, 0x00, //...@@@.....@@%... + 0x00, 0x00, 0x00, //................. + 0x00, 0x00, 0x00, //................. + 0x00, 0x00, 0x00, //................. + 0x00, 0x00, 0x00, //................. + + + /*Unicode: U+0058 (X) , Width: 11 */ + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x70, 0xe0, //.%@%....%@% + 0x30, 0xc0, //..@@+..+@@. + 0x39, 0x80, //..%@@..@@+. + 0x1b, 0x80, //...@@+%@%.. + 0x0f, 0x00, //...+@@@@... + 0x0e, 0x00, //....%@@+... + 0x0e, 0x00, //....%@@.... + 0x0f, 0x00, //...+@@@@... + 0x1b, 0x00, //...@@+@@+.. + 0x39, 0x80, //..%@%.+@@.. + 0x31, 0xc0, //.+@@...@@%. + 0x60, 0xc0, //.@@+....@@. + 0xe0, 0xe0, //%@@.....%@% + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + + + /*Unicode: U+0059 (Y) , Width: 12 */ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0xe0, 0x70, //%@@......@@% + 0x60, 0x60, //.@@+....+@@. + 0x30, 0xc0, //..@@....@@.. + 0x19, 0x80, //..+@%..%@+.. + 0x19, 0x80, //...%@++@%... + 0x0f, 0x00, //....@@@@.... + 0x06, 0x00, //.....@@..... + 0x06, 0x00, //.....@@..... + 0x06, 0x00, //.....@@..... + 0x06, 0x00, //.....@@..... + 0x06, 0x00, //.....@@..... + 0x06, 0x00, //.....@@..... + 0x06, 0x00, //.....@@..... + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + + + /*Unicode: U+005a (Z) , Width: 11 */ + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0xff, 0xe0, //@@@@@@@@@@@ + 0xff, 0xe0, //@@@@@@@@@@@ + 0x01, 0xc0, //.......%@@. + 0x03, 0x80, //......%@@.. + 0x03, 0x00, //.....+@@+.. + 0x07, 0x00, //.....@@%... + 0x0e, 0x00, //....@@%.... + 0x1c, 0x00, //...%@@..... + 0x18, 0x00, //..+@@...... + 0x30, 0x00, //.+@@+...... + 0x70, 0x00, //.@@%....... + 0xff, 0xe0, //@@@@@@@@@@@ + 0xff, 0xe0, //@@@@@@@@@@@ + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + + + /*Unicode: U+005b ([) , Width: 4 */ + 0x00, //.... + 0x00, //.... + 0xf0, //@@@@ + 0xf0, //@@@@ + 0xc0, //@@.. + 0xc0, //@@.. + 0xc0, //@@.. + 0xc0, //@@.. + 0xc0, //@@.. + 0xc0, //@@.. + 0xc0, //@@.. + 0xc0, //@@.. + 0xc0, //@@.. + 0xc0, //@@.. + 0xc0, //@@.. + 0xc0, //@@.. + 0xf0, //@@@@ + 0xf0, //@@@@ + 0x00, //.... + 0x00, //.... + + + /*Unicode: U+005c (\) , Width: 6 */ + 0x00, //...... + 0x00, //...... + 0x00, //...... + 0xc0, //@@.... + 0xc0, //%@+... + 0x60, //+@%... + 0x60, //.@@... + 0x60, //.@@+.. + 0x70, //.%@%.. + 0x30, //.+@@.. + 0x30, //..@@.. + 0x30, //..@@+. + 0x38, //..+@%. + 0x18, //...@@. + 0x18, //...@@. + 0x18, //...%@+ + 0x0c, //...+@% + 0x0c, //....@@ + 0x00, //...... + 0x00, //...... + + + /*Unicode: U+005d (]) , Width: 4 */ + 0x00, //.... + 0x00, //.... + 0xf0, //@@@@ + 0xf0, //@@@@ + 0x30, //..@@ + 0x30, //..@@ + 0x30, //..@@ + 0x30, //..@@ + 0x30, //..@@ + 0x30, //..@@ + 0x30, //..@@ + 0x30, //..@@ + 0x30, //..@@ + 0x30, //..@@ + 0x30, //..@@ + 0x30, //..@@ + 0xf0, //@@@@ + 0xf0, //@@@@ + 0x00, //.... + 0x00, //.... + + + /*Unicode: U+005e (^) , Width: 11 */ + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x0e, 0x00, //....@@@.... + 0x1f, 0x00, //...%@%@%... + 0x31, 0x80, //..%@+.+@%.. + 0x60, 0xc0, //.%@+...+@%. + 0xc0, 0x60, //%@+.....+@% + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + + + /*Unicode: U+005f (_) , Width: 9 */ + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0xff, 0x80, //@@@@@@@@@ + 0xff, 0x80, //@@@@@@@@@ + + + /*Unicode: U+0060 (`) , Width: 4 */ + 0x00, //.... + 0x00, //.... + 0xc0, //%@.. + 0x60, //.%@. + 0x30, //..%% + 0x00, //.... + 0x00, //.... + 0x00, //.... + 0x00, //.... + 0x00, //.... + 0x00, //.... + 0x00, //.... + 0x00, //.... + 0x00, //.... + 0x00, //.... + 0x00, //.... + 0x00, //.... + 0x00, //.... + 0x00, //.... + 0x00, //.... + + + /*Unicode: U+0061 (a) , Width: 8 */ + 0x00, //........ + 0x00, //........ + 0x00, //........ + 0x00, //........ + 0x00, //........ + 0x00, //........ + 0x3c, //.+%@@@+. + 0x7e, //.@@@@@@. + 0x47, //.%...%@% + 0x03, //......@@ + 0x3f, //.+@@@@@@ + 0xff, //%@@@@@@@ + 0xc3, //@@+...@@ + 0xc7, //@@+..%@@ + 0xff, //%@@@@%@@ + 0x7b, //.%@@%.@@ + 0x00, //........ + 0x00, //........ + 0x00, //........ + 0x00, //........ + + + /*Unicode: U+0062 (b) , Width: 9 */ + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0xc0, 0x00, //@@....... + 0xc0, 0x00, //@@....... + 0xc0, 0x00, //@@....... + 0xc0, 0x00, //@@....... + 0xde, 0x00, //@@.%@@%.. + 0xff, 0x00, //@@%@@@@@. + 0xe3, 0x80, //@@@...@@% + 0xc1, 0x80, //@@+...+@@ + 0xc1, 0x80, //@@.....@@ + 0xc1, 0x80, //@@.....@@ + 0xc1, 0x80, //@@+...+@@ + 0xe3, 0x80, //@@@...@@% + 0xff, 0x00, //@@%@@@@@. + 0xde, 0x00, //@@.%@@%.. + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + + + /*Unicode: U+0063 (c) , Width: 8 */ + 0x00, //........ + 0x00, //........ + 0x00, //........ + 0x00, //........ + 0x00, //........ + 0x00, //........ + 0x1e, //..+@@@%+ + 0x7f, //.%@@@@@@ + 0x61, //+@@+...% + 0xc0, //@@+..... + 0xc0, //@@...... + 0xc0, //@@...... + 0xc0, //@@+..... + 0x61, //+@@+...% + 0x7f, //.%@@@@@@ + 0x1e, //..+@@@%+ + 0x00, //........ + 0x00, //........ + 0x00, //........ + 0x00, //........ + + + /*Unicode: U+0064 (d) , Width: 9 */ + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x01, 0x80, //.......@@ + 0x01, 0x80, //.......@@ + 0x01, 0x80, //.......@@ + 0x01, 0x80, //.......@@ + 0x3d, 0x80, //..%@@%.@@ + 0x7f, 0x80, //.@@@@@%@@ + 0xe3, 0x80, //%@@...@@@ + 0xc1, 0x80, //@@+...+@@ + 0xc1, 0x80, //@@.....@@ + 0xc1, 0x80, //@@.....@@ + 0xc1, 0x80, //@@+...+@@ + 0xe3, 0x80, //%@@...@@@ + 0x7f, 0x80, //.@@@@@%@@ + 0x3d, 0x80, //..%@@%.@@ + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + + + /*Unicode: U+0065 (e) , Width: 10 */ + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + 0x1f, 0x00, //..+%@@@%.. + 0x7f, 0x80, //.%@@@@@@@. + 0x61, 0xc0, //+@@+...@@% + 0xc0, 0xc0, //@@......@@ + 0xff, 0xc0, //@@@@@@@@@@ + 0xff, 0xc0, //@@@@@@@@@@ + 0xc0, 0x00, //@@........ + 0x60, 0x40, //+@@+....+@ + 0x7f, 0xc0, //.%@@@@@@@@ + 0x1f, 0x80, //..+%@@@@%. + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + + + /*Unicode: U+0066 (f) , Width: 7 */ + 0x00, //....... + 0x00, //....... + 0x1e, //...%@@@ + 0x3e, //..%@@@@ + 0x30, //..@@+.. + 0x30, //..@@... + 0xfe, //@@@@@@@ + 0xfe, //@@@@@@@ + 0x30, //..@@... + 0x30, //..@@... + 0x30, //..@@... + 0x30, //..@@... + 0x30, //..@@... + 0x30, //..@@... + 0x30, //..@@... + 0x30, //..@@... + 0x00, //....... + 0x00, //....... + 0x00, //....... + 0x00, //....... + + + /*Unicode: U+0067 (g) , Width: 9 */ + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x3d, 0x80, //..%@@%.@@ + 0x7f, 0x80, //.@@@@@%@@ + 0xe3, 0x80, //%@@...@@@ + 0xc1, 0x80, //@@+...+@@ + 0xc1, 0x80, //@@.....@@ + 0xc1, 0x80, //@@.....@@ + 0xc1, 0x80, //@@+...+@@ + 0xe3, 0x80, //%@@...@@@ + 0x7f, 0x80, //.@@@@@%@@ + 0x3d, 0x80, //..%@@%.@@ + 0x01, 0x80, //......+@% + 0x43, 0x00, //.%...+@@+ + 0x7f, 0x00, //.@@@@@@@. + 0x3e, 0x00, //.+%@@@%.. + + + /*Unicode: U+0068 (h) , Width: 8 */ + 0x00, //........ + 0x00, //........ + 0xc0, //@@...... + 0xc0, //@@...... + 0xc0, //@@...... + 0xc0, //@@...... + 0xde, //@@.%@@%. + 0xfe, //@@%@@@@+ + 0xe7, //@@@..%@@ + 0xc3, //@@....@@ + 0xc3, //@@....@@ + 0xc3, //@@....@@ + 0xc3, //@@....@@ + 0xc3, //@@....@@ + 0xc3, //@@....@@ + 0xc3, //@@....@@ + 0x00, //........ + 0x00, //........ + 0x00, //........ + 0x00, //........ + + + /*Unicode: U+0069 (i) , Width: 2 */ + 0x00, //.. + 0x00, //.. + 0xc0, //@@ + 0xc0, //@@ + 0x00, //.. + 0x00, //.. + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0x00, //.. + 0x00, //.. + 0x00, //.. + 0x00, //.. + + + /*Unicode: U+006a (j) , Width: 4 */ + 0x00, //.... + 0x00, //.... + 0x30, //..@@ + 0x30, //..@@ + 0x00, //.... + 0x00, //.... + 0x30, //..@@ + 0x30, //..@@ + 0x30, //..@@ + 0x30, //..@@ + 0x30, //..@@ + 0x30, //..@@ + 0x30, //..@@ + 0x30, //..@@ + 0x30, //..@@ + 0x30, //..@@ + 0x30, //..@@ + 0x30, //.+@@ + 0xe0, //@@@+ + 0xc0, //@@+. + + + /*Unicode: U+006b (k) , Width: 9 */ + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0xc0, 0x00, //@@....... + 0xc0, 0x00, //@@....... + 0xc0, 0x00, //@@....... + 0xc0, 0x00, //@@....... + 0xc3, 0x00, //@@....@@+ + 0xc6, 0x00, //@@..+@@+. + 0xcc, 0x00, //@@.+@@+.. + 0xd8, 0x00, //@@+@@+... + 0xf0, 0x00, //@@@@..... + 0xf0, 0x00, //@@@@+.... + 0xd8, 0x00, //@@+@@+... + 0xcc, 0x00, //@@.+@@+.. + 0xc6, 0x00, //@@..+@@+. + 0xc3, 0x00, //@@...+@@+ + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + + + /*Unicode: U+006c (l) , Width: 2 */ + 0x00, //.. + 0x00, //.. + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0x00, //.. + 0x00, //.. + 0x00, //.. + 0x00, //.. + + + /*Unicode: U+006d (m) , Width: 14 */ + 0x00, 0x00, //.............. + 0x00, 0x00, //.............. + 0x00, 0x00, //.............. + 0x00, 0x00, //.............. + 0x00, 0x00, //.............. + 0x00, 0x00, //.............. + 0xdc, 0x78, //@@.%@@+..%@@%. + 0xfe, 0xf8, //@@%@@@@+@@@@@+ + 0xe7, 0x9c, //@@@..%@@@..%@@ + 0xc3, 0x0c, //@@....@@....@@ + 0xc3, 0x0c, //@@....@@....@@ + 0xc3, 0x0c, //@@....@@....@@ + 0xc3, 0x0c, //@@....@@....@@ + 0xc3, 0x0c, //@@....@@....@@ + 0xc3, 0x0c, //@@....@@....@@ + 0xc3, 0x0c, //@@....@@....@@ + 0x00, 0x00, //.............. + 0x00, 0x00, //.............. + 0x00, 0x00, //.............. + 0x00, 0x00, //.............. + + + /*Unicode: U+006e (n) , Width: 8 */ + 0x00, //........ + 0x00, //........ + 0x00, //........ + 0x00, //........ + 0x00, //........ + 0x00, //........ + 0xde, //@@.%@@%. + 0xfe, //@@%@@@@+ + 0xe7, //@@@..%@@ + 0xc3, //@@....@@ + 0xc3, //@@....@@ + 0xc3, //@@....@@ + 0xc3, //@@....@@ + 0xc3, //@@....@@ + 0xc3, //@@....@@ + 0xc3, //@@....@@ + 0x00, //........ + 0x00, //........ + 0x00, //........ + 0x00, //........ + + + /*Unicode: U+006f (o) , Width: 10 */ + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + 0x1e, 0x00, //..+@@@@+.. + 0x7f, 0x80, //.%@@@@@@%. + 0x61, 0x80, //+@@+..+@@+ + 0xc0, 0xc0, //@@+....+@@ + 0xc0, 0xc0, //@@......@@ + 0xc0, 0xc0, //@@......@@ + 0xc0, 0xc0, //@@+....+@@ + 0x61, 0x80, //+@@+..+@@+ + 0x7f, 0x80, //.%@@@@@@%. + 0x1e, 0x00, //..+@@@@+.. + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + + + /*Unicode: U+0070 (p) , Width: 9 */ + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0xde, 0x00, //@@.%@@%.. + 0xff, 0x00, //@@%@@@@@. + 0xe3, 0x80, //@@@...@@% + 0xc1, 0x80, //@@+...+@@ + 0xc1, 0x80, //@@.....@@ + 0xc1, 0x80, //@@.....@@ + 0xc1, 0x80, //@@+...+@@ + 0xe3, 0x80, //@@@...@@% + 0xff, 0x00, //@@%@@@@@. + 0xde, 0x00, //@@.%@@%.. + 0xc0, 0x00, //@@....... + 0xc0, 0x00, //@@....... + 0xc0, 0x00, //@@....... + 0xc0, 0x00, //@@....... + + + /*Unicode: U+0071 (q) , Width: 9 */ + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x00, 0x00, //......... + 0x3d, 0x80, //..%@@%.@@ + 0x7f, 0x80, //.@@@@@%@@ + 0xe3, 0x80, //%@@...@@@ + 0xc1, 0x80, //@@+...+@@ + 0xc1, 0x80, //@@.....@@ + 0xc1, 0x80, //@@.....@@ + 0xc1, 0x80, //@@+...+@@ + 0xe3, 0x80, //%@@...@@@ + 0x7f, 0x80, //.@@@@@%@@ + 0x3d, 0x80, //..%@@%.@@ + 0x01, 0x80, //.......@@ + 0x01, 0x80, //.......@@ + 0x01, 0x80, //.......@@ + 0x01, 0x80, //.......@@ + + + /*Unicode: U+0072 (r) , Width: 6 */ + 0x00, //...... + 0x00, //...... + 0x00, //...... + 0x00, //...... + 0x00, //...... + 0x00, //...... + 0xdc, //@@.%@@ + 0xfc, //@@%@@@ + 0xe0, //@@@+.. + 0xc0, //@@+... + 0xc0, //@@.... + 0xc0, //@@.... + 0xc0, //@@.... + 0xc0, //@@.... + 0xc0, //@@.... + 0xc0, //@@.... + 0x00, //...... + 0x00, //...... + 0x00, //...... + 0x00, //...... + + + /*Unicode: U+0073 (s) , Width: 7 */ + 0x00, //....... + 0x00, //....... + 0x00, //....... + 0x00, //....... + 0x00, //....... + 0x00, //....... + 0x7c, //.+@@@%+ + 0xfe, //%@@@@@@ + 0xc2, //@@+...% + 0xe0, //@@%+... + 0x7c, //+@@@@@. + 0x1e, //..+%@@% + 0x06, //.....@@ + 0x86, //%+..+@@ + 0xfe, //@@@@@@% + 0x78, //.%@@@+. + 0x00, //....... + 0x00, //....... + 0x00, //....... + 0x00, //....... + + + /*Unicode: U+0074 (t) , Width: 6 */ + 0x00, //...... + 0x00, //...... + 0x00, //...... + 0x60, //.@@... + 0x60, //.@@... + 0x60, //.@@... + 0xfc, //@@@@@@ + 0xfc, //@@@@@@ + 0x60, //.@@... + 0x60, //.@@... + 0x60, //.@@... + 0x60, //.@@... + 0x60, //.@@... + 0x60, //.@@+.. + 0x7c, //.%@@@@ + 0x3c, //..%@@@ + 0x00, //...... + 0x00, //...... + 0x00, //...... + 0x00, //...... + + + /*Unicode: U+0075 (u) , Width: 8 */ + 0x00, //........ + 0x00, //........ + 0x00, //........ + 0x00, //........ + 0x00, //........ + 0x00, //........ + 0xc3, //@@....@@ + 0xc3, //@@....@@ + 0xc3, //@@....@@ + 0xc3, //@@....@@ + 0xc3, //@@....@@ + 0xc3, //@@....@@ + 0xc3, //@@....@@ + 0xe7, //@@%..@@@ + 0x7f, //+@@@@%@@ + 0x7b, //.%@@%.@@ + 0x00, //........ + 0x00, //........ + 0x00, //........ + 0x00, //........ + + + /*Unicode: U+0076 (v) , Width: 12 */ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x60, 0x60, //.@@......@@. + 0x60, 0x60, //.%@+....+@%. + 0x30, 0xc0, //..@@....@@.. + 0x30, 0xc0, //..@@....@@.. + 0x19, 0x80, //..+@%..%@+.. + 0x19, 0x80, //...@@..@@... + 0x19, 0x80, //...%@.+@%... + 0x0f, 0x00, //...+@%@@.... + 0x0f, 0x00, //....@@@@.... + 0x06, 0x00, //....+@@+.... + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + + + /*Unicode: U+0077 (w) , Width: 15 */ + 0x00, 0x00, //............... + 0x00, 0x00, //............... + 0x00, 0x00, //............... + 0x00, 0x00, //............... + 0x00, 0x00, //............... + 0x00, 0x00, //............... + 0x63, 0x8c, //.@@...@@@...@@. + 0x63, 0x8c, //.@@...@@@...@@. + 0x63, 0x8c, //.%@+.+@@@+.+@%. + 0x36, 0xd8, //.+@%.%@+@%.%@+. + 0x36, 0xd8, //..@@.@@.@@.@@.. + 0x36, 0xd8, //..@@.@%.%@.@@.. + 0x3c, 0x78, //..%@%@+.+@%@%.. + 0x1c, 0x70, //..+@@@...@@@+.. + 0x1c, 0x70, //...@@@...@@@... + 0x1c, 0x70, //...@@%...%@@... + 0x00, 0x00, //............... + 0x00, 0x00, //............... + 0x00, 0x00, //............... + 0x00, 0x00, //............... + + + /*Unicode: U+0078 (x) , Width: 10 */ + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + 0xe1, 0xc0, //%@@....@@% + 0x61, 0x80, //.@@+..+@@. + 0x33, 0x00, //.+@@..@@.. + 0x33, 0x00, //..%@++@%.. + 0x1e, 0x00, //...@@@@... + 0x1e, 0x00, //...@@@@... + 0x33, 0x00, //..%@++@%.. + 0x33, 0x00, //.+@@..@@+. + 0x61, 0x80, //.@@+..+@@. + 0xe1, 0xc0, //%@@....@@% + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + 0x00, 0x00, //.......... + + + /*Unicode: U+0079 (y) , Width: 12 */ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x00, 0x00, //............ + 0x60, 0x60, //.@@......@@. + 0x60, 0x60, //.%@+....+@%. + 0x30, 0xc0, //..@@....@@.. + 0x30, 0xc0, //..%@+..+@@.. + 0x19, 0x80, //...@@..@@+.. + 0x19, 0x80, //...@@+.@@... + 0x0f, 0x00, //...+@%%@+... + 0x0f, 0x00, //....@@@@.... + 0x06, 0x00, //....+@@+.... + 0x06, 0x00, //.....@@..... + 0x06, 0x00, //....+@%..... + 0x0c, 0x00, //....%@...... + 0x3c, 0x00, //..@@@%...... + 0x38, 0x00, //..@@%....... + + + /*Unicode: U+007a (z) , Width: 8 */ + 0x00, //........ + 0x00, //........ + 0x00, //........ + 0x00, //........ + 0x00, //........ + 0x00, //........ + 0xff, //@@@@@@@@ + 0xff, //@@@@@@@@ + 0x06, //....+@@. + 0x0c, //....@@+. + 0x1c, //...@@@.. + 0x38, //..%@@... + 0x30, //.+@@+... + 0x70, //.@@%.... + 0xff, //@@@@@@@@ + 0xff, //@@@@@@@@ + 0x00, //........ + 0x00, //........ + 0x00, //........ + 0x00, //........ + + + /*Unicode: U+007b ({) , Width: 8 */ + 0x00, //........ + 0x00, //........ + 0x0f, //....%@@@ + 0x1f, //...%@@@@ + 0x18, //...@@+.. + 0x18, //...@@... + 0x18, //...@@... + 0x18, //...@@... + 0x38, //..%@@... + 0xf0, //@@@@.... + 0xf0, //@@@@.... + 0x38, //..%@%... + 0x18, //...@@... + 0x18, //...@@... + 0x18, //...@@... + 0x18, //...@@... + 0x18, //...@@+.. + 0x1f, //...%@@@@ + 0x0f, //....%@@@ + 0x00, //........ + + + /*Unicode: U+007c (|) , Width: 2 */ + 0x00, //.. + 0x00, //.. + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + 0xc0, //@@ + + + /*Unicode: U+007d (}) , Width: 8 */ + 0x00, //........ + 0x00, //........ + 0xf0, //@@@%.... + 0xf8, //@@@@%... + 0x18, //..+@@... + 0x18, //...@@... + 0x18, //...@@... + 0x18, //...@@... + 0x1c, //...@@%.. + 0x0f, //....@@@@ + 0x0f, //....@@@@ + 0x1c, //...%@%.. + 0x18, //...@@... + 0x18, //...@@... + 0x18, //...@@... + 0x18, //...@@... + 0x18, //..+@@... + 0xf8, //@@@@%... + 0xf0, //@@@%.... + 0x00, //........ + + + /*Unicode: U+007e (~) , Width: 11 */ + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x7c, 0x20, //.%@@@%...+@ + 0xff, 0xe0, //@@@@@@@@@@@ + 0x87, 0xc0, //@+...%@@@%. + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... + 0x00, 0x00, //........... +}; + +typedef struct +{ + uint32_t w_px :8; + uint32_t glyph_index :24; +} lcd_console_font_glyph_dsc_t; + +/*Store the glyph descriptions*/ +static const lcd_console_font_glyph_dsc_t lcd_console_font_dejavu_20_glyph_dsc[] = { + {.w_px = 6, .glyph_index = 0}, /*Unicode: U+0020 ( )*/ + {.w_px = 2, .glyph_index = 20}, /*Unicode: U+0021 (!)*/ + {.w_px = 6, .glyph_index = 40}, /*Unicode: U+0022 (")*/ + {.w_px = 12, .glyph_index = 60}, /*Unicode: U+0023 (#)*/ + {.w_px = 9, .glyph_index = 100}, /*Unicode: U+0024 ($)*/ + {.w_px = 15, .glyph_index = 140}, /*Unicode: U+0025 (%)*/ + {.w_px = 12, .glyph_index = 180}, /*Unicode: U+0026 (&)*/ + {.w_px = 2, .glyph_index = 220}, /*Unicode: U+0027 (')*/ + {.w_px = 4, .glyph_index = 240}, /*Unicode: U+0028 (()*/ + {.w_px = 4, .glyph_index = 260}, /*Unicode: U+0029 ())*/ + {.w_px = 7, .glyph_index = 280}, /*Unicode: U+002a (*)*/ + {.w_px = 12, .glyph_index = 300}, /*Unicode: U+002b (+)*/ + {.w_px = 3, .glyph_index = 340}, /*Unicode: U+002c (,)*/ + {.w_px = 5, .glyph_index = 360}, /*Unicode: U+002d (-)*/ + {.w_px = 2, .glyph_index = 380}, /*Unicode: U+002e (.)*/ + {.w_px = 6, .glyph_index = 400}, /*Unicode: U+002f (/)*/ + {.w_px = 9, .glyph_index = 420}, /*Unicode: U+0030 (0)*/ + {.w_px = 8, .glyph_index = 460}, /*Unicode: U+0031 (1)*/ + {.w_px = 9, .glyph_index = 480}, /*Unicode: U+0032 (2)*/ + {.w_px = 9, .glyph_index = 520}, /*Unicode: U+0033 (3)*/ + {.w_px = 10, .glyph_index = 560}, /*Unicode: U+0034 (4)*/ + {.w_px = 8, .glyph_index = 600}, /*Unicode: U+0035 (5)*/ + {.w_px = 9, .glyph_index = 620}, /*Unicode: U+0036 (6)*/ + {.w_px = 8, .glyph_index = 660}, /*Unicode: U+0037 (7)*/ + {.w_px = 9, .glyph_index = 680}, /*Unicode: U+0038 (8)*/ + {.w_px = 9, .glyph_index = 720}, /*Unicode: U+0039 (9)*/ + {.w_px = 2, .glyph_index = 760}, /*Unicode: U+003a (:)*/ + {.w_px = 3, .glyph_index = 780}, /*Unicode: U+003b (;)*/ + {.w_px = 11, .glyph_index = 800}, /*Unicode: U+003c (<)*/ + {.w_px = 11, .glyph_index = 840}, /*Unicode: U+003d (=)*/ + {.w_px = 11, .glyph_index = 880}, /*Unicode: U+003e (>)*/ + {.w_px = 7, .glyph_index = 920}, /*Unicode: U+003f (?)*/ + {.w_px = 16, .glyph_index = 940}, /*Unicode: U+0040 (@)*/ + {.w_px = 12, .glyph_index = 980}, /*Unicode: U+0041 (A)*/ + {.w_px = 9, .glyph_index = 1020}, /*Unicode: U+0042 (B)*/ + {.w_px = 11, .glyph_index = 1060}, /*Unicode: U+0043 (C)*/ + {.w_px = 11, .glyph_index = 1100}, /*Unicode: U+0044 (D)*/ + {.w_px = 8, .glyph_index = 1140}, /*Unicode: U+0045 (E)*/ + {.w_px = 8, .glyph_index = 1160}, /*Unicode: U+0046 (F)*/ + {.w_px = 11, .glyph_index = 1180}, /*Unicode: U+0047 (G)*/ + {.w_px = 10, .glyph_index = 1220}, /*Unicode: U+0048 (H)*/ + {.w_px = 2, .glyph_index = 1260}, /*Unicode: U+0049 (I)*/ + {.w_px = 4, .glyph_index = 1280}, /*Unicode: U+004a (J)*/ + {.w_px = 11, .glyph_index = 1300}, /*Unicode: U+004b (K)*/ + {.w_px = 8, .glyph_index = 1340}, /*Unicode: U+004c (L)*/ + {.w_px = 12, .glyph_index = 1360}, /*Unicode: U+004d (M)*/ + {.w_px = 10, .glyph_index = 1400}, /*Unicode: U+004e (N)*/ + {.w_px = 12, .glyph_index = 1440}, /*Unicode: U+004f (O)*/ + {.w_px = 8, .glyph_index = 1480}, /*Unicode: U+0050 (P)*/ + {.w_px = 12, .glyph_index = 1500}, /*Unicode: U+0051 (Q)*/ + {.w_px = 10, .glyph_index = 1540}, /*Unicode: U+0052 (R)*/ + {.w_px = 9, .glyph_index = 1580}, /*Unicode: U+0053 (S)*/ + {.w_px = 12, .glyph_index = 1620}, /*Unicode: U+0054 (T)*/ + {.w_px = 10, .glyph_index = 1660}, /*Unicode: U+0055 (U)*/ + {.w_px = 12, .glyph_index = 1700}, /*Unicode: U+0056 (V)*/ + {.w_px = 17, .glyph_index = 1740}, /*Unicode: U+0057 (W)*/ + {.w_px = 11, .glyph_index = 1800}, /*Unicode: U+0058 (X)*/ + {.w_px = 12, .glyph_index = 1840}, /*Unicode: U+0059 (Y)*/ + {.w_px = 11, .glyph_index = 1880}, /*Unicode: U+005a (Z)*/ + {.w_px = 4, .glyph_index = 1920}, /*Unicode: U+005b ([)*/ + {.w_px = 6, .glyph_index = 1940}, /*Unicode: U+005c (\)*/ + {.w_px = 4, .glyph_index = 1960}, /*Unicode: U+005d (])*/ + {.w_px = 11, .glyph_index = 1980}, /*Unicode: U+005e (^)*/ + {.w_px = 9, .glyph_index = 2020}, /*Unicode: U+005f (_)*/ + {.w_px = 4, .glyph_index = 2060}, /*Unicode: U+0060 (`)*/ + {.w_px = 8, .glyph_index = 2080}, /*Unicode: U+0061 (a)*/ + {.w_px = 9, .glyph_index = 2100}, /*Unicode: U+0062 (b)*/ + {.w_px = 8, .glyph_index = 2140}, /*Unicode: U+0063 (c)*/ + {.w_px = 9, .glyph_index = 2160}, /*Unicode: U+0064 (d)*/ + {.w_px = 10, .glyph_index = 2200}, /*Unicode: U+0065 (e)*/ + {.w_px = 7, .glyph_index = 2240}, /*Unicode: U+0066 (f)*/ + {.w_px = 9, .glyph_index = 2260}, /*Unicode: U+0067 (g)*/ + {.w_px = 8, .glyph_index = 2300}, /*Unicode: U+0068 (h)*/ + {.w_px = 2, .glyph_index = 2320}, /*Unicode: U+0069 (i)*/ + {.w_px = 4, .glyph_index = 2340}, /*Unicode: U+006a (j)*/ + {.w_px = 9, .glyph_index = 2360}, /*Unicode: U+006b (k)*/ + {.w_px = 2, .glyph_index = 2400}, /*Unicode: U+006c (l)*/ + {.w_px = 14, .glyph_index = 2420}, /*Unicode: U+006d (m)*/ + {.w_px = 8, .glyph_index = 2460}, /*Unicode: U+006e (n)*/ + {.w_px = 10, .glyph_index = 2480}, /*Unicode: U+006f (o)*/ + {.w_px = 9, .glyph_index = 2520}, /*Unicode: U+0070 (p)*/ + {.w_px = 9, .glyph_index = 2560}, /*Unicode: U+0071 (q)*/ + {.w_px = 6, .glyph_index = 2600}, /*Unicode: U+0072 (r)*/ + {.w_px = 7, .glyph_index = 2620}, /*Unicode: U+0073 (s)*/ + {.w_px = 6, .glyph_index = 2640}, /*Unicode: U+0074 (t)*/ + {.w_px = 8, .glyph_index = 2660}, /*Unicode: U+0075 (u)*/ + {.w_px = 12, .glyph_index = 2680}, /*Unicode: U+0076 (v)*/ + {.w_px = 15, .glyph_index = 2720}, /*Unicode: U+0077 (w)*/ + {.w_px = 10, .glyph_index = 2760}, /*Unicode: U+0078 (x)*/ + {.w_px = 12, .glyph_index = 2800}, /*Unicode: U+0079 (y)*/ + {.w_px = 8, .glyph_index = 2840}, /*Unicode: U+007a (z)*/ + {.w_px = 8, .glyph_index = 2860}, /*Unicode: U+007b ({)*/ + {.w_px = 2, .glyph_index = 2880}, /*Unicode: U+007c (|)*/ + {.w_px = 8, .glyph_index = 2900}, /*Unicode: U+007d (})*/ + {.w_px = 11, .glyph_index = 2920}, /*Unicode: U+007e (~)*/ +}; diff --git a/bsp/raspberry-pi/raspi4-32/driver/touch/drv_dsi_touch.c b/bsp/raspberry-pi/raspi4-32/driver/touch/drv_dsi_touch.c index 4d4cc033a2..894ef1f25c 100644 --- a/bsp/raspberry-pi/raspi4-32/driver/touch/drv_dsi_touch.c +++ b/bsp/raspberry-pi/raspi4-32/driver/touch/drv_dsi_touch.c @@ -52,6 +52,13 @@ static void dsi_touch_thread_entry(void *param) { static volatile uint32_t touchbuf; touchbuf = bcm271x_mbox_get_touch(); //0x0f436000 + + if(touchbuf == RT_NULL) + { + rt_kprintf("init dsi touch err!\n"); + return; + } + while (1) { struct touch_regs *regs = (struct touch_regs *)touchbuf; diff --git a/bsp/raspberry-pi/raspi4-32/rtconfig.h b/bsp/raspberry-pi/raspi4-32/rtconfig.h index 333aee1b9e..031b5c43ba 100644 --- a/bsp/raspberry-pi/raspi4-32/rtconfig.h +++ b/bsp/raspberry-pi/raspi4-32/rtconfig.h @@ -94,6 +94,9 @@ #define RT_USING_DEVICE_IPC #define RT_PIPE_BUFSZ 512 +#define RT_USING_SYSTEM_WORKQUEUE +#define RT_SYSTEM_WORKQUEUE_STACKSIZE 2048 +#define RT_SYSTEM_WORKQUEUE_PRIORITY 23 #define RT_USING_SERIAL #define RT_SERIAL_USING_DMA #define RT_SERIAL_RB_BUFSZ 64 @@ -106,6 +109,7 @@ #define RT_MMCSD_MAX_PARTITION 16 #define RT_USING_SPI #define RT_USING_WDT +#define RT_USING_TOUCH /* Using USB */ @@ -119,6 +123,12 @@ /* Socket abstraction layer */ +#define RT_USING_SAL + +/* protocol stack implement */ + +#define SAL_USING_LWIP +#define SAL_USING_POSIX /* Network interface device */ @@ -240,21 +250,25 @@ #define BSP_USING_UART #define RT_USING_UART0 #define RT_USING_UART3 -#define RT_USING_UART4 +#define RT_USING_UART5 #define BSP_USING_GIC #define BSP_USING_GIC400 #define BSP_USING_PIN #define BSP_USING_SPI #define BSP_USING_SPI0_BUS #define BSP_USING_SPI0_DEVICE0 +#define BSP_USING_SPI0_DEVICE1 #define BSP_USING_CORETIMER #define BSP_USING_WDT +#define BSP_USING_ETH #define BSP_USING_SDIO #define BSP_USING_SDIO0 /* Board Peripheral Drivers */ -#define BSP_USING_HDMI -#define BSP_USING_HDMI_DISPLAY +#define BSP_USING_LCD +#define BSP_USING_DSI_DISPLAY +#define BSP_USING_TOUCH +#define BSP_USING_DSI_TOUCH_DEV #endif