##// END OF EJS Templates
Factorised stream device structure to reduce memory usage....
jeandet -
r51:1ef095ac0ee3 dev_alexis
parent child
Show More
@@ -0,0 +1,14
1 TEMPLATE = app
2 CONFIG += cpu
3
4
5 UCMODEL=stm32f4
6 DEFINES += CPUFREQ=160000000
7
8 #BSP = BEAGLESYNTH
9 #BSP = SOLAR_LFR_PSU
10 BSP = STM32F4Eval
11
12 SOURCES += \
13 main.c
14
@@ -0,0 +1,73
1 #include <stdio.h>
2 #include <fat32.h>
3 #include <gpio.h>
4 #include <uart.h>
5 #include <stm32f4xx.h>
6 #include <math.h>
7 #include <bsp.h>
8 #include <i2c.h>
9 #include <CS43L22.h>
10 #include <ina226.h>
11 #include <fonts.h>
12 #include <stdlib.h>
13 #include <core.h>
14
15
16 extern streamdevice* __opnfiles__[];
17
18 #define LCD_COLOR_WHITE 0xFFFF
19 #define LCD_COLOR_BLACK 0x0000
20 #define LCD_COLOR_GREY 0xF7DE
21 #define LCD_COLOR_BLUE 0x001F
22 #define LCD_COLOR_BLUE2 0x051F
23 #define LCD_COLOR_RED 0xF800
24 #define LCD_COLOR_MAGENTA 0xF81F
25 #define LCD_COLOR_GREEN 0x07E0
26 #define LCD_COLOR_CYAN 0x7FFF
27 #define LCD_COLOR_YELLOW 0xFFE0
28
29 #ifndef PSU_DISABLE
30 #define PSU_DISABLE LED1
31 #endif
32
33
34 int main()
35 {
36 delay_100us(20000);
37 INA226_t ina5VSens,ina33VSens,ina15VSens;
38 gpioset(PSU_DISABLE);//enable psu!
39 ili9328paintFilRect(&lcd0,0,0,240,320,LCD_COLOR_BLACK,1,LCD_COLOR_BLACK);
40 if(-1==ina226open(&ina33VSens,i2c2,INA226_MODE_SHUNT_VOLTAGE_CONTINUOUS|INA226_AVERAGES_16|INA226_BUS_CONV_8244us|INA226_SHUNT_CONV_8244us,0,0,15,1000000))
41 {
42 printf("Can't open 3.3V monitor\n\r");
43 }
44 if(-1==ina226open(&ina5VSens,i2c2,INA226_MODE_SHUNT_VOLTAGE_CONTINUOUS|INA226_AVERAGES_16|INA226_BUS_CONV_8244us|INA226_SHUNT_CONV_8244us,0,1,15,1000000))
45 {
46 printf("Can't open 5V monitor\n\r");
47 }
48 if(-1==ina226open(&ina15VSens,i2c2,INA226_MODE_SHUNT_VOLTAGE_CONTINUOUS|INA226_AVERAGES_16|INA226_BUS_CONV_8244us|INA226_SHUNT_CONV_8244us,1,0,15,1000000))
49 {
50 printf("Can't open 1.5V monitor\n\r");
51 }
52 int current5V,current33V,current15V;
53 while(1)
54 {
55 current5V = ina226getCurrent(&ina5VSens);
56 current33V = ina226getCurrent(&ina33VSens);
57 current15V = ina226getCurrent(&ina15VSens);
58 printf("%dmA\n",current15V/1000);
59 printf("%dmA\n",current33V/1000);
60 printf("%dmA\n",current5V/1000);
61 }
62 printf("Exit\n\r");
63 return 0;
64 }
65
66
67
68
69
70
71
72
73
@@ -0,0 +1,14
1 TEMPLATE = lib
2 OBJECTS_DIR = obj
3
4 SOURCES += thread.c
5
6 INCLUDEPATH += ../../includes \
7 ../CPU/STM32F4xx_StdPeriph_Driver/inc \
8 ../CPU/CMSIS/Include
9
10
11 UCMODEL=stm32f4
12
13 target.path = $$[QT_INSTALL_LIBS]/$$UCMODEL
14 INSTALLS += target
@@ -0,0 +1,41
1 /*------------------------------------------------------------------------------
2 -- This file is a part of the libuc, microcontroler library
3 -- Copyright (C) 2013, Alexis Jeandet
4 --
5 -- This program is free software; you can redistribute it and/or modify
6 -- it under the terms of the GNU General Public License as published by
7 -- the Free Software Foundation; either version 3 of the License, or
8 -- (at your option) any later version.
9 --
10 -- This program is distributed in the hope that it will be useful,
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 -- GNU General Public License for more details.
14 --
15 -- You should have received a copy of the GNU General Public License
16 -- along with this program; if not, write to the Free Software
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 -------------------------------------------------------------------------------
19 -- Author : Alexis Jeandet
20 -- Mail : alexis.jeandet@gmail.com
21 -------------------------------------------------------------------------------*/
22
23 #include <thread.h>
24
25
26 int threadcreate(thread_t *thread, void *stack, int stackSize)
27 {
28 return 0;
29 }
30
31
32 int threadstart(thread_t *thread)
33 {
34 return 0;
35 }
36
37
38 int threadstop(thread_t *thread)
39 {
40 return 0;
41 }
@@ -0,0 +1,62
1 /*------------------------------------------------------------------------------
2 -- This file is a part of the libuc, microcontroler library
3 -- Copyright (C) 2013, Alexis Jeandet
4 --
5 -- This program is free software; you can redistribute it and/or modify
6 -- it under the terms of the GNU General Public License as published by
7 -- the Free Software Foundation; either version 3 of the License, or
8 -- (at your option) any later version.
9 --
10 -- This program is distributed in the hope that it will be useful,
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 -- GNU General Public License for more details.
14 --
15 -- You should have received a copy of the GNU General Public License
16 -- along with this program; if not, write to the Free Software
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 -------------------------------------------------------------------------------
19 -- Author : Alexis Jeandet
20 -- Mail : alexis.jeandet@gmail.com
21 -------------------------------------------------------------------------------*/
22 #ifndef THREAD_H
23 #define THREAD_H
24 #include <stdint.h>
25 #include <uhandle.h>
26 #include <streamdevices.h>
27
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31
32 typedef struct thread_t
33 {
34 int (*func)(void*);
35 void* __stack__;
36 int __stackSize__;
37 int __stackPointer__;
38 int __programcounter__;
39 }thread_t;
40
41
42 int threadcreate(thread_t* thread,void* stack,int stackSize);
43 int threadstart(thread_t* thread);
44 int threadstop(thread_t* thread);
45
46
47 #ifdef __cplusplus
48 }
49 #endif
50 #endif //THREAD_H
51
52
53
54
55
56
57
58
59
60
61
62
@@ -14,7 +14,7
14 --
14 --
15 -- You should have received a copy of the GNU General Public License
15 -- You should have received a copy of the GNU General Public License
16 -- along with this program; if not, write to the Free Software
16 -- along with this program; if not, write to the Free Software
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 -------------------------------------------------------------------------------
18 -------------------------------------------------------------------------------
19 -- Author : Alexis Jeandet
19 -- Author : Alexis Jeandet
20 -- Mail : alexis.jeandet@gmail.com
20 -- Mail : alexis.jeandet@gmail.com
@@ -29,6 +29,8
29 #include <stm32f4xx_fsmc.h>
29 #include <stm32f4xx_fsmc.h>
30 #include <i2c.h>
30 #include <i2c.h>
31 #include <core.h>
31 #include <core.h>
32 #include <terminal.h>
33
32 uint32_t OSC0 =8000000;
34 uint32_t OSC0 =8000000;
33 uint32_t INTOSC =16000000;
35 uint32_t INTOSC =16000000;
34 uint32_t RTCOSC =32768;
36 uint32_t RTCOSC =32768;
@@ -54,6 +56,8 LCD_t lcd0={
54 .height = 320
56 .height = 320
55 };
57 };
56
58
59 terminal_t terminal0;
60
57 volatile int16_t* lcd0_CMD=(volatile int16_t*) 0x60000000;
61 volatile int16_t* lcd0_CMD=(volatile int16_t*) 0x60000000;
58 volatile int16_t* lcd0_DATA=(volatile int16_t*)(0x61FFFFF0);
62 volatile int16_t* lcd0_DATA=(volatile int16_t*)(0x61FFFFF0);
59
63
@@ -70,11 +74,12 int bsp_init()
70 bsp_uart_init();
74 bsp_uart_init();
71 bsp_iic_init();
75 bsp_iic_init();
72 bsp_FSMC_init();
76 bsp_FSMC_init();
73 printf("\r================================================================\n\r");
77 bsp_GTerm_init();
74 printf("================================================================\n\r");
78 printf("\r=====================\n\r");
79 printf( "=====================\n\r");
75 printf(BSP);
80 printf(BSP);
76 printf(" initialised\n\r");
81 printf(" initialised\n\r");
77 printf("================================================================\n\r");
82 printf( "=====================\n\r");
78 return 1;
83 return 1;
79 }
84 }
80
85
@@ -107,26 +112,26 void bsp_GPIO_init()
107
112
108 void bsp_uart_init()
113 void bsp_uart_init()
109 {
114 {
110 if(__opnfiles__[1]==NULL)
115 //if(__opnfiles__[1]==NULL)
111 {
116 //{
112 //uart_t* uart1 = (uart_t*)malloc(sizeof(uart_t));
117 //uart_t* uart1 = (uart_t*)malloc(sizeof(uart_t));
113 streamdevice* fd1 = (streamdevice*)malloc(sizeof(streamdevice));
118 // streamdevice* fd1 = (streamdevice*)malloc(sizeof(streamdevice));
114 uart_t uart = uartopenandconfig(uart1,uartparitynone | uart8bits | uartonestop,115200,PA9,PA10,-1,-1);
119 // uart_t uart = uartopenandconfig(uart1,uartparitynone | uart8bits | uartonestop,115200,PA9,PA10,-1,-1);
115 uartmkstreamdev(uart,fd1);
120 //uartmkstreamdev(uart,fd1);
116 __opnfiles__[1] = fd1;
121 //__opnfiles__[1] = fd1;
117 }
122 //}
118 else
123 //else
119 {
124 //{
120 uartopenandconfig(0,uartparitynone | uart8bits | uartonestop,115200,PA9,PA10,-1,-1);
125 uartopenandconfig(0,uartparitynone | uart8bits | uartonestop,115200,PA9,PA10,-1,-1);
121 }
126 //}
122 }
127 }
123
128
124
129
125
130
126 int bsp_FSMC_init()
131 int bsp_FSMC_init()
127 {
132 {
128 #define GPIOGETPORT(gpio) ((GPIO_TypeDef*)(((((uint32_t)gpio) & (uint32_t)0x0000FF00)*(uint32_t)4) + (uint32_t)GPIOA))
133 #define GPIOGETPORT(gpio) ((GPIO_TypeDef*)(((((uint32_t)gpio) & (uint32_t)0x0000FF00)*(uint32_t)4) + (uint32_t)GPIOA))
129 #define GPIOPORTNUM(gpio) (((uint32_t)(gpio) & (uint32_t)0x0000FF00)>>(uint32_t)8)
134 #define GPIOPORTNUM(gpio) (((uint32_t)(gpio) & (uint32_t)0x0000FF00)>>(uint32_t)8)
130
135
131 gpio_t gpio1 = gpioopen(LCD_RESET);
136 gpio_t gpio1 = gpioopen(LCD_RESET);
132 gpiosetspeed(&gpio1,gpiohighspeed);
137 gpiosetspeed(&gpio1,gpiohighspeed);
@@ -149,8 +154,8 int bsp_FSMC_init()
149 /* Enable FSMC clock */
154 /* Enable FSMC clock */
150 RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE);
155 RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE);
151
156
152 /*-- FSMC Configuration ------------------------------------------------------*/
157 /*-- FSMC Configuration ------------------------------------------------------*/
153 /*----------------------- SRAM Bank 3 ----------------------------------------*/
158 /*----------------------- SRAM Bank 3 ----------------------------------------*/
154 /* FSMC_Bank1_NORSRAM4 configuration */
159 /* FSMC_Bank1_NORSRAM4 configuration */
155 //p.FSMC_AddressSetupTime = 5;
160 //p.FSMC_AddressSetupTime = 5;
156 p.FSMC_AddressSetupTime = 1;
161 p.FSMC_AddressSetupTime = 1;
@@ -249,7 +254,7 void bsp_lcd0_write_reg(uint32_t reg,uin
249 uint32_t bsp_lcd0_read_reg(uint32_t reg)
254 uint32_t bsp_lcd0_read_reg(uint32_t reg)
250 {
255 {
251 *lcd0_CMD=(uint16_t)reg;
256 *lcd0_CMD=(uint16_t)reg;
252 return (uint16_t)*lcd0_DATA;
257 return (uint16_t)*lcd0_DATA;
253 }
258 }
254
259
255 void bsp_lcd0_writeGRAM(void* buffer,uint32_t count)
260 void bsp_lcd0_writeGRAM(void* buffer,uint32_t count)
@@ -258,7 +263,7 void bsp_lcd0_writeGRAM(void* buffer,uin
258 uint16_t* castedBuff=(uint16_t*)buffer;
263 uint16_t* castedBuff=(uint16_t*)buffer;
259 for(int i=0;i<(int)count;i++)
264 for(int i=0;i<(int)count;i++)
260 {
265 {
261 *lcd0_DATA=castedBuff[i];
266 *lcd0_DATA=castedBuff[i];
262 }
267 }
263 }
268 }
264
269
@@ -269,10 +274,35 void bsp_lcd0_readGRAM(void* buffer,uint
269 castedBuff[0]=*lcd0_DATA;
274 castedBuff[0]=*lcd0_DATA;
270 for(int i=0;i<(int)count;i++)
275 for(int i=0;i<(int)count;i++)
271 {
276 {
272 castedBuff[i]=*lcd0_DATA;
277 castedBuff[i]=*lcd0_DATA;
278 }
279 }
280
281
282 void bsp_GTerm_init()
283 {
284 if(__opnfiles__[1]==NULL)
285 {
286 //uart_t* uart1 = (uart_t*)malloc(sizeof(uart_t));
287 streamdevice* fd1 = (streamdevice*)malloc(sizeof(streamdevice));
288 terminal_init(&terminal0 ,&lcd0,&ComicSansMS_8,fd1);
289 __opnfiles__[1] = fd1;
290 }
291 else
292 {
293
273 }
294 }
274 }
295 }
275
296
276
297
277
298
278
299
300
301
302
303
304
305
306
307
308
@@ -64,6 +64,7 extern void bsp_uart_init();
64 extern void bsp_iic_init();
64 extern void bsp_iic_init();
65 extern void bsp_spi_init();
65 extern void bsp_spi_init();
66 extern void bsp_SD_init();
66 extern void bsp_SD_init();
67 extern void bsp_GTerm_init();
67 extern int bsp_FSMC_init();
68 extern int bsp_FSMC_init();
68
69
69 /* VS1053 */
70 /* VS1053 */
@@ -29,6 +29,7
29 #include <stm32f4xx_fsmc.h>
29 #include <stm32f4xx_fsmc.h>
30 #include <i2c.h>
30 #include <i2c.h>
31 #include <core.h>
31 #include <core.h>
32 #include <terminal.h>
32 uint32_t OSC0 =8000000;
33 uint32_t OSC0 =8000000;
33 uint32_t INTOSC =16000000;
34 uint32_t INTOSC =16000000;
34 uint32_t RTCOSC =32768;
35 uint32_t RTCOSC =32768;
@@ -54,6 +55,9 LCD_t lcd0={
54 .height = 320
55 .height = 320
55 };
56 };
56
57
58 terminal_t terminal0;
59
60
57 volatile int16_t* lcd0_CMD=(volatile int16_t*) (0x60000000 | 0x08000000);
61 volatile int16_t* lcd0_CMD=(volatile int16_t*) (0x60000000 | 0x08000000);
58 volatile int16_t* lcd0_DATA=((volatile int16_t*)(0x60000000 | 0x08000002));
62 volatile int16_t* lcd0_DATA=((volatile int16_t*)(0x60000000 | 0x08000002));
59
63
@@ -70,12 +74,12 int bsp_init()
70 bsp_uart_init();
74 bsp_uart_init();
71 bsp_iic_init();
75 bsp_iic_init();
72 bsp_FSMC_init();
76 bsp_FSMC_init();
73 lcd0.init(&lcd0);
77 bsp_GTerm_init();
74 printf("\r================================================================\n\r");
78 printf("\r=====================\n\r");
75 printf("================================================================\n\r");
79 printf( "=====================\n\r");
76 printf(BSP);
80 printf(BSP);
77 printf(" initialised\n\r");
81 printf(" initialised\n\r");
78 printf("================================================================\n\r");
82 printf( "=====================\n\r");
79 return 1;
83 return 1;
80 }
84 }
81
85
@@ -94,18 +98,18 void bsp_GPIO_init()
94
98
95 void bsp_uart_init()
99 void bsp_uart_init()
96 {
100 {
97 if(__opnfiles__[1]==NULL)
101 //if(__opnfiles__[1]==NULL)
98 {
102 //{
99 //uart_t* uart1 = (uart_t*)malloc(sizeof(uart_t));
103 //uart_t* uart1 = (uart_t*)malloc(sizeof(uart_t));
100 streamdevice* fd1 = (streamdevice*)malloc(sizeof(streamdevice));
104 // streamdevice* fd1 = (streamdevice*)malloc(sizeof(streamdevice));
101 uart_t uart = uartopenandconfig(uart3,uartparitynone | uart8bits | uartonestop,115200,PC10,PC11,-1,-1);
105 // uart_t uart = uartopenandconfig(uart1,uartparitynone | uart8bits | uartonestop,115200,PA9,PA10,-1,-1);
102 uartmkstreamdev(uart,fd1);
106 //uartmkstreamdev(uart,fd1);
103 __opnfiles__[1] = fd1;
107 //__opnfiles__[1] = fd1;
104 }
108 //}
105 else
109 //else
106 {
110 //{
107 uartopenandconfig(uart3,uartparitynone | uart8bits | uartonestop,115200,PC10,PC11,-1,-1);
111 uartopenandconfig(0,uartparitynone | uart8bits | uartonestop,115200,PA9,PA10,-1,-1);
108 }
112 //}
109 }
113 }
110
114
111 /*
115 /*
@@ -231,8 +235,7 int bsp_FSMC_init()
231
235
232 /*!< Enable FSMC Bank1_SRAM2 Bank */
236 /*!< Enable FSMC Bank1_SRAM2 Bank */
233 FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM2, ENABLE);
237 FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM2, ENABLE);
234
238 lcd0.init(&lcd0);
235
236 return 1;
239 return 1;
237 }
240 }
238
241
@@ -321,6 +324,22 void bsp_lcd0_readGRAM(void* buffer,uint
321 }
324 }
322 }
325 }
323
326
327 void bsp_GTerm_init()
328 {
329 if(__opnfiles__[1]==NULL)
330 {
331 //uart_t* uart1 = (uart_t*)malloc(sizeof(uart_t));
332 streamdevice* fd1 = (streamdevice*)malloc(sizeof(streamdevice));
333
334 ili9328paintFilRect(&lcd0,0,0,240,320,0x7FFF,5,0);
335 terminal_init(&terminal0,&lcd0,&ComicSansMS_8,fd1);
336 __opnfiles__[1] = fd1;
337 }
338 else
339 {
340
341 }
342 }
324
343
325
344
326
345
@@ -52,6 +52,7 extern void bsp_uart_init();
52 extern void bsp_iic_init();
52 extern void bsp_iic_init();
53 extern void bsp_spi_init();
53 extern void bsp_spi_init();
54 extern void bsp_SD_init();
54 extern void bsp_SD_init();
55 extern void bsp_GTerm_init();
55 extern int bsp_FSMC_init();
56 extern int bsp_FSMC_init();
56
57
57 /* VS1053 */
58 /* VS1053 */
@@ -7,7 +7,9 SUBDIRS += QtTest/test.pro \
7 M4StickV2 \
7 M4StickV2 \
8 lcdHello \
8 lcdHello \
9 BeagleSynthHello \
9 BeagleSynthHello \
10 lcdTerminal
10 lcdTerminal \
11 BeagleSynthHelloSupMon \
12 TEST_CMSIS_FFT
11
13
12
14
13
15
@@ -26,8 +26,6 extern streamdevice* __opnfiles__[__MAX_
26 #define LCD_COLOR_CYAN 0x7FFF
26 #define LCD_COLOR_CYAN 0x7FFF
27 #define LCD_COLOR_YELLOW 0xFFE0
27 #define LCD_COLOR_YELLOW 0xFFE0
28
28
29 extern int __lineCount__;
30 extern int __columnCount__;
31
29
32 int main()
30 int main()
33 {
31 {
@@ -37,17 +35,18 int main()
37 for(int i=0;i<16;i++)outterbuffer[i]=LCD_COLOR_RED;
35 for(int i=0;i<16;i++)outterbuffer[i]=LCD_COLOR_RED;
38 ili9328paintFilRect(&lcd0,0,0,240,320,LCD_COLOR_CYAN,5,LCD_COLOR_BLACK);
36 ili9328paintFilRect(&lcd0,0,0,240,320,LCD_COLOR_CYAN,5,LCD_COLOR_BLACK);
39
37
40 streamdevice* terminal=__opnfiles__[1];
38 streamdevice* fd1=__opnfiles__[1];
41 terminal_init(&lcd0,&ComicSansMS_18,terminal);
39 streamdevice fd2;
42 //terminal->write(terminal,"Hi",1, 2);
40 int i=0;
43 //lcd0.paintText(&lcd0,"Hello",10,50,&ComicSansMS_18,0xFF00);
41 terminal_t terminal0,terminal1;
44 // __opnfiles__[1]=terminal;
42 terminal_init(&terminal0,&lcd0,&ComicSansMS_18,fd1);
45 //__opnfiles__[0]=terminal;
43 terminal_init(&terminal1,&lcd0,&ComicSansMS_18,&fd2);
46 int i=1;
44 terminal_setgeometry(&terminal0,5,5,terminal0.LCD->width-10,(terminal0.LCD->height/2)-10);
47 //printf("hello World %d",i);
45 terminal_setbackgroundColor(&terminal1,0xFFFF);
48
46 terminal_settextColor(&terminal1,0x0000);
49 printf("Line cnt :\n \t%d\n",__lineCount__);
47 terminal_setgeometry(&terminal1,5,(terminal0.LCD->height/2)+5,terminal0.LCD->width-10,(terminal0.LCD->height/2)-10);
50 printf("Column cnt :\n \t%d\n",__columnCount__);
48 printf("Line cnt :\n \t%d\n",terminal0.lineCount);
49 printf("Column cnt :\n \t%d\n",terminal0.columnCount);
51 printf("CPU Freq :\n \t%dMHz\n",getCpuFreq()/1000000);
50 printf("CPU Freq :\n \t%dMHz\n",getCpuFreq()/1000000);
52 while(1)
51 while(1)
53 {
52 {
@@ -0,0 +1,1
1 #include <ucdirent.h>
This diff has been collapsed as it changes many lines, (1346 lines changed) Show them Hide them
@@ -602,6 +602,1343 const uint8_t ComicSansMS_24_TBL[] = {
602
602
603 };
603 };
604
604
605
606 /* Character bitmaps for Comic Sans MS 8pt */
607 const uint8_t comicSansMS_8ptBitmaps[] =
608 {
609 // @0 ' ' (11 pixels wide)
610 0x00, 0x00, //
611 0x00, 0x00, //
612 0x00, 0x00, //
613 0x00, 0x00, //
614 0x00, 0x00, //
615 0x00, 0x00, //
616 0x00, 0x00, //
617 0x00, 0x00, //
618 0x00, 0x00, //
619 0x00, 0x00, //
620 0x00, 0x00, //
621 0x00, 0x00, //
622
623 // @24 '!' (11 pixels wide)
624 0x20, 0x00, // #
625 0x20, 0x00, // #
626 0x20, 0x00, // #
627 0x20, 0x00, // #
628 0x20, 0x00, // #
629 0x20, 0x00, // #
630 0x20, 0x00, // #
631 0x00, 0x00, //
632 0x20, 0x00, // #
633 0x00, 0x00, //
634 0x00, 0x00, //
635 0x00, 0x00, //
636
637 // @48 '"' (11 pixels wide)
638 0x00, 0x00, //
639 0x50, 0x00, // # #
640 0x50, 0x00, // # #
641 0x50, 0x00, // # #
642 0x00, 0x00, //
643 0x00, 0x00, //
644 0x00, 0x00, //
645 0x00, 0x00, //
646 0x00, 0x00, //
647 0x00, 0x00, //
648 0x00, 0x00, //
649 0x00, 0x00, //
650
651 // @72 '#' (11 pixels wide)
652 0x00, 0x00, //
653 0x10, 0x01, // # #
654 0x10, 0x01, // # #
655 0xFC, 0x03, // ########
656 0x88, 0x00, // # #
657 0x88, 0x00, // # #
658 0xFE, 0x01, // ########
659 0x44, 0x00, // # #
660 0x44, 0x00, // # #
661 0x00, 0x00, //
662 0x00, 0x00, //
663 0x00, 0x00, //
664
665 // @96 '$' (11 pixels wide)
666 0x20, 0x00, // #
667 0xF0, 0x00, // ####
668 0x28, 0x00, // # #
669 0x28, 0x00, // # #
670 0x70, 0x00, // ###
671 0xA0, 0x00, // # #
672 0xA0, 0x00, // # #
673 0xA0, 0x00, // # #
674 0x78, 0x00, // ####
675 0x20, 0x00, // #
676 0x20, 0x00, // #
677 0x00, 0x00, //
678
679 // @120 '%' (11 pixels wide)
680 0x80, 0x00, // #
681 0xCC, 0x00, // ## ##
682 0x52, 0x00, // # # #
683 0x72, 0x00, // # ###
684 0x2C, 0x00, // ## #
685 0xB0, 0x01, // ## ##
686 0x50, 0x02, // # # #
687 0x58, 0x02, // ## # #
688 0x88, 0x01, // # ##
689 0x00, 0x00, //
690 0x00, 0x00, //
691 0x00, 0x00, //
692
693 // @144 '&' (11 pixels wide)
694 0x00, 0x00, //
695 0x60, 0x00, // ##
696 0x50, 0x00, // # #
697 0x30, 0x00, // ##
698 0xB8, 0x00, // ### #
699 0xAC, 0x00, // ## # #
700 0xC4, 0x00, // # ##
701 0x44, 0x00, // # #
702 0xB8, 0x00, // ### #
703 0x00, 0x00, //
704 0x00, 0x00, //
705 0x00, 0x00, //
706
707 // @168 ''' (11 pixels wide)
708 0x00, 0x00, //
709 0x20, 0x00, // #
710 0x20, 0x00, // #
711 0x20, 0x00, // #
712 0x00, 0x00, //
713 0x00, 0x00, //
714 0x00, 0x00, //
715 0x00, 0x00, //
716 0x00, 0x00, //
717 0x00, 0x00, //
718 0x00, 0x00, //
719 0x00, 0x00, //
720
721 // @192 '(' (11 pixels wide)
722 0x40, 0x00, // #
723 0x20, 0x00, // #
724 0x20, 0x00, // #
725 0x10, 0x00, // #
726 0x10, 0x00, // #
727 0x10, 0x00, // #
728 0x10, 0x00, // #
729 0x10, 0x00, // #
730 0x10, 0x00, // #
731 0x20, 0x00, // #
732 0x40, 0x00, // #
733 0x00, 0x00, //
734
735 // @216 ')' (11 pixels wide)
736 0x08, 0x00, // #
737 0x10, 0x00, // #
738 0x10, 0x00, // #
739 0x20, 0x00, // #
740 0x20, 0x00, // #
741 0x20, 0x00, // #
742 0x20, 0x00, // #
743 0x20, 0x00, // #
744 0x20, 0x00, // #
745 0x10, 0x00, // #
746 0x08, 0x00, // #
747 0x00, 0x00, //
748
749 // @240 '*' (11 pixels wide)
750 0x00, 0x00, //
751 0x10, 0x00, // #
752 0x7C, 0x00, // #####
753 0x38, 0x00, // ###
754 0x2C, 0x00, // ## #
755 0x00, 0x00, //
756 0x00, 0x00, //
757 0x00, 0x00, //
758 0x00, 0x00, //
759 0x00, 0x00, //
760 0x00, 0x00, //
761 0x00, 0x00, //
762
763 // @264 '+' (11 pixels wide)
764 0x00, 0x00, //
765 0x00, 0x00, //
766 0x00, 0x00, //
767 0x20, 0x00, // #
768 0x20, 0x00, // #
769 0xF8, 0x00, // #####
770 0x20, 0x00, // #
771 0x20, 0x00, // #
772 0x00, 0x00, //
773 0x00, 0x00, //
774 0x00, 0x00, //
775 0x00, 0x00, //
776
777 // @288 ',' (11 pixels wide)
778 0x00, 0x00, //
779 0x00, 0x00, //
780 0x00, 0x00, //
781 0x00, 0x00, //
782 0x00, 0x00, //
783 0x00, 0x00, //
784 0x00, 0x00, //
785 0x00, 0x00, //
786 0x20, 0x00, // #
787 0x10, 0x00, // #
788 0x00, 0x00, //
789 0x00, 0x00, //
790
791 // @312 '-' (11 pixels wide)
792 0x00, 0x00, //
793 0x00, 0x00, //
794 0x00, 0x00, //
795 0x00, 0x00, //
796 0x00, 0x00, //
797 0x00, 0x00, //
798 0x70, 0x00, // ###
799 0x00, 0x00, //
800 0x00, 0x00, //
801 0x00, 0x00, //
802 0x00, 0x00, //
803 0x00, 0x00, //
804
805 // @336 '.' (11 pixels wide)
806 0x00, 0x00, //
807 0x00, 0x00, //
808 0x00, 0x00, //
809 0x00, 0x00, //
810 0x00, 0x00, //
811 0x00, 0x00, //
812 0x00, 0x00, //
813 0x00, 0x00, //
814 0x20, 0x00, // #
815 0x00, 0x00, //
816 0x00, 0x00, //
817 0x00, 0x00, //
818
819 // @360 '/' (11 pixels wide)
820 0x80, 0x00, // #
821 0x40, 0x00, // #
822 0x40, 0x00, // #
823 0x40, 0x00, // #
824 0x20, 0x00, // #
825 0x10, 0x00, // #
826 0x10, 0x00, // #
827 0x08, 0x00, // #
828 0x08, 0x00, // #
829 0x00, 0x00, //
830 0x00, 0x00, //
831 0x00, 0x00, //
832
833 // @384 '0' (11 pixels wide)
834 0x00, 0x00, //
835 0x70, 0x00, // ###
836 0x88, 0x00, // # #
837 0x88, 0x00, // # #
838 0x88, 0x00, // # #
839 0x88, 0x00, // # #
840 0x88, 0x00, // # #
841 0x88, 0x00, // # #
842 0x70, 0x00, // ###
843 0x00, 0x00, //
844 0x00, 0x00, //
845 0x00, 0x00, //
846
847 // @408 '1' (11 pixels wide)
848 0x00, 0x00, //
849 0x20, 0x00, // #
850 0x30, 0x00, // ##
851 0x20, 0x00, // #
852 0x20, 0x00, // #
853 0x20, 0x00, // #
854 0x20, 0x00, // #
855 0x20, 0x00, // #
856 0x70, 0x00, // ###
857 0x00, 0x00, //
858 0x00, 0x00, //
859 0x00, 0x00, //
860
861 // @432 '2' (11 pixels wide)
862 0x00, 0x00, //
863 0x70, 0x00, // ###
864 0x88, 0x00, // # #
865 0x80, 0x00, // #
866 0x40, 0x00, // #
867 0x20, 0x00, // #
868 0x10, 0x00, // #
869 0x08, 0x00, // #
870 0xF8, 0x00, // #####
871 0x00, 0x00, //
872 0x00, 0x00, //
873 0x00, 0x00, //
874
875 // @456 '3' (11 pixels wide)
876 0x00, 0x00, //
877 0x70, 0x00, // ###
878 0x88, 0x00, // # #
879 0x80, 0x00, // #
880 0x70, 0x00, // ###
881 0x80, 0x00, // #
882 0x80, 0x00, // #
883 0x88, 0x00, // # #
884 0x70, 0x00, // ###
885 0x00, 0x00, //
886 0x00, 0x00, //
887 0x00, 0x00, //
888
889 // @480 '4' (11 pixels wide)
890 0x00, 0x00, //
891 0x40, 0x00, // #
892 0x60, 0x00, // ##
893 0x50, 0x00, // # #
894 0x50, 0x00, // # #
895 0x48, 0x00, // # #
896 0xFC, 0x00, // ######
897 0x40, 0x00, // #
898 0x40, 0x00, // #
899 0x00, 0x00, //
900 0x00, 0x00, //
901 0x00, 0x00, //
902
903 // @504 '5' (11 pixels wide)
904 0x00, 0x00, //
905 0xF8, 0x00, // #####
906 0x08, 0x00, // #
907 0x78, 0x00, // ####
908 0x88, 0x00, // # #
909 0x80, 0x00, // #
910 0x80, 0x00, // #
911 0x88, 0x00, // # #
912 0x70, 0x00, // ###
913 0x00, 0x00, //
914 0x00, 0x00, //
915 0x00, 0x00, //
916
917 // @528 '6' (11 pixels wide)
918 0x00, 0x00, //
919 0x40, 0x00, // #
920 0x20, 0x00, // #
921 0x10, 0x00, // #
922 0x78, 0x00, // ####
923 0x88, 0x00, // # #
924 0x88, 0x00, // # #
925 0x88, 0x00, // # #
926 0x70, 0x00, // ###
927 0x00, 0x00, //
928 0x00, 0x00, //
929 0x00, 0x00, //
930
931 // @552 '7' (11 pixels wide)
932 0x00, 0x00, //
933 0xFC, 0x00, // ######
934 0x40, 0x00, // #
935 0x20, 0x00, // #
936 0x20, 0x00, // #
937 0x10, 0x00, // #
938 0x10, 0x00, // #
939 0x10, 0x00, // #
940 0x08, 0x00, // #
941 0x00, 0x00, //
942 0x00, 0x00, //
943 0x00, 0x00, //
944
945 // @576 '8' (11 pixels wide)
946 0x00, 0x00, //
947 0x70, 0x00, // ###
948 0x88, 0x00, // # #
949 0x88, 0x00, // # #
950 0x70, 0x00, // ###
951 0x88, 0x00, // # #
952 0x88, 0x00, // # #
953 0x88, 0x00, // # #
954 0x70, 0x00, // ###
955 0x00, 0x00, //
956 0x00, 0x00, //
957 0x00, 0x00, //
958
959 // @600 '9' (11 pixels wide)
960 0x00, 0x00, //
961 0x70, 0x00, // ###
962 0x88, 0x00, // # #
963 0x88, 0x00, // # #
964 0x88, 0x00, // # #
965 0xF0, 0x00, // ####
966 0x40, 0x00, // #
967 0x20, 0x00, // #
968 0x18, 0x00, // ##
969 0x00, 0x00, //
970 0x00, 0x00, //
971 0x00, 0x00, //
972
973 // @624 ':' (11 pixels wide)
974 0x00, 0x00, //
975 0x00, 0x00, //
976 0x00, 0x00, //
977 0x20, 0x00, // #
978 0x00, 0x00, //
979 0x00, 0x00, //
980 0x00, 0x00, //
981 0x20, 0x00, // #
982 0x00, 0x00, //
983 0x00, 0x00, //
984 0x00, 0x00, //
985 0x00, 0x00, //
986
987 // @648 ';' (11 pixels wide)
988 0x00, 0x00, //
989 0x00, 0x00, //
990 0x00, 0x00, //
991 0x20, 0x00, // #
992 0x00, 0x00, //
993 0x00, 0x00, //
994 0x00, 0x00, //
995 0x00, 0x00, //
996 0x20, 0x00, // #
997 0x10, 0x00, // #
998 0x00, 0x00, //
999 0x00, 0x00, //
1000
1001 // @672 '<' (11 pixels wide)
1002 0x00, 0x00, //
1003 0x00, 0x00, //
1004 0x00, 0x00, //
1005 0x20, 0x00, // #
1006 0x10, 0x00, // #
1007 0x08, 0x00, // #
1008 0x10, 0x00, // #
1009 0x20, 0x00, // #
1010 0x00, 0x00, //
1011 0x00, 0x00, //
1012 0x00, 0x00, //
1013 0x00, 0x00, //
1014
1015 // @696 '=' (11 pixels wide)
1016 0x00, 0x00, //
1017 0x00, 0x00, //
1018 0x00, 0x00, //
1019 0xF0, 0x00, // ####
1020 0x00, 0x00, //
1021 0x00, 0x00, //
1022 0xF0, 0x00, // ####
1023 0x00, 0x00, //
1024 0x00, 0x00, //
1025 0x00, 0x00, //
1026 0x00, 0x00, //
1027 0x00, 0x00, //
1028
1029 // @720 '>' (11 pixels wide)
1030 0x00, 0x00, //
1031 0x00, 0x00, //
1032 0x00, 0x00, //
1033 0x08, 0x00, // #
1034 0x10, 0x00, // #
1035 0x20, 0x00, // #
1036 0x10, 0x00, // #
1037 0x08, 0x00, // #
1038 0x00, 0x00, //
1039 0x00, 0x00, //
1040 0x00, 0x00, //
1041 0x00, 0x00, //
1042
1043 // @744 '?' (11 pixels wide)
1044 0x00, 0x00, //
1045 0x78, 0x00, // ####
1046 0x80, 0x00, // #
1047 0x80, 0x00, // #
1048 0x40, 0x00, // #
1049 0x20, 0x00, // #
1050 0x10, 0x00, // #
1051 0x00, 0x00, //
1052 0x10, 0x00, // #
1053 0x00, 0x00, //
1054 0x00, 0x00, //
1055 0x00, 0x00, //
1056
1057 // @768 '@' (11 pixels wide)
1058 0xF8, 0x00, // #####
1059 0x04, 0x01, // # #
1060 0x72, 0x02, // # ### #
1061 0xDA, 0x02, // # ## ## #
1062 0xCA, 0x02, // # # ## #
1063 0xB2, 0x01, // # ## ##
1064 0x02, 0x00, // #
1065 0x04, 0x01, // # #
1066 0xF8, 0x00, // #####
1067 0x00, 0x00, //
1068 0x00, 0x00, //
1069 0x00, 0x00, //
1070
1071 // @792 'A' (11 pixels wide)
1072 0x00, 0x00, //
1073 0x20, 0x00, // #
1074 0x20, 0x00, // #
1075 0x50, 0x00, // # #
1076 0x48, 0x00, // # #
1077 0x78, 0x00, // ####
1078 0x44, 0x00, // # #
1079 0x84, 0x00, // # #
1080 0x82, 0x00, // # #
1081 0x00, 0x00, //
1082 0x00, 0x00, //
1083 0x00, 0x00, //
1084
1085 // @816 'B' (11 pixels wide)
1086 0x00, 0x00, //
1087 0x78, 0x00, // ####
1088 0x88, 0x00, // # #
1089 0x88, 0x00, // # #
1090 0x48, 0x00, // # #
1091 0x78, 0x00, // ####
1092 0x88, 0x00, // # #
1093 0x88, 0x00, // # #
1094 0x78, 0x00, // ####
1095 0x00, 0x00, //
1096 0x00, 0x00, //
1097 0x00, 0x00, //
1098
1099 // @840 'C' (11 pixels wide)
1100 0x00, 0x00, //
1101 0xE0, 0x00, // ###
1102 0x90, 0x00, // # #
1103 0x08, 0x00, // #
1104 0x04, 0x00, // #
1105 0x04, 0x00, // #
1106 0x04, 0x00, // #
1107 0x84, 0x00, // # #
1108 0x78, 0x00, // ####
1109 0x00, 0x00, //
1110 0x00, 0x00, //
1111 0x00, 0x00, //
1112
1113 // @864 'D' (11 pixels wide)
1114 0x00, 0x00, //
1115 0x0C, 0x00, // ##
1116 0x34, 0x00, // # ##
1117 0x44, 0x00, // # #
1118 0x84, 0x00, // # #
1119 0x84, 0x00, // # #
1120 0x84, 0x00, // # #
1121 0x44, 0x00, // # #
1122 0x3C, 0x00, // ####
1123 0x00, 0x00, //
1124 0x00, 0x00, //
1125 0x00, 0x00, //
1126
1127 // @888 'E' (11 pixels wide)
1128 0x00, 0x00, //
1129 0xF8, 0x00, // #####
1130 0x08, 0x00, // #
1131 0x08, 0x00, // #
1132 0xF8, 0x00, // #####
1133 0x08, 0x00, // #
1134 0x08, 0x00, // #
1135 0x08, 0x00, // #
1136 0xF8, 0x00, // #####
1137 0x00, 0x00, //
1138 0x00, 0x00, //
1139 0x00, 0x00, //
1140
1141 // @912 'F' (11 pixels wide)
1142 0x00, 0x00, //
1143 0xF0, 0x01, // #####
1144 0x10, 0x00, // #
1145 0x10, 0x00, // #
1146 0xF0, 0x00, // ####
1147 0x10, 0x00, // #
1148 0x10, 0x00, // #
1149 0x10, 0x00, // #
1150 0x10, 0x00, // #
1151 0x00, 0x00, //
1152 0x00, 0x00, //
1153 0x00, 0x00, //
1154
1155 // @936 'G' (11 pixels wide)
1156 0x00, 0x00, //
1157 0xE0, 0x00, // ###
1158 0x10, 0x01, // # #
1159 0x08, 0x00, // #
1160 0x04, 0x00, // #
1161 0xF4, 0x01, // # #####
1162 0x04, 0x01, // # #
1163 0x84, 0x00, // # #
1164 0x78, 0x00, // ####
1165 0x00, 0x00, //
1166 0x00, 0x00, //
1167 0x00, 0x00, //
1168
1169 // @960 'H' (11 pixels wide)
1170 0x00, 0x00, //
1171 0x08, 0x01, // # #
1172 0x08, 0x01, // # #
1173 0x08, 0x01, // # #
1174 0xF8, 0x01, // ######
1175 0x08, 0x01, // # #
1176 0x08, 0x01, // # #
1177 0x08, 0x01, // # #
1178 0x08, 0x01, // # #
1179 0x00, 0x00, //
1180 0x00, 0x00, //
1181 0x00, 0x00, //
1182
1183 // @984 'I' (11 pixels wide)
1184 0x00, 0x00, //
1185 0x7C, 0x00, // #####
1186 0x10, 0x00, // #
1187 0x10, 0x00, // #
1188 0x10, 0x00, // #
1189 0x10, 0x00, // #
1190 0x10, 0x00, // #
1191 0x10, 0x00, // #
1192 0x7C, 0x00, // #####
1193 0x00, 0x00, //
1194 0x00, 0x00, //
1195 0x00, 0x00, //
1196
1197 // @1008 'J' (11 pixels wide)
1198 0x00, 0x00, //
1199 0xF0, 0x01, // #####
1200 0x40, 0x00, // #
1201 0x40, 0x00, // #
1202 0x40, 0x00, // #
1203 0x40, 0x00, // #
1204 0x44, 0x00, // # #
1205 0x44, 0x00, // # #
1206 0x78, 0x00, // ####
1207 0x00, 0x00, //
1208 0x00, 0x00, //
1209 0x00, 0x00, //
1210
1211 // @1032 'K' (11 pixels wide)
1212 0x00, 0x00, //
1213 0x88, 0x00, // # #
1214 0x48, 0x00, // # #
1215 0x28, 0x00, // # #
1216 0x18, 0x00, // ##
1217 0x18, 0x00, // ##
1218 0x28, 0x00, // # #
1219 0x48, 0x00, // # #
1220 0x88, 0x00, // # #
1221 0x00, 0x00, //
1222 0x00, 0x00, //
1223 0x00, 0x00, //
1224
1225 // @1056 'L' (11 pixels wide)
1226 0x00, 0x00, //
1227 0x08, 0x00, // #
1228 0x08, 0x00, // #
1229 0x08, 0x00, // #
1230 0x08, 0x00, // #
1231 0x08, 0x00, // #
1232 0x08, 0x00, // #
1233 0x08, 0x00, // #
1234 0x78, 0x00, // ####
1235 0x00, 0x00, //
1236 0x00, 0x00, //
1237 0x00, 0x00, //
1238
1239 // @1080 'M' (11 pixels wide)
1240 0x00, 0x00, //
1241 0x44, 0x00, // # #
1242 0x44, 0x00, // # #
1243 0x44, 0x00, // # #
1244 0xAA, 0x00, // # # # #
1245 0xAA, 0x00, // # # # #
1246 0xAA, 0x00, // # # # #
1247 0x11, 0x01, // # # #
1248 0x11, 0x01, // # # #
1249 0x00, 0x00, //
1250 0x00, 0x00, //
1251 0x00, 0x00, //
1252
1253 // @1104 'N' (11 pixels wide)
1254 0x00, 0x00, //
1255 0x04, 0x01, // # #
1256 0x0C, 0x01, // ## #
1257 0x14, 0x01, // # # #
1258 0x14, 0x01, // # # #
1259 0x24, 0x01, // # # #
1260 0x44, 0x01, // # # #
1261 0x84, 0x01, // # ##
1262 0x04, 0x01, // # #
1263 0x00, 0x00, //
1264 0x00, 0x00, //
1265 0x00, 0x00, //
1266
1267 // @1128 'O' (11 pixels wide)
1268 0x00, 0x00, //
1269 0xF0, 0x00, // ####
1270 0x08, 0x01, // # #
1271 0x04, 0x01, // # #
1272 0x04, 0x01, // # #
1273 0x04, 0x01, // # #
1274 0x04, 0x01, // # #
1275 0x84, 0x00, // # #
1276 0x78, 0x00, // ####
1277 0x00, 0x00, //
1278 0x00, 0x00, //
1279 0x00, 0x00, //
1280
1281 // @1152 'P' (11 pixels wide)
1282 0x00, 0x00, //
1283 0x70, 0x00, // ###
1284 0x90, 0x00, // # #
1285 0x90, 0x00, // # #
1286 0x90, 0x00, // # #
1287 0x90, 0x00, // # #
1288 0x70, 0x00, // ###
1289 0x10, 0x00, // #
1290 0x10, 0x00, // #
1291 0x00, 0x00, //
1292 0x00, 0x00, //
1293 0x00, 0x00, //
1294
1295 // @1176 'Q' (11 pixels wide)
1296 0x00, 0x00, //
1297 0xF0, 0x00, // ####
1298 0x08, 0x01, // # #
1299 0x04, 0x02, // # #
1300 0x04, 0x02, // # #
1301 0x04, 0x02, // # #
1302 0x24, 0x02, // # # #
1303 0x48, 0x01, // # # #
1304 0xF0, 0x01, // #####
1305 0x00, 0x03, // ##
1306 0x00, 0x02, // #
1307 0x00, 0x00, //
1308
1309 // @1200 'R' (11 pixels wide)
1310 0x00, 0x00, //
1311 0x38, 0x00, // ###
1312 0x48, 0x00, // # #
1313 0x48, 0x00, // # #
1314 0x48, 0x00, // # #
1315 0x38, 0x00, // ###
1316 0x28, 0x00, // # #
1317 0x48, 0x00, // # #
1318 0x88, 0x00, // # #
1319 0x00, 0x00, //
1320 0x00, 0x00, //
1321 0x00, 0x00, //
1322
1323 // @1224 'S' (11 pixels wide)
1324 0x00, 0x00, //
1325 0xE0, 0x01, // ####
1326 0x10, 0x00, // #
1327 0x10, 0x00, // #
1328 0xE0, 0x00, // ###
1329 0x00, 0x01, // #
1330 0x00, 0x01, // #
1331 0x08, 0x01, // # #
1332 0xF0, 0x00, // ####
1333 0x00, 0x00, //
1334 0x00, 0x00, //
1335 0x00, 0x00, //
1336
1337 // @1248 'T' (11 pixels wide)
1338 0x00, 0x00, //
1339 0xFC, 0x01, // #######
1340 0x20, 0x00, // #
1341 0x20, 0x00, // #
1342 0x20, 0x00, // #
1343 0x20, 0x00, // #
1344 0x20, 0x00, // #
1345 0x20, 0x00, // #
1346 0x20, 0x00, // #
1347 0x00, 0x00, //
1348 0x00, 0x00, //
1349 0x00, 0x00, //
1350
1351 // @1272 'U' (11 pixels wide)
1352 0x00, 0x00, //
1353 0x84, 0x00, // # #
1354 0x84, 0x00, // # #
1355 0x84, 0x00, // # #
1356 0x84, 0x00, // # #
1357 0x84, 0x00, // # #
1358 0x84, 0x00, // # #
1359 0x84, 0x00, // # #
1360 0x78, 0x00, // ####
1361 0x00, 0x00, //
1362 0x00, 0x00, //
1363 0x00, 0x00, //
1364
1365 // @1296 'V' (11 pixels wide)
1366 0x00, 0x00, //
1367 0x88, 0x00, // # #
1368 0x88, 0x00, // # #
1369 0x88, 0x00, // # #
1370 0x50, 0x00, // # #
1371 0x50, 0x00, // # #
1372 0x50, 0x00, // # #
1373 0x50, 0x00, // # #
1374 0x20, 0x00, // #
1375 0x00, 0x00, //
1376 0x00, 0x00, //
1377 0x00, 0x00, //
1378
1379 // @1320 'W' (11 pixels wide)
1380 0x00, 0x00, //
1381 0x21, 0x04, // # # #
1382 0x21, 0x04, // # # #
1383 0x52, 0x02, // # # # #
1384 0x52, 0x02, // # # # #
1385 0x4A, 0x01, // # # # #
1386 0x4A, 0x01, // # # # #
1387 0x44, 0x01, // # # #
1388 0x84, 0x00, // # #
1389 0x00, 0x00, //
1390 0x00, 0x00, //
1391 0x00, 0x00, //
1392
1393 // @1344 'X' (11 pixels wide)
1394 0x00, 0x00, //
1395 0x82, 0x00, // # #
1396 0x44, 0x00, // # #
1397 0x28, 0x00, // # #
1398 0x10, 0x00, // #
1399 0x10, 0x00, // #
1400 0x28, 0x00, // # #
1401 0x44, 0x00, // # #
1402 0x82, 0x00, // # #
1403 0x00, 0x00, //
1404 0x00, 0x00, //
1405 0x00, 0x00, //
1406
1407 // @1368 'Y' (11 pixels wide)
1408 0x00, 0x00, //
1409 0x84, 0x00, // # #
1410 0x48, 0x00, // # #
1411 0x48, 0x00, // # #
1412 0x50, 0x00, // # #
1413 0x30, 0x00, // ##
1414 0x20, 0x00, // #
1415 0x10, 0x00, // #
1416 0x10, 0x00, // #
1417 0x00, 0x00, //
1418 0x00, 0x00, //
1419 0x00, 0x00, //
1420
1421 // @1392 'Z' (11 pixels wide)
1422 0x00, 0x00, //
1423 0xFC, 0x01, // #######
1424 0x80, 0x00, // #
1425 0x40, 0x00, // #
1426 0x20, 0x00, // #
1427 0x10, 0x00, // #
1428 0x08, 0x00, // #
1429 0x04, 0x00, // #
1430 0xFC, 0x01, // #######
1431 0x00, 0x00, //
1432 0x00, 0x00, //
1433 0x00, 0x00, //
1434
1435 // @1416 '[' (11 pixels wide)
1436 0x70, 0x00, // ###
1437 0x10, 0x00, // #
1438 0x10, 0x00, // #
1439 0x10, 0x00, // #
1440 0x10, 0x00, // #
1441 0x10, 0x00, // #
1442 0x10, 0x00, // #
1443 0x10, 0x00, // #
1444 0x10, 0x00, // #
1445 0x10, 0x00, // #
1446 0x70, 0x00, // ###
1447 0x00, 0x00, //
1448
1449 // @1440 '\' (11 pixels wide)
1450 0x00, 0x00, //
1451 0x08, 0x00, // #
1452 0x08, 0x00, // #
1453 0x10, 0x00, // #
1454 0x10, 0x00, // #
1455 0x20, 0x00, // #
1456 0x20, 0x00, // #
1457 0x20, 0x00, // #
1458 0x40, 0x00, // #
1459 0x40, 0x00, // #
1460 0x00, 0x00, //
1461 0x00, 0x00, //
1462
1463 // @1464 ']' (11 pixels wide)
1464 0x38, 0x00, // ###
1465 0x20, 0x00, // #
1466 0x20, 0x00, // #
1467 0x20, 0x00, // #
1468 0x20, 0x00, // #
1469 0x20, 0x00, // #
1470 0x20, 0x00, // #
1471 0x20, 0x00, // #
1472 0x20, 0x00, // #
1473 0x20, 0x00, // #
1474 0x38, 0x00, // ###
1475 0x00, 0x00, //
1476
1477 // @1488 '^' (11 pixels wide)
1478 0x30, 0x00, // ##
1479 0x30, 0x00, // ##
1480 0x48, 0x00, // # #
1481 0x00, 0x00, //
1482 0x00, 0x00, //
1483 0x00, 0x00, //
1484 0x00, 0x00, //
1485 0x00, 0x00, //
1486 0x00, 0x00, //
1487 0x00, 0x00, //
1488 0x00, 0x00, //
1489 0x00, 0x00, //
1490
1491 // @1512 '_' (11 pixels wide)
1492 0x00, 0x00, //
1493 0x00, 0x00, //
1494 0x00, 0x00, //
1495 0x00, 0x00, //
1496 0x00, 0x00, //
1497 0x00, 0x00, //
1498 0x00, 0x00, //
1499 0x00, 0x00, //
1500 0x00, 0x00, //
1501 0x00, 0x00, //
1502 0xFC, 0x01, // #######
1503 0x00, 0x00, //
1504
1505 // @1536 '`' (11 pixels wide)
1506 0x04, 0x00, // #
1507 0x08, 0x00, // #
1508 0x00, 0x00, //
1509 0x00, 0x00, //
1510 0x00, 0x00, //
1511 0x00, 0x00, //
1512 0x00, 0x00, //
1513 0x00, 0x00, //
1514 0x00, 0x00, //
1515 0x00, 0x00, //
1516 0x00, 0x00, //
1517 0x00, 0x00, //
1518
1519 // @1560 'a' (11 pixels wide)
1520 0x00, 0x00, //
1521 0x00, 0x00, //
1522 0x00, 0x00, //
1523 0xE0, 0x00, // ###
1524 0x90, 0x00, // # #
1525 0x88, 0x00, // # #
1526 0x88, 0x00, // # #
1527 0x88, 0x00, // # #
1528 0x70, 0x01, // ### #
1529 0x00, 0x00, //
1530 0x00, 0x00, //
1531 0x00, 0x00, //
1532
1533 // @1584 'b' (11 pixels wide)
1534 0x08, 0x00, // #
1535 0x08, 0x00, // #
1536 0x08, 0x00, // #
1537 0x78, 0x00, // ####
1538 0x88, 0x00, // # #
1539 0x88, 0x00, // # #
1540 0x88, 0x00, // # #
1541 0x88, 0x00, // # #
1542 0x78, 0x00, // ####
1543 0x00, 0x00, //
1544 0x00, 0x00, //
1545 0x00, 0x00, //
1546
1547 // @1608 'c' (11 pixels wide)
1548 0x00, 0x00, //
1549 0x00, 0x00, //
1550 0x00, 0x00, //
1551 0x60, 0x00, // ##
1552 0x90, 0x00, // # #
1553 0x08, 0x00, // #
1554 0x08, 0x00, // #
1555 0x88, 0x00, // # #
1556 0x70, 0x00, // ###
1557 0x00, 0x00, //
1558 0x00, 0x00, //
1559 0x00, 0x00, //
1560
1561 // @1632 'd' (11 pixels wide)
1562 0x80, 0x00, // #
1563 0x80, 0x00, // #
1564 0x80, 0x00, // #
1565 0xF0, 0x00, // ####
1566 0x88, 0x00, // # #
1567 0x88, 0x00, // # #
1568 0x88, 0x00, // # #
1569 0x88, 0x00, // # #
1570 0xF0, 0x00, // ####
1571 0x00, 0x00, //
1572 0x00, 0x00, //
1573 0x00, 0x00, //
1574
1575 // @1656 'e' (11 pixels wide)
1576 0x00, 0x00, //
1577 0x00, 0x00, //
1578 0x00, 0x00, //
1579 0x38, 0x00, // ###
1580 0x44, 0x00, // # #
1581 0x24, 0x00, // # #
1582 0x1C, 0x00, // ###
1583 0x44, 0x00, // # #
1584 0x38, 0x00, // ###
1585 0x00, 0x00, //
1586 0x00, 0x00, //
1587 0x00, 0x00, //
1588
1589 // @1680 'f' (11 pixels wide)
1590 0xC0, 0x00, // ##
1591 0x20, 0x00, // #
1592 0x20, 0x00, // #
1593 0xF8, 0x00, // #####
1594 0x20, 0x00, // #
1595 0x20, 0x00, // #
1596 0x20, 0x00, // #
1597 0x20, 0x00, // #
1598 0x20, 0x00, // #
1599 0x00, 0x00, //
1600 0x00, 0x00, //
1601 0x00, 0x00, //
1602
1603 // @1704 'g' (11 pixels wide)
1604 0x00, 0x00, //
1605 0x00, 0x00, //
1606 0x00, 0x00, //
1607 0x30, 0x00, // ##
1608 0x48, 0x00, // # #
1609 0x44, 0x00, // # #
1610 0x44, 0x00, // # #
1611 0x44, 0x00, // # #
1612 0x78, 0x00, // ####
1613 0x40, 0x00, // #
1614 0x20, 0x00, // #
1615 0x1C, 0x00, // ###
1616
1617 // @1728 'h' (11 pixels wide)
1618 0x08, 0x00, // #
1619 0x08, 0x00, // #
1620 0x08, 0x00, // #
1621 0x68, 0x00, // # ##
1622 0x98, 0x00, // ## #
1623 0x88, 0x00, // # #
1624 0x88, 0x00, // # #
1625 0x88, 0x00, // # #
1626 0x88, 0x00, // # #
1627 0x00, 0x00, //
1628 0x00, 0x00, //
1629 0x00, 0x00, //
1630
1631 // @1752 'i' (11 pixels wide)
1632 0x00, 0x00, //
1633 0x20, 0x00, // #
1634 0x00, 0x00, //
1635 0x20, 0x00, // #
1636 0x20, 0x00, // #
1637 0x20, 0x00, // #
1638 0x20, 0x00, // #
1639 0x20, 0x00, // #
1640 0x20, 0x00, // #
1641 0x00, 0x00, //
1642 0x00, 0x00, //
1643 0x00, 0x00, //
1644
1645 // @1776 'j' (11 pixels wide)
1646 0x00, 0x00, //
1647 0x10, 0x00, // #
1648 0x00, 0x00, //
1649 0x10, 0x00, // #
1650 0x10, 0x00, // #
1651 0x10, 0x00, // #
1652 0x10, 0x00, // #
1653 0x10, 0x00, // #
1654 0x10, 0x00, // #
1655 0x10, 0x00, // #
1656 0x12, 0x00, // # #
1657 0x0C, 0x00, // ##
1658
1659 // @1800 'k' (11 pixels wide)
1660 0x04, 0x00, // #
1661 0x04, 0x00, // #
1662 0x04, 0x00, // #
1663 0x44, 0x00, // # #
1664 0x24, 0x00, // # #
1665 0x14, 0x00, // # #
1666 0x1C, 0x00, // ###
1667 0x24, 0x00, // # #
1668 0x44, 0x00, // # #
1669 0x00, 0x00, //
1670 0x00, 0x00, //
1671 0x00, 0x00, //
1672
1673 // @1824 'l' (11 pixels wide)
1674 0x20, 0x00, // #
1675 0x20, 0x00, // #
1676 0x20, 0x00, // #
1677 0x20, 0x00, // #
1678 0x20, 0x00, // #
1679 0x20, 0x00, // #
1680 0x20, 0x00, // #
1681 0x20, 0x00, // #
1682 0x20, 0x00, // #
1683 0x00, 0x00, //
1684 0x00, 0x00, //
1685 0x00, 0x00, //
1686
1687 // @1848 'm' (11 pixels wide)
1688 0x00, 0x00, //
1689 0x00, 0x00, //
1690 0x00, 0x00, //
1691 0x94, 0x00, // # # #
1692 0x6C, 0x01, // ## ## #
1693 0x24, 0x01, // # # #
1694 0x24, 0x01, // # # #
1695 0x24, 0x01, // # # #
1696 0x24, 0x01, // # # #
1697 0x00, 0x00, //
1698 0x00, 0x00, //
1699 0x00, 0x00, //
1700
1701 // @1872 'n' (11 pixels wide)
1702 0x00, 0x00, //
1703 0x00, 0x00, //
1704 0x00, 0x00, //
1705 0x68, 0x00, // # ##
1706 0x98, 0x00, // ## #
1707 0x88, 0x00, // # #
1708 0x88, 0x00, // # #
1709 0x88, 0x00, // # #
1710 0x88, 0x00, // # #
1711 0x00, 0x00, //
1712 0x00, 0x00, //
1713 0x00, 0x00, //
1714
1715 // @1896 'o' (11 pixels wide)
1716 0x00, 0x00, //
1717 0x00, 0x00, //
1718 0x00, 0x00, //
1719 0x70, 0x00, // ###
1720 0x88, 0x00, // # #
1721 0x88, 0x00, // # #
1722 0x88, 0x00, // # #
1723 0x88, 0x00, // # #
1724 0x70, 0x00, // ###
1725 0x00, 0x00, //
1726 0x00, 0x00, //
1727 0x00, 0x00, //
1728
1729 // @1920 'p' (11 pixels wide)
1730 0x00, 0x00, //
1731 0x00, 0x00, //
1732 0x00, 0x00, //
1733 0x3C, 0x00, // ####
1734 0x44, 0x00, // # #
1735 0x44, 0x00, // # #
1736 0x44, 0x00, // # #
1737 0x44, 0x00, // # #
1738 0x3C, 0x00, // ####
1739 0x04, 0x00, // #
1740 0x04, 0x00, // #
1741 0x04, 0x00, // #
1742
1743 // @1944 'q' (11 pixels wide)
1744 0x00, 0x00, //
1745 0x00, 0x00, //
1746 0x00, 0x00, //
1747 0xE0, 0x00, // ###
1748 0x90, 0x00, // # #
1749 0x88, 0x00, // # #
1750 0x88, 0x00, // # #
1751 0x88, 0x00, // # #
1752 0xF0, 0x00, // ####
1753 0x80, 0x00, // #
1754 0x80, 0x00, // #
1755 0x80, 0x00, // #
1756
1757 // @1968 'r' (11 pixels wide)
1758 0x00, 0x00, //
1759 0x00, 0x00, //
1760 0x00, 0x00, //
1761 0x70, 0x00, // ###
1762 0x50, 0x00, // # #
1763 0x10, 0x00, // #
1764 0x10, 0x00, // #
1765 0x10, 0x00, // #
1766 0x10, 0x00, // #
1767 0x00, 0x00, //
1768 0x00, 0x00, //
1769 0x00, 0x00, //
1770
1771 // @1992 's' (11 pixels wide)
1772 0x00, 0x00, //
1773 0x00, 0x00, //
1774 0x00, 0x00, //
1775 0x70, 0x00, // ###
1776 0x08, 0x00, // #
1777 0x10, 0x00, // #
1778 0x20, 0x00, // #
1779 0x40, 0x00, // #
1780 0x38, 0x00, // ###
1781 0x00, 0x00, //
1782 0x00, 0x00, //
1783 0x00, 0x00, //
1784
1785 // @2016 't' (11 pixels wide)
1786 0x00, 0x00, //
1787 0x10, 0x00, // #
1788 0x10, 0x00, // #
1789 0x38, 0x00, // ###
1790 0x10, 0x00, // #
1791 0x10, 0x00, // #
1792 0x10, 0x00, // #
1793 0x10, 0x00, // #
1794 0x10, 0x00, // #
1795 0x00, 0x00, //
1796 0x00, 0x00, //
1797 0x00, 0x00, //
1798
1799 // @2040 'u' (11 pixels wide)
1800 0x00, 0x00, //
1801 0x00, 0x00, //
1802 0x00, 0x00, //
1803 0x88, 0x00, // # #
1804 0x88, 0x00, // # #
1805 0x88, 0x00, // # #
1806 0x88, 0x00, // # #
1807 0x88, 0x00, // # #
1808 0xF0, 0x00, // ####
1809 0x00, 0x00, //
1810 0x00, 0x00, //
1811 0x00, 0x00, //
1812
1813 // @2064 'v' (11 pixels wide)
1814 0x00, 0x00, //
1815 0x00, 0x00, //
1816 0x00, 0x00, //
1817 0x88, 0x00, // # #
1818 0x88, 0x00, // # #
1819 0x50, 0x00, // # #
1820 0x50, 0x00, // # #
1821 0x20, 0x00, // #
1822 0x20, 0x00, // #
1823 0x00, 0x00, //
1824 0x00, 0x00, //
1825 0x00, 0x00, //
1826
1827 // @2088 'w' (11 pixels wide)
1828 0x00, 0x00, //
1829 0x00, 0x00, //
1830 0x00, 0x00, //
1831 0x24, 0x01, // # # #
1832 0x24, 0x01, // # # #
1833 0xB4, 0x00, // # ## #
1834 0xB4, 0x00, // # ## #
1835 0xA8, 0x00, // # # #
1836 0x48, 0x00, // # #
1837 0x00, 0x00, //
1838 0x00, 0x00, //
1839 0x00, 0x00, //
1840
1841 // @2112 'x' (11 pixels wide)
1842 0x00, 0x00, //
1843 0x00, 0x00, //
1844 0x00, 0x00, //
1845 0x84, 0x00, // # #
1846 0x48, 0x00, // # #
1847 0x30, 0x00, // ##
1848 0x30, 0x00, // ##
1849 0x48, 0x00, // # #
1850 0x84, 0x00, // # #
1851 0x00, 0x00, //
1852 0x00, 0x00, //
1853 0x00, 0x00, //
1854
1855 // @2136 'y' (11 pixels wide)
1856 0x00, 0x00, //
1857 0x00, 0x00, //
1858 0x00, 0x00, //
1859 0x08, 0x01, // # #
1860 0x88, 0x00, // # #
1861 0x90, 0x00, // # #
1862 0x50, 0x00, // # #
1863 0x60, 0x00, // ##
1864 0x20, 0x00, // #
1865 0x20, 0x00, // #
1866 0x10, 0x00, // #
1867 0x10, 0x00, // #
1868
1869 // @2160 'z' (11 pixels wide)
1870 0x00, 0x00, //
1871 0x00, 0x00, //
1872 0x00, 0x00, //
1873 0x78, 0x00, // ####
1874 0x40, 0x00, // #
1875 0x20, 0x00, // #
1876 0x10, 0x00, // #
1877 0x08, 0x00, // #
1878 0x78, 0x00, // ####
1879 0x00, 0x00, //
1880 0x00, 0x00, //
1881 0x00, 0x00, //
1882
1883 // @2184 '{' (11 pixels wide)
1884 0x60, 0x00, // ##
1885 0x10, 0x00, // #
1886 0x10, 0x00, // #
1887 0x10, 0x00, // #
1888 0x10, 0x00, // #
1889 0x18, 0x00, // ##
1890 0x10, 0x00, // #
1891 0x10, 0x00, // #
1892 0x10, 0x00, // #
1893 0x10, 0x00, // #
1894 0x60, 0x00, // ##
1895 0x00, 0x00, //
1896
1897 // @2208 '|' (11 pixels wide)
1898 0x20, 0x00, // #
1899 0x20, 0x00, // #
1900 0x20, 0x00, // #
1901 0x20, 0x00, // #
1902 0x20, 0x00, // #
1903 0x20, 0x00, // #
1904 0x20, 0x00, // #
1905 0x20, 0x00, // #
1906 0x20, 0x00, // #
1907 0x20, 0x00, // #
1908 0x20, 0x00, // #
1909 0x00, 0x00, //
1910
1911 // @2232 '}' (11 pixels wide)
1912 0x18, 0x00, // ##
1913 0x20, 0x00, // #
1914 0x20, 0x00, // #
1915 0x20, 0x00, // #
1916 0x20, 0x00, // #
1917 0x60, 0x00, // ##
1918 0x20, 0x00, // #
1919 0x20, 0x00, // #
1920 0x20, 0x00, // #
1921 0x20, 0x00, // #
1922 0x18, 0x00, // ##
1923 0x00, 0x00, //
1924
1925 // @2256 '~' (11 pixels wide)
1926 0x00, 0x00, //
1927 0x00, 0x00, //
1928 0x00, 0x00, //
1929 0x98, 0x00, // ## #
1930 0x9C, 0x00, // ### #
1931 0x64, 0x00, // # ##
1932 0x00, 0x00, //
1933 0x00, 0x00, //
1934 0x00, 0x00, //
1935 0x00, 0x00, //
1936 0x00, 0x00, //
1937 0x00, 0x00, //
1938 };
1939
1940
1941
605 sFONT ComicSansMS_18 = {
1942 sFONT ComicSansMS_18 = {
606 .table = ComicSansMS_18_TBL,
1943 .table = ComicSansMS_18_TBL,
607 .Width = 16,
1944 .Width = 16,
@@ -616,6 +1953,15 sFONT ComicSansMS_24 = {
616 .bytesPerLine = 3
1953 .bytesPerLine = 3
617 };
1954 };
618
1955
1956 sFONT ComicSansMS_8 = {
1957 .table = comicSansMS_8ptBitmaps,
1958 .Width = 11,
1959 .Height = 12,
1960 .bytesPerLine = 2
1961 };
1962
1963
1964
619 const uint8_t Monk_TBL[] = {
1965 const uint8_t Monk_TBL[] = {
620
1966
621 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,0xF8,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEE,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xAF,0xFB,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xDF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xEF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB0,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0xF8,0x07,0x00,0x00,0x00,0x00,0x00,0xB0,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0xFE,0x3F,0x00,0x00,0x00,0x00,0x00,0xF0,0xDF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0xAF,0xFA,0x00,0x00,0x00,0x00,0x00,0x70,0x7F,0xFB,0x07,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0xE0,0xDF,0xFE,0x03,0x00,0x00,0x00,0x00,0x80,0x6F,0xFD,0x01,0x00,0x00,0x00,0x00,0xA0,0xFF,0xDE,0x01,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0xC0,0xBF,0xF5,0x03,0x00,0x00,0x00,0x00,0x80,0xFF,0xFD,0x03,0x00,0x00,0x00,0x00,0xC0,0x7F,0xFD,0x01,0x00,0x00,0x00,0x00,0x80,0xB5,0xFF,0x03,0x00,0x00,0x00,0x00,0xC0,0x5F,0xDB,0x01,0x00,0x00,0x00,0x00,0xC0,0xED,0xFF,0x03,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0xE0,0xAA,0xFF,0x03,0x00,0x00,0x00,0x00,0x40,0xBF,0xFA,0x01,0x00,0x00,0x00,0x00,0xE0,0xF6,0xFF,0x07,0x00,0x00,0x00,0x00,0x60,0xBE,0xFB,0x01,0x00,0x00,0x00,0x00,0xF0,0xBA,0xFF,0x03,0x00,0x00,0x00,0x00,0x70,0xBC,0xEE,0x00,0x00,0x00,0x00,0x00,0xF0,0xF6,0xFF,0x07,0x00,0x00,0x00,0x00,0x7C,0x75,0xBD,0x00,0x00,0x00,0x00,0x00,0xF0,0xAA,0xFF,0x0F,0x00,0x00,0x00,0x00,0x7E,0xF0,0xFE,0x01,0x00,0x00,0x00,0x00,0xE0,0xF5,0xFF,0x0F,0x00,0x00,0x00,0x80,0xFF,0xF0,0xF5,0x07,0x00,0x00,0x00,0x00,0xE0,0xFB,0xFF,0x07,0x00,0x00,0x00,0xE0,0x7F,0xF4,0xFF,0x0F,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x03,0x00,0x00,0x00,0xF8,0xFF,0xC8,0xEF,0x3F,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x07,0x00,0x00,0x00,0xFC,0xFF,0x8A,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0xBE,0xFD,0x07,0x00,0x00,0x00,0xFF,0xFF,0x90,0xFF,0xFF,0x00,0x00,0x00,0x00,0x80,0x5F,0xEA,0x0F,0x00,0x00,0x80,0xFF,0xFF,0xA2,0xF7,0xFF,0x01,0x00,0x00,0x00,0xE0,0x3F,0xF8,0x1F,0x00,0x00,0x80,0xFF,0xFF,0x80,0xBF,0xFF,0x03,0x00,0x00,0x00,0xF8,0x1E,0xF8,0x7F,0x00,0x00,0xC0,0xFF,0xFF,0xC9,0x5F,0xFF,0x0F,0x00,0x00,0x00,0x3F,0x0E,0xFD,0xFF,0x01,0x00,0xC0,0xFF,0xFF,0x81,0xBF,0xFF,0x0F,0x00,0x00,0xC0,0x9F,0x27,0xFE,0xFF,0x07,0x00,0xC0,0xFF,0xFF,0x91,0xBF,0xFF,0x0F,0x00,0x00,0xE0,0x9F,0x0F,0xFE,0xFF,0x0F,0x00,0xE0,0xFF,0xFF,0xC1,0x5F,0xFF,0x0F,0x00,0x00,0xE0,0xCF,0x07,0xFF,0xFF,0x0F,0x00,0xE0,0xFF,0xFF,0x89,0xBF,0xFF,0x1F,0x00,0x00,0xC0,0xE7,0x87,0xFF,0xFF,0x0F,0x00,0xE0,0xFF,0xFF,0xC1,0xBF,0xFF,0x1F,0x00,0x00,0xE0,0xE7,0xC7,0xFF,0xFF,0x1F,0x00,0xE0,0xFF,0xFF,0x89,0xBF,0xFF,0x1F,0x00,0x00,0xF0,0xF3,0xC3,0xFF,0xFF,0x1F,0x00,0xE0,0xFF,0xFF,0xC3,0xFF,0xFF,0x1F,0x00,0x00,0xF8,0xF3,0xE3,0xFF,0xFF,0x1F,0x00,0xE0,0xFF,0xFF,0x81,0xDF,0xFF,0x1F,0x00,0x00,0xF8,0xF3,0xE1,0xFF,0xFF,0x3F,0x00,0xF0,0xFF,0xFF,0xD3,0xBF,0xFF,0x1F,0x00,0x00,0xF0,0xFB,0xF3,0xFF,0xFF,0x3F,0x00,0xE0,0xFF,0xFF,0x83,0xDF,0xFF,0x3F,0x00,0x00,0xF8,0xF9,0xF1,0xFF,0xFF,0x3F,0x00,0xE0,0xFF,0xFF,0xA3,0xFF,0xFF,0x1F,0x00,0x00,0xF8,0xF9,0xF9,0xFF,0xFF,0x3F,0x00,0xF0,0xFF,0xFF,0xC3,0xDF,0xFF,0x1F,0x00,0x00,0xF8,0xF9,0xF9,0xFF,0xFF,0x3F,0x00,0xE0,0xFF,0xFF,0xD3,0xDF,0xFF,0x1F,0x00,0x00,0xF8,0xFC,0xF8,0xFF,0xFF,0x7F,0x00,0xE0,0xFF,0xFF,0xC3,0xFF,0xFF,0x1F,0x00,0x00,0xF8,0xFC,0xFD,0xFF,0xFF,0x3F,0x00,0xE0,0xFF,0xFF,0xCB,0xDF,0xFF,0x1F,0x00,0x00,0xF8,0xFD,0xFC,0xFF,0xFF,0x7F,0x00,0xE0,0xFF,0xFF,0xE7,0xDF,0xFF,0x0F,0x00,0x00,0xFC,0xFC,0xFE,0xFF,0xFF,0x7F,0x00,0xE0,0xFF,0xFF,0xC3,0xDF,0xFF,0x0F,0x00,0x00,0xFE,0xFE,0xFE,0xFF,0xFF,0x7F,0x00,0xE0,0xFF,0xFF,0xD7,0xDF,0xFF,0x0F,0x00,0x00,0xFE,0xFE,0xFF,0xFF,0xFF,0x7F,0x00,0xE0,0xFF,0xFF,0xE7,0xDF,0xFF,0x0F,0x00,0x00,0xFC,0xFE,0xFF,0xFF,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xE3,0xDF,0xFF,0x0F,0x00,0x00,0xFC,0xFE,0xFF,0xFF,0xFF,0x7F,0x00,0xE0,0xFF,0xFF,0xD7,0xDF,0xFF,0x0F,0x00,0x00,0x7C,0xFE,0xFF,0xFF,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xE7,0xDF,0xFF,0x0F,0x00,0x00,0x7C,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xC0,0xFF,0xFF,0xE7,0xDF,0xFF,0x0F,0x00,0x00,0x78,0xFE,0xFF,0xFF,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xCF,0xDF,0xFF,0x0F,0x00,0x00,0x7C,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xEF,0xDF,0xFF,0x0F,0x00,0x00,0x7C,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xEF,0xFF,0xFF,0x1F,0x00,0x00,0x3E,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x80,0xFF,0xFF,0xEF,0xFF,0xFF,0x0F,0x00,0x00,0x3E,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x3E,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0x80,0xFF,0xFF,0xEF,0xFF,0xFF,0x0F,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x5F,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x80,0x9F,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x80,0x1F,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x80,0x9F,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0xC0,0xBF,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0xC0,0xBF,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xA3,0x0F,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0x0B,0x0E,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0x7F,0x0D,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0x0B,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xCF,0x03,0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x1F,0x03,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0x3F,0x02,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0xFF,0xE1,0xFF,0xFF,0x7F,0x03,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0x3F,0xFC,0xFF,0xFF,0xFF,0x03,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0xBF,0xBF,0xFF,0xFF,0xFF,0x03,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x80,0xDF,0xFF,0xFF,0xFD,0xFF,0x07,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0xC0,0xFF,0xFF,0x7E,0xFF,0xFF,0x0F,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0xC0,0xFF,0xFF,0xD7,0xFF,0xFF,0x0F,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0xE0,0xFF,0xFF,0xFB,0xFF,0xFF,0x1F,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0xF0,0xFF,0xFF,0xEE,0xFF,0xFF,0x1F,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0xF0,0xFF,0xFF,0xFB,0xFF,0xFF,0x1F,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0xF0,0xFF,0xFF,0xFE,0xFF,0xFF,0x3F,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0xF0,0xFF,0xFF,0xFF,0xFE,0xFF,0x3F,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0xF8,0xFF,0xFF,0xFB,0xFF,0xFF,0x7F,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0xF8,0xFF,0xFF,0xBF,0xFF,0xFF,0x7F,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFC,0xFF,0xFF,0x07,0xFF,0xFF,0x7F,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0xFC,0xFF,0xFF,0x07,0xFF,0xFF,0xFF,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0xFC,0xFF,0xFF,0x03,0xFF,0xFF,0xFF,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0xFC,0xFF,0xFF,0x03,0xFF,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xFD,0xFF,0xFF,0x03,0x00,0xFC,0xFF,0xFF,0x01,0xFE,0xFF,0xFF,0x00,0xC0,0xFF,0xFF,0xF9,0xFF,0xFF,0x03,0x00,0xFC,0xFF,0x7F,0x00,0xFC,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xF9,0xFF,0xFF,0x07,0x00,0xFC,0xFF,0x3F,0x00,0xFC,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xF9,0xFF,0xFF,0x03,0x00,0xFC,0xFF,0x3F,0x00,0xF8,0xFF,0xFF,0x00,0xC0,0xFF,0xFF,0xF1,0xFF,0xFF,0x07,0x00,0xFC,0xFF,0x1F,0x00,0xF0,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xF1,0xFF,0xFF,0x07,0x00,0xFC,0xFF,0x0F,0x00,0xE0,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xE1,0xFF,0xFF,0x07,0x00,0xFE,0xFF,0x0F,0x00,0xC0,0xFF,0x7F,0x00,0x80,0xFF,0xFF,0xE1,0xFF,0xFF,0x07,0x00,0xFE,0xFF,0x0F,0x00,0x80,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xE1,0xFF,0xFF,0x07,0x00,0xFE,0xFF,0x07,0x00,0x00,0xFF,0x7F,0x00,0x80,0xFF,0xFF,0xC1,0xFF,0xFF,0x07,0x00,0xFE,0xFF,0x07,0x00,0x00,0xFF,0xFF,0x00,0x80,0xFF,0xFF,0xC1,0xFF,0xFF,0x07,0x00,0xFF,0xFF,0x03,0x00,0x00,0xFF,0x7F,0x00,0x00,0xFF,0xFF,0x81,0xFF,0xFF,0x07,0x00,0xFF,0xFF,0x01,0x00,0x00,0xFF,0x7F,0x00,0x80,0xFF,0xFF,0x80,0xFF,0xFF,0x03,0x00,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0x00,0x80,0xFF,0xFF,0x80,0xFF,0xFF,0x07,0x80,0xFF,0xFF,0x00,0x00,0x00,0xFF,0x7F,0x00,0xE8,0xFF,0xFF,0x00,0xFF,0xFF,0x0F,0x80,0xFF,0x7F,0x00,0x00,0x80,0xFF,0xFF,0x00,0xFC,0xFF,0x7F,0x00,0xFE,0xFF,0x1F,0x80,0xFF,0x7F,0x00,0x00,0x80,0xFF,0xFF,0x00,0xFE,0xFF,0x3F,0x00,0xC0,0xFF,0x1F,0x80,0xFF,0x7F,0x00,0x00,0x80,0xFF,0xFF,0x00,0xBE,0xFF,0x1F,0x00,0xC0,0xFF,0x1F,0x80,0xFF,0x7F,0x00,0x00,0x80,0xFF,0xFF,0x01,0x04,0xFC,0x07,0x00,0xC0,0xFF,0x1F,0xC0,0xFF,0x7F,0x00,0x00,0xC0,0xFF,0xFF,0x1F,0x00,0x3C,0x00,0x00,0xF0,0xFF,0x07,0xC0,0xFF,0x7F,0x00,0x00,0x80,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0xF0,0xDD,0x0E,0x80,0xFF,0x7F,0x00,0x00,0x00,0xFE,0xFF,0x3B,0x00,0x00,0x00,0x00,0x50,0xE0,0x03,0xF0,0xFF,0x7F,0x00,0x00,0x00,0x80,0xFF,0x2E,0x00,0x00,0x00,0x00,0x00,0x40,0x01,0xF8,0xFF,0x3F,0x00,0x00,0x00,0x00,0x1A,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEC,0x55,0x0F,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0xD2,0x05,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
1967 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,0xF8,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEE,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xAF,0xFB,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xDF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xEF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB0,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0xF8,0x07,0x00,0x00,0x00,0x00,0x00,0xB0,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0xFE,0x3F,0x00,0x00,0x00,0x00,0x00,0xF0,0xDF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0xAF,0xFA,0x00,0x00,0x00,0x00,0x00,0x70,0x7F,0xFB,0x07,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0xE0,0xDF,0xFE,0x03,0x00,0x00,0x00,0x00,0x80,0x6F,0xFD,0x01,0x00,0x00,0x00,0x00,0xA0,0xFF,0xDE,0x01,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0xC0,0xBF,0xF5,0x03,0x00,0x00,0x00,0x00,0x80,0xFF,0xFD,0x03,0x00,0x00,0x00,0x00,0xC0,0x7F,0xFD,0x01,0x00,0x00,0x00,0x00,0x80,0xB5,0xFF,0x03,0x00,0x00,0x00,0x00,0xC0,0x5F,0xDB,0x01,0x00,0x00,0x00,0x00,0xC0,0xED,0xFF,0x03,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0xE0,0xAA,0xFF,0x03,0x00,0x00,0x00,0x00,0x40,0xBF,0xFA,0x01,0x00,0x00,0x00,0x00,0xE0,0xF6,0xFF,0x07,0x00,0x00,0x00,0x00,0x60,0xBE,0xFB,0x01,0x00,0x00,0x00,0x00,0xF0,0xBA,0xFF,0x03,0x00,0x00,0x00,0x00,0x70,0xBC,0xEE,0x00,0x00,0x00,0x00,0x00,0xF0,0xF6,0xFF,0x07,0x00,0x00,0x00,0x00,0x7C,0x75,0xBD,0x00,0x00,0x00,0x00,0x00,0xF0,0xAA,0xFF,0x0F,0x00,0x00,0x00,0x00,0x7E,0xF0,0xFE,0x01,0x00,0x00,0x00,0x00,0xE0,0xF5,0xFF,0x0F,0x00,0x00,0x00,0x80,0xFF,0xF0,0xF5,0x07,0x00,0x00,0x00,0x00,0xE0,0xFB,0xFF,0x07,0x00,0x00,0x00,0xE0,0x7F,0xF4,0xFF,0x0F,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x03,0x00,0x00,0x00,0xF8,0xFF,0xC8,0xEF,0x3F,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x07,0x00,0x00,0x00,0xFC,0xFF,0x8A,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0xBE,0xFD,0x07,0x00,0x00,0x00,0xFF,0xFF,0x90,0xFF,0xFF,0x00,0x00,0x00,0x00,0x80,0x5F,0xEA,0x0F,0x00,0x00,0x80,0xFF,0xFF,0xA2,0xF7,0xFF,0x01,0x00,0x00,0x00,0xE0,0x3F,0xF8,0x1F,0x00,0x00,0x80,0xFF,0xFF,0x80,0xBF,0xFF,0x03,0x00,0x00,0x00,0xF8,0x1E,0xF8,0x7F,0x00,0x00,0xC0,0xFF,0xFF,0xC9,0x5F,0xFF,0x0F,0x00,0x00,0x00,0x3F,0x0E,0xFD,0xFF,0x01,0x00,0xC0,0xFF,0xFF,0x81,0xBF,0xFF,0x0F,0x00,0x00,0xC0,0x9F,0x27,0xFE,0xFF,0x07,0x00,0xC0,0xFF,0xFF,0x91,0xBF,0xFF,0x0F,0x00,0x00,0xE0,0x9F,0x0F,0xFE,0xFF,0x0F,0x00,0xE0,0xFF,0xFF,0xC1,0x5F,0xFF,0x0F,0x00,0x00,0xE0,0xCF,0x07,0xFF,0xFF,0x0F,0x00,0xE0,0xFF,0xFF,0x89,0xBF,0xFF,0x1F,0x00,0x00,0xC0,0xE7,0x87,0xFF,0xFF,0x0F,0x00,0xE0,0xFF,0xFF,0xC1,0xBF,0xFF,0x1F,0x00,0x00,0xE0,0xE7,0xC7,0xFF,0xFF,0x1F,0x00,0xE0,0xFF,0xFF,0x89,0xBF,0xFF,0x1F,0x00,0x00,0xF0,0xF3,0xC3,0xFF,0xFF,0x1F,0x00,0xE0,0xFF,0xFF,0xC3,0xFF,0xFF,0x1F,0x00,0x00,0xF8,0xF3,0xE3,0xFF,0xFF,0x1F,0x00,0xE0,0xFF,0xFF,0x81,0xDF,0xFF,0x1F,0x00,0x00,0xF8,0xF3,0xE1,0xFF,0xFF,0x3F,0x00,0xF0,0xFF,0xFF,0xD3,0xBF,0xFF,0x1F,0x00,0x00,0xF0,0xFB,0xF3,0xFF,0xFF,0x3F,0x00,0xE0,0xFF,0xFF,0x83,0xDF,0xFF,0x3F,0x00,0x00,0xF8,0xF9,0xF1,0xFF,0xFF,0x3F,0x00,0xE0,0xFF,0xFF,0xA3,0xFF,0xFF,0x1F,0x00,0x00,0xF8,0xF9,0xF9,0xFF,0xFF,0x3F,0x00,0xF0,0xFF,0xFF,0xC3,0xDF,0xFF,0x1F,0x00,0x00,0xF8,0xF9,0xF9,0xFF,0xFF,0x3F,0x00,0xE0,0xFF,0xFF,0xD3,0xDF,0xFF,0x1F,0x00,0x00,0xF8,0xFC,0xF8,0xFF,0xFF,0x7F,0x00,0xE0,0xFF,0xFF,0xC3,0xFF,0xFF,0x1F,0x00,0x00,0xF8,0xFC,0xFD,0xFF,0xFF,0x3F,0x00,0xE0,0xFF,0xFF,0xCB,0xDF,0xFF,0x1F,0x00,0x00,0xF8,0xFD,0xFC,0xFF,0xFF,0x7F,0x00,0xE0,0xFF,0xFF,0xE7,0xDF,0xFF,0x0F,0x00,0x00,0xFC,0xFC,0xFE,0xFF,0xFF,0x7F,0x00,0xE0,0xFF,0xFF,0xC3,0xDF,0xFF,0x0F,0x00,0x00,0xFE,0xFE,0xFE,0xFF,0xFF,0x7F,0x00,0xE0,0xFF,0xFF,0xD7,0xDF,0xFF,0x0F,0x00,0x00,0xFE,0xFE,0xFF,0xFF,0xFF,0x7F,0x00,0xE0,0xFF,0xFF,0xE7,0xDF,0xFF,0x0F,0x00,0x00,0xFC,0xFE,0xFF,0xFF,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xE3,0xDF,0xFF,0x0F,0x00,0x00,0xFC,0xFE,0xFF,0xFF,0xFF,0x7F,0x00,0xE0,0xFF,0xFF,0xD7,0xDF,0xFF,0x0F,0x00,0x00,0x7C,0xFE,0xFF,0xFF,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xE7,0xDF,0xFF,0x0F,0x00,0x00,0x7C,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xC0,0xFF,0xFF,0xE7,0xDF,0xFF,0x0F,0x00,0x00,0x78,0xFE,0xFF,0xFF,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xCF,0xDF,0xFF,0x0F,0x00,0x00,0x7C,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xEF,0xDF,0xFF,0x0F,0x00,0x00,0x7C,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xEF,0xFF,0xFF,0x1F,0x00,0x00,0x3E,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x80,0xFF,0xFF,0xEF,0xFF,0xFF,0x0F,0x00,0x00,0x3E,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x3E,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0x80,0xFF,0xFF,0xEF,0xFF,0xFF,0x0F,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x5F,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x80,0x9F,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x80,0x1F,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x80,0x9F,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0xC0,0xBF,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0xC0,0xBF,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xA3,0x0F,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0x0B,0x0E,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0x7F,0x0D,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0x0B,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xCF,0x03,0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x1F,0x03,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0x3F,0x02,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0xFF,0xE1,0xFF,0xFF,0x7F,0x03,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0x3F,0xFC,0xFF,0xFF,0xFF,0x03,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0xBF,0xBF,0xFF,0xFF,0xFF,0x03,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x80,0xDF,0xFF,0xFF,0xFD,0xFF,0x07,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0xC0,0xFF,0xFF,0x7E,0xFF,0xFF,0x0F,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0xC0,0xFF,0xFF,0xD7,0xFF,0xFF,0x0F,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0xE0,0xFF,0xFF,0xFB,0xFF,0xFF,0x1F,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0xF0,0xFF,0xFF,0xEE,0xFF,0xFF,0x1F,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0xF0,0xFF,0xFF,0xFB,0xFF,0xFF,0x1F,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0xF0,0xFF,0xFF,0xFE,0xFF,0xFF,0x3F,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0xF0,0xFF,0xFF,0xFF,0xFE,0xFF,0x3F,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0xF8,0xFF,0xFF,0xFB,0xFF,0xFF,0x7F,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0xF8,0xFF,0xFF,0xBF,0xFF,0xFF,0x7F,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFC,0xFF,0xFF,0x07,0xFF,0xFF,0x7F,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0xFC,0xFF,0xFF,0x07,0xFF,0xFF,0xFF,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0xFC,0xFF,0xFF,0x03,0xFF,0xFF,0xFF,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0xFC,0xFF,0xFF,0x03,0xFF,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xFD,0xFF,0xFF,0x03,0x00,0xFC,0xFF,0xFF,0x01,0xFE,0xFF,0xFF,0x00,0xC0,0xFF,0xFF,0xF9,0xFF,0xFF,0x03,0x00,0xFC,0xFF,0x7F,0x00,0xFC,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xF9,0xFF,0xFF,0x07,0x00,0xFC,0xFF,0x3F,0x00,0xFC,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xF9,0xFF,0xFF,0x03,0x00,0xFC,0xFF,0x3F,0x00,0xF8,0xFF,0xFF,0x00,0xC0,0xFF,0xFF,0xF1,0xFF,0xFF,0x07,0x00,0xFC,0xFF,0x1F,0x00,0xF0,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xF1,0xFF,0xFF,0x07,0x00,0xFC,0xFF,0x0F,0x00,0xE0,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xE1,0xFF,0xFF,0x07,0x00,0xFE,0xFF,0x0F,0x00,0xC0,0xFF,0x7F,0x00,0x80,0xFF,0xFF,0xE1,0xFF,0xFF,0x07,0x00,0xFE,0xFF,0x0F,0x00,0x80,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xE1,0xFF,0xFF,0x07,0x00,0xFE,0xFF,0x07,0x00,0x00,0xFF,0x7F,0x00,0x80,0xFF,0xFF,0xC1,0xFF,0xFF,0x07,0x00,0xFE,0xFF,0x07,0x00,0x00,0xFF,0xFF,0x00,0x80,0xFF,0xFF,0xC1,0xFF,0xFF,0x07,0x00,0xFF,0xFF,0x03,0x00,0x00,0xFF,0x7F,0x00,0x00,0xFF,0xFF,0x81,0xFF,0xFF,0x07,0x00,0xFF,0xFF,0x01,0x00,0x00,0xFF,0x7F,0x00,0x80,0xFF,0xFF,0x80,0xFF,0xFF,0x03,0x00,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0x00,0x80,0xFF,0xFF,0x80,0xFF,0xFF,0x07,0x80,0xFF,0xFF,0x00,0x00,0x00,0xFF,0x7F,0x00,0xE8,0xFF,0xFF,0x00,0xFF,0xFF,0x0F,0x80,0xFF,0x7F,0x00,0x00,0x80,0xFF,0xFF,0x00,0xFC,0xFF,0x7F,0x00,0xFE,0xFF,0x1F,0x80,0xFF,0x7F,0x00,0x00,0x80,0xFF,0xFF,0x00,0xFE,0xFF,0x3F,0x00,0xC0,0xFF,0x1F,0x80,0xFF,0x7F,0x00,0x00,0x80,0xFF,0xFF,0x00,0xBE,0xFF,0x1F,0x00,0xC0,0xFF,0x1F,0x80,0xFF,0x7F,0x00,0x00,0x80,0xFF,0xFF,0x01,0x04,0xFC,0x07,0x00,0xC0,0xFF,0x1F,0xC0,0xFF,0x7F,0x00,0x00,0xC0,0xFF,0xFF,0x1F,0x00,0x3C,0x00,0x00,0xF0,0xFF,0x07,0xC0,0xFF,0x7F,0x00,0x00,0x80,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0xF0,0xDD,0x0E,0x80,0xFF,0x7F,0x00,0x00,0x00,0xFE,0xFF,0x3B,0x00,0x00,0x00,0x00,0x50,0xE0,0x03,0xF0,0xFF,0x7F,0x00,0x00,0x00,0x80,0xFF,0x2E,0x00,0x00,0x00,0x00,0x00,0x40,0x01,0xF8,0xFF,0x3F,0x00,0x00,0x00,0x00,0x1A,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEC,0x55,0x0F,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0xD2,0x05,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
@@ -26,63 +26,104
26 #include <gpio.h>
26 #include <gpio.h>
27 #include <core.h>
27 #include <core.h>
28
28
29 int __line__ =0;
30 int __column__=0;
31 int __lineCount__=0;
32 int __columnCount__=0;
33 LCD_t* __LCD__=NULL;
34
29
35 sFONT* __font__;
30 #define CHARXPOS(terminal,charwidth) (((terminal)->column * charwidth) + (terminal)->Xpos)
31 #define CHARYPOS(terminal,charheight) ((terminal)->line * charheight + (terminal)->Ypos+charheight)
36
32
37 int __verticalSpace__=2;
33 streamdevice_ops TERMINAL_OPS=
38 int __horizontalSpace__=0;
34 {
39 int __verticalMargins__=5;
35 .write = &terminal_write,
40 int __horizontalMargins__=5;
36 .read = &terminal_read,
41
37 .setpos= &terminal_setpos,
42 #define CHARXPOS(charwidth) ((__column__*charwidth)+__horizontalMargins__)
38 .close = NULL
43 #define CHARYPOS(charheight) ((__line__*charheight)+__verticalMargins__+charheight)
39 };
44
40
45 #define charwidth (__font__->Width+__horizontalSpace__)
41 int terminal_init(terminal_t* terminal,LCD_t* LCD,sFONT* font,streamdevice* strdev)
46 #define charheight (__font__->Height+__verticalSpace__)
47
48 int terminal_init(LCD_t* LCD,sFONT* font,streamdevice* strdev)
49 {
42 {
50 if((LCD!=NULL) && (font!=NULL) && (strdev!=NULL))
43 if((LCD!=NULL) && (font!=NULL) && (strdev!=NULL) && (terminal!=NULL))
51 {
44 {
52 __LCD__=LCD;
45 terminal->LCD=LCD;
53 __font__=font;
46 terminal->font=font;
54 __lineCount__ = (LCD->height - (__verticalMargins__*2))/charheight;
47 terminal->line = 0;
55 __columnCount__ = ((LCD->width - (__horizontalMargins__*2))/charwidth)-1;
48 terminal->column = 0;
49 terminal->horizontalSpace=-2;
50 terminal->verticalSpace=2;
51 int charw=terminal->font->Width + terminal->horizontalSpace;
52 int charh=terminal->font->Height + terminal->verticalSpace;
53 terminal->textColor=0xFFFF;
54 terminal->backgroundColor=0x0000;
55 terminal_setgeometry(terminal,5,5,terminal->LCD->width-(10),terminal->LCD->height-(10));
56
56
57 strdev->_stream = (UHANDLE)__LCD__;
57 strdev->_stream = (UHANDLE)terminal;
58 strdev->write = (write_t)&terminal_write;
58 strdev->ops = &TERMINAL_OPS;
59 strdev->read = (read_t)&terminal_read;
60 strdev->setpos = (setpos_t)&terminal_setpos;
61 strdev->streamPt = 0;
59 strdev->streamPt = 0;
62 __line__ = 0;
60 terminal_clear(terminal);
63 __column__ = 0;
61 terminal->LCD->paintFilRect(terminal->LCD,CHARXPOS(terminal, charw),CHARYPOS(terminal, charh)-charh,charw,charh,terminal->backgroundColor,0,terminal->backgroundColor);
64 __LCD__->paintFilRect(__LCD__,CHARXPOS(charwidth),CHARYPOS(charheight)-charheight,charwidth,charheight,0x0000,0,0x0000);
65 return 1;
62 return 1;
66 }
63 }
67 return 0;
64 return 0;
68 }
65 }
69
66
70 void terminal_movecursor(int n)
67 void terminal_setgeometry(terminal_t* terminal,uint16_t Xpos,uint16_t Ypos,uint16_t width,uint16_t height)
71 {
68 {
72 __column__ += n;
69 int charw=terminal->font->Width + terminal->horizontalSpace;
73 if(__column__>__columnCount__)
70 int charh=terminal->font->Height + terminal->verticalSpace;
74 {
71 if(terminal->LCD->height<(Ypos+height))
75 __line__ += (__column__)/__columnCount__;
72 return;
76 __LCD__->paintFilRect(__LCD__,CHARXPOS(charwidth),CHARYPOS(charheight)-charheight,charwidth*(__columnCount__-__column__),charheight,0x0000,0,0x0000);
73 if(terminal->LCD->width<(Xpos+width))
77 __line__ = __line__ % __lineCount__;
74 return;
78 __column__ = __column__ % __columnCount__;
75 terminal->Xpos = Xpos;
79 }
76 terminal->Ypos = Ypos;
80 __LCD__->paintFilRect(__LCD__,CHARXPOS(charwidth),CHARYPOS(charheight)-charheight,charwidth,charheight,0x0000,0,0x0000);
77 terminal->height = height;
78 terminal->width = width;
79 terminal->lineCount = terminal->height/charh;
80 terminal->columnCount = (terminal->width/charw)-1;
81 terminal_clear(terminal);
82 }
81
83
84
85 void terminal_clear(terminal_t* terminal)
86 {
87 terminal->LCD->paintFilRect(terminal->LCD,terminal->Xpos,terminal->Ypos,terminal->width,terminal->height,terminal->backgroundColor,0,terminal->backgroundColor);
88 }
89
90 void terminal_setbackgroundColor(terminal_t* terminal, uint32_t backgrooundColor)
91 {
92 terminal->backgroundColor = backgrooundColor;
82 }
93 }
83
94
84 int terminal_writenc(char* data, int n)
95 void terminal_settextColor(terminal_t* terminal, uint32_t textColor)
96 {
97 terminal->textColor = textColor;
98 }
99
100
101 void terminal_movecursor(terminal_t* terminal,int n)
85 {
102 {
103 int charw=terminal->font->Width + terminal->horizontalSpace;
104 int charh=terminal->font->Height + terminal->verticalSpace;
105 terminal->column += n;
106 if(terminal->column>terminal->columnCount)
107 {
108 terminal->line += (terminal->column)/terminal->columnCount;
109 terminal->LCD->paintFilRect(terminal->LCD,CHARXPOS(terminal, charw),CHARYPOS(terminal,charh)-charh,charw*(terminal->columnCount-terminal->column),charh,terminal->backgroundColor,0,terminal->backgroundColor);
110 terminal->line = terminal->line % terminal->lineCount;
111 terminal->column = terminal->column % terminal->columnCount;
112 }
113 terminal->LCD->paintFilRect(terminal->LCD,CHARXPOS(terminal,charw),CHARYPOS(terminal,charh)-charh,charw,charh,terminal->backgroundColor,0,terminal->backgroundColor);
114 }
115
116 void terminal_clearCurentLine(terminal_t* terminal)
117 {
118 int charw=terminal->font->Width + terminal->horizontalSpace;
119 int charh=terminal->font->Height + terminal->verticalSpace;
120 terminal->LCD->paintFilRect(terminal->LCD,terminal->Xpos,CHARYPOS(terminal, charh)-charh,terminal->width,charh,terminal->backgroundColor,0,terminal->backgroundColor);
121 }
122
123 int terminal_writenc(terminal_t* terminal,char* data, int n)
124 {
125 int charw=terminal->font->Width + terminal->horizontalSpace;
126 int charh=terminal->font->Height + terminal->verticalSpace;
86 int l=0;
127 int l=0;
87 char buffer[2]=" ";
128 char buffer[2]=" ";
88 while(l<n)
129 while(l<n)
@@ -91,40 +132,41 int terminal_writenc(char* data, int n)
91 buffer[0]=data[l];
132 buffer[0]=data[l];
92 if(buffer[0]=='\n')
133 if(buffer[0]=='\n')
93 {
134 {
94 __line__= (__line__+1) % __lineCount__;
135 terminal->line= (terminal->line+1) % terminal->lineCount;
95 __column__ = 0;
136 terminal->column = 0;
96 }else {
137 }else {
97 if(buffer[0]=='\t')
138 if(buffer[0]=='\t')
98 {
139 {
99 __line__ += (__column__+3) / __columnCount__;
140 for(int i=0;i<1;i++)terminal_movecursor(terminal,1);
100 __column__= (__column__+3) % __columnCount__;
141 }else
101 }else {
142 if(terminal->column==0)terminal_clearCurentLine(terminal);
102 __LCD__->paintFilRect(__LCD__,CHARXPOS(charwidth),CHARYPOS(charheight)-charheight,charwidth,charheight,0x0000,0,0x0000);
143 if(buffer[0]!='\r'){
103 __LCD__->paintText(__LCD__,buffer,CHARXPOS(charwidth),CHARYPOS(charheight),__font__,0xFFFF);
144 terminal->LCD->paintFilRect(terminal->LCD,CHARXPOS(terminal,charw),CHARYPOS(terminal, charh)-charh,charw,charh,terminal->backgroundColor,0,terminal->backgroundColor);
104 terminal_movecursor(1);
145 terminal->LCD->paintText(terminal->LCD,buffer,CHARXPOS(terminal,charw),CHARYPOS(terminal, charh),terminal->font,terminal->textColor);
105 }
146 terminal_movecursor(terminal,1);
147 }
106 }
148 }
107 l++;
149 l++;
108 }
150 }
109 return n;
151 return n;
110 }
152 }
111
153
112 int terminal_write(streamdeviceptr device,void* data,int size, int n)
154 int terminal_write(streamdevice* device,void* data,int size, int n)
113 {
155 {
114 return terminal_writenc((char*) data,size*n);
156 return terminal_writenc((terminal_t*)device->_stream,(char*) data,size*n);
115 }
157 }
116
158
117 int terminal_read(streamdeviceptr device,void* data,int size, int n)
159 int terminal_read(streamdevice* device,void* data,int size, int n)
118 {
160 {
119 return n*size;
161 return n*size;
120 }
162 }
121
163
122 int terminal_setpos(streamdeviceptr device,int pos)
164 int terminal_setpos(streamdevice* device,int pos)
123 {
165 {
124 return 1;
166 return 1;
125 }
167 }
126
168
127 int terminal_close(streamdeviceptr device)
169 int terminal_close( streamdevice* device)
128 {
170 {
129 return 1;
171 return 1;
130 }
172 }
@@ -13,7 +13,8 INCLUDEPATH += ../../../../includes \
13 ../../../../includes/GRAPHIC/GUI/FONTS \
13 ../../../../includes/GRAPHIC/GUI/FONTS \
14 ../../../../includes/GRAPHIC/GUI/Widgets
14 ../../../../includes/GRAPHIC/GUI/Widgets
15
15
16
16 HEADERS += \
17 ../../../../../includes/GRAPHIC/GUI/Widgets/terminal.h
17
18
18 UCMODEL=stm32f4
19 UCMODEL=stm32f4
19
20
@@ -3,7 +3,8 TEMPLATE = subdirs
3 SUBDIRS += FILE_SYSTEM \
3 SUBDIRS += FILE_SYSTEM \
4 AUDIO \
4 AUDIO \
5 POWER \
5 POWER \
6 GRAPHIC
6 GRAPHIC \
7 Threading
7
8
8
9
9
10
@@ -40,6 +40,7 typedef struct _tFont
40
40
41 extern sFONT ComicSansMS_24;
41 extern sFONT ComicSansMS_24;
42 extern sFONT ComicSansMS_18;
42 extern sFONT ComicSansMS_18;
43 extern sFONT ComicSansMS_8;
43 extern sFONT Monk_24;
44 extern sFONT Monk_24;
44
45
45 #ifdef __cplusplus
46 #ifdef __cplusplus
@@ -27,12 +27,35
27 #include <genericLCD_Controler.h>
27 #include <genericLCD_Controler.h>
28 #include <fonts.h>
28 #include <fonts.h>
29
29
30 int terminal_init(LCD_t* LCD,sFONT* font,streamdevice* strdev);
30 typedef struct terminal_t
31 void terminal_movecursor(int n);
31 {
32 int terminal_write(streamdeviceptr device,void* data,int size, int n);
32 uint16_t line;
33 int terminal_read(streamdeviceptr device,void* data,int size, int n);
33 uint16_t column;
34 int terminal_setpos(streamdeviceptr device,int pos);
34 uint16_t lineCount;
35 int terminal_close(streamdeviceptr device);
35 uint16_t columnCount;
36 uint16_t Xpos;
37 uint16_t Ypos;
38 uint16_t width;
39 uint16_t height;
40 uint32_t backgroundColor;
41 uint32_t textColor;
42 int8_t verticalSpace;
43 int8_t horizontalSpace;
44 LCD_t* LCD;
45 sFONT* font;
46 }terminal_t;
47
48 int terminal_init(terminal_t* terminal,LCD_t* LCD,sFONT* font,streamdevice* strdev);
49 void terminal_setgeometry(terminal_t* terminal,uint16_t Xpos,uint16_t Ypos,uint16_t width,uint16_t height);
50 void terminal_clear(terminal_t* terminal);
51 void terminal_setbackgroundColor(terminal_t* terminal, uint32_t backgrooundColor);
52 void terminal_settextColor(terminal_t* terminal, uint32_t textColor);
53 void terminal_movecursor(terminal_t* terminal,int n);
54 void terminal_clearCurentLine(terminal_t* terminal);
55 int terminal_write(streamdevice* device,void* data,int size, int n);
56 int terminal_read(streamdevice* device,void* data,int size, int n);
57 int terminal_setpos(streamdevice* device,int pos);
58 int terminal_close(streamdevice* device);
36
59
37
60
38
61
@@ -14,7 +14,7
14 --
14 --
15 -- You should have received a copy of the GNU General Public License
15 -- You should have received a copy of the GNU General Public License
16 -- along with this program; if not, write to the Free Software
16 -- along with this program; if not, write to the Free Software
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 -------------------------------------------------------------------------------
18 -------------------------------------------------------------------------------
19 -- Author : Alexis Jeandet
19 -- Author : Alexis Jeandet
20 -- Mail : alexis.jeandet@gmail.com
20 -- Mail : alexis.jeandet@gmail.com
@@ -25,22 +25,34
25 #include <stdint.h>
25 #include <stdint.h>
26
26
27 typedef struct streamdevice* streamdeviceptr;
27 typedef struct streamdevice* streamdeviceptr;
28 struct streamdevice_ops;
29
30 typedef volatile struct streamdevice
31 {
32 struct streamdevice_ops* ops;
33 volatile uint32_t streamPt;
34 volatile UHANDLE _stream;
35 volatile uint32_t mode;
36 }streamdevice;
37
38
39 typedef struct streamdevice_ops
40 {
41 int (*write)(streamdevice* device,void* data,int size, int n);
42 int (*read)(streamdevice* device,void* data,int size, int n);
43 int (*setpos)(streamdevice* device,int pos);
44 int (*close)(streamdevice* device);
45 }streamdevice_ops;
46
47
28
48
29 typedef int (*write_t)(streamdeviceptr device,void* data,int size, int n);
49 typedef int (*write_t)(streamdeviceptr device,void* data,int size, int n);
30 typedef int (*read_t)(streamdeviceptr device,void* data,int size, int n);
50 typedef int (*read_t)(streamdeviceptr device,void* data,int size, int n);
31 typedef int (*setpos_t)(streamdeviceptr device,int pos);
51 typedef int (*setpos_t)(streamdeviceptr device,int pos);
32 typedef int (*close_t)(streamdeviceptr device);
52 typedef int (*close_t)(streamdeviceptr device);
33
53
34 typedef volatile struct streamdevice
54
35 {
55
36 write_t write;
37 read_t read;
38 setpos_t setpos;
39 close_t close;
40 volatile uint32_t streamPt;
41 volatile UHANDLE _stream;
42 volatile uint32_t mode;
43 }streamdevice;
44
56
45 #endif
57 #endif
46
58
@@ -263,7 +263,7 int setPll(uint32_t freq)
263 FLASH->ACR |= FLASH_ACR_LATENCY_7WS;
263 FLASH->ACR |= FLASH_ACR_LATENCY_7WS;
264 RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));//Switch to PLL as main clk source
264 RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));//Switch to PLL as main clk source
265 RCC->CFGR |= RCC_CFGR_SW_PLL;
265 RCC->CFGR |= RCC_CFGR_SW_PLL;
266 /* Wait till the main PLL is used as system clock source */
266 /* Wait untill the main PLL is used as system clock source */
267 while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL);
267 while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL);
268 if(srcfreq>150000000)
268 if(srcfreq>150000000)
269 {
269 {
@@ -36,7 +36,7 int _close(int file)
36 {
36 {
37 if(file<__max_opened_files__ && __opnfiles__[file]!=NULL)
37 if(file<__max_opened_files__ && __opnfiles__[file]!=NULL)
38 {
38 {
39 return __opnfiles__[file]->close((streamdeviceptr) __opnfiles__[file]);
39 return __opnfiles__[file]->ops->close( __opnfiles__[file]);
40 }
40 }
41 return 0;
41 return 0;
42 }
42 }
@@ -46,7 +46,7 int _write(int file, char *ptr, int len)
46 {
46 {
47 if(file<__max_opened_files__ && __opnfiles__[file]!=NULL)
47 if(file<__max_opened_files__ && __opnfiles__[file]!=NULL)
48 {
48 {
49 if(__opnfiles__[file]->write((streamdeviceptr)__opnfiles__[file],ptr,1,len)) return len;
49 if(__opnfiles__[file]->ops->write(__opnfiles__[file],ptr,1,len)) return len;
50 }
50 }
51 return 0;
51 return 0;
52 }
52 }
@@ -107,7 +107,7 int _open(const char *name, int flags, i
107 {
107 {
108 uartmkstreamdev(uart,fd1);
108 uartmkstreamdev(uart,fd1);
109 int i=2;
109 int i=2;
110 while(i<__max_opened_files__ && __opnfiles__[i]!=NULL)i++;
110 while((i<__max_opened_files__) && (__opnfiles__[i]!=NULL))i++;
111 if(i!=__max_opened_files__)
111 if(i!=__max_opened_files__)
112 {
112 {
113 __opnfiles__[i] = fd1;
113 __opnfiles__[i] = fd1;
@@ -122,7 +122,7 int _open(const char *name, int flags, i
122 int _read(int file, char *ptr, int len) {
122 int _read(int file, char *ptr, int len) {
123 if(file<__max_opened_files__ && __opnfiles__[file]!=NULL)
123 if(file<__max_opened_files__ && __opnfiles__[file]!=NULL)
124 {
124 {
125 if(__opnfiles__[file]->read((streamdeviceptr)__opnfiles__[file],ptr,1,len)) return len;
125 if(__opnfiles__[file]->ops->read(__opnfiles__[file],ptr,1,len)) return len;
126 }
126 }
127 return 0;
127 return 0;
128 }
128 }
@@ -25,12 +25,26
25 #include <stm32f4xx_rcc.h>
25 #include <stm32f4xx_rcc.h>
26 #include <stm32f4xx_gpio.h>
26 #include <stm32f4xx_gpio.h>
27 #include <gpio.h>
27 #include <gpio.h>
28 #include <stdio.h>
29
28 #define GPIOGETPORT(gpio) ((GPIO_TypeDef*)(((((uint32_t)gpio) & (uint32_t)0x0000FF00)*(uint32_t)4) + (uint32_t)GPIOA))
30 #define GPIOGETPORT(gpio) ((GPIO_TypeDef*)(((((uint32_t)gpio) & (uint32_t)0x0000FF00)*(uint32_t)4) + (uint32_t)GPIOA))
29 #define GPIOPORTNUM(gpio) (((uint32_t)(gpio) & (uint32_t)0x0000FF00)>>(uint32_t)8)
31 #define GPIOPORTNUM(gpio) (((uint32_t)(gpio) & (uint32_t)0x0000FF00)>>(uint32_t)8)
30
32
31 USART_TypeDef* _uart_dev_table[6]={USART1,USART2,USART3,UART4,UART5,USART6};
33 USART_TypeDef* _uart_dev_table[6]={USART1,USART2,USART3,UART4,UART5,USART6};
32
34
33
35
36 int _uartstrsetpos(streamdevice* device,int pos);
37 int _uartstrread(streamdevice* device,void* data,int size, int n);
38 int _uartstrwrite(streamdevice* device,void* data,int size, int n);
39
40 streamdevice_ops UART_OPS=
41 {
42 .write = &_uartstrwrite,
43 .read = &_uartstrread,
44 .setpos= &_uartstrsetpos,
45 .close = NULL
46 };
47
34 uart_t uartopen(int count)
48 uart_t uartopen(int count)
35 {
49 {
36
50
@@ -435,10 +449,11 int _uartstrsetpos(streamdevice* device,
435
449
436 int uartmkstreamdev(uart_t uart,streamdevice* strdev)
450 int uartmkstreamdev(uart_t uart,streamdevice* strdev)
437 {
451 {
438 strdev->_stream = (UHANDLE)uart;
452 strdev->_stream = (UHANDLE)uart;/*
439 strdev->write = (write_t)&_uartstrwrite;
453 strdev->write = (write_t)&_uartstrwrite;
440 strdev->read = (read_t)&_uartstrread;
454 strdev->read = (read_t)&_uartstrread;
441 strdev->setpos = (setpos_t)&_uartstrsetpos;
455 strdev->setpos = (setpos_t)&_uartstrsetpos;*/
456 strdev->ops = &UART_OPS;
442 strdev->streamPt = 0;
457 strdev->streamPt = 0;
443 return 1;
458 return 1;
444 }
459 }
General Comments 0
You need to be logged in to leave comments. Login now