##// 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
@@ -1,278 +1,308
1 1 /*------------------------------------------------------------------------------
2 2 -- This file is a part of the libuc, microcontroler library
3 3 -- Copyright (C) 2011, Alexis Jeandet
4 4 --
5 5 -- This program is free software; you can redistribute it and/or modify
6 6 -- it under the terms of the GNU General Public License as published by
7 7 -- the Free Software Foundation; either version 3 of the License, or
8 8 -- (at your option) any later version.
9 9 --
10 10 -- This program is distributed in the hope that it will be useful,
11 11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 13 -- GNU General Public License for more details.
14 14 --
15 15 -- You should have received a copy of the GNU General Public License
16 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 19 -- Author : Alexis Jeandet
20 20 -- Mail : alexis.jeandet@gmail.com
21 21 -------------------------------------------------------------------------------*/
22 22 #include "bsp.h"
23 23 #include <streamdevices.h>
24 24 #include <malloc.h>
25 25 #include <gpio.h>
26 26 #include <uart.h>
27 27 #include <stdio.h>
28 28 #include <stm32f4xx_gpio.h>
29 29 #include <stm32f4xx_fsmc.h>
30 30 #include <i2c.h>
31 31 #include <core.h>
32 #include <terminal.h>
33
32 34 uint32_t OSC0 =8000000;
33 35 uint32_t INTOSC =16000000;
34 36 uint32_t RTCOSC =32768;
35 37 uint32_t currentCpuFreq=0;
36 38 extern streamdevice* __opnfiles__[__MAX_OPENED_FILES__];
37 39
38 40 LCD_IF_t lcdIF0={
39 41 .init = &bsp_FSMC_init,
40 42 .writereg = &bsp_lcd0_write_reg,
41 43 .readreg = &bsp_lcd0_read_reg,
42 44 .writeGRAM = &bsp_lcd0_writeGRAM,
43 45 .readGRAM = &bsp_lcd0_readGRAM
44 46 };
45 47
46 48 LCD_t lcd0={
47 49 .interface = &lcdIF0,
48 50 .init = &ili9328init,
49 51 .paint = &ili9328paint,
50 52 .paintText = &ili9328paintText,
51 53 .paintFilRect = &ili9328paintFilRect,
52 54 .refreshenable = &ili9328refreshenable,
53 55 .width= 240,
54 56 .height = 320
55 57 };
56 58
59 terminal_t terminal0;
60
57 61 volatile int16_t* lcd0_CMD=(volatile int16_t*) 0x60000000;
58 62 volatile int16_t* lcd0_DATA=(volatile int16_t*)(0x61FFFFF0);
59 63
60 64 float VREF0 =(float)3.3;
61 65
62 66 int bsp_init()
63 67 {
64 68 int i=0;
65 69 for(i=0;i<32;i++)
66 70 {
67 71 __opnfiles__[i] = NULL;
68 72 }
69 73 bsp_GPIO_init();
70 74 bsp_uart_init();
71 75 bsp_iic_init();
72 76 bsp_FSMC_init();
73 printf("\r================================================================\n\r");
74 printf("================================================================\n\r");
77 bsp_GTerm_init();
78 printf("\r=====================\n\r");
79 printf( "=====================\n\r");
75 80 printf(BSP);
76 81 printf(" initialised\n\r");
77 printf("================================================================\n\r");
82 printf( "=====================\n\r");
78 83 return 1;
79 84 }
80 85
81 86 void bsp_GPIO_init()
82 87 {
83 88 gpio_t gpio1 = gpioopen(LED1);
84 89 gpio_t gpio2 = gpioopen(LED2);
85 90 gpio_t gpio3 = gpioopen(LED3);
86 91 gpio_t gpio4 = gpioopen(PSU_DISABLE);
87 92 gpio_t gpio5 = gpioopen(PSU_ALERT_5V);
88 93 gpio_t gpio6 = gpioopen(PSU_ALERT_1_5V);
89 94 gpio_t gpio7 = gpioopen(PSU_ALERT_3_3V);
90 95 gpiosetspeed(&gpio1,gpiohighspeed);
91 96 gpiosetspeed(&gpio2,gpiohighspeed);
92 97 gpiosetspeed(&gpio3,gpiohighspeed);
93 98 gpiosetspeed(&gpio4,gpiohighspeed);
94 99 gpiosetspeed(&gpio5,gpiohighspeed);
95 100 gpiosetspeed(&gpio6,gpiohighspeed);
96 101 gpiosetspeed(&gpio7,gpiohighspeed);
97 102 gpioclr(PSU_DISABLE);
98 103 gpiosetdir(&gpio1,gpiooutdir);
99 104 gpiosetdir(&gpio3,gpiooutdir);
100 105 gpiosetdir(&gpio2,gpiooutdir);
101 106 gpiosetdir(&gpio4,gpiooutdir);
102 107 gpiosetdir(&gpio5,gpioindir);
103 108 gpiosetdir(&gpio6,gpioindir);
104 109 gpiosetdir(&gpio7,gpioindir);
105 110 gpioclr(PSU_DISABLE);
106 111 }
107 112
108 113 void bsp_uart_init()
109 114 {
110 if(__opnfiles__[1]==NULL)
111 {
112 //uart_t* uart1 = (uart_t*)malloc(sizeof(uart_t));
113 streamdevice* fd1 = (streamdevice*)malloc(sizeof(streamdevice));
114 uart_t uart = uartopenandconfig(uart1,uartparitynone | uart8bits | uartonestop,115200,PA9,PA10,-1,-1);
115 uartmkstreamdev(uart,fd1);
116 __opnfiles__[1] = fd1;
117 }
118 else
119 {
120 uartopenandconfig(0,uartparitynone | uart8bits | uartonestop,115200,PA9,PA10,-1,-1);
121 }
115 //if(__opnfiles__[1]==NULL)
116 //{
117 //uart_t* uart1 = (uart_t*)malloc(sizeof(uart_t));
118 // streamdevice* fd1 = (streamdevice*)malloc(sizeof(streamdevice));
119 // uart_t uart = uartopenandconfig(uart1,uartparitynone | uart8bits | uartonestop,115200,PA9,PA10,-1,-1);
120 //uartmkstreamdev(uart,fd1);
121 //__opnfiles__[1] = fd1;
122 //}
123 //else
124 //{
125 uartopenandconfig(0,uartparitynone | uart8bits | uartonestop,115200,PA9,PA10,-1,-1);
126 //}
122 127 }
123 128
124 129
125 130
126 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))
129 #define GPIOPORTNUM(gpio) (((uint32_t)(gpio) & (uint32_t)0x0000FF00)>>(uint32_t)8)
133 #define GPIOGETPORT(gpio) ((GPIO_TypeDef*)(((((uint32_t)gpio) & (uint32_t)0x0000FF00)*(uint32_t)4) + (uint32_t)GPIOA))
134 #define GPIOPORTNUM(gpio) (((uint32_t)(gpio) & (uint32_t)0x0000FF00)>>(uint32_t)8)
130 135
131 136 gpio_t gpio1 = gpioopen(LCD_RESET);
132 137 gpiosetspeed(&gpio1,gpiohighspeed);
133 138 gpiosetdir(&gpio1,gpiooutdir);
134 139 gpioclr(LCD_RESET);
135 140
136 141 gpio_t LCD_DBxList[]={PD14,PD15,PD0,PD1,PE7,PE8,PE9,PE10,PE11,PE12,PE13,PE14,PE15\
137 142 ,PD8,PD9,PD10,PD4,PD5,PD7,PE4};
138 143 for(int i=0;i<20;i++)
139 144 {
140 145 gpio_t LCD_DBx = gpioopen(LCD_DBxList[i]);
141 146 LCD_DBx |= gpiohighspeed | gpioaf | gpiopushpulltype | gpionopulltype;
142 147 gpiosetconfig(&LCD_DBx);
143 148 GPIO_PinAFConfig(GPIOGETPORT(LCD_DBx), (uint8_t)(LCD_DBx & 0xF), GPIO_AF_FSMC);
144 149 }
145 150
146 151 FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;
147 152 FSMC_NORSRAMTimingInitTypeDef p;
148 153
149 154 /* Enable FSMC clock */
150 155 RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE);
151 156
152 /*-- FSMC Configuration ------------------------------------------------------*/
153 /*----------------------- SRAM Bank 3 ----------------------------------------*/
157 /*-- FSMC Configuration ------------------------------------------------------*/
158 /*----------------------- SRAM Bank 3 ----------------------------------------*/
154 159 /* FSMC_Bank1_NORSRAM4 configuration */
155 160 //p.FSMC_AddressSetupTime = 5;
156 161 p.FSMC_AddressSetupTime = 1;
157 162 p.FSMC_AddressHoldTime = 0;
158 163 //p.FSMC_DataSetupTime = 9;
159 164 p.FSMC_DataSetupTime = getCpuFreq()/14545450 ;// 11;
160 165 p.FSMC_BusTurnAroundDuration = 0;
161 166 p.FSMC_CLKDivision = 0;
162 167 p.FSMC_DataLatency = 0;
163 168 p.FSMC_AccessMode = FSMC_AccessMode_A;
164 169 /* Color LCD configuration ------------------------------------
165 170 LCD configured as follow:
166 171 - Data/Address MUX = Disable
167 172 - Memory Type = SRAM
168 173 - Data Width = 16bit
169 174 - Write Operation = Enable
170 175 - Extended Mode = Enable
171 176 - Asynchronous Wait = Disable */
172 177
173 178 FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
174 179 FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
175 180 FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;
176 181 FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
177 182 FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
178 183 FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
179 184 FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
180 185 FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
181 186 FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
182 187 FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
183 188 FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
184 189 FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
185 190 FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
186 191 FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
187 192 FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;
188 193
189 194 FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
190 195
191 196 /* Enable FSMC NOR/SRAM Bank1 */
192 197 FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);
193 198 gpioset(LCD_RESET);
194 199 lcd0.init(&lcd0);
195 200 return 1;
196 201 }
197 202
198 203 void bsp_spi_init()
199 204 {
200 205
201 206 }
202 207
203 208
204 209 void bsp_iic_init()
205 210 {
206 211 i2copenandconfig(i2c2,0,400000,PF0,PF1);
207 212 }
208 213
209 214 void bsp_SD_init()
210 215 {
211 216
212 217 }
213 218
214 219 void vs10XXclearXCS(){}
215 220 void vs10XXsetXCS(){}
216 221 int vs10XXDREQ()
217 222 {
218 223 return 1;
219 224 }
220 225
221 226
222 227 void bsppowersdcard(char onoff) //always ON
223 228 {
224 229
225 230 }
226 231
227 232 char bspsdcardpresent()
228 233 {
229 234 return 0;
230 235 }
231 236
232 237 char bspsdcardwriteprotected()
233 238 {
234 239 return 0;
235 240 }
236 241
237 242 void bspsdcardselect(char YESNO)
238 243 {
239 244
240 245 }
241 246
242 247
243 248 void bsp_lcd0_write_reg(uint32_t reg,uint32_t data)
244 249 {
245 250 *lcd0_CMD=(uint16_t)reg;
246 251 *lcd0_DATA=(uint16_t)data;
247 252 }
248 253
249 254 uint32_t bsp_lcd0_read_reg(uint32_t reg)
250 255 {
251 256 *lcd0_CMD=(uint16_t)reg;
252 return (uint16_t)*lcd0_DATA;
257 return (uint16_t)*lcd0_DATA;
253 258 }
254 259
255 260 void bsp_lcd0_writeGRAM(void* buffer,uint32_t count)
256 261 {
257 262 *lcd0_CMD=(uint16_t)ILI9328_REGISTER_WRITEDATATOGRAM;
258 263 uint16_t* castedBuff=(uint16_t*)buffer;
259 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
265 270 void bsp_lcd0_readGRAM(void* buffer,uint32_t count)
266 271 {
267 272 *lcd0_CMD=(uint16_t)ILI9328_REGISTER_WRITEDATATOGRAM;
268 273 uint16_t* castedBuff=(uint16_t*)buffer;
269 274 castedBuff[0]=*lcd0_DATA;
270 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
@@ -1,105 +1,106
1 1 /*------------------------------------------------------------------------------
2 2 -- This file is a part of the libuc, microcontroler library
3 3 -- Copyright (C) 2011, Alexis Jeandet
4 4 --
5 5 -- This program is free software; you can redistribute it and/or modify
6 6 -- it under the terms of the GNU General Public License as published by
7 7 -- the Free Software Foundation; either version 3 of the License, or
8 8 -- (at your option) any later version.
9 9 --
10 10 -- This program is distributed in the hope that it will be useful,
11 11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 13 -- GNU General Public License for more details.
14 14 --
15 15 -- You should have received a copy of the GNU General Public License
16 16 -- along with this program; if not, write to the Free Software
17 17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 18 -------------------------------------------------------------------------------
19 19 -- Author : Alexis Jeandet
20 20 -- Mail : alexis.jeandet@gmail.com
21 21 -------------------------------------------------------------------------------*/
22 22 #ifndef BSP_H
23 23 #define BSP_H
24 24 #include <stm32f4xx.h>
25 25 #include <stm32f4xx_gpio.h>
26 26 #include <stm32f4xx_rcc.h>
27 27 #include <gpio.h>
28 28 #include <ili9328.h>
29 29 #include <genericLCD_Controler.h>
30 30
31 31 #define __MAX_OPENED_FILES__ 4
32 32 #define __FS_ROOT_SIZE__ 4
33 33 /*
34 34 #ifndef PD8
35 35 #define PD8
36 36 #endif
37 37 #ifndef PD9
38 38 #define PD9
39 39 #endif
40 40 */
41 41
42 42
43 43 #define LED1 PF6
44 44 #define LED2 PF7
45 45 #define LED3 PF8
46 46
47 47 #define PSU_DISABLE PH2
48 48 #define PSU_ALERT_5V PF2
49 49 #define PSU_ALERT_1_5V PF3
50 50 #define PSU_ALERT_3_3V PF4
51 51
52 52 #define LCD_RESET PE2
53 53
54 54 extern float VREF0;
55 55
56 56 extern uint32_t currentCpuFreq;
57 57 extern LCD_t lcd0;
58 58
59 59
60 60 extern int bsp_init();
61 61
62 62 extern void bsp_GPIO_init();
63 63 extern void bsp_uart_init();
64 64 extern void bsp_iic_init();
65 65 extern void bsp_spi_init();
66 66 extern void bsp_SD_init();
67 extern void bsp_GTerm_init();
67 68 extern int bsp_FSMC_init();
68 69
69 70 /* VS1053 */
70 71 extern void clearXCS();
71 72 extern void setXCS();
72 73 extern int vs10XXDREQ();
73 74
74 75 /* SD CARD */
75 76 void bsppowersdcard(char onoff);
76 77 char bspsdcardpresent();
77 78 void bspsdcardselect(char YESNO);
78 79 char bspsdcardwriteprotected();
79 80
80 81
81 82 void bsp_lcd0_write_reg(uint32_t reg,uint32_t data);
82 83 uint32_t bsp_lcd0_read_reg(uint32_t reg);
83 84 void bsp_lcd0_writeGRAM(void *buffer, uint32_t count);
84 85 void bsp_lcd0_readGRAM(void *buffer, uint32_t count);
85 86
86 87 #endif
87 88
88 89
89 90
90 91
91 92
92 93
93 94
94 95
95 96
96 97
97 98
98 99
99 100
100 101
101 102
102 103
103 104
104 105
105 106
@@ -1,326 +1,345
1 1 /*------------------------------------------------------------------------------
2 2 -- This file is a part of the libuc, microcontroler library
3 3 -- Copyright (C) 2011, Alexis Jeandet
4 4 --
5 5 -- This program is free software; you can redistribute it and/or modify
6 6 -- it under the terms of the GNU General Public License as published by
7 7 -- the Free Software Foundation; either version 3 of the License, or
8 8 -- (at your option) any later version.
9 9 --
10 10 -- This program is distributed in the hope that it will be useful,
11 11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 13 -- GNU General Public License for more details.
14 14 --
15 15 -- You should have received a copy of the GNU General Public License
16 16 -- along with this program; if not, write to the Free Software
17 17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 18 -------------------------------------------------------------------------------
19 19 -- Author : Alexis Jeandet
20 20 -- Mail : alexis.jeandet@gmail.com
21 21 -------------------------------------------------------------------------------*/
22 22 #include "bsp.h"
23 23 #include <streamdevices.h>
24 24 #include <malloc.h>
25 25 #include <gpio.h>
26 26 #include <uart.h>
27 27 #include <stdio.h>
28 28 #include <stm32f4xx_gpio.h>
29 29 #include <stm32f4xx_fsmc.h>
30 30 #include <i2c.h>
31 31 #include <core.h>
32 #include <terminal.h>
32 33 uint32_t OSC0 =8000000;
33 34 uint32_t INTOSC =16000000;
34 35 uint32_t RTCOSC =32768;
35 36 uint32_t currentCpuFreq=0;
36 37 extern streamdevice* __opnfiles__[__MAX_OPENED_FILES__];
37 38
38 39 LCD_IF_t lcdIF0={
39 40 .init = &bsp_FSMC_init,
40 41 .writereg = &bsp_lcd0_write_reg,
41 42 .readreg = &bsp_lcd0_read_reg,
42 43 .writeGRAM = &bsp_lcd0_writeGRAM,
43 44 .readGRAM = &bsp_lcd0_readGRAM
44 45 };
45 46
46 47 LCD_t lcd0={
47 48 .interface = &lcdIF0,
48 49 .init = &ili9328init,
49 50 .paint = &ili9328paint,
50 51 .paintText = &ili9328paintText,
51 52 .paintFilRect = &ili9328paintFilRect,
52 53 .refreshenable = &ili9328refreshenable,
53 54 .width= 240,
54 55 .height = 320
55 56 };
56 57
58 terminal_t terminal0;
59
60
57 61 volatile int16_t* lcd0_CMD=(volatile int16_t*) (0x60000000 | 0x08000000);
58 62 volatile int16_t* lcd0_DATA=((volatile int16_t*)(0x60000000 | 0x08000002));
59 63
60 64 float VREF0 =(float)3.3;
61 65
62 66 int bsp_init()
63 67 {
64 68 int i=0;
65 69 for(i=0;i<32;i++)
66 70 {
67 71 __opnfiles__[i] = NULL;
68 72 }
69 73 bsp_GPIO_init();
70 74 bsp_uart_init();
71 75 bsp_iic_init();
72 76 bsp_FSMC_init();
73 lcd0.init(&lcd0);
74 printf("\r================================================================\n\r");
75 printf("================================================================\n\r");
77 bsp_GTerm_init();
78 printf("\r=====================\n\r");
79 printf( "=====================\n\r");
76 80 printf(BSP);
77 81 printf(" initialised\n\r");
78 printf("================================================================\n\r");
82 printf( "=====================\n\r");
79 83 return 1;
80 84 }
81 85
82 86 void bsp_GPIO_init()
83 87 {
84 88 gpio_t gpio1 = gpioopen(LED1);
85 89 gpio_t gpio2 = gpioopen(LED2);
86 90 gpio_t gpio3 = gpioopen(LED3);
87 91 gpiosetspeed(&gpio1,gpiohighspeed);
88 92 gpiosetspeed(&gpio2,gpiohighspeed);
89 93 gpiosetspeed(&gpio3,gpiohighspeed);
90 94 gpiosetdir(&gpio1,gpiooutdir);
91 95 gpiosetdir(&gpio2,gpiooutdir);
92 96 gpiosetdir(&gpio3,gpiooutdir);
93 97 }
94 98
95 99 void bsp_uart_init()
96 100 {
97 if(__opnfiles__[1]==NULL)
98 {
99 //uart_t* uart1 = (uart_t*)malloc(sizeof(uart_t));
100 streamdevice* fd1 = (streamdevice*)malloc(sizeof(streamdevice));
101 uart_t uart = uartopenandconfig(uart3,uartparitynone | uart8bits | uartonestop,115200,PC10,PC11,-1,-1);
102 uartmkstreamdev(uart,fd1);
103 __opnfiles__[1] = fd1;
104 }
105 else
106 {
107 uartopenandconfig(uart3,uartparitynone | uart8bits | uartonestop,115200,PC10,PC11,-1,-1);
108 }
101 //if(__opnfiles__[1]==NULL)
102 //{
103 //uart_t* uart1 = (uart_t*)malloc(sizeof(uart_t));
104 // streamdevice* fd1 = (streamdevice*)malloc(sizeof(streamdevice));
105 // uart_t uart = uartopenandconfig(uart1,uartparitynone | uart8bits | uartonestop,115200,PA9,PA10,-1,-1);
106 //uartmkstreamdev(uart,fd1);
107 //__opnfiles__[1] = fd1;
108 //}
109 //else
110 //{
111 uartopenandconfig(0,uartparitynone | uart8bits | uartonestop,115200,PA9,PA10,-1,-1);
112 //}
109 113 }
110 114
111 115 /*
112 116 D0 PD14 D1 PD15 D2 PD0 D3 PD1 D4 PE7
113 117 D5 PE8 D6 PE9 D7 PE10 D8 PE11 D9 PE12
114 118 D10 PE13 D11 PE14 D12 PE15 D13 PD8 D14 PD9
115 119 D15 PD10
116 120 A0 PF0 = RS FSMC_NE3 PG10 CS FSMC_NWE PD5 W/S
117 121 FSMC_NOE PD4 RD
118 122 */
119 123 /*-- GPIOs Configuration -----------------------------------------------------*/
120 124 /*
121 125 +-------------------+--------------------+------------------+------------------+
122 126 + SRAM pins assignment +
123 127 +-------------------+--------------------+------------------+------------------+
124 128 | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 |
125 129 | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 |
126 130 | PD4 <-> FSMC_NOE | PE3 <-> FSMC_A19 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 |
127 131 | PD5 <-> FSMC_NWE | PE4 <-> FSMC_A20 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 |
128 132 | PD8 <-> FSMC_D13 | PE7 <-> FSMC_D4 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 |
129 133 | PD9 <-> FSMC_D14 | PE8 <-> FSMC_D5 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 |
130 134 | PD10 <-> FSMC_D15 | PE9 <-> FSMC_D6 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 |
131 135 | PD11 <-> FSMC_A16 | PE10 <-> FSMC_D7 | PF13 <-> FSMC_A7 |------------------+
132 136 | PD12 <-> FSMC_A17 | PE11 <-> FSMC_D8 | PF14 <-> FSMC_A8 |
133 137 | PD13 <-> FSMC_A18 | PE12 <-> FSMC_D9 | PF15 <-> FSMC_A9 |
134 138 | PD14 <-> FSMC_D0 | PE13 <-> FSMC_D10 |------------------+
135 139 | PD15 <-> FSMC_D1 | PE14 <-> FSMC_D11 |
136 140 | | PE15 <-> FSMC_D12 |
137 141 +-------------------+--------------------+
138 142 */
139 143 int bsp_FSMC_init()
140 144 {
141 145 #define GPIOGETPORT(gpio) ((GPIO_TypeDef*)(((((uint32_t)gpio) & (uint32_t)0x0000FF00)*(uint32_t)4) + (uint32_t)GPIOA))
142 146 #define GPIOPORTNUM(gpio) (((uint32_t)(gpio) & (uint32_t)0x0000FF00)>>(uint32_t)8)
143 147
144 148 gpio_t LCD_DBxList[]={
145 149 PD0 ,PD1 ,PD4 ,PD5 ,PD8 ,PD9 ,PD10,PD11,PD12,PD13,PD14,PD15,
146 150 PE0 ,PE1 ,PE3 ,PE4 ,PE7 ,PE8 ,PE9 ,PE10,PE11,PE12,PE13,PE14,
147 151 PE15,PF0 ,PF1 ,PF2 ,PF3 ,PF4 ,PF5 ,PF12,PF13,PF14,PF15,PG0 ,
148 152 PG1 ,PG2 ,PG3 ,PG4 ,PG5 ,PG9 ,PG10
149 153 };
150 154
151 155 for(int i=0;i<43;i++)
152 156 {
153 157 gpio_t LCD_DBx = gpioopen(LCD_DBxList[i]);
154 158 LCD_DBx |= gpiohighspeed | gpioaf | gpiopushpulltype | gpionopulltype;
155 159 gpiosetconfig(&LCD_DBx);
156 160 GPIO_PinAFConfig(GPIOGETPORT(LCD_DBx), (uint8_t)(LCD_DBx & 0xF), GPIO_AF_FSMC);
157 161 }
158 162
159 163 FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;
160 164 FSMC_NORSRAMTimingInitTypeDef p;
161 165
162 166 /* Enable FSMC clock */
163 167 RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE);
164 168
165 169 /*-- FSMC Configuration ------------------------------------------------------*/
166 170 /*----------------------- SRAM Bank 3 ----------------------------------------*/
167 171 /* FSMC_Bank1_NORSRAM3 configuration */
168 172 p.FSMC_AddressSetupTime = 1;
169 173 p.FSMC_AddressHoldTime = 0;
170 174 p.FSMC_DataSetupTime = getCpuFreq()/14545450 ;// 11;
171 175 p.FSMC_BusTurnAroundDuration = 0;
172 176 p.FSMC_CLKDivision = 0;
173 177 p.FSMC_DataLatency = 0;
174 178 p.FSMC_AccessMode = FSMC_AccessMode_A;
175 179 /* Color LCD configuration ------------------------------------
176 180 LCD configured as follow:
177 181 - Data/Address MUX = Disable
178 182 - Memory Type = SRAM
179 183 - Data Width = 16bit
180 184 - Write Operation = Enable
181 185 - Extended Mode = Enable
182 186 - Asynchronous Wait = Disable */
183 187
184 188 FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM3;
185 189 FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
186 190 FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;
187 191 FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
188 192 FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
189 193 FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
190 194 FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
191 195 FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
192 196 FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
193 197 FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
194 198 FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
195 199 FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
196 200 FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
197 201 FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
198 202 FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;
199 203
200 204 FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
201 205
202 206 /* Enable FSMC NOR/SRAM Bank1 */
203 207 FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM3, ENABLE);
204 208
205 209
206 210 p.FSMC_AddressSetupTime = getCpuFreq()/50000000;
207 211 p.FSMC_AddressHoldTime = 0;
208 212 p.FSMC_DataSetupTime = getCpuFreq()/25000000;
209 213 p.FSMC_BusTurnAroundDuration = 1;
210 214 p.FSMC_CLKDivision = 0;
211 215 p.FSMC_DataLatency = 0;
212 216 p.FSMC_AccessMode = FSMC_AccessMode_A;
213 217
214 218 FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2;
215 219 FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
216 220 FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM;
217 221 FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
218 222 FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
219 223 FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
220 224 FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
221 225 FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
222 226 FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
223 227 FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
224 228 FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
225 229 FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
226 230 FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
227 231 FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
228 232 FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;
229 233
230 234 FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
231 235
232 236 /*!< Enable FSMC Bank1_SRAM2 Bank */
233 237 FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM2, ENABLE);
234
235
238 lcd0.init(&lcd0);
236 239 return 1;
237 240 }
238 241
239 242 void bsp_spi_init()
240 243 {
241 244
242 245 }
243 246
244 247
245 248 void bsp_iic_init()
246 249 {
247 250 //i2copenandconfig(i2c2,0,400000,PF0,PF1);
248 251 }
249 252
250 253 void bsp_SD_init()
251 254 {
252 255 gpio_t SDIO_DBxList[]={PC8 ,PC9 ,PC10 ,PC11 ,PC12,PD2};
253 256 for(int i=0;i<6;i++)
254 257 {
255 258 gpio_t SDIO_DBx = gpioopen(SDIO_DBxList[i]);
256 259 SDIO_DBx |= gpiohighspeed | gpioaf | gpiopushpulltype | gpionopulltype;
257 260 gpiosetconfig(&SDIO_DBx);
258 261 GPIO_PinAFConfig(GPIOGETPORT(SDIO_DBx), (uint8_t)(SDIO_DBx & 0xF), GPIO_AF_SDIO);
259 262 }
260 263 }
261 264
262 265 void vs10XXclearXCS(){}
263 266 void vs10XXsetXCS(){}
264 267 int vs10XXDREQ()
265 268 {
266 269 return 1;
267 270 }
268 271
269 272
270 273 void bsppowersdcard(char onoff) //always ON
271 274 {
272 275
273 276 }
274 277
275 278 char bspsdcardpresent()
276 279 {
277 280 return 0;
278 281 }
279 282
280 283 char bspsdcardwriteprotected()
281 284 {
282 285 return 0;
283 286 }
284 287
285 288 void bspsdcardselect(char YESNO)
286 289 {
287 290
288 291 }
289 292
290 293
291 294 void bsp_lcd0_write_reg(uint32_t reg,uint32_t data)
292 295 {
293 296 *lcd0_CMD=(uint16_t)reg;
294 297 *lcd0_DATA=(uint16_t)data;
295 298 }
296 299
297 300 uint32_t bsp_lcd0_read_reg(uint32_t reg)
298 301 {
299 302 *lcd0_CMD=(uint16_t)reg;
300 303 return (uint16_t)*lcd0_DATA;
301 304 }
302 305
303 306 void bsp_lcd0_writeGRAM(void* buffer,uint32_t count)
304 307 {
305 308 *lcd0_CMD=(uint16_t)ILI9328_REGISTER_WRITEDATATOGRAM;
306 309 uint16_t* castedBuff=(uint16_t*)buffer;
307 310 for(int i=0;i<(int)count;i++)
308 311 {
309 312 *lcd0_DATA=castedBuff[i];
310 313 }
311 314 }
312 315
313 316 void bsp_lcd0_readGRAM(void* buffer,uint32_t count)
314 317 {
315 318 *lcd0_CMD=(uint16_t)ILI9328_REGISTER_WRITEDATATOGRAM;
316 319 uint16_t* castedBuff=(uint16_t*)buffer;
317 320 castedBuff[0]=*lcd0_DATA;
318 321 for(int i=0;i<(int)count;i++)
319 322 {
320 323 castedBuff[i]=*lcd0_DATA;
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
@@ -1,93 +1,94
1 1 /*------------------------------------------------------------------------------
2 2 -- This file is a part of the libuc, microcontroler library
3 3 -- Copyright (C) 2011, Alexis Jeandet
4 4 --
5 5 -- This program is free software; you can redistribute it and/or modify
6 6 -- it under the terms of the GNU General Public License as published by
7 7 -- the Free Software Foundation; either version 3 of the License, or
8 8 -- (at your option) any later version.
9 9 --
10 10 -- This program is distributed in the hope that it will be useful,
11 11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 13 -- GNU General Public License for more details.
14 14 --
15 15 -- You should have received a copy of the GNU General Public License
16 16 -- along with this program; if not, write to the Free Software
17 17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 18 -------------------------------------------------------------------------------
19 19 -- Author : Alexis Jeandet
20 20 -- Mail : alexis.jeandet@gmail.com
21 21 -------------------------------------------------------------------------------*/
22 22 #ifndef BSP_H
23 23 #define BSP_H
24 24 #include <stm32f4xx.h>
25 25 #include <stm32f4xx_gpio.h>
26 26 #include <stm32f4xx_rcc.h>
27 27 #include <gpio.h>
28 28 #include <ili9328.h>
29 29 #include <genericLCD_Controler.h>
30 30
31 31 #define __MAX_OPENED_FILES__ 4
32 32 #define __FS_ROOT_SIZE__ 4
33 33
34 34
35 35
36 36 #define LED1 PG6
37 37 #define LED2 PG8
38 38 #define LED3 PI9
39 39 #define LED4 PC7
40 40
41 41
42 42 extern float VREF0;
43 43
44 44 extern uint32_t currentCpuFreq;
45 45 extern LCD_t lcd0;
46 46
47 47
48 48 extern int bsp_init();
49 49
50 50 extern void bsp_GPIO_init();
51 51 extern void bsp_uart_init();
52 52 extern void bsp_iic_init();
53 53 extern void bsp_spi_init();
54 54 extern void bsp_SD_init();
55 extern void bsp_GTerm_init();
55 56 extern int bsp_FSMC_init();
56 57
57 58 /* VS1053 */
58 59 extern void clearXCS();
59 60 extern void setXCS();
60 61 extern int vs10XXDREQ();
61 62
62 63 /* SD CARD */
63 64 void bsppowersdcard(char onoff);
64 65 char bspsdcardpresent();
65 66 void bspsdcardselect(char YESNO);
66 67 char bspsdcardwriteprotected();
67 68
68 69
69 70 void bsp_lcd0_write_reg(uint32_t reg,uint32_t data);
70 71 uint32_t bsp_lcd0_read_reg(uint32_t reg);
71 72 void bsp_lcd0_writeGRAM(void *buffer, uint32_t count);
72 73 void bsp_lcd0_readGRAM(void *buffer, uint32_t count);
73 74
74 75 #endif
75 76
76 77
77 78
78 79
79 80
80 81
81 82
82 83
83 84
84 85
85 86
86 87
87 88
88 89
89 90
90 91
91 92
92 93
93 94
@@ -1,17 +1,19
1 1 TEMPLATE = subdirs
2 2 CONFIG += ordered
3 3 SUBDIRS += QtTest/test.pro \
4 4 SOLAR_PSU_HELLO/hello.pro \
5 5 SDCARD \
6 6 STM32F4IT \
7 7 M4StickV2 \
8 8 lcdHello \
9 9 BeagleSynthHello \
10 lcdTerminal
10 lcdTerminal \
11 BeagleSynthHelloSupMon \
12 TEST_CMSIS_FFT
11 13
12 14
13 15
14 16
15 17
16 18
17 19
@@ -1,72 +1,71
1 1 #include <stdio.h>
2 2 #include <fat32.h>
3 3 #include <gpio.h>
4 4 #include <uart.h>
5 5 #include <stm32f4xx.h>
6 6 #include <math.h>
7 7 #include <bsp.h>
8 8 #include <i2c.h>
9 9 #include <CS43L22.h>
10 10 #include <ina226.h>
11 11 #include <fonts.h>
12 12 #include <stdlib.h>
13 13 #include <core.h>
14 14 #include <terminal.h>
15 15
16 16 extern streamdevice* __opnfiles__[__MAX_OPENED_FILES__];
17 17
18 18 #define LCD_COLOR_WHITE 0xFFFF
19 19 #define LCD_COLOR_BLACK 0x0000
20 20 #define LCD_COLOR_GREY 0xF7DE
21 21 #define LCD_COLOR_BLUE 0x001F
22 22 #define LCD_COLOR_BLUE2 0x051F
23 23 #define LCD_COLOR_RED 0xF800
24 24 #define LCD_COLOR_MAGENTA 0xF81F
25 25 #define LCD_COLOR_GREEN 0x07E0
26 26 #define LCD_COLOR_CYAN 0x7FFF
27 27 #define LCD_COLOR_YELLOW 0xFFE0
28 28
29 extern int __lineCount__;
30 extern int __columnCount__;
31 29
32 30 int main()
33 31 {
34 32 uint16_t innerbuffer[16];
35 33 uint16_t outterbuffer[16];
36 34 for(int i=0;i<16;i++)innerbuffer[i]=LCD_COLOR_BLUE;
37 35 for(int i=0;i<16;i++)outterbuffer[i]=LCD_COLOR_RED;
38 36 ili9328paintFilRect(&lcd0,0,0,240,320,LCD_COLOR_CYAN,5,LCD_COLOR_BLACK);
39 37
40 streamdevice* terminal=__opnfiles__[1];
41 terminal_init(&lcd0,&ComicSansMS_18,terminal);
42 //terminal->write(terminal,"Hi",1, 2);
43 //lcd0.paintText(&lcd0,"Hello",10,50,&ComicSansMS_18,0xFF00);
44 // __opnfiles__[1]=terminal;
45 //__opnfiles__[0]=terminal;
46 int i=1;
47 //printf("hello World %d",i);
48
49 printf("Line cnt :\n \t%d\n",__lineCount__);
50 printf("Column cnt :\n \t%d\n",__columnCount__);
38 streamdevice* fd1=__opnfiles__[1];
39 streamdevice fd2;
40 int i=0;
41 terminal_t terminal0,terminal1;
42 terminal_init(&terminal0,&lcd0,&ComicSansMS_18,fd1);
43 terminal_init(&terminal1,&lcd0,&ComicSansMS_18,&fd2);
44 terminal_setgeometry(&terminal0,5,5,terminal0.LCD->width-10,(terminal0.LCD->height/2)-10);
45 terminal_setbackgroundColor(&terminal1,0xFFFF);
46 terminal_settextColor(&terminal1,0x0000);
47 terminal_setgeometry(&terminal1,5,(terminal0.LCD->height/2)+5,terminal0.LCD->width-10,(terminal0.LCD->height/2)-10);
48 printf("Line cnt :\n \t%d\n",terminal0.lineCount);
49 printf("Column cnt :\n \t%d\n",terminal0.columnCount);
51 50 printf("CPU Freq :\n \t%dMHz\n",getCpuFreq()/1000000);
52 51 while(1)
53 52 {
54 53 i%=1000;
55 54 //terminal->write(&terminal," Hi",1, 2);
56 55 //delay_100us(1000);
57 56 gpioset(LED1);
58 57 //delay_100us(1000);
59 58 gpioclr(LED1);
60 59 }
61 60 printf("hello world\n\r");
62 61 return 0;
63 62 }
64 63
65 64
66 65
67 66
68 67
69 68
70 69
71 70
72 71
@@ -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
@@ -1,631 +1,1977
1 1 /*------------------------------------------------------------------------------
2 2 -- This file is a part of the libuc, microcontroler library
3 3 -- Copyright (C) 2012, Alexis Jeandet
4 4 --
5 5 -- This program is free software; you can redistribute it and/or modify
6 6 -- it under the terms of the GNU General Public License as published by
7 7 -- the Free Software Foundation; either version 3 of the License, or
8 8 -- (at your option) any later version.
9 9 --
10 10 -- This program is distributed in the hope that it will be useful,
11 11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 13 -- GNU General Public License for more details.
14 14 --
15 15 -- You should have received a copy of the GNU General Public License
16 16 -- along with this program; if not, write to the Free Software
17 17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 18 -------------------------------------------------------------------------------
19 19 -- Author : Alexis Jeandet
20 20 -- Mail : alexis.jeandet@gmail.com
21 21 -------------------------------------------------------------------------------*/
22 22 #include <fonts.h>
23 23
24 24 const uint8_t ComicSansMS_18_TBL[] = {
25 25 /* Character Data - Index: 32 */
26 26 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,
27 27
28 28 /* Character Data - Index: 33 */
29 29 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
30 30
31 31 /* Character Data - Index: 34 */
32 32 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x00,0x24,0x00,0x24,0x00,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
33 33
34 34 /* Character Data - Index: 35 */
35 35 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x02,0x20,0x02,0x20,0x02,0xFC,0x07,0x10,0x01,0x08,0x01,0xFE,0x03,0x88,0x00,0x44,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
36 36
37 37 /* Character Data - Index: 36 */
38 38 0x00,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0xF8,0x00,0x14,0x00,0x14,0x00,0x14,0x00,0x38,0x00,0x50,0x00,0x90,0x00,0x90,0x00,0x50,0x00,0x3C,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x00,0x00,
39 39
40 40 /* Character Data - Index: 37 */
41 41 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x01,0xA4,0x00,0xA4,0x00,0xD8,0x00,0x40,0x00,0x40,0x00,0x20,0x03,0xA0,0x04,0x90,0x04,0x10,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
42 42
43 43 /* Character Data - Index: 38 */
44 44 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0xA0,0x00,0xA0,0x00,0x60,0x00,0x70,0x00,0x48,0x01,0x44,0x01,0x84,0x00,0xC4,0x01,0x78,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
45 45
46 46 /* Character Data - Index: 39 */
47 47 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
48 48
49 49 /* Character Data - Index: 40 */
50 50 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x10,0x00,0x08,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x00,0x00,
51 51
52 52 /* Character Data - Index: 41 */
53 53 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x08,0x00,0x08,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x08,0x00,0x08,0x00,0x04,0x00,0x00,0x00,
54 54
55 55 /* Character Data - Index: 42 */
56 56 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x7E,0x00,0x18,0x00,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
57 57
58 58 /* Character Data - Index: 43 */
59 59 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x3E,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
60 60
61 61 /* Character Data - Index: 44 */
62 62 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,0x08,0x00,0x0C,0x00,0x04,0x00,0x00,0x00,0x00,0x00,
63 63
64 64 /* Character Data - Index: 45 */
65 65 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
66 66
67 67 /* Character Data - Index: 46 */
68 68 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
69 69
70 70 /* Character Data - Index: 47 */
71 71 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x10,0x00,0x18,0x00,0x08,0x00,0x04,0x00,0x04,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
72 72
73 73 /* Character Data - Index: 48 */
74 74 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x48,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x48,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
75 75
76 76 /* Character Data - Index: 49 */
77 77 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x0C,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
78 78
79 79 /* Character Data - Index: 50 */
80 80 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x84,0x00,0x80,0x00,0x80,0x00,0x40,0x00,0x30,0x00,0x08,0x00,0x04,0x00,0x04,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
81 81
82 82 /* Character Data - Index: 51 */
83 83 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x44,0x00,0x40,0x00,0x40,0x00,0x38,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x44,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
84 84
85 85 /* Character Data - Index: 52 */
86 86 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x60,0x00,0x50,0x00,0x48,0x00,0x44,0x00,0x42,0x00,0xFE,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
87 87
88 88 /* Character Data - Index: 53 */
89 89 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x00,0x04,0x00,0x04,0x00,0x74,0x00,0x8C,0x00,0x84,0x00,0x80,0x00,0x80,0x00,0x44,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
90 90
91 91 /* Character Data - Index: 54 */
92 92 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x10,0x00,0x08,0x00,0x08,0x00,0x7C,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
93 93
94 94 /* Character Data - Index: 55 */
95 95 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x40,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x10,0x00,0x10,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
96 96
97 97 /* Character Data - Index: 56 */
98 98 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x78,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
99 99
100 100 /* Character Data - Index: 57 */
101 101 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x78,0x00,0x40,0x00,0x30,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
102 102
103 103 /* Character Data - Index: 58 */
104 104 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
105 105
106 106 /* Character Data - Index: 59 */
107 107 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x06,0x00,0x02,0x00,0x00,0x00,0x00,0x00,
108 108
109 109 /* Character Data - Index: 60 */
110 110 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x08,0x00,0x04,0x00,0x06,0x00,0x08,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
111 111
112 112 /* Character Data - Index: 61 */
113 113 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
114 114
115 115 /* Character Data - Index: 62 */
116 116 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x18,0x00,0x04,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
117 117
118 118 /* Character Data - Index: 63 */
119 119 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x60,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x10,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
120 120
121 121 /* Character Data - Index: 64 */
122 122 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x0C,0x03,0x64,0x06,0x32,0x04,0xCA,0x04,0xCA,0x04,0x72,0x03,0x02,0x00,0x04,0x00,0x08,0x02,0xF0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
123 123
124 124 /* Character Data - Index: 65 */
125 125 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0xA0,0x00,0x90,0x00,0x90,0x00,0xF8,0x00,0x08,0x01,0x04,0x01,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
126 126
127 127 /* Character Data - Index: 66 */
128 128 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x24,0x00,0x7C,0x00,0x84,0x00,0x84,0x00,0x44,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
129 129
130 130 /* Character Data - Index: 67 */
131 131 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x88,0x00,0x04,0x00,0x04,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x82,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
132 132
133 133 /* Character Data - Index: 68 */
134 134 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x34,0x00,0x44,0x00,0x84,0x00,0x04,0x01,0x04,0x01,0x04,0x01,0x04,0x01,0x84,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
135 135
136 136 /* Character Data - Index: 69 */
137 137 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0xFC,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
138 138
139 139 /* Character Data - Index: 70 */
140 140 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x7C,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
141 141
142 142 /* Character Data - Index: 71 */
143 143 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x88,0x00,0x04,0x00,0x04,0x00,0x02,0x00,0xF2,0x01,0x02,0x01,0x82,0x00,0x42,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
144 144
145 145 /* Character Data - Index: 72 */
146 146 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x02,0x04,0x02,0x04,0x02,0x04,0x02,0x04,0x02,0xFC,0x03,0x04,0x02,0x04,0x02,0x04,0x02,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
147 147
148 148 /* Character Data - Index: 73 */
149 149 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
150 150
151 151 /* Character Data - Index: 74 */
152 152 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x01,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x44,0x00,0x44,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
153 153
154 154 /* Character Data - Index: 75 */
155 155 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x00,0x44,0x00,0x24,0x00,0x14,0x00,0x0C,0x00,0x0C,0x00,0x14,0x00,0x24,0x00,0x44,0x00,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
156 156
157 157 /* Character Data - Index: 76 */
158 158 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
159 159
160 160 /* Character Data - Index: 77 */
161 161 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x01,0x10,0x01,0x10,0x01,0x90,0x01,0xA8,0x02,0xA8,0x02,0xA8,0x02,0xA4,0x02,0x44,0x04,0x44,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
162 162
163 163 /* Character Data - Index: 78 */
164 164 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x06,0x02,0x0A,0x02,0x0A,0x02,0x12,0x02,0x22,0x02,0x42,0x02,0x82,0x02,0x02,0x03,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
165 165
166 166 /* Character Data - Index: 79 */
167 167 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x08,0x01,0x04,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x84,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
168 168
169 169 /* Character Data - Index: 80 */
170 170 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x3C,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
171 171
172 172 /* Character Data - Index: 81 */
173 173 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x01,0x08,0x03,0x04,0x02,0x02,0x04,0x02,0x04,0x02,0x04,0x42,0x04,0xC4,0x04,0x8C,0x03,0xF0,0x03,0x00,0x06,0x00,0x0C,0x00,0x00,0x00,0x00,
174 174
175 175 /* Character Data - Index: 82 */
176 176 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x44,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x44,0x00,0x3C,0x00,0x24,0x00,0x44,0x00,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
177 177
178 178 /* Character Data - Index: 83 */
179 179 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x01,0x08,0x00,0x04,0x00,0x04,0x00,0xF8,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x82,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
180 180
181 181 /* Character Data - Index: 84 */
182 182 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x01,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
183 183
184 184 /* Character Data - Index: 85 */
185 185 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x02,0x04,0x02,0x04,0x02,0x04,0x02,0x04,0x02,0x04,0x02,0x04,0x02,0x04,0x02,0x08,0x01,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
186 186
187 187 /* Character Data - Index: 86 */
188 188 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x02,0x01,0x82,0x00,0x84,0x00,0x44,0x00,0x44,0x00,0x28,0x00,0x28,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
189 189
190 190 /* Character Data - Index: 87 */
191 191 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x10,0x84,0x10,0x84,0x08,0x48,0x09,0x48,0x09,0x28,0x05,0x28,0x05,0x28,0x05,0x10,0x02,0x10,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
192 192
193 193 /* Character Data - Index: 88 */
194 194 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x04,0x01,0x88,0x00,0x50,0x00,0x20,0x00,0x20,0x00,0x50,0x00,0x88,0x00,0x04,0x01,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
195 195
196 196 /* Character Data - Index: 89 */
197 197 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x84,0x00,0x88,0x00,0x48,0x00,0x50,0x00,0x30,0x00,0x20,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
198 198
199 199 /* Character Data - Index: 90 */
200 200 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x01,0x80,0x00,0x40,0x00,0x20,0x00,0x10,0x00,0x10,0x00,0x08,0x00,0x04,0x00,0x02,0x00,0xFE,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
201 201
202 202 /* Character Data - Index: 91 */
203 203 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x1C,0x00,0x00,0x00,
204 204
205 205 /* Character Data - Index: 92 */
206 206 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x02,0x00,0x04,0x00,0x04,0x00,0x08,0x00,0x08,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
207 207
208 208 /* Character Data - Index: 93 */
209 209 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x1C,0x00,0x00,0x00,
210 210
211 211 /* Character Data - Index: 94 */
212 212 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x1C,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
213 213
214 214 /* Character Data - Index: 95 */
215 215 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,0xFE,0x01,0x00,0x00,0x00,0x00,
216 216
217 217 /* Character Data - Index: 96 */
218 218 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
219 219
220 220 /* Character Data - Index: 97 */
221 221 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x48,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0xB8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
222 222
223 223 /* Character Data - Index: 98 */
224 224 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x34,0x00,0x4C,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x44,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
225 225
226 226 /* Character Data - Index: 99 */
227 227 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x48,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x44,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
228 228
229 229 /* Character Data - Index: 100 */
230 230 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0xF0,0x00,0x88,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
231 231
232 232 /* Character Data - Index: 101 */
233 233 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x48,0x00,0x44,0x00,0x34,0x00,0x0C,0x00,0x44,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
234 234
235 235 /* Character Data - Index: 102 */
236 236 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x10,0x00,0x10,0x00,0x7C,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
237 237
238 238 /* Character Data - Index: 103 */
239 239 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x48,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x64,0x00,0x58,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x1C,0x00,
240 240
241 241 /* Character Data - Index: 104 */
242 242 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x34,0x00,0x4C,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
243 243
244 244 /* Character Data - Index: 105 */
245 245 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
246 246
247 247 /* Character Data - Index: 106 */
248 248 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x09,0x00,0x06,0x00,
249 249
250 250 /* Character Data - Index: 107 */
251 251 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x44,0x00,0x24,0x00,0x14,0x00,0x1C,0x00,0x24,0x00,0x24,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
252 252
253 253 /* Character Data - Index: 108 */
254 254 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
255 255
256 256 /* Character Data - Index: 109 */
257 257 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB4,0x00,0x6C,0x01,0x24,0x01,0x24,0x01,0x24,0x01,0x24,0x01,0x24,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
258 258
259 259 /* Character Data - Index: 110 */
260 260 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x4C,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
261 261
262 262 /* Character Data - Index: 111 */
263 263 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
264 264
265 265 /* Character Data - Index: 112 */
266 266 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x3C,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,
267 267
268 268 /* Character Data - Index: 113 */
269 269 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x48,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x78,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,
270 270
271 271 /* Character Data - Index: 114 */
272 272 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x2C,0x00,0x24,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
273 273
274 274 /* Character Data - Index: 115 */
275 275 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x24,0x00,0x04,0x00,0x18,0x00,0x20,0x00,0x20,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
276 276
277 277 /* Character Data - Index: 116 */
278 278 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x3E,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
279 279
280 280 /* Character Data - Index: 117 */
281 281 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
282 282
283 283 /* Character Data - Index: 118 */
284 284 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x44,0x00,0x28,0x00,0x28,0x00,0x28,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
285 285
286 286 /* Character Data - Index: 119 */
287 287 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x02,0x22,0x02,0x54,0x01,0x54,0x01,0x54,0x01,0xC8,0x00,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
288 288
289 289 /* Character Data - Index: 120 */
290 290 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x44,0x00,0x38,0x00,0x10,0x00,0x28,0x00,0x44,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
291 291
292 292 /* Character Data - Index: 121 */
293 293 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x00,0x42,0x00,0x24,0x00,0x24,0x00,0x18,0x00,0x18,0x00,0x10,0x00,0x08,0x00,0x08,0x00,0x04,0x00,0x04,0x00,
294 294
295 295 /* Character Data - Index: 122 */
296 296 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x20,0x00,0x20,0x00,0x10,0x00,0x08,0x00,0x08,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
297 297
298 298 /* Character Data - Index: 123 */
299 299 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x06,0x00,0x06,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x18,0x00,0x00,0x00,
300 300
301 301 /* Character Data - Index: 124 */
302 302 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,
303 303
304 304 /* Character Data - Index: 125 */
305 305 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x18,0x00,0x18,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x06,0x00,0x00,0x00,
306 306
307 307 /* Character Data - Index: 126 */
308 308 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8C,0x00,0xD6,0x00,0x62,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
309 309
310 310 /* Character Data - Index: 127 */
311 311 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,
312 312 };
313 313
314 314 const uint8_t ComicSansMS_24_TBL[] = {
315 315
316 316 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,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,
317 317
318 318 /* Character Data - Index: 33 */
319 319 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
320 320
321 321 /* Character Data - Index: 34 */
322 322 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCC,0x00,0x00,0xCC,0x00,0x00,0xCC,0x00,0x00,0xCC,0x00,0x00,0xCC,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,0x00,0x00,0x00,0x00,0x00,
323 323
324 324 /* Character Data - Index: 35 */
325 325 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x18,0x00,0xC0,0x18,0x00,0xC0,0x18,0x00,0xFC,0x7F,0x00,0xFC,0x7F,0x00,0x60,0x0C,0x00,0x60,0x0C,0x00,0x30,0x06,0x00,0xFE,0x3F,0x00,0xFE,0x3F,0x00,0x30,0x06,0x00,0x18,0x03,0x00,0x18,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
326 326
327 327 /* Character Data - Index: 36 */
328 328 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0xC0,0x00,0x00,0xE0,0x03,0x00,0xF8,0x07,0x00,0xDC,0x00,0x00,0xCC,0x00,0x00,0xCC,0x00,0x00,0xFC,0x03,0x00,0xF0,0x07,0x00,0xC0,0x0E,0x00,0xC0,0x0C,0x00,0xC0,0x0C,0x00,0xCC,0x0E,0x00,0xFC,0x07,0x00,0xF8,0x03,0x00,0xC0,0x00,0x00,0xC0,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
329 329
330 330 /* Character Data - Index: 37 */
331 331 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x3C,0x06,0x00,0x7E,0x03,0x00,0x66,0x03,0x00,0xFE,0x03,0x00,0xBC,0x01,0x00,0x80,0x01,0x00,0xC0,0x00,0x00,0xC0,0x00,0x00,0xE0,0x1E,0x00,0x60,0x3F,0x00,0x60,0x33,0x00,0x30,0x3F,0x00,0x30,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
332 332
333 333 /* Character Data - Index: 38 */
334 334 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0xF0,0x01,0x00,0xB0,0x01,0x00,0xB0,0x01,0x00,0xF0,0x00,0x00,0x70,0x04,0x00,0xDC,0x04,0x00,0xCC,0x04,0x00,0x86,0x07,0x00,0x06,0x07,0x00,0x0E,0x07,0x00,0xFC,0x07,0x00,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
335 335
336 336 /* Character Data - Index: 39 */
337 337 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,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,0x00,0x00,0x00,0x00,0x00,
338 338
339 339 /* Character Data - Index: 40 */
340 340 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x70,0x00,0x00,0x30,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x08,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x38,0x00,0x00,0x70,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,
341 341
342 342 /* Character Data - Index: 41 */
343 343 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x0E,0x00,0x00,0x0C,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x10,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x1C,0x00,0x00,0x0E,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,
344 344
345 345 /* Character Data - Index: 42 */
346 346 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0xFE,0x01,0x00,0xFC,0x00,0x00,0x78,0x00,0x00,0x6C,0x00,0x00,0x84,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,
347 347
348 348 /* Character Data - Index: 43 */
349 349 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,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0xFE,0x01,0x00,0xFE,0x01,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
350 350
351 351 /* Character Data - Index: 44 */
352 352 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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
353 353
354 354 /* Character Data - Index: 45 */
355 355 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,0x00,0x00,0x00,0x7C,0x00,0x00,0x7C,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,
356 356
357 357 /* Character Data - Index: 46 */
358 358 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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
359 359
360 360 /* Character Data - Index: 47 */
361 361 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0xC0,0x00,0x00,0xC0,0x00,0x00,0xC0,0x00,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
362 362
363 363 /* Character Data - Index: 48 */
364 364 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0xF8,0x01,0x00,0x8C,0x01,0x00,0x0E,0x03,0x00,0x06,0x03,0x00,0x06,0x03,0x00,0x06,0x03,0x00,0x06,0x03,0x00,0x06,0x03,0x00,0x8E,0x03,0x00,0x8C,0x01,0x00,0xFC,0x01,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
365 365
366 366 /* Character Data - Index: 49 */
367 367 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x38,0x00,0x00,0x3C,0x00,0x00,0x34,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0xFC,0x00,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
368 368
369 369 /* Character Data - Index: 50 */
370 370 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0xF8,0x03,0x00,0x9C,0x03,0x00,0x0C,0x03,0x00,0x00,0x03,0x00,0x80,0x01,0x00,0xC0,0x00,0x00,0x70,0x00,0x00,0x18,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0xFC,0x03,0x00,0xFC,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
371 371
372 372 /* Character Data - Index: 51 */
373 373 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0xFC,0x01,0x00,0x0C,0x03,0x00,0x00,0x03,0x00,0x80,0x03,0x00,0xF0,0x01,0x00,0xF0,0x00,0x00,0x80,0x03,0x00,0x00,0x03,0x00,0x04,0x03,0x00,0x8C,0x03,0x00,0xF8,0x01,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
374 374
375 375 /* Character Data - Index: 52 */
376 376 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x00,0xC0,0x01,0x00,0xE0,0x01,0x00,0xA0,0x01,0x00,0x90,0x01,0x00,0x98,0x01,0x00,0x8C,0x01,0x00,0xFE,0x07,0x00,0xFE,0x07,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
377 377
378 378 /* Character Data - Index: 53 */
379 379 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x03,0x00,0xFC,0x03,0x00,0x0C,0x00,0x00,0xFC,0x00,0x00,0xFC,0x01,0x00,0x8C,0x03,0x00,0x0C,0x03,0x00,0x00,0x03,0x00,0x00,0x03,0x00,0x00,0x03,0x00,0x8C,0x01,0x00,0xFC,0x01,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
380 380
381 381 /* Character Data - Index: 54 */
382 382 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0xE0,0x00,0x00,0x70,0x00,0x00,0x38,0x00,0x00,0x18,0x00,0x00,0xFC,0x00,0x00,0xFC,0x01,0x00,0x0C,0x03,0x00,0x0C,0x03,0x00,0x0C,0x03,0x00,0x9C,0x03,0x00,0xF8,0x01,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
383 383
384 384 /* Character Data - Index: 55 */
385 385 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x07,0x00,0xFE,0x07,0x00,0x00,0x03,0x00,0x80,0x01,0x00,0xC0,0x00,0x00,0xC0,0x00,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x10,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
386 386
387 387 /* Character Data - Index: 56 */
388 388 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0xFC,0x03,0x00,0x0E,0x03,0x00,0x06,0x03,0x00,0x8E,0x03,0x00,0xFE,0x01,0x00,0xFC,0x01,0x00,0x8E,0x03,0x00,0x06,0x03,0x00,0x06,0x03,0x00,0x8E,0x03,0x00,0xFC,0x01,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
389 389
390 390 /* Character Data - Index: 57 */
391 391 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0xFC,0x01,0x00,0x8E,0x03,0x00,0x06,0x03,0x00,0x06,0x03,0x00,0x06,0x03,0x00,0x8E,0x03,0x00,0xFC,0x03,0x00,0xF8,0x01,0x00,0x80,0x01,0x00,0xC0,0x00,0x00,0xE0,0x00,0x00,0x3C,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
392 392
393 393 /* Character Data - Index: 58 */
394 394 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,0x18,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
395 395
396 396 /* Character Data - Index: 59 */
397 397 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,0x18,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
398 398
399 399 /* Character Data - Index: 60 */
400 400 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,0x30,0x00,0x00,0x38,0x00,0x00,0x1C,0x00,0x00,0x06,0x00,0x00,0x0C,0x00,0x00,0x18,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
401 401
402 402 /* Character Data - Index: 61 */
403 403 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,0xFC,0x00,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x00,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
404 404
405 405 /* Character Data - Index: 62 */
406 406 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,0x0C,0x00,0x00,0x1C,0x00,0x00,0x30,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0x38,0x00,0x00,0x1C,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
407 407
408 408 /* Character Data - Index: 63 */
409 409 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0xFC,0x01,0x00,0x8C,0x03,0x00,0x00,0x03,0x00,0x00,0x03,0x00,0x00,0x03,0x00,0x80,0x01,0x00,0xE0,0x00,0x00,0x30,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
410 410
411 411 /* Character Data - Index: 64 */
412 412 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x0F,0x00,0xE0,0x3F,0x00,0x70,0x78,0x00,0x18,0x60,0x00,0x98,0xC3,0x00,0xCC,0xC1,0x00,0x6C,0xC6,0x00,0x6C,0xC6,0x00,0xEC,0x7F,0x00,0xCC,0x3D,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x70,0x18,0x00,0xE0,0x1F,0x00,0xC0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
413 413
414 414 /* Character Data - Index: 65 */
415 415 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x03,0x00,0x80,0x03,0x00,0xC0,0x06,0x00,0xC0,0x06,0x00,0x60,0x06,0x00,0x60,0x07,0x00,0xF0,0x07,0x00,0x78,0x06,0x00,0x18,0x0E,0x00,0x18,0x0C,0x00,0x0C,0x0C,0x00,0x0C,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
416 416
417 417 /* Character Data - Index: 66 */
418 418 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0xFC,0x01,0x00,0x8C,0x03,0x00,0x0C,0x03,0x00,0x0C,0x03,0x00,0x8C,0x03,0x00,0xFC,0x01,0x00,0xFC,0x03,0x00,0x0C,0x07,0x00,0x0C,0x06,0x00,0x8C,0x07,0x00,0xFC,0x03,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
419 419
420 420 /* Character Data - Index: 67 */
421 421 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x03,0x00,0xF0,0x03,0x00,0x38,0x03,0x00,0x18,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x06,0x00,0x00,0x06,0x00,0x00,0x06,0x00,0x00,0x06,0x03,0x00,0x8E,0x03,0x00,0xFC,0x01,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
422 422
423 423 /* Character Data - Index: 68 */
424 424 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x7C,0x00,0x00,0xEC,0x01,0x00,0x8C,0x03,0x00,0x0C,0x06,0x00,0x0C,0x0E,0x00,0x0C,0x0C,0x00,0x0C,0x0C,0x00,0x0C,0x0C,0x00,0x0C,0x0E,0x00,0x0C,0x07,0x00,0xFC,0x03,0x00,0xF8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
425 425
426 426 /* Character Data - Index: 69 */
427 427 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x07,0x00,0xFC,0x07,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0xFC,0x03,0x00,0xFC,0x03,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0xFC,0x03,0x00,0xF8,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
428 428
429 429 /* Character Data - Index: 70 */
430 430 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x03,0x00,0xFC,0x07,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0xFC,0x03,0x00,0xFC,0x03,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
431 431
432 432 /* Character Data - Index: 71 */
433 433 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x01,0x00,0xF0,0x07,0x00,0x38,0x06,0x00,0x18,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0xF6,0x0F,0x00,0xF6,0x0F,0x00,0x06,0x0C,0x00,0x06,0x06,0x00,0x0E,0x07,0x00,0xFC,0x03,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
434 434
435 435 /* Character Data - Index: 72 */
436 436 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x8C,0x1F,0x00,0xFC,0x1F,0x00,0x7C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
437 437
438 438 /* Character Data - Index: 73 */
439 439 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x01,0x00,0xFE,0x01,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0xFE,0x01,0x00,0xFE,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
440 440
441 441 /* Character Data - Index: 74 */
442 442 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x0F,0x00,0xF0,0x0F,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0x86,0x01,0x00,0x86,0x01,0x00,0xCE,0x01,0x00,0xFC,0x01,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
443 443
444 444 /* Character Data - Index: 75 */
445 445 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x04,0x00,0x0C,0x06,0x00,0x0C,0x03,0x00,0x8C,0x01,0x00,0xEC,0x00,0x00,0x7C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x6C,0x00,0x00,0xEC,0x00,0x00,0xCC,0x01,0x00,0x8C,0x07,0x00,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
446 446
447 447 /* Character Data - Index: 76 */
448 448 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0xFC,0x01,0x00,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
449 449
450 450 /* Character Data - Index: 77 */
451 451 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x08,0x00,0x70,0x1C,0x00,0x70,0x1C,0x00,0x70,0x1C,0x00,0x70,0x14,0x00,0xD8,0x34,0x00,0xD8,0x36,0x00,0xD8,0x36,0x00,0xD8,0x36,0x00,0xCC,0x36,0x00,0x8C,0x33,0x00,0x8C,0x63,0x00,0x8C,0x63,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
452 452
453 453 /* Character Data - Index: 78 */
454 454 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x10,0x00,0x1C,0x30,0x00,0x1C,0x30,0x00,0x3C,0x30,0x00,0x6C,0x30,0x00,0xCC,0x30,0x00,0x8C,0x31,0x00,0x8C,0x31,0x00,0x0C,0x33,0x00,0x0C,0x36,0x00,0x0C,0x3C,0x00,0x0C,0x38,0x00,0x0C,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
455 455
456 456 /* Character Data - Index: 79 */
457 457 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x07,0x00,0xE0,0x1F,0x00,0x70,0x38,0x00,0x38,0x30,0x00,0x18,0x30,0x00,0x0C,0x30,0x00,0x0C,0x30,0x00,0x0C,0x30,0x00,0x0C,0x18,0x00,0x1C,0x18,0x00,0x38,0x0C,0x00,0xF0,0x07,0x00,0xE0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
458 458
459 459 /* Character Data - Index: 80 */
460 460 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0xFC,0x00,0x00,0xCC,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0xCC,0x01,0x00,0xFC,0x00,0x00,0x7C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
461 461
462 462 /* Character Data - Index: 81 */
463 463 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x0F,0x00,0xE0,0x1F,0x00,0x70,0x38,0x00,0x18,0x30,0x00,0x1C,0x70,0x00,0x0C,0x60,0x00,0x0C,0x60,0x00,0x0C,0x60,0x00,0x0C,0x61,0x00,0x18,0x63,0x00,0x38,0x36,0x00,0xF0,0x3F,0x00,0xC0,0x1B,0x00,0x00,0x30,0x00,0x00,0x70,0x00,0x00,0x60,0x00,0x00,0x40,0x00,0x00,0x00,0x00,
464 464
465 465 /* Character Data - Index: 82 */
466 466 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0xFC,0x00,0x00,0xCC,0x01,0x00,0x8C,0x03,0x00,0x0C,0x03,0x00,0x0C,0x03,0x00,0x8C,0x03,0x00,0xFC,0x01,0x00,0x7C,0x00,0x00,0xEC,0x00,0x00,0x8C,0x03,0x00,0x0C,0x07,0x00,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
467 467
468 468 /* Character Data - Index: 83 */
469 469 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x03,0x00,0xF0,0x07,0x00,0x30,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0xF8,0x03,0x00,0xF0,0x07,0x00,0x00,0x0E,0x00,0x00,0x0C,0x00,0x0C,0x0C,0x00,0x1C,0x0E,0x00,0xF8,0x07,0x00,0xF0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
470 470
471 471 /* Character Data - Index: 84 */
472 472 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x0F,0x00,0xFE,0x0F,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
473 473
474 474 /* Character Data - Index: 85 */
475 475 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x0C,0x00,0x1C,0x0C,0x00,0x38,0x0E,0x00,0xF8,0x07,0x00,0xE0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
476 476
477 477 /* Character Data - Index: 86 */
478 478 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x00,0x0C,0x0C,0x00,0x0C,0x06,0x00,0x18,0x06,0x00,0x18,0x06,0x00,0x18,0x03,0x00,0x18,0x03,0x00,0x30,0x03,0x00,0xB0,0x01,0x00,0xB0,0x01,0x00,0xB0,0x01,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
479 479
480 480 /* Character Data - Index: 87 */
481 481 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x02,0x0C,0x0E,0x03,0x1C,0x0E,0x03,0x18,0x0E,0x03,0x18,0x1B,0x03,0x18,0x9B,0x01,0x30,0x9B,0x01,0xB0,0x99,0x01,0xB0,0xD9,0x00,0xA0,0xD9,0x00,0xE0,0xD8,0x00,0xE0,0x78,0x00,0xE0,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
482 482
483 483 /* Character Data - Index: 88 */
484 484 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x18,0x00,0x1C,0x18,0x00,0x38,0x0C,0x00,0x70,0x06,0x00,0x60,0x07,0x00,0xC0,0x03,0x00,0x80,0x01,0x00,0xC0,0x03,0x00,0x60,0x03,0x00,0x30,0x06,0x00,0x18,0x0C,0x00,0x1C,0x1C,0x00,0x0C,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
485 485
486 486 /* Character Data - Index: 89 */
487 487 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x00,0x06,0x06,0x00,0x0C,0x03,0x00,0x18,0x03,0x00,0x98,0x01,0x00,0xB0,0x01,0x00,0xB0,0x01,0x00,0xE0,0x00,0x00,0xC0,0x00,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
488 488
489 489 /* Character Data - Index: 90 */
490 490 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x1F,0x00,0xFC,0x1F,0x00,0x00,0x0E,0x00,0x00,0x03,0x00,0x80,0x01,0x00,0xC0,0x01,0x00,0xC0,0x00,0x00,0x60,0x00,0x00,0x30,0x00,0x00,0x18,0x00,0x00,0x0C,0x00,0x00,0xFC,0x1F,0x00,0xFC,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
491 491
492 492 /* Character Data - Index: 91 */
493 493 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0xF8,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0xF8,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,
494 494
495 495 /* Character Data - Index: 92 */
496 496 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x40,0x00,0x00,0xC0,0x00,0x00,0xC0,0x00,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0x00,0x03,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
497 497
498 498 /* Character Data - Index: 93 */
499 499 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x00,0x3E,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x3E,0x00,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,
500 500
501 501 /* Character Data - Index: 94 */
502 502 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0xE0,0x00,0x00,0x30,0x01,0x00,0x18,0x02,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
503 503
504 504 /* Character Data - Index: 95 */
505 505 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,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,0xFE,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
506 506
507 507 /* Character Data - Index: 96 */
508 508 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x18,0x00,0x00,0x30,0x00,0x00,0x30,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
509 509
510 510 /* Character Data - Index: 97 */
511 511 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,0xE0,0x01,0x00,0xF8,0x01,0x00,0x98,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0xF8,0x03,0x00,0x70,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
512 512
513 513 /* Character Data - Index: 98 */
514 514 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0xEC,0x00,0x00,0xFC,0x01,0x00,0x9C,0x03,0x00,0x0C,0x03,0x00,0x0C,0x03,0x00,0x0C,0x03,0x00,0x8C,0x03,0x00,0xFC,0x01,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
515 515
516 516 /* Character Data - Index: 99 */
517 517 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,0xF0,0x00,0x00,0xF8,0x01,0x00,0x98,0x01,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x9C,0x01,0x00,0xF8,0x01,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
518 518
519 519 /* Character Data - Index: 100 */
520 520 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x03,0x00,0x00,0x03,0x00,0x00,0x03,0x00,0x00,0x03,0x00,0xF0,0x03,0x00,0xF8,0x03,0x00,0x1C,0x03,0x00,0x0C,0x03,0x00,0x0C,0x03,0x00,0x0C,0x03,0x00,0x9C,0x03,0x00,0xF8,0x03,0x00,0xF0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
521 521
522 522 /* Character Data - Index: 101 */
523 523 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,0xF0,0x01,0x00,0xF8,0x03,0x00,0x18,0x03,0x00,0xCC,0x03,0x00,0xFC,0x00,0x00,0x3C,0x00,0x00,0x1C,0x02,0x00,0xF8,0x03,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
524 524
525 525 /* Character Data - Index: 102 */
526 526 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x01,0x00,0xE0,0x01,0x00,0x70,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0xFC,0x01,0x00,0xFC,0x01,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
527 527
528 528 /* Character Data - Index: 103 */
529 529 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,0xF0,0x00,0x00,0xF8,0x01,0x00,0x98,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0xCC,0x01,0x00,0xF8,0x01,0x00,0xB8,0x01,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0xC0,0x00,0x00,0xFC,0x00,0x00,0x7C,0x00,0x00,
530 530
531 531 /* Character Data - Index: 104 */
532 532 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0xEC,0x00,0x00,0xFC,0x01,0x00,0x9C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
533 533
534 534 /* Character Data - Index: 105 */
535 535 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
536 536
537 537 /* Character Data - Index: 106 */
538 538 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x33,0x00,0x00,0x33,0x00,0x00,0x3E,0x00,0x00,0x1C,0x00,0x00,
539 539
540 540 /* Character Data - Index: 107 */
541 541 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x03,0x00,0x8C,0x01,0x00,0xCC,0x00,0x00,0x6C,0x00,0x00,0x7C,0x00,0x00,0xDC,0x00,0x00,0x8C,0x01,0x00,0x0C,0x03,0x00,0x0C,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
542 542
543 543 /* Character Data - Index: 108 */
544 544 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
545 545
546 546 /* Character Data - Index: 109 */
547 547 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,0xCC,0x0E,0x00,0xEC,0x1F,0x00,0xBC,0x1B,0x00,0x9C,0x19,0x00,0x8C,0x19,0x00,0x8C,0x19,0x00,0x8C,0x19,0x00,0x8C,0x19,0x00,0x8C,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
548 548
549 549 /* Character Data - Index: 110 */
550 550 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,0xEC,0x00,0x00,0xFC,0x01,0x00,0x9C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
551 551
552 552 /* Character Data - Index: 111 */
553 553 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,0xF0,0x00,0x00,0xF8,0x01,0x00,0x98,0x03,0x00,0x0C,0x03,0x00,0x0C,0x03,0x00,0x0C,0x03,0x00,0x9C,0x03,0x00,0xF8,0x01,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
554 554
555 555 /* Character Data - Index: 112 */
556 556 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,0x0C,0x00,0x00,0xEC,0x00,0x00,0xFC,0x00,0x00,0x9C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0xCC,0x01,0x00,0xFC,0x00,0x00,0x7C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,
557 557
558 558 /* Character Data - Index: 113 */
559 559 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,0xE0,0x01,0x00,0xF8,0x01,0x00,0x98,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0xF8,0x01,0x00,0xF0,0x01,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0x80,0x01,0x00,
560 560
561 561 /* Character Data - Index: 114 */
562 562 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,0xEC,0x00,0x00,0xFC,0x00,0x00,0xDC,0x00,0x00,0xCC,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
563 563
564 564 /* Character Data - Index: 115 */
565 565 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,0xE0,0x00,0x00,0xF8,0x00,0x00,0xDC,0x00,0x00,0x0C,0x00,0x00,0x7C,0x00,0x00,0xF0,0x00,0x00,0xC0,0x00,0x00,0xFC,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
566 566
567 567 /* Character Data - Index: 116 */
568 568 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0xFC,0x00,0x00,0xFC,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
569 569
570 570 /* Character Data - Index: 117 */
571 571 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,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0xFC,0x01,0x00,0xF8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
572 572
573 573 /* Character Data - Index: 118 */
574 574 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,0x86,0x01,0x00,0x86,0x01,0x00,0x8C,0x00,0x00,0xCC,0x00,0x00,0xCC,0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,0x38,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
575 575
576 576 /* Character Data - Index: 119 */
577 577 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,0x8C,0x19,0x00,0x8C,0x19,0x00,0xCC,0x19,0x00,0xCC,0x0D,0x00,0xD8,0x0D,0x00,0x58,0x0D,0x00,0x78,0x0D,0x00,0x38,0x07,0x00,0x30,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
578 578
579 579 /* Character Data - Index: 120 */
580 580 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,0x06,0x03,0x00,0x8E,0x03,0x00,0xDC,0x01,0x00,0xF8,0x00,0x00,0x70,0x00,0x00,0xF8,0x00,0x00,0xDC,0x01,0x00,0x8E,0x03,0x00,0x06,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
581 581
582 582 /* Character Data - Index: 121 */
583 583 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,0x06,0x03,0x00,0x06,0x03,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0xD8,0x00,0x00,0xD8,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x10,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x08,0x00,0x00,
584 584
585 585 /* Character Data - Index: 122 */
586 586 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,0xFC,0x03,0x00,0xFC,0x03,0x00,0xC0,0x01,0x00,0xC0,0x00,0x00,0xE0,0x00,0x00,0x70,0x00,0x00,0x38,0x00,0x00,0xFC,0x03,0x00,0xFC,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
587 587
588 588 /* Character Data - Index: 123 */
589 589 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x78,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0E,0x00,0x00,0x06,0x00,0x00,0x0E,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x1C,0x00,0x00,0x78,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,
590 590
591 591 /* Character Data - Index: 124 */
592 592 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
593 593
594 594 /* Character Data - Index: 125 */
595 595 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x1E,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x38,0x00,0x00,0x70,0x00,0x00,0x38,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,
596 596
597 597 /* Character Data - Index: 126 */
598 598 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,0x30,0x00,0x00,0x78,0x04,0x00,0xC8,0x06,0x00,0xCC,0x07,0x00,0x84,0x03,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,
599 599
600 600 /* Character Data - Index: 127 */
601 601 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,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,
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 1942 sFONT ComicSansMS_18 = {
606 1943 .table = ComicSansMS_18_TBL,
607 1944 .Width = 16,
608 1945 .Height = 18,
609 1946 .bytesPerLine = 2
610 1947 };
611 1948
612 1949 sFONT ComicSansMS_24 = {
613 1950 .table = ComicSansMS_24_TBL,
614 1951 .Width = 19,
615 1952 .Height = 24,
616 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 1965 const uint8_t Monk_TBL[] = {
620 1966
621 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
622 1968 };
623 1969
624 1970 sFONT Monk_24 = {
625 1971 .table = Monk_TBL,
626 1972 .Width = 0x7F,
627 1973 .Height = 0x7E,
628 1974 .bytesPerLine = 16
629 1975 };
630 1976
631 1977
@@ -1,144 +1,186
1 1 /*------------------------------------------------------------------------------
2 2 -- This file is a part of the libuc, microcontroler library
3 3 -- Copyright (C) 2013, Alexis Jeandet
4 4 --
5 5 -- This program is free software; you can redistribute it and/or modify
6 6 -- it under the terms of the GNU General Public License as published by
7 7 -- the Free Software Foundation; either version 3 of the License, or
8 8 -- (at your option) any later version.
9 9 --
10 10 -- This program is distributed in the hope that it will be useful,
11 11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 13 -- GNU General Public License for more details.
14 14 --
15 15 -- You should have received a copy of the GNU General Public License
16 16 -- along with this program; if not, write to the Free Software
17 17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 18 -------------------------------------------------------------------------------
19 19 -- Author : Alexis Jeandet
20 20 -- Mail : alexis.jeandet@gmail.com
21 21 -------------------------------------------------------------------------------*/
22 22 #include <widget.h>
23 23 #include <terminal.h>
24 24 #include <stdint.h>
25 25 #include <stdio.h>
26 26 #include <gpio.h>
27 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;
38 int __horizontalSpace__=0;
39 int __verticalMargins__=5;
40 int __horizontalMargins__=5;
41
42 #define CHARXPOS(charwidth) ((__column__*charwidth)+__horizontalMargins__)
43 #define CHARYPOS(charheight) ((__line__*charheight)+__verticalMargins__+charheight)
33 streamdevice_ops TERMINAL_OPS=
34 {
35 .write = &terminal_write,
36 .read = &terminal_read,
37 .setpos= &terminal_setpos,
38 .close = NULL
39 };
44 40
45 #define charwidth (__font__->Width+__horizontalSpace__)
46 #define charheight (__font__->Height+__verticalSpace__)
47
48 int terminal_init(LCD_t* LCD,sFONT* font,streamdevice* strdev)
41 int terminal_init(terminal_t* terminal,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;
53 __font__=font;
54 __lineCount__ = (LCD->height - (__verticalMargins__*2))/charheight;
55 __columnCount__ = ((LCD->width - (__horizontalMargins__*2))/charwidth)-1;
45 terminal->LCD=LCD;
46 terminal->font=font;
47 terminal->line = 0;
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__;
58 strdev->write = (write_t)&terminal_write;
59 strdev->read = (read_t)&terminal_read;
60 strdev->setpos = (setpos_t)&terminal_setpos;
57 strdev->_stream = (UHANDLE)terminal;
58 strdev->ops = &TERMINAL_OPS;
61 59 strdev->streamPt = 0;
62 __line__ = 0;
63 __column__ = 0;
64 __LCD__->paintFilRect(__LCD__,CHARXPOS(charwidth),CHARYPOS(charheight)-charheight,charwidth,charheight,0x0000,0,0x0000);
60 terminal_clear(terminal);
61 terminal->LCD->paintFilRect(terminal->LCD,CHARXPOS(terminal, charw),CHARYPOS(terminal, charh)-charh,charw,charh,terminal->backgroundColor,0,terminal->backgroundColor);
65 62 return 1;
66 63 }
67 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;
73 if(__column__>__columnCount__)
74 {
75 __line__ += (__column__)/__columnCount__;
76 __LCD__->paintFilRect(__LCD__,CHARXPOS(charwidth),CHARYPOS(charheight)-charheight,charwidth*(__columnCount__-__column__),charheight,0x0000,0,0x0000);
77 __line__ = __line__ % __lineCount__;
78 __column__ = __column__ % __columnCount__;
79 }
80 __LCD__->paintFilRect(__LCD__,CHARXPOS(charwidth),CHARYPOS(charheight)-charheight,charwidth,charheight,0x0000,0,0x0000);
69 int charw=terminal->font->Width + terminal->horizontalSpace;
70 int charh=terminal->font->Height + terminal->verticalSpace;
71 if(terminal->LCD->height<(Ypos+height))
72 return;
73 if(terminal->LCD->width<(Xpos+width))
74 return;
75 terminal->Xpos = Xpos;
76 terminal->Ypos = Ypos;
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 127 int l=0;
87 128 char buffer[2]=" ";
88 129 while(l<n)
89 130 {
90 131
91 132 buffer[0]=data[l];
92 133 if(buffer[0]=='\n')
93 134 {
94 __line__= (__line__+1) % __lineCount__;
95 __column__ = 0;
135 terminal->line= (terminal->line+1) % terminal->lineCount;
136 terminal->column = 0;
96 137 }else {
97 138 if(buffer[0]=='\t')
98 139 {
99 __line__ += (__column__+3) / __columnCount__;
100 __column__= (__column__+3) % __columnCount__;
101 }else {
102 __LCD__->paintFilRect(__LCD__,CHARXPOS(charwidth),CHARYPOS(charheight)-charheight,charwidth,charheight,0x0000,0,0x0000);
103 __LCD__->paintText(__LCD__,buffer,CHARXPOS(charwidth),CHARYPOS(charheight),__font__,0xFFFF);
104 terminal_movecursor(1);
105 }
140 for(int i=0;i<1;i++)terminal_movecursor(terminal,1);
141 }else
142 if(terminal->column==0)terminal_clearCurentLine(terminal);
143 if(buffer[0]!='\r'){
144 terminal->LCD->paintFilRect(terminal->LCD,CHARXPOS(terminal,charw),CHARYPOS(terminal, charh)-charh,charw,charh,terminal->backgroundColor,0,terminal->backgroundColor);
145 terminal->LCD->paintText(terminal->LCD,buffer,CHARXPOS(terminal,charw),CHARYPOS(terminal, charh),terminal->font,terminal->textColor);
146 terminal_movecursor(terminal,1);
147 }
106 148 }
107 149 l++;
108 150 }
109 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 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 166 return 1;
125 167 }
126 168
127 int terminal_close(streamdeviceptr device)
169 int terminal_close( streamdevice* device)
128 170 {
129 171 return 1;
130 172 }
131 173
132 174
133 175
134 176
135 177
136 178
137 179
138 180
139 181
140 182
141 183
142 184
143 185
144 186
@@ -1,22 +1,23
1 1 TEMPLATE = lib
2 2 OBJECTS_DIR = obj
3 3 TARGET = terminal
4 4
5 5 SOURCES += \
6 6 Terminal.c
7 7
8 8
9 9 INCLUDEPATH += ../../../../includes \
10 10 ../../../CPU/STM32F4xx_StdPeriph_Driver/inc \
11 11 ../../../CPU/CMSIS/Include \
12 12 ../../../../includes/GRAPHIC/CONTROLERS \
13 13 ../../../../includes/GRAPHIC/GUI/FONTS \
14 14 ../../../../includes/GRAPHIC/GUI/Widgets
15 15
16
16 HEADERS += \
17 ../../../../../includes/GRAPHIC/GUI/Widgets/terminal.h
17 18
18 19 UCMODEL=stm32f4
19 20
20 21 target.path = $$[QT_INSTALL_LIBS]/$$UCMODEL
21 22 INSTALLS += target
22 23
@@ -1,13 +1,14
1 1 TEMPLATE = subdirs
2 2
3 3 SUBDIRS += FILE_SYSTEM \
4 4 AUDIO \
5 5 POWER \
6 GRAPHIC
6 GRAPHIC \
7 Threading
7 8
8 9
9 10
10 11
11 12
12 13
13 14
@@ -1,57 +1,58
1 1 /*------------------------------------------------------------------------------
2 2 -- This file is a part of the libuc, microcontroler library
3 3 -- Copyright (C) 2012, Alexis Jeandet
4 4 --
5 5 -- This program is free software; you can redistribute it and/or modify
6 6 -- it under the terms of the GNU General Public License as published by
7 7 -- the Free Software Foundation; either version 3 of the License, or
8 8 -- (at your option) any later version.
9 9 --
10 10 -- This program is distributed in the hope that it will be useful,
11 11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 13 -- GNU General Public License for more details.
14 14 --
15 15 -- You should have received a copy of the GNU General Public License
16 16 -- along with this program; if not, write to the Free Software
17 17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 18 -------------------------------------------------------------------------------
19 19 -- Author : Alexis Jeandet
20 20 -- Mail : alexis.jeandet@gmail.com
21 21 -------------------------------------------------------------------------------*/
22 22 #ifndef FONTS_H
23 23 #define FONTS_H
24 24
25 25 #ifdef __cplusplus
26 26 extern "C" {
27 27 #endif
28 28
29 29 #include <stdint.h>
30 30
31 31
32 32 typedef struct _tFont
33 33 {
34 34 const uint8_t *table;
35 35 uint16_t Width;
36 36 uint16_t Height;
37 37 uint8_t bytesPerLine;
38 38
39 39 } sFONT;
40 40
41 41 extern sFONT ComicSansMS_24;
42 42 extern sFONT ComicSansMS_18;
43 extern sFONT ComicSansMS_8;
43 44 extern sFONT Monk_24;
44 45
45 46 #ifdef __cplusplus
46 47 }
47 48 #endif
48 49
49 50 #endif
50 51
51 52
52 53
53 54
54 55
55 56
56 57
57 58
@@ -1,45 +1,68
1 1 /*------------------------------------------------------------------------------
2 2 -- This file is a part of the libuc, microcontroler library
3 3 -- Copyright (C) 2012, Alexis Jeandet
4 4 --
5 5 -- This program is free software; you can redistribute it and/or modify
6 6 -- it under the terms of the GNU General Public License as published by
7 7 -- the Free Software Foundation; either version 3 of the License, or
8 8 -- (at your option) any later version.
9 9 --
10 10 -- This program is distributed in the hope that it will be useful,
11 11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 13 -- GNU General Public License for more details.
14 14 --
15 15 -- You should have received a copy of the GNU General Public License
16 16 -- along with this program; if not, write to the Free Software
17 17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 18 -------------------------------------------------------------------------------
19 19 -- Author : Alexis Jeandet
20 20 -- Mail : alexis.jeandet@gmail.com
21 21 -------------------------------------------------------------------------------*/
22 22 #ifndef TERMINAL_H
23 23 #define TERMINAL_H
24 24 #include <stdint.h>
25 25 #include <widget.h>
26 26 #include <streamdevices.h>
27 27 #include <genericLCD_Controler.h>
28 28 #include <fonts.h>
29 29
30 int terminal_init(LCD_t* LCD,sFONT* font,streamdevice* strdev);
31 void terminal_movecursor(int n);
32 int terminal_write(streamdeviceptr device,void* data,int size, int n);
33 int terminal_read(streamdeviceptr device,void* data,int size, int n);
34 int terminal_setpos(streamdeviceptr device,int pos);
35 int terminal_close(streamdeviceptr device);
30 typedef struct terminal_t
31 {
32 uint16_t line;
33 uint16_t column;
34 uint16_t lineCount;
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
39 62
40 63
41 64
42 65
43 66
44 67
45 68 #endif
@@ -1,60 +1,72
1 1 /*------------------------------------------------------------------------------
2 2 -- This file is a part of the libuc, microcontroler library
3 3 -- Copyright (C) 2012, Alexis Jeandet
4 4 --
5 5 -- This program is free software; you can redistribute it and/or modify
6 6 -- it under the terms of the GNU General Public License as published by
7 7 -- the Free Software Foundation; either version 3 of the License, or
8 8 -- (at your option) any later version.
9 9 --
10 10 -- This program is distributed in the hope that it will be useful,
11 11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 13 -- GNU General Public License for more details.
14 14 --
15 15 -- You should have received a copy of the GNU General Public License
16 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 19 -- Author : Alexis Jeandet
20 20 -- Mail : alexis.jeandet@gmail.com
21 21 -------------------------------------------------------------------------------*/
22 22 #ifndef STREAMDEVICES_H
23 23 #define STREAMDEVICES_H
24 24 #include <uhandle.h>
25 25 #include <stdint.h>
26 26
27 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 49 typedef int (*write_t)(streamdeviceptr device,void* data,int size, int n);
30 50 typedef int (*read_t)(streamdeviceptr device,void* data,int size, int n);
31 51 typedef int (*setpos_t)(streamdeviceptr device,int pos);
32 52 typedef int (*close_t)(streamdeviceptr device);
33 53
34 typedef volatile struct streamdevice
35 {
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;
54
55
44 56
45 57 #endif
46 58
47 59
48 60
49 61
50 62
51 63
52 64
53 65
54 66
55 67
56 68
57 69
58 70
59 71
60 72
@@ -1,375 +1,375
1 1 /*------------------------------------------------------------------------------
2 2 -- This file is a part of the libuc, microcontroler library
3 3 -- Copyright (C) 2011, Alexis Jeandet
4 4 --
5 5 -- This program is free software; you can redistribute it and/or modify
6 6 -- it under the terms of the GNU General Public License as published by
7 7 -- the Free Software Foundation; either version 3 of the License, or
8 8 -- (at your option) any later version.
9 9 --
10 10 -- This program is distributed in the hope that it will be useful,
11 11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 13 -- GNU General Public License for more details.
14 14 --
15 15 -- You should have received a copy of the GNU General Public License
16 16 -- along with this program; if not, write to the Free Software
17 17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 18 -------------------------------------------------------------------------------
19 19 -- Author : Alexis Jeandet
20 20 -- Mail : alexis.jeandet@gmail.com
21 21 -------------------------------------------------------------------------------*/
22 22 #include <core.h>
23 23 #include <stm32f4xx_rcc.h>
24 24 #include <stdint.h>
25 25 #include <stdlib.h>
26 26 #include <stdio.h>
27 27 #include <core_cm4.h>
28 28
29 29 extern uint32_t OSC0;
30 30 extern uint32_t INTOSC;
31 31 extern uint32_t RTCOSC;
32 32
33 33 volatile uint32_t tickCounter=0;
34 34
35 35
36 36 void SysTick_Handler(void)
37 37 {
38 38 tickCounter+=1;
39 39 }
40 40
41 41 void delay_us(uint32_t value)
42 42 {
43 43 extern uint32_t currentCpuFreq;
44 44 if(value)
45 45 {
46 46 uint32_t tickperus=currentCpuFreq/(1000*10);
47 47 uint32_t tickCounterSnap = SysTick->VAL+((value%100)*tickperus);
48 48 uint32_t targetVal=tickCounterSnap +(value/100);
49 49 if(targetVal < tickCounterSnap)
50 50 {
51 51 while(tickCounter > targetVal);
52 52 }
53 53 while((tickCounter < targetVal) | (SysTick->VAL<tickCounterSnap));
54 54 }
55 55 }
56 56
57 57 void delay_100us(uint32_t value)
58 58 {
59 59 if(value)
60 60 {
61 61 uint32_t tickCounterSnap = tickCounter;
62 62 uint32_t SysTickSnap = SysTick->VAL;
63 63 uint32_t targetVal=tickCounterSnap +(value);
64 64 if(targetVal < tickCounterSnap)
65 65 {
66 66 while(tickCounter > targetVal);
67 67 }
68 68 while((tickCounter < targetVal) | (SysTick->VAL<SysTickSnap));
69 69 }
70 70 }
71 71
72 72 uint32_t getAPB1Freq()
73 73 {
74 74 RCC_ClocksTypeDef RCC_ClocksStatus;
75 75 RCC_GetClocksFreq(&RCC_ClocksStatus);
76 76 return RCC_ClocksStatus.PCLK1_Frequency;
77 77 }
78 78
79 79 uint32_t getAPB2Freq()
80 80 {
81 81 RCC_ClocksTypeDef RCC_ClocksStatus;
82 82 RCC_GetClocksFreq(&RCC_ClocksStatus);
83 83 return RCC_ClocksStatus.PCLK2_Frequency;
84 84 }
85 85
86 86
87 87 uint32_t getCpuFreq()
88 88 {
89 89 uint32_t cpufreq = OSC0;
90 90 uint32_t PLLN,PLLM,PLLP;
91 91
92 92 if((RCC->CFGR & 0xC) == 8) //PLL used as sys clk
93 93 {
94 94 uint32_t pllinput=INTOSC;
95 95 if((RCC->PLLCFGR & (1<<22)) == (1<<22))
96 96 {
97 97 pllinput=OSC0;
98 98 }
99 99 PLLN = (RCC->PLLCFGR>>6) & 0x1FF;
100 100 PLLM = RCC->PLLCFGR & 0x3F;
101 101 PLLP = 1<<(((RCC->PLLCFGR>>16) & 3 )+1);
102 102 cpufreq = (pllinput * PLLN )/(PLLM*PLLP);
103 103 }
104 104 else if((RCC->CFGR & 0xC) == 0) //HSI used as sys clk
105 105 {
106 106 cpufreq=INTOSC;
107 107 }
108 108 if((RCC->CFGR & (1<<7))==1<<7)
109 109 {
110 110 return cpufreq>>((RCC->CFGR & (7<<4))>>4);
111 111 }
112 112 return cpufreq;
113 113 }
114 114
115 115 void reset_AHB1()
116 116 {
117 117 RCC->AHB1RSTR = -1;
118 118 RCC->AHB1RSTR = 0;
119 119 }
120 120
121 121 void reset_AHB2()
122 122 {
123 123 RCC->AHB2RSTR = -1;
124 124 RCC->AHB2RSTR = 0;
125 125 }
126 126
127 127 void reset_APB1()
128 128 {
129 129 RCC->APB1RSTR = -1;
130 130 RCC->APB1RSTR = 0;
131 131 }
132 132
133 133 void reset_APB2()
134 134 {
135 135 RCC->APB2RSTR = -1;
136 136 RCC->APB2RSTR = 0;
137 137 }
138 138
139 139
140 140
141 141 /*
142 142 | 2.7->3.6V
143 143 -------------------------
144 144 0WS | 0<HCLK<=30
145 145 1WS | 30<HCLK<=60
146 146 2WS | 60<HCLK<=90
147 147 3WS | 90<HCLK<=120
148 148 4WS | 120<HCLK<=150
149 149 5WS | 150<HCLK<=168
150 150
151 151 f(VCO clock) = f(PLL clock input) Γ— (PLLN / PLLM) [1]
152 152 64MHz <= f(VCO clock) <= 432MHz [2]
153 153
154 154 f(VCO clock input) must be between 1MHz and 2MHz and as close to 2MHz as possible!! [3]
155 155
156 156 f(PLL general clock output) = f(VCO clock) / PLLP [4]
157 157
158 158 CPU<168MHz AHB1<168MHz AHB2<168MHz APB1<42MHz APB2<84MHz [5]
159 159
160 160 ! 63<=PLLN<=432 [6]
161 161 ! 2<=PLLM<=63 [7]
162 162 ! PLLP=2,4,6,8 [8]
163 163 4<=PLLM*PLLP<=504
164 164
165 165 F= f(PLL clock input) * A/B with
166 166 63<=A<=432
167 167 4<=B<=504
168 168
169 169 */
170 170
171 171
172 172 int optimizePLLcfg(uint32_t freq, uint32_t srcfreq,uint32_t PLLM,uint32_t* PLLP, uint32_t* PLLN,uint8_t* AHBPRindx)
173 173 {
174 174 uint32_t AHBPRtbl[9]={1,2,4,8,16,64,128,256,512};
175 175 uint32_t AHBPR=0,AHBPR_r=0,PLLN_r=0,PLLP_r=0;
176 176 uint32_t Fplli=0;
177 177 int32_t f_error=100000000;
178 178 int32_t f_errornw=100000000;
179 179 Fplli = srcfreq / PLLM;
180 180 //not efficient but should find the best parameters
181 181 for((*AHBPRindx)=0;(*AHBPRindx)<9;(*AHBPRindx)++) //lowest priority
182 182 {
183 183 AHBPR = AHBPRtbl[(*AHBPRindx)];
184 184 for(*PLLP=2;*PLLP<9;*PLLP+=2)
185 185 {
186 186 *PLLN = (freq*(*PLLP)*AHBPR)/Fplli;
187 187 if(((*PLLN)>62) && ((*PLLN)<433) && ((Fplli * (*PLLN)) < 433000000))
188 188 {
189 189 f_errornw = abs((int32_t)((int32_t)((Fplli*(*PLLN))/((*PLLP)*AHBPR))-freq));
190 190 if( ( (f_error)>(f_errornw) ) || ( (*AHBPRindx==0)&&(*PLLP==2)&&(*PLLN==63) ) )
191 191 {
192 192 f_error=f_errornw;
193 193 PLLN_r = *PLLN;
194 194 PLLP_r = *PLLP;
195 195 AHBPR_r=*AHBPRindx;
196 196 if(f_error==0)
197 197 {
198 198 *PLLN = PLLN_r;
199 199 *PLLP = PLLP_r;
200 200 *AHBPRindx = AHBPR_r;
201 201 return 1;
202 202 }
203 203 }
204 204 }
205 205 }
206 206 }
207 207 *PLLN = PLLN_r;
208 208 *PLLP = PLLP_r;
209 209 *AHBPRindx = AHBPR_r;
210 210 return 1;
211 211 }
212 212
213 213
214 214 int setPll(uint32_t freq)
215 215 {
216 216 extern uint32_t OSC0;
217 217 extern uint32_t INTOSC;
218 218 uint32_t srcfreq = INTOSC;
219 219 uint8_t AHBPRindx;
220 220 uint32_t AHBPRtbl[9]={1,2,4,8,16,64,128,256,512};
221 221 uint32_t PLLN=0,PLLM=0,PLLP=0,AHBPR=0;
222 222 uint32_t Fplli=0;
223 223 if((RCC->PLLCFGR & (1<<22))==(1<<22))
224 224 {
225 225 srcfreq = OSC0;
226 226 }
227 227 PLLM = srcfreq / 1500000; // [3]
228 228 Fplli = srcfreq / PLLM;
229 229 optimizePLLcfg(freq,srcfreq,PLLM,&PLLP,&PLLN,&AHBPRindx);
230 230 srcfreq = (Fplli*PLLN)/(PLLP*AHBPRtbl[AHBPRindx]); //Put real clk freq in srcfreq for return value
231 231 //now switch to HSIs
232 232 if((RCC->CR & 1)==0)RCC->CR |= 1; //turn ON HSI
233 233 while((RCC->CR & 2)!=2); //wait for HSI Ready
234 234 RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
235 235 RCC->CFGR |= RCC_CFGR_SW_HSI; //set HSI as main clk
236 236 while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_HSI);
237 237 RCC->CR &= ~(1<<24); //Turn OFF PLL
238 238 RCC->PLLCFGR &= ~0x37FFF; //clear PLLP PLLM PLLN
239 239 RCC->PLLCFGR |= PLLM + (PLLN<<6) + (((PLLP>>1) -1)<<16);
240 240 RCC->CR |= RCC_CR_PLLON; //Turn ON PLL
241 241 while((RCC->CR & (1<<25))!=(1<<25)); //wait for PLL Ready
242 242 if(AHBPRindx!=0)AHBPRindx|=0x8;
243 243 RCC->CFGR &= ~(0xF<<4);
244 244 RCC->CFGR |= (uint32_t)(AHBPRindx<<4);
245 245 AHBPR=0;
246 246 while((srcfreq>>AHBPR)>42000000)AHBPR++; //[5] //Thune APB1 prescaler to keep APB1 CLK below 42MHz
247 247 if(AHBPR!=0)
248 248 {
249 249 AHBPR-=1;
250 250 AHBPR|=0x4;
251 251 }
252 252 RCC->CFGR &= ~(0x7<<10);
253 253 RCC->CFGR |= (uint32_t)(AHBPR<<10);
254 254 AHBPR=0;
255 255 while((srcfreq>>AHBPR)>84000000)AHBPR++; //[5] //Thune APB2 prescaler to keep APB2 CLK below 42MHz
256 256 if(AHBPR!=0)
257 257 {
258 258 AHBPR-=1;
259 259 AHBPR|=0x4;
260 260 }
261 261 RCC->CFGR &= ~(0x7<<13);
262 262 RCC->CFGR |= (uint32_t)(AHBPR<<13);
263 263 FLASH->ACR |= FLASH_ACR_LATENCY_7WS;
264 264 RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));//Switch to PLL as main clk source
265 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 267 while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL);
268 268 if(srcfreq>150000000)
269 269 {
270 270 FLASH->ACR &= (~7)|FLASH_ACR_LATENCY_5WS;
271 271 }
272 272 if((srcfreq<150000000) && (srcfreq>=120000000))
273 273 {
274 274 FLASH->ACR &= (~7)|FLASH_ACR_LATENCY_4WS;
275 275 }
276 276 if((srcfreq<120000000) && (srcfreq>=90000000))
277 277 {
278 278 FLASH->ACR &= (~7)|FLASH_ACR_LATENCY_3WS;
279 279 }
280 280 if((srcfreq<90000000) && (srcfreq>=60000000))
281 281 {
282 282 FLASH->ACR &= (~7)|FLASH_ACR_LATENCY_2WS;
283 283 }
284 284 if((srcfreq<60000000) && (srcfreq>=30000000))
285 285 {
286 286 FLASH->ACR &= (~7)|FLASH_ACR_LATENCY_1WS;
287 287 }
288 288 if(srcfreq<30000000)
289 289 {
290 290 FLASH->ACR &= (~7)|FLASH_ACR_LATENCY_0WS;
291 291 }
292 292 return srcfreq;
293 293 }
294 294
295 295 void configureSysTick()
296 296 {
297 297 extern uint32_t currentCpuFreq;
298 298 uint32_t us=currentCpuFreq/(1000*10);
299 299 SysTick_Config(us);
300 300 }
301 301
302 302 int setCpuFreq(uint32_t freq)
303 303 {
304 304 extern uint32_t OSC0;
305 305 extern uint32_t INTOSC;
306 306 uint8_t i=0;
307 307 uint32_t curentFeq = getCpuFreq();
308 308 if(curentFeq==freq)return curentFeq;
309 309 if((freq>2000000) && (freq<=250000000)) //be carefull with 250MHz!!!
310 310 {
311 311 if((RCC->CFGR & 0xC) == 8) //PLL used as sys clk
312 312 {
313 313 return setPll(freq);
314 314 }
315 315 else if((RCC->CFGR & 0xC) == 0) //HSI used as sys clk
316 316 {
317 317 if((INTOSC%freq)==0) //now check if we can directly divide HSI
318 318 {
319 319 if(freq==INTOSC)
320 320 {
321 321 RCC->CFGR &= ~(0xF<<4);
322 322 return freq;
323 323 }
324 324 for(i=1;i<8;i++)
325 325 {
326 326 if((freq<<i)==INTOSC)
327 327 {
328 328 RCC->CFGR &= ~(0xF<<4);
329 329 RCC->CFGR |= ((0x8|i)<<4);
330 330 return freq;
331 331 }
332 332 }
333 333 }
334 334 else
335 335 return setPll(freq);
336 336 }
337 337 else //HSE used as sys clk
338 338 {
339 339 if((OSC0%freq)==0) //now check if we can directly divide HSI
340 340 {
341 341 if(freq==OSC0)
342 342 {
343 343 RCC->CFGR &= ~(0xF<<4);
344 344 return freq;
345 345 }
346 346 for(i=1;i<8;i++)
347 347 {
348 348 if((freq<<i)==OSC0)
349 349 {
350 350 RCC->CFGR &= ~(0xF<<4);
351 351 RCC->CFGR |= ((0x8|i)<<4);
352 352 return freq;
353 353 }
354 354 }
355 355 }
356 356 else
357 357 return setPll(freq);
358 358 }
359 359 }
360 360 return 0;
361 361 }
362 362
363 363
364 364 void enable_FPU()
365 365 {
366 366 SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */
367 367 __asm__("dsb");
368 368 __asm__("isb");
369 369 }
370 370
371 371
372 372
373 373
374 374
375 375
@@ -1,261 +1,261
1 1 #include <stdlib.h>
2 2 #include <errno.h>
3 3 #include <string.h>
4 4 #include <sys/stat.h>
5 5 #include <sys/types.h>
6 6 #include <sys/times.h>
7 7 #include <streamdevices.h>
8 8 #include <string.h>
9 9 #include <stdio.h>
10 10 #include <gpio.h>
11 11 #include <uart.h>
12 12 #include <stdint.h>
13 13
14 14 #undef errno
15 15
16 16
17 17
18 18 #ifdef __cplusplus
19 19 extern "C" {
20 20 #endif
21 21 extern int errno;
22 22 extern int32_t __max_opened_files__;
23 23 extern streamdevice* __opnfiles__[];
24 24 extern int32_t* __fs_root__;
25 25 extern int32_t __fs_root_size__;
26 26
27 27 char *__env[1] = { 0 };
28 28 char **environ = __env;
29 29
30 30 int _exit()
31 31 {
32 32 while(1);
33 33 }
34 34
35 35 int _close(int file)
36 36 {
37 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 41 return 0;
42 42 }
43 43
44 44
45 45 int _write(int file, char *ptr, int len)
46 46 {
47 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 51 return 0;
52 52 }
53 53
54 54 int _execve(char *name, char **argv, char **env) {
55 55 errno = ENOMEM;
56 56 return -1;
57 57 }
58 58
59 59
60 60 int _fork(void) {
61 61 errno = EAGAIN;
62 62 return -1;
63 63 }
64 64
65 65 int _fstat(int file, struct stat *st) {
66 66 st->st_mode = S_IFCHR;
67 67 return 0;
68 68 }
69 69
70 70
71 71 int _getpid(void) {
72 72 return 1;
73 73 }
74 74
75 75
76 76 int _isatty(int file) {
77 77 return 1;
78 78 }
79 79
80 80
81 81 int _kill(int pid, int sig) {
82 82 errno = EINVAL;
83 83 return -1;
84 84 }
85 85
86 86
87 87 int _link(char *old, char *_new) {
88 88 errno = EMLINK;
89 89 return -1;
90 90 }
91 91
92 92
93 93 int _lseek(int file, int ptr, int dir) {
94 94 return 0;
95 95 }
96 96
97 97 #include <gpio.h>
98 98
99 99 int _open(const char *name, int flags, int mode)
100 100 {
101 101 if(!strncmp("UART", name, 4) && ((name[4] & 0x30)==0x30))
102 102 {
103 103 //uart_t* uart1 = malloc(sizeof(uart_t));
104 104 streamdevice* fd1 = malloc(sizeof(streamdevice));
105 105 uart_t uart=uartopen((name[4] & 0xF)-1);
106 106 if(uart!=-1);
107 107 {
108 108 uartmkstreamdev(uart,fd1);
109 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 111 if(i!=__max_opened_files__)
112 112 {
113 113 __opnfiles__[i] = fd1;
114 114 return i;
115 115 }
116 116 else printf("Too much files opened\n\r");
117 117 }
118 118 }
119 119 return -1;
120 120 }
121 121
122 122 int _read(int file, char *ptr, int len) {
123 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 127 return 0;
128 128 }
129 129
130 130
131 131
132 132 caddr_t _sbrk(int incr) {
133 133 register char * stack_ptr __asm__ ("sp");
134 134 extern char _end; /* Defined by the linker */
135 135 static char *heap_end;
136 136 char *prev_heap_end;
137 137 if (heap_end == 0) {
138 138 heap_end = &_end;
139 139 }
140 140 prev_heap_end = heap_end;
141 141 if (heap_end + incr > stack_ptr) {
142 142 _write (1, "Heap and stack collision\n", 25);
143 143 abort ();
144 144 }
145 145 heap_end += incr;
146 146 return (caddr_t) prev_heap_end;
147 147 }
148 148
149 149
150 150
151 151 int _stat(char *file, struct stat *st) {
152 152 st->st_mode = S_IFCHR;
153 153 return 0;
154 154 }
155 155
156 156
157 157 int _times(struct tms *buf) {
158 158 return -1;
159 159 }
160 160
161 161
162 162 int _unlink(char *name) {
163 163 errno = ENOENT;
164 164 return -1;
165 165 }
166 166
167 167 int _wait(int *status) {
168 168 errno = ECHILD;
169 169 return -1;
170 170 }
171 171
172 172
173 173 int _read_r (struct _reent *r, int file, char * ptr, int len)
174 174 {
175 175 r = r;
176 176 file = file;
177 177 ptr = ptr;
178 178 len = len;
179 179 _read(file,ptr,len);
180 180 errno = EINVAL;
181 181 return -1;
182 182 }
183 183
184 184 /***************************************************************************/
185 185
186 186 int _lseek_r (struct _reent *r, int file, int ptr, int dir)
187 187 {
188 188 r = r;
189 189 file = file;
190 190 ptr = ptr;
191 191 dir = dir;
192 192
193 193 return 0;
194 194 }
195 195
196 196 /***************************************************************************/
197 197
198 198 int _write_r (struct _reent *r, int file, char * ptr, int len)
199 199 {
200 200 return _write(file, ptr, len);
201 201 }
202 202
203 203 /***************************************************************************/
204 204
205 205 int _close_r (struct _reent *r, int file)
206 206 {
207 207 return 0;
208 208 }
209 209
210 210 /***************************************************************************/
211 211
212 212 caddr_t _sbrk_r (struct _reent *r, int incr)
213 213 {
214 214 register char * stack_ptr __asm__ ("sp");
215 215 extern char _end; /* Defined by the linker */
216 216 static char *heap_end;
217 217 char *prev_heap_end;
218 218 if (heap_end == 0) {
219 219 heap_end = &_end;
220 220 }
221 221 prev_heap_end = heap_end;
222 222 if (heap_end + incr > stack_ptr) {
223 223 _write (1, "Heap and stack collision\n", 25);
224 224 abort ();
225 225 }
226 226 heap_end += incr;
227 227 return (caddr_t) prev_heap_end;
228 228 }
229 229
230 230 /***************************************************************************/
231 231
232 232 int _fstat_r (struct _reent *r, int file, struct stat * st)
233 233 {
234 234 r = r;
235 235 file = file;
236 236
237 237 memset (st, 0, sizeof (* st));
238 238 st->st_mode = S_IFCHR;
239 239 return 0;
240 240 }
241 241
242 242 /***************************************************************************/
243 243 int _open_r(struct _reent *r,const char *name, int flags, int mode)
244 244 {
245 245 return _open(name, flags, mode);
246 246 }
247 247
248 248 int _isatty_r(struct _reent *r, int fd)
249 249 {
250 250 r = r;
251 251 fd = fd;
252 252
253 253 return 1;
254 254 }
255 255
256 256
257 257 #ifdef __cplusplus
258 258 }
259 259 #endif
260 260
261 261
@@ -1,450 +1,465
1 1 /*------------------------------------------------------------------------------
2 2 -- This file is a part of the libuc, microcontroler library
3 3 -- Copyright (C) 2011, Alexis Jeandet
4 4 --
5 5 -- This program is free software; you can redistribute it and/or modify
6 6 -- it under the terms of the GNU General Public License as published by
7 7 -- the Free Software Foundation; either version 3 of the License, or
8 8 -- (at your option) any later version.
9 9 --
10 10 -- This program is distributed in the hope that it will be useful,
11 11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 13 -- GNU General Public License for more details.
14 14 --
15 15 -- You should have received a copy of the GNU General Public License
16 16 -- along with this program; if not, write to the Free Software
17 17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 18 -------------------------------------------------------------------------------
19 19 -- Author : Alexis Jeandet
20 20 -- Mail : alexis.jeandet@gmail.com
21 21 -------------------------------------------------------------------------------*/
22 22
23 23 #include <uart.h>
24 24 #include <stm32f4xx_usart.h>
25 25 #include <stm32f4xx_rcc.h>
26 26 #include <stm32f4xx_gpio.h>
27 27 #include <gpio.h>
28 #include <stdio.h>
29
28 30 #define GPIOGETPORT(gpio) ((GPIO_TypeDef*)(((((uint32_t)gpio) & (uint32_t)0x0000FF00)*(uint32_t)4) + (uint32_t)GPIOA))
29 31 #define GPIOPORTNUM(gpio) (((uint32_t)(gpio) & (uint32_t)0x0000FF00)>>(uint32_t)8)
30 32
31 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 48 uart_t uartopen(int count)
35 49 {
36 50
37 51 switch(count)
38 52 {
39 53 case uart1:
40 54 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
41 55 RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, ENABLE);
42 56 RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, DISABLE);
43 57 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
44 58 USART1->CR3 &= ~((1<<8) + (1<<9));
45 59 return uart1;
46 60 break;
47 61 case uart2:
48 62 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
49 63 RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, ENABLE);
50 64 RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, DISABLE);
51 65 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
52 66 USART2->CR3 &= ~((1<<8) + (1<<9));
53 67 return uart2;
54 68 break;
55 69 case uart3:
56 70 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
57 71 RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, ENABLE);
58 72 RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, DISABLE);
59 73 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
60 74 USART3->CR3 &= ~((1<<8) + (1<<9));
61 75 return uart3;
62 76 break;
63 77 case uart4:
64 78 RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART4, ENABLE);
65 79 RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART4, DISABLE);
66 80 RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE);
67 81 UART4->CR3 &= ~((1<<8) + (1<<9));
68 82 return uart4;
69 83 break;
70 84 case uart5:
71 85 RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART5, ENABLE);
72 86 RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART5, DISABLE);
73 87 RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART5, ENABLE);
74 88 return uart5;
75 89 break;
76 90 case uart6:
77 91 RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART6, ENABLE);
78 92 RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART6, DISABLE);
79 93 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART6, ENABLE);
80 94 return uart6;
81 95 break;
82 96 default:
83 97 break;
84 98 }
85 99 return -1;
86 100 }
87 101
88 102 uart_t uartopenandconfig(int count, uint32_t cfg, uint32_t speed, uint32_t TXpin, uint32_t RXpin, uint32_t RTSpin, uint32_t CTSpin)
89 103 {
90 104 uart_t dev= uartopen(count);
91 105 uartsetconfig(dev,cfg,speed);
92 106 uartsetpins(dev,TXpin,RXpin,RTSpin,CTSpin);
93 107 return dev;
94 108 }
95 109
96 110
97 111 int uartclose(uart_t uart)
98 112 {
99 113 switch(uart)
100 114 {
101 115 case uart1:
102 116 RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, ENABLE);
103 117 break;
104 118 case uart2:
105 119 RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, ENABLE);
106 120 break;
107 121 case uart3:
108 122 RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, ENABLE);
109 123 break;
110 124 case uart4:
111 125 RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART4, ENABLE);
112 126 break;
113 127 case uart5:
114 128 RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART5, ENABLE);
115 129 break;
116 130 case uart6:
117 131 RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART6, ENABLE);
118 132 break;
119 133 default:
120 134 return -1;
121 135 break;
122 136 }
123 137 return 1;
124 138 }
125 139
126 140 int uartsetpins(uart_t uart,uint32_t TXpin,uint32_t RXpin,uint32_t RTSpin,uint32_t CTSpin)
127 141 {
128 142 if(uart >5)return -1;
129 143 if(uart <0)return -1;
130 144 gpio_t TX,RX,CTS,RTS;
131 145 TX = gpioopen(TXpin);
132 146 RX = gpioopen(RXpin);
133 147 TX |= gpiolowspeed | gpioaf | gpiopushpulltype | gpionopulltype;
134 148 RX |= gpiolowspeed | gpioaf | gpiopushpulltype | gpionopulltype;
135 149 gpiosetconfig(&TX);
136 150 gpiosetconfig(&RX);
137 151 uint8_t gpioAFuartx = GPIO_AF_USART1;
138 152 switch(uart)
139 153 {
140 154 case uart1:
141 155 gpioAFuartx = GPIO_AF_USART1;
142 156 break;
143 157 case uart2:
144 158 gpioAFuartx = GPIO_AF_USART2;
145 159 break;
146 160 case uart3:
147 161 gpioAFuartx = GPIO_AF_USART3;
148 162 break;
149 163 case uart4:
150 164 gpioAFuartx = GPIO_AF_UART4;
151 165 break;
152 166 case uart5:
153 167 gpioAFuartx = GPIO_AF_UART5;
154 168 break;
155 169 case uart6:
156 170 gpioAFuartx = GPIO_AF_USART6;
157 171 break;
158 172 default:
159 173 return -1;
160 174 break;
161 175 }
162 176 GPIO_PinAFConfig(GPIOGETPORT(TX), (uint8_t)(TX & 0xF), gpioAFuartx);
163 177 GPIO_PinAFConfig(GPIOGETPORT(RX), (uint8_t)(RX & 0xF), gpioAFuartx);
164 178 if((gpioAFuartx!=GPIO_AF_UART5) && (gpioAFuartx!=GPIO_AF_UART4))
165 179 {
166 180 if(CTSpin!=-1)
167 181 {
168 182 CTS = gpioopen(CTSpin);
169 183 CTS |= gpiolowspeed | gpioaf | gpiopushpulltype | gpionopulltype;
170 184 gpiosetconfig(&CTS);
171 185 GPIO_PinAFConfig(GPIOGETPORT(CTS), (uint8_t)(CTS & 0xF), gpioAFuartx);
172 186 }
173 187
174 188 if(RTSpin!=-1)
175 189 {
176 190 RTS = gpioopen(RTSpin);
177 191 RTS |= gpiolowspeed | gpioaf | gpiopushpulltype | gpionopulltype;
178 192 gpiosetconfig(&RTS);
179 193 GPIO_PinAFConfig(GPIOGETPORT(RTS), (uint8_t)(RTS & 0xF), gpioAFuartx);
180 194 }
181 195 }
182 196 return 1;
183 197 }
184 198
185 199 int uartsetconfig(uart_t uart, uint32_t cfg, uint32_t speed)
186 200 {
187 201 int res=1;
188 202 uartdisable(uart);
189 203 uartsetspeed(uart,speed);
190 204 uartsetparity(uart,cfg & UARTPARITYMASK);
191 205 uartsetdatabits(uart,cfg & UARTBITSMASK);
192 206 uartsetstopbits(uart,cfg & UARTSTOPBITSMASK);
193 207 uartenable(uart);
194 208 return res;
195 209 }
196 210
197 211 int uartenable(uart_t uart)
198 212 {
199 213 if((uart<6)&&(uart>=0))
200 214 {
201 215 USART_TypeDef* _dev_ = _uart_dev_table[(int)uart];
202 216 _dev_->CR1 |= (1<<13);
203 217 _dev_->CR1 |= (1<<2) + (1<<3);
204 218 _dev_->DR = ' ';
205 219 return 1;
206 220 }
207 221 return -1;
208 222 }
209 223
210 224 int uartdisable(uart_t uart)
211 225 {
212 226 if((uart<6)&&(uart>=0))
213 227 {
214 228 USART_TypeDef* _dev_ = _uart_dev_table[(int)uart];
215 229 if((_dev_->CR1 & ((1<<3) +(1<<13)))==((1<<3) +(1<<13)))
216 230 {
217 231 while((_dev_->SR & (uint16_t)(1<<7))!=(uint16_t)(1<<7));
218 232 }
219 233 _dev_->CR1 &= ~((1<<2) + (1<<3) +(1<<13));
220 234 return 1;
221 235 }
222 236 return -1;
223 237 }
224 238
225 239 int uartsetspeed(uart_t uart,uint32_t speed)
226 240 {
227 241 if((uart<6)&&(uart>=0))
228 242 {
229 243 USART_TypeDef* _dev_ = _uart_dev_table[(int)uart];
230 244 uint32_t tmpreg = 0x00, apbclock = 0x00;
231 245 uint32_t integerdivider = 0x00;
232 246 uint32_t fractionaldivider = 0x00;
233 247 RCC_ClocksTypeDef RCC_ClocksStatus;
234 248 RCC_GetClocksFreq(&RCC_ClocksStatus);
235 249
236 250 if ((_dev_ == USART1) || ((_dev_ == USART6)))
237 251 {
238 252 apbclock = RCC_ClocksStatus.PCLK2_Frequency;
239 253 }
240 254 else
241 255 {
242 256 apbclock = RCC_ClocksStatus.PCLK1_Frequency;
243 257 }
244 258 if (((_dev_->CR1) & USART_CR1_OVER8) != (uint16_t)0)
245 259 {
246 260 integerdivider = ((25 * apbclock) / (2 * (speed)));
247 261 }
248 262 else
249 263 {
250 264 integerdivider = ((25 * apbclock) / (4 * (speed)));
251 265 }
252 266 tmpreg = (integerdivider / 100) << 4;
253 267 fractionaldivider = integerdivider - (100 * (tmpreg >> 4));
254 268 if ((_dev_->CR1 & USART_CR1_OVER8) != (uint16_t)0)
255 269 {
256 270 tmpreg |= ((((fractionaldivider * 8) + 50) / 100)) & ((uint8_t)0x07);
257 271 }
258 272 else
259 273 {
260 274 tmpreg |= ((((fractionaldivider * 16) + 50) / 100)) & ((uint8_t)0x0F);
261 275 }
262 276 _dev_->BRR = (uint16_t)tmpreg;
263 277 return 1;
264 278 }
265 279 return -1;
266 280 }
267 281
268 282 int uartsetparity(uart_t uart,uartparity_t parity)
269 283 {
270 284 if((uart<6)&&(uart>=0))
271 285 {
272 286 USART_TypeDef* _dev_ = _uart_dev_table[(int)uart];
273 287 _dev_->CR1 &= ~(((1<<9)+(1<<10)));
274 288 switch(parity)
275 289 {
276 290 case uartparityeven:
277 291 _dev_->CR1 |= (1<<10);
278 292 break;
279 293 case uartparityodd:
280 294 _dev_->CR1 |= (1<<10) + (1<<9);
281 295 break;
282 296 case uartparitynone:
283 297 break;
284 298 default :
285 299 return 0;
286 300 break;
287 301 }
288 302 return 1;
289 303 }
290 304 return -1;
291 305 }
292 306
293 307 int uartsetdatabits(uart_t uart,uartbits_t databits)
294 308 {
295 309 if((uart<6)&&(uart>=0))
296 310 {
297 311 USART_TypeDef* _dev_ = _uart_dev_table[(int)uart];
298 312 _dev_->CR1 &= ~(((1<<12)));
299 313 switch(databits)
300 314 {
301 315 case uart7bits:
302 316 return 0;
303 317 break;
304 318 case uart8bits:
305 319 break;
306 320 case uart9bits:
307 321 _dev_->CR1 |= (1<<12);
308 322 break;
309 323 default :
310 324 return 0;
311 325 break;
312 326 }
313 327 return 1;
314 328 }
315 329 return -1;
316 330 }
317 331
318 332 int uartsetstopbits(uart_t uart,uartstopbits_t stopbits)
319 333 {
320 334 if((uart<6)&&(uart>=0))
321 335 {
322 336 USART_TypeDef* _dev_ = _uart_dev_table[(int)uart];
323 337 _dev_->CR2 &= ~(((1<<12)+(1<<13)));
324 338 switch(stopbits)
325 339 {
326 340 case uarthalfstop:
327 341 _dev_->CR2 |= (1<<12);
328 342 break;
329 343 case uartonestop:
330 344 break;
331 345 case uartonehalfstop:
332 346 _dev_->CR2 |= (1<<12) + (1<<13);
333 347 break;
334 348 case uarttwostop:
335 349 _dev_->CR2 |= (1<<13);
336 350 break;
337 351 default :
338 352 return 0;
339 353 break;
340 354 }
341 355 return 1;
342 356 }
343 357 return -1;
344 358 }
345 359
346 360 int uartputc(uart_t uart,char c)
347 361 {
348 362 if((uart<6)&&(uart>=0))
349 363 {
350 364 USART_TypeDef* _dev_ = _uart_dev_table[(int)uart];
351 365 while((_dev_->SR & (uint16_t)(1<<7))!=(uint16_t)(1<<7));
352 366 _dev_->DR = c;
353 367 return 1;
354 368 }
355 369 return -1;
356 370 }
357 371
358 372 char uartgetc(uart_t uart)
359 373 {
360 374 if((uart<6)&&(uart>=0))
361 375 {
362 376 USART_TypeDef* _dev_ = _uart_dev_table[(int)uart];
363 377 while(!(_dev_->SR & (1<<5)));
364 378 return (char)_dev_->DR;
365 379 }
366 380 return -1;
367 381 }
368 382
369 383 int uartputs(uart_t uart,char* s)
370 384 {
371 385 while (*s) uartputc(uart,*s++);
372 386 return 1;
373 387 }
374 388
375 389 int uartgets(uart_t uart,char* s)
376 390 {
377 391 do
378 392 {
379 393 (*s) = uartgetc(uart);
380 394 }
381 395 while(*s++);
382 396 return 1;
383 397 }
384 398
385 399 int uartputnc(uart_t uart,char* c,int n)
386 400 {
387 401 int l=0;
388 402 while(l<n)
389 403 {
390 404 uartputc(uart,*c++);
391 405 l++;
392 406 }
393 407 return n;
394 408 }
395 409
396 410 int uartgetnc(uart_t uart,char* c,int n)
397 411 {
398 412 int l=0;
399 413 while(l<n)
400 414 {
401 415 *c++=uartgetc(uart);
402 416 l++;
403 417 }
404 418 return n;
405 419 }
406 420
407 421 int uartavailiabledata(uart_t uart)
408 422 {
409 423 if((uart<6)&&(uart>=0))
410 424 {
411 425 USART_TypeDef* _dev_ = _uart_dev_table[(int)uart];
412 426 if(!(_dev_->SR & (1<<5)))
413 427 return 0;
414 428 else
415 429 return 1;
416 430 }
417 431 return -1;
418 432 }
419 433
420 434
421 435 int _uartstrwrite(streamdevice* device,void* data,int size, int n)
422 436 {
423 437 return uartputnc((uart_t) device->_stream,(char*) data,size*n);
424 438 }
425 439
426 440 int _uartstrread(streamdevice* device,void* data,int size, int n)
427 441 {
428 442 return uartgetnc((uart_t) device->_stream,(char*) data,size*n);
429 443 }
430 444
431 445 int _uartstrsetpos(streamdevice* device,int pos)
432 446 {
433 447 return 1;
434 448 }
435 449
436 450 int uartmkstreamdev(uart_t uart,streamdevice* strdev)
437 451 {
438 strdev->_stream = (UHANDLE)uart;
452 strdev->_stream = (UHANDLE)uart;/*
439 453 strdev->write = (write_t)&_uartstrwrite;
440 454 strdev->read = (read_t)&_uartstrread;
441 strdev->setpos = (setpos_t)&_uartstrsetpos;
455 strdev->setpos = (setpos_t)&_uartstrsetpos;*/
456 strdev->ops = &UART_OPS;
442 457 strdev->streamPt = 0;
443 458 return 1;
444 459 }
445 460
446 461
447 462
448 463
449 464
450 465
General Comments 0
You need to be logged in to leave comments. Login now