This commit is contained in:
2025-05-13 04:55:13 +03:00
parent 3f693566bd
commit ceb6d0ccec
4364 changed files with 2897163 additions and 0 deletions
@@ -0,0 +1,417 @@
/* Includes ------------------------------------------------------------------*/
#include "AsciiLib.h"
#ifdef ASCII_8X16_MS_Gothic
static unsigned char const AsciiLib[95][16] = {
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/
{0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x18,0x18,0x00,0x00},/*"!",1*/
{0x36,0x24,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*""",2*/
{0x00,0x24,0x24,0x24,0x24,0xFE,0x48,0x48,0x48,0x48,0xFC,0x48,0x48,0x48,0x48,0x00},/*"#",3*/
{0x10,0x38,0x54,0x92,0x92,0x50,0x30,0x18,0x14,0x12,0x92,0x92,0x54,0x38,0x10,0x00},/*"$",4*/
{0x00,0x62,0x92,0x94,0x94,0x68,0x08,0x10,0x20,0x2C,0x52,0x52,0x92,0x8C,0x00,0x00},/*"%",5*/
{0x00,0x30,0x48,0x48,0x48,0x48,0x30,0x20,0x54,0x94,0x88,0x88,0x94,0x62,0x00,0x00},/*"&",6*/
{0x30,0x30,0x10,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/
{0x04,0x08,0x10,0x10,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x10,0x10,0x08,0x04,0x00},/*"(",8*/
{0x40,0x20,0x10,0x10,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x10,0x10,0x20,0x40,0x00},/*")",9*/
{0x00,0x00,0x00,0x10,0x92,0x54,0x38,0x10,0x38,0x54,0x92,0x10,0x00,0x00,0x00,0x00},/*"*",10*/
{0x00,0x00,0x00,0x00,0x10,0x10,0x10,0xFE,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00},/*"+",11*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x10,0x20,0x00},/*",",12*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"-",13*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00},/*".",14*/
{0x00,0x02,0x02,0x04,0x04,0x08,0x08,0x10,0x20,0x20,0x40,0x40,0x80,0x80,0x00,0x00},/*"/",15*/
{0x00,0x30,0x48,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x48,0x30,0x00,0x00},/*"0",16*/
{0x00,0x10,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00},/*"1",17*/
{0x00,0x30,0x48,0x84,0x84,0x04,0x08,0x08,0x10,0x20,0x20,0x40,0x80,0xFC,0x00,0x00},/*"2",18*/
{0x00,0x30,0x48,0x84,0x84,0x04,0x08,0x30,0x08,0x04,0x84,0x84,0x48,0x30,0x00,0x00},/*"3",19*/
{0x00,0x08,0x08,0x18,0x18,0x28,0x28,0x48,0x48,0x88,0xFC,0x08,0x08,0x08,0x00,0x00},/*"4",20*/
{0x00,0xFC,0x80,0x80,0x80,0xB0,0xC8,0x84,0x04,0x04,0x04,0x84,0x48,0x30,0x00,0x00},/*"5",21*/
{0x00,0x30,0x48,0x84,0x84,0x80,0xB0,0xC8,0x84,0x84,0x84,0x84,0x48,0x30,0x00,0x00},/*"6",22*/
{0x00,0xFC,0x04,0x04,0x08,0x08,0x08,0x10,0x10,0x10,0x20,0x20,0x20,0x20,0x00,0x00},/*"7",23*/
{0x00,0x30,0x48,0x84,0x84,0x84,0x48,0x30,0x48,0x84,0x84,0x84,0x48,0x30,0x00,0x00},/*"8",24*/
{0x00,0x30,0x48,0x84,0x84,0x84,0x84,0x4C,0x34,0x04,0x84,0x84,0x48,0x30,0x00,0x00},/*"9",25*/
{0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00},/*":",26*/
{0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x30,0x30,0x10,0x20,0x00},/*";",27*/
{0x00,0x00,0x04,0x08,0x10,0x20,0x40,0x80,0x40,0x20,0x10,0x08,0x04,0x00,0x00,0x00},/*"<",28*/
{0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00},/*"=",29*/
{0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x04,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00},/*">",30*/
{0x00,0x30,0x48,0x84,0x84,0x04,0x08,0x10,0x20,0x20,0x00,0x00,0x30,0x30,0x00,0x00},/*"?",31*/
{0x00,0x38,0x44,0x82,0x9A,0xAA,0xAA,0xAA,0xAA,0xAA,0x9C,0x80,0x42,0x3C,0x00,0x00},/*"@",32*/
{0x00,0x10,0x10,0x28,0x28,0x28,0x28,0x44,0x44,0x44,0x7C,0x82,0x82,0x82,0x00,0x00},/*"A",33*/
{0x00,0xF8,0x84,0x82,0x82,0x82,0x84,0xF8,0x84,0x82,0x82,0x82,0x84,0xF8,0x00,0x00},/*"B",34*/
{0x00,0x38,0x44,0x82,0x82,0x80,0x80,0x80,0x80,0x80,0x82,0x82,0x44,0x38,0x00,0x00},/*"C",35*/
{0x00,0xF8,0x84,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x84,0xF8,0x00,0x00},/*"D",36*/
{0x00,0xFE,0x80,0x80,0x80,0x80,0x80,0xFC,0x80,0x80,0x80,0x80,0x80,0xFE,0x00,0x00},/*"E",37*/
{0x00,0xFE,0x80,0x80,0x80,0x80,0x80,0xFC,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00},/*"F",38*/
{0x00,0x38,0x44,0x82,0x82,0x80,0x80,0x80,0x8E,0x82,0x82,0x82,0x46,0x3A,0x00,0x00},/*"G",39*/
{0x00,0x82,0x82,0x82,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0x82,0x82,0x82,0x00,0x00},/*"H",40*/
{0x00,0x38,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x38,0x00,0x00},/*"I",41*/
{0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x84,0x84,0x48,0x30,0x00,0x00},/*"J",42*/
{0x00,0x82,0x84,0x84,0x88,0x90,0x90,0xA0,0xD0,0x88,0x88,0x84,0x82,0x82,0x00,0x00},/*"K",43*/
{0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xFE,0x00,0x00},/*"L",44*/
{0x00,0x82,0x82,0xC6,0xC6,0xC6,0xC6,0xAA,0xAA,0xAA,0xAA,0x92,0x92,0x92,0x00,0x00},/*"M",45*/
{0x00,0x82,0x82,0xC2,0xC2,0xA2,0xA2,0x92,0x92,0x8A,0x8A,0x86,0x86,0x82,0x00,0x00},/*"N",46*/
{0x00,0x38,0x44,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x44,0x38,0x00,0x00},/*"O",47*/
{0x00,0xF8,0x84,0x82,0x82,0x82,0x84,0xF8,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00},/*"P",48*/
{0x00,0x38,0x44,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x92,0x8A,0x44,0x3A,0x00,0x00},/*"Q",49*/
{0x00,0xF8,0x84,0x82,0x82,0x82,0x84,0xF8,0x88,0x88,0x84,0x84,0x82,0x82,0x00,0x00},/*"R",50*/
{0x00,0x38,0x44,0x82,0x82,0x80,0x60,0x18,0x04,0x02,0x82,0x82,0x44,0x38,0x00,0x00},/*"S",51*/
{0x00,0xFE,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00},/*"T",52*/
{0x00,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x44,0x38,0x00,0x00},/*"U",53*/
{0x00,0x82,0x82,0x82,0x44,0x44,0x44,0x44,0x28,0x28,0x28,0x10,0x10,0x10,0x00,0x00},/*"V",54*/
{0x00,0x92,0x92,0x92,0x92,0xAA,0xAA,0xAA,0xAA,0x44,0x44,0x44,0x44,0x44,0x00,0x00},/*"W",55*/
{0x00,0x82,0x82,0x44,0x44,0x28,0x28,0x10,0x28,0x28,0x44,0x44,0x82,0x82,0x00,0x00},/*"X",56*/
{0x00,0x82,0x82,0x44,0x44,0x28,0x28,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00},/*"Y",57*/
{0x00,0xFE,0x02,0x04,0x04,0x08,0x08,0x10,0x20,0x20,0x40,0x40,0x80,0xFE,0x00,0x00},/*"Z",58*/
{0x7C,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7C,0x00},/*"[",59*/
{0x00,0x82,0x82,0x44,0x44,0x28,0x28,0x7C,0x10,0x10,0x7C,0x10,0x10,0x10,0x00,0x00},/*"\",60*/
{0x7C,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x7C,0x00},/*"]",61*/
{0x10,0x28,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"^",62*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF},/*"_",63*/
{0x30,0x30,0x10,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",64*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x84,0x04,0x3C,0x44,0x84,0x8C,0x76,0x00,0x00},/*"a",65*/
{0x00,0x80,0x80,0x80,0x80,0x80,0xB8,0xC4,0x82,0x82,0x82,0x82,0xC4,0xB8,0x00,0x00},/*"b",66*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x80,0x80,0x80,0x80,0x42,0x3C,0x00,0x00},/*"c",67*/
{0x00,0x02,0x02,0x02,0x02,0x02,0x3A,0x46,0x82,0x82,0x82,0x82,0x46,0x3A,0x00,0x00},/*"d",68*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x44,0x82,0xFE,0x80,0x80,0x42,0x3C,0x00,0x00},/*"e",69*/
{0x00,0x18,0x20,0x20,0x20,0x20,0xF8,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x00},/*"f",70*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x3A,0x44,0x44,0x38,0x40,0x7C,0x82,0x82,0x7C,0x00},/*"g",71*/
{0x00,0x80,0x80,0x80,0x80,0x80,0xB8,0xC4,0x82,0x82,0x82,0x82,0x82,0x82,0x00,0x00},/*"h",72*/
{0x00,0x00,0x10,0x10,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00},/*"i",73*/
{0x00,0x00,0x10,0x10,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x60,0x00},/*"j",74*/
{0x00,0x80,0x80,0x80,0x80,0x80,0x84,0x88,0x90,0xA0,0xD0,0x88,0x84,0x82,0x00,0x00},/*"k",75*/
{0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00},/*"l",76*/
{0x00,0x00,0x00,0x00,0x00,0x00,0xAC,0xD2,0x92,0x92,0x92,0x92,0x92,0x92,0x00,0x00},/*"m",77*/
{0x00,0x00,0x00,0x00,0x00,0x00,0xB8,0xC4,0x82,0x82,0x82,0x82,0x82,0x82,0x00,0x00},/*"n",78*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x44,0x82,0x82,0x82,0x82,0x44,0x38,0x00,0x00},/*"o",79*/
{0x00,0x00,0x00,0x00,0x00,0x00,0xB8,0xC4,0x82,0x82,0x82,0xC4,0xB8,0x80,0x80,0x00},/*"p",80*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x3A,0x46,0x82,0x82,0x82,0x46,0x3A,0x02,0x02,0x00},/*"q",81*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x2E,0x30,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x00},/*"r",82*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x82,0x80,0x60,0x1C,0x02,0x82,0x7C,0x00,0x00},/*"s",83*/
{0x00,0x00,0x20,0x20,0x20,0x20,0xF8,0x20,0x20,0x20,0x20,0x20,0x20,0x18,0x00,0x00},/*"t",84*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x82,0x82,0x82,0x82,0x82,0x46,0x3A,0x00,0x00},/*"u",85*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x82,0x44,0x44,0x28,0x28,0x10,0x10,0x00,0x00},/*"v",86*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x92,0x92,0x92,0xAA,0xAA,0x44,0x44,0x44,0x00,0x00},/*"w",87*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x44,0x28,0x10,0x10,0x28,0x44,0x82,0x00,0x00},/*"x",88*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x82,0x44,0x44,0x28,0x28,0x10,0x20,0xC0,0x00},/*"y",89*/
{0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x04,0x08,0x10,0x20,0x40,0x80,0xFE,0x00,0x00},/*"z",90*/
{0x1C,0x10,0x10,0x10,0x10,0x10,0x10,0x20,0x10,0x10,0x10,0x10,0x10,0x10,0x1C,0x00},/*"{",91*/
{0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10},/*"|",92*/
{0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x70,0x00},/*"}",93*/
{0x64,0x98,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"~",94*/
};
#endif
#ifdef ASCII_8X16_System
static unsigned char const AsciiLib[95][16] = {
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/
{0x00,0x00,0x00,0x18,0x3C,0x3C,0x3C,0x18,0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00},/*"!",1*/
{0x00,0x00,0x00,0x66,0x66,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*""",2*/
{0x00,0x00,0x00,0x36,0x36,0x7F,0x36,0x36,0x36,0x7F,0x36,0x36,0x00,0x00,0x00,0x00},/*"#",3*/
{0x00,0x18,0x18,0x3C,0x66,0x60,0x30,0x18,0x0C,0x06,0x66,0x3C,0x18,0x18,0x00,0x00},/*"$",4*/
{0x00,0x00,0x70,0xD8,0xDA,0x76,0x0C,0x18,0x30,0x6E,0x5B,0x1B,0x0E,0x00,0x00,0x00},/*"%",5*/
{0x00,0x00,0x00,0x38,0x6C,0x6C,0x38,0x60,0x6F,0x66,0x66,0x3B,0x00,0x00,0x00,0x00},/*"&",6*/
{0x00,0x00,0x00,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/
{0x00,0x00,0x00,0x0C,0x18,0x18,0x30,0x30,0x30,0x30,0x30,0x18,0x18,0x0C,0x00,0x00},/*"(",8*/
{0x00,0x00,0x00,0x30,0x18,0x18,0x0C,0x0C,0x0C,0x0C,0x0C,0x18,0x18,0x30,0x00,0x00},/*")",9*/
{0x00,0x00,0x00,0x00,0x00,0x36,0x1C,0x7F,0x1C,0x36,0x00,0x00,0x00,0x00,0x00,0x00},/*"*",10*/
{0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x7E,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00},/*"+",11*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x0C,0x18,0x00,0x00},/*",",12*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"-",13*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x00,0x00,0x00,0x00},/*".",14*/
{0x00,0x00,0x00,0x06,0x06,0x0C,0x0C,0x18,0x18,0x30,0x30,0x60,0x60,0x00,0x00,0x00},/*"/",15*/
{0x00,0x00,0x00,0x1E,0x33,0x37,0x37,0x33,0x3B,0x3B,0x33,0x1E,0x00,0x00,0x00,0x00},/*"0",16*/
{0x00,0x00,0x00,0x0C,0x1C,0x7C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x00,0x00,0x00,0x00},/*"1",17*/
{0x00,0x00,0x00,0x3C,0x66,0x66,0x06,0x0C,0x18,0x30,0x60,0x7E,0x00,0x00,0x00,0x00},/*"2",18*/
{0x00,0x00,0x00,0x3C,0x66,0x66,0x06,0x1C,0x06,0x66,0x66,0x3C,0x00,0x00,0x00,0x00},/*"3",19*/
{0x00,0x00,0x00,0x30,0x30,0x36,0x36,0x36,0x66,0x7F,0x06,0x06,0x00,0x00,0x00,0x00},/*"4",20*/
{0x00,0x00,0x00,0x7E,0x60,0x60,0x60,0x7C,0x06,0x06,0x0C,0x78,0x00,0x00,0x00,0x00},/*"5",21*/
{0x00,0x00,0x00,0x1C,0x18,0x30,0x7C,0x66,0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00},/*"6",22*/
{0x00,0x00,0x00,0x7E,0x06,0x0C,0x0C,0x18,0x18,0x30,0x30,0x30,0x00,0x00,0x00,0x00},/*"7",23*/
{0x00,0x00,0x00,0x3C,0x66,0x66,0x76,0x3C,0x6E,0x66,0x66,0x3C,0x00,0x00,0x00,0x00},/*"8",24*/
{0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x3E,0x0C,0x18,0x38,0x00,0x00,0x00,0x00},/*"9",25*/
{0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x00,0x00,0x00,0x1C,0x1C,0x00,0x00,0x00,0x00},/*":",26*/
{0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x00,0x00,0x00,0x1C,0x1C,0x0C,0x18,0x00,0x00},/*";",27*/
{0x00,0x00,0x00,0x06,0x0C,0x18,0x30,0x60,0x30,0x18,0x0C,0x06,0x00,0x00,0x00,0x00},/*"<",28*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"=",29*/
{0x00,0x00,0x00,0x60,0x30,0x18,0x0C,0x06,0x0C,0x18,0x30,0x60,0x00,0x00,0x00,0x00},/*">",30*/
{0x00,0x00,0x00,0x3C,0x66,0x66,0x0C,0x18,0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00},/*"?",31*/
{0x00,0x00,0x00,0x7E,0xC3,0xC3,0xCF,0xDB,0xDB,0xCF,0xC0,0x7F,0x00,0x00,0x00,0x00},/*"@",32*/
{0x00,0x00,0x00,0x18,0x3C,0x66,0x66,0x66,0x7E,0x66,0x66,0x66,0x00,0x00,0x00,0x00},/*"A",33*/
{0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x7C,0x66,0x66,0x66,0x7C,0x00,0x00,0x00,0x00},/*"B",34*/
{0x00,0x00,0x00,0x3C,0x66,0x66,0x60,0x60,0x60,0x66,0x66,0x3C,0x00,0x00,0x00,0x00},/*"C",35*/
{0x00,0x00,0x00,0x78,0x6C,0x66,0x66,0x66,0x66,0x66,0x6C,0x78,0x00,0x00,0x00,0x00},/*"D",36*/
{0x00,0x00,0x00,0x7E,0x60,0x60,0x60,0x7C,0x60,0x60,0x60,0x7E,0x00,0x00,0x00,0x00},/*"E",37*/
{0x00,0x00,0x00,0x7E,0x60,0x60,0x60,0x7C,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00},/*"F",38*/
{0x00,0x00,0x00,0x3C,0x66,0x66,0x60,0x60,0x6E,0x66,0x66,0x3E,0x00,0x00,0x00,0x00},/*"G",39*/
{0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x7E,0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00},/*"H",40*/
{0x00,0x00,0x00,0x3C,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00},/*"I",41*/
{0x00,0x00,0x00,0x06,0x06,0x06,0x06,0x06,0x06,0x66,0x66,0x3C,0x00,0x00,0x00,0x00},/*"J",42*/
{0x00,0x00,0x00,0x66,0x66,0x6C,0x6C,0x78,0x6C,0x6C,0x66,0x66,0x00,0x00,0x00,0x00},/*"K",43*/
{0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x7E,0x00,0x00,0x00,0x00},/*"L",44*/
{0x00,0x00,0x00,0x63,0x63,0x77,0x6B,0x6B,0x6B,0x63,0x63,0x63,0x00,0x00,0x00,0x00},/*"M",45*/
{0x00,0x00,0x00,0x63,0x63,0x73,0x7B,0x6F,0x67,0x63,0x63,0x63,0x00,0x00,0x00,0x00},/*"N",46*/
{0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00},/*"O",47*/
{0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x7C,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00},/*"P",48*/
{0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x3C,0x0C,0x06,0x00,0x00},/*"Q",49*/
{0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x7C,0x6C,0x66,0x66,0x66,0x00,0x00,0x00,0x00},/*"R",50*/
{0x00,0x00,0x00,0x3C,0x66,0x60,0x30,0x18,0x0C,0x06,0x66,0x3C,0x00,0x00,0x00,0x00},/*"S",51*/
{0x00,0x00,0x00,0x7E,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00},/*"T",52*/
{0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00},/*"U",53*/
{0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x3C,0x18,0x00,0x00,0x00,0x00},/*"V",54*/
{0x00,0x00,0x00,0x63,0x63,0x63,0x6B,0x6B,0x6B,0x36,0x36,0x36,0x00,0x00,0x00,0x00},/*"W",55*/
{0x00,0x00,0x00,0x66,0x66,0x34,0x18,0x18,0x2C,0x66,0x66,0x66,0x00,0x00,0x00,0x00},/*"X",56*/
{0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x3C,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00},/*"Y",57*/
{0x00,0x00,0x00,0x7E,0x06,0x06,0x0C,0x18,0x30,0x60,0x60,0x7E,0x00,0x00,0x00,0x00},/*"Z",58*/
{0x00,0x00,0x00,0x3C,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x3C,0x00},/*"[",59*/
{0x00,0x00,0x00,0x60,0x60,0x30,0x30,0x18,0x18,0x0C,0x0C,0x06,0x06,0x00,0x00,0x00},/*"\",60*/
{0x00,0x00,0x00,0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x00},/*"]",61*/
{0x00,0x18,0x3C,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"^",62*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00},/*"_",63*/
{0x00,0x00,0x00,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",64*/
{0x00,0x00,0x00,0x00,0x00,0x3C,0x06,0x06,0x3E,0x66,0x66,0x3E,0x00,0x00,0x00,0x00},/*"a",65*/
{0x00,0x00,0x00,0x60,0x60,0x7C,0x66,0x66,0x66,0x66,0x66,0x7C,0x00,0x00,0x00,0x00},/*"b",66*/
{0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x60,0x60,0x60,0x66,0x3C,0x00,0x00,0x00,0x00},/*"c",67*/
{0x00,0x00,0x00,0x06,0x06,0x3E,0x66,0x66,0x66,0x66,0x66,0x3E,0x00,0x00,0x00,0x00},/*"d",68*/
{0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x66,0x7E,0x60,0x60,0x3C,0x00,0x00,0x00,0x00},/*"e",69*/
{0x00,0x00,0x00,0x1E,0x30,0x30,0x30,0x7E,0x30,0x30,0x30,0x30,0x00,0x00,0x00,0x00},/*"f",70*/
{0x00,0x00,0x00,0x00,0x00,0x3E,0x66,0x66,0x66,0x66,0x66,0x3E,0x06,0x06,0x7C,0x00},/*"g",71*/
{0x00,0x00,0x00,0x60,0x60,0x7C,0x66,0x66,0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00},/*"h",72*/
{0x00,0x00,0x18,0x18,0x00,0x78,0x18,0x18,0x18,0x18,0x18,0x7E,0x00,0x00,0x00,0x00},/*"i",73*/
{0x00,0x00,0x0C,0x0C,0x00,0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x78,0x00},/*"j",74*/
{0x00,0x00,0x00,0x60,0x60,0x66,0x66,0x6C,0x78,0x6C,0x66,0x66,0x00,0x00,0x00,0x00},/*"k",75*/
{0x00,0x00,0x00,0x78,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x7E,0x00,0x00,0x00,0x00},/*"l",76*/
{0x00,0x00,0x00,0x00,0x00,0x7E,0x6B,0x6B,0x6B,0x6B,0x6B,0x63,0x00,0x00,0x00,0x00},/*"m",77*/
{0x00,0x00,0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00},/*"n",78*/
{0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00},/*"o",79*/
{0x00,0x00,0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x66,0x7C,0x60,0x60,0x60,0x00},/*"p",80*/
{0x00,0x00,0x00,0x00,0x00,0x3E,0x66,0x66,0x66,0x66,0x66,0x3E,0x06,0x06,0x06,0x00},/*"q",81*/
{0x00,0x00,0x00,0x00,0x00,0x66,0x6E,0x70,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00},/*"r",82*/
{0x00,0x00,0x00,0x00,0x00,0x3E,0x60,0x60,0x3C,0x06,0x06,0x7C,0x00,0x00,0x00,0x00},/*"s",83*/
{0x00,0x00,0x00,0x30,0x30,0x7E,0x30,0x30,0x30,0x30,0x30,0x1E,0x00,0x00,0x00,0x00},/*"t",84*/
{0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x3E,0x00,0x00,0x00,0x00},/*"u",85*/
{0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x3C,0x18,0x00,0x00,0x00,0x00},/*"v",86*/
{0x00,0x00,0x00,0x00,0x00,0x63,0x6B,0x6B,0x6B,0x6B,0x36,0x36,0x00,0x00,0x00,0x00},/*"w",87*/
{0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x3C,0x18,0x3C,0x66,0x66,0x00,0x00,0x00,0x00},/*"x",88*/
{0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x3C,0x0C,0x18,0xF0,0x00},/*"y",89*/
{0x00,0x00,0x00,0x00,0x00,0x7E,0x06,0x0C,0x18,0x30,0x60,0x7E,0x00,0x00,0x00,0x00},/*"z",90*/
{0x00,0x00,0x00,0x0C,0x18,0x18,0x18,0x30,0x60,0x30,0x18,0x18,0x18,0x0C,0x00,0x00},/*"{",91*/
{0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00},/*"|",92*/
{0x00,0x00,0x00,0x30,0x18,0x18,0x18,0x0C,0x06,0x0C,0x18,0x18,0x18,0x30,0x00,0x00},/*"}",93*/
{0x00,0x00,0x00,0x71,0xDB,0x8E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"~",94*/
};
#endif
/*******************************************************************************
* Function Name : GetASCIICode
* Description :
* Input :
* Output :
* Return : None
* Attention : None
*******************************************************************************/
void GetASCIICode(unsigned char* pBuffer,unsigned char ASCII)
{
memcpy(pBuffer,AsciiLib[(ASCII - 32)] ,16);
}
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
@@ -0,0 +1,20 @@
#ifndef __AsciiLib_H
#define __AsciiLib_H
/* Includes ------------------------------------------------------------------*/
#include <string.h>
/* Private define ------------------------------------------------------------*/
//#define ASCII_8X16_MS_Gothic
#define ASCII_8X16_System
/* Private function prototypes -----------------------------------------------*/
void GetASCIICode(unsigned char* pBuffer,unsigned char ASCII);
#endif
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,123 @@
/*********************************************************************************************************
*
* File : LCD.h
* Hardware Environment:
* Build Environment : RealView MDK-ARM Version: 4.20
* Version : V1.0
* By :
*
* (c) Copyright 2005-2011, WaveShare
* http://www.waveshare.net
* All Rights Reserved
*
*********************************************************************************************************/
#ifndef __GLCD_H
#define __GLCD_H
/* Includes ------------------------------------------------------------------*/
#include <math.h>
#include "stm32f4xx.h"
#include "config.h"
#include "AsciiLib.h"
/* Private define ------------------------------------------------------------*/
#define USE_16BIT_PMP
/*********************************************************************
* Overview: Horizontal and vertical display resolution
* (from the glass datasheet).
*********************************************************************/
//#define DISP_HOR_RESOLUTION 320
//#define DISP_VER_RESOLUTION 240
//#define DISP_ORIENTATION 0
//#define DISP_ORIENTATION 90
//#define DISP_ORIENTATION 180
#define DISP_ORIENTATION 270
/* Private define ------------------------------------------------------------*/
#if ( DISP_ORIENTATION == 90 ) || ( DISP_ORIENTATION == 270 )
#define MAX_X 320
#define MAX_Y 240
#elif ( DISP_ORIENTATION == 0 ) || ( DISP_ORIENTATION == 180 )
#define MAX_X 240
#define MAX_Y 320
#endif
/*********************************************************************
* Overview: Horizontal synchronization timing in pixels
* (from the glass datasheet).
*********************************************************************/
//#define DISP_HOR_PULSE_WIDTH 20 /* 20 */
//#define DISP_HOR_BACK_PORCH 51 /* 48 */
//#define DISP_HOR_FRONT_PORCH 20 /* 20 */
/*********************************************************************
* Overview: Vertical synchronization timing in lines
* (from the glass datasheet).
*********************************************************************/
//#define DISP_VER_PULSE_WIDTH 2 /* 2 */
//#define DISP_VER_BACK_PORCH 12 /* 16 */
//#define DISP_VER_FRONT_PORCH 4 /* 4 */
/*********************************************************************
* Definition for SPI interface for HIMAX 8238-A relevant to hardware
* layout; Hardware dependent!
*********************************************************************/
#define GPIO3 3
#define GPIO2 2
#define GPIO1 1
#define GPIO0 0
#define LCD_RESET (1<<GPIO3) /* LCD Reset signal (Reset for display panel, NOT ssd1963) */
#define LCD_SPENA (1<<GPIO0) /* SPI EN signal */
#define LCD_SPCLK (1<<GPIO1) /* SPI CLK */
#define LCD_SPDAT (1<<GPIO2) /* SPI DATA */
/* LCD color */
#define White 0xFFFF
#define Black 0x0000
#define Grey 0xF7DE
#define Blue 0x001F
#define Blue2 0x051F
#define Red 0xF800
#define Magenta 0xF81F
#define Green 0x07E0
#define Cyan 0x7FFF
#define Yellow 0xFFE0
#define RGB565CONVERT(red, green, blue) (int) (((red >> 3) << 11) | ((green >> 2) << 5) | (blue >> 3))
/* Private function prototypes -----------------------------------------------*/
void LCD_Initializtion(void);
void LCD_Clear(uint16_t Color);
//void LCD_SetBacklight(uint8_t intensity);
uint16_t LCD_GetPoint(uint16_t Xpos,uint16_t Ypos);
void LCD_SetPoint(uint16_t Xpos,uint16_t Ypos,uint16_t point);
void PutChar(uint16_t Xpos,uint16_t Ypos,uint8_t c,uint16_t charColor,uint16_t bkColor);
void LCD_DrawLine( uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1 , uint16_t color );
void PutChinese(uint16_t Xpos,uint16_t Ypos,uint8_t *str,uint16_t Color,uint16_t bkColor);
void GUI_Text(uint16_t Xpos, uint16_t Ypos, uint8_t *str,uint16_t Color, uint16_t bkColor);
void GUI_Chinese(uint16_t Xpos, uint16_t Ypos, uint8_t *str,uint16_t Color, uint16_t bkColor);
void LCD_DrawPicture(uint16_t StartX,uint16_t StartY,uint16_t EndX,uint16_t EndY,uint16_t *pic);
__inline void LCD_WriteIndex(uint16_t index);
__inline void LCD_WriteData(uint16_t data);
__inline uint16_t LCD_ReadData(void);
__inline uint16_t LCD_ReadReg(uint16_t LCD_Reg);
__inline void LCD_WriteReg(uint16_t LCD_Reg,uint16_t LCD_RegValue);
static void LCD_SetCursor( uint16_t Xpos, uint16_t Ypos );
void delay_ms(uint16_t ms);
#endif
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
@@ -0,0 +1,637 @@
/*********************************************************************************************************
*
* File : GLCD_UCGUI.c
* Hardware Environment:
* Build Environment : RealView MDK-ARM Version: 4.20
* Version : V1.0
* By :
*
* (c) Copyright 2005-2011, WaveShare
* http://www.waveshare.net
* All Rights Reserved
*
*********************************************************************************************************/
/* Includes ------------------------------------------------------------------*/
#include "uCGUI\inc\LCD_Private.h" /* private modul definitions & config */
#include "uCGUI\inc\GUI_Private.h"
#include "uCGUI\inc\GUIDebug.h"
#include "GLCD.h"
/* Private define ------------------------------------------------------------*/
#define BKCOLOR LCD_BKCOLORINDEX
#define COLOR LCD_COLORINDEX
#if (LCD_CONTROLLER == HY32D)
int LCD_L0_Init(void)
{
LCD_Initializtion();
return 0;
}
void LCD_L0_SetPixelIndex(int x, int y, int PixelIndex)
{
LCD_SetPoint(x,y,PixelIndex);
}
unsigned int LCD_L0_GetPixelIndex(int x, int y)
{
return LCD_GetPoint(x,y);
}
void LCD_L0_SetOrg(int x,int y)
{
}
void LCD_L0_XorPixel(int x, int y)
{
LCD_PIXELINDEX Index = LCD_GetPoint(x,y);
LCD_SetPoint(x,y,LCD_NUM_COLORS-1-Index);
}
void LCD_L0_DrawHLine (int x0, int y, int x1)
{
LCD_DrawLine(x0,y,x1,y,LCD_COLORINDEX);
}
void LCD_L0_DrawVLine (int x, int y0, int y1)
{
LCD_DrawLine(x,y0,x,y1,LCD_COLORINDEX);
}
void LCD_L0_FillRect(int x0, int y0, int x1, int y1) {
#if !LCD_SWAP_XY
for (; y0 <= y1; y0++) {
LCD_L0_DrawHLine(x0,y0, x1);
}
#else
for (; x0 <= x1; x0++) {
LCD_L0_DrawVLine(x0,y0, y1);
}
#endif
}
void DrawBitLine1BPP(int x, int y, U8 const*p, int Diff, int xsize, const LCD_PIXELINDEX*pTrans)
{
LCD_PIXELINDEX pixels;
LCD_PIXELINDEX Index0 = *(pTrans+0);
LCD_PIXELINDEX Index1 = *(pTrans+1);
/*
// Jump to right entry point
*/
pixels = *p;
switch (GUI_Context.DrawMode & (LCD_DRAWMODE_TRANS|LCD_DRAWMODE_XOR)) {
case 0:
#if defined (SETNEXTPIXEL) /* Optimization ! */
x+=Diff;
ili9320_SetCursor(x,y);
#endif
switch (Diff&7) {
case 0:
goto WriteBit0;
case 1:
goto WriteBit1;
case 2:
goto WriteBit2;
case 3:
goto WriteBit3;
case 4:
goto WriteBit4;
case 5:
goto WriteBit5;
case 6:
goto WriteBit6;
case 7:
goto WriteBit7;
}
break;
case LCD_DRAWMODE_TRANS:
switch (Diff&7) {
case 0:
goto WriteTBit0;
case 1:
goto WriteTBit1;
case 2:
goto WriteTBit2;
case 3:
goto WriteTBit3;
case 4:
goto WriteTBit4;
case 5:
goto WriteTBit5;
case 6:
goto WriteTBit6;
case 7:
goto WriteTBit7;
}
break;
case LCD_DRAWMODE_XOR:
switch (Diff&7) {
case 0:
goto WriteXBit0;
case 1:
goto WriteXBit1;
case 2:
goto WriteXBit2;
case 3:
goto WriteXBit3;
case 4:
goto WriteXBit4;
case 5:
goto WriteXBit5;
case 6:
goto WriteXBit6;
case 7:
goto WriteXBit7;
}
}
/*
Write with transparency
*/
WriteTBit0:
if (pixels&(1<<7)) LCD_SetPoint(x+0, y, Index1);
if (!--xsize)
return;
WriteTBit1:
if (pixels&(1<<6)) LCD_SetPoint(x+1, y, Index1);
if (!--xsize)
return;
WriteTBit2:
if (pixels&(1<<5)) LCD_SetPoint(x+2, y, Index1);
if (!--xsize)
return;
WriteTBit3:
if (pixels&(1<<4)) LCD_SetPoint(x+3, y, Index1);
if (!--xsize)
return;
WriteTBit4:
if (pixels&(1<<3)) LCD_SetPoint(x+4, y, Index1);
if (!--xsize)
return;
WriteTBit5:
if (pixels&(1<<2)) LCD_SetPoint(x+5, y, Index1);
if (!--xsize)
return;
WriteTBit6:
if (pixels&(1<<1)) LCD_SetPoint(x+6, y, Index1);
if (!--xsize)
return;
WriteTBit7:
if (pixels&(1<<0)) LCD_SetPoint(x+7, y, Index1);
if (!--xsize)
return;
x+=8;
pixels = *(++p);
goto WriteTBit0;
/*
Write without transparency
*/
WriteBit0:
LCD_SetPoint(x+0, y, (pixels&(1<<7)) ? Index1 : Index0);
if (!--xsize)
return;
WriteBit1:
LCD_SetPoint(x+1, y, (pixels&(1<<6)) ? Index1 : Index0);
if (!--xsize)
return;
WriteBit2:
LCD_SetPoint(x+2, y, (pixels&(1<<5)) ? Index1 : Index0);
if (!--xsize)
return;
WriteBit3:
LCD_SetPoint(x+3, y, (pixels&(1<<4)) ? Index1 : Index0);
if (!--xsize)
return;
WriteBit4:
LCD_SetPoint(x+4, y, (pixels&(1<<3)) ? Index1 : Index0);
if (!--xsize)
return;
WriteBit5:
LCD_SetPoint(x+5, y, (pixels&(1<<2)) ? Index1 : Index0);
if (!--xsize)
return;
WriteBit6:
LCD_SetPoint(x+6, y, (pixels&(1<<1)) ? Index1 : Index0);
if (!--xsize)
return;
WriteBit7:
LCD_SetPoint(x+7, y, (pixels&(1<<0)) ? Index1 : Index0);
if (!--xsize)
return;
x+=8;
pixels = *(++p);
goto WriteBit0;
/*
Write XOR mode
*/
WriteXBit0:
if (pixels&(1<<7))
LCD_L0_XorPixel(x+0, y);
if (!--xsize)
return;
WriteXBit1:
if (pixels&(1<<6))
LCD_L0_XorPixel(x+1, y);
if (!--xsize)
return;
WriteXBit2:
if (pixels&(1<<5))
LCD_L0_XorPixel(x+2, y);
if (!--xsize)
return;
WriteXBit3:
if (pixels&(1<<4))
LCD_L0_XorPixel(x+3, y);
if (!--xsize)
return;
WriteXBit4:
if (pixels&(1<<3))
LCD_L0_XorPixel(x+4, y);
if (!--xsize)
return;
WriteXBit5:
if (pixels&(1<<2))
LCD_L0_XorPixel(x+5, y);
if (!--xsize)
return;
WriteXBit6:
if (pixels&(1<<1))
LCD_L0_XorPixel(x+6, y);
if (!--xsize)
return;
WriteXBit7:
if (pixels&(1<<0))
LCD_L0_XorPixel(x+7, y);
if (!--xsize)
return;
x+=8;
pixels = *(++p);
goto WriteXBit0;
}
static void DrawBitLine2BPP(int x, int y, U8 const*p, int Diff, int xsize, const LCD_PIXELINDEX*pTrans) {
LCD_PIXELINDEX pixels;
/*
// Jump to right entry point
*/
pixels = *p;
if (pTrans) {
/*
with palette
*/
if (GUI_Context.DrawMode & LCD_DRAWMODE_TRANS) switch (Diff&3) {
case 0:
goto WriteTBit0;
case 1:
goto WriteTBit1;
case 2:
goto WriteTBit2;
default:
goto WriteTBit3;
} else switch (Diff&3) {
case 0:
goto WriteBit0;
case 1:
goto WriteBit1;
case 2:
goto WriteBit2;
default:
goto WriteBit3;
}
/*
Write without transparency
*/
WriteBit0:
LCD_SetPoint(x+0, y, *(pTrans+(pixels>>6)));
if (!--xsize)
return;
WriteBit1:
LCD_SetPoint(x+1, y, *(pTrans+(3&(pixels>>4))));
if (!--xsize)
return;
WriteBit2:
LCD_SetPoint(x+2, y, *(pTrans+(3&(pixels>>2))));
if (!--xsize)
return;
WriteBit3:
LCD_SetPoint(x+3, y, *(pTrans+(3&(pixels))));
if (!--xsize)
return;
pixels = *(++p);
x+=4;
goto WriteBit0;
/*
Write with transparency
*/
WriteTBit0:
if (pixels&(3<<6))
LCD_SetPoint(x+0, y, *(pTrans+(pixels>>6)));
if (!--xsize)
return;
WriteTBit1:
if (pixels&(3<<4))
LCD_SetPoint(x+1, y, *(pTrans+(3&(pixels>>4))));
if (!--xsize)
return;
WriteTBit2:
if (pixels&(3<<2))
LCD_SetPoint(x+2, y, *(pTrans+(3&(pixels>>2))));
if (!--xsize)
return;
WriteTBit3:
if (pixels&(3<<0))
LCD_SetPoint(x+3, y, *(pTrans+(3&(pixels))));
if (!--xsize)
return;
pixels = *(++p);
x+=4;
goto WriteTBit0;
} else {
/*
without palette
*/
if (GUI_Context.DrawMode & LCD_DRAWMODE_TRANS) switch (Diff&3) {
case 0:
goto WriteDDPTBit0;
case 1:
goto WriteDDPTBit1;
case 2:
goto WriteDDPTBit2;
default:
goto WriteDDPTBit3;
} else switch (Diff&3) {
case 0:
goto WriteDDPBit0;
case 1:
goto WriteDDPBit1;
case 2:
goto WriteDDPBit2;
default:
goto WriteDDPBit3;
}
/*
Write without transparency
*/
WriteDDPBit0:
LCD_SetPoint(x+0, y, (pixels>>6));
if (!--xsize)
return;
WriteDDPBit1:
LCD_SetPoint(x+1, y, (3&(pixels>>4)));
if (!--xsize)
return;
WriteDDPBit2:
LCD_SetPoint(x+2, y, (3&(pixels>>2)));
if (!--xsize)
return;
WriteDDPBit3:
LCD_SetPoint(x+3, y, (3&(pixels)));
if (!--xsize)
return;
pixels = *(++p);
x+=4;
goto WriteDDPBit0;
/*
Write with transparency
*/
WriteDDPTBit0:
if (pixels&(3<<6))
LCD_SetPoint(x+0, y, (pixels>>6));
if (!--xsize)
return;
WriteDDPTBit1:
if (pixels&(3<<4))
LCD_SetPoint(x+1, y, (3&(pixels>>4)));
if (!--xsize)
return;
WriteDDPTBit2:
if (pixels&(3<<2))
LCD_SetPoint(x+2, y, (3&(pixels>>2)));
if (!--xsize)
return;
WriteDDPTBit3:
if (pixels&(3<<0))
LCD_SetPoint(x+3, y, (3&(pixels)));
if (!--xsize)
return;
pixels = *(++p);
x+=4;
goto WriteDDPTBit0;
}
}
static void DrawBitLine4BPP(int x, int y, U8 const*p, int Diff, int xsize, const LCD_PIXELINDEX*pTrans)
{
LCD_PIXELINDEX pixels;
pixels = *p;
if (pTrans)
{
if (GUI_Context.DrawMode & LCD_DRAWMODE_TRANS)
{
if ((Diff&1) ==0)
goto WriteTBit0;
goto WriteTBit1;
}
else
{
if ((Diff&1) ==0)
goto WriteBit0;
goto WriteBit1;
}
WriteBit0:
LCD_SetPoint(x+0, y, *(pTrans+(pixels>>4)));
if (!--xsize)
return;
WriteBit1:
LCD_SetPoint(x+1, y, *(pTrans+(pixels&0xf)));
if (!--xsize)
return;
x+=2;
pixels = *(++p);
goto WriteBit0;
/*
Write with transparency
*/
WriteTBit0:
if (pixels>>4)
LCD_SetPoint(x+0, y, *(pTrans+(pixels>>4)));
if (!--xsize)
return;
WriteTBit1:
if (pixels&0xf)
LCD_SetPoint(x+1, y, *(pTrans+(pixels&0xf)));
if (!--xsize)
return;
x+=2;
pixels = *(++p);
goto WriteTBit0;
} else {
/*
without palette
*/
if (GUI_Context.DrawMode & LCD_DRAWMODE_TRANS) {
if ((Diff&1) ==0)
goto WriteDDPTBit0;
goto WriteDDPTBit1;
} else {
if ((Diff&1) ==0)
goto WriteDDPBit0;
goto WriteDDPBit1;
}
/*
Write without transparency
*/
WriteDDPBit0:
LCD_SetPoint(x+0, y, (pixels>>4));
if (!--xsize)
return;
WriteDDPBit1:
LCD_SetPoint(x+1, y, (pixels&0xf));
if (!--xsize)
return;
x+=2;
pixels = *(++p);
goto WriteDDPBit0;
/*
Write with transparency
*/
WriteDDPTBit0:
if (pixels>>4)
LCD_SetPoint(x+0, y, (pixels>>4));
if (!--xsize)
return;
WriteDDPTBit1:
if (pixels&0xf)
LCD_SetPoint(x+1, y, (pixels&0xf));
if (!--xsize)
return;
x+=2;
pixels = *(++p);
goto WriteDDPTBit0;
}
}
void DrawBitLine8BPP(int x, int y, U8 const*p, int xsize, const LCD_PIXELINDEX*pTrans) {
LCD_PIXELINDEX pixel;
if ((GUI_Context.DrawMode & LCD_DRAWMODE_TRANS)==0) {
if (pTrans) {
for (;xsize > 0; xsize--,x++,p++) {
pixel = *p;
LCD_SetPoint(x, y, *(pTrans+pixel));
}
} else {
for (;xsize > 0; xsize--,x++,p++) {
LCD_SetPoint(x, y, *p);
}
}
} else { /* Handle transparent bitmap */
if (pTrans) {
for (; xsize > 0; xsize--, x++, p++) {
pixel = *p;
if (pixel) {
LCD_SetPoint(x+0, y, *(pTrans+pixel));
}
}
} else {
for (; xsize > 0; xsize--, x++, p++) {
pixel = *p;
if (pixel) {
LCD_SetPoint(x+0, y, pixel);
}
}
}
}
}
void DrawBitLine16BPP(int x, int y, U16 const*p, int xsize)
{
LCD_PIXELINDEX Index;
if ((GUI_Context.DrawMode & LCD_DRAWMODE_TRANS)==0)
{
for (;xsize > 0; xsize--,x++,p++)
{
LCD_SetPoint(x, y, *p);
}
}
else
{ /* Handle transparent bitmap */
for (; xsize > 0; xsize--, x++, p++)
{
Index = *p;
if (Index)
{
LCD_SetPoint(x+0, y, Index);
}
}
}
}
void LCD_L0_DrawBitmap (int x0, int y0,
int xsize, int ysize,
int BitsPerPixel,
int BytesPerLine,
const U8* pData, int Diff,
const LCD_PIXELINDEX* pTrans)
{
int i;
switch (BitsPerPixel)
{
case 1:
for (i=0; i<ysize; i++)
{
DrawBitLine1BPP(x0, i+y0, pData, Diff, xsize, pTrans);
pData += BytesPerLine;
}
break;
case 2:
for (i=0; i<ysize; i++)
{
DrawBitLine2BPP(x0, i+y0, pData, Diff, xsize, pTrans);
pData += BytesPerLine;
}
break;
case 4:
for (i=0; i<ysize; i++)
{
DrawBitLine4BPP(x0, i+y0, pData, Diff, xsize, pTrans);
pData += BytesPerLine;
}
break;
case 8:
for (i=0; i<ysize; i++)
{
DrawBitLine8BPP(x0, i+y0, pData, xsize, pTrans);
pData += BytesPerLine;
}
break;
case 16:
for (i=0; i<ysize; i++)
{
DrawBitLine16BPP(x0, i+y0, (U16*)pData, xsize);
pData += BytesPerLine;
}
break;
}
}
void LCD_L0_SetLUTEntry(U8 Pos, LCD_COLOR color){}
void LCD_L0_On(void){}
#endif /* (LCD_CONTROLLER == HY32D) */
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,21 @@
#ifndef __HZLIB_H
#define __HZLIB_H
/* Includes ------------------------------------------------------------------*/
#include <string.h>
/* Private function prototypes -----------------------------------------------*/
void GetGBKCode(unsigned char* pBuffer,unsigned char * c);
#endif
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
@@ -0,0 +1,481 @@
/*********************************************************************************************************
*
* File : TouchPanel.c
* Hardware Environment:
* Build Environment : RealView MDK-ARM Version: 4.20
* Version : V1.0
* By :
*
* (c) Copyright 2005-2011, WaveShare
* http://www.waveshare.net
* All Rights Reserved
*
*********************************************************************************************************/
/* Includes ------------------------------------------------------------------*/
#include "TouchPanel/TouchPanel.h"
#include "TouchPanel/config.h"
#include "GLCD/GLCD.h"
/* Private variables ---------------------------------------------------------*/
Matrix matrix ;
Coordinate display ;
Coordinate ScreenSample[3];
Coordinate DisplaySample[3] = {
{ 30, 45 },
{ 250, 70},
{ 160,210}
};
/* Private define ------------------------------------------------------------*/
#define THRESHOLD 2
/*******************************************************************************
* Function Name : ADS7843_SPI_Init
* Description :
* Input : None
* Output : None
* Return : None
* Attention : None
*******************************************************************************/
static void ADS7843_SPI_Init(void)
{
SPI_InitTypeDef SPI_InitStruct;
RCC_APB1PeriphClockCmd(Open_RCC_SPI,ENABLE);
SPI_I2S_DeInit(Open_SPI);
/* Open_SPI Config -------------------------------------------------------------*/
SPI_InitStruct.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStruct.SPI_Mode = SPI_Mode_Master;
SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStruct.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStruct.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStruct.SPI_NSS = SPI_NSS_Soft;
SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32;
SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStruct.SPI_CRCPolynomial = 7;
SPI_Init(Open_SPI, &SPI_InitStruct);
SPI_Cmd(Open_SPI, ENABLE);
}
/*******************************************************************************
* Function Name : TP_Init
* Description :
* Input : None
* Output : None
* Return : None
* Attention : None
*******************************************************************************/
void TP_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(Open_SPI_SCK_GPIO_CLK | Open_SPI_MISO_GPIO_CLK | Open_SPI_MOSI_GPIO_CLK,ENABLE);
RCC_AHB1PeriphClockCmd(Open_TP_CS_CLK | Open_TP_IRQ_CLK,ENABLE);
Open_SPI_CLK_INIT(Open_RCC_SPI,ENABLE);
GPIO_PinAFConfig(Open_SPI_SCK_GPIO_PORT, Open_SPI_SCK_SOURCE, Open_GPIO_AF_SPI);
GPIO_PinAFConfig(Open_SPI_MISO_GPIO_PORT, Open_SPI_MISO_SOURCE, Open_GPIO_AF_SPI);
GPIO_PinAFConfig(Open_SPI_MOSI_GPIO_PORT, Open_SPI_MOSI_SOURCE, Open_GPIO_AF_SPI);
GPIO_InitStructure.GPIO_Pin = Open_SPI_SCK_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(Open_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = Open_SPI_MISO_PIN;
GPIO_Init(Open_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = Open_SPI_MOSI_PIN;
GPIO_Init(Open_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);
/* TP_CS */
GPIO_InitStructure.GPIO_Pin = Open_TP_CS_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(Open_TP_CS_PORT, &GPIO_InitStructure);
/*TP_IRQ */
GPIO_InitStructure.GPIO_Pin = Open_TP_IRQ_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN ;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(Open_TP_IRQ_PORT, &GPIO_InitStructure);
TP_CS(1);
ADS7843_SPI_Init();
}
/*******************************************************************************
* Function Name : DelayUS
* Description :
* Input : - cnt:
* Output : None
* Return : None
* Attention : None
*******************************************************************************/
static void DelayUS(vu32 cnt)
{
uint16_t i;
for(i = 0;i<cnt;i++)
{
uint8_t us = 12;
while (us--)
{
;
}
}
}
/*******************************************************************************
* Function Name : WR_CMD
* Description :
* Input : - cmd:
* Output : None
* Return : None
* Attention : None
*******************************************************************************/
static void WR_CMD (uint8_t cmd)
{
/* Wait for SPI3 Tx buffer empty */
while (SPI_I2S_GetFlagStatus(Open_SPI, SPI_I2S_FLAG_TXE) == RESET);
/* Send SPI3 data */
SPI_I2S_SendData(Open_SPI,cmd);
/* Wait for SPI3 data reception */
while (SPI_I2S_GetFlagStatus(Open_SPI, SPI_I2S_FLAG_RXNE) == RESET);
/* Read Open_SPI received data */
SPI_I2S_ReceiveData(Open_SPI);
}
/*******************************************************************************
* Function Name : RD_AD
* Description :
* Input : None
* Output : None
* Return :
* Attention : None
*******************************************************************************/
static int RD_AD(void)
{
unsigned short buf,temp;
/* Wait for Open_SPI Tx buffer empty */
while (SPI_I2S_GetFlagStatus(Open_SPI, SPI_I2S_FLAG_TXE) == RESET);
/* Send Open_SPI data */
SPI_I2S_SendData(Open_SPI,0x0000);
/* Wait for SPI3 data reception */
while (SPI_I2S_GetFlagStatus(Open_SPI, SPI_I2S_FLAG_RXNE) == RESET);
/* Read Open_SPI received data */
temp=SPI_I2S_ReceiveData(Open_SPI);
buf=temp<<8;
DelayUS(1);
while (SPI_I2S_GetFlagStatus(Open_SPI, SPI_I2S_FLAG_TXE) == RESET);
/* Send Open_SPI data */
SPI_I2S_SendData(Open_SPI,0x0000);
/* Wait for Open_SPI data reception */
while (SPI_I2S_GetFlagStatus(Open_SPI, SPI_I2S_FLAG_RXNE) == RESET);
/* Read Open_SPI received data */
temp=SPI_I2S_ReceiveData(Open_SPI);
buf |= temp;
buf>>=3;
buf&=0xfff;
return buf;
}
/*******************************************************************************
* Function Name : Read_X
* Description : Read ADS7843 ADC X
* Input : None
* Output : None
* Return :
* Attention : None
*******************************************************************************/
int Read_X(void)
{
int i;
TP_CS(0);
DelayUS(1);
WR_CMD(CHX);
DelayUS(1);
i=RD_AD();
TP_CS(1);
return i;
}
/*******************************************************************************
* Function Name : Read_Y
* Description : Read ADS7843 ADC Y
* Input : None
* Output : None
* Return :
* Attention : None
*******************************************************************************/
int Read_Y(void)
{
int i;
TP_CS(0);
DelayUS(1);
WR_CMD(CHY);
DelayUS(1);
i=RD_AD();
TP_CS(1);
return i;
}
/*******************************************************************************
* Function Name : TP_GetAdXY
* Description : Read ADS7843
* Input : None
* Output : None
* Return :
* Attention : None
*******************************************************************************/
void TP_GetAdXY(int *x,int *y)
{
int adx,ady;
adx=Read_X();
DelayUS(1);
ady=Read_Y();
*x=adx;
*y=ady;
}
/*******************************************************************************
* Function Name : TP_DrawPoint
* Description :
* Input : - Xpos: Row Coordinate
* - Ypos: Line Coordinate
* Output : None
* Return : None
* Attention : None
*******************************************************************************/
void TP_DrawPoint(uint16_t Xpos,uint16_t Ypos)
{
LCD_SetPoint(Xpos,Ypos,Blue); /* Center point */
LCD_SetPoint(Xpos+1,Ypos,Blue);
LCD_SetPoint(Xpos,Ypos+1,Blue);
LCD_SetPoint(Xpos+1,Ypos+1,Blue);
}
/*******************************************************************************
* Function Name : DrawCross
* Description :
* Input : - Xpos: Row Coordinate
* - Ypos: Line Coordinate
* Output : None
* Return : None
* Attention : None
*******************************************************************************/
void DrawCross(uint16_t Xpos,uint16_t Ypos)
{
LCD_DrawLine(Xpos-15,Ypos,Xpos-2,Ypos,0xffff);
LCD_DrawLine(Xpos+2,Ypos,Xpos+15,Ypos,0xffff);
LCD_DrawLine(Xpos,Ypos-15,Xpos,Ypos-2,0xffff);
LCD_DrawLine(Xpos,Ypos+2,Xpos,Ypos+15,0xffff);
LCD_DrawLine(Xpos-15,Ypos+15,Xpos-7,Ypos+15,RGB565CONVERT(184,158,131));
LCD_DrawLine(Xpos-15,Ypos+7,Xpos-15,Ypos+15,RGB565CONVERT(184,158,131));
LCD_DrawLine(Xpos-15,Ypos-15,Xpos-7,Ypos-15,RGB565CONVERT(184,158,131));
LCD_DrawLine(Xpos-15,Ypos-7,Xpos-15,Ypos-15,RGB565CONVERT(184,158,131));
LCD_DrawLine(Xpos+7,Ypos+15,Xpos+15,Ypos+15,RGB565CONVERT(184,158,131));
LCD_DrawLine(Xpos+15,Ypos+7,Xpos+15,Ypos+15,RGB565CONVERT(184,158,131));
LCD_DrawLine(Xpos+7,Ypos-15,Xpos+15,Ypos-15,RGB565CONVERT(184,158,131));
LCD_DrawLine(Xpos+15,Ypos-15,Xpos+15,Ypos-7,RGB565CONVERT(184,158,131));
}
/*******************************************************************************
* Function Name : Read_Ads7846
* Description : Get TouchPanel X Y
* Input : None
* Output : None
* Return : Coordinate *
* Attention : None
*******************************************************************************/
Coordinate *Read_Ads7846(void)
{
static Coordinate screen;
int m0,m1,m2,TP_X[1],TP_Y[1],temp[3];
uint8_t count=0;
int buffer[2][9]={{0},{0}};
do
{
TP_GetAdXY(TP_X,TP_Y);
buffer[0][count]=TP_X[0];
buffer[1][count]=TP_Y[0];
count++;
}
while(!TP_INT_IN&& count<9); /* TP_INT_IN */
if(count==9) /* Average X Y */
{
/* Average X */
temp[0]=(buffer[0][0]+buffer[0][1]+buffer[0][2])/3;
temp[1]=(buffer[0][3]+buffer[0][4]+buffer[0][5])/3;
temp[2]=(buffer[0][6]+buffer[0][7]+buffer[0][8])/3;
m0=temp[0]-temp[1];
m1=temp[1]-temp[2];
m2=temp[2]-temp[0];
m0=m0>0?m0:(-m0);
m1=m1>0?m1:(-m1);
m2=m2>0?m2:(-m2);
if( m0>THRESHOLD && m1>THRESHOLD && m2>THRESHOLD ) return 0;
if(m0<m1)
{
if(m2<m0)
screen.x=(temp[0]+temp[2])/2;
else
screen.x=(temp[0]+temp[1])/2;
}
else if(m2<m1)
screen.x=(temp[0]+temp[2])/2;
else
screen.x=(temp[1]+temp[2])/2;
/* Average Y */
temp[0]=(buffer[1][0]+buffer[1][1]+buffer[1][2])/3;
temp[1]=(buffer[1][3]+buffer[1][4]+buffer[1][5])/3;
temp[2]=(buffer[1][6]+buffer[1][7]+buffer[1][8])/3;
m0=temp[0]-temp[1];
m1=temp[1]-temp[2];
m2=temp[2]-temp[0];
m0=m0>0?m0:(-m0);
m1=m1>0?m1:(-m1);
m2=m2>0?m2:(-m2);
if(m0>THRESHOLD&&m1>THRESHOLD&&m2>THRESHOLD) return 0;
if(m0<m1)
{
if(m2<m0)
screen.y=(temp[0]+temp[2])/2;
else
screen.y=(temp[0]+temp[1])/2;
}
else if(m2<m1)
screen.y=(temp[0]+temp[2])/2;
else
screen.y=(temp[1]+temp[2])/2;
return &screen;
}
return 0;
}
/*******************************************************************************
* Function Name : setCalibrationMatrix
* Description : Calculate K A B C D E F
* Input : None
* Output : None
* Return :
* Attention : None
*******************************************************************************/
FunctionalState setCalibrationMatrix( Coordinate * displayPtr,
Coordinate * screenPtr,
Matrix * matrixPtr)
{
FunctionalState retTHRESHOLD = ENABLE ;
/* K£½(X0£­X2) (Y1£­Y2)£­(X1£­X2) (Y0£­Y2) */
matrixPtr->Divider = ((screenPtr[0].x - screenPtr[2].x) * (screenPtr[1].y - screenPtr[2].y)) -
((screenPtr[1].x - screenPtr[2].x) * (screenPtr[0].y - screenPtr[2].y)) ;
if( matrixPtr->Divider == 0 )
{
retTHRESHOLD = DISABLE;
}
else
{
/* A£½((XD0£­XD2) (Y1£­Y2)£­(XD1£­XD2) (Y0£­Y2))£¯K */
matrixPtr->An = ((displayPtr[0].x - displayPtr[2].x) * (screenPtr[1].y - screenPtr[2].y)) -
((displayPtr[1].x - displayPtr[2].x) * (screenPtr[0].y - screenPtr[2].y)) ;
/* B£½((X0£­X2) (XD1£­XD2)£­(XD0£­XD2) (X1£­X2))£¯K */
matrixPtr->Bn = ((screenPtr[0].x - screenPtr[2].x) * (displayPtr[1].x - displayPtr[2].x)) -
((displayPtr[0].x - displayPtr[2].x) * (screenPtr[1].x - screenPtr[2].x)) ;
/* C£½(Y0(X2XD1£­X1XD2)+Y1(X0XD2£­X2XD0)+Y2(X1XD0£­X0XD1))£¯K */
matrixPtr->Cn = (screenPtr[2].x * displayPtr[1].x - screenPtr[1].x * displayPtr[2].x) * screenPtr[0].y +
(screenPtr[0].x * displayPtr[2].x - screenPtr[2].x * displayPtr[0].x) * screenPtr[1].y +
(screenPtr[1].x * displayPtr[0].x - screenPtr[0].x * displayPtr[1].x) * screenPtr[2].y ;
/* D£½((YD0£­YD2) (Y1£­Y2)£­(YD1£­YD2) (Y0£­Y2))£¯K */
matrixPtr->Dn = ((displayPtr[0].y - displayPtr[2].y) * (screenPtr[1].y - screenPtr[2].y)) -
((displayPtr[1].y - displayPtr[2].y) * (screenPtr[0].y - screenPtr[2].y)) ;
/* E£½((X0£­X2) (YD1£­YD2)£­(YD0£­YD2) (X1£­X2))£¯K */
matrixPtr->En = ((screenPtr[0].x - screenPtr[2].x) * (displayPtr[1].y - displayPtr[2].y)) -
((displayPtr[0].y - displayPtr[2].y) * (screenPtr[1].x - screenPtr[2].x)) ;
/* F£½(Y0(X2YD1£­X1YD2)+Y1(X0YD2£­X2YD0)+Y2(X1YD0£­X0YD1))£¯K */
matrixPtr->Fn = (screenPtr[2].x * displayPtr[1].y - screenPtr[1].x * displayPtr[2].y) * screenPtr[0].y +
(screenPtr[0].x * displayPtr[2].y - screenPtr[2].x * displayPtr[0].y) * screenPtr[1].y +
(screenPtr[1].x * displayPtr[0].y - screenPtr[0].x * displayPtr[1].y) * screenPtr[2].y ;
}
return( retTHRESHOLD ) ;
}
/*******************************************************************************
* Function Name : getDisplayPoint
* Description : Touch panel X Y to display X Y
* Input : None
* Output : None
* Return :
* Attention : None
*******************************************************************************/
FunctionalState getDisplayPoint(Coordinate * displayPtr,
Coordinate * screenPtr,
Matrix * matrixPtr )
{
FunctionalState retTHRESHOLD =ENABLE ;
if( matrixPtr->Divider != 0 )
{
/* XD = AX+BY+C */
displayPtr->x = ( (matrixPtr->An * screenPtr->x) +
(matrixPtr->Bn * screenPtr->y) +
matrixPtr->Cn
) / matrixPtr->Divider ;
/* YD = DX+EY+F */
displayPtr->y = ( (matrixPtr->Dn * screenPtr->x) +
(matrixPtr->En * screenPtr->y) +
matrixPtr->Fn
) / matrixPtr->Divider ;
}
else
{
retTHRESHOLD = DISABLE;
}
return(retTHRESHOLD);
}
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
@@ -0,0 +1,66 @@
/*********************************************************************************************************
*
* File : TouchPanel.h
* Hardware Environment:
* Build Environment : RealView MDK-ARM Version: 4.20
* Version : V1.0
* By :
*
* (c) Copyright 2005-2011, WaveShare
* http://www.waveshare.net
* All Rights Reserved
*
*********************************************************************************************************/
#ifndef _TOUCHPANEL_H_
#define _TOUCHPANEL_H_
/* Includes ------------------------------------------------------------------*/
#include "stm32f4xx.h"
/* Private typedef -----------------------------------------------------------*/
typedef struct POINT
{
uint16_t x;
uint16_t y;
}Coordinate;
typedef struct Matrix
{
long double An,
Bn,
Cn,
Dn,
En,
Fn,
Divider ;
} Matrix ;
/* Private variables ---------------------------------------------------------*/
extern Coordinate ScreenSample[3];
extern Coordinate DisplaySample[3];
extern Matrix matrix ;
extern Coordinate display ;
/* Private define ------------------------------------------------------------*/
#define CHX 0x90
#define CHY 0xd0
/* Private function prototypes -----------------------------------------------*/
void TP_Init(void);
Coordinate *Read_Ads7846(void);
void TouchPanel_Calibrate(void);
void DrawCross(uint16_t Xpos,uint16_t Ypos);
void TP_DrawPoint(uint16_t Xpos,uint16_t Ypos);
FunctionalState setCalibrationMatrix( Coordinate * displayPtr,Coordinate * screenPtr,Matrix * matrixPtr);
FunctionalState getDisplayPoint(Coordinate * displayPtr,Coordinate * screenPtr,Matrix * matrixPtr );
#endif
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
@@ -0,0 +1,59 @@
#ifndef _CONFIG_H
#define _CONFIG_H
#include <stdio.h>
#include "stm32f4xx.h"
/**
* @brief Definition for TouchPanel
*/
/* Configure TouchPanel pins: TP_CS-> PC4 and TP_IRQ-> PC5 */
/**
* @brief Definition for TouchPanel
*/
/* Configure TouchPanel pins: TP_CS-> PC4 and TP_IRQ-> PC5 */
#define Open_TP_CS_PIN GPIO_Pin_0
#define Open_TP_CS_PORT GPIOI
#define Open_TP_CS_CLK RCC_AHB1Periph_GPIOI
#define Open_TP_IRQ_PIN GPIO_Pin_6
#define Open_TP_IRQ_PORT GPIOC
#define Open_TP_IRQ_CLK RCC_AHB1Periph_GPIOC
#define TP_CS(x) x ? GPIO_SetBits(Open_TP_CS_PORT,Open_TP_CS_PIN): GPIO_ResetBits(Open_TP_CS_PORT,Open_TP_CS_PIN)
#define TP_INT_IN GPIO_ReadInputDataBit(Open_TP_IRQ_PORT,Open_TP_IRQ_PIN)
/**
* @brief Definition for TouchPanel SPI
*/
/* Configure TouchPanel pins: TP_CLK-> PB13 and TP_MISO-> PB14 and TP_MOSI-> PB15 */
#define Open_RCC_SPI RCC_APB1Periph_SPI2
#define Open_GPIO_AF_SPI GPIO_AF_SPI2
#define Open_SPI SPI2
#define Open_SPI_CLK_INIT RCC_APB1PeriphClockCmd
#define Open_SPI_IRQn SPI2_IRQn
#define Open_SPI_IRQHANDLER SPI2_IRQHandler
#define Open_SPI_SCK_PIN GPIO_Pin_1
#define Open_SPI_SCK_GPIO_PORT GPIOI
#define Open_SPI_SCK_GPIO_CLK RCC_AHB1Periph_GPIOI
#define Open_SPI_SCK_SOURCE GPIO_PinSource1
#define Open_SPI_MISO_PIN GPIO_Pin_2
#define Open_SPI_MISO_GPIO_PORT GPIOI
#define Open_SPI_MISO_GPIO_CLK RCC_AHB1Periph_GPIOI
#define Open_SPI_MISO_SOURCE GPIO_PinSource2
#define Open_SPI_MOSI_PIN GPIO_Pin_3
#define Open_SPI_MOSI_GPIO_PORT GPIOI
#define Open_SPI_MOSI_GPIO_CLK RCC_AHB1Periph_GPIOI
#define Open_SPI_MOSI_SOURCE GPIO_PinSource3
#endif /*_CONFIG_H*/
@@ -0,0 +1,110 @@
/*********************************************************************************************************
*
* File : systick.c
* Hardware Environment:
* Build Environment : RealView MDK-ARM Version: 4.20
* Version : V1.0
* By :
*
* (c) Copyright 2005-2011, WaveShare
* http://www.waveshare.net
* All Rights Reserved
*
*********************************************************************************************************/
/* Includes ------------------------------------------------------------------*/
#include "systick.h"
/* Private variables ---------------------------------------------------------*/
static uint8_t delay_fac_us = 0;
static uint16_t delay_fac_ms = 0;
static FlagStatus Status;
/*******************************************************************************
* Function Name : delay_init
* Description :
* Input : None
* Output : None
* Return : None
* Attention :
*******************************************************************************/
void delay_init(void)
{
RCC_ClocksTypeDef RCC_ClocksStatus;
RCC_GetClocksFreq(&RCC_ClocksStatus);
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
SysTick_ITConfig(DISABLE);
delay_fac_us = RCC_ClocksStatus.HCLK_Frequency / 8000000;
delay_fac_ms = RCC_ClocksStatus.HCLK_Frequency / 8000;
}
/*******************************************************************************
* Function Name : delay_us
* Description :
* Input : - Nus:
* Output : None
* Return : None
* Attention :
*******************************************************************************/
void delay_us(u32 Nus)
{
SysTick_SetReload(delay_fac_us * Nus);
SysTick_CounterCmd(SysTick_Counter_Clear);
SysTick_CounterCmd(SysTick_Counter_Enable);
do
{
Status = SysTick_GetFlagStatus(SysTick_FLAG_COUNT);
}while (Status != SET);
SysTick_CounterCmd(SysTick_Counter_Disable);
SysTick_CounterCmd(SysTick_Counter_Clear);
}
/*******************************************************************************
* Function Name : delay_ms
* Description :
* Input : - nms:
* Output : None
* Return : None
* Attention :
*******************************************************************************/
void _delay_ms(uint16_t nms)
{
uint32_t temp = delay_fac_ms * nms;
if (temp > 0x00ffffff)
{
temp = 0x00ffffff;
}
SysTick_SetReload(temp);
SysTick_CounterCmd(SysTick_Counter_Clear);
SysTick_CounterCmd(SysTick_Counter_Enable);
do
{
Status = SysTick_GetFlagStatus(SysTick_FLAG_COUNT);
}while (Status != SET);
SysTick_CounterCmd(SysTick_Counter_Disable);
SysTick_CounterCmd(SysTick_Counter_Clear);
}
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
@@ -0,0 +1,59 @@
/*********************************************************************************************************
*
* File : syhstick.h
* Hardware Environment:
* Build Environment : RealView MDK-ARM Version: 4.20
* Version : V1.0
* By :
*
* (c) Copyright 2005-2011, WaveShare
* http://www.waveshare.net
* All Rights Reserved
*
*********************************************************************************************************/
#ifndef __SYSTICK_H
#define __SYSTICK_H
/* Includes ------------------------------------------------------------------*/
#include "stm32f4xx.h"
/* Private function prototypes -----------------------------------------------*/
void delay_init(void);
void delay_ms(uint16_t nms);
void delay_us(uint32_t nus);
#endif
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
@@ -0,0 +1,134 @@
#ifndef _CONFIG_H
#define _CONFIG_H
#include <stdio.h>
#include "stm32f4xx.h"
/**
* @brief Definition for COM port1, connected to USART1
*/
#define Open207V_USART USART1
#define Open207V_USART_CLK RCC_APB2Periph_USART1
#define Open207V_USART_TX_PIN GPIO_Pin_9
#define Open207V_USART_TX_GPIO_PORT GPIOA
#define Open207V_USART_TX_GPIO_CLK RCC_AHB1Periph_GPIOA
#define Open207V_USART_TX_SOURCE GPIO_PinSource9
#define Open207V_USART_TX_AF GPIO_AF_USART1
#define Open207V_USART_RX_PIN GPIO_Pin_10
#define Open207V_USART_RX_GPIO_PORT GPIOA
#define Open207V_USART_RX_GPIO_CLK RCC_AHB1Periph_GPIOA
#define Open207V_USART_RX_SOURCE GPIO_PinSource10
#define Open207V_USART_RX_AF GPIO_AF_USART1
#define Open207V_USART_IRQn USART1_IRQn
/**
* @brief Definition for COM port1, connected to I2C1
*/
/* Configure I2C1 pins: PB6->SCL and PB7->SDA */
#define Open207V_I2C I2C1
#define Open207V_I2C_CLK RCC_APB1Periph_I2C1
#define Open207V_I2C_SDA_PIN GPIO_Pin_7
#define Open207V_I2C_SDA_GPIO_PORT GPIOB
#define Open207V_I2C_SDA_GPIO_CLK RCC_AHB1Periph_GPIOB
#define Open207V_I2C_SDA_SOURCE GPIO_PinSource7
#define Open207V_I2C_SDA_AF GPIO_AF_I2C1
#define Open207V_I2C_SCL_PIN GPIO_Pin_6
#define Open207V_I2C_SCL_GPIO_PORT GPIOB
#define Open207V_I2C_SCL_GPIO_CLK RCC_AHB1Periph_GPIOB
#define Open207V_I2C_SCL_SOURCE GPIO_PinSource6
#define Open207V_I2C_SCL_AF GPIO_AF_I2C1
#define I2C_SPEED 100000
#define I2C_SLAVE_ADDRESS7 0x30
/* SPIx Communication boards Interface */
// SPI1 MISO (PA6) MOSI(PA7) CLK(PA5) NSS(PA4)
#define Open207V_RCC_APB2Periph_SPIx RCC_APB2Periph_SPI1
#define Open207V_GPIO_AF_SPIx GPIO_AF_SPI1
#define Open207V_SPIx SPI1
#define Open207V_SPIx_CLK RCC_APB2Periph_SPI1
#define Open207V_SPIx_CLK_INIT RCC_APB1PeriphClockCmd
#define Open207V_SPIx_IRQn SPI1_IRQn
#define Open207V_SPIx_IRQHANDLER SPI1_IRQHandler
#define Open207V_SPIx_SCK_PIN GPIO_Pin_5
#define Open207V_SPIx_SCK_GPIO_PORT GPIOA
#define Open207V_SPIx_SCK_GPIO_CLK RCC_AHB1Periph_GPIOA
#define Open207V_SPIx_SCK_SOURCE GPIO_PinSource5
#define Open207V_SPIx_SCK_AF GPIO_AF_SPI1
#define Open207V_SPIx_MISO_PIN GPIO_Pin_6
#define Open207V_SPIx_MISO_GPIO_PORT GPIOA
#define Open207V_SPIx_MISO_GPIO_CLK RCC_AHB1Periph_GPIOA
#define Open207V_SPIx_MISO_SOURCE GPIO_PinSource6
#define Open207V_SPIx_MISO_AF GPIO_AF_SPI1
#define Open207V_SPIx_MOSI_PIN GPIO_Pin_7
#define Open207V_SPIx_MOSI_GPIO_PORT GPIOA
#define Open207V_SPIx_MOSI_GPIO_CLK RCC_AHB1Periph_GPIOA
#define Open207V_SPIx_MOSI_SOURCE GPIO_PinSource7
#define Open207V_SPIx_MOSI_AF GPIO_AF_SPI1
/**
* @brief Definition for LCD
*/
/* Configure LCD pins: PB1->Reset and PB0->Back Light Control */
#define Open207V_LCD_BackLightControl_PIN GPIO_Pin_0
#define Open207V_LCD_BackLightControl_PORT GPIOB
#define Open207V_LCD_BackLightControl_CLK RCC_AHB1Periph_GPIOB
#define Open207V_LCD_Reset_PIN GPIO_Pin_1
#define Open207V_LCD_Reset_PORT GPIOB
#define Open207V_LCD_Reset_CLK RCC_AHB1Periph_GPIOB
/**
* @brief Definition for TouchPanel
*/
/* Configure TouchPanel pins: TP_CS-> PC4 and TP_IRQ-> PC5 */
#define Open207V_TP_CS_PIN GPIO_Pin_4
#define Open207V_TP_CS_PORT GPIOC
#define Open207V_TP_CS_CLK RCC_AHB1Periph_GPIOC
#define Open207V_TP_IRQ_PIN GPIO_Pin_5
#define Open207V_TP_IRQ_PORT GPIOC
#define Open207V_TP_IRQ_CLK RCC_AHB1Periph_GPIOC
/**
* @brief Definition for TouchPanel SPI
*/
/* Configure TouchPanel pins: TP_CLK-> PB13 and TP_MISO-> PB14 and TP_MOSI-> PB15 */
#define Open207V_RCC_APB1Periph_SPI2 RCC_APB1Periph_SPI2
#define Open207V_GPIO_AF_SPI2 GPIO_AF_SPI2
#define Open207V_SPI2 SPI2
#define Open207V_SPI2_CLK RCC_APB1Periph_SPI2
#define Open207V_SPI2_CLK_INIT RCC_APB1PeriphClockCmd
#define Open207V_SPI2_IRQn SPI1_IRQn
#define Open207V_SPI2_IRQHANDLER SPI1_IRQHandler
#define Open207V_SPI2_SCK_PIN GPIO_Pin_13
#define Open207V_SPI2_SCK_GPIO_PORT GPIOB
#define Open207V_SPI2_SCK_GPIO_CLK RCC_AHB1Periph_GPIOB
#define Open207V_SPI2_SCK_SOURCE GPIO_PinSource13
#define Open207V_SPI2_SCK_AF GPIO_AF_SPI2
#define Open207V_SPI2_MISO_PIN GPIO_Pin_14
#define Open207V_SPI2_MISO_GPIO_PORT GPIOB
#define Open207V_SPI2_MISO_GPIO_CLK RCC_AHB1Periph_GPIOB
#define Open207V_SPI2_MISO_SOURCE GPIO_PinSource14
#define Open207V_SPI2_MISO_AF GPIO_AF_SPI2
#define Open207V_SPI2_MOSI_PIN GPIO_Pin_15
#define Open207V_SPI2_MOSI_GPIO_PORT GPIOB
#define Open207V_SPI2_MOSI_GPIO_CLK RCC_AHB1Periph_GPIOB
#define Open207V_SPI2_MOSI_SOURCE GPIO_PinSource15
#define Open207V_SPI2_MOSI_AF GPIO_AF_SPI2
#endif /*_CONFIG_H*/
@@ -0,0 +1,199 @@
/*********************************************************************************************************
*
* File : main.c
* Hardware Environment:
* Build Environment : RealView MDK-ARM Version: 4.20
* Version : V1.0
* By :
*
* (c) Copyright 2005-2011, WaveShare
* http://www.waveshare.net
* All Rights Reserved
*
*********************************************************************************************************/
/* Includes ------------------------------------------------------------------*/
#include <includes.h>
/* Private variables ---------------------------------------------------------*/
static OS_STK App_TaskStartStk[APP_TASK_START_STK_SIZE];
/* Private function prototypes -----------------------------------------------*/
#if (OS_VIEW_MODULE == DEF_ENABLED)
extern void App_OSViewTaskCreate (void);
#endif
static void App_TaskCreate (void);
static void App_TaskStart (void *p_arg);
extern void App_UCGUI_TaskCreate (void);
static void GPIO_Configuration (void);
/*
*********************************************************************************************************
* main()
*
* Description : This is the standard entry point for C code. It is assumed that your code will call
* main() once you have performed all necessary initialization.
*
* Argument(s) : none.
*
* Return(s) : none.
*********************************************************************************************************
*/
INT32S main (void)
{
CPU_INT08U os_err;
os_err = os_err; /* prevent warning... */
/* Note: 由于使用UCOS, 在OS运行之前运行,注意别使能任何中断. */
CPU_IntDis(); /* Disable all ints until we are ready to accept them. */
OSInit(); /* Initialize "uC/OS-II, The Real-Time Kernel". */
os_err = OSTaskCreateExt((void (*)(void *)) App_TaskStart, /* Create the start task. */
(void * ) 0,
(OS_STK * )&App_TaskStartStk[APP_TASK_START_STK_SIZE - 1],
(INT8U ) APP_TASK_START_PRIO,
(INT16U ) APP_TASK_START_PRIO,
(OS_STK * )&App_TaskStartStk[0],
(INT32U ) APP_TASK_START_STK_SIZE,
(void * )0,
(INT16U )(OS_TASK_OPT_STK_CLR | OS_TASK_OPT_STK_CHK));
#if OS_TASK_NAME_EN > 0
OSTaskNameSet(APP_TASK_START_PRIO, (CPU_INT08U *)"Start Task", &os_err);
#endif
OSStart(); /* Start multitasking (i.e. give control to uC/OS-II). */
return (0);
}
/*
*********************************************************************************************************
* App_TaskStart()
*
* Description : The startup task. The uC/OS-II ticker should only be initialize once multitasking starts.
*
* Argument(s) : p_arg Argument passed to 'App_TaskStart()' by 'OSTaskCreate()'.
*
* Return(s) : none.
*
* Caller(s) : This is a task.
*
* Note(s) : none.
*********************************************************************************************************
*/
static void App_TaskStart (void *p_arg)
{
(void)p_arg;
/*************** Init hardware ***************/
GPIO_Configuration();
OS_CPU_SysTickInit(); /* Initialize the SysTick. */
#if (OS_TASK_STAT_EN > 0)
OSStatInit(); /* Determine CPU capacity. */
#endif
App_TaskCreate(); /* Create application tasks. */
for(;;)
{
OSTimeDlyHMSM(0, 1, 0, 0); /* Delay One minute */
}
}
/*
*********************************************************************************************************
* App_TaskCreate()
*
* Description : Create the application tasks.
*
* Argument(s) : none.
*
* Return(s) : none.
*
* Caller(s) : App_TaskStart().
*
* Note(s) : none.
*********************************************************************************************************
*/
static void App_TaskCreate (void)
{
#if (OS_VIEW_MODULE == DEF_ENABLED)
App_OSViewTaskCreate();
#endif
App_UCGUI_TaskCreate();
}
/*******************************************************************************
* Function Name : GPIO_Configuration
* Description : Configure GPIO Pin
* Input : None
* Output : None
* Return : None
* Attention : None
*******************************************************************************/
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* GPIOF Periph clock enable */
RCC_AHB1PeriphClockCmd(LED1_RCC_AHBPeriph | LED2_RCC_AHBPeriph | LED3_RCC_AHBPeriph | LED4_RCC_AHBPeriph, ENABLE);
/* Configure PF6 PF7 PF8 PF9 in output pushpull mode */
GPIO_InitStructure.GPIO_Pin = LED1_Pin;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(LED1_Port, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = LED2_Pin;
GPIO_Init(LED2_Port, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = LED3_Pin;
GPIO_Init(LED3_Port, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = LED4_Pin;
GPIO_Init(LED4_Port, &GPIO_InitStructure);
}
#ifdef USE_FULL_ASSERT
/**
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
* @param file: pointer to the source file name
* @param line: assert_param error line source number
* @retval None
*/
void assert_failed(uint8_t* file, uint32_t line)
{
/* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
/* Infinite loop */
while (1)
{
}
}
#endif
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
@@ -0,0 +1,88 @@
/**
******************************************************************************
* @file I2C/EEPROM/stm32f4xx_conf.h
* @author MCD Application Team
* @version V1.0.0
* @date 30-September-2011
* @brief Library configuration file.
******************************************************************************
* @attention
*
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
* TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
*
* <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32F4xx_CONF_H
#define __STM32F4xx_CONF_H
/* Includes ------------------------------------------------------------------*/
/* Uncomment the line below to enable peripheral header file inclusion */
#include "stm32f4xx_adc.h"
#include "stm32f4xx_can.h"
#include "stm32f4xx_crc.h"
#include "stm32f4xx_cryp.h"
#include "stm32f4xx_dac.h"
#include "stm32f4xx_dbgmcu.h"
#include "stm32f4xx_dcmi.h"
#include "stm32f4xx_dma.h"
#include "stm32f4xx_exti.h"
#include "stm32f4xx_flash.h"
#include "stm32f4xx_fsmc.h"
#include "stm32f4xx_hash.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_i2c.h"
#include "stm32f4xx_iwdg.h"
#include "stm32f4xx_pwr.h"
#include "stm32f4xx_rcc.h"
#include "stm32f4xx_rng.h"
#include "stm32f4xx_rtc.h"
#include "stm32f4xx_sdio.h"
#include "stm32f4xx_spi.h"
#include "stm32f4xx_syscfg.h"
#include "stm32f4xx_tim.h"
#include "stm32f4xx_usart.h"
#include "stm32f4xx_wwdg.h"
#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */
/* Exported types ------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/
/* If an external clock source is used, then the value of the following define
should be set to the value of the external clock source, else, if no external
clock is used, keep this define commented */
/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */
/* Uncomment the line below to expanse the "assert_param" macro in the
Standard Peripheral Library drivers code */
/* #define USE_FULL_ASSERT 1 */
/* Exported macro ------------------------------------------------------------*/
#ifdef USE_FULL_ASSERT
/**
* @brief The assert_param macro is used for function's parameters check.
* @param expr: If expr is false, it calls assert_failed function
* which reports the name of the source file and the source
* line number of the call that failed.
* If expr is true, it returns no value.
* @retval None
*/
#define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
/* Exported functions ------------------------------------------------------- */
void assert_failed(uint8_t* file, uint32_t line);
#else
#define assert_param(expr) ((void)0)
#endif /* USE_FULL_ASSERT */
#endif /* __STM32F4xx_CONF_H */
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
@@ -0,0 +1,190 @@
/**
******************************************************************************
* @file I2C/EEPROM/stm32f4xx_it.c
* @author MCD Application Team
* @version V1.0.0
* @date 30-September-2011
* @brief Main Interrupt Service Routines.
* This file provides template for all exceptions handler and
* peripherals interrupt service routine.
******************************************************************************
* @attention
*
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
* TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
*
* <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
******************************************************************************
*/
/* Includes ------------------------------------------------------------------*/
#include <includes.h>
#if ( OS_VIEW_MODULE == DEF_ENABLED )
extern void OSView_RxTxISRHandler(void);
#endif
/** @addtogroup STM32F4xx_StdPeriph_Examples
* @{
*/
/** @addtogroup I2C_EEPROM
* @{
*/
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
/******************************************************************************/
/* Cortex-M4 Processor Exceptions Handlers */
/******************************************************************************/
/**
* @brief This function handles NMI exception.
* @param None
* @retval None
*/
void NMI_Handler(void)
{
}
/**
* @brief This function handles Hard Fault exception.
* @param None
* @retval None
*/
void HardFault_Handler(void)
{
/* Go to infinite loop when Hard Fault exception occurs */
while (1)
{
}
}
/**
* @brief This function handles Memory Manage exception.
* @param None
* @retval None
*/
void MemManage_Handler(void)
{
/* Go to infinite loop when Memory Manage exception occurs */
while (1)
{
}
}
/**
* @brief This function handles Bus Fault exception.
* @param None
* @retval None
*/
void BusFault_Handler(void)
{
/* Go to infinite loop when Bus Fault exception occurs */
while (1)
{
}
}
/**
* @brief This function handles Usage Fault exception.
* @param None
* @retval None
*/
void UsageFault_Handler(void)
{
/* Go to infinite loop when Usage Fault exception occurs */
while (1)
{
}
}
/**
* @brief This function handles SVCall exception.
* @param None
* @retval None
*/
void SVC_Handler(void)
{
}
/**
* @brief This function handles Debug Monitor exception.
* @param None
* @retval None
*/
void DebugMon_Handler(void)
{
}
/**
* @brief This function handles PendSVC exception.
* @param None
* @retval None
*/
//void PendSV_Handler(void)
//{
//}
/**
* @brief This function handles SysTick Handler.
* @param None
* @retval None
*/
void SysTick_Handler(void)
{
CPU_SR cpu_sr;
OS_ENTER_CRITICAL(); /* Tell uC/OS-II that we are starting an ISR */
OSIntNesting++;
OS_EXIT_CRITICAL();
OSTimeTick(); /* Call uC/OS-II's OSTimeTick() */
OSIntExit(); /* Tell uC/OS-II that we are leaving the ISR */
}
/**
* @brief This function handles USART1 global interrupt request.
* @param None
* @retval None
*/
/******************************************************************************/
/* STM32F4xx Peripherals Interrupt Handlers */
/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */
/* available peripheral interrupt handler's name please refer to the startup */
/* file (startup_stm32f4xx.s). */
/******************************************************************************/
void USART1_IRQHandler(void)
{
#if ( OS_VIEW_MODULE == DEF_ENABLED )
OSView_RxTxISRHandler();
#endif
}
/**
* @brief This function handles PPP interrupt request.
* @param None
* @retval None
*/
/*void PPP_IRQHandler(void)
{
}*/
/**
* @}
*/
/**
* @}
*/
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
@@ -0,0 +1,54 @@
/**
******************************************************************************
* @file I2C/EEPROM/stm32f4xx_it.h
* @author MCD Application Team
* @version V1.0.0
* @date 30-September-2011
* @brief This file contains the headers of the interrupt handlers.
******************************************************************************
* @attention
*
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
* TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
*
* <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32F4xx_IT_H
#define __STM32F4xx_IT_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32f4xx.h"
/* Exported types ------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/
/* Exported macro ------------------------------------------------------------*/
/* Exported functions ------------------------------------------------------- */
void NMI_Handler(void);
void HardFault_Handler(void);
void MemManage_Handler(void);
void BusFault_Handler(void);
void UsageFault_Handler(void);
void SVC_Handler(void);
void DebugMon_Handler(void);
void PendSV_Handler(void);
void SysTick_Handler(void);
#ifdef __cplusplus
}
#endif
#endif /* __STM32F4xx_IT_H */
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
@@ -0,0 +1,538 @@
/*
*********************************************************************************************************
* uC/CPU
* CPU CONFIGURATION & PORT LAYER
*
* (c) Copyright 2004-2008; Micrium, Inc.; Weston, FL
*
* All rights reserved. Protected by international copyright laws.
*
* uC/CPU is provided in source form for FREE evaluation, for educational
* use or peaceful research. If you plan on using uC/CPU in a commercial
* product you need to contact Micrium to properly license its use in your
* product. We provide ALL the source code for your convenience and to
* help you experience uC/CPU. The fact that the source code is provided
* does NOT mean that you can use it without paying a licensing fee.
*
* Knowledge of the source code may NOT be used to develop a similar product.
*
* Please help us continue to provide the Embedded community with the finest
* software available. Your honesty is greatly appreciated.
*********************************************************************************************************
*/
/*
*********************************************************************************************************
*
* CPU PORT FILE
*
* ARM-Cortex-M3
* RealView Development Suite
* RealView Microcontroller Development Kit (MDK)
* ARM Developer Suite (ADS)
* Keil uVision
*
* Filename : cpu.h
* Version : V1.19
* Programmer(s) : JJL
* BAN
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* MODULE
*********************************************************************************************************
*/
#ifndef CPU_CFG_MODULE_PRESENT
#define CPU_CFG_MODULE_PRESENT
/*
*********************************************************************************************************
* CPU INCLUDE FILES
*
* Note(s) : (1) The following CPU files are located in the following directories :
*
* (a) \<CPU-Compiler Directory>\cpu_def.h
*
* (b) \<CPU-Compiler Directory>\<cpu>\<compiler>\cpu*.*
*
* where
* <CPU-Compiler Directory> directory path for common CPU-compiler software
* <cpu> directory name for specific CPU
* <compiler> directory name for specific compiler
*
* (2) Compiler MUST be configured to include the '\<CPU-Compiler Directory>\' directory & the
* specific CPU-compiler directory as additional include path directories.
*********************************************************************************************************
*/
#include <cpu_def.h>
/*$PAGE*/
/*
*********************************************************************************************************
* CONFIGURE STANDARD DATA TYPES
*
* Note(s) : (1) Configure standard data types according to CPU-/compiler-specifications.
*
* (2) (a) (1) 'CPU_FNCT_VOID' data type defined to replace the commonly-used function pointer
* data type of a pointer to a function which returns void & has no arguments.
*
* (2) Example function pointer usage :
*
* CPU_FNCT_VOID FnctName;
*
* FnctName();
*
* (b) (1) 'CPU_FNCT_PTR' data type defined to replace the commonly-used function pointer
* data type of a pointer to a function which returns void & has a single void
* pointer argument.
*
* (2) Example function pointer usage :
*
* CPU_FNCT_PTR FnctName;
* void *pobj
*
* FnctName(pobj);
*********************************************************************************************************
*/
typedef void CPU_VOID;
typedef unsigned char CPU_CHAR; /* 8-bit character */
typedef unsigned char CPU_BOOLEAN; /* 8-bit boolean or logical */
typedef unsigned char CPU_INT08U; /* 8-bit unsigned integer */
typedef signed char CPU_INT08S; /* 8-bit signed integer */
typedef unsigned short CPU_INT16U; /* 16-bit unsigned integer */
typedef signed short CPU_INT16S; /* 16-bit signed integer */
typedef unsigned int CPU_INT32U; /* 32-bit unsigned integer */
typedef signed int CPU_INT32S; /* 32-bit signed integer */
typedef unsigned long long CPU_INT64U; /* 64-bit unsigned integer */
typedef signed long long CPU_INT64S; /* 64-bit signed integer */
typedef float CPU_FP32; /* 32-bit floating point */
typedef double CPU_FP64; /* 64-bit floating point */
typedef void (*CPU_FNCT_VOID)(void); /* See Note #2a. */
typedef void (*CPU_FNCT_PTR )(void *); /* See Note #2b. */
/*$PAGE*/
/*
*********************************************************************************************************
* CPU WORD CONFIGURATION
*
* Note(s) : (1) Configure CPU_CFG_ADDR_SIZE & CPU_CFG_DATA_SIZE with CPU's word sizes :
*
* CPU_WORD_SIZE_08 8-bit word size
* CPU_WORD_SIZE_16 16-bit word size
* CPU_WORD_SIZE_32 32-bit word size
* CPU_WORD_SIZE_64 64-bit word size See Note #1a
*
* (a) 64-bit word size NOT currently supported.
*
* (2) Configure CPU_CFG_ENDIAN_TYPE with CPU's data-word-memory order :
*
* CPU_ENDIAN_TYPE_BIG Big- endian word order (CPU words' most significant
* octet @ lowest memory address)
* CPU_ENDIAN_TYPE_LITTLE Little-endian word order (CPU words' least significant
* octet @ lowest memory address)
*********************************************************************************************************
*/
/* Define CPU word sizes (see Note #1) : */
#define CPU_CFG_ADDR_SIZE CPU_WORD_SIZE_32 /* Defines CPU address word size. */
#define CPU_CFG_DATA_SIZE CPU_WORD_SIZE_32 /* Defines CPU data word size. */
#define CPU_CFG_ENDIAN_TYPE CPU_ENDIAN_TYPE_LITTLE /* Defines CPU data word-memory order. */
/*
*********************************************************************************************************
* CONFIGURE CPU ADDRESS & DATA TYPES
*********************************************************************************************************
*/
/* CPU address type based on address bus size. */
#if (CPU_CFG_ADDR_SIZE == CPU_WORD_SIZE_32)
typedef CPU_INT32U CPU_ADDR;
#elif (CPU_CFG_ADDR_SIZE == CPU_WORD_SIZE_16)
typedef CPU_INT16U CPU_ADDR;
#else
typedef CPU_INT08U CPU_ADDR;
#endif
/* CPU data type based on data bus size. */
#if (CPU_CFG_DATA_SIZE == CPU_WORD_SIZE_32)
typedef CPU_INT32U CPU_DATA;
#elif (CPU_CFG_DATA_SIZE == CPU_WORD_SIZE_16)
typedef CPU_INT16U CPU_DATA;
#else
typedef CPU_INT08U CPU_DATA;
#endif
typedef CPU_DATA CPU_ALIGN; /* Defines CPU data-word-alignment size. */
typedef CPU_DATA CPU_SIZE_T; /* Defines CPU standard 'size_t' size. */
/*$PAGE*/
/*
*********************************************************************************************************
* CRITICAL SECTION CONFIGURATION
*
* Note(s) : (1) Configure CPU_CFG_CRITICAL_METHOD with CPU's/compiler's critical section method :
*
* Enter/Exit critical sections by ...
*
* CPU_CRITICAL_METHOD_INT_DIS_EN Disable/Enable interrupts
* CPU_CRITICAL_METHOD_STATUS_STK Push/Pop interrupt status onto stack
* CPU_CRITICAL_METHOD_STATUS_LOCAL Save/Restore interrupt status to local variable
*
* (a) CPU_CRITICAL_METHOD_INT_DIS_EN is NOT a preferred method since it does NOT support
* multiple levels of interrupts. However, with some CPUs/compilers, this is the only
* available method.
*
* (b) CPU_CRITICAL_METHOD_STATUS_STK is one preferred method since it DOES support multiple
* levels of interrupts. However, this method assumes that the compiler allows in-line
* assembly AND will correctly modify the local stack pointer when interrupt status is
* pushed/popped onto the stack.
*
* (c) CPU_CRITICAL_METHOD_STATUS_LOCAL is one preferred method since it DOES support multiple
* levels of interrupts. However, this method assumes that the compiler provides C-level
* &/or assembly-level functionality for the following :
*
* ENTER CRITICAL SECTION :
* (a) Save interrupt status into a local variable
* (b) Disable interrupts
*
* EXIT CRITICAL SECTION :
* (c) Restore interrupt status from a local variable
*
* (2) Critical section macro's most likely require inline assembly. If the compiler does NOT
* allow inline assembly in C source files, critical section macro's MUST call an assembly
* subroutine defined in a 'cpu_a.asm' file located in the following software directory :
*
* \<CPU-Compiler Directory>\<cpu>\<compiler>\
*
* where
* <CPU-Compiler Directory> directory path for common CPU-compiler software
* <cpu> directory name for specific CPU
* <compiler> directory name for specific compiler
*
* (3) To save/restore interrupt status, a local variable 'cpu_sr' of type 'CPU_SR' MAY need to
* be declared (e.g. if 'CPU_CRITICAL_METHOD_STATUS_LOCAL' method is configured). Configure
* 'CPU_SR' data type with the appropriate-sized CPU data type large enough to completely
* store the CPU's/compiler's status word.
*********************************************************************************************************
*/
typedef CPU_INT32U CPU_SR; /* Defines CPU status register size (see Note #3). */
/* Configure CPU critical method (see Note #1) : */
#define CPU_CFG_CRITICAL_METHOD CPU_CRITICAL_METHOD_STATUS_LOCAL
#define CPU_CRITICAL_ENTER() { cpu_sr = CPU_SR_Save(); }
#define CPU_CRITICAL_EXIT() { CPU_SR_Restore(cpu_sr); }
/*
*********************************************************************************************************
* FUNCTION PROTOTYPES
*********************************************************************************************************
*/
void CPU_IntDis (void);
void CPU_IntEn (void);
void CPU_IntSrcDis (CPU_INT08U pos);
void CPU_IntSrcEn (CPU_INT08U pos);
CPU_INT16S CPU_IntSrcPrioGet(CPU_INT08U pos);
void CPU_IntSrcPrioSet(CPU_INT08U pos,
CPU_INT08U prio);
CPU_SR CPU_SR_Save (void);
void CPU_SR_Restore (CPU_SR cpu_sr);
CPU_INT32U CPU_CntLeadZeros (CPU_INT32U val);
CPU_INT32U CPU_RevBits (CPU_INT32U val);
void CPU_WaitForInt (void);
void CPU_WaitForExcept(void);
void CPU_BitBandClr (CPU_ADDR addr,
CPU_INT08U bit_nbr);
void CPU_BitBandSet (CPU_ADDR addr,
CPU_INT08U bit_nbr);
/*
*********************************************************************************************************
* INTERRUPT SOURCES
*********************************************************************************************************
*/
#define CPU_INT_STK_PTR 0
#define CPU_INT_RESET 1
#define CPU_INT_NMI 2
#define CPU_INT_HFAULT 3
#define CPU_INT_MEM 4
#define CPU_INT_BUSFAULT 5
#define CPU_INT_USAGEFAULT 6
#define CPU_INT_RSVD_07 7
#define CPU_INT_RSVD_08 8
#define CPU_INT_RSVD_09 9
#define CPU_INT_RSVD_10 10
#define CPU_INT_SVCALL 11
#define CPU_INT_DBGMON 12
#define CPU_INT_RSVD_13 13
#define CPU_INT_PENDSV 14
#define CPU_INT_SYSTICK 15
/*
*********************************************************************************************************
* CPU REGISTERS
*********************************************************************************************************
*/
#define CPU_REG_NVIC_NVIC (*((volatile CPU_INT32U *)(0xE000E004))) /* Int Ctrl'er Type Reg. */
#define CPU_REG_NVIC_ST_CTRL (*((volatile CPU_INT32U *)(0xE000E010))) /* SysTick Ctrl & Status Reg. */
#define CPU_REG_NVIC_ST_RELOAD (*((volatile CPU_INT32U *)(0xE000E014))) /* SysTick Reload Value Reg. */
#define CPU_REG_NVIC_ST_CURRENT (*((volatile CPU_INT32U *)(0xE000E018))) /* SysTick Current Value Reg. */
#define CPU_REG_NVIC_ST_CAL (*((volatile CPU_INT32U *)(0xE000E01C))) /* SysTick Calibration Value Reg. */
/* IRQ Set En Reg. */
#define CPU_REG_NVIC_SETEN(n) (*((volatile CPU_INT32U *)(0xE000E100 + (n) * 4)))
/* IRQ Clr En Reg. */
#define CPU_REG_NVIC_CLREN(n) (*((volatile CPU_INT32U *)(0xE000E180 + (n) * 4)))
/* IRQ Set Pending Reg. */
#define CPU_REG_NVIC_SETPEND(n) (*((volatile CPU_INT32U *)(0xE000E200 + (n) * 4)))
/* IRQ Clr Pending Reg. */
#define CPU_REG_NVIC_CLRPEND(n) (*((volatile CPU_INT32U *)(0xE000E280 + (n) * 4)))
/* IRQ Active Reg. */
#define CPU_REG_NVIC_ACTIVE(n) (*((volatile CPU_INT32U *)(0xE000E300 + (n) * 4)))
/* IRQ Prio Reg. */
#define CPU_REG_NVIC_PRIO(n) (*((volatile CPU_INT32U *)(0xE000E400 + (n) * 4)))
#define CPU_REG_NVIC_CPUID (*((volatile CPU_INT32U *)(0xE000ED00))) /* CPUID Base Reg. */
#define CPU_REG_NVIC_ICSR (*((volatile CPU_INT32U *)(0xE000ED04))) /* Int Ctrl State Reg. */
#define CPU_REG_NVIC_VTOR (*((volatile CPU_INT32U *)(0xE000ED08))) /* Vect Tbl Offset Reg. */
#define CPU_REG_NVIC_AIRCR (*((volatile CPU_INT32U *)(0xE000ED0C))) /* App Int/Reset Ctrl Reg. */
#define CPU_REG_NVIC_SCR (*((volatile CPU_INT32U *)(0xE000ED10))) /* System Ctrl Reg. */
#define CPU_REG_NVIC_CCR (*((volatile CPU_INT32U *)(0xE000ED14))) /* Cfg Ctrl Reg. */
#define CPU_REG_NVIC_SHPRI1 (*((volatile CPU_INT32U *)(0xE000ED18))) /* System Handlers 4 to 7 Prio. */
#define CPU_REG_NVIC_SHPRI2 (*((volatile CPU_INT32U *)(0xE000ED1C))) /* System Handlers 8 to 11 Prio. */
#define CPU_REG_NVIC_SHPRI3 (*((volatile CPU_INT32U *)(0xE000ED20))) /* System Handlers 12 to 15 Prio. */
#define CPU_REG_NVIC_SHCSR (*((volatile CPU_INT32U *)(0xE000ED24))) /* System Handler Ctrl & State Reg. */
#define CPU_REG_NVIC_CFSR (*((volatile CPU_INT32U *)(0xE000ED28))) /* Configurable Fault Status Reg. */
#define CPU_REG_NVIC_HFSR (*((volatile CPU_INT32U *)(0xE000ED2C))) /* Hard Fault Status Reg. */
#define CPU_REG_NVIC_DFSR (*((volatile CPU_INT32U *)(0xE000ED30))) /* Debug Fault Status Reg. */
#define CPU_REG_NVIC_MMFAR (*((volatile CPU_INT32U *)(0xE000ED34))) /* Mem Manage Addr Reg. */
#define CPU_REG_NVIC_BFAR (*((volatile CPU_INT32U *)(0xE000ED38))) /* Bus Fault Addr Reg. */
#define CPU_REG_NVIC_AFSR (*((volatile CPU_INT32U *)(0xE000ED3C))) /* Aux Fault Status Reg. */
#define CPU_REG_NVIC_PFR0 (*((volatile CPU_INT32U *)(0xE000ED40))) /* Processor Feature Reg 0. */
#define CPU_REG_NVIC_PFR1 (*((volatile CPU_INT32U *)(0xE000ED44))) /* Processor Feature Reg 1. */
#define CPU_REG_NVIC_DFR0 (*((volatile CPU_INT32U *)(0xE000ED48))) /* Debug Feature Reg 0. */
#define CPU_REG_NVIC_AFR0 (*((volatile CPU_INT32U *)(0xE000ED4C))) /* Aux Feature Reg 0. */
#define CPU_REG_NVIC_MMFR0 (*((volatile CPU_INT32U *)(0xE000ED50))) /* Memory Model Feature Reg 0. */
#define CPU_REG_NVIC_MMFR1 (*((volatile CPU_INT32U *)(0xE000ED54))) /* Memory Model Feature Reg 1. */
#define CPU_REG_NVIC_MMFR2 (*((volatile CPU_INT32U *)(0xE000ED58))) /* Memory Model Feature Reg 2. */
#define CPU_REG_NVIC_MMFR3 (*((volatile CPU_INT32U *)(0xE000ED5C))) /* Memory Model Feature Reg 3. */
#define CPU_REG_NVIC_ISAFR0 (*((volatile CPU_INT32U *)(0xE000ED60))) /* ISA Feature Reg 0. */
#define CPU_REG_NVIC_ISAFR1 (*((volatile CPU_INT32U *)(0xE000ED64))) /* ISA Feature Reg 1. */
#define CPU_REG_NVIC_ISAFR2 (*((volatile CPU_INT32U *)(0xE000ED68))) /* ISA Feature Reg 2. */
#define CPU_REG_NVIC_ISAFR3 (*((volatile CPU_INT32U *)(0xE000ED6C))) /* ISA Feature Reg 3. */
#define CPU_REG_NVIC_ISAFR4 (*((volatile CPU_INT32U *)(0xE000ED70))) /* ISA Feature Reg 4. */
#define CPU_REG_NVIC_SW_TRIG (*((volatile CPU_INT32U *)(0xE000EF00))) /* Software Trigger Int Reg. */
#define CPU_REG_MPU_TYPE (*((volatile CPU_INT32U *)(0xE000ED90))) /* MPU Type Reg. */
#define CPU_REG_MPU_CTRL (*((volatile CPU_INT32U *)(0xE000ED94))) /* MPU Ctrl Reg. */
#define CPU_REG_MPU_REG_NBR (*((volatile CPU_INT32U *)(0xE000ED98))) /* MPU Region Nbr Reg. */
#define CPU_REG_MPU_REG_BASE (*((volatile CPU_INT32U *)(0xE000ED9C))) /* MPU Region Base Addr Reg. */
#define CPU_REG_MPU_REG_ATTR (*((volatile CPU_INT32U *)(0xE000EDA0))) /* MPU Region Attrib & Size Reg. */
#define CPU_REG_DBG_CTRL (*((volatile CPU_INT32U *)(0xE000EDF0))) /* Debug Halting Ctrl & Status Reg. */
#define CPU_REG_DBG_SELECT (*((volatile CPU_INT32U *)(0xE000EDF4))) /* Debug Core Reg Selector Reg. */
#define CPU_REG_DBG_DATA (*((volatile CPU_INT32U *)(0xE000EDF8))) /* Debug Core Reg Data Reg. */
#define CPU_REG_DBG_INT (*((volatile CPU_INT32U *)(0xE000EDFC))) /* Debug Except & Monitor Ctrl Reg. */
/*
*********************************************************************************************************
* CPU REGISTER BITS
*********************************************************************************************************
*/
/* ---------- SYSTICK CTRL & STATUS REG BITS ---------- */
#define CPU_REG_NVIC_ST_CTRL_COUNTFLAG DEF_BIT_16
#define CPU_REG_NVIC_ST_CTRL_CLKSOURCE DEF_BIT_02
#define CPU_REG_NVIC_ST_CTRL_TICKINT DEF_BIT_01
#define CPU_REG_NVIC_ST_CTRL_ENABLE DEF_BIT_00
/* -------- SYSTICK CALIBRATION VALUE REG BITS -------- */
#define CPU_REG_NVIC_ST_CAL_NOREF DEF_BIT_31
#define CPU_REG_NVIC_ST_CAL_SKEW DEF_BIT_30
/* -------------- INT CTRL STATE REG BITS ------------- */
#define CPU_REG_NVIC_ICSR_NMIPENDSET DEF_BIT_31
#define CPU_REG_NVIC_ICSR_PENDSVSET DEF_BIT_28
#define CPU_REG_NVIC_ICSR_PENDSVCLR DEF_BIT_27
#define CPU_REG_NVIC_ICSR_PENDSTSET DEF_BIT_26
#define CPU_REG_NVIC_ICSR_PENDSTCLR DEF_BIT_25
#define CPU_REG_NVIC_ICSR_ISRPREEMPT DEF_BIT_23
#define CPU_REG_NVIC_ICSR_ISRPENDING DEF_BIT_22
#define CPU_REG_NVIC_ICSR_RETTOBASE DEF_BIT_11
/* ------------- VECT TBL OFFSET REG BITS ------------- */
#define CPU_REG_NVIC_VTOR_TBLBASE DEF_BIT_29
/* ------------ APP INT/RESET CTRL REG BITS ----------- */
#define CPU_REG_NVIC_AIRCR_ENDIANNESS DEF_BIT_15
#define CPU_REG_NVIC_AIRCR_SYSRESETREQ DEF_BIT_02
#define CPU_REG_NVIC_AIRCR_VECTCLRACTIVE DEF_BIT_01
#define CPU_REG_NVIC_AIRCR_VECTRESET DEF_BIT_00
/* --------------- SYSTEM CTRL REG BITS --------------- */
#define CPU_REG_NVIC_SCR_SEVONPEND DEF_BIT_04
#define CPU_REG_NVIC_SCR_SLEEPDEEP DEF_BIT_02
#define CPU_REG_NVIC_SCR_SLEEPONEXIT DEF_BIT_01
/* ----------------- CFG CTRL REG BITS ---------------- */
#define CPU_REG_NVIC_CCR_STKALIGN DEF_BIT_09
#define CPU_REG_NVIC_CCR_BFHFNMIGN DEF_BIT_08
#define CPU_REG_NVIC_CCR_DIV_0_TRP DEF_BIT_04
#define CPU_REG_NVIC_CCR_UNALIGN_TRP DEF_BIT_03
#define CPU_REG_NVIC_CCR_USERSETMPEND DEF_BIT_01
#define CPU_REG_NVIC_CCR_NONBASETHRDENA DEF_BIT_00
/* ------- SYSTEM HANDLER CTRL & STATE REG BITS ------- */
#define CPU_REG_NVIC_SHCSR_USGFAULTENA DEF_BIT_18
#define CPU_REG_NVIC_SHCSR_BUSFAULTENA DEF_BIT_17
#define CPU_REG_NVIC_SHCSR_MEMFAULTENA DEF_BIT_16
#define CPU_REG_NVIC_SHCSR_SVCALLPENDED DEF_BIT_15
#define CPU_REG_NVIC_SHCSR_BUSFAULTPENDED DEF_BIT_14
#define CPU_REG_NVIC_SHCSR_MEMFAULTPENDED DEF_BIT_13
#define CPU_REG_NVIC_SHCSR_USGFAULTPENDED DEF_BIT_12
#define CPU_REG_NVIC_SHCSR_SYSTICKACT DEF_BIT_11
#define CPU_REG_NVIC_SHCSR_PENDSVACT DEF_BIT_10
#define CPU_REG_NVIC_SHCSR_MONITORACT DEF_BIT_08
#define CPU_REG_NVIC_SHCSR_SVCALLACT DEF_BIT_07
#define CPU_REG_NVIC_SHCSR_USGFAULTACT DEF_BIT_03
#define CPU_REG_NVIC_SHCSR_BUSFAULTACT DEF_BIT_01
#define CPU_REG_NVIC_SHCSR_MEMFAULTACT DEF_BIT_00
/* -------- CONFIGURABLE FAULT STATUS REG BITS -------- */
#define CPU_REG_NVIC_CFSR_DIVBYZERO DEF_BIT_25
#define CPU_REG_NVIC_CFSR_UNALIGNED DEF_BIT_24
#define CPU_REG_NVIC_CFSR_NOCP DEF_BIT_19
#define CPU_REG_NVIC_CFSR_INVPC DEF_BIT_18
#define CPU_REG_NVIC_CFSR_INVSTATE DEF_BIT_17
#define CPU_REG_NVIC_CFSR_UNDEFINSTR DEF_BIT_16
#define CPU_REG_NVIC_CFSR_BFARVALID DEF_BIT_15
#define CPU_REG_NVIC_CFSR_STKERR DEF_BIT_12
#define CPU_REG_NVIC_CFSR_UNSTKERR DEF_BIT_11
#define CPU_REG_NVIC_CFSR_IMPRECISERR DEF_BIT_10
#define CPU_REG_NVIC_CFSR_PRECISERR DEF_BIT_09
#define CPU_REG_NVIC_CFSR_IBUSERR DEF_BIT_08
#define CPU_REG_NVIC_CFSR_MMARVALID DEF_BIT_07
#define CPU_REG_NVIC_CFSR_MSTKERR DEF_BIT_04
#define CPU_REG_NVIC_CFSR_MUNSTKERR DEF_BIT_03
#define CPU_REG_NVIC_CFSR_DACCVIOL DEF_BIT_01
#define CPU_REG_NVIC_CFSR_IACCVIOL DEF_BIT_00
/* ------------ HARD FAULT STATUS REG BITS ------------ */
#define CPU_REG_NVIC_HFSR_DEBUGEVT DEF_BIT_31
#define CPU_REG_NVIC_HFSR_FORCED DEF_BIT_30
#define CPU_REG_NVIC_HFSR_VECTTBL DEF_BIT_01
/* ------------ DEBUG FAULT STATUS REG BITS ----------- */
#define CPU_REG_NVIC_DFSR_EXTERNAL DEF_BIT_04
#define CPU_REG_NVIC_DFSR_VCATCH DEF_BIT_03
#define CPU_REG_NVIC_DFSR_DWTTRAP DEF_BIT_02
#define CPU_REG_NVIC_DFSR_BKPT DEF_BIT_01
#define CPU_REG_NVIC_DFSR_HALTED DEF_BIT_00
/*$PAGE*/
/*
*********************************************************************************************************
* CONFIGURATION ERRORS
*********************************************************************************************************
*/
#ifndef CPU_CFG_ADDR_SIZE
#error "CPU_CFG_ADDR_SIZE not #define'd in 'cpu.h' "
#error " [MUST be CPU_WORD_SIZE_08 8-bit alignment]"
#error " [ || CPU_WORD_SIZE_16 16-bit alignment]"
#error " [ || CPU_WORD_SIZE_32 32-bit alignment]"
#elif ((CPU_CFG_ADDR_SIZE != CPU_WORD_SIZE_08) && \
(CPU_CFG_ADDR_SIZE != CPU_WORD_SIZE_16) && \
(CPU_CFG_ADDR_SIZE != CPU_WORD_SIZE_32))
#error "CPU_CFG_ADDR_SIZE illegally #define'd in 'cpu.h' "
#error " [MUST be CPU_WORD_SIZE_08 8-bit alignment]"
#error " [ || CPU_WORD_SIZE_16 16-bit alignment]"
#error " [ || CPU_WORD_SIZE_32 32-bit alignment]"
#endif
#ifndef CPU_CFG_DATA_SIZE
#error "CPU_CFG_DATA_SIZE not #define'd in 'cpu.h' "
#error " [MUST be CPU_WORD_SIZE_08 8-bit alignment]"
#error " [ || CPU_WORD_SIZE_16 16-bit alignment]"
#error " [ || CPU_WORD_SIZE_32 32-bit alignment]"
#elif ((CPU_CFG_DATA_SIZE != CPU_WORD_SIZE_08) && \
(CPU_CFG_DATA_SIZE != CPU_WORD_SIZE_16) && \
(CPU_CFG_DATA_SIZE != CPU_WORD_SIZE_32))
#error "CPU_CFG_DATA_SIZE illegally #define'd in 'cpu.h' "
#error " [MUST be CPU_WORD_SIZE_08 8-bit alignment]"
#error " [ || CPU_WORD_SIZE_16 16-bit alignment]"
#error " [ || CPU_WORD_SIZE_32 32-bit alignment]"
#endif
#ifndef CPU_CFG_ENDIAN_TYPE
#error "CPU_CFG_ENDIAN_TYPE not #define'd in 'cpu.h' "
#error " [MUST be CPU_ENDIAN_TYPE_BIG ]"
#error " [ || CPU_ENDIAN_TYPE_LITTLE]"
#elif ((CPU_CFG_ENDIAN_TYPE != CPU_ENDIAN_TYPE_BIG ) && \
(CPU_CFG_ENDIAN_TYPE != CPU_ENDIAN_TYPE_LITTLE))
#error "CPU_CFG_ENDIAN_TYPE illegally #define'd in 'cpu.h' "
#error " [MUST be CPU_ENDIAN_TYPE_BIG ]"
#error " [ || CPU_ENDIAN_TYPE_LITTLE]"
#endif
#ifndef CPU_CFG_CRITICAL_METHOD
#error "CPU_CFG_CRITICAL_METHOD not #define'd in 'cpu.h' "
#error " [MUST be CPU_CRITICAL_METHOD_INT_DIS_EN ]"
#error " [ || CPU_CRITICAL_METHOD_STATUS_STK ]"
#error " [ || CPU_CRITICAL_METHOD_STATUS_LOCAL]"
#elif ((CPU_CFG_CRITICAL_METHOD != CPU_CRITICAL_METHOD_INT_DIS_EN ) && \
(CPU_CFG_CRITICAL_METHOD != CPU_CRITICAL_METHOD_STATUS_STK ) && \
(CPU_CFG_CRITICAL_METHOD != CPU_CRITICAL_METHOD_STATUS_LOCAL))
#error "CPU_CFG_CRITICAL_METHOD illegally #define'd in 'cpu.h' "
#error " [MUST be CPU_CRITICAL_METHOD_INT_DIS_EN ]"
#error " [ || CPU_CRITICAL_METHOD_STATUS_STK ]"
#error " [ || CPU_CRITICAL_METHOD_STATUS_LOCAL]"
#endif
/*$PAGE*/
/*
*********************************************************************************************************
* MODULE END
*********************************************************************************************************
*/
#endif /* End of CPU cfg module inclusion. */
@@ -0,0 +1,198 @@
;********************************************************************************************************
; uC/CPU
; CPU CONFIGURATION & PORT LAYER
;
; (c) Copyright 2004-2008; Micrium, Inc.; Weston, FL
;
; All rights reserved. Protected by international copyright laws.
;
; uC/CPU is provided in source form for FREE evaluation, for educational
; use or peaceful research. If you plan on using uC/CPU in a commercial
; product you need to contact Micrium to properly license its use in your
; product. We provide ALL the source code for your convenience and to
; help you experience uC/CPU. The fact that the source code is provided
; does NOT mean that you can use it without paying a licensing fee.
;
; Knowledge of the source code may NOT be used to develop a similar product.
;
; Please help us continue to provide the Embedded community with the finest
; software available. Your honesty is greatly appreciated.
;********************************************************************************************************
;********************************************************************************************************
;
; CPU PORT FILE
;
; ARM-Cortex-M3
; RealView Development Suite
; RealView Microcontroller Development Kit (MDK)
; ARM Developer Suite (ADS)
; Keil uVision
;
; Filename : cpu_a.asm
; Version : V1.19
; Programmer(s) : BAN
;********************************************************************************************************
;********************************************************************************************************
; PUBLIC FUNCTIONS
;********************************************************************************************************
EXPORT CPU_IntDis
EXPORT CPU_IntEn
EXPORT CPU_SR_Save
EXPORT CPU_SR_Restore
EXPORT CPU_CntLeadZeros
EXPORT CPU_RevBits
EXPORT CPU_WaitForInt
EXPORT CPU_WaitForExcept
;********************************************************************************************************
; CODE GENERATION DIRECTIVES
;********************************************************************************************************
AREA |.text|, CODE, READONLY, ALIGN=2
THUMB
REQUIRE8
PRESERVE8
;$PAGE
;*********************************************************************************************************
; DISABLE and ENABLE INTERRUPTS
;
; Description : Disable/Enable interrupts.
;
; Prototypes : void CPU_IntDis(void);
; void CPU_IntEn (void);
;*********************************************************************************************************
CPU_IntDis
CPSID I
BX LR
CPU_IntEn
CPSIE I
BX LR
;*********************************************************************************************************
; CRITICAL SECTION FUNCTIONS
;
; Description : Disable/Enable interrupts by preserving the state of interrupts. Generally speaking, the
; state of the interrupt disable flag is stored in the local variable 'cpu_sr' & interrupts
; are then disabled ('cpu_sr' is allocated in all functions that need to disable interrupts).
; The previous interrupt state is restored by copying 'cpu_sr' into the CPU's status register.
;
; Prototypes : CPU_SR CPU_SR_Save (void);
; void CPU_SR_Restore(CPU_SR cpu_sr);
;
;
; Note(s) : (1) These functions are used in general like this:
;
; void Task (void *p_arg)
; {
; /* Allocate storage for CPU status register */
; #if (CPU_CFG_CRITICAL_METHOD == CPU_CRITICAL_METHOD_STATUS_LOCAL)
; CPU_SR cpu_sr;
; #endif
;
; :
; :
; CPU_CRITICAL_ENTER(); /* cpu_sr = CPU_SR_Save(); */
; :
; :
; CPU_CRITICAL_EXIT(); /* CPU_SR_Restore(cpu_sr); */
; :
; :
; }
;*********************************************************************************************************
CPU_SR_Save
MRS R0, PRIMASK ; Set prio int mask to mask all (except faults)
CPSID I
BX LR
CPU_SR_Restore ; See Note #2.
MSR PRIMASK, R0
BX LR
;$PAGE
;********************************************************************************************************
; COUNT LEADING ZEROS
;
; Description : Counts the number of binary zero bits before the first binary one bit in the argument.
; If the argument is zero, the value 32 is returned.
;
; Prototypes : CPU_INT32U CPU_CntLeadZeros (CPU_INT32U val)
;
; Argument(s) : val variable to count leading zeros
;********************************************************************************************************
CPU_CntLeadZeros
CLZ R0, R0 ; Count leading zeros
BX LR
;********************************************************************************************************
; REVERSE BITS
;
; Description : Reverses the bits in the argument.
;
; Prototypes : CPU_INT32U CPU_RevBits (CPU_INT32U val)
;
; Argument(s) : val variable to reverse
;********************************************************************************************************
CPU_RevBits
RBIT R0, R0 ; Reverse bits
BX LR
;$PAGE
;********************************************************************************************************
; WAIT FOR INTERRUPT
;
; Description : Enters sleep state, which will be exited when an interrupt is received.
;
; Prototypes : void CPU_WaitForInt (void)
;
; Argument(s) : none.
;********************************************************************************************************
CPU_WaitForInt
WFI ; Wait for interrupt
BX LR
;********************************************************************************************************
; WAIT FOR EXCEPTION
;
; Description : Enters sleep state, which will be exited when an exception is received.
;
; Prototypes : void CPU_WaitForExcept (void)
;
; Argument(s) : none.
;********************************************************************************************************
CPU_WaitForExcept
WFE ; Wait for exception
BX LR
;$PAGE
;********************************************************************************************************
; CPU ASSEMBLY PORT FILE END
;********************************************************************************************************
END
@@ -0,0 +1,680 @@
/*
*********************************************************************************************************
* uC/CPU
* CPU CONFIGURATION & PORT LAYER
*
* (c) Copyright 2004-2008; Micrium, Inc.; Weston, FL
*
* All rights reserved. Protected by international copyright laws.
*
* uC/CPU is provided in source form for FREE evaluation, for educational
* use or peaceful research. If you plan on using uC/CPU in a commercial
* product you need to contact Micrium to properly license its use in your
* product. We provide ALL the source code for your convenience and to
* help you experience uC/CPU. The fact that the source code is provided
* does NOT mean that you can use it without paying a licensing fee.
*
* Knowledge of the source code may NOT be used to develop a similar product.
*
* Please help us continue to provide the Embedded community with the finest
* software available. Your honesty is greatly appreciated.
*********************************************************************************************************
*/
/*
*********************************************************************************************************
*
* CPU PORT FILE
*
* ARM-Cortex-M3
* RealView Development Suite
* RealView Microcontroller Development Kit (MDK)
* ARM Developer Suite (ADS)
* Keil uVision
*
* Filename : cpu_c.c
* Version : V1.19
* Programmer(s) : JJL
* BAN
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* INCLUDE FILES
*********************************************************************************************************
*/
#include <uC-CPU\ARM-Cortex-M3\RealView\cpu.h>
#include <lib_def.h>
/*
*********************************************************************************************************
* LOCAL DEFINES
*********************************************************************************************************
*/
#define CPU_INT_SRC_POS_MAX ((((CPU_REG_NVIC_NVIC + 1) & 0x1F) * 32) + 1)
#define CPU_BIT_BAND_SRAM_REG_LO 0x20000000
#define CPU_BIT_BAND_SRAM_REG_HI 0x200FFFFF
#define CPU_BIT_BAND_SRAM_BASE 0x22000000
#define CPU_BIT_BAND_PERIPH_REG_LO 0x40000000
#define CPU_BIT_BAND_PERIPH_REG_HI 0x400FFFFF
#define CPU_BIT_BAND_PERIPH_BASE 0x42000000
/*
*********************************************************************************************************
* LOCAL CONSTANTS
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* LOCAL DATA TYPES
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* LOCAL TABLES
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* LOCAL GLOBAL VARIABLES
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* LOCAL FUNCTION PROTOTYPES
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* LOCAL CONFIGURATION ERRORS
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* CPU_BitBandClr()
*
* Description : Clear bit in bit-band region.
*
* Argument(s) : addr Byte address in memory space.
*
* bit_nbr Bit number in byte.
*
* Return(s) : none.
*
* Caller(s) : Application.
*
* Note(s) : none.
*********************************************************************************************************
*/
void CPU_BitBandClr (CPU_ADDR addr,
CPU_INT08U bit_nbr)
{
CPU_ADDR bit_word_off;
CPU_ADDR bit_word_addr;
if ((addr >= CPU_BIT_BAND_SRAM_REG_LO) &&
(addr <= CPU_BIT_BAND_SRAM_REG_HI)) {
bit_word_off = ((addr - CPU_BIT_BAND_SRAM_REG_LO) * 32) + (bit_nbr * 4);
bit_word_addr = CPU_BIT_BAND_SRAM_BASE + bit_word_off;
*(volatile CPU_INT32U *)(bit_word_addr) = 0;
} else if ((addr >= CPU_BIT_BAND_PERIPH_REG_LO) &&
(addr <= CPU_BIT_BAND_PERIPH_REG_HI)) {
bit_word_off = ((addr - CPU_BIT_BAND_PERIPH_REG_LO) * 32) + (bit_nbr * 4);
bit_word_addr = CPU_BIT_BAND_PERIPH_BASE + bit_word_off;
*(volatile CPU_INT32U *)(bit_word_addr) = 0;
}
}
/*
*********************************************************************************************************
* CPU_BitBandClr()
*
* Description : Set bit in bit-band region.
*
* Argument(s) : addr Byte address in memory space.
*
* bit_nbr Bit number in byte.
*
* Return(s) : none.
*
* Caller(s) : Application.
*
* Note(s) : none.
*********************************************************************************************************
*/
void CPU_BitBandSet (CPU_ADDR addr,
CPU_INT08U bit_nbr)
{
CPU_ADDR bit_word_off;
CPU_ADDR bit_word_addr;
if ((addr >= CPU_BIT_BAND_SRAM_REG_LO) &&
(addr <= CPU_BIT_BAND_SRAM_REG_HI)) {
bit_word_off = ((addr - CPU_BIT_BAND_SRAM_REG_LO) * 32) + (bit_nbr * 4);
bit_word_addr = CPU_BIT_BAND_SRAM_BASE + bit_word_off;
*(volatile CPU_INT32U *)(bit_word_addr) = 1;
} else if ((addr >= CPU_BIT_BAND_PERIPH_REG_LO) &&
(addr <= CPU_BIT_BAND_PERIPH_REG_HI)) {
bit_word_off = ((addr - CPU_BIT_BAND_PERIPH_REG_LO) * 32) + (bit_nbr * 4);
bit_word_addr = CPU_BIT_BAND_PERIPH_BASE + bit_word_off;
*(volatile CPU_INT32U *)(bit_word_addr) = 1;
}
}
/*
*********************************************************************************************************
* CPU_IntSrcDis()
*
* Description : Disable an interrupt source.
*
* Argument(s) : pos Position of interrupt vector in interrupt table :
*
* 0 Invalid (see Note #1a).
* 1 Invalid (see Note #1b).
* 2 Non-maskable interrupt.
* 3 Hard Fault.
* 4 Memory Management.
* 5 Bus Fault.
* 6 Usage Fault.
* 7-10 Reserved.
* 11 SVCall
* 12 Debug monitor.
* 13 Reserved
* 14 PendSV.
* 15 SysTick.
* 16+ External Interrupt.
*
* Return(s) : none.
*
* Caller(s) : Application.
*
* Note(s) : (1) Several table positions do not contain interrupt sources :
*
* (a) Position 0 contains the stack pointer.
* (b) Positions 7-10, 13 are reserved.
*
* (2) Several interrupts cannot be disabled/enabled :
*
* (a) Reset.
* (b) NMI.
* (c) Hard fault.
* (d) SVCall.
* (e) Debug monitor.
* (f) PendSV.
*
* (3) The maximum Cortex-M3 table position is 256. A particular Cortex-M3 may have fewer
* than 240 external exceptions and, consequently, fewer than 256 table positions.
* This function assumes that the specified table position is valid if the interrupt
* controller type register's INTLINESNUM field is large enough so that the position
* COULD be valid.
*********************************************************************************************************
*/
void CPU_IntSrcDis (CPU_INT08U pos)
{
#if (CPU_CFG_CRITICAL_METHOD == CPU_CRITICAL_METHOD_STATUS_LOCAL)
CPU_SR cpu_sr;
#endif
CPU_INT08U group;
CPU_INT08U pos_max;
CPU_INT08U nbr;
switch (pos) {
case CPU_INT_STK_PTR: /* ---------------- INVALID OR RESERVED --------------- */
case CPU_INT_RSVD_07:
case CPU_INT_RSVD_08:
case CPU_INT_RSVD_09:
case CPU_INT_RSVD_10:
case CPU_INT_RSVD_13:
break;
/* ----------------- SYSTEM EXCEPTIONS ---------------- */
case CPU_INT_RESET: /* Reset (see Note #2). */
case CPU_INT_NMI: /* Non-maskable interrupt (see Note #2). */
case CPU_INT_HFAULT: /* Hard fault (see Note #2). */
case CPU_INT_SVCALL: /* SVCall (see Note #2). */
case CPU_INT_DBGMON: /* Debug monitor (see Note #2). */
case CPU_INT_PENDSV: /* PendSV (see Note #2). */
break;
case CPU_INT_MEM: /* Memory management. */
CPU_CRITICAL_ENTER();
CPU_REG_NVIC_SHCSR &= ~CPU_REG_NVIC_SHCSR_MEMFAULTENA;
CPU_CRITICAL_EXIT();
break;
case CPU_INT_BUSFAULT: /* Bus fault. */
CPU_CRITICAL_ENTER();
CPU_REG_NVIC_SHCSR &= ~CPU_REG_NVIC_SHCSR_BUSFAULTENA;
CPU_CRITICAL_EXIT();
break;
case CPU_INT_USAGEFAULT: /* Usage fault. */
CPU_CRITICAL_ENTER();
CPU_REG_NVIC_SHCSR &= ~CPU_REG_NVIC_SHCSR_USGFAULTENA;
CPU_CRITICAL_EXIT();
break;
case CPU_INT_SYSTICK: /* SysTick. */
CPU_CRITICAL_ENTER();
CPU_REG_NVIC_ST_CTRL &= ~CPU_REG_NVIC_ST_CTRL_ENABLE;
CPU_CRITICAL_EXIT();
break;
/* ---------------- EXTERNAL INTERRUPT ---------------- */
default:
pos_max = CPU_INT_SRC_POS_MAX;
if (pos < pos_max) { /* See Note #3. */
group = (pos - 16) / 32;
nbr = (pos - 16) % 32;
CPU_CRITICAL_ENTER();
CPU_REG_NVIC_CLREN(group) = DEF_BIT(nbr);
CPU_CRITICAL_EXIT();
}
break;
}
}
/*
*********************************************************************************************************
* CPU_IntSrcEn()
*
* Description : Enable an interrupt source.
*
* Argument(s) : pos Position of interrupt vector in interrupt table (see 'CPU_IntSrcDis()').
*
* Return(s) : none.
*
* Caller(s) : Application.
*
* Note(s) : (1) See 'CPU_IntSrcDis() Note #1'.
*
* (2) See 'CPU_IntSrcDis() Note #2'.
*
* (3) See 'CPU_IntSrcDis() Note #3'.
*********************************************************************************************************
*/
void CPU_IntSrcEn (CPU_INT08U pos)
{
#if (CPU_CFG_CRITICAL_METHOD == CPU_CRITICAL_METHOD_STATUS_LOCAL)
CPU_SR cpu_sr;
#endif
CPU_INT08U group;
CPU_INT08U nbr;
CPU_INT08U pos_max;
switch (pos) {
case CPU_INT_STK_PTR: /* ---------------- INVALID OR RESERVED --------------- */
case CPU_INT_RSVD_07:
case CPU_INT_RSVD_08:
case CPU_INT_RSVD_09:
case CPU_INT_RSVD_10:
case CPU_INT_RSVD_13:
break;
/* ----------------- SYSTEM EXCEPTIONS ---------------- */
case CPU_INT_RESET: /* Reset (see Note #2). */
case CPU_INT_NMI: /* Non-maskable interrupt (see Note #2). */
case CPU_INT_HFAULT: /* Hard fault (see Note #2). */
case CPU_INT_SVCALL: /* SVCall (see Note #2). */
case CPU_INT_DBGMON: /* Debug monitor (see Note #2). */
case CPU_INT_PENDSV: /* PendSV (see Note #2). */
break;
case CPU_INT_MEM: /* Memory management. */
CPU_CRITICAL_ENTER();
CPU_REG_NVIC_SHCSR |= CPU_REG_NVIC_SHCSR_MEMFAULTENA;
CPU_CRITICAL_EXIT();
break;
case CPU_INT_BUSFAULT: /* Bus fault. */
CPU_CRITICAL_ENTER();
CPU_REG_NVIC_SHCSR |= CPU_REG_NVIC_SHCSR_BUSFAULTENA;
CPU_CRITICAL_EXIT();
break;
case CPU_INT_USAGEFAULT: /* Usage fault. */
CPU_CRITICAL_ENTER();
CPU_REG_NVIC_SHCSR |= CPU_REG_NVIC_SHCSR_USGFAULTENA;
CPU_CRITICAL_EXIT();
break;
case CPU_INT_SYSTICK: /* SysTick. */
CPU_CRITICAL_ENTER();
CPU_REG_NVIC_ST_CTRL |= CPU_REG_NVIC_ST_CTRL_ENABLE;
CPU_CRITICAL_EXIT();
break;
/* ---------------- EXTERNAL INTERRUPT ---------------- */
default:
pos_max = CPU_INT_SRC_POS_MAX;
if (pos < pos_max) { /* See Note #3. */
group = (pos - 16) / 32;
nbr = (pos - 16) % 32;
CPU_CRITICAL_ENTER();
CPU_REG_NVIC_SETEN(group) = DEF_BIT(nbr);
CPU_CRITICAL_EXIT();
}
break;
}
}
/*
*********************************************************************************************************
* CPU_IntSrcPrioSet()
*
* Description : Set priority of an interrupt source.
*
* Argument(s) : pos Position of interrupt vector in interrupt table (see 'CPU_IntSrcDis()').
*
* prio Priority. Use a lower priority number for a higher priority.
*
* Return(s) : none.
*
* Caller(s) : Application.
*
* Note(s) : (1) See 'CPU_IntSrcDis() Note #1'.
*
* (2) Several interrupts priorities CANNOT be set :
*
* (a) Reset (always -3).
* (b) NMI (always -2).
* (c) Hard fault (always -1).
*
* (3) See 'CPU_IntSrcDis() Note #3'.
*********************************************************************************************************
*/
void CPU_IntSrcPrioSet (CPU_INT08U pos,
CPU_INT08U prio)
{
#if (CPU_CFG_CRITICAL_METHOD == CPU_CRITICAL_METHOD_STATUS_LOCAL)
CPU_SR cpu_sr;
#endif
CPU_INT08U group;
CPU_INT08U nbr;
CPU_INT08U pos_max;
CPU_INT32U prio_32;
CPU_INT32U temp;
prio_32 = CPU_RevBits((CPU_INT08U)prio);
prio = (CPU_INT08U)(prio_32 >> (3 * DEF_OCTET_NBR_BITS));
switch (pos) {
case CPU_INT_STK_PTR: /* ---------------- INVALID OR RESERVED --------------- */
case CPU_INT_RSVD_07:
case CPU_INT_RSVD_08:
case CPU_INT_RSVD_09:
case CPU_INT_RSVD_10:
case CPU_INT_RSVD_13:
break;
/* ----------------- SYSTEM EXCEPTIONS ---------------- */
case CPU_INT_RESET: /* Reset (see Note #2). */
case CPU_INT_NMI: /* Non-maskable interrupt (see Note #2). */
case CPU_INT_HFAULT: /* Hard fault (see Note #2). */
break;
case CPU_INT_MEM: /* Memory management. */
CPU_CRITICAL_ENTER();
temp = CPU_REG_NVIC_SHPRI1;
temp &= ~(DEF_OCTET_MASK << (0 * DEF_OCTET_NBR_BITS));
temp |= (prio << (0 * DEF_OCTET_NBR_BITS));
CPU_REG_NVIC_SHPRI1 = temp;
CPU_CRITICAL_EXIT();
break;
case CPU_INT_BUSFAULT: /* Bus fault. */
CPU_CRITICAL_ENTER();
temp = CPU_REG_NVIC_SHPRI1;
temp &= ~(DEF_OCTET_MASK << (1 * DEF_OCTET_NBR_BITS));
temp |= (prio << (1 * DEF_OCTET_NBR_BITS));
CPU_REG_NVIC_SHPRI1 = temp;
CPU_CRITICAL_EXIT();
break;
case CPU_INT_USAGEFAULT: /* Usage fault. */
CPU_CRITICAL_ENTER();
temp = CPU_REG_NVIC_SHPRI1;
temp &= ~(DEF_OCTET_MASK << (2 * DEF_OCTET_NBR_BITS));
temp |= (prio << (2 * DEF_OCTET_NBR_BITS));
CPU_REG_NVIC_SHPRI1 = temp;
CPU_CRITICAL_EXIT();
break;
case CPU_INT_SVCALL: /* SVCall. */
CPU_CRITICAL_ENTER();
temp = CPU_REG_NVIC_SHPRI2;
temp &= ~((CPU_INT32U)DEF_OCTET_MASK << (3 * DEF_OCTET_NBR_BITS));
temp |= (prio << (3 * DEF_OCTET_NBR_BITS));
CPU_REG_NVIC_SHPRI2 = temp;
CPU_CRITICAL_EXIT();
break;
case CPU_INT_DBGMON: /* Debug monitor. */
CPU_CRITICAL_ENTER();
temp = CPU_REG_NVIC_SHPRI3;
temp &= ~(DEF_OCTET_MASK << (0 * DEF_OCTET_NBR_BITS));
temp |= (prio << (0 * DEF_OCTET_NBR_BITS));
CPU_REG_NVIC_SHPRI3 = temp;
CPU_CRITICAL_EXIT();
break;
case CPU_INT_PENDSV: /* PendSV. */
CPU_CRITICAL_ENTER();
temp = CPU_REG_NVIC_SHPRI3;
temp &= ~(DEF_OCTET_MASK << (2 * DEF_OCTET_NBR_BITS));
temp |= (prio << (2 * DEF_OCTET_NBR_BITS));
CPU_REG_NVIC_SHPRI3 = temp;
CPU_CRITICAL_EXIT();
break;
case CPU_INT_SYSTICK: /* SysTick. */
CPU_CRITICAL_ENTER();
temp = CPU_REG_NVIC_SHPRI3;
temp &= ~((CPU_INT32U)DEF_OCTET_MASK << (3 * DEF_OCTET_NBR_BITS));
temp |= (prio << (3 * DEF_OCTET_NBR_BITS));
CPU_REG_NVIC_SHPRI3 = temp;
CPU_CRITICAL_EXIT();
break;
/* ---------------- EXTERNAL INTERRUPT ---------------- */
default:
pos_max = CPU_INT_SRC_POS_MAX;
if (pos < pos_max) { /* See Note #3. */
group = (pos - 16) / 4;
nbr = (pos - 16) % 4;
CPU_CRITICAL_ENTER();
temp = CPU_REG_NVIC_PRIO(group);
temp &= ~(DEF_OCTET_MASK << (nbr * DEF_OCTET_NBR_BITS));
temp |= (prio << (nbr * DEF_OCTET_NBR_BITS));
CPU_REG_NVIC_PRIO(group) = temp;
CPU_CRITICAL_EXIT();
}
break;
}
}
/*
*********************************************************************************************************
* CPU_IntSrcPrioGet()
*
* Description : Get priority of an interrupt source.
*
* Argument(s) : pos Position of interrupt vector in interrupt table (see 'CPU_IntSrcDis()').
*
* Return(s) : Priority of interrupt source. If the interrupt source specified is invalid, then
* DEF_INT_16S_MIN_VAL is returned.
*
* Caller(s) : Application.
*
* Note(s) : (1) See 'CPU_IntSrcDis() Note #1'.
*
* (2) See 'CPU_IntSrcPrioSet() Note #2'.
*
* (3) See 'CPU_IntSrcDis() Note #3'.
*********************************************************************************************************
*/
CPU_INT16S CPU_IntSrcPrioGet (CPU_INT08U pos)
{
#if (CPU_CFG_CRITICAL_METHOD == CPU_CRITICAL_METHOD_STATUS_LOCAL)
CPU_SR cpu_sr;
#endif
CPU_INT08U group;
CPU_INT08U nbr;
CPU_INT08U pos_max;
CPU_INT16S prio;
CPU_INT32U prio_32;
CPU_INT32U temp;
switch (pos) {
case CPU_INT_STK_PTR: /* ---------------- INVALID OR RESERVED --------------- */
case CPU_INT_RSVD_07:
case CPU_INT_RSVD_08:
case CPU_INT_RSVD_09:
case CPU_INT_RSVD_10:
case CPU_INT_RSVD_13:
prio = DEF_INT_16S_MIN_VAL;
break;
/* ----------------- SYSTEM EXCEPTIONS ---------------- */
case CPU_INT_RESET: /* Reset (see Note #2). */
prio = -3;
break;
case CPU_INT_NMI: /* Non-maskable interrupt (see Note #2). */
prio = -2;
break;
case CPU_INT_HFAULT: /* Hard fault (see Note #2). */
prio = -1;
break;
case CPU_INT_MEM: /* Memory management. */
CPU_CRITICAL_ENTER();
temp = CPU_REG_NVIC_SHPRI1;
prio = (temp >> (0 * DEF_OCTET_NBR_BITS)) & DEF_OCTET_MASK;
CPU_CRITICAL_EXIT();
break;
case CPU_INT_BUSFAULT: /* Bus fault. */
CPU_CRITICAL_ENTER();
temp = CPU_REG_NVIC_SHPRI1;
prio = (temp >> (1 * DEF_OCTET_NBR_BITS)) & DEF_OCTET_MASK;
CPU_CRITICAL_EXIT();
break;
case CPU_INT_USAGEFAULT: /* Usage fault. */
CPU_CRITICAL_ENTER();
temp = CPU_REG_NVIC_SHPRI1;
prio = (temp >> (2 * DEF_OCTET_NBR_BITS)) & DEF_OCTET_MASK;
break;
case CPU_INT_SVCALL: /* SVCall. */
CPU_CRITICAL_ENTER();
temp = CPU_REG_NVIC_SHPRI2;
prio = (temp >> (3 * DEF_OCTET_NBR_BITS)) & DEF_OCTET_MASK;
CPU_CRITICAL_EXIT();
break;
case CPU_INT_DBGMON: /* Debug monitor. */
CPU_CRITICAL_ENTER();
temp = CPU_REG_NVIC_SHPRI3;
prio = (temp >> (0 * DEF_OCTET_NBR_BITS)) & DEF_OCTET_MASK;
CPU_CRITICAL_EXIT();
break;
case CPU_INT_PENDSV: /* PendSV. */
CPU_CRITICAL_ENTER();
temp = CPU_REG_NVIC_SHPRI3;
prio = (temp >> (2 * DEF_OCTET_NBR_BITS)) & DEF_OCTET_MASK;
CPU_CRITICAL_EXIT();
break;
case CPU_INT_SYSTICK: /* SysTick. */
CPU_CRITICAL_ENTER();
temp = CPU_REG_NVIC_SHPRI3;
prio = (temp >> (3 * DEF_OCTET_NBR_BITS)) & DEF_OCTET_MASK;
CPU_CRITICAL_EXIT();
break;
/* ---------------- EXTERNAL INTERRUPT ---------------- */
default:
pos_max = CPU_INT_SRC_POS_MAX;
if (pos < pos_max) { /* See Note #3. */
group = (pos - 16) / 4;
nbr = (pos - 16) % 4;
CPU_CRITICAL_ENTER();
temp = CPU_REG_NVIC_PRIO(group);
CPU_CRITICAL_EXIT();
prio = (temp >> (nbr * DEF_OCTET_NBR_BITS)) & DEF_OCTET_MASK;
} else {
prio = DEF_INT_16S_MIN_VAL;
}
break;
}
if (prio >= 0) {
prio_32 = CPU_RevBits((CPU_INT32U)prio);
prio = (CPU_INT16S)(prio_32 >> (3 * DEF_OCTET_NBR_BITS));
}
return (prio);
}
@@ -0,0 +1,133 @@
/*
*********************************************************************************************************
* uC/CPU
* CPU CONFIGURATION & PORT LAYER
*
* (c) Copyright 2004-2008; Micrium, Inc.; Weston, FL
*
* All rights reserved. Protected by international copyright laws.
*
* uC/CPU is provided in source form for FREE evaluation, for educational
* use or peaceful research. If you plan on using uC/CPU in a commercial
* product you need to contact Micrium to properly license its use in your
* product. We provide ALL the source code for your convenience and to
* help you experience uC/CPU. The fact that the source code is provided
* does NOT mean that you can use it without paying a licensing fee.
*
* Knowledge of the source code may NOT be used to develop a similar product.
*
* Please help us continue to provide the Embedded community with the finest
* software available. Your honesty is greatly appreciated.
*********************************************************************************************************
*/
/*
*********************************************************************************************************
*
* CPU CONFIGURATION DEFINES
*
* Filename : cpu_def.h
* Version : V1.19
* Programmer(s) : ITJ
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* CPU WORD CONFIGURATION
*
* Note(s) : (1) Configure CPU_CFG_ADDR_SIZE & CPU_CFG_DATA_SIZE in 'cpu.h' with CPU's word sizes :
*
* CPU_WORD_SIZE_08 8-bit word size
* CPU_WORD_SIZE_16 16-bit word size
* CPU_WORD_SIZE_32 32-bit word size
* CPU_WORD_SIZE_64 64-bit word size See Note #1a
*
* (a) 64-bit word size NOT currently supported.
*
* (b) Ideally, CPU_WORD_SIZE #define's would be calculated at compile-time through use of
* the sizeof() operator. However, some compilers do NOT allow pre-processor directives
* to include run-time macro's -- e.g. 'sizeof()'.
*
* (2) Configure CPU_CFG_ENDIAN_TYPE in 'cpu.h' with CPU's data-word-memory order :
*
* CPU_ENDIAN_TYPE_BIG Big- endian word order (CPU words' most significant
* octet @ lowest memory address)
* CPU_ENDIAN_TYPE_LITTLE Little-endian word order (CPU words' least significant
* octet @ lowest memory address)
*********************************************************************************************************
*/
/* ----------------------- CPU WORD SIZE ---------------------- */
#define CPU_WORD_SIZE_08 1 /* 8-bit word size = sizeof(CPU_INT08x). */
#define CPU_WORD_SIZE_16 2 /* 16-bit word size = sizeof(CPU_INT16x). */
#define CPU_WORD_SIZE_32 4 /* 32-bit word size = sizeof(CPU_INT32x). */
#define CPU_WORD_SIZE_64 8 /* 64-bit word size = sizeof(CPU_INT64x) [see Note #1a]. */
/* ------------------- CPU WORD-ENDIAN ORDER ------------------ */
#define CPU_ENDIAN_TYPE_NONE 0 /* */
#define CPU_ENDIAN_TYPE_BIG 1 /* Big- endian word order (CPU words' most significant ... */
/* ... octet @ lowest mem addr). */
#define CPU_ENDIAN_TYPE_LITTLE 2 /* Little-endian word order (CPU words' least significant ... */
/* ... octet @ lowest mem addr). */
/*$PAGE*/
/*
*********************************************************************************************************
* CRITICAL SECTION CONFIGURATION
*
* Note(s) : (1) Configure CPU_CFG_CRITICAL_METHOD with CPU's/compiler's critical section method :
*
* Enter/Exit critical sections by ...
*
* CPU_CRITICAL_METHOD_INT_DIS_EN Disable/Enable interrupts
* CPU_CRITICAL_METHOD_STATUS_STK Push/Pop interrupt status onto stack
* CPU_CRITICAL_METHOD_STATUS_LOCAL Save/Restore interrupt status to local variable
*
* (a) CPU_CRITICAL_METHOD_INT_DIS_EN is NOT a preferred method since it does NOT support
* multiple levels of interrupts. However, with some CPUs/compilers, this is the only
* available method.
*
* (b) CPU_CRITICAL_METHOD_STATUS_STK is one preferred method since it DOES support multiple
* levels of interrupts. However, this method assumes that the compiler allows in-line
* assembly AND will correctly modify the local stack pointer when interrupt status is
* pushed/popped onto the stack.
*
* (c) CPU_CRITICAL_METHOD_STATUS_LOCAL is one preferred method since it DOES support multiple
* levels of interrupts. However, this method assumes that the compiler provides C-level
* &/or assembly-level functionality for the following :
*
* ENTER CRITICAL SECTION :
* (a) Save interrupt status into a local variable
* (b) Disable interrupts
*
* EXIT CRITICAL SECTION :
* (c) Restore interrupt status from a local variable
*
* (2) Critical section macro's most likely require inline assembly. If the compiler does NOT
* allow inline assembly in C source files, critical section macro's MUST call an assembly
* subroutine defined in a 'cpu_a.asm' file located in the following software directory :
*
* \<CPU-Compiler Directory>\<cpu>\<compiler>\
*
* where
* <CPU-Compiler Directory> directory path for common CPU-compiler software
* <cpu> directory name for specific CPU
* <compiler> directory name for specific compiler
*
* (3) To save/restore interrupt status, a local variable 'cpu_sr' of type 'CPU_SR' MAY need to
* be declared (e.g. if 'CPU_CRITICAL_METHOD_STATUS_LOCAL' method is configured). Configure
* 'CPU_SR' data type in 'cpu.h' with the appropriate-sized CPU data type large enough to
* completely store the CPU's/compiler's status word.
*********************************************************************************************************
*/
/* --------------- CPU CRITICAL SECTION METHODS --------------- */
#define CPU_CRITICAL_METHOD_NONE 0 /* */
#define CPU_CRITICAL_METHOD_INT_DIS_EN 1 /* DIS/EN ints. */
#define CPU_CRITICAL_METHOD_STATUS_STK 2 /* Push/Pop int status onto stk. */
#define CPU_CRITICAL_METHOD_STATUS_LOCAL 3 /* Save/Restore int status to local var. */
@@ -0,0 +1,314 @@
;********************************************************************************************************
; uC/LIB
; CUSTOM LIBRARY MODULES
;
; (c) Copyright 2004-2008; Micrium, Inc.; Weston, FL
;
; All rights reserved. Protected by international copyright laws.
;
; uC/LIB is provided in source form for FREE evaluation, for educational
; use or peaceful research. If you plan on using uC/LIB in a commercial
; product you need to contact Micrium to properly license its use in your
; product. We provide ALL the source code for your convenience and to
; help you experience uC/LIB. The fact that the source code is provided
; does NOT mean that you can use it without paying a licensing fee.
;
; Knowledge of the source code may NOT be used to develop a similar product.
;
; Please help us continue to provide the Embedded community with the finest
; software available. Your honesty is greatly appreciated.
;********************************************************************************************************
;********************************************************************************************************
;
; STANDARD MEMORY OPERATIONS
;
; ARM-Cortex-M3
; RealView Development Suite
; RealView Microcontroller Development Kit (MDK)
; ARM Developer Suite (ADS)
; Keil uVision
;
; Filename : lib_mem_a.asm
; Version : V1.25
; Programmer(s) : JDH
; BAN
;********************************************************************************************************
; Note(s) : (1) NO compiler-supplied standard library functions are used in library or product software.
;
; (a) ALL standard library functions are implemented in the custom library modules :
;
; (1) \<Custom Library Directory>\lib*.*
;
; (2) \<Custom Library Directory>\Ports\<cpu>\<compiler>\lib*_a.*
;
; where
; <Custom Library Directory> directory path for custom library software
; <cpu> directory name for specific processor (CPU)
; <compiler> directory name for specific compiler
;
; (b) Product-specific library functions are implemented in individual products.
;
; (2) Assumes ARM CPU mode configured for Little Endian.
;********************************************************************************************************
;********************************************************************************************************
; PUBLIC FUNCTIONS
;********************************************************************************************************
EXPORT Mem_Copy
;********************************************************************************************************
; CODE GENERATION DIRECTIVES
;********************************************************************************************************
AREA |.text|, CODE, READONLY, ALIGN=2
THUMB
REQUIRE8
PRESERVE8
;$PAGE
;********************************************************************************************************
; Mem_Copy()
;
; Description : Copy data octets from one buffer to another buffer.
;
; Argument(s) : pdest Pointer to destination memory buffer.
;
; psrc Pointer to source memory buffer.
;
; size Number of data buffer octets to copy.
;
; Return(s) : none.
;
; Caller(s) : Application.
;
; Note(s) : (1) Null copies allowed (i.e. 0-octet size).
;
; (2) Memory buffers NOT checked for overlapping.
;
; (3) Modulo arithmetic is used to determine whether a memory buffer starts on a 'CPU_ALIGN'
; address boundary.
;
; (4) ARM Cortex-M3 processors use a subset of the ARM Thumb-2 instruction set which does
; NOT support 16-bit conditional branch instructions but ONLY supports 8-bit conditional
; branch instructions.
;
; Therefore, branches exceeding 8-bit, signed, relative offsets :
;
; (a) CANNOT be implemented with conditional branches; but ...
; (b) MUST be implemented with non-conditional branches.
;********************************************************************************************************
; void Mem_Copy (void *pdest, ; ==> R0
; void *psrc, ; ==> R1
; CPU_SIZE_T size) ; ==> R2
Mem_Copy
CMP R0, #0
BNE Mem_Copy_1
BX LR ; return if pdest == NULL
Mem_Copy_1
CMP R1, #0
BNE Mem_Copy_2
BX LR ; return if psrc == NULL
Mem_Copy_2
CMP R2, #0
BNE Mem_Copy_3
BX LR ; return if size == 0
Mem_Copy_3
STMFD SP!, {R3-R12} ; save registers on stack
;$PAGE
Chk_Align_32 ; check if both dest & src 32-bit aligned
AND R3, R0, #0x03
AND R4, R1, #0x03
CMP R3, R4
BNE Chk_Align_16 ; not 32-bit aligned, check for 16-bit alignment
RSB R3, R3, #0x04 ; compute 1-2-3 pre-copy bytes (to align to the next 32-bit boundary)
AND R3, R3, #0x03
Pre_Copy_1
CMP R3, #1 ; copy 1-2-3 bytes (to align to the next 32-bit boundary)
BCC Copy_32_1 ; start real 32-bit copy
CMP R2, #1 ; check if any more data to copy
BCS Pre_Copy_1_Cont
B Mem_Copy_END ; no more data to copy (see Note #4b)
Pre_Copy_1_Cont
LDRB R4, [R1], #1
STRB R4, [R0], #1
SUB R3, R3, #1
SUB R2, R2, #1
B Pre_Copy_1
Chk_Align_16 ; check if both dest & src 16-bit aligned
AND R3, R0, #0x01
AND R4, R1, #0x01
CMP R3, R4
BEQ Pre_Copy_2
B Copy_08_1 ; not 16-bit aligned, start 8-bit copy (see Note #4b)
Pre_Copy_2
CMP R3, #1 ; copy 1 byte (to align to the next 16-bit boundary)
BCC Copy_16_1 ; start real 16-bit copy
LDRB R4, [R1], #1
STRB R4, [R0], #1
SUB R3, R3, #1
SUB R2, R2, #1
B Pre_Copy_2
Copy_32_1
CMP R2, #(04*10*09) ; Copy 9 chunks of 10 32-bit words (360 octets per loop)
BCC Copy_32_2
LDMIA R1!, {R3-R12}
STMIA R0!, {R3-R12}
LDMIA R1!, {R3-R12}
STMIA R0!, {R3-R12}
LDMIA R1!, {R3-R12}
STMIA R0!, {R3-R12}
LDMIA R1!, {R3-R12}
STMIA R0!, {R3-R12}
LDMIA R1!, {R3-R12}
STMIA R0!, {R3-R12}
LDMIA R1!, {R3-R12}
STMIA R0!, {R3-R12}
LDMIA R1!, {R3-R12}
STMIA R0!, {R3-R12}
LDMIA R1!, {R3-R12}
STMIA R0!, {R3-R12}
LDMIA R1!, {R3-R12}
STMIA R0!, {R3-R12}
SUB R2, R2, #(04*10*09)
B Copy_32_1
Copy_32_2
CMP R2, #(04*10*01) ; Copy chunks of 10 32-bit words (40 octets per loop)
BCC Copy_32_3
LDMIA R1!, {R3-R12}
STMIA R0!, {R3-R12}
SUB R2, R2, #(04*10*01)
B Copy_32_2
Copy_32_3
CMP R2, #(04*01*01) ; Copy remaining 32-bit words
BCC Copy_16_1
LDR R3, [R1], #4
STR R3, [R0], #4
SUB R2, R2, #(04*01*01)
B Copy_32_3
;$PAGE
Copy_16_1
CMP R2, #(02*01*16) ; Copy chunks of 16 16-bit words (32 bytes per loop)
BCC Copy_16_2
LDRH R3, [R1], #2
STRH R3, [R0], #2
LDRH R3, [R1], #2
STRH R3, [R0], #2
LDRH R3, [R1], #2
STRH R3, [R0], #2
LDRH R3, [R1], #2
STRH R3, [R0], #2
LDRH R3, [R1], #2
STRH R3, [R0], #2
LDRH R3, [R1], #2
STRH R3, [R0], #2
LDRH R3, [R1], #2
STRH R3, [R0], #2
LDRH R3, [R1], #2
STRH R3, [R0], #2
LDRH R3, [R1], #2
STRH R3, [R0], #2
LDRH R3, [R1], #2
STRH R3, [R0], #2
LDRH R3, [R1], #2
STRH R3, [R0], #2
LDRH R3, [R1], #2
STRH R3, [R0], #2
LDRH R3, [R1], #2
STRH R3, [R0], #2
LDRH R3, [R1], #2
STRH R3, [R0], #2
LDRH R3, [R1], #2
STRH R3, [R0], #2
LDRH R3, [R1], #2
STRH R3, [R0], #2
SUB R2, R2, #(02*01*16)
B Copy_16_1
Copy_16_2
CMP R2, #(02*01*01) ; Copy remaining 16-bit words
BCC Copy_08_1
LDRH R3, [R1], #2
STRH R3, [R0], #2
SUB R2, R2, #(02*01*01)
B Copy_16_2
;$PAGE
Copy_08_1
CMP R2, #(01*01*16) ; Copy chunks of 16 8-bit words (16 bytes per loop)
BCC Copy_08_2
LDRB R3, [R1], #1
STRB R3, [R0], #1
LDRB R3, [R1], #1
STRB R3, [R0], #1
LDRB R3, [R1], #1
STRB R3, [R0], #1
LDRB R3, [R1], #1
STRB R3, [R0], #1
LDRB R3, [R1], #1
STRB R3, [R0], #1
LDRB R3, [R1], #1
STRB R3, [R0], #1
LDRB R3, [R1], #1
STRB R3, [R0], #1
LDRB R3, [R1], #1
STRB R3, [R0], #1
LDRB R3, [R1], #1
STRB R3, [R0], #1
LDRB R3, [R1], #1
STRB R3, [R0], #1
LDRB R3, [R1], #1
STRB R3, [R0], #1
LDRB R3, [R1], #1
STRB R3, [R0], #1
LDRB R3, [R1], #1
STRB R3, [R0], #1
LDRB R3, [R1], #1
STRB R3, [R0], #1
LDRB R3, [R1], #1
STRB R3, [R0], #1
LDRB R3, [R1], #1
STRB R3, [R0], #1
SUB R2, R2, #(01*01*16)
B Copy_08_1
Copy_08_2
CMP R2, #(01*01*01) ; Copy remaining 8-bit words
BCC Mem_Copy_END
LDRB R3, [R1], #1
STRB R3, [R0], #1
SUB R2, R2, #(01*01*01)
B Copy_08_2
Mem_Copy_END
LDMFD SP!, {R3-R12} ; restore registers from stack
BX LR ; return
END
@@ -0,0 +1,661 @@
/*
*********************************************************************************************************
* uC/LIB
* CUSTOM LIBRARY MODULES
*
* (c) Copyright 2004-2008; Micrium, Inc.; Weston, FL
*
* All rights reserved. Protected by international copyright laws.
*
* uC/LIB is provided in source form for FREE evaluation, for educational
* use or peaceful research. If you plan on using uC/LIB in a commercial
* product you need to contact Micrium to properly license its use in your
* product. We provide ALL the source code for your convenience and to
* help you experience uC/LIB. The fact that the source code is provided
* does NOT mean that you can use it without paying a licensing fee.
*
* Knowledge of the source code may NOT be used to develop a similar product.
*
* Please help us continue to provide the Embedded community with the finest
* software available. Your honesty is greatly appreciated.
*********************************************************************************************************
*/
/*
*********************************************************************************************************
*
* CORE CUSTOM LIBRARY MODULE
*
* Filename : lib_def.h
* Version : V1.25
* Programmer(s) : ITJ
*********************************************************************************************************
* Note(s) : (1) NO compiler-supplied standard library functions are used in library or product software.
*
* (a) ALL standard library functions are implemented in the custom library modules :
*
* (1) \<Custom Library Directory>\lib*.*
*
* (2) \<Custom Library Directory>\Ports\<cpu>\<compiler>\lib*_a.*
*
* where
* <Custom Library Directory> directory path for custom library software
* <cpu> directory name for specific processor (CPU)
* <compiler> directory name for specific compiler
*
* (b) Product-specific library functions are implemented in individual products.
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* MODULE
*********************************************************************************************************
*/
#ifndef LIB_DEF_MODULE_PRESENT
#define LIB_DEF_MODULE_PRESENT
/*$PAGE*/
/*
*********************************************************************************************************
* CUSTOM LIBRARY MODULE VERSION NUMBER
*
* Note(s) : (1) (a) The custom library module software version is denoted as follows :
*
* Vx.yy
*
* where
* V denotes 'Version' label
* x denotes major software version revision number
* yy denotes minor software version revision number
*
* (b) The software version label #define is formatted as follows :
*
* ver = x.yy * 100
*
* where
* ver denotes software version number scaled as an integer value
* x.yy denotes software version number
*********************************************************************************************************
*/
#define LIB_VERSION 124u /* See Note #1. */
/*
*********************************************************************************************************
* INCLUDE FILES
*
* Note(s) : (1) The following common software files are located in the following directories :
*
* (a) \<Custom Library Directory>\lib*.*
*
* (b) (1) \<CPU-Compiler Directory>\cpu_def.h
*
* (2) \<CPU-Compiler Directory>\<cpu>\<compiler>\cpu*.*
*
* where
* <Custom Library Directory> directory path for custom library software
* <CPU-Compiler Directory> directory path for common CPU-compiler software
* <cpu> directory name for specific processor (CPU)
* <compiler> directory name for specific compiler
*
* (2) Compiler MUST be configured to include the '\<Custom Library Directory>\uC-LIB\',
* '\<CPU-Compiler Directory>\' directory, & the specific CPU-compiler directory as
* additional include path directories.
*********************************************************************************************************
*/
#include <uC-CPU\ARM-Cortex-M3\RealView\cpu.h>
/*$PAGE*/
/*
*********************************************************************************************************
* STANDARD DEFINES
*********************************************************************************************************
*/
#define DEF_DISABLED 0
#define DEF_ENABLED 1
#define DEF_FALSE 0
#define DEF_TRUE 1
#define DEF_NO 0
#define DEF_YES 1
#define DEF_OFF 0
#define DEF_ON 1
#define DEF_CLR 0
#define DEF_SET 1
#define DEF_ACTIVE 0
#define DEF_INACTIVE 1
#define DEF_FAIL 0
#define DEF_OK 1
/* -------------------- BIT DEFINES ------------------- */
#define DEF_BIT_NONE 0x00
#define DEF_BIT_00 0x01
#define DEF_BIT_01 0x02
#define DEF_BIT_02 0x04
#define DEF_BIT_03 0x08
#define DEF_BIT_04 0x10
#define DEF_BIT_05 0x20
#define DEF_BIT_06 0x40
#define DEF_BIT_07 0x80
#define DEF_BIT_08 0x0100
#define DEF_BIT_09 0x0200
#define DEF_BIT_10 0x0400
#define DEF_BIT_11 0x0800
#define DEF_BIT_12 0x1000
#define DEF_BIT_13 0x2000
#define DEF_BIT_14 0x4000
#define DEF_BIT_15 0x8000
#define DEF_BIT_16 0x00010000
#define DEF_BIT_17 0x00020000
#define DEF_BIT_18 0x00040000
#define DEF_BIT_19 0x00080000
#define DEF_BIT_20 0x00100000
#define DEF_BIT_21 0x00200000
#define DEF_BIT_22 0x00400000
#define DEF_BIT_23 0x00800000
#define DEF_BIT_24 0x01000000
#define DEF_BIT_25 0x02000000
#define DEF_BIT_26 0x04000000
#define DEF_BIT_27 0x08000000
#define DEF_BIT_28 0x10000000
#define DEF_BIT_29 0x20000000
#define DEF_BIT_30 0x40000000
#define DEF_BIT_31 0x80000000
/* ------------------- OCTET DEFINES ------------------ */
#define DEF_OCTET_NBR_BITS 8
#define DEF_OCTET_MASK 0xFF
#define DEF_NIBBLE_NBR_BITS 4
#define DEF_NIBBLE_MASK 0x0F
/*$PAGE*/
/* ------------------ INTEGER DEFINES ----------------- */
#define DEF_INT_08_NBR_BITS 8
#define DEF_INT_08_MASK 0xFF
#define DEF_INT_08U_MIN_VAL 0u
#define DEF_INT_08U_MAX_VAL 255u
#define DEF_INT_08S_MIN_VAL -128
#define DEF_INT_08S_MAX_VAL 127
#define DEF_INT_08S_MIN_VAL_ONES_CPL -127
#define DEF_INT_08S_MAX_VAL_ONES_CPL 127
#define DEF_INT_16_NBR_BITS 16
#define DEF_INT_16_MASK 0xFFFF
#define DEF_INT_16U_MIN_VAL 0u
#define DEF_INT_16U_MAX_VAL 65535u
#define DEF_INT_16S_MIN_VAL -32768
#define DEF_INT_16S_MAX_VAL 32767
#define DEF_INT_16S_MIN_VAL_ONES_CPL -32767
#define DEF_INT_16S_MAX_VAL_ONES_CPL 32767
#define DEF_INT_32_NBR_BITS 32
#define DEF_INT_32_MASK 0xFFFFFFFF
#define DEF_INT_32U_MIN_VAL 0u
#define DEF_INT_32U_MAX_VAL 4294967295u
#define DEF_INT_32S_MIN_VAL -2147483648
#define DEF_INT_32S_MAX_VAL 2147483647
#define DEF_INT_32S_MIN_VAL_ONES_CPL -2147483647
#define DEF_INT_32S_MAX_VAL_ONES_CPL 2147483647
#define DEF_INT_64_NBR_BITS 64
#define DEF_INT_64_MASK 0xFFFFFFFFFFFFFFFF
#define DEF_INT_64U_MIN_VAL 0u
#define DEF_INT_64U_MAX_VAL 18446744073709551615u
#define DEF_INT_64S_MIN_VAL -9223372036854775808
#define DEF_INT_64S_MAX_VAL 9223372036854775807
#define DEF_INT_64S_MIN_VAL_ONES_CPL -9223372036854775807
#define DEF_INT_64S_MAX_VAL_ONES_CPL 9223372036854775807
/*$PAGE*/
/* ---------------- CPU INTEGER DEFINES --------------- */
#define DEF_INT_CPU_NBR_BITS (CPU_CFG_DATA_SIZE * DEF_OCTET_NBR_BITS)
#if (DEF_INT_CPU_NBR_BITS == DEF_INT_08_NBR_BITS)
#define DEF_INT_CPU_MASK DEF_INT_08_MASK
#define DEF_INT_CPU_U_MIN_VAL DEF_INT_08U_MIN_VAL
#define DEF_INT_CPU_U_MAX_VAL DEF_INT_08U_MAX_VAL
#define DEF_INT_CPU_S_MIN_VAL DEF_INT_08S_MIN_VAL
#define DEF_INT_CPU_S_MAX_VAL DEF_INT_08S_MAX_VAL
#define DEF_INT_CPU_S_MIN_VAL_ONES_CPL DEF_INT_08S_MIN_VAL_ONES_CPL
#define DEF_INT_CPU_S_MAX_VAL_ONES_CPL DEF_INT_08S_MAX_VAL_ONES_CPL
#elif (DEF_INT_CPU_NBR_BITS == DEF_INT_16_NBR_BITS)
#define DEF_INT_CPU_MASK DEF_INT_16_MASK
#define DEF_INT_CPU_U_MIN_VAL DEF_INT_16U_MIN_VAL
#define DEF_INT_CPU_U_MAX_VAL DEF_INT_16U_MAX_VAL
#define DEF_INT_CPU_S_MIN_VAL DEF_INT_16S_MIN_VAL
#define DEF_INT_CPU_S_MAX_VAL DEF_INT_16S_MAX_VAL
#define DEF_INT_CPU_S_MIN_VAL_ONES_CPL DEF_INT_16S_MIN_VAL_ONES_CPL
#define DEF_INT_CPU_S_MAX_VAL_ONES_CPL DEF_INT_16S_MAX_VAL_ONES_CPL
#elif (DEF_INT_CPU_NBR_BITS == DEF_INT_32_NBR_BITS)
#define DEF_INT_CPU_MASK DEF_INT_32_MASK
#define DEF_INT_CPU_U_MIN_VAL DEF_INT_32U_MIN_VAL
#define DEF_INT_CPU_U_MAX_VAL DEF_INT_32U_MAX_VAL
#define DEF_INT_CPU_S_MIN_VAL DEF_INT_32S_MIN_VAL
#define DEF_INT_CPU_S_MAX_VAL DEF_INT_32S_MAX_VAL
#define DEF_INT_CPU_S_MIN_VAL_ONES_CPL DEF_INT_32S_MIN_VAL_ONES_CPL
#define DEF_INT_CPU_S_MAX_VAL_ONES_CPL DEF_INT_32S_MAX_VAL_ONES_CPL
#elif (DEF_INT_CPU_NBR_BITS == DEF_INT_64_NBR_BITS)
#define DEF_INT_CPU_MASK DEF_INT_64_MASK
#define DEF_INT_CPU_U_MIN_VAL DEF_INT_64U_MIN_VAL
#define DEF_INT_CPU_U_MAX_VAL DEF_INT_64U_MAX_VAL
#define DEF_INT_CPU_S_MIN_VAL DEF_INT_64S_MIN_VAL
#define DEF_INT_CPU_S_MAX_VAL DEF_INT_64S_MAX_VAL
#define DEF_INT_CPU_S_MIN_VAL_ONES_CPL DEF_INT_64S_MIN_VAL_ONES_CPL
#define DEF_INT_CPU_S_MAX_VAL_ONES_CPL DEF_INT_64S_MAX_VAL_ONES_CPL
#else
#error "CPU_CFG_DATA_SIZE illegally #defined in 'cpu.h' "
#error " [See 'cpu.h CONFIGURATION ERRORS']"
#endif
/*$PAGE*/
/* ------------------- TIME DEFINES ------------------- */
#define DEF_TIME_NBR_HR_PER_DAY 24uL
#define DEF_TIME_NBR_MIN_PER_HR 60uL
#define DEF_TIME_NBR_MIN_PER_DAY (DEF_TIME_NBR_MIN_PER_HR * DEF_TIME_NBR_HR_PER_DAY)
#define DEF_TIME_NBR_SEC_PER_MIN 60uL
#define DEF_TIME_NBR_SEC_PER_HR (DEF_TIME_NBR_SEC_PER_MIN * DEF_TIME_NBR_MIN_PER_HR)
#define DEF_TIME_NBR_SEC_PER_DAY (DEF_TIME_NBR_SEC_PER_HR * DEF_TIME_NBR_HR_PER_DAY)
#define DEF_TIME_NBR_mS_PER_SEC 1000uL
#define DEF_TIME_NBR_uS_PER_SEC 1000000uL
#define DEF_TIME_NBR_nS_PER_SEC 1000000000uL
/*$PAGE*/
/*
*********************************************************************************************************
* ERROR CODES
*
* Note(s) : (1) All generic library error codes are #define'd in 'lib_def.h';
* Any module-specific error codes are #define'd in library module header files.
*********************************************************************************************************
*/
#define LIB_ERR_NONE 0
/*$PAGE*/
/*
*********************************************************************************************************
* DATA TYPES
*********************************************************************************************************
*/
typedef CPU_INT16U LIB_ERR;
/*
*********************************************************************************************************
* GLOBAL VARIABLES
*********************************************************************************************************
*/
/*$PAGE*/
/*
*********************************************************************************************************
* BIT MACRO'S
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* DEF_BIT()
*
* Description : Create bit mask with single, specified bit set.
*
* Argument(s) : bit Bit number of bit to set.
*
* Return(s) : Bit mask with single, specified bit set.
*
* Caller(s) : Application.
*
* Note(s) : (1) 'bit' values that overflow the target CPU &/or compiler environment (e.g. negative
* or greater-than-CPU-data-size values) MAY generate compiler warnings &/or errors.
*********************************************************************************************************
*/
#define DEF_BIT(bit) (1u << (bit))
/*$PAGE*/
/*
*********************************************************************************************************
* DEF_BIT_MASK()
*
* Description : Shift a bit mask.
*
* Argument(s) : bit_mask Bit mask to shift.
*
* bit_shift Number of bit positions to left-shift bit mask.
*
* Return(s) : Shifted bit mask.
*
* Caller(s) : Application.
*
* Note(s) : (1) 'bit_shift' values that overflow the target CPU &/or compiler environment (e.g. negative
* or greater-than-CPU-data-size values) MAY generate compiler warnings &/or errors.
*********************************************************************************************************
*/
#define DEF_BIT_MASK(bit_mask, bit_shift) ((bit_mask) << (bit_shift))
/*
*********************************************************************************************************
* DEF_BIT_FIELD()
*
* Description : Create & shift a contiguous bit field.
*
* Argument(s) : bit_field Number of contiguous bits to set in the bit field.
*
* bit_shift Number of bit positions to left-shift bit field.
*
* Return(s) : Shifted bit field.
*
* Caller(s) : Application.
*
* Note(s) : (1) 'bit_field'/'bit_shift' values that overflow the target CPU &/or compiler environment
* (e.g. negative or greater-than-CPU-data-size values) MAY generate compiler warnings
* &/or errors.
*********************************************************************************************************
*/
#define DEF_BIT_FIELD(bit_field, bit_shift) ((((bit_field) >= DEF_INT_CPU_NBR_BITS) ? (DEF_INT_CPU_U_MAX_VAL) \
: (DEF_BIT(bit_field) - 1)) \
<< (bit_shift))
/*$PAGE*/
/*
*********************************************************************************************************
* DEF_BIT_SET()
*
* Description : Set specified bit(s) in a value.
*
* Argument(s) : val Value to modify by setting specified bit(s).
*
* mask Mask of bits to set.
*
* Return(s) : Modified value with specified bit(s) set.
*
* Caller(s) : Application.
*
* Note(s) : none.
*********************************************************************************************************
*/
#define DEF_BIT_SET(val, mask) { (val) |= (mask); }
/*
*********************************************************************************************************
* DEF_BIT_CLR()
*
* Description : Clear specified bit(s) in a value.
*
* Argument(s) : val Value to modify by clearing specified bit(s).
*
* mask Mask of bits to clear.
*
* Return(s) : Modified value with specified bit(s) clear.
*
* Caller(s) : Application.
*
* Note(s) : none.
*********************************************************************************************************
*/
#define DEF_BIT_CLR(val, mask) { (val) &= ~(mask); }
/*$PAGE*/
/*
*********************************************************************************************************
* DEF_BIT_IS_SET()
*
* Description : Determine if specified bit(s) in a value are set.
*
* Argument(s) : val Value to check for specified bit(s) set.
*
* mask Mask of bits to check if set.
*
* Return(s) : DEF_YES, if ALL specified bit(s) are set in value.
*
* DEF_NO, if ALL specified bit(s) are NOT set in value.
*
* Caller(s) : Application.
*
* Note(s) : none.
*********************************************************************************************************
*/
#define DEF_BIT_IS_SET(val, mask) ((((val) & (mask)) == (mask)) ? (DEF_YES) : (DEF_NO ))
/*
*********************************************************************************************************
* DEF_BIT_IS_CLR()
*
* Description : Determine if specified bit(s) in a value are clear.
*
* Argument(s) : val Value to check for specified bit(s) clear.
*
* mask Mask of bits to check if clear.
*
* Return(s) : DEF_YES, if ALL specified bit(s) are clear in value.
*
* DEF_NO, if ALL specified bit(s) are NOT clear in value.
*
* Caller(s) : Application.
*
* Note(s) : none.
*********************************************************************************************************
*/
#define DEF_BIT_IS_CLR(val, mask) (((val) & (mask)) ? (DEF_NO ) : (DEF_YES))
/*$PAGE*/
/*
*********************************************************************************************************
* DEF_BIT_IS_SET_ANY()
*
* Description : Determine if any specified bit(s) in a value are set.
*
* Argument(s) : val Value to check for specified bit(s) set.
*
* mask Mask of bits to check if set.
*
* Return(s) : DEF_YES, if ANY specified bit(s) are set in value.
*
* DEF_NO, if ALL specified bit(s) are NOT set in value.
*
* Caller(s) : Application.
*
* Note(s) : none.
*********************************************************************************************************
*/
#define DEF_BIT_IS_SET_ANY(val, mask) (((val) & (mask)) ? (DEF_YES) : (DEF_NO ))
/*
*********************************************************************************************************
* DEF_BIT_IS_CLR_ANY()
*
* Description : Determine if any specified bit(s) in a value are clear.
*
* Argument(s) : val Value to check for specified bit(s) clear.
*
* mask Mask of bits to check if clear.
*
* Return(s) : DEF_YES, if ANY specified bit(s) are clear in value.
*
* DEF_NO, if ALL specified bit(s) are NOT clear in value.
*
* Note(s) : none.
*********************************************************************************************************
*/
#define DEF_BIT_IS_CLR_ANY(val, mask) ((((val) & (mask)) != (mask)) ? (DEF_YES) : (DEF_NO ))
/*$PAGE*/
/*
*********************************************************************************************************
* MATH MACRO'S
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* DEF_MIN()
*
* Description : Determine the minimum of two values.
*
* Argument(s) : a First value.
*
* b Second value.
*
* Return(s) : Minimum of the two values.
*
* Caller(s) : Application.
*
* Note(s) : none.
*********************************************************************************************************
*/
#define DEF_MIN(a, b) (((a) < (b)) ? (a) : (b))
/*
*********************************************************************************************************
* DEF_MAX()
*
* Description : Determine the maximum of two values.
*
* Argument(s) : a First value.
*
* b Second value.
*
* Return(s) : Maximum of the two values.
*
* Note(s) : none.
*********************************************************************************************************
*/
#define DEF_MAX(a, b) (((a) > (b)) ? (a) : (b))
/*$PAGE*/
/*
*********************************************************************************************************
* DEF_ABS()
*
* Description : Determine the absolute value of a value.
*
* Argument(s) : a Value to calculate absolute value.
*
* Return(s) : Absolute value of the value.
*
* Caller(s) : Application.
*
* Note(s) : none.
*********************************************************************************************************
*/
#define DEF_ABS(a) (((a) < 0) ? (-(a)) : (a))
/*$PAGE*/
/*
*********************************************************************************************************
* FUNCTION PROTOTYPES
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* CONFIGURATION ERRORS
*********************************************************************************************************
*/
/*$PAGE*/
/*
*********************************************************************************************************
* MODULE END
*********************************************************************************************************
*/
#endif /* End of lib def module include. */
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,888 @@
/*
*********************************************************************************************************
* uC/LIB
* CUSTOM LIBRARY MODULES
*
* (c) Copyright 2004-2008; Micrium, Inc.; Weston, FL
*
* All rights reserved. Protected by international copyright laws.
*
* uC/LIB is provided in source form for FREE evaluation, for educational
* use or peaceful research. If you plan on using uC/LIB in a commercial
* product you need to contact Micrium to properly license its use in your
* product. We provide ALL the source code for your convenience and to
* help you experience uC/LIB. The fact that the source code is provided
* does NOT mean that you can use it without paying a licensing fee.
*
* Knowledge of the source code may NOT be used to develop a similar product.
*
* Please help us continue to provide the Embedded community with the finest
* software available. Your honesty is greatly appreciated.
*********************************************************************************************************
*/
/*
*********************************************************************************************************
*
* STANDARD MEMORY OPERATIONS
*
* Filename : lib_mem.h
* Version : V1.25
* Programmer(s) : ITJ
*********************************************************************************************************
* Note(s) : (1) NO compiler-supplied standard library functions are used in library or product software.
*
* (a) ALL standard library functions are implemented in the custom library modules :
*
* (1) \<Custom Library Directory>\lib*.*
*
* (2) \<Custom Library Directory>\Ports\<cpu>\<compiler>\lib*_a.*
*
* where
* <Custom Library Directory> directory path for custom library software
* <cpu> directory name for specific processor (CPU)
* <compiler> directory name for specific compiler
*
* (b) Product-specific library functions are implemented in individual products.
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* MODULE
*********************************************************************************************************
*/
#ifndef LIB_MEM_MODULE_PRESENT
#define LIB_MEM_MODULE_PRESENT
/*$PAGE*/
/*
*********************************************************************************************************
* INCLUDE FILES
*
* Note(s) : (1) The following common software files are located in the following directories :
*
* (a) \<Custom Library Directory>\lib*.*
*
* (b) (1) \<CPU-Compiler Directory>\cpu_def.h
*
* (2) \<CPU-Compiler Directory>\<cpu>\<compiler>\cpu*.*
*
* where
* <Custom Library Directory> directory path for custom library software
* <CPU-Compiler Directory> directory path for common CPU-compiler software
* <cpu> directory name for specific processor (CPU)
* <compiler> directory name for specific compiler
*
* (2) Compiler MUST be configured to include the '\<Custom Library Directory>\uC-LIB\',
* '\<CPU-Compiler Directory>\' directory, & the specific CPU-compiler directory as
* additional include path directories.
*
* (3) NO compiler-supplied standard library functions SHOULD be used.
*********************************************************************************************************
*/
#include <uC-CPU\ARM-Cortex-M3\RealView\cpu.h>
#include <lib_def.h>
#include <app_cfg.h>
/*
*********************************************************************************************************
* EXTERNS
*********************************************************************************************************
*/
#ifdef LIB_MEM_MODULE
#define LIB_MEM_EXT
#else
#define LIB_MEM_EXT extern
#endif
/*$PAGE*/
/*
*********************************************************************************************************
* DEFAULT CONFIGURATION
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* MEMORY LIBRARY ARGUMENT CHECK CONFIGURATION
*
* Note(s) : (1) Configure LIB_MEM_CFG_ARG_CHK_EXT_EN to enable/disable the memory libray suite external
* argument check feature :
*
* (a) When ENABLED, arguments received from any port interface provided by the developer
* or application are checked/validated.
*
* (b) When DISABLED, NO arguments received from any port interface provided by the developer
* or application are checked/validated.
*********************************************************************************************************
*/
/* Configure external argument check feature (see Note #1) : */
#ifndef LIB_MEM_CFG_ARG_CHK_EXT_EN
#define LIB_MEM_CFG_ARG_CHK_EXT_EN DEF_DISABLED
/* DEF_DISABLED Argument check DISABLED */
/* DEF_ENABLED Argument check ENABLED */
#endif
/*
*********************************************************************************************************
* MEMORY POOL CONFIGURATION
*
* Note(s) : (1) Configure LIB_MEM_CFG_POOL_EN to enable/disable memory pool functions.
*********************************************************************************************************
*/
/* Configure memory pool feature (see Note #1) : */
#ifndef LIB_MEM_CFG_POOL_EN
#define LIB_MEM_CFG_POOL_EN DEF_DISABLED
/* DEF_DISABLED Memory pool(s) DISABLED */
/* DEF_ENABLED Memory pool(s) ENABLED */
#endif
/*$PAGE*/
/*
*********************************************************************************************************
* DEFINES
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* LIBRARY MEMORY ERROR CODES
*********************************************************************************************************
*/
#define LIB_MEM_ERR_NONE 10000
#define LIB_MEM_ERR_NULL_PTR 10001 /* Ptr arg(s) passed NULL ptr(s). */
#define LIB_MEM_ERR_NONE_AVAIL 10010 /* NO avail mem rsrc's. */
#define LIB_MEM_ERR_INVALID_SEG_SIZE 10100 /* Invalid mem seg size. */
#define LIB_MEM_ERR_INVALID_SEG_OVERLAP 10101 /* Invalid mem seg overlaps other mem seg(s). */
#define LIB_MEM_ERR_INVALID_POOL 10102 /* Invalid mem pool. */
#define LIB_MEM_ERR_INVALID_ADDR 10103 /* Invalid mem pool addr. */
#define LIB_MEM_ERR_INVALID_BLK_NBR 10104 /* Invalid mem pool blk nbr. */
#define LIB_MEM_ERR_INVALID_BLK_SIZE 10105 /* Invalid mem pool blk size. */
#define LIB_MEM_ERR_INVALID_BLK_IX 10106 /* Invalid mem pool ix. */
#define LIB_MEM_ERR_SEG_EMPTY 10110 /* Mem seg empty; i.e. NO avail mem for mem pools. */
#define LIB_MEM_ERR_POOL_FULL 10111 /* Mem pool full; i.e. All mem blks avail in mem pool. */
#define LIB_MEM_ERR_HEAP_NOT_FOUND 10115 /* Heap seg NOT found. */
#define LIB_MEM_ERR_HEAP_EMPTY 10116 /* Heap seg empty; i.e. NO avail mem in heap. */
/*$PAGE*/
/*
*********************************************************************************************************
* MEMORY LIBRARY TYPE DEFINES
*
* Note(s) : (1) LIB_MEM_TYPE_??? #define values specifically chosen as ASCII representations of the memory
* library types. Memory displays of memory library objects will display the library TYPEs
* with their chosen ASCII names.
**********************************************************************************************************/
/* ------------------- LIB_MEM TYPES ------------------ */
#if (CPU_CFG_ENDIAN_TYPE == CPU_ENDIAN_TYPE_BIG)
#define LIB_MEM_TYPE_NONE 0x4E4F4E45 /* "NONE" in ASCII. */
#define LIB_MEM_TYPE_HEAP 0x48454150 /* "HEAP" in ASCII. */
#define LIB_MEM_TYPE_POOL 0x504F4F4C /* "POOL" in ASCII. */
#else
#if (CPU_CFG_DATA_SIZE == CPU_WORD_SIZE_32)
#define LIB_MEM_TYPE_NONE 0x454E4F4E /* "NONE" in ASCII. */
#define LIB_MEM_TYPE_HEAP 0x50414548 /* "HEAP" in ASCII. */
#define LIB_MEM_TYPE_POOL 0x4C4F4F50 /* "POOL" in ASCII. */
#elif (CPU_CFG_DATA_SIZE == CPU_WORD_SIZE_16)
#define LIB_MEM_TYPE_NONE 0x4F4E454E /* "NONE" in ASCII. */
#define LIB_MEM_TYPE_HEAP 0x45485041 /* "HEAP" in ASCII. */
#define LIB_MEM_TYPE_POOL 0x4F504C4F /* "POOL" in ASCII. */
#else /* Dflt CPU_WORD_SIZE_08. */
#define LIB_MEM_TYPE_NONE 0x4E4F4E45 /* "NONE" in ASCII. */
#define LIB_MEM_TYPE_HEAP 0x48454150 /* "HEAP" in ASCII. */
#define LIB_MEM_TYPE_POOL 0x504F4F4C /* "POOL" in ASCII. */
#endif
#endif
/*$PAGE*/
/*
*********************************************************************************************************
* DATA TYPES
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* LIB MEM TYPE
*
* Note(s) : (1) 'LIB_MEM_TYPE' declared as 'CPU_INT32U' & all 'LIB_MEM_TYPE's #define'd with large, non-trivial
* values to trap & discard invalid/corrupted library memory objects based on 'LIB_MEM_TYPE'.
*********************************************************************************************************
*/
typedef CPU_INT32U LIB_MEM_TYPE;
/*
*********************************************************************************************************
* MEMORY POOL TABLE IX TYPE
*
* Note(s) : (1) MEM_POOL_IX_NONE SHOULD be #define'd based on 'MEM_POOL_IX' data type declared.
*********************************************************************************************************
*/
typedef CPU_INT16U MEM_POOL_IX;
#define MEM_POOL_IX_NONE DEF_INT_16U_MAX_VAL /* Define as max unsigned val (see Note #1). */
#define MEM_POOL_IX_MIN 1
#define MEM_POOL_IX_MAX (MEM_POOL_IX_NONE - 1)
/*$PAGE*/
/*
*********************************************************************************************************
* MEMORY POOL DATA TYPES
*
* MEMORY SEGMENT
* ----------------
* MEMORY POOL'S | | <----
* POINTERS TO | MEMORY | |
* MEM_POOL MEMORY BLOCKS | BLOCKS | |
* |----------------| |---------| | -------- | |
* | O------------------> | O--------------------> | | | |
* |----------------| |---------| | | | | |
* | Pool Addr Ptrs | | O------------- | -------- | |
* | Pool Size | |---------| | | | |
* |----------------| | | | | -------- | |
* | Blk Size | | | --------> | | | |
* | Blk Nbr | | | | | | | |
* | Blk Ix | | . | | -------- | |
* |----------------| | . | | | |
* |----------------| | . | | . | |
* | O----------------- | | | . | |
* |----------------| | | | | . | |
* | O------------ | | | | | |
* |----------------| | | |---------| | -------- | |
* | Seg Size Tot | | | | O--------------------> | | | |
* | Seg Size Rem | | | |---------| | | | | |
* |----------------| | | | | | -------- | |
* | Seg List Ptrs | | | |---------| | | |
* |----------------| | | | ------------ | |
* | | | | <--------
* | | | | | |
* | | | | | |
* | | | | | |
* | | | | | |
* | | | | | |
* | | ---------------- | |
* | | | |
* | -------------------------------------------------- |
* | |
* -----------------------------------------------------------
*
*********************************************************************************************************
*/
typedef struct mem_pool MEM_POOL;
/* --------------------- MEM POOL --------------------- */
struct mem_pool {
LIB_MEM_TYPE Type; /* Pool type : LIB_TYPE_POOL or LIB_TYPE_HEAP. */
MEM_POOL *SegPrevPtr; /* Ptr to PREV mem seg. */
MEM_POOL *SegNextPtr; /* Ptr to NEXT mem seg. */
MEM_POOL *PoolPrevPtr; /* Ptr to PREV mem pool. */
MEM_POOL *PoolNextPtr; /* Ptr to NEXT mem pool. */
void *PoolAddrStart; /* Ptr to start of mem seg for mem pool blks. */
void *PoolAddrEnd; /* Ptr to end of mem seg for mem pool blks. */
void **PoolPtrs; /* Ptr to mem pool's array of blk ptrs. */
MEM_POOL_IX BlkIx; /* Ix into mem pool's array of blk ptrs. */
CPU_SIZE_T PoolSize; /* Size of mem pool (in octets). */
CPU_SIZE_T BlkNbr; /* Nbr of mem pool blks. */
CPU_SIZE_T BlkSize; /* Size of mem pool blks (in octets). */
CPU_SIZE_T BlkAlign; /* Align of mem pool blks (in octets). */
/* --------------------- MEM SEG ---------------------- */
void *SegAddr; /* Ptr to mem seg's base/start addr. */
void *SegAddrNextAvail; /* Ptr to mem seg's next avail addr. */
CPU_SIZE_T SegSizeTot; /* Tot size of mem seg (in octets). */
CPU_SIZE_T SegSizeRem; /* Rem size of mem seg (in octets). */
};
/*$PAGE*/
/*
*********************************************************************************************************
* GLOBAL VARIABLES
*********************************************************************************************************
*/
/*$PAGE*/
/*
*********************************************************************************************************
* MACRO'S
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* MEMORY DATA VALUE MACRO'S
*
* Note(s) : (1) (a) Some variables & variable buffers to pass & receive data values MUST start on appropriate
* CPU word-aligned addresses. This is required because most word-aligned processors are more
* efficient & may even REQUIRE that multi-octet words start on CPU word-aligned addresses.
*
* (1) For 16-bit word-aligned processors, this means that
*
* all 16- & 32-bit words MUST start on addresses that are multiples of 2 octets
*
* (2) For 32-bit word-aligned processors, this means that
*
* all 16-bit words MUST start on addresses that are multiples of 2 octets
* all 32-bit words MUST start on addresses that are multiples of 4 octets
*
* (b) However, some data values macro's appropriately access data values from any CPU addresses,
* word-aligned or not. Thus for processors that require data word alignment, data words can
* be accessed to/from any CPU address, word-aligned or not, without generating data-word-
* alignment exceptions/faults.
*********************************************************************************************************
*/
/*$PAGE*/
/*
*********************************************************************************************************
* MEM_VAL_GET_xxx()
*
* Description : Decode data values from any CPU memory address.
*
* Argument(s) : addr Lowest CPU memory address of data value to decode (see Notes #2 & #3a).
*
* Return(s) : Decoded data value from CPU memory address (see Notes #1 & #3b).
*
* Caller(s) : Application.
*
* Note(s) : (1) Decode data values based on the values' data-word order in CPU memory :
*
* MEM_VAL_GET_xxx_BIG() Decode big- endian data values -- data words' most
* significant octet @ lowest memory address
* MEM_VAL_GET_xxx_LITTLE() Decode little-endian data values -- data words' least
* significant octet @ lowest memory address
* MEM_VAL_GET_xxx() Decode data values using CPU's native or configured
* data-word order
*
* See also 'cpu.h CPU WORD CONFIGURATION Note #2'.
*
* (2) CPU memory addresses/pointers NOT checked for NULL.
*
* (3) (a) MEM_VAL_GET_xxx() macro's decode data values without regard to CPU word-aligned addresses.
* Thus for processors that require data word alignment, data words can be decoded from any
* CPU address, word-aligned or not, without generating data-word-alignment exceptions/faults.
*
* (b) However, any variable to receive the returned data value MUST start on an appropriate CPU
* word-aligned address.
*
* See also 'MEMORY DATA VALUE MACRO'S Note #1'.
*
* (4) MEM_VAL_COPY_GET_xxx() macro's are more efficient than MEM_VAL_GET_xxx() macro's & are
* also independent of CPU data-word-alignment & SHOULD be used whenever possible.
*
* See also 'MEM_VAL_COPY_GET_xxx() Note #4'.
*
* (5) The 'CPU_CFG_ENDIAN_TYPE' pre-processor 'else'-conditional code SHOULD never be compiled/
* linked since each 'cpu.h' SHOULD ensure that the CPU data-word-memory order configuration
* constant (CPU_CFG_ENDIAN_TYPE) is configured with an appropriate data-word-memory order
* value (see 'cpu.h CPU WORD CONFIGURATION Note #2'). The 'else'-conditional code is
* included as an extra precaution in case 'cpu.h' is incorrectly configured.
*********************************************************************************************************
*/
#define MEM_VAL_GET_INT08U_BIG(addr) (((CPU_INT08U)(*(((CPU_INT08U *)(addr)) + 0))) << (0 * DEF_OCTET_NBR_BITS))
#define MEM_VAL_GET_INT16U_BIG(addr) ((((CPU_INT16U)(*(((CPU_INT08U *)(addr)) + 0))) << (1 * DEF_OCTET_NBR_BITS)) + \
(((CPU_INT16U)(*(((CPU_INT08U *)(addr)) + 1))) << (0 * DEF_OCTET_NBR_BITS)))
#define MEM_VAL_GET_INT32U_BIG(addr) ((((CPU_INT32U)(*(((CPU_INT08U *)(addr)) + 0))) << (3 * DEF_OCTET_NBR_BITS)) + \
(((CPU_INT32U)(*(((CPU_INT08U *)(addr)) + 1))) << (2 * DEF_OCTET_NBR_BITS)) + \
(((CPU_INT32U)(*(((CPU_INT08U *)(addr)) + 2))) << (1 * DEF_OCTET_NBR_BITS)) + \
(((CPU_INT32U)(*(((CPU_INT08U *)(addr)) + 3))) << (0 * DEF_OCTET_NBR_BITS)))
#define MEM_VAL_GET_INT08U_LITTLE(addr) (((CPU_INT08U)(*(((CPU_INT08U *)(addr)) + 0))) << (0 * DEF_OCTET_NBR_BITS))
#define MEM_VAL_GET_INT16U_LITTLE(addr) ((((CPU_INT16U)(*(((CPU_INT08U *)(addr)) + 0))) << (0 * DEF_OCTET_NBR_BITS)) + \
(((CPU_INT16U)(*(((CPU_INT08U *)(addr)) + 1))) << (1 * DEF_OCTET_NBR_BITS)))
#define MEM_VAL_GET_INT32U_LITTLE(addr) ((((CPU_INT32U)(*(((CPU_INT08U *)(addr)) + 0))) << (0 * DEF_OCTET_NBR_BITS)) + \
(((CPU_INT32U)(*(((CPU_INT08U *)(addr)) + 1))) << (1 * DEF_OCTET_NBR_BITS)) + \
(((CPU_INT32U)(*(((CPU_INT08U *)(addr)) + 2))) << (2 * DEF_OCTET_NBR_BITS)) + \
(((CPU_INT32U)(*(((CPU_INT08U *)(addr)) + 3))) << (3 * DEF_OCTET_NBR_BITS)))
#if (CPU_CFG_ENDIAN_TYPE == CPU_ENDIAN_TYPE_BIG)
#define MEM_VAL_GET_INT08U(addr) MEM_VAL_GET_INT08U_BIG(addr)
#define MEM_VAL_GET_INT16U(addr) MEM_VAL_GET_INT16U_BIG(addr)
#define MEM_VAL_GET_INT32U(addr) MEM_VAL_GET_INT32U_BIG(addr)
#elif (CPU_CFG_ENDIAN_TYPE == CPU_ENDIAN_TYPE_LITTLE)
#define MEM_VAL_GET_INT08U(addr) MEM_VAL_GET_INT08U_LITTLE(addr)
#define MEM_VAL_GET_INT16U(addr) MEM_VAL_GET_INT16U_LITTLE(addr)
#define MEM_VAL_GET_INT32U(addr) MEM_VAL_GET_INT32U_LITTLE(addr)
#else /* See Note #5. */
#error "CPU_CFG_ENDIAN_TYPE illegally #defined in 'cpu.h' "
#error " [See 'cpu.h CONFIGURATION ERRORS']"
#endif
/*$PAGE*/
/*
*********************************************************************************************************
* MEM_VAL_SET_xxx()
*
* Description : Encode data values to any CPU memory address.
*
* Argument(s) : addr Lowest CPU memory address to encode data value (see Notes #2 & #3a).
*
* val Data value to encode (see Notes #1 & #3b).
*
* Return(s) : none.
*
* Caller(s) : Application.
*
* Note(s) : (1) Encode data values into CPU memory based on the values' data-word order :
*
* MEM_VAL_SET_xxx_BIG() Encode big- endian data values -- data words' most
* significant octet @ lowest memory address
* MEM_VAL_SET_xxx_LITTLE() Encode little-endian data values -- data words' least
* significant octet @ lowest memory address
* MEM_VAL_SET_xxx() Encode data values using CPU's native or configured
* data-word order
*
* See also 'cpu.h CPU WORD CONFIGURATION Note #2'.
*
* (2) CPU memory addresses/pointers NOT checked for NULL.
*
* (3) (a) MEM_VAL_SET_xxx() macro's encode data values without regard to CPU word-aligned addresses.
* Thus for processors that require data word alignment, data words can be encoded to any
* CPU address, word-aligned or not, without generating data-word-alignment exceptions/faults.
*
* (b) However, 'val' data value to encode MUST start on an appropriate CPU word-aligned address.
*
* See also 'MEMORY DATA VALUE MACRO'S Note #1'.
*
* (4) MEM_VAL_COPY_SET_xxx() macro's are more efficient than MEM_VAL_SET_xxx() macro's & are
* also independent of CPU data-word-alignment & SHOULD be used whenever possible.
*
* See also 'MEM_VAL_COPY_SET_xxx() Note #4'.
*
* (5) The 'CPU_CFG_ENDIAN_TYPE' pre-processor 'else'-conditional code SHOULD never be compiled/
* linked since each 'cpu.h' SHOULD ensure that the CPU data-word-memory order configuration
* constant (CPU_CFG_ENDIAN_TYPE) is configured with an appropriate data-word-memory order
* value (see 'cpu.h CPU WORD CONFIGURATION Note #2'). The 'else'-conditional code is
* included as an extra precaution in case 'cpu.h' is incorrectly configured.
*********************************************************************************************************
*/
#define MEM_VAL_SET_INT08U_BIG(addr, val) { (*(((CPU_INT08U *)(addr)) + 0)) = ((CPU_INT08U)((((CPU_INT08U)(val)) & 0xFF) >> (0 * DEF_OCTET_NBR_BITS))); }
#define MEM_VAL_SET_INT16U_BIG(addr, val) { (*(((CPU_INT08U *)(addr)) + 0)) = ((CPU_INT08U)((((CPU_INT16U)(val)) & 0xFF00) >> (1 * DEF_OCTET_NBR_BITS))); \
(*(((CPU_INT08U *)(addr)) + 1)) = ((CPU_INT08U)((((CPU_INT16U)(val)) & 0x00FF) >> (0 * DEF_OCTET_NBR_BITS))); }
#define MEM_VAL_SET_INT32U_BIG(addr, val) { (*(((CPU_INT08U *)(addr)) + 0)) = ((CPU_INT08U)((((CPU_INT32U)(val)) & 0xFF000000) >> (3 * DEF_OCTET_NBR_BITS))); \
(*(((CPU_INT08U *)(addr)) + 1)) = ((CPU_INT08U)((((CPU_INT32U)(val)) & 0x00FF0000) >> (2 * DEF_OCTET_NBR_BITS))); \
(*(((CPU_INT08U *)(addr)) + 2)) = ((CPU_INT08U)((((CPU_INT32U)(val)) & 0x0000FF00) >> (1 * DEF_OCTET_NBR_BITS))); \
(*(((CPU_INT08U *)(addr)) + 3)) = ((CPU_INT08U)((((CPU_INT32U)(val)) & 0x000000FF) >> (0 * DEF_OCTET_NBR_BITS))); }
#define MEM_VAL_SET_INT08U_LITTLE(addr, val) { (*(((CPU_INT08U *)(addr)) + 0)) = ((CPU_INT08U)((((CPU_INT08U)(val)) & 0xFF) >> (0 * DEF_OCTET_NBR_BITS))); }
#define MEM_VAL_SET_INT16U_LITTLE(addr, val) { (*(((CPU_INT08U *)(addr)) + 0)) = ((CPU_INT08U)((((CPU_INT16U)(val)) & 0x00FF) >> (0 * DEF_OCTET_NBR_BITS))); \
(*(((CPU_INT08U *)(addr)) + 1)) = ((CPU_INT08U)((((CPU_INT16U)(val)) & 0xFF00) >> (1 * DEF_OCTET_NBR_BITS))); }
#define MEM_VAL_SET_INT32U_LITTLE(addr, val) { (*(((CPU_INT08U *)(addr)) + 0)) = ((CPU_INT08U)((((CPU_INT32U)(val)) & 0x000000FF) >> (0 * DEF_OCTET_NBR_BITS))); \
(*(((CPU_INT08U *)(addr)) + 1)) = ((CPU_INT08U)((((CPU_INT32U)(val)) & 0x0000FF00) >> (1 * DEF_OCTET_NBR_BITS))); \
(*(((CPU_INT08U *)(addr)) + 2)) = ((CPU_INT08U)((((CPU_INT32U)(val)) & 0x00FF0000) >> (2 * DEF_OCTET_NBR_BITS))); \
(*(((CPU_INT08U *)(addr)) + 3)) = ((CPU_INT08U)((((CPU_INT32U)(val)) & 0xFF000000) >> (3 * DEF_OCTET_NBR_BITS))); }
#if (CPU_CFG_ENDIAN_TYPE == CPU_ENDIAN_TYPE_BIG)
#define MEM_VAL_SET_INT08U(addr, val) MEM_VAL_SET_INT08U_BIG(addr, val)
#define MEM_VAL_SET_INT16U(addr, val) MEM_VAL_SET_INT16U_BIG(addr, val)
#define MEM_VAL_SET_INT32U(addr, val) MEM_VAL_SET_INT32U_BIG(addr, val)
#elif (CPU_CFG_ENDIAN_TYPE == CPU_ENDIAN_TYPE_LITTLE)
#define MEM_VAL_SET_INT08U(addr, val) MEM_VAL_SET_INT08U_LITTLE(addr, val)
#define MEM_VAL_SET_INT16U(addr, val) MEM_VAL_SET_INT16U_LITTLE(addr, val)
#define MEM_VAL_SET_INT32U(addr, val) MEM_VAL_SET_INT32U_LITTLE(addr, val)
#else /* See Note #5. */
#error "CPU_CFG_ENDIAN_TYPE illegally #defined in 'cpu.h' "
#error " [See 'cpu.h CONFIGURATION ERRORS']"
#endif
/*$PAGE*/
/*
*********************************************************************************************************
* MEM_VAL_COPY_GET_xxx()
*
* Description : Copy & decode data values from any CPU memory address to any CPU memory address.
*
* Argument(s) : addr_dest Lowest CPU memory address to copy/decode source address's data value
* (see Notes #2 & #3).
*
* addr_src Lowest CPU memory address of data value to copy/decode
* (see Notes #2 & #3).
*
* Return(s) : none.
*
* Caller(s) : Application.
*
* Note(s) : (1) Copy/decode data values based on the values' data-word order :
*
* MEM_VAL_COPY_GET_xxx_BIG() Decode big- endian data values -- data words' most
* significant octet @ lowest memory address
* MEM_VAL_COPY_GET_xxx_LITTLE() Decode little-endian data values -- data words' least
* significant octet @ lowest memory address
* MEM_VAL_COPY_GET_xxx() Decode data values using CPU's native or configured
* data-word order
*
* See also 'cpu.h CPU WORD CONFIGURATION Note #2'.
*
* (2) CPU memory addresses/pointers NOT checked for NULL.
*
* (3) MEM_VAL_COPY_GET_xxx() macro's copy/decode data values without regard to CPU word-aligned
* addresses. Thus for processors that require data word alignment, data words can be copied/
* decoded to/from any CPU address, word-aligned or not, without generating data-word-alignment
* exceptions/faults.
*
* (4) MEM_VAL_COPY_GET_xxx() macro's are more efficient than MEM_VAL_GET_xxx() macro's & are
* also independent of CPU data-word-alignment & SHOULD be used whenever possible.
*
* See also 'MEM_VAL_GET_xxx() Note #4'.
*
* (5) Since octet-order copy/conversion are inverse operations, memory data value gets/sets are
* inverse operations.
*
* See also 'MEM_VAL_COPY_SET_xxx() Note #5'.
*
* (6) The 'CPU_CFG_ENDIAN_TYPE' pre-processor 'else'-conditional code SHOULD never be compiled/
* linked since each 'cpu.h' SHOULD ensure that the CPU data-word-memory order configuration
* constant (CPU_CFG_ENDIAN_TYPE) is configured with an appropriate data-word-memory order
* value (see 'cpu.h CPU WORD CONFIGURATION Note #2'). The 'else'-conditional code is
* included as an extra precaution in case 'cpu.h' is incorrectly configured.
*********************************************************************************************************
*/
/*$PAGE*/
#if (CPU_CFG_ENDIAN_TYPE == CPU_ENDIAN_TYPE_BIG)
#define MEM_VAL_COPY_GET_INT08U_BIG(addr_dest, addr_src) { (*(((CPU_INT08U *)(addr_dest)) + 0)) = (*(((CPU_INT08U *)(addr_src)) + 0)); }
#define MEM_VAL_COPY_GET_INT16U_BIG(addr_dest, addr_src) { (*(((CPU_INT08U *)(addr_dest)) + 0)) = (*(((CPU_INT08U *)(addr_src)) + 0)); \
(*(((CPU_INT08U *)(addr_dest)) + 1)) = (*(((CPU_INT08U *)(addr_src)) + 1)); }
#define MEM_VAL_COPY_GET_INT32U_BIG(addr_dest, addr_src) { (*(((CPU_INT08U *)(addr_dest)) + 0)) = (*(((CPU_INT08U *)(addr_src)) + 0)); \
(*(((CPU_INT08U *)(addr_dest)) + 1)) = (*(((CPU_INT08U *)(addr_src)) + 1)); \
(*(((CPU_INT08U *)(addr_dest)) + 2)) = (*(((CPU_INT08U *)(addr_src)) + 2)); \
(*(((CPU_INT08U *)(addr_dest)) + 3)) = (*(((CPU_INT08U *)(addr_src)) + 3)); }
#define MEM_VAL_COPY_GET_INT08U_LITTLE(addr_dest, addr_src) { (*(((CPU_INT08U *)(addr_dest)) + 0)) = (*(((CPU_INT08U *)(addr_src)) + 0)); }
#define MEM_VAL_COPY_GET_INT16U_LITTLE(addr_dest, addr_src) { (*(((CPU_INT08U *)(addr_dest)) + 0)) = (*(((CPU_INT08U *)(addr_src)) + 1)); \
(*(((CPU_INT08U *)(addr_dest)) + 1)) = (*(((CPU_INT08U *)(addr_src)) + 0)); }
#define MEM_VAL_COPY_GET_INT32U_LITTLE(addr_dest, addr_src) { (*(((CPU_INT08U *)(addr_dest)) + 0)) = (*(((CPU_INT08U *)(addr_src)) + 3)); \
(*(((CPU_INT08U *)(addr_dest)) + 1)) = (*(((CPU_INT08U *)(addr_src)) + 2)); \
(*(((CPU_INT08U *)(addr_dest)) + 2)) = (*(((CPU_INT08U *)(addr_src)) + 1)); \
(*(((CPU_INT08U *)(addr_dest)) + 3)) = (*(((CPU_INT08U *)(addr_src)) + 0)); }
#define MEM_VAL_COPY_GET_INT08U(addr_dest, addr_src) MEM_VAL_COPY_GET_INT08U_BIG(addr_dest, addr_src)
#define MEM_VAL_COPY_GET_INT16U(addr_dest, addr_src) MEM_VAL_COPY_GET_INT16U_BIG(addr_dest, addr_src)
#define MEM_VAL_COPY_GET_INT32U(addr_dest, addr_src) MEM_VAL_COPY_GET_INT32U_BIG(addr_dest, addr_src)
#elif (CPU_CFG_ENDIAN_TYPE == CPU_ENDIAN_TYPE_LITTLE)
#define MEM_VAL_COPY_GET_INT08U_BIG(addr_dest, addr_src) { (*(((CPU_INT08U *)(addr_dest)) + 0)) = (*(((CPU_INT08U *)(addr_src)) + 0)); }
#define MEM_VAL_COPY_GET_INT16U_BIG(addr_dest, addr_src) { (*(((CPU_INT08U *)(addr_dest)) + 0)) = (*(((CPU_INT08U *)(addr_src)) + 1)); \
(*(((CPU_INT08U *)(addr_dest)) + 1)) = (*(((CPU_INT08U *)(addr_src)) + 0)); }
#define MEM_VAL_COPY_GET_INT32U_BIG(addr_dest, addr_src) { (*(((CPU_INT08U *)(addr_dest)) + 0)) = (*(((CPU_INT08U *)(addr_src)) + 3)); \
(*(((CPU_INT08U *)(addr_dest)) + 1)) = (*(((CPU_INT08U *)(addr_src)) + 2)); \
(*(((CPU_INT08U *)(addr_dest)) + 2)) = (*(((CPU_INT08U *)(addr_src)) + 1)); \
(*(((CPU_INT08U *)(addr_dest)) + 3)) = (*(((CPU_INT08U *)(addr_src)) + 0)); }
#define MEM_VAL_COPY_GET_INT08U_LITTLE(addr_dest, addr_src) { (*(((CPU_INT08U *)(addr_dest)) + 0)) = (*(((CPU_INT08U *)(addr_src)) + 0)); }
#define MEM_VAL_COPY_GET_INT16U_LITTLE(addr_dest, addr_src) { (*(((CPU_INT08U *)(addr_dest)) + 0)) = (*(((CPU_INT08U *)(addr_src)) + 0)); \
(*(((CPU_INT08U *)(addr_dest)) + 1)) = (*(((CPU_INT08U *)(addr_src)) + 1)); }
#define MEM_VAL_COPY_GET_INT32U_LITTLE(addr_dest, addr_src) { (*(((CPU_INT08U *)(addr_dest)) + 0)) = (*(((CPU_INT08U *)(addr_src)) + 0)); \
(*(((CPU_INT08U *)(addr_dest)) + 1)) = (*(((CPU_INT08U *)(addr_src)) + 1)); \
(*(((CPU_INT08U *)(addr_dest)) + 2)) = (*(((CPU_INT08U *)(addr_src)) + 2)); \
(*(((CPU_INT08U *)(addr_dest)) + 3)) = (*(((CPU_INT08U *)(addr_src)) + 3)); }
#define MEM_VAL_COPY_GET_INT08U(addr_dest, addr_src) MEM_VAL_COPY_GET_INT08U_LITTLE(addr_dest, addr_src)
#define MEM_VAL_COPY_GET_INT16U(addr_dest, addr_src) MEM_VAL_COPY_GET_INT16U_LITTLE(addr_dest, addr_src)
#define MEM_VAL_COPY_GET_INT32U(addr_dest, addr_src) MEM_VAL_COPY_GET_INT32U_LITTLE(addr_dest, addr_src)
#else /* See Note #6. */
#error "CPU_CFG_ENDIAN_TYPE illegally #defined in 'cpu.h' "
#error " [See 'cpu.h CONFIGURATION ERRORS']"
#endif
/*$PAGE*/
/*
*********************************************************************************************************
* MEM_VAL_COPY_SET_xxx()
*
* Description : Copy & encode data values from any CPU memory address to any CPU memory address.
*
* Argument(s) : addr_dest Lowest CPU memory address to copy/encode source address's data value
* (see Notes #2 & #3).
*
* addr_src Lowest CPU memory address of data value to copy/encode
* (see Notes #2 & #3).
*
* Return(s) : none.
*
* Caller(s) : Application.
*
* Note(s) : (1) Copy/encode data values based on the values' data-word order :
*
* MEM_VAL_COPY_SET_xxx_BIG() Encode big- endian data values -- data words' most
* significant octet @ lowest memory address
* MEM_VAL_COPY_SET_xxx_LITTLE() Encode little-endian data values -- data words' least
* significant octet @ lowest memory address
* MEM_VAL_COPY_SET_xxx() Encode data values using CPU's native or configured
* data-word order
*
* See also 'cpu.h CPU WORD CONFIGURATION Note #2'.
*
* (2) CPU memory addresses/pointers NOT checked for NULL.
*
* (3) MEM_VAL_COPY_SET_xxx() macro's copy/encode data values without regard to CPU word-aligned
* addresses. Thus for processors that require data word alignment, data words can be copied/
* encoded to/from any CPU address, word-aligned or not, without generating data-word-alignment
* exceptions/faults.
*
* (4) MEM_VAL_COPY_SET_xxx() macro's are more efficient than MEM_VAL_SET_xxx() macro's & are
* also independent of CPU data-word-alignment & SHOULD be used whenever possible.
*
* See also 'MEM_VAL_SET_xxx() Note #4'.
*
* (5) Since octet-order copy/conversion are inverse operations, memory data value gets/sets
* are inverse operations.
*
* See also 'MEM_VAL_COPY_GET_xxx() Note #5'.
*********************************************************************************************************
*/
/* See Note #5. */
#define MEM_VAL_COPY_SET_INT08U_BIG(addr_dest, addr_src) MEM_VAL_COPY_GET_INT08U_BIG(addr_dest, addr_src)
#define MEM_VAL_COPY_SET_INT16U_BIG(addr_dest, addr_src) MEM_VAL_COPY_GET_INT16U_BIG(addr_dest, addr_src)
#define MEM_VAL_COPY_SET_INT32U_BIG(addr_dest, addr_src) MEM_VAL_COPY_GET_INT32U_BIG(addr_dest, addr_src)
#define MEM_VAL_COPY_SET_INT08U_LITTLE(addr_dest, addr_src) MEM_VAL_COPY_GET_INT08U_LITTLE(addr_dest, addr_src)
#define MEM_VAL_COPY_SET_INT16U_LITTLE(addr_dest, addr_src) MEM_VAL_COPY_GET_INT16U_LITTLE(addr_dest, addr_src)
#define MEM_VAL_COPY_SET_INT32U_LITTLE(addr_dest, addr_src) MEM_VAL_COPY_GET_INT32U_LITTLE(addr_dest, addr_src)
#define MEM_VAL_COPY_SET_INT08U(addr_dest, addr_src) MEM_VAL_COPY_GET_INT08U(addr_dest, addr_src)
#define MEM_VAL_COPY_SET_INT16U(addr_dest, addr_src) MEM_VAL_COPY_GET_INT16U(addr_dest, addr_src)
#define MEM_VAL_COPY_SET_INT32U(addr_dest, addr_src) MEM_VAL_COPY_GET_INT32U(addr_dest, addr_src)
/*$PAGE*/
/*
*********************************************************************************************************
* MEM_VAL_COPY_xxx()
*
* Description : Copy data values from any CPU memory address to any CPU memory address.
*
* Argument(s) : addr_dest Lowest CPU memory address to copy source address's data value
* (see Notes #2 & #3).
*
* addr_src Lowest CPU memory address of data value to copy
* (see Notes #2 & #3).
*
* Return(s) : none.
*
* Caller(s) : Application.
*
* Note(s) : (1) MEM_VAL_COPY_xxx() macro's copy data values based on CPU's native data-word order.
*
* See also 'cpu.h CPU WORD CONFIGURATION Note #2'.
*
* (2) CPU memory addresses/pointers NOT checked for NULL.
*
* (3) MEM_VAL_COPY_xxx() macro's copy data values without regard to CPU word-aligned addresses.
* Thus for processors that require data word alignment, data words can be copied to/from any
* CPU address, word-aligned or not, without generating data-word-alignment exceptions/faults.
*********************************************************************************************************
*/
#define MEM_VAL_COPY_08(addr_dest, addr_src) { (*(((CPU_INT08U *)(addr_dest)) + 0)) = (*(((CPU_INT08U *)(addr_src)) + 0)); }
#define MEM_VAL_COPY_16(addr_dest, addr_src) { (*(((CPU_INT08U *)(addr_dest)) + 0)) = (*(((CPU_INT08U *)(addr_src)) + 0)); \
(*(((CPU_INT08U *)(addr_dest)) + 1)) = (*(((CPU_INT08U *)(addr_src)) + 1)); }
#define MEM_VAL_COPY_32(addr_dest, addr_src) { (*(((CPU_INT08U *)(addr_dest)) + 0)) = (*(((CPU_INT08U *)(addr_src)) + 0)); \
(*(((CPU_INT08U *)(addr_dest)) + 1)) = (*(((CPU_INT08U *)(addr_src)) + 1)); \
(*(((CPU_INT08U *)(addr_dest)) + 2)) = (*(((CPU_INT08U *)(addr_src)) + 2)); \
(*(((CPU_INT08U *)(addr_dest)) + 3)) = (*(((CPU_INT08U *)(addr_src)) + 3)); }
/*$PAGE*/
/*
*********************************************************************************************************
* FUNCTION PROTOTYPES
*********************************************************************************************************
*/
void Mem_Init (void);
/* -------------- MEM API FNCTS -------------- */
void Mem_Clr (void *pmem,
CPU_SIZE_T size);
void Mem_Set (void *pmem,
CPU_INT08U data_val,
CPU_SIZE_T size);
void Mem_Copy (void *pdest,
void *psrc,
CPU_SIZE_T size);
CPU_BOOLEAN Mem_Cmp (void *p1_mem,
void *p2_mem,
CPU_SIZE_T size);
#if (LIB_MEM_CFG_POOL_EN == DEF_ENABLED) /* -------------- MEM POOL FNCTS -------------- */
void Mem_PoolCreate (MEM_POOL *pmem_pool,
void *pmem_base_addr,
CPU_SIZE_T mem_size,
CPU_SIZE_T blk_nbr,
CPU_SIZE_T blk_size,
CPU_SIZE_T blk_align,
CPU_SIZE_T *poctets_reqd,
LIB_ERR *perr);
void *Mem_PoolBlkGet (MEM_POOL *pmem_pool,
CPU_SIZE_T size,
LIB_ERR *perr);
void Mem_PoolBlkFree(MEM_POOL *pmem_pool,
void *pmem_blk,
LIB_ERR *perr);
#endif
/*$PAGE*/
/*
*********************************************************************************************************
* CONFIGURATION ERRORS
*********************************************************************************************************
*/
#ifndef LIB_MEM_CFG_ARG_CHK_EXT_EN
#error "LIB_MEM_CFG_ARG_CHK_EXT_EN not #define'd in 'app_cfg.h'"
#error " [MUST be DEF_DISABLED] "
#error " [ || DEF_ENABLED ] "
#elif ((LIB_MEM_CFG_ARG_CHK_EXT_EN != DEF_DISABLED) && \
(LIB_MEM_CFG_ARG_CHK_EXT_EN != DEF_ENABLED ))
#error "LIB_MEM_CFG_ARG_CHK_EXT_EN illegally #define'd in 'app_cfg.h'"
#error " [MUST be DEF_DISABLED] "
#error " [ || DEF_ENABLED ] "
#endif
#ifndef LIB_MEM_CFG_POOL_EN
#error "LIB_MEM_CFG_POOL_EN not #define'd in 'app_cfg.h'"
#error " [MUST be DEF_DISABLED] "
#error " [ || DEF_ENABLED ] "
#elif ((LIB_MEM_CFG_POOL_EN != DEF_DISABLED) && \
(LIB_MEM_CFG_POOL_EN != DEF_ENABLED ))
#error "LIB_MEM_CFG_POOL_EN illegally #define'd in 'app_cfg.h'"
#error " [MUST be DEF_DISABLED] "
#error " [ || DEF_ENABLED ] "
#elif (LIB_MEM_CFG_POOL_EN == DEF_ENABLED)
#ifndef LIB_MEM_CFG_HEAP_SIZE
#error "LIB_MEM_CFG_HEAP_SIZE not #define'd in 'app_cfg.h'"
#error " [MUST be > 0] "
#elif (LIB_MEM_CFG_HEAP_SIZE < 1)
#error "LIB_MEM_CFG_HEAP_SIZE illegally #define'd in 'app_cfg.h'"
#error " [MUST be > 0] "
#endif
#endif
/*$PAGE*/
/*
*********************************************************************************************************
* MODULE END
*********************************************************************************************************
*/
#endif /* End of lib mem module include. */
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,279 @@
/*
*********************************************************************************************************
* uC/LIB
* CUSTOM LIBRARY MODULES
*
* (c) Copyright 2004-2008; Micrium, Inc.; Weston, FL
*
* All rights reserved. Protected by international copyright laws.
*
* uC/LIB is provided in source form for FREE evaluation, for educational
* use or peaceful research. If you plan on using uC/LIB in a commercial
* product you need to contact Micrium to properly license its use in your
* product. We provide ALL the source code for your convenience and to
* help you experience uC/LIB. The fact that the source code is provided
* does NOT mean that you can use it without paying a licensing fee.
*
* Knowledge of the source code may NOT be used to develop a similar product.
*
* Please help us continue to provide the Embedded community with the finest
* software available. Your honesty is greatly appreciated.
*********************************************************************************************************
*/
/*
*********************************************************************************************************
*
* ASCII STRING MANAGEMENT
*
* Filename : lib_str.h
* Version : V1.25
* Programmer(s) : ITJ
* JDH
*********************************************************************************************************
* Note(s) : (1) NO compiler-supplied standard library functions are used in library or product software.
*
* (a) ALL standard library functions are implemented in the custom library modules :
*
* (1) \<Custom Library Directory>\lib*.*
*
* (2) \<Custom Library Directory>\Ports\<cpu>\<compiler>\lib*_a.*
*
* where
* <Custom Library Directory> directory path for custom library software
* <cpu> directory name for specific processor (CPU)
* <compiler> directory name for specific compiler
*
* (b) Product-specific library functions are implemented in individual products.
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* MODULE
*********************************************************************************************************
*/
#ifndef LIB_STR_MODULE_PRESENT
#define LIB_STR_MODULE_PRESENT
/*$PAGE*/
/*
*********************************************************************************************************
* INCLUDE FILES
*
* Note(s) : (1) The following common software files are located in the following directories :
*
* (a) \<Custom Library Directory>\lib*.*
*
* (b) (1) \<CPU-Compiler Directory>\cpu_def.h
*
* (2) \<CPU-Compiler Directory>\<cpu>\<compiler>\cpu*.*
*
* where
* <Custom Library Directory> directory path for custom library software
* <CPU-Compiler Directory> directory path for common CPU-compiler software
* <cpu> directory name for specific processor (CPU)
* <compiler> directory name for specific compiler
*
* (2) Compiler MUST be configured to include the '\<Custom Library Directory>\uC-LIB\',
* '\<CPU-Compiler Directory>\' directory, & the specific CPU-compiler directory as
* additional include path directories.
*
* (3) NO compiler-supplied standard library functions SHOULD be used.
*
* #### The reference to standard library header files SHOULD be removed once all custom
* library functions are implemented WITHOUT reference to ANY standard library function(s).
*
* See also 'STANDARD LIBRARY MACRO'S Note #1'.
*********************************************************************************************************
*/
#include <uC-CPU\ARM-Cortex-M3\RealView\cpu.h>
#include <lib_def.h>
#include <app_cfg.h>
/* See Note #3. */
#include <stdlib.h>
#include <ctype.h>
#include <errno.h>
#include <limits.h>
#include <stdio.h>
/*
*********************************************************************************************************
* EXTERNS
*********************************************************************************************************
*/
#ifdef LIB_STR_MODULE
#define LIB_STR_EXT
#else
#define LIB_STR_EXT extern
#endif
/*$PAGE*/
/*
*********************************************************************************************************
* DEFAULT CONFIGURATION
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* MEMORY POOL CONFIGURATION
*
* Note(s) : (1) Configure LIB_STR_CFG_FP_EN to enable/disable floating point string function(s).
*********************************************************************************************************
*/
/* Configure floating point feature(s) [see Note #1] : */
#ifndef LIB_STR_CFG_FP_EN
#define LIB_STR_CFG_FP_EN DEF_DISABLED
/* DEF_DISABLED Floating point functions DISABLED */
/* DEF_ENABLED Floating point functions ENABLED */
#endif
/*
*********************************************************************************************************
* DEFINES
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* DATA TYPES
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* GLOBAL VARIABLES
*********************************************************************************************************
*/
/*$PAGE*/
/*
*********************************************************************************************************
* MACRO'S
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* STANDARD LIBRARY MACRO'S
*
* Note(s) : (1) NO compiler-supplied standard library functions SHOULD be used.
*
* #### The reference to standard memory functions SHOULD be removed once all custom library
* functions are implemented WITHOUT reference to ANY standard library function(s).
*
* See also 'INCLUDE FILES Note #3'.
*********************************************************************************************************
*/
/* See Note #1. */
#define Str_IsPrint(a) isprint(a)
#define Str_ToLong(a, b, c) strtol((char *)a, (char **)b, c)
#define Str_FmtPrint snprintf
#define Str_FmtScan sscanf
/*$PAGE*/
/*
*********************************************************************************************************
* FUNCTION PROTOTYPES
*********************************************************************************************************
*/
CPU_SIZE_T Str_Len (CPU_CHAR *pstr);
CPU_CHAR *Str_Copy (CPU_CHAR *pdest,
CPU_CHAR *psrc);
CPU_CHAR *Str_Copy_N (CPU_CHAR *pdest,
CPU_CHAR *psrc,
CPU_SIZE_T len_max);
CPU_CHAR *Str_Cat (CPU_CHAR *pdest,
CPU_CHAR *pstr_cat);
CPU_CHAR *Str_Cat_N (CPU_CHAR *pdest,
CPU_CHAR *pstr_cat,
CPU_SIZE_T len_max);
CPU_INT16S Str_Cmp (CPU_CHAR *p1_str,
CPU_CHAR *p2_str);
CPU_INT16S Str_Cmp_N (CPU_CHAR *p1_str,
CPU_CHAR *p2_str,
CPU_SIZE_T len_max);
CPU_CHAR *Str_Char (CPU_CHAR *pstr,
CPU_CHAR srch_char);
CPU_CHAR *Str_Char_N (CPU_CHAR *pstr,
CPU_SIZE_T len_max,
CPU_CHAR srch_char);
CPU_CHAR *Str_Char_Last(CPU_CHAR *pstr,
CPU_CHAR srch_char);
CPU_CHAR *Str_Str (CPU_CHAR *pstr,
CPU_CHAR *srch_str);
#if (LIB_STR_CFG_FP_EN == DEF_ENABLED)
CPU_CHAR *Str_FmtNbr_32(CPU_FP32 nbr,
CPU_INT08U nbr_dig,
CPU_INT08U nbr_dp,
CPU_BOOLEAN lead_zeros,
CPU_BOOLEAN nul,
CPU_CHAR *pstr_fmt);
#endif
/*$PAGE*/
/*
*********************************************************************************************************
* CONFIGURATION ERRORS
*********************************************************************************************************
*/
#ifndef LIB_STR_CFG_FP_EN
#error "LIB_STR_CFG_FP_EN not #define'd in 'app_cfg.h'"
#error " [MUST be DEF_DISABLED] "
#error " [ || DEF_ENABLED ] "
#elif ((LIB_STR_CFG_FP_EN != DEF_DISABLED) && \
(LIB_STR_CFG_FP_EN != DEF_ENABLED ))
#error "LIB_STR_CFG_FP_EN illegally #define'd in 'app_cfg.h'"
#error " [MUST be DEF_DISABLED] "
#error " [ || DEF_ENABLED ] "
#endif
/*
*********************************************************************************************************
* MODULE END
*********************************************************************************************************
*/
#endif /* End of lib str module include. */
@@ -0,0 +1,44 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : GUIConf.h
Purpose : Configures abilities, fonts etc.
----------------------------------------------------------------------
*/
#ifndef GUICONF_H
#define GUICONF_H
#define GUI_OS (1) /* Compile with multitasking support */
#define GUI_SUPPORT_TOUCH (1) /* Support a touch screen (req. win-manager) */
#define GUI_SUPPORT_UNICODE (1) /* Support mixed ASCII/UNICODE strings */
#define GUI_DEFAULT_FONT &GUI_Font6x8
#define GUI_ALLOC_SIZE 10000 /* Size of dynamic memory ... For WM and memory devices*/
/*********************************************************************
*
* Configuration of available packages
*/
#define GUI_WINSUPPORT 1 /* Window manager package available */
#define GUI_SUPPORT_MEMDEV 1 /* Memory devices available */
#define GUI_SUPPORT_AA 1 /* Anti aliasing available */
#endif /* Avoid multiple inclusion */
@@ -0,0 +1,33 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : GUITouch.Conf.h
Purpose : Configures touch screen module
----------------------------------------------------------------------
*/
#ifndef __GUITOUCH_CONF_H
#define __GUITOUCH_CONF_H
#define GUI_TOUCH_SWAP_XY 0
#define GUI_TOUCH_MIRROR_X 0
#define GUI_TOUCH_MIRROR_Y 0
#define GUI_TOUCH_AD_LEFT NULL
#define GUI_TOUCH_AD_RIGHT NULL
#define GUI_TOUCH_AD_TOP NULL
#define GUI_TOUCH_AD_BOTTOM NULL
#endif /* GUITOUCH_CONF_H */
@@ -0,0 +1,36 @@
/*********************************************************************************************************
*
* File : LCDConf.h
* Hardware Environment:
* Build Environment : RealView MDK-ARM Version: 4.20
* Version : V1.0
* By :
*
* (c) Copyright 2005-2011, WaveShare
* http://www.waveshare.net
* All Rights Reserved
*
*********************************************************************************************************/
#ifndef LCDCONF_H
#define LCDCONF_H
/* Private define ------------------------------------------------------------*/
#define HY32D (8989)
#define LCD_XSIZE (320)
#define LCD_YSIZE (240)
#define LCD_CONTROLLER (HY32D)
#define LCD_BITSPERPIXEL (16)
#define LCD_FIXEDPALETTE (565)
#define LCD_SWAP_RB (1)
//#define LCD_SWAP_XY (1)
#define LCD_INIT_CONTROLLER() LCD_Initializtion()
#endif
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
@@ -0,0 +1,56 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : GUI_TOUCH_X.C
Purpose : Config / System dependent externals for GUI
---------------------------END-OF-HEADER------------------------------
*/
/* Includes ------------------------------------------------------------------*/
#include <includes.h>
void GUI_TOUCH_X_ActivateX(void) {
}
void GUI_TOUCH_X_ActivateY(void) {
}
int GUI_TOUCH_X_MeasureX(void) {
return 0;
}
int GUI_TOUCH_X_MeasureY(void) {
return 0;
}
extern int xPhys, yPhys;
int CalibrationComplete = 0;
void GUI_TOUCH_Measure(void) {
Coordinate * Ptr;
xPhys = -1; yPhys = -1;
Ptr = Read_Ads7846();
if( Ptr != (void*)0 )
{
xPhys = Ptr->x;
yPhys = Ptr->y;
}
}
@@ -0,0 +1,212 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* 礐/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
---Author-Explanation
*
* 1.00.00 020519 JJL First release of uC/GUI to uC/OS-II interface
*
*
* Known problems or limitations with current version
*
* None.
*
*
* Open issues
*
* None
*********************************************************************************************************
*/
#include <includes.h>
#include "uCGUI\inc\GUI_Private.H"
/*
*********************************************************************************************************
* GLOBAL VARIABLES
*********************************************************************************************************
*/
static OS_EVENT *DispSem;
static OS_EVENT *EventMbox;
static OS_EVENT *KeySem;
static int KeyPressed;
static char KeyIsInited;
/*
*********************************************************************************************************
* TIMING FUNCTIONS
*
* Notes: Some timing dependent routines of uC/GUI require a GetTime and delay funtion.
* Default time unit (tick), normally is 1 ms.
*********************************************************************************************************
*/
int GUI_X_GetTime(void)
{
return ((int)OSTimeGet());
}
void GUI_X_Delay(int period)
{
INT32U ticks;
ticks=(period*1000)/OS_TICKS_PER_SEC;
OSTimeDly((INT16U)ticks);
}
/*
*********************************************************************************************************
* GUI_X_ExecIdle()
*********************************************************************************************************
*/
/* WM空闲时调用 */
void GUI_X_ExecIdle(void)
{
OSTimeDly(50);
}
/*
*********************************************************************************************************
* MULTITASKING INTERFACE FUNCTIONS
*
* Note(1): 1) The following routines are required only if uC/GUI is used in a true multi task environment,
* which means you have more than one thread using the uC/GUI API. In this case the #define
* GUI_OS 1 needs to be in GUIConf.h
*********************************************************************************************************
*/
void GUI_X_InitOS (void)
{
DispSem = OSSemCreate(1); /* 建立一个互斥型信号量 */
EventMbox = OSMboxCreate((void *)0); /* 建立一个邮箱 */
}
void GUI_X_Lock(void)
{
INT8U err;
OSSemPend(DispSem,0,&err);
}
void GUI_X_Unlock(void)
{
OSSemPost(DispSem);
}
U32 GUI_X_GetTaskId(void)
{
return ((U32)(OSTCBCur->OSTCBPrio));
}
/*
*********************************************************************************************************
* GUI_X_WaitEvent()
* GUI_X_SignalEvent()
*********************************************************************************************************
*/
void GUI_X_WaitEvent(void)
{
INT8U err;
(void)OSMboxPend(EventMbox,0,&err);
}
void GUI_X_SignalEvent(void)
{
(void)OSMboxPost(EventMbox,(void *)1);
}
/*
*********************************************************************************************************
* KEYBOARD INTERFACE FUNCTIONS
*
* Purpose: The keyboard routines are required only by some widgets.
* If widgets are not used, they may be eliminated.
*
* Note(s): If uC/OS-II is used, characters typed into the log window will be placed in the keyboard buffer.
* This is a neat feature which allows you to operate your target system without having to use or
* even to have a keyboard connected to it. (useful for demos !)
*********************************************************************************************************
*/
static void CheckInit(void)
{
if(KeyIsInited==DEF_FALSE)
{
KeyIsInited = DEF_TRUE;
GUI_X_Init();
}
}
/* 被GUI_Init()调用,用来初始化一些GUI运行之前需要用的硬件,如键盘或者鼠标之类的.如果不需要的话,可以为空 */
void GUI_X_Init(void)
{
KeySem = OSSemCreate(0);
}
int GUI_X_GetKey(void)
{
int r;
r = KeyPressed;
CheckInit();
KeyPressed = 0;
return (r);
}
int GUI_X_WaitKey(void)
{
int r;
INT8U err;
CheckInit();
if(KeyPressed==0)
{
OSSemPend(KeySem,0,&err); /* 等待信号量 */
}
r= KeyPressed;
KeyPressed = 0;
return (r);
}
void GUI_X_StoreKey(int k)
{
KeyPressed = k;
OSSemPost(KeySem); /* 释放信号量 */
}
void GUI_X_Log(const char *s)
{
GUI_USE_PARA(s);
}
void GUI_X_Warn(const char *s)
{
GUI_USE_PARA(s);
}
void GUI_X_ErrorOut(const char *s)
{
GUI_USE_PARA(s);
}
@@ -0,0 +1,163 @@
/*********************************************************************
* SEGGER MICROCONTROLLER SYSTEME GmbH *
* Solutions for real time microcontroller applications *
**********************************************************************
* *
* (c) 1996 - 2007 SEGGER Microcontroller Systeme GmbH *
* *
* Internet: www.segger.com Support: support@segger.com *
* *
**********************************************************************
** emWin V4.14 - Graphical user interface for embedded applications **
emWin is protected by international copyright laws. Knowledge of the
source code may not be used to write a similar product. This file may
only be used in accordance with a license and should not be re-
distributed in any way. We appreciate your understanding and fairness.
----------------------------------------------------------------------
File : LCD_X_8080.c
Purpose : Port routines 8080 interface, 16 bit data bus
----------------------------------------------------------------------
*/
/*********************************************************************
*
* Hardware configuration
*
**********************************************************************
Needs to be adapted to your target hardware.
*/
#include <includes.h>
#include "LCDConf.h"
#include "GUI.h"
/*********************************************************************
*
* Local defines (sfrs used in LCD_X_8080_16.c)
*
**********************************************************************
*/
void LCD_CtrlLinesConfig(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* Enable FSMC, GPIOD, GPIOE, GPIOF, GPIOG and AFIO clocks */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE |
RCC_APB2Periph_GPIOF | RCC_APB2Periph_GPIOG |
RCC_APB2Periph_AFIO, ENABLE);
//±³¹â¿ØÖÆ
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8
;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_WriteBit(GPIOA, GPIO_Pin_8, Bit_RESET);
//±³¹â¿ØÖÆ
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_WriteBit(GPIOC, GPIO_Pin_6, Bit_SET);
/* Set PD.00(D2), PD.01(D3), PD.04(NOE), PD.05(NWE), PD.08(D13), PD.09(D14),
PD.10(D15), PD.14(D0), PD.15(D1) as alternate
function push pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 |
GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_14 |
GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOD, &GPIO_InitStructure);
/* Set PE.07(D4), PE.08(D5), PE.09(D6), PE.10(D7), PE.11(D8), PE.12(D9), PE.13(D10),
PE.14(D11), PE.15(D12) as alternate function push pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |
GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 |
GPIO_Pin_15;
GPIO_Init(GPIOE, &GPIO_InitStructure);
// GPIO_WriteBit(GPIOE, GPIO_Pin_6, Bit_SET);
/* Set PF.00(A0 (RS)) as alternate function push pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_Init(GPIOF, &GPIO_InitStructure);
/* Set PG.12(NE4 (LCD/CS)) as alternate function push pull - CE3(LCD /CS) */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_Init(GPIOG, &GPIO_InitStructure);
}
/*******************************************************************************
* Function Name : LCD_FSMCConfig
* Description : Configures the Parallel interface (FSMC) for LCD(Parallel mode)
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void LCD_FSMCConfig(void)
{
FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;
FSMC_NORSRAMTimingInitTypeDef p;
/*-- FSMC Configuration ------------------------------------------------------*/
/*----------------------- SRAM Bank 4 ----------------------------------------*/
/* FSMC_Bank1_NORSRAM4 configuration */
p.FSMC_AddressSetupTime = 0;
p.FSMC_AddressHoldTime = 0;
p.FSMC_DataSetupTime = 2;
p.FSMC_BusTurnAroundDuration = 0;
p.FSMC_CLKDivision = 0;
p.FSMC_DataLatency = 0;
p.FSMC_AccessMode = FSMC_AccessMode_A;
/* Color LCD configuration ------------------------------------
LCD configured as follow:
- Data/Address MUX = Disable
- Memory Type = SRAM
- Data Width = 16bit
- Write Operation = Enable
- Extended Mode = Enable
- Asynchronous Wait = Disable */
FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM4;
FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;
FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
FSMC_NORSRAMInitStructure.FSMC_AsyncWait = FSMC_AsyncWait_Disable;
FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;
FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
/* BANK 4 (of NOR/SRAM Bank 1~4) is enabled */
FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE);
}
/*********************************************************************
*
* High level LCD access macros
*
**********************************************************************
Usually, there is no need to modify these macros.
It should be sufficient ot modify the low-level macros
above.
*/
void LCD_X_Init(void) {
/* Configure the LCD Control pins --------------------------------------------*/
LCD_CtrlLinesConfig();
/* Configure the FSMC Parallel interface -------------------------------------*/
LCD_FSMCConfig();
}
@@ -0,0 +1,26 @@
REM ****************************************
REM Compile GUIDemo modules
REM ****************************************
CALL CC GUIDEMO
CALL CC GUIDEMO_Automotive
CALL CC GUIDEMO_Bitmap
CALL CC GUIDEMO_Bitmap4bpp
CALL CC GUIDEMO_Circle
CALL CC GUIDEMO_ColorBar
CALL CC GUIDEMO_ColorList
CALL CC GUIDEMO_Cursor
CALL CC GUIDEMO_Dialog
CALL CC GUIDEMO_Font
CALL CC GUIDEMO_FrameWin
CALL CC GUIDEMO_Graph
CALL CC GUIDEMO_HardwareInfo
CALL CC GUIDEMO_Intro
CALL CC GUIDEMO_LUT
CALL CC GUIDEMO_MemDevB
CALL CC GUIDEMO_Navi
CALL CC GUIDEMO_Polygon
CALL CC GUIDEMO_ProgBar
CALL CC GUIDEMO_Speed
CALL CC GUIDEMO_Touch
CALL CC SeggerLogoBlue
@@ -0,0 +1,447 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* ľC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : GUIDEMO.c
Purpose : Several GUIDEMO routines
----------------------------------------------------------------------
*/
#include <stddef.h>
#include "GUI.h"
#if GUI_WINSUPPORT
#include "PROGBAR.h"
#include "LISTBOX.h"
#include "FRAMEWIN.h"
#include "BUTTON.h"
#endif
#include "GUIDEMO.h"
/*********************************************************************
*
* Static variables
*
**********************************************************************
*/
#if GUI_WINSUPPORT
static BUTTON_Handle _ahButton[2];
static FRAMEWIN_Handle _ahFrameWin[3];
static int _ButtonSizeX, _ButtonSizeY;
#if GUIDEMO_LARGE
static FRAMEWIN_Handle _ahInfoWin[2];
static const char* _sInfo;
#endif
#endif
static int _iTest, _iTestMinor;
static char _CmdNext;
static const char* _sExplain;
#define countof(Obj) (sizeof(Obj)/sizeof(Obj[0]))
/*********************************************************************
*
* Routine table
*
**********************************************************************
The routines to be called are listed here. The advantage to calling
directly is that we can execute some code before and after.
*/
typedef void fVoidVoid(void);
static fVoidVoid * _apfTest[] = {
GUIDEMO_HardwareInfo,
GUIDEMO_Speed,
#if GUI_SUPPORT_MEMDEV
// GUIDEMO_Graph,
#endif
// GUIDEMO_Bitmap,
// GUIDEMO_Cursor,
// GUIDEMO_ShowInternationalFonts,
GUIDEMO_ShowColorBar,
GUIDEMO_ShowColorList,
// GUIDEMO_DemoLUT,
GUIDEMO_DemoPolygon,
GUIDEMO_Circle,
// GUIDEMO_ShowMemoryDevice,
// GUIDEMO_Automotive,
// GUIDEMO_Navigation,
#if GUI_WINSUPPORT
GUIDEMO_DemoProgBar,
GUIDEMO_DemoFrameWin,
GUIDEMO_Dialog,
// GUIDEMO_WM,
#if GUI_SUPPORT_TOUCH
// GUIDEMO_Touch,
#endif
#endif
0
};
/*********************************************************************
*
* Static routines
*
**********************************************************************
*/
static void _UpdateCmdWin(void) {
#if GUI_WINSUPPORT && GUIDEMO_LARGE
WM_InvalidateWindow(_ahInfoWin[1]);
#endif
}
#if (GUI_WINSUPPORT && GUIDEMO_LARGE)
static void _cbCmdWin(WM_MESSAGE* pMsg) {
switch (pMsg->MsgId) {
case WM_PAINT:
/* Update info in command window */
GUI_SetBkColor(GUI_GRAY);
GUI_Clear();
GUI_DispStringAt("Demo ", 0, 0);
GUI_DispDecMin(_iTest + 1);
GUI_DispString(".");
GUI_DispDecMin(_iTestMinor);
GUI_DispString("/");
GUI_DispDecMin(countof(_apfTest));
default:
WM_DefaultProc(pMsg);
}
}
#endif
static void _UpdateInfoWin(void) {
#if GUI_WINSUPPORT && GUIDEMO_LARGE
GUI_RECT rClient;
WM_HWIN hWin;
GUI_CONTEXT ContextOld;
GUI_SaveContext(&ContextOld);
/* Update info window */
WM_ShowWindow(_ahInfoWin[0]);
WM_ShowWindow(_ahFrameWin[0]);
hWin = WM_SelectWindow(_ahInfoWin[0]);
GUI_GetClientRect(&rClient);
GUI_SetBkColor(GUI_WHITE);
GUI_Clear();
GUI_SetColor(GUI_BLACK);
GUI_SetFont(&GUI_Font13_1);
GUI_SetTextAlign(GUI_TA_HCENTER);
GUI_DispStringHCenterAt(_sInfo, (rClient.x1 - rClient.x0) / 2, 0);
GUI_SetTextAlign(GUI_TA_LEFT);
GUI_SetFont(&GUI_Font8_ASCII);
GUI_DispStringAt(_sExplain, 0, 20);
WM_SelectWindow(hWin);
GUI_RestoreContext(&ContextOld);
#endif
}
/*********************************************************************
*
* Exported routines
*
**********************************************************************
*/
GUI_COLOR GUIDEMO_SetBkColor(GUI_COLOR Color) {
GUI_COLOR r;
if (GUI_ColorIsAvailable(GUI_RED)) {
r = Color;
} else {
r = GUI_BLACK;
}
GUI_SetBkColor(r);
return r;
}
GUI_COLOR GUIDEMO_SetColor(GUI_COLOR Color) {
GUI_COLOR r;
if (GUI_ColorIsAvailable(GUI_RED)) {
r = Color;
} else {
r = GUI_WHITE;
}
GUI_SetColor(r);
return r;
}
int GUIDEMO_Delay(int t) {
int r = 0;
#if GUI_WINSUPPORT
U32 value, tm;
#if GUIDEMO_LARGE
PROGBAR_Handle hProg;
#endif
WM_SetForegroundWindow(_ahButton[0]);
#if GUIDEMO_LARGE
hProg = (t > 100) ? PROGBAR_CreateAsChild(10, 10, 60, 7, _ahInfoWin[1], 0,
WM_CF_SHOW | WM_CF_STAYONTOP| WM_CF_MEMDEV) : 0;
PROGBAR_SetMinMax(hProg, 0, t);
#endif
tm = GUI_GetTime();
do {
value = GUI_GetTime() - tm;
#if GUIDEMO_LARGE
PROGBAR_SetValue(hProg, value);
WM_ExecIdle();
#endif
GUI_Delay(10);
} while ((value < (U32)t) && !GUIDEMO_CheckCancel());
#if GUIDEMO_LARGE
PROGBAR_Delete(hProg);
#endif
_UpdateCmdWin();
WM_ExecIdle();
#else
GUI_Delay(t);
#endif
return r;
}
void GUIDEMO_Wait(void) {
GUIDEMO_Delay(4000);
GUIDEMO_NotifyStartNext();
}
int GUIDEMO_CheckCancel(void) {
int c = GUI_GetKey();
#if GUI_WINSUPPORT
WM_ExecIdle();
#endif
if ((c == 'n') || (c=='N'))
_CmdNext =1;
if ((c == 'h') || (c=='H')) {
GUI_Delay(500);
do {
GUI_Delay(10);
#if GUI_WINSUPPORT
WM_ExecIdle();
#endif
c = GUI_GetKey();
} while (!c);
}
return _CmdNext;
}
void GUIDEMO_ShowInfo(const char* s) {
_sExplain = s;
_UpdateInfoWin();
}
void GUIDEMO_HideInfoWin(void) {
#if GUI_WINSUPPORT
WM_HideWindow(_ahFrameWin[0]);
#endif
}
void GUIDEMO_NotifyStartNext(void) {
_CmdNext = 0;
_UpdateCmdWin();
_iTestMinor++;
}
int GUIDEMO_WaitKey(void) {
int r = 0;
U32 tMax = GUI_GetTime() + 4000;
U32 tDiff;
#if GUI_WINSUPPORT
PROGBAR_Handle hProg = PROGBAR_Create(LCD_GetXSize() - 70,
LCD_GetYSize() - 40,
80, 5, WM_CF_SHOW);
#endif
while (tDiff = tMax - GUI_GetTime(), (tDiff > 0) && !GUIDEMO_CheckCancel()) {
if ((r = GUI_GetKey()) != 0)
break;
}
#if GUI_WINSUPPORT
PROGBAR_Delete(hProg);
WM_ExecIdle();
#endif
return r;
}
void GUIDEMO_ShowIntro(const char * s, const char * sExp) {
GUI_CONTEXT ContextOld;
GUI_SaveContext(&ContextOld);
#if GUI_WINSUPPORT && GUIDEMO_LARGE
_sInfo = s;
#endif
_sExplain = sExp;
GUI_SetDefault();
GUIDEMO_HideInfoWin();
GUIDEMO_SetBkColor(GUI_BLUE);
GUI_SetColor(GUI_WHITE);
GUI_Clear();
#if !(GUIDEMO_TINY)
GUI_SetFont(&GUI_FontComic18B_ASCII);
GUI_DispStringHCenterAt(s, LCD_GET_XSIZE() / 2, LCD_GET_YSIZE() / 3 - 10);
#else
GUI_SetFont(&GUI_Font13B_ASCII);
GUI_DispStringHCenterAt(s, LCD_GET_XSIZE() / 2, LCD_GET_YSIZE() / 3 - 18);
#endif
if (_sExplain) {
GUI_SetFont(&GUI_Font8_ASCII);
#if !(GUIDEMO_TINY)
GUI_DispStringHCenterAt(_sExplain, LCD_GET_XSIZE() / 2, LCD_GET_YSIZE() / 2 - 10);
#else
GUI_DispStringHCenterAt(_sExplain, LCD_GET_XSIZE() / 2, LCD_GET_YSIZE() / 2 - 14);
#endif
}
GUIDEMO_Delay(_sExplain ? 2000 : 4000);
#if GUI_WINSUPPORT
_UpdateInfoWin();
_UpdateCmdWin();
#endif
GUI_RestoreContext(&ContextOld);
#if GUI_WINSUPPORT
WM_ExecIdle();
#endif
GUIDEMO_NotifyStartNext();
GUIDEMO_SetBkColor(GUI_RED);
GUI_Clear();
}
/*********************************************************************
*
* GUIDEMO_main(): Large version of the demo
*
**********************************************************************
*/
#if GUIDEMO_LARGE
void GUIDEMO_main(void) {
#if GUI_WINSUPPORT
int i;
int xSize, ySize, xPos, yPos;
#endif
#if (GUI_SUPPORT_CURSOR|GUI_SUPPORT_TOUCH)
GUI_CURSOR_Show();
#endif
GUI_Clear();
#if GUI_WINSUPPORT
#if GUI_NUM_LAYERS > 1
_ahFrameWin[2] = FRAMEWIN_CreateAsChild(10, 10, 100, 100, WM_GetDesktopWindowEx(1), "Display 1", NULL, WM_CF_SHOW);
WM_SetDesktopColorEx(GUI_RED, 1);
GUI_Delay(1000);
#endif
WM_SetCreateFlags(WM_CF_MEMDEV); /* Automatically use memory devices on all windows */
/* Calculate position and size of FrameWin[1] */
_ButtonSizeX = 30;
_ButtonSizeY = 20;
/* Create the control window incl. buttons */
_ahFrameWin[1] = FRAMEWIN_Create("Control", &_cbCmdWin, WM_CF_SHOW | WM_CF_STAYONTOP,
LCD_GetXSize() - 80, LCD_GetYSize() - 60, 80, 60);
_ahInfoWin[1] = WM_GetClientWindow(_ahFrameWin[1]);
_ahButton[0] = BUTTON_CreateAsChild(4, 20, _ButtonSizeX, _ButtonSizeY, _ahInfoWin[1],
'H' , WM_CF_SHOW | WM_CF_STAYONTOP | WM_CF_MEMDEV);
_ahButton[1] = BUTTON_CreateAsChild(40, 20, _ButtonSizeX, _ButtonSizeY, _ahInfoWin[1],
'N' , WM_CF_SHOW | WM_CF_STAYONTOP | WM_CF_MEMDEV);
BUTTON_SetText(_ahButton[0], "Halt");
BUTTON_SetText(_ahButton[1], "Next");
_UpdateCmdWin();
WM_ExecIdle();
#endif
/* Show Intro */
GUIDEMO_Intro();
#if GUI_WINSUPPORT
/* Calculate position and size of FrameWin[0] */
xSize = LCD_GetXSize() / 2;
ySize = 65;
xPos = LCD_GetXSize() - xSize;
yPos = 0;
/* Create info window and run the individual demos */
_ahFrameWin[0] = FRAMEWIN_Create("emWin Demo", NULL, WM_CF_STAYONTOP,
xPos, yPos, xSize, ySize);
// _ahInfoWin[0] = WM_GetFirstChild(_ahFrameWin[0]);
_ahInfoWin[0] = WM_CreateWindowAsChild(0, 0, 0, 0, WM_GetFirstChild(_ahFrameWin[0]), WM_CF_SHOW | WM_CF_STAYONTOP, 0, 0);
WM_ExecIdle();
#endif
/* Run the individual demos ! */
for (_iTest = 0; _apfTest[_iTest]; _iTest++) {
GUI_CONTEXT ContextOld;
GUI_SaveContext(&ContextOld);
_iTestMinor = 0;
_UpdateCmdWin();
(*_apfTest[_iTest])();
_CmdNext = 0;
GUI_RestoreContext(&ContextOld);
}
/* Cleanup */
#if GUI_WINSUPPORT
for (i = 0; i < countof(_ahFrameWin); i++) {
WM_DeleteWindow(_ahFrameWin[i]);
}
#endif
}
#else /* GUIDEMO_LARGE */
/*********************************************************************
*
* GUIDEMO_main(): Small version of the demo
*
**********************************************************************
*/
void GUIDEMO_main(void) {
#if GUI_WINSUPPORT
int i;
#endif
#if GUI_WINSUPPORT
#if GUI_NUM_LAYERS > 1
FRAMEWIN_CreateAsChild(10, 10, 100, 100, WM_GetDesktopWindowEx(1), "Display 1", NULL, WM_CF_SHOW);
GUI_Delay(1000);
#endif
WM_SetCreateFlags(WM_CF_MEMDEV); /* Automatically use memory devices on all windows */
_ButtonSizeX = 27;
_ButtonSizeY = 14;
_ahButton[0] = BUTTON_Create(LCD_GetXSize() - _ButtonSizeX * 2 - 4,
LCD_GetYSize() - _ButtonSizeY - 2,
_ButtonSizeX, _ButtonSizeY,
'H' , WM_CF_SHOW | WM_CF_STAYONTOP | WM_CF_MEMDEV);
_ahButton[1] = BUTTON_Create(LCD_GetXSize() - _ButtonSizeX - 2,
LCD_GetYSize() - _ButtonSizeY - 2,
_ButtonSizeX, _ButtonSizeY,
'N' , WM_CF_SHOW | WM_CF_STAYONTOP | WM_CF_MEMDEV);
BUTTON_SetFont(_ahButton[0], &GUI_Font8_ASCII);
BUTTON_SetFont(_ahButton[1], &GUI_Font8_ASCII);
BUTTON_SetText(_ahButton[0], "Halt");
BUTTON_SetText(_ahButton[1], "Next");
_UpdateCmdWin();
WM_ExecIdle();
#endif
/* Show Intro */
GUIDEMO_Intro();
/* Run the individual demos ! */
for (_iTest = 0; _apfTest[_iTest]; _iTest++) {
GUI_CONTEXT ContextOld;
GUI_SaveContext(&ContextOld);
_iTestMinor = 0;
_UpdateCmdWin();
(*_apfTest[_iTest])();
_CmdNext = 0;
GUI_RestoreContext(&ContextOld);
}
/* Cleanup */
#if GUI_WINSUPPORT
for (i = 0; i < countof(_ahButton); i++) {
BUTTON_Delete(_ahButton[i]);
}
#endif
}
#endif /* GUIDEMO_LARGE */
@@ -0,0 +1,126 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : GUIDEMO.h
Purpose : Multiple choice for emWin
----------------------------------------------------------------------
*/
#ifndef GUIDEMO_H
#define GUIDEMO_H
#include "LCD_ConfDefaults.h" /* valid LCD configuration */
#if defined(__cplusplus)
extern "C" { /* Make sure we have C-declarations in C++ programs */
#endif
/*********************************************************************
*
* GUIDEMO publics
*
*********************************************************************
The following are the routines which are available to the
demo modules.
*/
void GUIDEMO_main(void);
/*********************************************************************
*
* GUIDEMO main routines
*
*********************************************************************
The following are the routines which are available to the
demo modules.
*/
GUI_COLOR GUIDEMO_SetBkColor (GUI_COLOR Color);
GUI_COLOR GUIDEMO_SetColor (GUI_COLOR Color);
void GUIDEMO_Wait (void);
int GUIDEMO_Delay (int t);
void GUIDEMO_ShowIntro (const char*s, const char* sExplain);
void GUIDEMO_ShowInfo (const char* sExplain);
int GUIDEMO_CheckCancel (void);
void GUIDEMO_NotifyStartNext (void);
void GUIDEMO_HideInfoWin (void);
int GUIDEMO_WaitKey (void);
extern const GUI_BITMAP GUIDEMO_bm4bpp;
/*********************************************************************
*
* Demo modules
*
*********************************************************************
The demo consists of different modules which are usually called
by the main routine.
The following are the declarations for the individual routines.
*/
void GUIDEMO_Messagebox(void);
void GUIDEMO_Dialog(void);
void GUIDEMO_Cursor(void);
void GUIDEMO_HardwareInfo(void);
void GUIDEMO_Graph(void);
void GUIDEMO_Automotive(void);
void GUIDEMO_Bitmap(void);
void GUIDEMO_Intro(void);
void GUIDEMO_Navigation(void);
void GUIDEMO_ShowMemoryDevice(void);
void GUIDEMO_DemoBITMAPObj(void);
void GUIDEMO_Circle(void);
void GUIDEMO_Speed(void);
void GUIDEMO_ShowInternationalFonts(void);
void GUIDEMO_ShowColorBar(void);
void GUIDEMO_ShowColorList(void);
void GUIDEMO_DemoFrameWin(void);
void GUIDEMO_DemoLISTBOX(void);
void GUIDEMO_DemoWidgets(void);
void GUIDEMO_DemoPolygon(void);
void GUIDEMO_DemoProgBar(void);
//void GUIDEMO_ShowUCMix(void);
void GUIDEMO_DemoLISTBOX(void);
void GUIDEMO_DemoFrameWin(void);
void GUIDEMO_DemoLUT(void);
void GUIDEMO_ModifyLUT(int RFaktor, int GFaktor, int BFaktor);
void GUIDEMO_ShowColorList(void);
void GUIDEMO_Touch(void);
extern const GUI_BITMAP bmemWinGSCLogo320x46;
extern const GUI_BITMAP bmSeggerLogoBlue;
/*********************************************************************
*
* GUIDEMO defines
*
*********************************************************************
*/
#define GUIDEMO_LARGE ((LCD_XSIZE >= 240) && (LCD_YSIZE >= 200))
#define GUIDEMO_TINY ((LCD_XSIZE < 140) || (LCD_YSIZE < 100))
#if defined(__cplusplus)
}
#endif
#endif
@@ -0,0 +1,625 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : GUIDEMO_Automotive.c
Purpose : Automotive samples
----------------------------------------------------------------------
*/
#include "GUI.h"
#include "GUIDEMO.h"
#include "LCD_ConfDefaults.h"
#if GUI_WINSUPPORT
#include "WM.h"
#endif
#if (GUI_SUPPORT_MEMDEV & GUI_SUPPORT_AA)
/*********************************************************************
*
* defines
*
**********************************************************************
*/
#define countof(Obj) (sizeof(Obj) / sizeof(Obj[0]))
#define DEG2RAD (3.1415926f / 180)
#define MAG 3
#if ((LCD_XSIZE >= 200) && !(GUIDEMO_TINY))
/*********************************************************************
*
* static data, scale bitmap (large)
*
**********************************************************************
*/
static GUI_CONST_STORAGE GUI_COLOR _ColorsScaleR140[] = {
0x000000, 0x00B400, 0xF5F5F5, 0x0000B4
,0x00F500, 0x494949, 0xE1E1E1, 0xC0C0C0
,0x7F7F7F, 0x8DD78D, 0x9B9B9B, 0xD7D7D7
,0xA8A8A8, 0xB4D7B4, 0x5D5D5D, 0xD7F5D7
,0x5DB45D, 0xB4B4D7, 0x5D5DB4, 0xD7D7F5
,0x8D8DD7, 0xEBEBEB, 0x8DB4B4, 0x8D8D8D
,0x5D8DB4, 0x8DB48D, 0xB4D7D7, 0x6F6F6F
,0xB4B4B4
};
static GUI_CONST_STORAGE GUI_LOGPALETTE _PalScaleR140 = {
29, /* number of entries */
0, /* No transparency */
&_ColorsScaleR140[0]
};
static GUI_CONST_STORAGE unsigned char _acScaleR140[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x08, 0x08, 0x0C, 0x07, 0x07, 0x07, 0x0B, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x06, 0x07, 0x07, 0x07, 0x07, 0x08, 0x08, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x08, 0x07, 0x07, 0x06, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x07, 0x07, 0x0A, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x08, 0x0C, 0x07, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x06, 0x07, 0x07, 0x07, 0x07, 0x07, 0x0C, 0x08, 0x08, 0x02, 0x02, 0x0B, 0x09, 0x09, 0x09, 0x09, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0F, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x0B, 0x07, 0x08, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0A, 0x07, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x06, 0x07, 0x07, 0x0A, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x09, 0x09, 0x0D, 0x0D, 0x0F, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x0B, 0x0C, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x0C, 0x0B, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x06, 0x07, 0x0C, 0x08, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x09, 0x09, 0x0D, 0x0F, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x08, 0x07, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x07, 0x0A, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x09, 0x0D, 0x0F, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x0B, 0x0A, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0A, 0x0B, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x15, 0x07, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x09, 0x0D, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x06, 0x0C, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0A, 0x06, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x07, 0x07, 0x02, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x09, 0x0D, 0x0F, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x0C, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0A, 0x0B, 0x02, 0x02, 0x02, 0x02, 0x02, 0x06, 0x07, 0x08, 0x00, 0x00, 0x05, 0x02, 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, 0x07, 0x02, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x02, 0x0F, 0x01, 0x01, 0x01, 0x10, 0x0D, 0x0F, 0x02, 0x02, 0x02, 0x02, 0x02, 0x06, 0x0C, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x07, 0x02, 0x02, 0x02, 0x02, 0x02, 0x06, 0x0C, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x02, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x09, 0x02, 0x0D, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x09, 0x0F, 0x02, 0x02, 0x02, 0x02, 0x02, 0x0B, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0A, 0x06, 0x02, 0x02, 0x02, 0x02, 0x02, 0x07, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0D, 0x02, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x0D, 0x0F, 0x02, 0x02, 0x02, 0x02, 0x02, 0x0C, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x07, 0x02, 0x02, 0x02, 0x02, 0x02, 0x0B, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x02, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x0D, 0x02, 0x02, 0x02, 0x02, 0x02, 0x0B, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0B, 0x02, 0x02, 0x02, 0x02, 0x06, 0x0C, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x02, 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, 0x07, 0x02, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x02, 0x0F, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x09, 0x0F, 0x02, 0x02, 0x02, 0x02, 0x06, 0x0A, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x06, 0x02, 0x02, 0x02, 0x02, 0x0B, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x02, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x09, 0x02, 0x0D, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x0D, 0x02, 0x02, 0x02, 0x02, 0x02, 0x0C, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x06, 0x02, 0x02, 0x02, 0x02, 0x07, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0D, 0x02, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x0D, 0x0F, 0x02, 0x02, 0x02, 0x02, 0x0C, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x06, 0x02, 0x02, 0x02, 0x02, 0x0C, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x02, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x09, 0x0F, 0x02, 0x02, 0x02, 0x02, 0x0C, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x06, 0x02, 0x02, 0x02, 0x02, 0x0C, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x02, 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, 0x07, 0x02, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x02, 0x0F, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x09, 0x0F, 0x02, 0x02, 0x02, 0x02, 0x0C, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x0B, 0x02, 0x02, 0x02, 0x02, 0x0C, 0x05, 0x00, 0x00, 0x00, 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, 0x02, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x09, 0x02, 0x0D, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x09, 0x0F, 0x02, 0x02, 0x02, 0x06, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0B, 0x02, 0x02, 0x02, 0x02, 0x0C, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0D, 0x02, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x09, 0x0F, 0x02, 0x02, 0x02, 0x06, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 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, 0x02, 0x02, 0x02, 0x02, 0x07, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x02, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x09, 0x02, 0x02, 0x02, 0x02, 0x0B, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 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, 0x06, 0x02, 0x02, 0x02, 0x15, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x02, 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, 0x07, 0x02, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x02, 0x0F, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x19, 0x02, 0x02, 0x02, 0x02, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0B, 0x02, 0x02, 0x02, 0x06, 0x02, 0x06, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x02, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x09, 0x02, 0x0D, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0D, 0x02, 0x1A, 0x13, 0x02, 0x02, 0x02, 0x06, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x02, 0x02, 0x02, 0x02, 0x0C, 0x00, 0x07, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0D, 0x02, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x02, 0x0F, 0x12, 0x03, 0x14, 0x13, 0x02, 0x02, 0x02, 0x07, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0B, 0x02, 0x02, 0x02, 0x0B, 0x0E, 0x00, 0x00, 0x05, 0x02, 0x02, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x02, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0F, 0x02, 0x14, 0x03, 0x03, 0x03, 0x12, 0x11, 0x02, 0x02, 0x02, 0x06, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x02, 0x02, 0x02, 0x02, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x02, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x02, 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, 0x07, 0x02, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x02, 0x0F, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x09, 0x02, 0x0B, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x12, 0x13, 0x02, 0x02, 0x02, 0x07, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0B, 0x02, 0x02, 0x02, 0x0B, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x02, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x02, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x09, 0x02, 0x0D, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x02, 0x02, 0x12, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x11, 0x02, 0x02, 0x02, 0x06, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x02, 0x02, 0x02, 0x02, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x02, 0x06, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0D, 0x02, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0D, 0x02, 0x11, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x12, 0x13, 0x02, 0x02, 0x02, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x02, 0x02, 0x0B, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x02, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x02, 0x0F, 0x12, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x11, 0x02, 0x02, 0x02, 0x06, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x06, 0x02, 0x02, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x02, 0x02, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x02, 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, 0x07, 0x02, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x02, 0x0F, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0F, 0x02, 0x16, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x14, 0x13, 0x02, 0x02, 0x02, 0x08, 0x00, 0x00, 0x00, 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, 0x02, 0x02, 0x02, 0x06, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x02, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x02, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x09, 0x02, 0x0D, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x09, 0x02, 0x0B, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x12, 0x11, 0x02, 0x02, 0x02, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x02, 0x02, 0x07, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x02, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x0A, 0x07, 0x07, 0x07, 0x0B, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x0F, 0x0D, 0x0D, 0x0D, 0x0D, 0x09, 0x09, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0D, 0x02, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x02, 0x02, 0x12, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x14, 0x02, 0x02, 0x02, 0x06, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0B, 0x02, 0x02, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x02, 0x06, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x02, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x08, 0x0C, 0x07, 0x0B, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x0F, 0x0D, 0x0D, 0x09, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0D, 0x02, 0x11, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x14, 0x13, 0x02, 0x02, 0x06, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x06, 0x02, 0x02, 0x06, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x02, 0x02, 0x00, 0x00, 0x00, 0x08, 0x0C, 0x07, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x07, 0x07, 0x07, 0x07, 0x07, 0x0A, 0x08, 0x08, 0x08, 0x17, 0x08, 0x08, 0x08, 0x07, 0x07, 0x07, 0x07, 0x07, 0x06, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x0F, 0x0D, 0x09, 0x10, 0x01, 0x10, 0x02, 0x0F, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x02, 0x0F, 0x12, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x12, 0x13, 0x02, 0x02, 0x02, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x02, 0x02, 0x02, 0x06, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x02, 0x02, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x02, 0x0B, 0x06, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x07, 0x07, 0x0A, 0x08, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x08, 0x08, 0x07, 0x07, 0x06, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x15, 0x02, 0x0B, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0F, 0x02, 0x16, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x11, 0x02, 0x02, 0x02, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x02, 0x02, 0x02, 0x07, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x02, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x0A, 0x0B, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x06, 0x07, 0x0A, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x08, 0x07, 0x0B, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x0F, 0x0D, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x09, 0x02, 0x0B, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x14, 0x02, 0x02, 0x02, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x02, 0x02, 0x07, 0x00, 0x00, 0x00, 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, 0x02, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x0C, 0x06, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x0B, 0x0C, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0A, 0x07, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x0D, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x02, 0x02, 0x18, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x14, 0x02, 0x02, 0x02, 0x06, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x02, 0x02, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x02, 0x06, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0C, 0x06, 0x02, 0x02, 0x02, 0x02, 0x02, 0x06, 0x07, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0C, 0x0B, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x0D, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0D, 0x02, 0x0D, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x12, 0x13, 0x02, 0x02, 0x06, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x02, 0x02, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x0B, 0x02, 0x02, 0x02, 0x02, 0x02, 0x06, 0x0C, 0x0E, 0x00, 0x00, 0x00, 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, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0A, 0x0B, 0x02, 0x02, 0x02, 0x02, 0x02, 0x0F, 0x0D, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x02, 0x0F, 0x12, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x12, 0x13, 0x02, 0x02, 0x06, 0x05, 0x00, 0x00, 0x00,
0x00, 0x00, 0x05, 0x0B, 0x02, 0x02, 0x06, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x02, 0x02, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0C, 0x02, 0x02, 0x02, 0x02, 0x02, 0x06, 0x0C, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x04, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0A, 0x0B, 0x02, 0x02, 0x02, 0x02, 0x02, 0x0F, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0F, 0x02, 0x16, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x12, 0x13, 0x02, 0x02, 0x06, 0x08, 0x00, 0x00,
0x00, 0x05, 0x06, 0x02, 0x02, 0x06, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x02, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x0B, 0x02, 0x02, 0x02, 0x02, 0x02, 0x07, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0C, 0x06, 0x02, 0x02, 0x02, 0x02, 0x0F, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x09, 0x02, 0x0F, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x11, 0x02, 0x02, 0x02, 0x08, 0x00,
0x05, 0x06, 0x02, 0x02, 0x06, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x02, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x0B, 0x02, 0x02, 0x02, 0x02, 0x06, 0x0A, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0B, 0x02, 0x02, 0x02, 0x02, 0x0F, 0x0D, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x02, 0x02, 0x18, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x11, 0x02, 0x02, 0x02, 0x08,
0x0B, 0x02, 0x02, 0x06, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x02, 0x06, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x06, 0x02, 0x02, 0x02, 0x02, 0x0B, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0C, 0x02, 0x02, 0x02, 0x02, 0x02, 0x0D, 0x10, 0x01, 0x01, 0x01, 0x01, 0x0D, 0x02, 0x0D, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x11, 0x02, 0x02, 0x06,
0x02, 0x02, 0x02, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x0A, 0x06, 0x02, 0x02, 0x02, 0x02, 0x0C, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x06, 0x02, 0x02, 0x02, 0x02, 0x0D, 0x10, 0x01, 0x10, 0x02, 0x0F, 0x12, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x11, 0x02, 0x02, 0x17,
0x05, 0x06, 0x02, 0x06, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x02, 0x02, 0x0E, 0x0E, 0x0B, 0x02, 0x02, 0x02, 0x02, 0x0C, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x06, 0x02, 0x02, 0x02, 0x0F, 0x09, 0x0F, 0x02, 0x16, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x11, 0x02, 0x02, 0x17, 0x00,
0x00, 0x05, 0x06, 0x02, 0x06, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x0C, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x06, 0x02, 0x02, 0x02, 0x02, 0x0F, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x11, 0x02, 0x02, 0x08, 0x00, 0x00,
0x00, 0x00, 0x05, 0x06, 0x02, 0x06, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0C, 0x02, 0x02, 0x02, 0x02, 0x07, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x02, 0x02, 0x02, 0x02, 0x13, 0x12, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x11, 0x02, 0x02, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x05, 0x06, 0x02, 0x06, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x06, 0x02, 0x02, 0x02, 0x0B, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0C, 0x02, 0x02, 0x02, 0x02, 0x11, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x11, 0x02, 0x02, 0x08, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x05, 0x06, 0x02, 0x06, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0B, 0x02, 0x02, 0x02, 0x06, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0B, 0x02, 0x02, 0x02, 0x13, 0x14, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x11, 0x02, 0x02, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x06, 0x02, 0x06, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x02, 0x02, 0x02, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x06, 0x02, 0x02, 0x02, 0x11, 0x12, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x11, 0x02, 0x02, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x06, 0x02, 0x06, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0B, 0x02, 0x02, 0x02, 0x0B, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0C, 0x02, 0x02, 0x02, 0x13, 0x14, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x11, 0x02, 0x02, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x06, 0x02, 0x06, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x06, 0x02, 0x02, 0x02, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x06, 0x02, 0x02, 0x02, 0x11, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x11, 0x02, 0x02, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x06, 0x02, 0x06, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x02, 0x02, 0x0B, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x02, 0x02, 0x02, 0x13, 0x12, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x11, 0x02, 0x02, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x06, 0x02, 0x06, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x06, 0x02, 0x02, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x06, 0x02, 0x02, 0x02, 0x14, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x11, 0x02, 0x02, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x06, 0x02, 0x06, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x02, 0x02, 0x02, 0x06, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x07, 0x02, 0x02, 0x02, 0x11, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x11, 0x02, 0x02, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x06, 0x02, 0x06, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x02, 0x02, 0x07, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x02, 0x02, 0x02, 0x13, 0x12, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x11, 0x02, 0x02, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x06, 0x02, 0x06, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x07, 0x02, 0x02, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x04, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x06, 0x02, 0x02, 0x13, 0x12, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x11, 0x02, 0x02, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x06, 0x02, 0x06, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x06, 0x02, 0x02, 0x02, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x06, 0x02, 0x02, 0x02, 0x14, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x11, 0x02, 0x02, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x06, 0x02, 0x06, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x06, 0x02, 0x02, 0x06, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x02, 0x02, 0x14, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x11, 0x02, 0x02, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x06, 0x02, 0x06, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x02, 0x02, 0x02, 0x0B, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x02, 0x02, 0x02, 0x11, 0x03, 0x03, 0x03, 0x03, 0x03, 0x11, 0x02, 0x02, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x06, 0x02, 0x06, 0x05, 0x00, 0x00, 0x00, 0x08, 0x02, 0x02, 0x02, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x02, 0x02, 0x02, 0x11, 0x03, 0x03, 0x03, 0x11, 0x02, 0x02, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x06, 0x02, 0x06, 0x05, 0x00, 0x08, 0x02, 0x02, 0x02, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x02, 0x02, 0x02, 0x11, 0x03, 0x11, 0x02, 0x02, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x06, 0x02, 0x06, 0x17, 0x02, 0x02, 0x02, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x06, 0x02, 0x02, 0x13, 0x02, 0x02, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x06, 0x02, 0x02, 0x02, 0x02, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x06, 0x02, 0x02, 0x02, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x02, 0x02, 0x02, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x02, 0x02, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 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, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 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, 0x04, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 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, 0x04, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 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, 0x04, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 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, 0x04, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x04, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 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, 0x04, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x04, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 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, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
static GUI_CONST_STORAGE GUI_BITMAP _bmScaleR140 = {
200, /* XSize */
73, /* YSize */
200, /* BytesPerLine */
8, /* BitsPerPixel */
_acScaleR140, /* Pointer to picture data (indices) */
&_PalScaleR140 /* Pointer to palette */
};
#else
/*********************************************************************
*
* static data, scale bitmap (small)
*
**********************************************************************
*/
static GUI_CONST_STORAGE GUI_COLOR _ColorsScaleR80[] = {
0x000000,0x101010,0x313031,0x525552
,0x83858B,0x94959C,0xA4AAAC,0xC5CACD
,0xD5DADE,0xFFFFFF,0xE6EAEE,0x202020
,0xB4BABD,0x292C29,0x737973,0x626562
,0x414041,0xDEE2E6,0x5ADE5A,0x41DA41
,0x52DE52,0x62DE62,0x83E68B,0xA4EEAC
,0xC5F2CD,0xE6FAEE,0x393C39,0x31D631
,0x00CE00,0x10CE10,0x94EA9C,0xB4EEBD
,0x737573,0xC5F2D5,0x737173,0x8BE694
,0x20D220,0x73E273,0xD5F6DE,0xBDC2C5
,0xD5DAE6,0x5A595A,0xA4B2BD,0xBDBEC5
,0xE6F6EE,0x9499EE,0xE6EAFF,0xB4BAF6
,0x0000CD,0x2020D5,0xA4AAEE,0x5255DE
,0x8385E6,0x1010D5,0x7375E6,0xD5F2DE
,0x6265E6,0x3130D5,0xD5DAFF,0xC5CAF6
,0x4140DE,0xEEFAEE,0xEEEEF6,0xF6FAFF
,0x6A6D6A,0xF6F6FF,0x7B797B,0xCDD2D5
,0x4148D5,0x293429,0x181C18,0x181CD5
,0x8B8D8B,0x00FF00,0x94E69C,0xB4BEC5
,0x2028D5,0xC5C6CD
};
static GUI_CONST_STORAGE GUI_LOGPALETTE _PalScaleR80 = {
78, /* number of entries */
0, /* No transparency */
&_ColorsScaleR80[0]
};
static GUI_CONST_STORAGE unsigned char _acScaleR80[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x08, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x0A, 0x08, 0x08, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x03, 0x04, 0x0C, 0x08, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x0A, 0x0C, 0x04, 0x03, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x0E, 0x05, 0x08, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x0A, 0x08, 0x06, 0x05, 0x04, 0x0F, 0x03, 0x03, 0x10, 0x02, 0x11, 0x09, 0x12, 0x13, 0x14, 0x14, 0x15, 0x16, 0x16, 0x17, 0x18, 0x19, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x0A, 0x06, 0x0E, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x04, 0x08, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x07, 0x05, 0x0F, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x09, 0x1B, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1D, 0x1B, 0x15, 0x1E, 0x1F, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x08, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x04, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x09, 0x11, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x09, 0x1B, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1B, 0x15, 0x21, 0x09, 0x09, 0x09, 0x09, 0x09, 0x0A, 0x06, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x08, 0x09, 0x09, 0x09, 0x09, 0x08, 0x05, 0x22, 0x09, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x09, 0x1B, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x17, 0x09, 0x23, 0x16, 0x18, 0x09, 0x09, 0x09, 0x09, 0x08, 0x04, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x09, 0x09, 0x09, 0x09, 0x08, 0x04, 0x02, 0x00, 0x00, 0x01, 0x09, 0x09, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x09, 0x1B, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x19, 0x09, 0x1B, 0x1C, 0x1C, 0x24, 0x25, 0x18, 0x09, 0x09, 0x09, 0x09, 0x06, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0C, 0x09, 0x09, 0x09, 0x09, 0x06, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x09, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x09, 0x1B, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1B, 0x09, 0x19, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1B, 0x16, 0x19, 0x09, 0x09, 0x09, 0x08, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x08, 0x09, 0x09, 0x09, 0x08, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x09, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x09, 0x1B, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x25, 0x09, 0x17, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x14, 0x26, 0x09, 0x09, 0x09, 0x08, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x09, 0x09, 0x09, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x09, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x09, 0x1B, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1F, 0x09, 0x15, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x13, 0x1F, 0x09, 0x09, 0x09, 0x08, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x27, 0x09, 0x09, 0x09, 0x0C, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x09, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x09, 0x1B, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x09, 0x09, 0x24, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1B, 0x17, 0x09, 0x09, 0x09, 0x28, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x09, 0x09, 0x09, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x09, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x09, 0x1B, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x13, 0x09, 0x26, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1B, 0x1F, 0x09, 0x09, 0x09, 0x2A, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x08, 0x09, 0x09, 0x09, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x09, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x09, 0x1B, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x16, 0x09, 0x1E, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1E, 0x09, 0x09, 0x09, 0x0A, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x09, 0x09, 0x09, 0x05, 0x09, 0x09, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x09, 0x1B, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x18, 0x09, 0x14, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1D, 0x2C, 0x09, 0x2D, 0x2E, 0x09, 0x09, 0x07, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0A, 0x09, 0x09, 0x07, 0x02, 0x00, 0x04, 0x09, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x09, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x09, 0x1B, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1D, 0x09, 0x09, 0x1D, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1E, 0x09, 0x2F, 0x30, 0x31, 0x32, 0x09, 0x09, 0x09, 0x20, 0x00, 0x00, 0x00, 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, 0x09, 0x09, 0x09, 0x20, 0x00, 0x00, 0x00, 0x01, 0x08, 0x09, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x09, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x09, 0x1B, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x14, 0x09, 0x18, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1B, 0x09, 0x09, 0x31, 0x30, 0x30, 0x30, 0x33, 0x2E, 0x09, 0x09, 0x0C, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x08, 0x09, 0x09, 0x07, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x09, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x09, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x09, 0x1B, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1E, 0x09, 0x16, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1F, 0x09, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x35, 0x2F, 0x09, 0x09, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x09, 0x09, 0x09, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x09, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x09, 0x09, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x09, 0x1B, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x26, 0x09, 0x13, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x14, 0x09, 0x2E, 0x35, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x36, 0x09, 0x09, 0x09, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x09, 0x09, 0x0A, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x09, 0x09, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x09, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x09, 0x1B, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1B, 0x09, 0x19, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x37, 0x09, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x39, 0x3A, 0x09, 0x09, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x09, 0x09, 0x08, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x09, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x09, 0x1B, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x15, 0x09, 0x1F, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x16, 0x09, 0x3B, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x35, 0x2F, 0x09, 0x09, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x09, 0x09, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x09, 0x09, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x09, 0x08, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x10, 0x20, 0x04, 0x06, 0x07, 0x08, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x26, 0x26, 0x17, 0x1E, 0x25, 0x14, 0x24, 0x1C, 0x1C, 0x1C, 0x1C, 0x17, 0x09, 0x25, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x24, 0x09, 0x09, 0x3C, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x34, 0x09, 0x09, 0x08, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x08, 0x09, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x09, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x09, 0x29, 0x04, 0x0C, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x1F, 0x16, 0x14, 0x3D, 0x09, 0x1B, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x17, 0x09, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x09, 0x09, 0x0A, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x02, 0x0A, 0x09, 0x09, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x09, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x20, 0x3E, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x08, 0x0C, 0x05, 0x04, 0x0F, 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x04, 0x05, 0x06, 0x08, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x3F, 0x16, 0x1B, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1B, 0x09, 0x09, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3C, 0x09, 0x09, 0x09, 0x10, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x40, 0x41, 0x09, 0x09, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x09, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x20, 0x07, 0x09, 0x09, 0x09, 0x09, 0x09, 0x08, 0x05, 0x0F, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x05, 0x07, 0x09, 0x09, 0x09, 0x09, 0x09, 0x26, 0x16, 0x1B, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x18, 0x09, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3C, 0x2E, 0x09, 0x09, 0x42, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x43, 0x3F, 0x09, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x09, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x06, 0x09, 0x09, 0x09, 0x09, 0x0A, 0x06, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x05, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x18, 0x14, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x15, 0x09, 0x3A, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x44, 0x3F, 0x3F, 0x43, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x45, 0x3F, 0x09, 0x41, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x09, 0x09, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x08, 0x09, 0x09, 0x09, 0x0A, 0x06, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x04, 0x0A, 0x09, 0x09, 0x09, 0x19, 0x16, 0x1D, 0x1C, 0x1C, 0x1C, 0x1D, 0x37, 0x09, 0x33, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x47, 0x41, 0x09, 0x3F, 0x45, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x46, 0x41, 0x09, 0x41, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x09, 0x0C, 0x00, 0x00, 0x04, 0x0A, 0x09, 0x09, 0x09, 0x07, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x06, 0x09, 0x09, 0x09, 0x09, 0x1E, 0x1D, 0x1C, 0x16, 0x09, 0x3B, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x47, 0x41, 0x09, 0x41, 0x46, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x41, 0x09, 0x41, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0A, 0x09, 0x48, 0x08, 0x09, 0x09, 0x09, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x49, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x05, 0x09, 0x09, 0x09, 0x19, 0x4A, 0x09, 0x09, 0x39, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x47, 0x41, 0x09, 0x41, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x41, 0x09, 0x41, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x09, 0x09, 0x09, 0x09, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x49, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x05, 0x09, 0x09, 0x09, 0x09, 0x2F, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x47, 0x41, 0x09, 0x41, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x41, 0x09, 0x41, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x09, 0x09, 0x09, 0x4B, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x05, 0x09, 0x09, 0x09, 0x2F, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x47, 0x41, 0x09, 0x41, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x41, 0x09, 0x41, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0A, 0x09, 0x09, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x07, 0x09, 0x09, 0x09, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x47, 0x41, 0x09, 0x41, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x41, 0x09, 0x41, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x09, 0x09, 0x09, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0A, 0x09, 0x09, 0x2F, 0x35, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x47, 0x41, 0x09, 0x41, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x41, 0x09, 0x41, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x08, 0x09, 0x09, 0x07, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x49, 0x49, 0x49, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x0C, 0x09, 0x09, 0x2E, 0x3C, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x47, 0x41, 0x09, 0x41, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x41, 0x09, 0x41, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x09, 0x09, 0x09, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x49, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x49, 0x49, 0x49, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x09, 0x09, 0x09, 0x36, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x47, 0x41, 0x09, 0x41, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x41, 0x09, 0x41, 0x46, 0x00, 0x00, 0x00, 0x00, 0x04, 0x09, 0x09, 0x0A, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x49, 0x49, 0x49, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x08, 0x09, 0x09, 0x32, 0x30, 0x30, 0x30, 0x30, 0x47, 0x41, 0x09, 0x41, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x41, 0x09, 0x41, 0x46, 0x00, 0x00, 0x05, 0x09, 0x09, 0x08, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x49, 0x49, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0C, 0x09, 0x09, 0x2F, 0x35, 0x30, 0x47, 0x41, 0x09, 0x41, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x41, 0x09, 0x41, 0x46, 0x0C, 0x09, 0x09, 0x0C, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x09, 0x09, 0x3A, 0x4C, 0x41, 0x09, 0x41, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x41, 0x09, 0x3F, 0x09, 0x09, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x09, 0x09, 0x3F, 0x09, 0x41, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x3F, 0x3F, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x09, 0x3F, 0x3F, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x4D, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x49, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x49, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x4D, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x49, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x49, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x49, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x49, 0x49, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x49, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x49, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x49, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
static GUI_CONST_STORAGE GUI_BITMAP _bmScaleR80 = {
122, /* XSize */
55, /* YSize */
122, /* BytesPerLine */
8, /* BitsPerPixel */
_acScaleR80, /* Pointer to picture data (indices) */
&_PalScaleR80 /* Pointer to palette */
};
#endif
/*********************************************************************
*
* static data, shape of polygons
*
**********************************************************************
*/
#if GUIDEMO_LARGE
static const GUI_POINT _aNeedle_0[] = {
{ MAG * ( 0), MAG * ( 0 + 125)},
{ MAG * (-3), MAG * (-15 + 125)},
{ MAG * (-3), MAG * (-65 + 125)},
{ MAG * ( 3), MAG * (-65 + 125)},
{ MAG * ( 3), MAG * (-15 + 125)},
};
#endif
static const GUI_POINT _aNeedle_1[] = {
{ MAG * ( 0), MAG * ( 0 + 125)},
{ MAG * (-6), MAG * (-15 + 125)},
{ MAG * ( 0), MAG * (-65 + 125)},
{ MAG * ( 6), MAG * (-15 + 125)},
};
/*********************************************************************
*
* Structure containing information for drawing routine
*
**********************************************************************
*/
typedef struct {
GUI_AUTODEV_INFO AutoDevInfo; /* Information about what has to be displayed */
GUI_POINT aPoints[7]; /* Polygon data */
float Angle;
} PARAM;
/*********************************************************************
*
* static code, get angle
*
**********************************************************************
*/
#if GUIDEMO_LARGE
/*********************************************************************
*
* _GetAngle_0
*/
static float _GetAngle_0(int tDiff) {
if (tDiff < 6000)
return 225;
tDiff -= 6000;
if (tDiff < 15000) {
return 225 - 0.006 * tDiff ;
}
tDiff -= 15000;
if (tDiff < 7500) {
return 225 - 90 + 0.012 * tDiff ;
}
return 225;
}
/*********************************************************************
*
* _GetAngle_1
*/
static float _GetAngle_1(int tDiff) {
if (tDiff < 12000) {
return 225 - 0.0075 * tDiff ;
}
tDiff -= 18000;
if (tDiff > 0) {
return 225 - 90 + 0.0075 * tDiff;
}
return 225 - 90;
}
#else /* GUIDEMO_LARGE */
/*********************************************************************
*
* _GetAngle
*/
static float _GetAngle(int tDiff) {
if (tDiff < 10000) {
return 225 - 0.009 * tDiff ;
}
tDiff -= 10000;
if (tDiff > 0) {
return 225 - 90 + 0.015 * tDiff;
}
return 225 - 90;
}
#endif
/*********************************************************************
*
* static code, drawing routines
*
**********************************************************************
*/
#if GUIDEMO_LARGE
/*********************************************************************
*
* _Draw_0
*/
static void _Draw_0(void * p) {
PARAM* pParam = (PARAM *)p;
/* Fixed background */
if (pParam->AutoDevInfo.DrawFixed) {
GUI_ClearRect (1,
(LCD_YSIZE / 2 - 80) + _bmScaleR140.YSize,
1 + _bmScaleR140.XSize - 1,
(LCD_YSIZE / 2 + 20));
GUI_DrawBitmap(&_bmScaleR140, 1, (LCD_YSIZE / 2 - 80));
}
/* Moving needle */
GUI_SetColor(GUI_WHITE);
GUI_AA_FillPolygon(pParam->aPoints,
countof(_aNeedle_0),
MAG * 101,
MAG * (LCD_YSIZE / 2 + 60));
/* Fixed foreground */
if (pParam->AutoDevInfo.DrawFixed) {
GUI_SetTextMode(GUI_TM_TRANS);
GUI_SetColor(GUI_RED);
GUI_SetFont(&GUI_Font24B_ASCII);
GUI_DispStringHCenterAt("RPM / 1000", 101, (LCD_YSIZE / 2 - 20));
}
}
/*********************************************************************
*
* _Draw_1
*/
static void _Draw_1(void * p) {
PARAM* pParam = (PARAM *)p;
/* Fixed background */
if (pParam->AutoDevInfo.DrawFixed) {
GUI_ClearRect (1,
(LCD_YSIZE / 2 + 21) + _bmScaleR140.YSize,
1 + _bmScaleR140.XSize - 1,
(LCD_YSIZE / 2 + 121));
GUI_DrawBitmap(&_bmScaleR140, 1, (LCD_YSIZE / 2 + 21));
}
/* Moving needle */
GUI_SetColor(GUI_WHITE);
GUI_AA_FillPolygon(pParam->aPoints,
countof(_aNeedle_1),
MAG * 101,
MAG * (LCD_YSIZE / 2 + 161));
/* Fixed foreground */
if (pParam->AutoDevInfo.DrawFixed) {
GUI_SetTextMode(GUI_TM_TRANS);
GUI_SetColor(GUI_RED);
GUI_SetFont(&GUI_Font24B_ASCII);
GUI_DispStringHCenterAt("MPH / 10", 101, (LCD_YSIZE / 2 + 81));
}
}
#else /* GUIDEMO_LARGE */
/*********************************************************************
*
* _MagnifyPolygon
*/
#if (GUIDEMO_TINY || (LCD_XSIZE < 200))
static void _MagnifyPolygon(GUI_POINT* pPolygon, int NumPoints, float Mag) {
int j;
for (j = 0; j < NumPoints; j++) {
(pPolygon + j)->x = (pPolygon + j)->x * Mag;
(pPolygon + j)->y = (pPolygon + j)->y * Mag;
}
}
#endif
/*********************************************************************
*
* _Draw
*/
static void _Draw(void* p) {
GUI_CONST_STORAGE GUI_BITMAP* pBitmap;
PARAM* pParam = (PARAM *)p;
int xMid = LCD_XSIZE >> 1;
int yMid = (LCD_YSIZE >> 1) + 3;
int bmSizeX, bmSizeY;
#if (GUIDEMO_TINY || (LCD_XSIZE < 200))
pBitmap = &_bmScaleR80;
#else
pBitmap = &_bmScaleR140;
#endif
bmSizeX = pBitmap->XSize;
bmSizeY = pBitmap->YSize;
/* Fixed background */
if (pParam->AutoDevInfo.DrawFixed) {
#if (GUIDEMO_TINY || (LCD_XSIZE < 200))
GUI_Clear();
GUI_DrawBitmap(pBitmap, xMid - (bmSizeX >> 1), (yMid - 35));
#else
GUI_ClearRect (xMid - (bmSizeX >> 1), (yMid - 50) + bmSizeY,
xMid + (bmSizeX >> 1) - 1, (yMid + 50));
GUI_DrawBitmap(pBitmap, xMid - (bmSizeX >> 1), (yMid - 50));
#endif
}
/* Moving needle */
GUI_SetColor(GUI_WHITE);
#if (GUIDEMO_TINY || (LCD_XSIZE < 200))
GUI_AA_FillPolygon(pParam->aPoints, countof(_aNeedle_1), MAG * xMid, MAG * (yMid + 49));
#else
GUI_AA_FillPolygon(pParam->aPoints, countof(_aNeedle_1), MAG * xMid, MAG * (yMid + 90));
#endif
/* Fixed foreground */
if (pParam->AutoDevInfo.DrawFixed) {
GUI_SetTextMode(GUI_TM_TRANS);
GUI_SetColor(GUI_RED);
#if (GUIDEMO_TINY || (LCD_XSIZE < 200))
GUI_SetFont(&GUI_Font13B_ASCII);
#else
GUI_SetFont(&GUI_Font24B_ASCII);
#endif
GUI_DispStringHCenterAt("MPH / 10", xMid, yMid + 10);
}
}
#endif
/*********************************************************************
*
* static code, demo
*
**********************************************************************
*/
#if GUIDEMO_LARGE
/*********************************************************************
*
* _AutomotiveDemo
*/
static void _AutomotiveDemo(void) {
int Cnt, i;
int tDiff;
int tDiff1 = 0;
int tDiff2 = 0;
int t0, t1;
float Angle_0_Old, Angle_1_Old;
PARAM Param[2]; /* Parameters for drawing routine */
GUI_AUTODEV AutoDev[2]; /* Object for banding memory device */
/* Create GUI_AUTODEV-objects */
for (i = 0; i < 2; i++) {
GUI_MEMDEV_CreateAuto(&AutoDev[i]);
}
t0 = GUI_GetTime(); /* Get current time */
Angle_0_Old = Angle_1_Old = -1;
/* Show needle for a fixed time */
for (Cnt = 0; ((tDiff = GUI_GetTime() - t0) < 30000) && !GUIDEMO_CheckCancel(); Cnt++) {
/* Get values to display and calculate polygon for needle 1 */
Param[0].Angle = _GetAngle_0(tDiff)* DEG2RAD;
if (Angle_0_Old != Param[0].Angle) {
Angle_0_Old = Param[0].Angle;
t1 = GUI_GetTime();
GUI_RotatePolygon(Param[0].aPoints, _aNeedle_0, countof(_aNeedle_0), Param[0].Angle);
GUI_MEMDEV_DrawAuto(&AutoDev[0], &Param[0].AutoDevInfo, _Draw_0, &Param[0]);
tDiff1 = GUI_GetTime() - t1;
if (tDiff1 < 50) {
GUI_Delay(50 - tDiff1);
}
}
/* Get values to display and calculate polygon for needle 2 */
Param[1].Angle = _GetAngle_1(tDiff)* DEG2RAD;
if (Angle_1_Old != Param[1].Angle) {
Angle_1_Old = Param[1].Angle;
t1 = GUI_GetTime();
GUI_RotatePolygon(Param[1].aPoints, _aNeedle_1, countof(_aNeedle_1), Param[1].Angle);
GUI_MEMDEV_DrawAuto(&AutoDev[1], &Param[1].AutoDevInfo, _Draw_1, &Param[1]);
tDiff2 = GUI_GetTime() - t1;
}
/* Display used time */
if (!(Cnt % 20)) {
GUI_SetColor(GUI_WHITE);
GUI_SetTextMode(GUI_TM_NORMAL);
GUI_SetFont(&GUI_Font8_1);
GUI_DispStringAt("msec/picture:\n", 10, 10);
GUI_SetFont(&GUI_Font6x8);
GUI_GotoX(10);
GUI_DispDec(tDiff1, 3);
GUI_DispNextLine();
GUI_GotoX(10);
GUI_DispDec(tDiff2, 3);
}
}
GUIDEMO_Delay(1000);
/* Delete GUI_AUTODEV-objects */
for (i = 0; i < 2; i++) {
GUI_MEMDEV_DeleteAuto(&AutoDev[i]);
}
}
#else /* GUIDEMO_LARGE */
/*********************************************************************
*
* _AutomotiveDemo
*/
static void _AutomotiveDemo(void) {
int Cnt;
int tDiff, t0;
float Angle_Old;
PARAM Param; /* Parameters for drawing routine */
GUI_AUTODEV AutoDev; /* Object for banding memory device */
/* Create GUI_AUTODEV-objects */
GUI_MEMDEV_CreateAuto(&AutoDev);
t0 = GUI_GetTime(); /* Get current time */
Angle_Old = -1;
/* Show needle for a fixed time */
for (Cnt = 0; ((tDiff = GUI_GetTime() - t0) < 16000) && !GUIDEMO_CheckCancel(); Cnt++) {
/* Get values to display and calculate polygon for needle 2 */
Param.Angle = _GetAngle(tDiff) * DEG2RAD;
if (Angle_Old != Param.Angle) {
Angle_Old = Param.Angle;
GUI_RotatePolygon(Param.aPoints, _aNeedle_1, countof(_aNeedle_1), Param.Angle);
#if (GUIDEMO_TINY || (LCD_XSIZE < 200))
_MagnifyPolygon(Param.aPoints, countof(_aNeedle_1), 0.575f);
#endif
GUI_MEMDEV_DrawAuto(&AutoDev, &Param.AutoDevInfo, _Draw, &Param);
}
}
GUIDEMO_Delay(1000);
/* Delete GUI_AUTODEV-objects */
GUI_MEMDEV_DeleteAuto(&AutoDev);
}
#endif
/*********************************************************************
*
* public code
*
**********************************************************************
*/
/*********************************************************************
*
* GUIDEMO_Automotive
*/
void GUIDEMO_Automotive(void) {
/* Show intro message */
GUIDEMO_ShowIntro("Automotive samples",
"\nExamples for the"
"\nautomotive industrie");
GUIDEMO_NotifyStartNext();
GUI_SetBkColor(GUI_BLACK);
GUI_Clear();
/* Enable high resolution for antialiasing */
GUI_AA_EnableHiRes();
GUI_AA_SetFactor(MAG);
_AutomotiveDemo();
}
#else /* GUI_SUPPORT_MEMDEV | GUI_SUPPORT_AA */
void GUIDEMO_Automotive(void) {}
#endif /* GUI_SUPPORT_MEMDEV | GUI_SUPPORT_AA */
@@ -0,0 +1,152 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : GUIDEMO_Bitmap4bpp.c
Purpose : Contains a 4bpp bitmap
----------------------------------------------------------------------
*/
#include "GUI.h"
#include "GUIDEMO.h"
/*********************************************************************
*
* Static data
*
**********************************************************************
*/
static const GUI_COLOR _ColorsJoerg[] = {
0x000000, 0x111111, 0x222222, 0x333333
,0x444444, 0x555555, 0x666666, 0x777777
,0x888888, 0x999999, 0xAAAAAA, 0xBBBBBB
,0xCCCCCC, 0xDDDDDD, 0xEEEEEE, 0xFFFFFF
};
static const GUI_LOGPALETTE _PalJoerg = {
16, /* number of entries */
0, /* No transparency */
&_ColorsJoerg[0]
};
static const unsigned char _acJoerg[] = {
0x88, 0x88, 0x88, 0x88, 0x89, 0x88, 0x99, 0x99, 0x89, 0x99, 0x88, 0x99, 0x98, 0x88, 0x98, 0x88, 0x89, 0x88, 0x89, 0x99, 0x88, 0x89, 0x88, 0x98, 0x98, 0x89, 0x88, 0x89, 0x98, 0x88, 0x80,
0x88, 0x88, 0x88, 0x89, 0x88, 0x88, 0x88, 0x89, 0x89, 0x99, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x89, 0x89, 0x88, 0x98, 0x88, 0x89, 0x98, 0x89, 0x88, 0x88, 0x88, 0x88, 0x80,
0x88, 0x88, 0x88, 0x88, 0x89, 0x88, 0x88, 0x88, 0x89, 0x88, 0x88, 0x88, 0x77, 0x75, 0x68, 0x56, 0x55, 0x55, 0x68, 0x88, 0x88, 0x99, 0x98, 0x99, 0x98, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80,
0x88, 0x88, 0x88, 0x88, 0x89, 0x88, 0x88, 0x88, 0x88, 0x85, 0x44, 0x55, 0x53, 0x54, 0x35, 0x33, 0x44, 0x44, 0x46, 0x67, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80,
0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0x78, 0x75, 0x43, 0x33, 0x33, 0x33, 0x34, 0x33, 0x33, 0x33, 0x44, 0x55, 0x67, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80,
0x98, 0x99, 0x88, 0x88, 0x88, 0x88, 0x87, 0x86, 0x63, 0x33, 0x33, 0x33, 0x33, 0x23, 0x22, 0x22, 0x23, 0x33, 0x33, 0x34, 0x56, 0x44, 0x68, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80,
0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0x85, 0x47, 0x54, 0x33, 0x33, 0x32, 0x22, 0x23, 0x22, 0x22, 0x22, 0x22, 0x22, 0x33, 0x33, 0x33, 0x43, 0x77, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80,
0x88, 0x88, 0x88, 0x88, 0x88, 0x86, 0x44, 0x43, 0x44, 0x33, 0x33, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x33, 0x23, 0x23, 0x33, 0x45, 0x77, 0x88, 0x88, 0x88, 0x88, 0x88, 0x80,
0x88, 0x88, 0x88, 0x88, 0x87, 0x65, 0x43, 0x33, 0x33, 0x33, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x23, 0x34, 0x46, 0x76, 0x88, 0x88, 0x88, 0x88, 0x80,
0x98, 0x88, 0x88, 0x88, 0x76, 0x54, 0x33, 0x33, 0x23, 0x32, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x12, 0x22, 0x22, 0x22, 0x22, 0x33, 0x33, 0x44, 0x48, 0x88, 0x88, 0x88, 0x88, 0x80,
0x9A, 0x99, 0x99, 0x99, 0x75, 0x43, 0x33, 0x33, 0x22, 0x22, 0x22, 0x22, 0x22, 0x12, 0x21, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x23, 0x33, 0x33, 0x34, 0x76, 0x78, 0x88, 0x88, 0x88, 0x80,
0x99, 0x99, 0x99, 0x97, 0x43, 0x33, 0x32, 0x32, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x22, 0x12, 0x22, 0x12, 0x22, 0x22, 0x32, 0x22, 0x22, 0x34, 0x34, 0x88, 0x99, 0x99, 0x99, 0x90,
0x99, 0x99, 0x99, 0x75, 0x43, 0x32, 0x22, 0x22, 0x22, 0x23, 0x23, 0x22, 0x22, 0x22, 0x21, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x23, 0x34, 0x68, 0x89, 0x89, 0x89, 0x80,
0xAA, 0xAA, 0xA9, 0x86, 0x53, 0x22, 0x21, 0x22, 0x22, 0x23, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x24, 0x58, 0x99, 0x99, 0x99, 0x90,
0xAA, 0xAA, 0xAA, 0x85, 0x32, 0x22, 0x21, 0x12, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x24, 0x46, 0x79, 0x99, 0x99, 0x90,
0xAA, 0xAA, 0xA6, 0x33, 0x22, 0x22, 0x21, 0x22, 0x23, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x11, 0x22, 0x22, 0x22, 0x22, 0x22, 0x35, 0x68, 0x99, 0x99, 0x90,
0xBB, 0xBA, 0xA4, 0x32, 0x22, 0x21, 0x21, 0x22, 0x23, 0x22, 0x22, 0x22, 0x22, 0x33, 0x33, 0x32, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x34, 0x66, 0x99, 0x99, 0x90,
0xBB, 0xBA, 0x83, 0x22, 0x21, 0x12, 0x22, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x23, 0x33, 0x22, 0x33, 0x32, 0x22, 0x21, 0x12, 0x22, 0x33, 0x89, 0x99, 0x90,
0xBB, 0xBA, 0x63, 0x22, 0x21, 0x11, 0x23, 0x34, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x34, 0x45, 0x43, 0x33, 0x33, 0x32, 0x32, 0x21, 0x12, 0x22, 0x23, 0x69, 0x99, 0x90,
0xBB, 0xBA, 0x32, 0x22, 0x21, 0x22, 0x34, 0x44, 0x45, 0x55, 0x55, 0x55, 0x55, 0x55, 0x44, 0x44, 0x45, 0x44, 0x54, 0x43, 0x33, 0x33, 0x33, 0x43, 0x21, 0x12, 0x22, 0x33, 0x58, 0x99, 0x90,
0xBB, 0xB6, 0x33, 0x22, 0x22, 0x23, 0x44, 0x55, 0x55, 0x56, 0x66, 0x66, 0x76, 0x66, 0x66, 0x55, 0x66, 0x55, 0x55, 0x44, 0x44, 0x44, 0x44, 0x44, 0x32, 0x22, 0x22, 0x23, 0x36, 0x99, 0x90,
0xBB, 0x92, 0x33, 0x22, 0x22, 0x34, 0x55, 0x55, 0x56, 0x66, 0x66, 0x66, 0x66, 0x77, 0x77, 0x66, 0x67, 0x76, 0x66, 0x66, 0x66, 0x65, 0x55, 0x55, 0x43, 0x22, 0x22, 0x22, 0x34, 0x99, 0x90,
0xBB, 0x43, 0x32, 0x22, 0x23, 0x44, 0x55, 0x55, 0x56, 0x66, 0x66, 0x76, 0x66, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x76, 0x66, 0x66, 0x65, 0x54, 0x21, 0x12, 0x22, 0x33, 0x69, 0x90,
0xBC, 0x33, 0x32, 0x22, 0x24, 0x45, 0x55, 0x66, 0x66, 0x66, 0x67, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x76, 0x65, 0x55, 0x42, 0x12, 0x22, 0x34, 0x79, 0x90,
0xBB, 0x33, 0x22, 0x22, 0x34, 0x45, 0x55, 0x66, 0x66, 0x66, 0x67, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x76, 0x66, 0x55, 0x43, 0x11, 0x22, 0x33, 0x69, 0x90,
0xBB, 0x23, 0x23, 0x22, 0x34, 0x55, 0x55, 0x66, 0x66, 0x67, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x76, 0x55, 0x43, 0x22, 0x22, 0x33, 0x49, 0x90,
0xBB, 0x23, 0x33, 0x33, 0x34, 0x55, 0x55, 0x66, 0x67, 0x67, 0x77, 0x77, 0x77, 0x77, 0x77, 0x87, 0x77, 0x87, 0x77, 0x77, 0x77, 0x77, 0x77, 0x76, 0x65, 0x54, 0x32, 0x22, 0x33, 0x47, 0x90,
0xBA, 0x33, 0x33, 0x33, 0x44, 0x55, 0x55, 0x66, 0x67, 0x67, 0x77, 0x77, 0x77, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0x77, 0x77, 0x77, 0x76, 0x65, 0x55, 0x32, 0x22, 0x33, 0x38, 0x90,
0xB8, 0x33, 0x23, 0x33, 0x44, 0x55, 0x55, 0x66, 0x66, 0x77, 0x77, 0x77, 0x78, 0x88, 0x89, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0x77, 0x77, 0x76, 0x66, 0x55, 0x32, 0x23, 0x24, 0x38, 0x90,
0xB9, 0x33, 0x33, 0x33, 0x45, 0x55, 0x55, 0x56, 0x66, 0x67, 0x77, 0x78, 0x88, 0x88, 0x89, 0x98, 0x99, 0x99, 0x98, 0x88, 0x87, 0x77, 0x77, 0x76, 0x66, 0x65, 0x43, 0x23, 0x33, 0x49, 0x90,
0xB9, 0x32, 0x33, 0x34, 0x44, 0x55, 0x55, 0x56, 0x66, 0x67, 0x77, 0x88, 0x88, 0x88, 0x89, 0x88, 0x99, 0x89, 0x98, 0x88, 0x88, 0x77, 0x77, 0x76, 0x66, 0x65, 0x43, 0x33, 0x33, 0x49, 0x90,
0xB9, 0x22, 0x33, 0x34, 0x44, 0x55, 0x55, 0x56, 0x66, 0x67, 0x77, 0x88, 0x88, 0x88, 0x99, 0x89, 0x98, 0x98, 0x88, 0x88, 0x88, 0x77, 0x76, 0x76, 0x66, 0x55, 0x43, 0x33, 0x34, 0x79, 0x90,
0xB8, 0x32, 0x33, 0x34, 0x44, 0x55, 0x55, 0x56, 0x66, 0x67, 0x77, 0x87, 0x88, 0x88, 0x89, 0x89, 0x99, 0x98, 0x88, 0x88, 0x88, 0x77, 0x76, 0x66, 0x65, 0x55, 0x44, 0x33, 0x33, 0x89, 0x90,
0xB5, 0x32, 0x33, 0x34, 0x44, 0x55, 0x55, 0x56, 0x66, 0x67, 0x77, 0x77, 0x88, 0x88, 0x89, 0x89, 0x99, 0x88, 0x88, 0x88, 0x78, 0x77, 0x76, 0x66, 0x66, 0x65, 0x43, 0x33, 0x33, 0x99, 0x90,
0xB5, 0x32, 0x23, 0x34, 0x45, 0x55, 0x56, 0x66, 0x66, 0x77, 0x77, 0x77, 0x88, 0x88, 0x88, 0x88, 0x98, 0x89, 0x88, 0x88, 0x87, 0x77, 0x77, 0x66, 0x66, 0x55, 0x43, 0x33, 0x25, 0x99, 0x90,
0xBA, 0x32, 0x23, 0x33, 0x45, 0x55, 0x66, 0x56, 0x66, 0x77, 0x77, 0x77, 0x78, 0x88, 0x89, 0x89, 0x88, 0x89, 0x88, 0x88, 0x88, 0x77, 0x77, 0x76, 0x66, 0x55, 0x43, 0x33, 0x28, 0x99, 0x90,
0xB9, 0x23, 0x33, 0x34, 0x45, 0x55, 0x66, 0x66, 0x66, 0x77, 0x77, 0x77, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0x77, 0x77, 0x77, 0x66, 0x65, 0x43, 0x23, 0x29, 0x99, 0x90,
0xB9, 0x23, 0x33, 0x33, 0x55, 0x56, 0x66, 0x66, 0x66, 0x77, 0x77, 0x77, 0x88, 0x88, 0x88, 0x88, 0x88, 0x89, 0x88, 0x88, 0x78, 0x77, 0x77, 0x77, 0x76, 0x65, 0x43, 0x23, 0x39, 0x99, 0x90,
0xBB, 0x33, 0x33, 0x34, 0x55, 0x66, 0x66, 0x66, 0x77, 0x77, 0x77, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x77, 0x77, 0x77, 0x76, 0x66, 0x53, 0x23, 0x1A, 0x99, 0x90,
0xAA, 0x33, 0x33, 0x33, 0x55, 0x56, 0x66, 0x66, 0x66, 0x77, 0x77, 0x77, 0x88, 0x88, 0x88, 0x88, 0x88, 0x89, 0x88, 0x88, 0x88, 0x78, 0x77, 0x77, 0x76, 0x66, 0x53, 0x23, 0x1A, 0xA9, 0x90,
0xAA, 0x23, 0x33, 0x34, 0x56, 0x66, 0x66, 0x66, 0x66, 0x66, 0x77, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0x77, 0x77, 0x76, 0x66, 0x53, 0x23, 0x1A, 0x99, 0x90,
0xAA, 0x73, 0x33, 0x45, 0x66, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x66, 0x78, 0x88, 0x88, 0x88, 0x88, 0x88, 0x87, 0x77, 0x66, 0x66, 0x77, 0x76, 0x66, 0x53, 0x33, 0x3A, 0x9A, 0xA0,
0xAB, 0x84, 0x33, 0x35, 0x66, 0x56, 0x55, 0x44, 0x45, 0x43, 0x33, 0x34, 0x56, 0x67, 0x87, 0x77, 0x77, 0x88, 0x65, 0x65, 0x45, 0x55, 0x65, 0x66, 0x66, 0x66, 0x64, 0x33, 0x5A, 0x9A, 0xA0,
0xAA, 0x33, 0x33, 0x36, 0x66, 0x65, 0x44, 0x45, 0x56, 0x55, 0x44, 0x44, 0x55, 0x66, 0x77, 0x67, 0x77, 0x77, 0x54, 0x44, 0x44, 0x44, 0x45, 0x55, 0x66, 0x66, 0x63, 0x33, 0x8A, 0x9A, 0xA0,
0xA6, 0x63, 0x33, 0x46, 0x66, 0x65, 0x55, 0x56, 0x67, 0x77, 0x76, 0x55, 0x55, 0x66, 0x78, 0x77, 0x87, 0x76, 0x55, 0x55, 0x67, 0x77, 0x76, 0x55, 0x55, 0x66, 0x63, 0x43, 0x99, 0x9A, 0xA0,
0xA5, 0x35, 0x33, 0x46, 0x66, 0x55, 0x55, 0x65, 0x65, 0x52, 0x34, 0x45, 0x54, 0x56, 0x78, 0x88, 0x88, 0x76, 0x66, 0x77, 0x88, 0x87, 0x77, 0x65, 0x65, 0x56, 0x63, 0x33, 0x34, 0xAA, 0xA0,
0xB4, 0x45, 0x44, 0x46, 0x66, 0x65, 0x55, 0x43, 0x12, 0x2A, 0x12, 0x54, 0x44, 0x45, 0x68, 0x88, 0x88, 0x76, 0x66, 0x44, 0x12, 0x46, 0x77, 0x66, 0x66, 0x66, 0x63, 0x33, 0x77, 0x9A, 0xA0,
0xB4, 0x45, 0x54, 0x46, 0x66, 0x66, 0x65, 0x32, 0x83, 0x22, 0x35, 0x75, 0x55, 0x45, 0x68, 0x88, 0x87, 0x65, 0x54, 0x51, 0x2A, 0x24, 0x24, 0x66, 0x67, 0x76, 0x63, 0x37, 0x75, 0x8A, 0xA0,
0xB6, 0x45, 0x44, 0x56, 0x66, 0x66, 0x54, 0x55, 0x66, 0x34, 0x58, 0x56, 0x67, 0x44, 0x67, 0x88, 0x86, 0x68, 0x56, 0x83, 0x32, 0x39, 0x74, 0x46, 0x67, 0x77, 0x64, 0x57, 0x66, 0x9A, 0xA0,
0xA7, 0x56, 0x54, 0x56, 0x66, 0x66, 0x56, 0x66, 0x66, 0x66, 0x77, 0x66, 0x66, 0x55, 0x67, 0x88, 0x87, 0x77, 0x65, 0x67, 0x44, 0x77, 0x66, 0x55, 0x67, 0x77, 0x64, 0x68, 0x76, 0x9A, 0xA0,
0xA8, 0x56, 0x54, 0x56, 0x66, 0x66, 0x65, 0x56, 0x66, 0x77, 0x87, 0x66, 0x65, 0x55, 0x67, 0x78, 0x87, 0x67, 0x66, 0x67, 0x76, 0x77, 0x76, 0x66, 0x67, 0x76, 0x64, 0x78, 0x65, 0x9A, 0xA0,
0xAB, 0x66, 0x43, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x76, 0x55, 0x56, 0x67, 0x87, 0x77, 0x76, 0x77, 0x77, 0x78, 0x88, 0x77, 0x77, 0x76, 0x76, 0x64, 0x88, 0x67, 0xAA, 0xA0,
0xAB, 0x56, 0x44, 0x56, 0x66, 0x66, 0x76, 0x66, 0x77, 0x77, 0x77, 0x66, 0x65, 0x56, 0x67, 0x77, 0x87, 0x76, 0x77, 0x87, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x65, 0x68, 0x78, 0xAA, 0xA0,
0xAA, 0x46, 0x46, 0x56, 0x66, 0x66, 0x77, 0x77, 0x77, 0x77, 0x76, 0x77, 0x65, 0x66, 0x67, 0x88, 0x87, 0x76, 0x77, 0x88, 0x88, 0x77, 0x88, 0x77, 0x77, 0x76, 0x66, 0x68, 0x7A, 0xAA, 0xA0,
0xBA, 0x46, 0x55, 0x56, 0x66, 0x66, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x66, 0x65, 0x67, 0x78, 0x87, 0x66, 0x77, 0x77, 0x88, 0x88, 0x88, 0x88, 0x77, 0x76, 0x67, 0x78, 0x7A, 0xAA, 0xA0,
0xAA, 0x46, 0x63, 0x67, 0x66, 0x66, 0x67, 0x77, 0x77, 0x77, 0x77, 0x77, 0x66, 0x66, 0x67, 0x78, 0x87, 0x67, 0x77, 0x77, 0x77, 0x77, 0x77, 0x88, 0x77, 0x76, 0x76, 0x78, 0x9A, 0xAA, 0xA0,
0xAA, 0x55, 0x65, 0x37, 0x66, 0x66, 0x67, 0x67, 0x77, 0x77, 0x77, 0x77, 0x66, 0x56, 0x66, 0x78, 0x77, 0x66, 0x77, 0x88, 0x77, 0x77, 0x78, 0x88, 0x77, 0x76, 0x86, 0x78, 0xAA, 0xAA, 0xA0,
0xAA, 0x95, 0x76, 0x56, 0x66, 0x66, 0x66, 0x77, 0x77, 0x87, 0x77, 0x87, 0x75, 0x56, 0x67, 0x78, 0x77, 0x76, 0x88, 0x88, 0x88, 0x77, 0x78, 0x87, 0x77, 0x77, 0x67, 0x77, 0xAA, 0xAA, 0xA0,
0xAA, 0xA5, 0x66, 0x57, 0x66, 0x66, 0x67, 0x77, 0x77, 0x87, 0x88, 0x87, 0x55, 0x56, 0x67, 0x77, 0x87, 0x66, 0x78, 0x88, 0x88, 0x88, 0x87, 0x87, 0x78, 0x76, 0x79, 0x77, 0xAA, 0xAA, 0xA0,
0xAA, 0xA7, 0x66, 0x57, 0x66, 0x66, 0x67, 0x77, 0x77, 0x88, 0x88, 0x76, 0x56, 0x66, 0x67, 0x78, 0x87, 0x66, 0x68, 0x89, 0x88, 0x88, 0x88, 0x87, 0x77, 0x76, 0x99, 0x77, 0xAA, 0xAA, 0xA0,
0xAA, 0xAA, 0x66, 0x56, 0x66, 0x66, 0x77, 0x77, 0x78, 0x88, 0x77, 0x65, 0x57, 0x66, 0x67, 0x8A, 0x97, 0x77, 0x77, 0x79, 0x98, 0x98, 0x88, 0x88, 0x87, 0x76, 0x88, 0x6A, 0xAA, 0xAA, 0xA0,
0xAA, 0xAA, 0x66, 0x57, 0x66, 0x66, 0x77, 0x77, 0x78, 0x88, 0x76, 0x65, 0x57, 0x76, 0x68, 0x89, 0x88, 0x77, 0x77, 0x77, 0x89, 0x98, 0x88, 0x88, 0x87, 0x76, 0x87, 0x6A, 0xAA, 0xAA, 0xA0,
0xAA, 0xAA, 0xA6, 0x57, 0x66, 0x66, 0x77, 0x77, 0x77, 0x77, 0x77, 0x65, 0x44, 0x46, 0x68, 0x88, 0x88, 0x77, 0x77, 0x77, 0x88, 0x98, 0x88, 0x88, 0x87, 0x76, 0x88, 0x7A, 0xAA, 0xAA, 0xA0,
0xA9, 0xAA, 0xAA, 0xA8, 0x66, 0x66, 0x77, 0x77, 0x77, 0x77, 0x76, 0x76, 0x55, 0x44, 0x47, 0x77, 0x86, 0x55, 0x77, 0x77, 0x78, 0x88, 0x88, 0x88, 0x77, 0x76, 0x76, 0xAA, 0xAA, 0xAA, 0xA0,
0xAA, 0xAA, 0xAA, 0xA9, 0x66, 0x66, 0x67, 0x77, 0x77, 0x77, 0x76, 0x66, 0x66, 0x54, 0x45, 0x66, 0x66, 0x66, 0x77, 0x78, 0x88, 0x88, 0x88, 0x88, 0x77, 0x66, 0x8B, 0xAA, 0xAA, 0xAA, 0xA0,
0x9A, 0xAA, 0xA9, 0x9A, 0x77, 0x66, 0x77, 0x77, 0x77, 0x77, 0x76, 0x66, 0x66, 0x66, 0x65, 0x45, 0x56, 0x67, 0x77, 0x77, 0x87, 0x88, 0x88, 0x88, 0x77, 0x75, 0xBA, 0xAA, 0xAA, 0xAA, 0xA0,
0xAA, 0xAA, 0xAA, 0xAA, 0x67, 0x66, 0x77, 0x77, 0x77, 0x77, 0x66, 0x66, 0x67, 0x67, 0x87, 0x77, 0x77, 0x77, 0x77, 0x77, 0x87, 0x78, 0x88, 0x88, 0x77, 0x64, 0xBA, 0xAA, 0xAA, 0xAA, 0xA0,
0xA9, 0xAA, 0xAA, 0xAA, 0x67, 0x66, 0x67, 0x77, 0x77, 0x77, 0x56, 0x55, 0x55, 0x66, 0x77, 0x77, 0x78, 0x87, 0x67, 0x77, 0x88, 0x77, 0x88, 0x88, 0x77, 0x75, 0xAA, 0xAA, 0xAA, 0xAA, 0xA0,
0xAA, 0xAA, 0xAA, 0xA9, 0x57, 0x66, 0x67, 0x78, 0x87, 0x76, 0x33, 0x34, 0x33, 0x45, 0x57, 0x77, 0x77, 0x77, 0x77, 0x77, 0x88, 0x88, 0x88, 0x87, 0x77, 0x79, 0xAA, 0xAA, 0xAA, 0xAA, 0xA0,
0xAA, 0xAA, 0xAA, 0xAA, 0x76, 0x66, 0x77, 0x77, 0x89, 0x77, 0x66, 0x54, 0x44, 0x43, 0x23, 0x34, 0x34, 0x56, 0x66, 0x75, 0x68, 0x78, 0x88, 0x88, 0x77, 0x5B, 0xAA, 0xAA, 0xAA, 0xAA, 0xA0,
0xAA, 0xAA, 0xAA, 0xAA, 0x76, 0x66, 0x75, 0x78, 0x88, 0x77, 0x76, 0x65, 0x55, 0x56, 0x65, 0x55, 0x55, 0x43, 0x34, 0x67, 0x67, 0x88, 0x88, 0x88, 0x76, 0x5A, 0xAA, 0xAA, 0xAA, 0xAA, 0xA0,
0xA9, 0xAA, 0xAA, 0xAA, 0x76, 0x77, 0x76, 0x77, 0x78, 0x87, 0x76, 0x66, 0x65, 0x56, 0x66, 0x67, 0x66, 0x56, 0x67, 0x88, 0x88, 0x88, 0x88, 0x87, 0x76, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xA0,
0xA9, 0xAA, 0xAA, 0xAA, 0x66, 0x67, 0x67, 0x77, 0x78, 0x87, 0x76, 0x76, 0x76, 0x66, 0x76, 0x67, 0x67, 0x77, 0x78, 0x88, 0x88, 0x88, 0x88, 0x87, 0x77, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xA0,
0xA9, 0x9A, 0xAA, 0xAA, 0x66, 0x66, 0x77, 0x77, 0x77, 0x77, 0x76, 0x76, 0x77, 0x67, 0x66, 0x67, 0x77, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x77, 0x7B, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xA0,
0xA9, 0xAA, 0xAA, 0xAA, 0x66, 0x56, 0x67, 0x77, 0x77, 0x77, 0x76, 0x67, 0x67, 0x77, 0x77, 0x77, 0x88, 0x88, 0x78, 0x88, 0x88, 0x88, 0x88, 0x77, 0x6A, 0xBA, 0xAA, 0xAA, 0xAA, 0xAA, 0xA0,
0xA9, 0xAA, 0xAA, 0x74, 0x65, 0x55, 0x66, 0x66, 0x67, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x77, 0xBA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xA0,
0xAA, 0x9A, 0xA8, 0x54, 0x65, 0x55, 0x66, 0x66, 0x67, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x78, 0x5B, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xA0,
0x99, 0xA9, 0x97, 0x45, 0x66, 0x65, 0x66, 0x66, 0x66, 0x66, 0x77, 0x77, 0x66, 0x67, 0x77, 0x77, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x76, 0xBA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xBA, 0xA0,
0x99, 0x99, 0x85, 0x75, 0x66, 0x66, 0x55, 0x55, 0x66, 0x66, 0x67, 0x77, 0x67, 0x77, 0x78, 0x87, 0x88, 0x88, 0x88, 0x88, 0x78, 0x77, 0x75, 0xBA, 0xAA, 0xAA, 0xAA, 0xAA, 0xBB, 0xAA, 0xA0,
0x99, 0x99, 0x93, 0x73, 0x66, 0x66, 0x55, 0x55, 0x56, 0x66, 0x66, 0x77, 0x67, 0x78, 0x78, 0x88, 0x88, 0x88, 0x88, 0x87, 0x87, 0x77, 0x67, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xA0,
0x99, 0x99, 0x95, 0x63, 0x65, 0x66, 0x56, 0x55, 0x55, 0x56, 0x67, 0x77, 0x67, 0x67, 0x78, 0x88, 0x88, 0x88, 0x87, 0x77, 0x77, 0x76, 0x66, 0xAB, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xA0,
0x99, 0x99, 0x97, 0x33, 0x65, 0x55, 0x55, 0x55, 0x55, 0x55, 0x66, 0x66, 0x66, 0x77, 0x77, 0x77, 0x88, 0x87, 0x77, 0x77, 0x76, 0x66, 0x74, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xA0,
0x99, 0x99, 0xA3, 0x32, 0x55, 0x66, 0x65, 0x55, 0x55, 0x55, 0x65, 0x66, 0x66, 0x77, 0x77, 0x77, 0x77, 0x88, 0x77, 0x77, 0x66, 0x67, 0x62, 0xA9, 0xAA, 0xBA, 0xAA, 0xBB, 0xAA, 0xAA, 0xA0,
0x99, 0x9A, 0x91, 0x23, 0x56, 0x66, 0x66, 0x55, 0x55, 0x55, 0x55, 0x66, 0x66, 0x77, 0x77, 0x77, 0x77, 0x87, 0x77, 0x66, 0x76, 0x77, 0x62, 0x9A, 0xAA, 0xBA, 0xBA, 0xAA, 0xBA, 0xBA, 0xA0,
0x99, 0x9A, 0xA1, 0x33, 0x56, 0x66, 0x66, 0x55, 0x55, 0x55, 0x55, 0x55, 0x66, 0x67, 0x77, 0x76, 0x76, 0x76, 0x66, 0x67, 0x77, 0x77, 0x33, 0x9A, 0xAA, 0xAA, 0xAA, 0xAA, 0xBB, 0xAB, 0xB0,
0x99, 0x9A, 0xA2, 0x23, 0x55, 0x66, 0x66, 0x65, 0x55, 0x55, 0x55, 0x55, 0x56, 0x66, 0x66, 0x66, 0x66, 0x55, 0x56, 0x67, 0x77, 0x77, 0x23, 0x9A, 0xAA, 0xBB, 0xBB, 0xAA, 0xBA, 0xAA, 0xB0,
0x99, 0x9A, 0xA5, 0x34, 0x55, 0x66, 0x66, 0x65, 0x66, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x66, 0x67, 0x77, 0x77, 0x77, 0x22, 0x9A, 0xAB, 0xAA, 0xBA, 0xAA, 0xBA, 0xAA, 0xA0,
0x99, 0x9A, 0xA8, 0x34, 0x45, 0x66, 0x66, 0x56, 0x66, 0x65, 0x55, 0x55, 0x55, 0x55, 0x55, 0x56, 0x66, 0x67, 0x77, 0x77, 0x77, 0x75, 0x31, 0x8A, 0xAA, 0x9A, 0xAA, 0xBB, 0xAB, 0xBA, 0xA0,
0x99, 0x9A, 0xA9, 0x34, 0x45, 0x66, 0x76, 0x66, 0x66, 0x65, 0x66, 0x66, 0x66, 0x65, 0x67, 0x77, 0x77, 0x77, 0x88, 0x77, 0x77, 0x75, 0x31, 0x9B, 0xBA, 0xBA, 0xAA, 0x9A, 0xBB, 0xBA, 0xB0,
0x9A, 0x9A, 0xAA, 0x54, 0x45, 0x56, 0x66, 0x76, 0x77, 0x66, 0x66, 0x77, 0x77, 0x77, 0x67, 0x77, 0x77, 0x77, 0x78, 0x77, 0x77, 0x64, 0x31, 0xAA, 0xAA, 0xAB, 0xBB, 0xBA, 0x9A, 0xAA, 0xB0,
0x99, 0x9A, 0xAA, 0xA3, 0x45, 0x56, 0x66, 0x77, 0x77, 0x67, 0x67, 0x77, 0x77, 0x77, 0x88, 0x88, 0x88, 0x88, 0x87, 0x77, 0x77, 0x64, 0x35, 0xAA, 0xBA, 0xBB, 0xBA, 0xAA, 0xBB, 0xAA, 0xA0,
0xA9, 0xAA, 0xAA, 0xB8, 0x44, 0x56, 0x66, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x88, 0x89, 0x88, 0x88, 0x88, 0x78, 0x77, 0x77, 0x53, 0x27, 0xAB, 0xBA, 0xBA, 0xBB, 0xBB, 0xBA, 0xAA, 0xB0
};
/*********************************************************************
*
* GUIDEMO_bm4bpp
*
**********************************************************************
*/
const GUI_BITMAP GUIDEMO_bm4bpp = {
61, /* XSize */
92, /* YSize */
31, /* BytesPerLine */
4, /* BitsPerPixel */
_acJoerg, /* Pointer to picture data (indices) */
&_PalJoerg /* Pointer to palette */
};
@@ -0,0 +1,76 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : GUIDEMO_Circle.c
Purpose : Drawing circles
----------------------------------------------------------------------
*/
#include "GUI.h"
#include "GUIDEMO.h"
/*********************************************************************
*
* GUIDEMO_Circle
*
**********************************************************************
*/
void GUIDEMO_Circle(void) {
int x0, y0, r;
GUIDEMO_ShowIntro("Circles",
"\nArbitrary circles"
"\nand arcs.");
GUI_Clear();
GUI_SetFont(&GUI_Font8x16);
GUI_SetColor(GUI_WHITE);
x0 = LCD_XSIZE >> 1;
y0 = LCD_YSIZE >> 1;
#if GUIDEMO_LARGE
r = 50;
GUI_DispStringAt("Circle", 0, 0);
#elif !(GUIDEMO_TINY)
r = 40;
#else
#if (LCD_YSIZE < 80)
r = 23;
#else
r = 30;
#endif
#endif
GUI_FillCircle (x0, y0, r);
GUIDEMO_Wait();
GUI_SetDrawMode(GUI_DM_XOR);
#if GUIDEMO_LARGE
GUI_FillCircle (x0, y0, r + 10);
#elif !(GUIDEMO_TINY)
GUI_FillCircle (x0, y0, r + 8);
#else
GUI_FillCircle (x0, y0, r + 6);
#endif
GUI_SetDrawMode(0);
GUIDEMO_Wait();
#if GUI_SUPPORT_AA
#if GUIDEMO_LARGE
GUIDEMO_ShowInfo("Circles with\nAntialiasing");
#endif
GUI_Clear();
GUI_SetColor(GUI_WHITE);
#if GUIDEMO_LARGE
GUI_DispStringAt("Antialiased\ncircle", 0, 0);
#endif
GUI_AA_FillCircle(x0, y0, r - 2);
GUIDEMO_Wait();
#endif
}
@@ -0,0 +1,166 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* ľC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : GUIDEMO_ShowColorBar.c
Purpose : Draws color bars
----------------------------------------------------------------------
*/
#include "LCD.h" /* interface definitions */
#include "LCD_ConfDefaults.h" /* valid LCD configuration */
#include "GUI.h"
#include "GUIDEMO.h"
/*********************************************************************
*
* GUIDEMO_ShowColorBar
*
**********************************************************************
*/
#if LCD_BITSPERPIXEL > 2
void GUIDEMO_ShowColorBar(void) {
int nBars = 13;
int NumColors = LCD_GetDevCap(LCD_DEVCAP_NUMCOLORS);
int XSize = LCD_XSIZE;
int i, yStep, y0, x0;
#if GUIDEMO_LARGE
y0 = 70;
x0 = 60;
GUIDEMO_ShowIntro("Color bar",
"emWin features "
"\nan integrated color"
"\nmanagement"
"\nwill always find the best available color"
"\nfor any logical color");
#else
#if !(GUIDEMO_TINY)
y0 = 55;
x0 = 55;
GUIDEMO_ShowIntro("Color bar",
"emWin features "
"\nan integrated color"
"\nmanagement will always"
"\nfind the best available"
"\ncolor for any logical color");
#else
y0 = 16;
x0 = 40;
GUIDEMO_ShowIntro("Color bar",
"emWin features "
"\nan integrated color"
"\nmanagement");
#endif
#endif
XSize -= x0;
#if (LCD_YSIZE < 320)
yStep = (LCD_YSIZE - y0) / nBars;
#else
yStep = (LCD_YSIZE - y0 - 60) / nBars;
#endif
GUI_SetColor(GUI_WHITE);
GUI_SetBkColor(GUI_BLACK);
GUI_Clear();
GUI_SetFont(&GUI_Font8x16);
GUI_DispString("Color bars\n");
#if !(GUIDEMO_TINY)
GUI_SetFont(&GUI_Font8_ASCII);
#ifdef LCD_CONTROLLER
GUI_DispString("\nLCD_CONTROLLER: ");
GUI_DispDecMin(LCD_CONTROLLER);
GUI_DispString("\n");
#endif
GUI_DispDecMin(LCD_BITSPERPIXEL);
GUI_DispString(" bpp");
#ifdef LCD_BUSWIDTH
GUI_DispString(", ");
GUI_DispDecMin(LCD_BUSWIDTH);
GUI_DispString(" bit bus");
#endif
GUI_DispString(", ");
GUI_DispDecMin(NumColors);
GUI_DispString(" colors\n");
#if (LCD_FIXEDPALETTE)
GUI_DispString("Fixed palette: ");
GUI_DispDecMin(LCD_FIXEDPALETTE);
#else
GUI_DispString("(Custom)");
#endif
#endif
#if !GUIDEMO_LARGE
#if (LCD_YSIZE < 100)
GUI_SetFont(&GUI_Font4x6);
#elif (LCD_YSIZE < 160)
GUI_SetFont(&GUI_Font6x8);
#else
GUI_SetFont(&GUI_Font8x8);
#endif
#else
GUI_SetFont(&GUI_Font8x8);
#endif
GUI_SetColor(GUI_WHITE);
GUI_DispStringAt("Red", 0, y0 + yStep);
GUI_DispStringAt("Green", 0, y0 + 3 * yStep);
GUI_DispStringAt("Blue", 0, y0 + 5 * yStep);
GUI_DispStringAt("Grey", 0, y0 + 6 * yStep);
GUI_DispStringAt("Yellow", 0, y0 + 8 * yStep);
GUI_DispStringAt("Cyan", 0, y0 + 10 * yStep);
GUI_DispStringAt("Magenta", 0, y0 + 12 * yStep);
for (i = 0; (i < XSize) && !GUIDEMO_CheckCancel(); i++) {
U16 cs = (255 * (U32)i) / XSize;
U16 x = x0 + i;;
/* Red */
GUI_SetColor(cs);
GUI_DrawVLine(x, y0, y0 + yStep - 1);
GUI_SetColor(0x0000ff + (255 - cs) * 0x10100L);
GUI_DrawVLine(x, y0 + yStep, y0 + 2 * yStep - 1);
/* Green */
GUI_SetColor(cs<<8);
GUI_DrawVLine(x, y0 + 2 * yStep, y0 + 3 * yStep - 1);
GUI_SetColor(0x00ff00 + (255 - cs) * 0x10001L);
GUI_DrawVLine(x, y0 + 3 * yStep, y0 + 4 * yStep - 1);
/* Blue */
GUI_SetColor(cs * 0x10000L);
GUI_DrawVLine(x, y0 + 4 * yStep, y0 + 5 * yStep - 1);
GUI_SetColor(0xff0000 + (255 - cs) * 0x00101L);
GUI_DrawVLine(x, y0 + 5 * yStep, y0 + 6 * yStep - 1);
/* Gray */
GUI_SetColor(cs * 0x10101L);
GUI_DrawVLine(x, y0 + 6 * yStep, y0 + 7 * yStep - 1);
/* Yellow */
GUI_SetColor(cs * 0x00101L);
GUI_DrawVLine(x, y0 + 7 * yStep, y0 + 8 * yStep - 1);
GUI_SetColor(0x00ffff + (255 - cs) * 0x10000L);
GUI_DrawVLine(x, y0 + 8 * yStep, y0 + 9 * yStep - 1);
/* Cyan */
GUI_SetColor(cs * 0x10100L);
GUI_DrawVLine(x, y0 + 9 * yStep, y0 + 10 * yStep - 1);
GUI_SetColor(0xffff00 + (255 - cs) * 0x00001L);
GUI_DrawVLine(x, y0 + 10 * yStep, y0 + 11 * yStep - 1);
/* Magenta */
GUI_SetColor(cs * 0x10001L);
GUI_DrawVLine(x, y0 + 11 * yStep, y0 + 12 * yStep - 1);
GUI_SetColor(0xff00ff + (255 - cs) * 0x00100L);
GUI_DrawVLine(x, y0 + 12 * yStep, y0 + 13 * yStep - 1);
}
GUIDEMO_Wait();
}
#else
void GUIDEMO_ShowColorBar(void) {}
#endif
@@ -0,0 +1,118 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : GUIDEMO_ColorList.c
Purpose : Shows color list
----------------------------------------------------------------------
*/
#include "LCD_ConfDefaults.h" /* valid LCD configuration */
#include "GUI.h"
#include "GUIDEMO.h"
/*********************************************************************
*
* GUIDEMO_ShowColorList
*
**********************************************************************
*/
#if (LCD_BITSPERPIXEL > 2) && (LCD_BITSPERPIXEL <= 8)
void GUIDEMO_ShowColorList(void) {
int NumColors = LCD_GetDevCap(LCD_DEVCAP_NUMCOLORS);
int Lines = (NumColors - 1) / 16 + 1;
int y0;
#if (LCD_BITSPERPIXEL > 8)
int XStep = LCD_XSIZE / 256;
int YStep = NumColors / 256;
#endif
int i;
#if GUIDEMO_LARGE
y0 = 70;
#elif !(GUIDEMO_TINY)
#if (LCD_YSIZE < 120)
y0 = 50;
#else
y0 = 55;
#endif
#else
y0 = 16;
#endif
GUIDEMO_ShowIntro("Available colors",
"Shows the first of the"
"\navailable colors in the"
"\nsimulated configuration");
GUI_SetColor(GUI_WHITE);
GUI_SetBkColor(GUI_BLACK);
GUI_Clear();
GUI_SetFont(&GUI_Font8x16);
GUI_DispString("Available colors\n");
#if !(GUIDEMO_TINY)
GUI_SetFont(&GUI_Font8_ASCII);
#ifdef LCD_CONTROLLER
GUI_DispString("\nLCD_CONTROLLER: ");
GUI_DispDecMin(LCD_CONTROLLER);
GUI_DispString("\n");
#endif
GUI_DispDecMin(LCD_BITSPERPIXEL);
GUI_DispString(" bpp");
#ifdef LCD_BUSWIDTH
GUI_DispString(", ");
GUI_DispDecMin(LCD_BUSWIDTH);
GUI_DispString(" bit bus");
#endif
GUI_DispString(", ");
GUI_DispDecMin(NumColors);
GUI_DispString(" colors\n");
#if (LCD_FIXEDPALETTE)
GUI_DispString("Fixed palette: ");
GUI_DispDecMin(LCD_FIXEDPALETTE);
#else
GUI_DispString("(Custom)");
#endif
#endif
#if (LCD_BITSPERPIXEL <= 8)
{
int XStep = LCD_XSIZE / 16;
#if (LCD_YSIZE < 320)
int YStep = (LCD_YSIZE - y0) / Lines;
#else
int YStep = (LCD_YSIZE - y0 - 60) / Lines;
#endif
int dy = (YStep <= 3) ? 1 : 2;
for (i = 0; i < NumColors; i++) {
GUI_SetColorIndex(i);
GUI_FillRect((i%16) * XStep + 2,
(i/16) * YStep + y0 + 1,
(i%16 + 1) * XStep - 1,
(i/16 + 1) * YStep + y0 - dy);
}
}
#else
{
for (i = 0; i < NumColors; i++) {
GUI_SetColorIndex(i);
GUI_DrawPoint((U8)(i) + ((LCD_XSIZE - 1 - 256) >> 1), (i >> 8) + y0);
}
}
#endif
GUIDEMO_Delay(2500);
}
#else
void GUIDEMO_ShowColorList(void) {}
#endif
@@ -0,0 +1,303 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* ľC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : GUIDEMO_Cursor.c
Purpose : shows Cursor-API
----------------------------------------------------------------------
*/
#include "GUI.h"
#include "GUIDEMO.h"
#if (GUI_SUPPORT_CURSOR & GUI_SUPPORT_TOUCH)
/*********************************************************************
*
* defines
*
**********************************************************************
*/
#define countof(Obj) (sizeof(Obj)/sizeof(Obj[0]))
#if GUIDEMO_LARGE
#define NUM_CURSORS 3
#define XMAX 28
#else
#define NUM_CURSORS 2
#define XMAX 24
#endif
/*********************************************************************
*
* types
*
**********************************************************************
*/
typedef struct {
const GUI_CURSOR* pCursor;
char Size;
} CURSOR_INFO;
typedef struct {
const CURSOR_INFO aCursor[NUM_CURSORS];
const char* pType;
} CURSORTYPE_INFO;
/*********************************************************************
*
* static data
*
**********************************************************************
*/
static const CURSORTYPE_INFO _CursorArrow = {
&GUI_CursorArrowS, 'S',
&GUI_CursorArrowM, 'M',
#if (NUM_CURSORS == 3)
&GUI_CursorArrowL, 'L',
"arrow cursors"
#else
"arrow\ncursors"
#endif
};
#if !(GUIDEMO_TINY)
static const CURSORTYPE_INFO _CursorArrowI = {
&GUI_CursorArrowSI, 'S',
&GUI_CursorArrowMI, 'M',
#if (NUM_CURSORS == 3)
&GUI_CursorArrowLI, 'L',
"inverted arrow cursors"
#else
"inverted\narrow cursors"
#endif
};
#endif
static const CURSORTYPE_INFO _CursorCross = {
&GUI_CursorCrossS, 'S',
&GUI_CursorCrossM, 'M',
#if (NUM_CURSORS == 3)
&GUI_CursorCrossL, 'L',
"cross cursors"
#else
"cross\ncursors"
#endif
};
#if !(GUIDEMO_TINY)
static const CURSORTYPE_INFO _CursorCrossI = {
&GUI_CursorCrossSI, 'S',
&GUI_CursorCrossMI, 'M',
#if (NUM_CURSORS == 3)
&GUI_CursorCrossLI, 'L',
"inverted cross cursors"
#else
"inverted\ncross cursors"
#endif
};
#endif
static const GUI_CURSOR* _aCursor[] = {
&GUI_CursorArrowM,
#if !(GUIDEMO_TINY)
&GUI_CursorArrowMI,
#endif
&GUI_CursorCrossM,
#if !(GUIDEMO_TINY)
&GUI_CursorCrossMI,
#endif
};
/*********************************************************************
*
* static code
*
**********************************************************************
*/
/*********************************************************************
*
* _ShowCursorType
*/
static void _ShowCursorType(const CURSORTYPE_INFO* pCursorType, int x0, int y0) {
const GUI_CURSOR* pCursor;
char Char;
int i, x, y;
int yMax = 0;
int yHot = 0;
/* Calculate height and width of biggest cursor */
for (i = 0; i < NUM_CURSORS; i++) {
pCursor = pCursorType->aCursor[i].pCursor;
if (pCursor->pBitmap->YSize > yMax) {
yMax = pCursor->pBitmap->YSize;
yHot = pCursor->yHot;
}
}
#if ((LCD_YSIZE >= 220) && (LCD_XSIZE >= 300))
GUI_SetFont(&GUI_FontComic18B_ASCII);
#else
GUI_SetFont(&GUI_Font13B_ASCII);
#endif
#if (NUM_CURSORS != 3)
GUI_SetLBorder(x0);
#endif
GUI_DispStringAt(pCursorType->pType, x0, y0);
#if GUIDEMO_LARGE
y0 += GUI_GetFontDistY() + 1;
GUI_SetFont(&GUI_Font13B_ASCII);
#else
#if (LCD_YSIZE < 80)
x0 += 50;
#else
y0 += GUI_GetFontDistY() * 2 + 1;
#endif
GUI_SetFont(&GUI_Font10_ASCII);
#endif
for (i = 0; i < NUM_CURSORS; i++) {
pCursor = pCursorType->aCursor[i].pCursor;
Char = pCursorType->aCursor[i].Size;
y = y0 + yHot - pCursor->yHot;
x = ((pCursor->pBitmap->XSize - GUI_GetCharDistX(Char)) >> 1);
GUI_DrawBitmap(pCursor->pBitmap, x0 + XMAX * i + 5, y);
GUI_DispCharAt(Char, x0 + XMAX * i + 5 + x, y0 + yMax + 2);
}
}
/*********************************************************************
*
* _MoveCursor
*/
static void _MoveCursor(const GUI_CURSOR* Cursor){
int x, y;
int xMax = LCD_XSIZE >> 1;
int yMax = LCD_YSIZE >> 1;
#if !GUIDEMO_LARGE
xMax *= 1.3;
yMax *= 1.3;
#endif
GUI_CURSOR_Select(Cursor);
for(x = y = 0; ((x < xMax) && (y < yMax) && !GUIDEMO_CheckCancel()); x += 6, y += 6) {
if ( x == xMax) {
x = xMax;
}
if ( y == yMax) {
y = yMax;
}
GUI_CURSOR_SetPosition(x, y);
GUIDEMO_Delay(75);
}
}
/*********************************************************************
*
* _DispCursor
*/
static void _DispCursor(void) {
#if !(GUIDEMO_LARGE)
int x0 = 0;
#endif
int y0, dx, dy;
GUI_CURSOR_Hide();
GUI_SetTextMode(GUI_TM_TRANS);
#if GUIDEMO_LARGE
GUI_SetFont(&GUI_FontComic24B_ASCII);
GUI_DispStringAt("Available\n cursors:", 18, 12);
#else
#if GUIDEMO_TINY
GUI_SetFont(&GUI_Font13B_ASCII);
#else
GUI_SetFont(&GUI_FontComic18B_ASCII);
#endif
GUI_DispStringHCenterAt("Available cursors:", LCD_XSIZE >> 1, LCD_YSIZE >> 5);
#endif
/* Display the cursors */
#if GUIDEMO_LARGE
y0 = 68;
dx = LCD_XSIZE / 2.5;
#if (LCD_YSIZE > 240)
dy = LCD_YSIZE / 3.2;
#else
dy = 75;
#endif
#if ((LCD_YSIZE < 220) || (LCD_XSIZE < 300))
y0 -= 3;
dy -= 12;
#endif
_ShowCursorType(&_CursorArrow, 0, y0);
_ShowCursorType(&_CursorCross, 0, y0 + dy);
_ShowCursorType(&_CursorArrowI, dx, y0);
_ShowCursorType(&_CursorCrossI, dx, y0 + dy);
#else
#if GUIDEMO_TINY
y0 = 20;
#else
y0 = 30;
#endif
#if ((LCD_XSIZE < 160) && ((LCD_YSIZE >= 160) || (LCD_YSIZE < 90)))
x0 = 10;
#endif
dx = LCD_XSIZE / 2.2;
dy = LCD_YSIZE / 2.6;
_ShowCursorType(&_CursorArrow, x0, y0);
#if (LCD_YSIZE >= 160)
_ShowCursorType(&_CursorCross, x0, y0 + dy);
#elif (LCD_YSIZE < 90)
GUIDEMO_Delay(2000);
GUI_ClearRect(0, 20, LCD_XSIZE - 1, LCD_YSIZE - 1);
_ShowCursorType(&_CursorCross, x0, y0);
#else
_ShowCursorType(&_CursorCross, dx, y0);
#endif
#if ((LCD_YSIZE >= 160) && (LCD_XSIZE >= 160))
_ShowCursorType(&_CursorArrowI, dx, y0);
_ShowCursorType(&_CursorCrossI, dx, y0 + dy);
#endif
#endif
}
/*********************************************************************
*
* public code
*
**********************************************************************
*/
/*********************************************************************
*
* GUIDEMO_Cursor
*/
void GUIDEMO_Cursor(void) {
int i = 0;
GUIDEMO_ShowIntro("Cursor",
"\nemWin supports"
"\nsoftware cursor");
GUIDEMO_SetBkColor(GUI_BLUE);
GUI_Clear();
_DispCursor();
GUIDEMO_Delay(1500);
GUIDEMO_NotifyStartNext();
GUI_CURSOR_Show();
for ( i = 0;(i < countof(_aCursor) && !GUIDEMO_CheckCancel()); i++) {
_MoveCursor(_aCursor[i]);
}
GUI_CURSOR_SetPosition(0,0);
GUI_CURSOR_Select(&GUI_CursorArrowM);
}
#else
void GUIDEMO_Cursor(void) {}
#endif
@@ -0,0 +1,272 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : GUIDEMO_Dialog.c
Purpose : Automotive samples
----------------------------------------------------------------------
*/
#include <stddef.h> /* needed for definition of NULL */
#include "GUI.h"
#include "GUIDEMO.h"
#include "LCD_ConfDefaults.h"
#if GUI_SUPPORT_MEMDEV && GUI_WINSUPPORT
#include "WM.h"
#include "DIALOG.h"
#include "LISTBOX.h"
#include "EDIT.h"
#include "SLIDER.h"
#include "FRAMEWIN.h"
/*********************************************************************
*
* types
*
**********************************************************************
*/
typedef struct {
unsigned char Id;
int Time;
} KEYSIM;
/*********************************************************************
*
* static data
*
**********************************************************************
*/
#if GUIDEMO_LARGE
static const GUI_WIDGET_CREATE_INFO aDialogCreate[] = {
{ FRAMEWIN_CreateIndirect, "Dialog", 0, 10, 10, 162, 214, FRAMEWIN_CF_MOVEABLE},
{ BUTTON_CreateIndirect, "OK", GUI_ID_OK, 90, 5, 60, 20 },
{ BUTTON_CreateIndirect, "Cancel", GUI_ID_CANCEL, 90, 30, 60, 20 },
{ TEXT_CreateIndirect, "LText", 0, 5, 59, 43, 15, TEXT_CF_LEFT },
{ TEXT_CreateIndirect, "RText", 0, 5, 79, 43, 15, TEXT_CF_RIGHT },
{ TEXT_CreateIndirect, "Hex", 0, 5, 99, 48, 15, TEXT_CF_LEFT },
{ TEXT_CreateIndirect, "Bin", 0, 5, 119, 48, 15, TEXT_CF_LEFT },
{ EDIT_CreateIndirect, "", GUI_ID_EDIT0, 50, 59, 100, 15, EDIT_CF_LEFT, 50 },
{ EDIT_CreateIndirect, "", GUI_ID_EDIT1, 50, 79, 100, 15, EDIT_CF_RIGHT, 50 },
{ EDIT_CreateIndirect, "", GUI_ID_EDIT2, 50, 99, 100, 15, EDIT_CF_RIGHT, 6 },
{ EDIT_CreateIndirect, "", GUI_ID_EDIT3, 50, 119, 100, 15, EDIT_CF_LEFT, 0 },
{ LISTBOX_CreateIndirect, "", GUI_ID_LISTBOX0, 5, 5, 75, 45, 0, 0 },
{ SLIDER_CreateIndirect, NULL, GUI_ID_SLIDER1, 5, 140, 100, 20, 0, 0 },
{ SLIDER_CreateIndirect, NULL, GUI_ID_SLIDER0, 5, 165, 145, 26, 0, 0 }
};
static const KEYSIM _aID[] = {
{ GUI_KEY_TAB, 400 },
{ GUI_KEY_TAB, 400 },
{ GUI_KEY_TAB, 400 },
{ GUI_KEY_TAB, 400 },
{ GUI_KEY_TAB, 400 },
{ GUI_KEY_TAB, 400 },
{ GUI_KEY_DOWN, 250 },
{ GUI_KEY_DOWN, 250 },
{ GUI_KEY_DOWN, 250 },
{ GUI_KEY_DOWN, 250 },
{ GUI_KEY_UP, 250 },
{ GUI_KEY_UP, 250 }
};
static const GUI_ConstString _apListBox[] = {
"English", "Deutsch", "Français", "Japanese", "Italiano", NULL
};
#elif !(GUIDEMO_TINY)
static const GUI_WIDGET_CREATE_INFO aDialogCreate[] = {
{ FRAMEWIN_CreateIndirect, "Dialog", 0, 10, 10, 132, 113, FRAMEWIN_CF_MOVEABLE},
{ BUTTON_CreateIndirect, "OK", GUI_ID_OK, 5, 5, 55, 20 },
{ BUTTON_CreateIndirect, "Cancel", GUI_ID_CANCEL, 65, 5, 55, 20 },
{ TEXT_CreateIndirect, "LText", 0, 5, 32, 33, 15, TEXT_CF_LEFT },
{ TEXT_CreateIndirect, "RText", 0, 5, 52, 33, 15, TEXT_CF_RIGHT },
{ EDIT_CreateIndirect, "", GUI_ID_EDIT0, 40, 32, 80, 15, EDIT_CF_LEFT, 50 },
{ EDIT_CreateIndirect, "", GUI_ID_EDIT1, 40, 52, 80, 15, EDIT_CF_RIGHT, 50 },
{ SLIDER_CreateIndirect, NULL, GUI_ID_SLIDER0, 5, 74, 116, 20, 0, 0 },
};
static const KEYSIM _aID[] = {
{ GUI_KEY_TAB, 400 },
{ GUI_KEY_TAB, 400 },
{ GUI_KEY_TAB, 400 },
{ GUI_KEY_TAB, 400 },
};
#else
static const GUI_WIDGET_CREATE_INFO aDialogCreate[] = {
{ FRAMEWIN_CreateIndirect, "Dialog", 0, 0, 0, 110, 84, FRAMEWIN_CF_MOVEABLE},
{ BUTTON_CreateIndirect, "OK", GUI_ID_OK, 4, 3, 95, 18 },
{ TEXT_CreateIndirect, "Text", 0, 5, 25, 28, 15, TEXT_CF_LEFT },
{ EDIT_CreateIndirect, "", GUI_ID_EDIT0, 30, 25, 69, 15, EDIT_CF_LEFT, 50 },
};
static const KEYSIM _aID[] = {
{ GUI_KEY_TAB, 400 },
{ GUI_KEY_TAB, 400 },
};
#endif
/*********************************************************************
*
* static code
*
**********************************************************************
*/
/*********************************************************************
*
* _cbCallback
*/
static void _cbCallback(WM_MESSAGE * pMsg) {
WM_HWIN hWin = pMsg->hWin;
#if GUIDEMO_LARGE
int NCode, Id;
#endif
switch (pMsg->MsgId) {
case WM_INIT_DIALOG:
/* Initialize all widgets */
#if GUIDEMO_TINY
EDIT_SetText(WM_GetDialogItem(hWin, GUI_ID_EDIT0), "EDIT");
#else
EDIT_SetText(WM_GetDialogItem(hWin, GUI_ID_EDIT0), "EDIT widget 0");
EDIT_SetText(WM_GetDialogItem(hWin, GUI_ID_EDIT1), "EDIT widget 1");
#endif
{
#if GUIDEMO_LARGE
WM_HWIN hListBox;
EDIT_SetHexMode(WM_GetDialogItem(hWin, GUI_ID_EDIT2), 0x1234, 0, 0xffffff);
EDIT_SetBinMode(WM_GetDialogItem(hWin, GUI_ID_EDIT3), 0x1234, 0, 0xffff);
hListBox = WM_GetDialogItem(hWin, GUI_ID_LISTBOX0);
LISTBOX_SetText(hListBox, _apListBox);
SCROLLBAR_CreateAttached(hListBox, SCROLLBAR_CF_VERTICAL);
#else
GUI_RECT Rect;
int x, y, ySize;
ySize = LCD_GetYSize();
if (ySize < 120) {
WM_ResizeWindow(hWin, 0, -24);
}
WM_GetWindowRectEx(hWin, &Rect);
x = (LCD_GetXSize() - (Rect.x1 - Rect.x0 + 1)) >> 1;
y = (ySize - (Rect.y1 - Rect.y0 + 1)) >> 1;
#if GUIDEMO_TINY
WM_MoveTo(hWin, x, y);
#else
WM_MoveTo(hWin, x, y - 4);
#endif
#endif
}
break;
case WM_KEY:
switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key) {
case GUI_KEY_ESCAPE:
GUI_EndDialog(hWin, 1);
break;
case GUI_KEY_ENTER:
GUI_EndDialog(hWin, 0);
break;
}
break;
#if GUIDEMO_LARGE
case WM_NOTIFY_PARENT:
Id = WM_GetId(pMsg->hWinSrc); /* Id of widget */
NCode = pMsg->Data.v; /* Notification code */
switch (NCode) {
case WM_NOTIFICATION_RELEASED: /* React only if released */
if (Id == GUI_ID_OK) { /* OK Button */
GUI_EndDialog(hWin, 0);
}
if (Id == GUI_ID_CANCEL) { /* Cancel Button */
GUI_EndDialog(hWin, 1);
}
break;
case WM_NOTIFICATION_SEL_CHANGED: /* Selection changed */
FRAMEWIN_SetText(hWin, "Dialog - sel changed");
break;
default:
FRAMEWIN_SetText(hWin, "Dialog - notification received");
}
break;
#endif
default:
WM_DefaultProc(pMsg);
}
}
/*********************************************************************
*
* public code
*
**********************************************************************
*/
/*********************************************************************
*
* GUIDEMO_Dialog
*/
void GUIDEMO_Dialog(void) {
int i;
WM_HWIN hWin;
GUI_COLOR DesktopColorOld;
GUIDEMO_ShowIntro("Dialog boxes", "\nDialog boxes\ncan easily be created");
GUIDEMO_HideInfoWin();
DesktopColorOld = GUIDEMO_SetBkColor(GUI_RED);
DesktopColorOld = WM_SetDesktopColor(DesktopColorOld); /* Automatically update desktop window */
hWin = GUI_CreateDialogBox(aDialogCreate, GUI_COUNTOF(aDialogCreate), _cbCallback, 0, 0, 0);
for (i = 0; i < GUI_COUNTOF(_aID); i++) {
GUIDEMO_Delay(_aID[i].Time);
GUI_SendKeyMsg(_aID[i].Id, 1);
}
#if !(GUIDEMO_TINY)
#if !(GUIDEMO_LARGE)
if (LCD_GetYSize() < 120) {
} else
#endif
{
GUIDEMO_Delay(1000);
for (i = 0; i <= 100; i += 10) {
if (WM_IsWindow(hWin)) {
SLIDER_SetValue(WM_GetDialogItem(hWin, GUI_ID_SLIDER0), i);
}
GUIDEMO_Delay(100);
}
}
#endif
GUIDEMO_Delay(800);
if (WM_IsWindow(hWin)) {
WM_MoveTo(hWin, 20, 20);
GUIDEMO_Delay(500);
}
if (WM_IsWindow(hWin)) {
WM_MoveTo(hWin, 60, 20);
GUIDEMO_Delay(800);
}
/* Cleanup ... */
if (WM_IsWindow(hWin)) {
WM_DeleteWindow(hWin);
}
GUIDEMO_NotifyStartNext();
WM_SetDesktopColor(DesktopColorOld); /* Restore old settings */
}
#else
void GUIDEMO_Dialog(void) {}
#endif /* GUI_SUPPORT_MEMDEV */
@@ -0,0 +1,128 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : GUIDEMO_DemoFrameWin.c
Purpose : Demonstrates the FRAMEWIN widget
----------------------------------------------------------------------
*/
#include <stddef.h>
#include "GUI.h"
#include "GUIDEMO.h"
#if GUI_WINSUPPORT
#include "WM.h"
#include "LISTBOX.h"
#include "FRAMEWIN.h"
/*********************************************************************
*
* defines
*
**********************************************************************
*/
#if GUIDEMO_LARGE
#define BORDER 10
#elif !(GUIDEMO_TINY)
#define BORDER 8
#else
#define BORDER 4
#endif
/*********************************************************************
*
* static data
*
**********************************************************************
*/
static const GUI_ConstString _asLang[] = {
"English",
"Deutsch",
"Français",
"Espa\xf1ol", /* "Español" -> "Espa\xf1ol" to avoid problems with NC308 */
"Italiano",
NULL
};
/*********************************************************************
*
* public code
*
**********************************************************************
*/
/*********************************************************************
*
* GUIDEMO_DemoFrameWin
*/
void GUIDEMO_DemoFrameWin(void) {
FRAMEWIN_Handle hFrame;
LISTBOX_Handle hListBox;
int xSize = LCD_GetXSize();
int ySize = LCD_GetYSize();
int i, x, y, w, h;
const GUI_FONT* pFont = &GUI_FontComic18B_1;
GUI_COLOR DesktopColorOld;
#if GUIDEMO_LARGE
GUIDEMO_ShowIntro("Frame Window & Listbox", NULL);
#else
GUIDEMO_ShowIntro("Frame Window\n & Listbox", NULL);
#endif
DesktopColorOld = GUIDEMO_SetBkColor(GUI_RED);
DesktopColorOld = WM_SetDesktopColor(DesktopColorOld); /* Automatically update desktop window */
x = BORDER;
#if GUIDEMO_LARGE
y = 75;
#else
y = BORDER;
#endif
w = xSize - x - BORDER;
h = ySize - y - BORDER;
if (w > 140) {
w = 140;
}
if (h > 120) {
h = 120;
}
hFrame = FRAMEWIN_Create("Select language", NULL, WM_CF_SHOW, x, y, w, h);
FRAMEWIN_SetActive(hFrame, 1);
FRAMEWIN_SetMoveable(hFrame, 1);
FRAMEWIN_AddMaxButton(hFrame, FRAMEWIN_BUTTON_RIGHT, 0);
FRAMEWIN_AddMinButton(hFrame, FRAMEWIN_BUTTON_RIGHT, 1);
FRAMEWIN_SetFont(hFrame, &GUI_Font13_ASCII);
hListBox = LISTBOX_CreateAsChild(_asLang, WM_GetClientWindow(hFrame), 0, 0, 0, 0, WM_CF_SHOW | WM_SF_ANCHOR_LEFT | WM_SF_ANCHOR_TOP | WM_SF_ANCHOR_RIGHT | WM_SF_ANCHOR_BOTTOM);
WM_SetFocus(hListBox);
LISTBOX_SetFont(hListBox, pFont);
GUIDEMO_Wait();
for (i = 0; (i < 10) && !GUIDEMO_CheckCancel(); i++) {
LISTBOX_IncSel(hListBox);
GUIDEMO_Delay(250);
}
for (i = 0; (i < 10) && !GUIDEMO_CheckCancel(); i++) {
LISTBOX_DecSel(hListBox);
GUIDEMO_Delay(250);
}
GUIDEMO_Delay(500);
LISTBOX_Delete(hListBox);
FRAMEWIN_Delete(hFrame);
WM_SetDesktopColor(DesktopColorOld);
}
#elif defined(NC30) || defined(NC308)
void GUIDEMO_FrameWin(void) {}
#endif
@@ -0,0 +1,377 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : GUIDEMO_Graph.c
Purpose : Several GUIDEMO routines
----------------------------------------------------------------------
*/
#include "GUI.h"
#include "LCD_ConfDefaults.h" /* valid LCD configuration */
#include <math.h>
#include <stdlib.h>
#include "GUIDEMO.h"
#if GUI_SUPPORT_MEMDEV
/*********************************************************************
*
* Structure containing information for drawing routine
*
**********************************************************************
*/
typedef struct {
I16 * aY;
} PARAM;
/*********************************************************************
*
* Defines
*
**********************************************************************
*/
#if GUIDEMO_LARGE
#define YSIZE (LCD_YSIZE - 100)
#else
#define YSIZE (LCD_YSIZE - 30)
#endif
#define DEG2RAD (3.1415926f / 180)
#if LCD_BITSPERPIXEL == 1
#define COLOR_GRAPH0 GUI_WHITE
#define COLOR_GRAPH1 GUI_WHITE
#else
#define COLOR_GRAPH0 GUI_GREEN
#define COLOR_GRAPH1 GUI_YELLOW
#endif
/*********************************************************************
*
* static data
*
**********************************************************************
*/
static int _YSize;
/*********************************************************************
*
* Draws the graph
*
**********************************************************************
*/
static void _Draw(void * p) {
int i;
PARAM * pParam = (PARAM *)p;
GUI_SetBkColor(GUI_BLACK);
GUI_SetColor(GUI_DARKGRAY);
GUI_ClearRect(19, (LCD_YSIZE - 20) - _YSize, (LCD_XSIZE - 2), (LCD_YSIZE - 21));
for (i = 0; i < (_YSize / 2); i += 20) {
GUI_DrawHLine((LCD_YSIZE - 20) - (_YSize / 2) + i, 19, (LCD_XSIZE - 2));
if (i) {
GUI_DrawHLine((LCD_YSIZE - 20) - (_YSize / 2) - i, 19, (LCD_XSIZE - 2));
}
}
for (i = 40; i < (LCD_XSIZE - 20); i += 40) {
GUI_DrawVLine(18 + i, (LCD_YSIZE - 20) - _YSize, (LCD_YSIZE - 21));
}
GUIDEMO_SetColor(COLOR_GRAPH0);
GUI_DrawGraph(pParam->aY, (LCD_XSIZE - 20), 19, (LCD_YSIZE - 20) - _YSize);
}
static void _Draw2(void * p) {
PARAM * pParam = (PARAM *)p;
_Draw(p);
GUI_SetColor(COLOR_GRAPH1);
GUI_DrawGraph(pParam->aY+15, (LCD_XSIZE - 20), 19, (LCD_YSIZE - 20) - _YSize);
}
/*********************************************************************
*
* Labels the x & y-axis
*
**********************************************************************
*/
static void _Label(void) {
int x, y;
GUI_SetPenSize(1);
GUI_ClearRect(0, (LCD_YSIZE - 21) - _YSize, (LCD_XSIZE - 1), (LCD_YSIZE - 1));
GUI_DrawRect(18, (LCD_YSIZE - 21) - _YSize, (LCD_XSIZE - 1), (LCD_YSIZE - 20));
GUI_SetFont(&GUI_Font6x8);
for (x = 0; x < (LCD_XSIZE - 20); x += 40) {
int xPos = x + 18;
GUI_DrawVLine(xPos, (LCD_YSIZE - 20), (LCD_YSIZE - 14));
GUI_DispDecAt(x / 40, xPos - 2, (LCD_YSIZE - 9), 1);
}
for (y = 0; y < _YSize / 2; y += 20) {
int yPos = (LCD_YSIZE - 20) - _YSize / 2 + y;
GUI_DrawHLine(yPos, 13, 18);
if (y) {
GUI_GotoXY(1, yPos - 4);
GUI_DispSDec(-y / 20, 2);
yPos = (LCD_YSIZE - 20) - _YSize / 2 - y;
GUI_DrawHLine(yPos, 13, 18);
GUI_GotoXY(1, yPos - 4);
GUI_DispSDec(y / 20, 2);
} else {
GUI_DispCharAt('0', 7, yPos - 4);
}
}
}
/*********************************************************************
*
* Draws random data
*
**********************************************************************
*/
static void _GetRandomData(I16 * paY, int Time, int n) {
int aDiff, i;
if (Time > 5000)
Time -= 5000;
if (Time > 2500)
Time = 5000 - Time;
Time /= 200;
aDiff = Time * Time + 1;
for (i = 0; i < n; i++) {
if (!i) {
paY[i] = rand() % _YSize;
} else {
int Rnd0, Rnd1, yD;
I16 yNew;
Rnd0 = rand();
yD = aDiff - (Rnd0 % aDiff);
Rnd1 = rand();
if (Rnd1 > Rnd0) {
yNew = paY[i-1] + yD;
} else {
yNew = paY[i-1] - yD;
}
if (yNew > _YSize) {
yNew -= yD;
} else { if (yNew < 0)
yNew += yD;
}
paY[i] = yNew;
}
}
}
static void _ShowText(const char * sText) {
GUIDEMO_SetColor(GUI_WHITE);
GUIDEMO_SetBkColor(GUI_RED);
#if GUIDEMO_LARGE
GUI_ClearRect(0, 0, LCD_XSIZE, 60);
GUI_SetFont(&GUI_FontComic18B_ASCII);
GUI_DispStringAt(sText, 10, 20);
#else
sText = sText; /* Avoid warning */
#endif
}
static void _LabelMS(void) {
GUI_SetFont(&GUI_Font6x8);
#if GUIDEMO_LARGE
GUI_DispStringAt("msec/graph:", 10, 50);
#endif
}
static void _DisplayTime(int tDiff) {
#if GUIDEMO_LARGE
GUI_GotoXY(80, 50);
GUIDEMO_SetColor(GUI_WHITE);
GUIDEMO_SetBkColor(GUI_RED);
GUI_DispDecSpace(tDiff, 3);
#else
tDiff = tDiff; /* Avoid warning */
#endif
}
static void _DemoRandomGraph(void) {
PARAM Param;
int tDiff, t0;
int Cnt = 0;
GUI_HMEM hMem;
GUI_RECT Rect;
Rect.x0 = 19;
Rect.y0 = (LCD_YSIZE - 20) - _YSize;
Rect.x1 = LCD_XSIZE - 2;
Rect.y1 = LCD_YSIZE - 21;
hMem = GUI_ALLOC_AllocZero((LCD_XSIZE - 20) * sizeof(I16));
_ShowText("Random graph");
GUI_LOCK();
Param.aY = (I16*)GUI_ALLOC_h2p(hMem);
GUI_UNLOCK(); /* Note: unlocking is permitted only if no further allocation is done so hMem stays valid */
/*
GUI_SetFont(&GUI_Font6x8);
GUI_DispStringAt("msec/graph:", 10, 50);
*/
_LabelMS();
t0 = GUI_GetTime();
while(((tDiff = (GUI_GetTime() - t0)) < 10000) && !GUIDEMO_CheckCancel()) {
U32 t1, tDiff2;
_GetRandomData(Param.aY, tDiff, (LCD_XSIZE - 20));
t1 = GUI_GetTime();
GUI_MEMDEV_Draw(&Rect, _Draw, &Param, 0, GUI_MEMDEV_NOTRANS);
tDiff2 = GUI_GetTime() - t1;
if (tDiff2 < 100) {
GUI_Delay(100 - tDiff2);
}
if(!((++Cnt)%10)) {
_DisplayTime(tDiff2);
/*
GUI_GotoXY(80, 50);
GUI_SetColor(GUI_WHITE);
GUI_SetBkColor(GUI_RED);
GUI_DispDecSpace(tDiff2, 3);
*/
}
}
GUI_ALLOC_Free(hMem);
}
/*********************************************************************
*
* Draws a sine wave
*
**********************************************************************
*/
static void _GetSineData(I16 * paY, int n) {
int i;
for (i = 0; i < n; i++) {
float s = sin(i * DEG2RAD * 4);
paY[i] = s * _YSize / 2 + _YSize / 2;
}
}
static void _DemoSineWave(void) {
PARAM Param;
I16 * pStart;
int t0, Cnt = 0;
GUI_HMEM hMem;
GUI_RECT Rect;
Rect.x0 = 19;
Rect.y0 = (LCD_YSIZE - 20) - _YSize;
Rect.x1 = LCD_XSIZE - 2;
Rect.y1 = LCD_YSIZE - 21;
hMem = GUI_ALLOC_AllocZero((LCD_XSIZE + 90) * sizeof(I16));
_ShowText("Sine wave");
GUI_LOCK();
pStart = (I16*)GUI_ALLOC_h2p(hMem);
GUI_UNLOCK(); /* Note: unlocking is permitted only if no further allocation is done so hMem stays valid */
_GetSineData(pStart, LCD_XSIZE + 90);
/*
GUI_SetFont(&GUI_Font6x8);
GUI_DispStringAt("msec/graph:", 10, 50);
*/
_LabelMS();
t0 = GUI_GetTime();
while(((GUI_GetTime() - t0) < 10000) && !GUIDEMO_CheckCancel()) {
U32 t1, tDiff2;
if (Cnt % 90) {
Param.aY++;
} else {
Param.aY = pStart;
}
t1 = GUI_GetTime();
GUI_MEMDEV_Draw(&Rect, _Draw2, &Param, 0, GUI_MEMDEV_NOTRANS);
tDiff2 = GUI_GetTime() - t1;
if (tDiff2 < 100) {
GUI_Delay(100 - tDiff2);
}
if(!((++Cnt) % 10)) {
_DisplayTime(tDiff2);
/*
GUI_GotoXY(80, 50);
GUI_SetColor(GUI_WHITE);
GUI_SetBkColor(GUI_RED);
GUI_DispDecSpace(tDiff2, 3);
*/
}
}
GUI_ALLOC_Free(hMem);
}
/*********************************************************************
*
* Adds several waves
*
**********************************************************************
*/
static void _DrawOrData(GUI_COLOR Color, I16 * paY) {
GUIDEMO_SetColor(Color);
GUI_DrawGraph(paY, (LCD_XSIZE - 20), 19, (LCD_YSIZE - 20) - _YSize);
}
static void _DemoOrData(void) {
int i;
PARAM Param;
GUI_RECT Rect;
GUI_HMEM hMem;
Rect.x0 = 19;
Rect.y0 = (LCD_YSIZE - 20) - _YSize;
Rect.x1 = LCD_XSIZE - 2;
Rect.y1 = LCD_YSIZE - 21;
hMem = GUI_ALLOC_AllocZero((LCD_XSIZE + 90) * sizeof(I16));
_ShowText("Several waves...");
GUI_LOCK();
Param.aY = (I16*)GUI_ALLOC_h2p(hMem);
GUI_UNLOCK();
_GetSineData(Param.aY, LCD_XSIZE + 90);
GUI_MEMDEV_Draw(&Rect, _Draw, &Param, 0, GUI_MEMDEV_NOTRANS);
for (i = 0; (i < 90) && !GUIDEMO_CheckCancel(); i++) {
_DrawOrData(GUI_GREEN, ++Param.aY);
GUI_Delay(10);
}
GUI_ALLOC_Free(hMem);
}
/*********************************************************************
*
* GUIDEMO_Graph
*
**********************************************************************
*/
void GUIDEMO_Graph(void) {
#if GUIDEMO_LARGE
_YSize = (LCD_YSIZE - 100);
#else
_YSize = (LCD_YSIZE - 30);
#endif
GUIDEMO_ShowIntro("Drawing a graph",
"\nOptimized drawing routine"
"\nfor drawing graph data");
GUI_Clear();
_Label();
_DemoRandomGraph();
GUIDEMO_NotifyStartNext();
_DemoSineWave();
GUIDEMO_NotifyStartNext();
_DemoOrData();
}
#elif defined(NC30) || defined(NC308)
void GUIDEMO_Graph(void) {}
#endif
@@ -0,0 +1,108 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* ľC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : GUIDEMO_HardwareInfo.c
Purpose : Displays hardware info
----------------------------------------------------------------------
*/
#include "GUI.h"
#include "GUIDEMO.h"
#include "LCD_ConfDefaults.h" /* valid LCD configuration */
/*********************************************************************
*
* Static functions
*
**********************************************************************
*/
#if (LCD_CONTROLLER == 1375) | (LCD_CONTROLLER == 13705) | (LCD_CONTROLLER == 1386) | (LCD_CONTROLLER == 13806)
static void _Show(const char* s0, const char* s1) {
GUIDEMO_SetColor(GUI_WHITE);
#if (LCD_YSIZE < 160)
GUI_SetFont(&GUI_Font8_ASCII);
#else
GUI_SetFont(&GUI_Font13B_ASCII);
#endif
GUI_DispString("\n");
#if (LCD_YSIZE < 128)
GUIDEMO_Delay(200);
GUI_GotoXY(0, LCD_YSIZE / 2 - 6);
GUI_ClearRect(0, 24, LCD_XSIZE - 1, LCD_YSIZE - 1);
GUIDEMO_Delay(200);
#endif
GUI_DispString(s0);
GUIDEMO_Delay(500);
#if GUIDEMO_LARGE
GUI_GotoX(110);
GUIDEMO_SetColor(GUI_GREEN);
#else
GUI_GotoX(100);
GUIDEMO_SetColor(GUI_BLUE);
#endif
#if (LCD_XSIZE < 320)
GUI_DispString("\n");
#if (LCD_XSIZE < 200)
GUI_GotoX(10);
#else
GUI_GotoX(LCD_XSIZE / 6);
#endif
#endif
GUI_DispString(s1);
GUIDEMO_Delay(1000);
}
#endif
/*********************************************************************
*
* GUIDEMO_HardwareInfo
*
**********************************************************************
*/
void GUIDEMO_HardwareInfo(void) {
#if (LCD_CONTROLLER == 1375) | (LCD_CONTROLLER == 13705) | (LCD_CONTROLLER == 1386) | (LCD_CONTROLLER == 13806)
GUIDEMO_ShowIntro("Hardware info", "" );
GUI_Clear();
#if GUIDEMO_LARGE
GUI_SetFont(&GUI_FontComic24B_ASCII);
#else
GUI_SetFont(&GUI_FontComic18B_ASCII);
#endif
GUIDEMO_SetColor(GUI_WHITE);
#if (LCD_CONTROLLER == 1375) | (LCD_CONTROLLER == 13705)
#if GUIDEMO_LARGE
GUI_DispStringAt("EPSON 13705\n", 10, 65 );
#else
GUI_DispStringHCenterAt("EPSON 13705\n", LCD_XSIZE >> 1, LCD_YSIZE / 14);
#endif
_Show("On chip VRAM", "80 kb");
_Show("Max. colors", "4096 (4 bit per color)");
_Show("Display types", "Mono / color / TFT");
_Show("LUT", "256 index colors");
#elif (LCD_CONTROLLER == 1386) | (LCD_CONTROLLER == 13806)
#if GUIDEMO_LARGE
GUI_DispStringAt("EPSON 13806\n", 10, 65 );
#else
GUI_DispStringHCenterAt("EPSON 13806\n", LCD_XSIZE >> 1, LCD_YSIZE / 14);
#endif
_Show("On chip VRAM", "1200 kb");
_Show("Max. colors", "65536 (up to 16 bpp)");
_Show("Display types", "Mono / color / TFT (analog / digital)");
_Show("LUT", "256 index colors");
#endif
GUIDEMO_Delay(1500);
#endif
}
@@ -0,0 +1,165 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : GUIDEMO_Intro.c
Purpose : Introduction for emWin generic demo
(This is also a good file to demo and explain basic
emWin features by setting breakpoints)
----------------------------------------------------------------------
*/
#include "GUI.h"
#include "GUIDEMO.h"
#include <string.h>
/*********************************************************************
*
* GUIDEMO_Intro
*
**********************************************************************
*/
#if GUIDEMO_LARGE
void GUIDEMO_Intro(void) {
int xCenter = LCD_XSIZE >> 1;
int y, yPos;
char acText[50] = "Version of emWin: ";
strcat(acText, GUI_GetVersionString());
GUIDEMO_SetBkColor(GUI_BLUE);
GUIDEMO_SetColor(GUI_WHITE);
GUI_Clear();
GUI_SetFont(&GUI_FontComic18B_ASCII);
GUI_DispStringHCenterAt("emWin", xCenter, y = 12);
GUI_SetFont(&GUI_Font13H_ASCII);
GUI_DispStringHCenterAt("Universal graphic software"
"\nfor embedded applications"
, xCenter, y += 23);
GUI_SetColor(GUI_RED);
GUI_SetFont(&GUI_Font16_ASCII);
GUI_DispStringHCenterAt("Any CPU - Any LCD - Any Application"
, xCenter, y += 32);
GUI_SetFont(&GUI_Font10S_ASCII);
GUI_DispStringHCenterAt("Compiled " __DATE__ " "__TIME__, xCenter, y += 18);
GUI_SetFont(&GUI_Font13HB_ASCII);
GUI_SetColor(GUI_WHITE);
GUI_DispStringHCenterAt(acText, xCenter, y += 15);
GUI_SetFont(&GUI_FontComic18B_ASCII);
GUI_SetColor(GUI_WHITE);
GUI_DispStringHCenterAt("www.segger.com", LCD_XSIZE >> 1, LCD_YSIZE - 20);
yPos = y + 15 + ((LCD_YSIZE - y - 33) >> 1);
yPos -= bmSeggerLogoBlue.YSize >> 1;
if (yPos > 160) {
yPos = 160;
}
GUI_DrawBitmap(&bmSeggerLogoBlue, (LCD_XSIZE - bmSeggerLogoBlue.XSize) >> 1, yPos);
#if (LCD_YSIZE >= 220)
GUI_SetFont(&GUI_Font10S_ASCII);
GUI_DispStringAt("GUI_OS: ", 0, LCD_YSIZE - 30); GUI_DispDecMin(GUI_OS);
GUI_DispStringAt("GUI_ALLOC_SIZE: ",0, LCD_YSIZE - 20); GUI_DispDecMin(GUI_ALLOC_SIZE);
GUI_DispStringAt("Compiler: "
#ifdef _MSC_VER
"Microsoft"
#elif defined (NC308)
"Mitsubishi NC308"
#elif defined (NC30)
"Mitsubishi NC30"
#elif defined (__TID__)
#if (((__TID__ >>8) &0x7f) == 48) /* IAR MC80 */
"IAR M32C"
#elif (((__TID__ >>8) &0x7f) == 85) /* IAR V850 */
"IAR V850"
#elif defined (__ICCARM__) /* IAR ARM */
"IAR ARM"
#else /* IAR MC16 */
"IAR M32C"
#endif
#elif defined __WATCOMC__ /* WATCOM */
"WATCOM"
#elif defined __GNUC__
"GNU"
#else
"Unknown"
#endif
,0, LCD_YSIZE - 10);
#endif
GUIDEMO_Delay(5000);
GUIDEMO_NotifyStartNext();
}
#else /* GUIDEMO_LARGE */
void GUIDEMO_Intro(void) {
#if GUIDEMO_TINY
char acText[20] = "Version: ";
#else
char acText[32] = "Version of emWin: ";
#endif
int xCenter, dy, y0 = 0;
xCenter = LCD_XSIZE >> 1;
#if (LCD_YSIZE < 72)
dy = 0;
#else
dy = ((LCD_YSIZE - 72) >> 3);
if (dy > 14) dy = 14;
#endif
strcat(acText, GUI_GetVersionString());
/* Clear the background */
GUIDEMO_SetBkColor(GUI_BLUE);
GUIDEMO_SetColor(GUI_WHITE);
GUI_Clear();
/* Display headline */
GUI_SetFont(&GUI_Font13B_ASCII);
GUI_DispStringHCenterAt("emWin", xCenter, dy + 1);
/* Display description */
#if (LCD_XSIZE < 140)
GUI_SetFont(&GUI_Font8_ASCII);
#else
GUI_SetFont(&GUI_Font10_ASCII);
#endif
GUI_DispStringHCenterAt("Universal graphic software\n"
"for embedded applications", xCenter, 2 * dy + 18);
/* Display compile time */
GUI_SetFont(&GUI_Font10S_ASCII);
GUI_DispStringHCenterAt("Compiled " __DATE__ " "__TIME__, xCenter, 3 * dy + 37);
/* Display version number */
#if (LCD_YSIZE < 80)
GUI_DispStringAt(acText, 6, LCD_YSIZE - 13);
#else
GUI_DispStringHCenterAt(acText, xCenter, 4 * dy + 49);
#endif
GUIDEMO_Delay(5000);
GUIDEMO_NotifyStartNext();
/* Show SEGGER logo */
GUI_Clear();
#if GUIDEMO_TINY
y0 = 2;
#endif
#if (LCD_YSIZE >= 90)
y0 += (LCD_YSIZE - 90) >> 1;
#endif
GUI_DrawBitmap(&bmSeggerLogoBlue, xCenter - (bmSeggerLogoBlue.XSize >> 1), y0);
/* Display URL */
#if (LCD_YSIZE < 80)
GUI_SetFont(&GUI_Font10_ASCII);
#else
GUI_SetFont(&GUI_Font13B_ASCII);
#endif
y0 += bmSeggerLogoBlue.YSize + 1;
GUI_DispStringHCenterAt("www.segger.com", xCenter, y0);
GUIDEMO_Delay(5000);
GUIDEMO_NotifyStartNext();
}
#endif
@@ -0,0 +1,82 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : GUIDEMO_Lut.c
Purpose : Modify lookup table
----------------------------------------------------------------------
*/
#include "GUI.h"
#include "GUIDEMO.h"
#include "LCD_ConfDefaults.h" /* valid LCD configuration */
#if (LCD_BITSPERPIXEL > 2) && (LCD_BITSPERPIXEL <= 8)
/*********************************************************************
*
* Static functions
*
**********************************************************************
*/
static void _ModifyLUT(int RFaktor, int GFaktor, int BFaktor) {
int NumColors = LCD_GetDevCap(LCD_DEVCAP_NUMCOLORS);
int i;
for (i = 0; (i < NumColors) && !GUIDEMO_CheckCancel(); i++) {
U32 Color = LCD_GetDevCap(LCD_DEVCAP_COLOR + i);
U32 R = Color & 0xff;
U32 G = (Color >> 8) & 0xff;
U32 B = (Color >> 16) & 0xff;
/* Now modify color */
R = (R * RFaktor) / 100; if (R > 255) R = 255;
G = (G * GFaktor) / 100; if (G > 255) G = 255;
B = (B * BFaktor) / 100; if (B > 255) B = 255;
/* Write modified color into lookup table */
Color = R | (G << 8) | (B << 16);
GUI_SetLUTEntry((U8)i, Color);
}
}
/*********************************************************************
*
* GUIDEMO_DemoLUT
*
**********************************************************************
*/
void GUIDEMO_DemoLUT(void) {
int i;
GUIDEMO_ShowIntro("Modify LUT", "... after drawing color bars");
GUIDEMO_ShowColorBar();
for (i = 100; (i >= 0) && !GUIDEMO_CheckCancel(); i -= 2) {
_ModifyLUT(100, 100, i);
GUI_Delay(20);
}
for (i = 100; (i >= 0) && !GUIDEMO_CheckCancel(); i -= 2) {
_ModifyLUT(100, i, 0);
GUI_Delay(20);
}
for (i = 100; (i >= 0) && !GUIDEMO_CheckCancel(); i -= 2) {
_ModifyLUT(i, i, i);
GUI_Delay(20);
}
LCD_InitLUT();
GUIDEMO_Wait();
}
#else
void GUIDEMO_DemoLUT(void) {}
#endif
@@ -0,0 +1,157 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : GUIDEMO_MemDevB.c
Purpose : Memory device demo
----------------------------------------------------------------------
*/
#include "GUI.h"
#include "GUIDEMO.h"
#if GUI_WINSUPPORT
#include "WM.h"
#endif
#include "stdio.h"
#if GUI_SUPPORT_MEMDEV
/*********************************************************************
*
* Static data
*
**********************************************************************
*/
static const GUI_POINT _aArrow[] = {
{ 0, 0 +85},
{-40, -35 +85},
{-10, -25 +85},
{-10, -85 +85},
{ 10, -85 +85},
{ 10, -25 +85},
{ 40, -35 +85}
};
/* Define the callback structure. The structure should contain all the data
required by the callback drawing funtion
*/
typedef struct {
int Angle;
int DoClear;
GUI_COLOR BkColor;
} tDrawContext;
/*********************************************************************
*
* Static functions
*
**********************************************************************
*/
/* The user defined callback routine */
static void _Draw(void * p) {
int XSize = LCD_GetXSize();
int YSize = LCD_GetYSize();
tDrawContext * pContext = (tDrawContext *)p;
int i = pContext->Angle;
static int iLast = -1;
static GUI_POINT aPoint[7];
if (pContext->DoClear) {
GUI_SetBkColor(pContext->BkColor);
GUI_Clear();
}
GUI_SetFont(&GUI_FontD24x32);
GUI_SetTextMode(GUI_TM_TRANS);
GUI_SetColor(GUI_GRAY);
GUI_SetFont(&GUI_FontComic18B_ASCII);
GUI_DispStringHCenterAt("Below arrow", XSize / 2, YSize / 2 - 20);
if (iLast != i) {
float Angle = 0.02 * (float)i;
iLast = i;
GUI_RotatePolygon(aPoint, _aArrow, 7, Angle);
}
GUI_SetColor(GUI_WHITE);
GUI_FillPolygon(&aPoint[0], 7, XSize / 2, YSize / 2 + 30);
GUI_SetTextMode(GUI_TM_TRANS);
GUI_SetColor(GUI_DARKGRAY);
GUI_SetFont(&GUI_FontComic18B_ASCII);
GUI_DispStringHCenterAt("Above arrow", XSize / 2, YSize / 2);
}
/*********************************************************************
*
* GUIDEMO_ShowMemoryDevice
*
**********************************************************************
*/
void GUIDEMO_ShowMemoryDevice(void) {
int i;
U32 tDiff, t0;
tDrawContext DrawContext;
GUI_RECT rView, rPrev, rTemp;
GUIDEMO_ShowIntro("Memory devices",
"\nFor flicker free animation"
"\nand other purposes");
GUIDEMO_NotifyStartNext();
GUI_SetBkColor(GUI_GREEN);
GUI_Clear();
/* Use banding memory device */
GUI_GetClientRect(&rView);
DrawContext.BkColor = GUI_ColorIsAvailable(GUI_RED) ? GUI_RED : GUI_BLACK;
GUI_SetBkColor(DrawContext.BkColor);
GUI_Clear();
t0 = GUI_GetTime();
for (i = 0; tDiff = GUI_GetTime() - t0, (tDiff < 8000) && !GUIDEMO_CheckCancel(); i++) {
U32 t = GUI_GetTime();
DrawContext.Angle = 90 + tDiff / 50;
/* Calculate required size */
{
GUI_HMEM hMem = GUI_MEASDEV_Create();
GUI_MEASDEV_Select(hMem);
DrawContext.DoClear = 0;
_Draw(&DrawContext);
GUI_MEASDEV_GetRect(hMem, &rView);
GUI_MEASDEV_Delete(hMem);
rTemp = rView;
if (i)
GUI_MergeRect(&rView, &rView, &rPrev);
rPrev = rTemp;
}
DrawContext.DoClear = 1;
GUI_MEMDEV_Draw(&rView, _Draw, &DrawContext, 0, GUI_MEMDEV_NOTRANS);
t = (GUI_GetTime() - t);
if (t < 20) {
GUI_Delay(20 -t);
}
}
GUI_SetFont(&GUI_FontComic24B_ASCII);
GUI_SetColor(GUI_WHITE);
GUI_SetBkColor(DrawContext.BkColor);
GUI_DispStringAt("ms/Update: ", 10 , 200);
if (i) {
GUI_DispDecMin(tDiff / i);
}
GUIDEMO_Delay(1000);
GUI_Clear();
}
#else
void GUIDEMO_ShowMemoryDevice(void) {}
#endif /* GUI_SUPPORT_MEMDEV */
@@ -0,0 +1,55 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : GUIDEMO_Messagebox.c
Purpose : Messagebox samples
----------------------------------------------------------------------
*/
#include <stddef.h> /* needed for definition of NULL */
#include "GUI.h"
#include "GUIDEMO.h"
#include "LCD_ConfDefaults.h"
#if GUI_WINSUPPORT
#include "WM.h"
#include "DIALOG.h"
/*********************************************************************
*
* GUIDEMO_Dialog
*
**********************************************************************
*/
void GUIDEMO_Messagebox(void) {
GUI_COLOR Color;
GUIDEMO_ShowIntro("Message boxes",
"Message boxes" "\ncan easily be created");
Color = WM_SetDesktopColor(GUI_RED);
GUI_MessageBox("Message", "Text", 0);
GUI_Delay(1000);
GUI_MessageBox("2. Message", "Text", 0);
GUI_Delay(1000);
WM_SetDesktopColor(Color);
GUIDEMO_NotifyStartNext();
}
#else
void GUIDEMO_Messagebox(void) {}
#endif /* GUI_SUPPORT_MEMDEV */
@@ -0,0 +1,190 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : GUIDEMO_Navi.c
Purpose : Navigation system demo
----------------------------------------------------------------------
*/
#include <math.h>
#include "GUI.h"
#include "GUIDEMO.h"
#if GUI_WINSUPPORT & GUI_SUPPORT_MEMDEV
#include "WM.h"
#include "FRAMEWIN.h"
#include "Map.h"
/*********************************************************************
*
* defines
*
**********************************************************************
*/
#if GUIDEMO_TINY
#define BORDER 0
#else
#define BORDER 8
#endif
/*********************************************************************
*
* static data
*
**********************************************************************
*/
static int _MapX = 0;
static int _MapY = 0;
static int _MapHereX = 90;
static int _MapHereY = 15;
/*********************************************************************
*
* static code
*
**********************************************************************
*/
/*********************************************************************
*
* _cbNaviWindow
*/
static void _cbNaviWindow(WM_MESSAGE* pMsg) {
switch (pMsg->MsgId) {
case WM_PAINT:
GUI_SetDrawMode(GUI_DRAWMODE_NORMAL);
GUI_SetTextMode(GUI_TM_TRANS);
GUI_SetFont(&GUI_FontComic18B_ASCII);
GUI_SetColor(0x0050FF);
GUI_DrawBitmap(&bmMap, -_MapX, -_MapY);
GUI_DrawCircle(_MapHereX - _MapX, _MapHereY - _MapY, 4);
GUI_DrawCircle(_MapHereX - _MapX, _MapHereY - _MapY, 5);
GUI_DispStringAt("You are here", _MapHereX - _MapX - 45, _MapHereY - _MapY - 22);
break;
default:
WM_DefaultProc(pMsg);
}
}
/*********************************************************************
*
* _NavigationDriveTo
*/
static void _NavigationDriveTo(WM_HWIN hWin, int x1, int y1) {
GUI_RECT Rect;
int x0 = _MapHereX;
int y0 = _MapHereY;
float dx = x1 - x0;
float dy = y1 - y0;
float Len = sqrt((dx * dx) + (dy * dy));
float sx = dx / Len;
float sy = dy / Len;
int i, tRef;
WM_GetClientRectEx(hWin, &Rect);
for (i = 1; (i <= Len) && !GUIDEMO_CheckCancel(); i += 2) {
tRef = GUI_GetTime();
_MapHereX = x0 + (i * sx);
_MapHereY = y0 + (i * sy);
_MapX = _MapHereX - (Rect.x1 >> 1);
_MapY = _MapHereY - (Rect.y1 >> 1);
if (_MapX < 0) {
_MapX = 0;
} else if ((_MapX + Rect.x1) >= bmMap.XSize) {
_MapX = bmMap.XSize - Rect.x1 - 1;
}
if (_MapY < 0) {
_MapY = 0;
} else if ((_MapY + Rect.y1) >= bmMap.YSize) {
_MapY = bmMap.YSize - Rect.y1 - 1;
}
WM_InvalidateWindow(hWin);
do {
GUI_Exec();
} while (((GUI_GetTime() - tRef) < 100) && !GUIDEMO_CheckCancel());
}
_MapHereX = x1;
_MapHereY = y1;
WM_InvalidateWindow(hWin);
}
/*********************************************************************
*
* _ShowMovingMap
*/
static void _ShowMovingMap(void) {
WM_HWIN hWin;
WM_HWIN hClient;
int i, x, y, w, h;
int xSize = LCD_GetXSize();
int ySize = LCD_GetYSize();
const GUI_POINT aRouteToSegger[] = {
{ 90, 15}, {131, 54}, {141, 62},
{166, 46}, {180, 40}, {204, 113},
{213, 156}, {217, 172}, {206, 173},
{205, 165}
};
#if GUIDEMO_LARGE
y = 70;
#else
y = BORDER;
#endif
x = BORDER;
w = xSize - x - BORDER;
h = ySize - y - BORDER;
if (w > bmMap.XSize) {
w = bmMap.XSize;
}
if (h > bmMap.YSize) {
h = bmMap.YSize;
}
/* Initialize starting point */
_MapHereX = aRouteToSegger[0].x;
_MapHereY = aRouteToSegger[0].y;
/* Create framewin */
hWin = FRAMEWIN_CreateEx(x, y, w, h, WM_HBKWIN, WM_CF_SHOW | WM_CF_MEMDEV, 0, 0, "Map to Segger (Hilden)", _cbNaviWindow);
FRAMEWIN_SetActive(hWin, 0);
hClient = WM_GetClientWindow(hWin);
WM_SetCallback(hClient, &_cbNaviWindow);
/* Move over map */
for (i = 1; (i < 10) && !GUIDEMO_CheckCancel(); i++) {
_NavigationDriveTo(hClient, aRouteToSegger[i].x, aRouteToSegger[i].y);
}
GUIDEMO_Delay(1000);
/* Delete framewin */
WM_DeleteWindow(hWin);
}
#else
#define _ShowMovingMap()
#endif
/*********************************************************************
*
* GUIDEMO_Navigation
*
**********************************************************************
*/
void GUIDEMO_Navigation(void) {
GUIDEMO_ShowIntro("Navigation system",
"\nSamples used in"
"\nNavigation systems");
_ShowMovingMap();
}
@@ -0,0 +1,147 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : GUIDEMO_Polygon.c
Purpose : Several GUIDEMO routines
----------------------------------------------------------------------
*/
#include "GUI.h"
#include "GUIDEMO.h"
#define COUNTOF(Obj) (sizeof(Obj)/sizeof(Obj[0]))
/*********************************************************************
*
* Static data
*
**********************************************************************
*/
static const GUI_POINT _aArrow[] = {
{ 0, 30 },
{-40, 0 },
{-10, 10 },
{-10, -50 },
{ 10, -50 },
{ 10, 10 },
{ 40, 0 }
};
static const GUI_POINT _aTriangle[] = {
{ 0, 0 },
{-30, 30 },
{ 30, 30 },
};
#if GUI_SUPPORT_AA
static const GUI_POINT _aiCursor[] = {
{ 0, -10 },
{ 50, 0 },
{ 0, -100 },
{-50, 0 }
};
#endif
/*********************************************************************
*
* static code
*
**********************************************************************
*/
/*********************************************************************
*
* _MagnifyPolygon
*/
#if ((LCD_XSIZE != 320) || (LCD_YSIZE != 240))
static void _MagnifyPolygon(GUI_POINT* pDest, const GUI_POINT* pSrc, int NumPoints, float Mag) {
int j;
for (j = 0; j < NumPoints; j++) {
(pDest + j)->x = (pSrc + j)->x * Mag;
(pDest + j)->y = (pSrc + j)->y * Mag;
}
}
#endif
/*********************************************************************
*
* public code
*
**********************************************************************
*/
/*********************************************************************
*
* GUIDEMO_DemoPolygon
*/
void GUIDEMO_DemoPolygon(void) {
GUI_COLOR Color;
int XMid = (LCD_XSIZE >> 1);
int YMid = (LCD_YSIZE >> 1);
GUIDEMO_ShowIntro("Arbitrary Polygons",
"\nStandard and antialiased");
GUI_SetColor(GUI_WHITE);
#if GUIDEMO_LARGE
GUI_SetFont(&GUI_FontComic18B_ASCII);
GUI_DispStringAt("Arbitrary\nPolygons", 0, 0);
YMid += 10;
#endif
#if ((LCD_XSIZE != 320) || (LCD_YSIZE != 240))
{
GUI_POINT aPolygon[8];
float Factor;
#if ((LCD_XSIZE / 320) < (LCD_YSIZE / 240))
Factor = LCD_XSIZE / 320.f;
#else
Factor = LCD_YSIZE / 240.f;
#endif
#if !(GUIDEMO_LARGE)
Factor *= 1.2f;
#endif
/* Draw arrows */
_MagnifyPolygon(aPolygon, _aArrow, COUNTOF(_aArrow), Factor);
GUI_FillPolygon(aPolygon, 7, XMid - (50 * Factor), YMid);
GUI_FillPolygon(aPolygon, 7, XMid + (50 * Factor), YMid);
/* Draw triangle */
_MagnifyPolygon(aPolygon, _aTriangle, COUNTOF(_aTriangle), Factor);
Color = GUIDEMO_SetColor(GUI_GREEN);
if (Color != GUI_GREEN) {
GUI_SetColor(GUI_YELLOW);
}
GUI_FillPolygon(aPolygon, 3, XMid, YMid + (10 * Factor));
/* Draw cursor */
#if GUI_SUPPORT_AA
GUI_SetColor(GUI_WHITE);
GUI_AA_EnableHiRes();
_MagnifyPolygon(aPolygon, _aiCursor, COUNTOF(_aiCursor), Factor);
GUI_AA_FillPolygon(aPolygon, 4, XMid * 3, (YMid - (10 * Factor)) * 3);
#endif
}
#else
GUI_FillPolygon(_aArrow, 7, XMid - 50, YMid);
GUI_FillPolygon(_aArrow, 7, XMid + 50, YMid);
/* Draw triangle */
Color = GUIDEMO_SetColor(GUI_GREEN);
if (Color != GUI_GREEN) {
GUI_SetColor(GUI_YELLOW);
}
GUI_FillPolygon(_aTriangle, 3, XMid, YMid + 10);
/* Draw cursor */
#if GUI_SUPPORT_AA
GUI_SetColor(GUI_WHITE);
GUI_AA_EnableHiRes();
GUI_AA_FillPolygon((GUI_POINT*)_aiCursor, 4, XMid * 3, (YMid - 10) * 3);
#endif
#endif
GUIDEMO_Wait();
}
@@ -0,0 +1,147 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : GUIDEMO_DemoProgBar.c
Purpose : Progress bar demo
----------------------------------------------------------------------
*/
#include "GUI.h"
#include "GUIDEMO.h"
#if GUI_WINSUPPORT
#include "PROGBAR.h"
/*********************************************************************
*
* GUIDEMO_DemoProgBar
*
**********************************************************************
*/
void GUIDEMO_DemoProgBar(void) {
PROGBAR_Handle ahProgBar[2];
int i, iRep;
int XMid = LCD_GetXSize() / 2;
int YMid = LCD_GetYSize() / 2;
#if GUIDEMO_LARGE
int MaxReps = 2;
int Length[2] = {110, 140};
int Height[2] = {20, 10};
int y0 = YMid - 40;
int dy = 10;
#elif !(GUIDEMO_TINY)
int MaxReps = 1;
int Length[2] = {100, 130};
int Height[2] = {18, 10};
int y0 = YMid - 38;
int dy = 9;
#else
int MaxReps = 1;
int Length[2] = {85, 115};
int Height[2] = {16, 8};
int y0 = YMid - 35;
int dy = 8;
#endif
if (YMid < 40) {
Height[0] = 14;
y0 = 1;
dy = 4;
}
GUIDEMO_ShowIntro("Widgets",
"\nProgressbars in"
"\nall variations");
GUI_Clear();
GUI_SetColor(GUI_WHITE);
GUI_SetFont(&GUI_Font8x16);
GUI_DispStringHCenterAt("Progress bar", XMid, y0);
/* Create `em */
ahProgBar[0] = PROGBAR_Create(XMid - Length[0] / 2,
YMid - Height[0],
Length[0],
Height[0],
WM_CF_SHOW);
ahProgBar[1] = PROGBAR_Create(XMid - Length[1] / 2,
YMid + dy,
Length[1],
Height[1],
WM_CF_SHOW);
/* Use memory device (optional, for better looks) */
#if GUI_SUPPORT_MEMDEV
PROGBAR_EnableMemdev(ahProgBar[0]);
PROGBAR_EnableMemdev(ahProgBar[1]);
#endif
GUIDEMO_Delay (800);
PROGBAR_SetMinMax(ahProgBar[1], 0, 500);
for (iRep = 0; iRep < MaxReps; iRep++) {
#if !(GUIDEMO_TINY)
PROGBAR_SetFont(ahProgBar[0], &GUI_Font8x16);
#endif
#if (LCD_BITSPERPIXEL == 2)
PROGBAR_SetBarColor(ahProgBar[0], 0, GUI_DARKGRAY);
PROGBAR_SetBarColor(ahProgBar[1], 0, GUI_DARKGRAY);
PROGBAR_SetBarColor(ahProgBar[0], 1, GUI_WHITE);
PROGBAR_SetBarColor(ahProgBar[1], 1, GUI_WHITE);
#elif (LCD_BITSPERPIXEL <= 4)
PROGBAR_SetBarColor(ahProgBar[0], 0, GUI_DARKGRAY);
PROGBAR_SetBarColor(ahProgBar[0], 1, GUI_LIGHTGRAY);
#else
PROGBAR_SetBarColor(ahProgBar[0], 0, GUI_GREEN);
PROGBAR_SetBarColor(ahProgBar[0], 1, GUI_RED);
#endif
for (i = 0; (i <= 100) && !GUIDEMO_CheckCancel(); i++) {
PROGBAR_SetValue(ahProgBar[0], i);
PROGBAR_SetValue(ahProgBar[1], i);
GUI_Delay(5);
}
PROGBAR_SetText(ahProgBar[0], "Tank empty");
for (; (i >= 0)&& !GUIDEMO_CheckCancel(); i--) {
PROGBAR_SetValue(ahProgBar[0], i);
PROGBAR_SetValue(ahProgBar[1], 200 - i);
GUI_Delay(5);
}
PROGBAR_SetText(ahProgBar[0], "Any text ...");
PROGBAR_SetTextAlign(ahProgBar[0], GUI_TA_LEFT);
for (; (i <= 100)&& !GUIDEMO_CheckCancel(); i++) {
PROGBAR_SetValue(ahProgBar[0], i);
PROGBAR_SetValue(ahProgBar[1], 200 + i);
GUI_Delay(5);
}
for (; (i >= 0)&& !GUIDEMO_CheckCancel(); i--) {
PROGBAR_SetValue(ahProgBar[0], i);
PROGBAR_SetValue(ahProgBar[1], 400 - i);
GUI_Delay(5);
}
PROGBAR_SetFont(ahProgBar[0], &GUI_FontComic18B_1);
PROGBAR_SetText(ahProgBar[0], "Any font ...");
for (; (i <= 100)&& !GUIDEMO_CheckCancel(); i++) {
PROGBAR_SetValue(ahProgBar[0], i);
PROGBAR_SetValue(ahProgBar[1], 400 + i);
GUI_Delay(5);
}
GUIDEMO_Delay(1000);
}
GUIDEMO_Delay(1000);
PROGBAR_Delete(ahProgBar[0]);
PROGBAR_Delete(ahProgBar[1]);
GUIDEMO_Delay(1000);
GUI_SetFont(&GUI_Font10S_ASCII);
}
#elif defined(NC30) || defined(NC308)
void GUIDEMO_ProgBar(void) {}
#endif /* GUI_WINSUPPORT */
@@ -0,0 +1,91 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : GUIDEMO_Speed.c
Purpose : Speed demo
----------------------------------------------------------------------
*/
#include <stdlib.h> /* for rand */
#include "GUI.h"
#include "GUIDEMO.h"
static const GUI_COLOR _aColor[8] = {
0x000000,
0x0000FF,
0x00FF00,
0x00FFFF,
0xFF0000,
0xFF00FF,
0xFFFF00,
0xFFFFFF
};
/*********************************************************************
*
* GUIDEMO_Speed
*
**********************************************************************
*/
void GUIDEMO_Speed(void) {
int t, i;
I32 NumPixels = 0;
U16 aColorIndex[8];
GUIDEMO_ShowIntro("High speed",
"\nmulti layer clipping"
"\nhighly optimized drivers"
);
for (i = 0; i< 8; i++) {
aColorIndex[i] = GUI_Color2Index(_aColor[i]);
}
t = GUI_GetTime();
for (i = 0; ((GUI_GetTime() - t) < 8000) && !GUIDEMO_CheckCancel(); i++) {
GUI_RECT r;
GUI_SetColorIndex(aColorIndex[i&7]);
/* Calculate random positions */
r.x0 = rand() % LCD_XSIZE - LCD_XSIZE / 2;
r.y0 = rand() % LCD_YSIZE - LCD_YSIZE / 2;
r.x1 = r.x0 + 20 + rand() % LCD_XSIZE;
r.y1 = r.y0 + 20 + rand() % LCD_YSIZE;
GUI_FillRect(r.x0, r.y0, r.x1, r.y1);
/* Clip rectangle to visible area and add the number of pixels (for speed computation) */
if (r.x1 >= LCD_XSIZE)
r.x1 = LCD_XSIZE - 1;
if (r.y1 >= LCD_YSIZE)
r.y1 = LCD_YSIZE - 1;
if (r.x0 < 0 )
r.x0 = 0;
if (r.y1 < 0)
r.y1 = 0;
NumPixels += (r.x1 - r.x0) * (r.y1 - r.y0);
/* Allow short breaks so we do not use all available CPU time ... */
}
t = (GUI_GetTime() - t) / 100;
GUI_Clear();
GUIDEMO_NotifyStartNext();
#if GUIDEMO_LARGE
GUI_SetFont(&GUI_FontComic24B_ASCII);
#elif !(GUIDEMO_TINY)
GUI_SetFont(&GUI_Font16B_ASCII);
#else
GUI_SetFont(&GUI_Font13B_ASCII);
#endif
GUI_SetColor(GUI_WHITE);
GUI_DispStringAt("Pixels/sec: ", 5, (LCD_YSIZE - GUI_GetFontSizeY()) / 2);
if (t == 0)
t++;
GUI_DispDecMin(10 * (NumPixels / t));
GUIDEMO_Wait();
}
@@ -0,0 +1,388 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : GUIDEMO_Touch
Purpose : Touch demo
---------------------------END-OF-HEADER------------------------------
*/
#include "GUI.h"
#include "LCD_ConfDefaults.h" /* valid LCD configuration */
#include "GUIDEMO.h"
#if (GUI_WINSUPPORT && GUI_SUPPORT_TOUCH)
#include "BUTTON.h"
#include "EDIT.h"
#define countof(Obj) (sizeof(Obj)/sizeof(Obj[0]))
/*********************************************************************
*
* Static functions
*
**********************************************************************
*/
static int _Log2Phys(int l, I32 l0, I32 l1, I32 p0, I32 p1) {
return p0 + ((p1 - p0) * (l - l0)) / (l1 - l0);
}
static void _Calibrate(int Coord, int Log0, int Log1, int Phys0, int Phys1, int *p0, int *p1) {
int l0 = 0;
int l1 = (Coord == GUI_COORD_X) ? LCD_XSIZE - 1 : LCD_YSIZE - 1;
*p0 = _Log2Phys(l0, Log0, Log1, Phys0, Phys1);
*p1 = _Log2Phys(l1, Log0, Log1, Phys0, Phys1);
}
/*********************************************************************
*
* _ExecCalibration
*
**********************************************************************
*/
static void _ExecCalibration(void) {
int ax_Phys[2],ay_Phys[2];
/* calculate log. Positions */
int ax[2] = { 15, LCD_XSIZE -1-15};
// const int ay[2] = { 15, LCD_YSIZE-1-15};
int ay[2] = { LCD_YSIZE-1-15, 15};
GUI_TOUCH_SetDefaultCalibration();
/* _Calibrate upper left */
GUI_SetBkColor(GUI_RED);
GUI_Clear();
GUI_SetColor(GUI_WHITE); GUI_FillCircle(ax[0], ay[0], 10);
GUI_SetColor(GUI_RED); GUI_FillCircle(ax[0], ay[0], 5);
GUI_SetColor(GUI_WHITE);
GUI_DispStringAt("Press here", ax[0]+20, ay[0]);
do {
GUI_PID_STATE State;
GUI_TOUCH_GetState(&State);
if (State.Pressed) {
ax_Phys[0] = GUI_TOUCH_GetxPhys();
ay_Phys[0] = GUI_TOUCH_GetyPhys();
break;
}
GUI_Delay (100);
} while (1);
/* Tell user to release */
GUI_Clear();
GUI_DispStringAt("OK", ax[0]+20, ay[0]);
do {
GUI_PID_STATE State;
GUI_TOUCH_GetState(&State);
if (State.Pressed == 0) {
break;
}
GUI_Delay (100);
} while (1);
/* _Calibrate lower right */
GUI_SetBkColor(GUI_RED);
GUI_Clear();
GUI_SetColor(GUI_WHITE); GUI_FillCircle(ax[1], ay[1], 10);
GUI_SetColor(GUI_RED); GUI_FillCircle(ax[1], ay[1], 5);
GUI_SetColor(GUI_WHITE);
GUI_SetTextAlign(GUI_TA_RIGHT);
GUI_DispStringAt("Press here", ax[1]-20, ay[1]);
do {
GUI_PID_STATE State;
GUI_TOUCH_GetState(&State);
if (State.Pressed) {
ax_Phys[1] = GUI_TOUCH_GetxPhys();
ay_Phys[1] = GUI_TOUCH_GetyPhys();
break;
}
GUI_Delay (100);
} while (1);
GUI_TOUCH_Calibrate(GUI_COORD_X, ax[0], ax[1], ax_Phys[0], ax_Phys[1]);
GUI_TOUCH_Calibrate(GUI_COORD_Y, ay[0], ay[1], ay_Phys[0], ay_Phys[1]);
{ /* calculate and display values for configuration file */
int x0, x1;
int y0, y1;
GUI_Clear();
_Calibrate(GUI_COORD_X, ax[0], ax[1], ax_Phys[0], ax_Phys[1], &x0, &x1);
_Calibrate(GUI_COORD_Y, ay[0], ay[1], ay_Phys[0], ay_Phys[1], &y0, &y1);
GUI_DispStringAt("x0: ", 0, 0); GUI_DispDec(x0, 4); GUI_DispNextLine();
GUI_DispString ("x1: "); GUI_DispDec(x1, 4); GUI_DispNextLine();
GUI_DispString ("y0: "); GUI_DispDec(y0, 4); GUI_DispNextLine();
GUI_DispString ("y1: "); GUI_DispDec(y1, 4); GUI_DispNextLine();
GUI_DispString ("Please touch display to continue...");
GUI_Delay(1000);
do {
GUI_PID_STATE State;
GUI_TOUCH_GetState(&State);
if (State.Pressed)
break;
GUI_Delay (10);
} while (1);
}
}
/*********************************************************************
*
* _TestCalibration
*
**********************************************************************
*/
static void _TestCalibration(void) {
int IdleCnt=0;
BUTTON_Handle hButton;
GUI_SetBkColor(GUI_RED);
GUI_SetColor(GUI_WHITE);
GUI_Clear();
hButton = BUTTON_Create( 225, 15, 80, 40, 1, BUTTON_CF_SHOW );
BUTTON_SetText (hButton, "ABORT");
BUTTON_SetFont (hButton, &GUI_FontComic18B_ASCII);
while ((IdleCnt<50) && (GUI_GetKey()==0)) {
static GUI_PID_STATE StateLast;
GUI_PID_STATE State;
GUI_TOUCH_GetState(&State);
if ((StateLast.Pressed != State.Pressed) && (State.Pressed == 0)) {
GUI_Clear();
}
if ((StateLast.x != State.x) || ((StateLast.y != State.y))) {
if (State.Pressed) {
GUI_FillCircle(State.x, State.y, 5);
}
StateLast = State;
}
if (State.Pressed) {
IdleCnt =0;
} else {
IdleCnt++;
}
GUI_Delay (100);
}
EDIT_Delete(hButton);
}
/*********************************************************************
*
* _ExecKeyboard
*
**********************************************************************
This creates a sample keyboard.
The routine returns after ENTER or ESC has been pressed.
*/
#if (LCD_XSIZE == 320) && (LCD_YSIZE == 240)
static char _acText[] = { '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '='
,0, 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P'
,0, 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Q'
,0, 'Z', 'X', 'C', 'V', 'B', 'N', 'M', 'Ö', 'Ä', 'Ü'
,' ', ' ', ' ', ' ', ' ', 0, 0
};
static int _ExecKeyboard(void) {
int i;
int Key;
BUTTON_Handle ahButton[52];
BUTTON_Handle hButtonESC;
EDIT_Handle hEdit;
GUI_RECT rText = {000,0, LCD_XSIZE, 20};
GUI_SetBkColor(GUI_RED);
GUI_Clear();
GUI_DrawBitmap(&bmSeggerLogoBlue, 0, 0);
GUI_SetFont(&GUI_FontComic18B_ASCII);
GUI_SetColor(GUI_WHITE);
GUI_DispStringInRect("emWin", &rText, GUI_TA_RIGHT | GUI_TA_VCENTER);
rText.y0 +=20;
rText.y1 +=20;
GUI_DispStringInRect("Touch screen demo", &rText, GUI_TA_RIGHT | GUI_TA_VCENTER);
/* Create Keyboard Buttons */
for (i=0; i< 51; i++) {
int Pos = (i < 47) ? i : i+4;
int x0 = 5 + 28*(Pos%11);
int y0 = 100 + 28*(Pos/11);
char c = _acText[i];
int Id = c ? c : 1;
char ac[2] = {0};
char *s= ac;
ac[0] = c;
ahButton[i] = BUTTON_Create( x0, y0, 25, 25, Id,BUTTON_CF_SHOW );
BUTTON_SetText (ahButton[i], s);
#if GUI_SUPPORT_MEMDEV
BUTTON_EnableMemdev(ahButton[i]);
#endif
}
ahButton[i] = BUTTON_Create( 89, 212, 109, 25, ' ',BUTTON_CF_SHOW );
hButtonESC = BUTTON_Create( 230, 40, 80, 25, GUI_ID_CANCEL,BUTTON_CF_SHOW );
BUTTON_SetText (hButtonESC, "ESC");
hEdit = EDIT_Create( 5, 70, 310, 25, ' ', 80, 0 );
EDIT_SetFont(hEdit, &GUI_Font8x16);
BUTTON_SetBkColor(ahButton[49], 0, GUI_RED);
BUTTON_SetBkColor(ahButton[50], 0, GUI_BLUE);
/* Handle Keyboard until ESC or ENTER is pressed */
do {
Key = GUIDEMO_WaitKey();
switch (Key) {
case 0:
case GUI_ID_CANCEL:
break;
default:
EDIT_AddKey(hEdit, Key);
}
} while ((Key != 'N') && (Key!=GUI_ID_CANCEL) && (Key!=0));
/* Cleanup */
for (i=0; i< countof(ahButton); i++) {
BUTTON_Delete(ahButton[i]);
}
BUTTON_Delete(hButtonESC);
EDIT_Delete(hEdit);
return Key;
}
#else
static char _acText[] = {
'7','8','9','/',
'4','5','6','*',
'1','2','3','-',
'0',',','+','=',0
};
static int _ExecKeyboard(void) {
int y0 = 75;
int XSize = LCD_GetXSize();
int YSize = LCD_GetYSize();
int XStep = XSize / 4;
int YStep = (YSize - y0) / 4;
int i;
int Key;
BUTTON_Handle ahButton[16];
BUTTON_Handle hButtonESC;
EDIT_Handle hEdit;
GUI_RECT rText = {0};
rText.x1 = LCD_GetXSize() - 3;
rText.y1 = 20;
GUI_SetBkColor(GUI_RED);
GUI_Clear();
GUI_SetFont(&GUI_FontComic18B_ASCII);
GUI_SetColor(GUI_WHITE);
GUI_DispStringInRect("emWin", &rText, GUI_TA_RIGHT | GUI_TA_VCENTER);
rText.y0 +=20;
rText.y1 +=20;
GUI_DispStringInRect("Touch screen demo", &rText, GUI_TA_RIGHT | GUI_TA_VCENTER);
/* Create Keyboard Buttons */
for (i=0; _acText[i]; i++) {
int XPos = (i%4) * XStep + 3;
int YPos = (i/4) * YStep + 3 + y0;
char c = _acText[i];
int Id = c ? c : 1;
char ac[2] = {0};
char *s= ac;
ac[0] = c;
ahButton[i] = BUTTON_Create( XPos, YPos, XStep - 5, YStep - 5, Id, BUTTON_CF_SHOW );
BUTTON_SetText(ahButton[i], s);
BUTTON_EnableMemdev(ahButton[i]);
}
hButtonESC = BUTTON_Create( 3, 3, 80, 25, GUI_ID_CANCEL, BUTTON_CF_SHOW );
BUTTON_SetText(hButtonESC, "ESC");
hEdit = EDIT_Create( 5, y0 - 30, XSize - 10, 25, ' ', 80, 0 );
EDIT_SetFont(hEdit, &GUI_Font8x16);
/* Handle Keyboard until ESC or ENTER is pressed */
do {
Key = GUIDEMO_WaitKey();
switch (Key) {
case 0:
case GUI_ID_CANCEL:
break;
default:
EDIT_AddKey(hEdit, Key);
}
} while ((Key != 'N') && (Key!=GUI_ID_CANCEL) && (Key!=0));
/* Cleanup */
for (i=0; i< countof(ahButton); i++) {
BUTTON_Delete(ahButton[i]);
}
BUTTON_Delete(hButtonESC);
EDIT_Delete(hEdit);
return Key;
}
#endif
/*
**********************************************************************
*
* USER_Task
*
**********************************************************************
*/
#if GUIDEMO_LARGE
void GUIDEMO_Touch(void) {
#define ID_KEYBOARD 1
#define ID_TESTCAL 2
#define ID_CALIBRATE 3
int i, r;
int XSize = LCD_GetXSize();
int YSize = LCD_GetYSize();
int XMid = XSize / 2;
int YMid = YSize / 2;
GUIDEMO_NotifyStartNext();
GUIDEMO_HideInfoWin();
do {
GUI_RECT rText;/*= {0, 80, XSize, 120};*/
BUTTON_Handle ahButton[3];
rText.x0=0;
rText.y0=80;
rText.x1=XSize;
rText.y1=120;
GUI_SetBkColor(GUI_BLUE);
GUI_Clear();
GUI_DrawBitmap(&bmSeggerLogoBlue, (XSize - 1 - bmSeggerLogoBlue.XSize) / 2, 15);
GUI_SetFont(&GUI_FontComic18B_ASCII);
GUI_DispStringInRect("emWin Touch screen demo", &rText, GUI_TA_HCENTER | GUI_TA_VCENTER);
ahButton[0] = BUTTON_Create( XMid - 50, YMid - 20, 100, 50, ID_CALIBRATE,BUTTON_CF_SHOW );
ahButton[1] = BUTTON_Create( XMid - 90, YMid + 40, 80, 30, ID_KEYBOARD, BUTTON_CF_SHOW );
ahButton[2] = BUTTON_Create( XMid + 10, YMid + 40, 80, 30, ID_TESTCAL,BUTTON_CF_SHOW );
BUTTON_SetText (ahButton[0], "Calibrate");
BUTTON_SetBkColor(ahButton[0], 0, GUI_RED);
BUTTON_SetText (ahButton[1], "Keyboard");
BUTTON_SetText (ahButton[2], "Test calibration");
BUTTON_SetFont(ahButton[0], &GUI_FontComic18B_ASCII);
r = GUIDEMO_WaitKey();
if (r==0) {
r = ID_KEYBOARD;
BUTTON_SetState(ahButton[1], BUTTON_STATE_PRESSED);
GUIDEMO_Delay(500);
}
for (i=0; i< countof(ahButton); i++) {
BUTTON_Delete(ahButton[i]);
}
switch (r) {
case ID_KEYBOARD: r= _ExecKeyboard(); break;
case ID_CALIBRATE: _ExecCalibration(); break;
case ID_TESTCAL: _TestCalibration(); break;
}
} while (r && (r!='n') && (r!='N'));
}
#else
void GUIDEMO_Touch(void) {}
#endif
#else
void GUIDEMO_Touch(void) {} /* avoid empty object files */
#endif /* #if GUI_WINSUPPORT */
@@ -0,0 +1,28 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : MainTask.c
Purpose : Init GUI & call of GUI-demo
--------------------END-OF-HEADER-------------------------------------
*/
#include "GUI.h"
#include "GUIDEMO.h"
void MainTask(void) {
GUI_Init();
while(1) {
GUIDEMO_main();
}
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,907 @@
/*
C-file generated by Bitmap converter for emWin GSC V2.30b, compiled May 8 2002, 10:05:14
Copyright (C) 1998-2002
Segger Microcontroller Systeme GmbH
www.segger.com
Solutions for real time microcontroller applications
Source file: SeggerLogo
Dimensions: 138 * 65
NumColors: 6
*/
#include "stdlib.h"
#include "GUI.h"
#include "GUIDEMO.h"
#ifndef GUI_CONST_STORAGE
#define GUI_CONST_STORAGE const
#endif
extern const GUI_BITMAP bmSeggerLogoBlue;
/*********************************************************************
*
* colors (SEGGER logo)
*
**********************************************************************
*/
GUI_CONST_STORAGE GUI_COLOR ColorsSeggerLogoBlue[] = {
0x0000FF,0x000000,0x888888,0xFFFFFF
,0xFF0000,0xBBBBBB
};
GUI_CONST_STORAGE GUI_LOGPALETTE PalSeggerLogoBlue = {
6, /* number of entries */
1, /* Has transparency */
&ColorsSeggerLogoBlue[0]
};
#if !(GUIDEMO_TINY)
/*********************************************************************
*
* SEGGER logo, 100% size
*
**********************************************************************
*/
#ifdef LOGO_COMP
GUI_CONST_STORAGE unsigned char acSeggerLogoBlue[] = {
/* RLE: 141 Pixels @ 000,000*/ 141, 0x00,
/* RLE: 132 Pixels @ 003,001*/ 132, 0x01,
/* RLE: 005 Pixels @ 135,001*/ 5, 0x00,
/* RLE: 134 Pixels @ 002,002*/ 134, 0x01,
/* RLE: 003 Pixels @ 136,002*/ 3, 0x00,
/* RLE: 004 Pixels @ 001,003*/ 4, 0x01,
/* RLE: 128 Pixels @ 005,003*/ 128, 0x02,
/* RLE: 004 Pixels @ 133,003*/ 4, 0x01,
/* ABS: 005 Pixels @ 137,003*/ 0, 5, 0x00, 0x11, 0x10,
/* RLE: 130 Pixels @ 004,004*/ 130, 0x03,
/* RLE: 003 Pixels @ 134,004*/ 3, 0x01,
/* ABS: 005 Pixels @ 137,004*/ 0, 5, 0x00, 0x11, 0x20,
/* RLE: 130 Pixels @ 004,005*/ 130, 0x03,
/* RLE: 003 Pixels @ 134,005*/ 3, 0x01,
/* ABS: 005 Pixels @ 137,005*/ 0, 5, 0x00, 0x11, 0x20,
/* RLE: 130 Pixels @ 004,006*/ 130, 0x03,
/* ABS: 008 Pixels @ 134,006*/ 0, 8, 0x21, 0x10, 0x01, 0x12,
/* RLE: 130 Pixels @ 004,007*/ 130, 0x03,
/* ABS: 008 Pixels @ 134,007*/ 0, 8, 0x21, 0x10, 0x01, 0x12,
/* RLE: 004 Pixels @ 004,008*/ 4, 0x03,
/* RLE: 004 Pixels @ 008,008*/ 4, 0x04,
/* RLE: 010 Pixels @ 012,008*/ 10, 0x03,
/* RLE: 004 Pixels @ 022,008*/ 4, 0x04,
/* RLE: 108 Pixels @ 026,008*/ 108, 0x03,
/* ABS: 008 Pixels @ 134,008*/ 0, 8, 0x21, 0x10, 0x01, 0x12,
/* RLE: 004 Pixels @ 004,009*/ 4, 0x03,
/* RLE: 004 Pixels @ 008,009*/ 4, 0x04,
/* RLE: 010 Pixels @ 012,009*/ 10, 0x03,
/* RLE: 004 Pixels @ 022,009*/ 4, 0x04,
/* RLE: 108 Pixels @ 026,009*/ 108, 0x03,
/* ABS: 008 Pixels @ 134,009*/ 0, 8, 0x21, 0x10, 0x01, 0x12,
/* RLE: 004 Pixels @ 004,010*/ 4, 0x03,
/* RLE: 005 Pixels @ 008,010*/ 5, 0x04,
/* RLE: 001 Pixels @ 013,010*/ 1, 0x05,
/* RLE: 008 Pixels @ 014,010*/ 8, 0x03,
/* RLE: 005 Pixels @ 022,010*/ 5, 0x04,
/* RLE: 001 Pixels @ 027,010*/ 1, 0x05,
/* RLE: 106 Pixels @ 028,010*/ 106, 0x03,
/* ABS: 008 Pixels @ 134,010*/ 0, 8, 0x21, 0x10, 0x01, 0x12,
/* RLE: 004 Pixels @ 004,011*/ 4, 0x03,
/* RLE: 006 Pixels @ 008,011*/ 6, 0x04,
/* RLE: 008 Pixels @ 014,011*/ 8, 0x03,
/* RLE: 006 Pixels @ 022,011*/ 6, 0x04,
/* RLE: 106 Pixels @ 028,011*/ 106, 0x03,
/* ABS: 008 Pixels @ 134,011*/ 0, 8, 0x21, 0x10, 0x01, 0x12,
/* RLE: 005 Pixels @ 004,012*/ 5, 0x03,
/* RLE: 006 Pixels @ 009,012*/ 6, 0x04,
/* RLE: 008 Pixels @ 015,012*/ 8, 0x03,
/* RLE: 006 Pixels @ 023,012*/ 6, 0x04,
/* RLE: 105 Pixels @ 029,012*/ 105, 0x03,
/* ABS: 008 Pixels @ 134,012*/ 0, 8, 0x21, 0x10, 0x01, 0x12,
/* RLE: 006 Pixels @ 004,013*/ 6, 0x03,
/* RLE: 005 Pixels @ 010,013*/ 5, 0x04,
/* RLE: 001 Pixels @ 015,013*/ 1, 0x05,
/* RLE: 007 Pixels @ 016,013*/ 7, 0x03,
/* RLE: 001 Pixels @ 023,013*/ 1, 0x05,
/* RLE: 005 Pixels @ 024,013*/ 5, 0x04,
/* RLE: 001 Pixels @ 029,013*/ 1, 0x05,
/* RLE: 104 Pixels @ 030,013*/ 104, 0x03,
/* ABS: 008 Pixels @ 134,013*/ 0, 8, 0x21, 0x10, 0x01, 0x12,
/* RLE: 006 Pixels @ 004,014*/ 6, 0x03,
/* RLE: 001 Pixels @ 010,014*/ 1, 0x05,
/* RLE: 005 Pixels @ 011,014*/ 5, 0x04,
/* RLE: 001 Pixels @ 016,014*/ 1, 0x05,
/* RLE: 007 Pixels @ 017,014*/ 7, 0x03,
/* RLE: 006 Pixels @ 024,014*/ 6, 0x04,
/* RLE: 104 Pixels @ 030,014*/ 104, 0x03,
/* ABS: 008 Pixels @ 134,014*/ 0, 8, 0x21, 0x10, 0x01, 0x12,
/* RLE: 007 Pixels @ 004,015*/ 7, 0x03,
/* RLE: 001 Pixels @ 011,015*/ 1, 0x05,
/* RLE: 005 Pixels @ 012,015*/ 5, 0x04,
/* RLE: 008 Pixels @ 017,015*/ 8, 0x03,
/* RLE: 006 Pixels @ 025,015*/ 6, 0x04,
/* RLE: 103 Pixels @ 031,015*/ 103, 0x03,
/* ABS: 008 Pixels @ 134,015*/ 0, 8, 0x21, 0x10, 0x01, 0x12,
/* RLE: 008 Pixels @ 004,016*/ 8, 0x03,
/* RLE: 006 Pixels @ 012,016*/ 6, 0x04,
/* RLE: 008 Pixels @ 018,016*/ 8, 0x03,
/* RLE: 005 Pixels @ 026,016*/ 5, 0x04,
/* RLE: 001 Pixels @ 031,016*/ 1, 0x05,
/* RLE: 102 Pixels @ 032,016*/ 102, 0x03,
/* ABS: 008 Pixels @ 134,016*/ 0, 8, 0x21, 0x10, 0x01, 0x12,
/* RLE: 009 Pixels @ 004,017*/ 9, 0x03,
/* RLE: 006 Pixels @ 013,017*/ 6, 0x04,
/* RLE: 007 Pixels @ 019,017*/ 7, 0x03,
/* RLE: 001 Pixels @ 026,017*/ 1, 0x05,
/* RLE: 005 Pixels @ 027,017*/ 5, 0x04,
/* RLE: 001 Pixels @ 032,017*/ 1, 0x05,
/* RLE: 101 Pixels @ 033,017*/ 101, 0x03,
/* ABS: 008 Pixels @ 134,017*/ 0, 8, 0x21, 0x10, 0x01, 0x12,
/* RLE: 009 Pixels @ 004,018*/ 9, 0x03,
/* RLE: 001 Pixels @ 013,018*/ 1, 0x05,
/* RLE: 005 Pixels @ 014,018*/ 5, 0x04,
/* RLE: 001 Pixels @ 019,018*/ 1, 0x05,
/* RLE: 007 Pixels @ 020,018*/ 7, 0x03,
/* RLE: 006 Pixels @ 027,018*/ 6, 0x04,
/* RLE: 101 Pixels @ 033,018*/ 101, 0x03,
/* ABS: 008 Pixels @ 134,018*/ 0, 8, 0x21, 0x10, 0x01, 0x12,
/* RLE: 010 Pixels @ 004,019*/ 10, 0x03,
/* RLE: 001 Pixels @ 014,019*/ 1, 0x05,
/* RLE: 005 Pixels @ 015,019*/ 5, 0x04,
/* RLE: 008 Pixels @ 020,019*/ 8, 0x03,
/* RLE: 006 Pixels @ 028,019*/ 6, 0x04,
/* RLE: 100 Pixels @ 034,019*/ 100, 0x03,
/* ABS: 008 Pixels @ 134,019*/ 0, 8, 0x21, 0x10, 0x01, 0x12,
/* RLE: 011 Pixels @ 004,020*/ 11, 0x03,
/* RLE: 006 Pixels @ 015,020*/ 6, 0x04,
/* RLE: 008 Pixels @ 021,020*/ 8, 0x03,
/* RLE: 005 Pixels @ 029,020*/ 5, 0x04,
/* RLE: 001 Pixels @ 034,020*/ 1, 0x05,
/* RLE: 099 Pixels @ 035,020*/ 99, 0x03,
/* ABS: 012 Pixels @ 134,020*/ 0, 12, 0x21, 0x10, 0x01, 0x12, 0x33, 0x34,
/* RLE: 008 Pixels @ 008,021*/ 8, 0x03,
/* RLE: 006 Pixels @ 016,021*/ 6, 0x04,
/* RLE: 007 Pixels @ 022,021*/ 7, 0x03,
/* RLE: 001 Pixels @ 029,021*/ 1, 0x05,
/* RLE: 005 Pixels @ 030,021*/ 5, 0x04,
/* RLE: 099 Pixels @ 035,021*/ 99, 0x03,
/* ABS: 013 Pixels @ 134,021*/ 0, 13, 0x21, 0x10, 0x01, 0x12, 0x33, 0x34, 0x40,
/* RLE: 007 Pixels @ 009,022*/ 7, 0x03,
/* RLE: 001 Pixels @ 016,022*/ 1, 0x05,
/* RLE: 005 Pixels @ 017,022*/ 5, 0x04,
/* RLE: 001 Pixels @ 022,022*/ 1, 0x05,
/* RLE: 007 Pixels @ 023,022*/ 7, 0x03,
/* RLE: 006 Pixels @ 030,022*/ 6, 0x04,
/* RLE: 098 Pixels @ 036,022*/ 98, 0x03,
/* ABS: 014 Pixels @ 134,022*/ 0, 14, 0x21, 0x10, 0x01, 0x12, 0x33, 0x34, 0x44,
/* RLE: 007 Pixels @ 010,023*/ 7, 0x03,
/* RLE: 006 Pixels @ 017,023*/ 6, 0x04,
/* RLE: 008 Pixels @ 023,023*/ 8, 0x03,
/* RLE: 005 Pixels @ 031,023*/ 5, 0x04,
/* RLE: 001 Pixels @ 036,023*/ 1, 0x05,
/* RLE: 097 Pixels @ 037,023*/ 97, 0x03,
/* ABS: 015 Pixels @ 134,023*/ 0, 15, 0x21, 0x10, 0x01, 0x12, 0x33, 0x34, 0x44, 0x50,
/* RLE: 007 Pixels @ 011,024*/ 7, 0x03,
/* RLE: 006 Pixels @ 018,024*/ 6, 0x04,
/* RLE: 007 Pixels @ 024,024*/ 7, 0x03,
/* RLE: 001 Pixels @ 031,024*/ 1, 0x05,
/* RLE: 005 Pixels @ 032,024*/ 5, 0x04,
/* RLE: 001 Pixels @ 037,024*/ 1, 0x05,
/* RLE: 096 Pixels @ 038,024*/ 96, 0x03,
/* ABS: 011 Pixels @ 134,024*/ 0, 11, 0x21, 0x10, 0x01, 0x12, 0x33, 0x30,
/* RLE: 004 Pixels @ 007,025*/ 4, 0x04,
/* RLE: 008 Pixels @ 011,025*/ 8, 0x03,
/* RLE: 006 Pixels @ 019,025*/ 6, 0x04,
/* RLE: 007 Pixels @ 025,025*/ 7, 0x03,
/* RLE: 001 Pixels @ 032,025*/ 1, 0x05,
/* RLE: 005 Pixels @ 033,025*/ 5, 0x04,
/* RLE: 096 Pixels @ 038,025*/ 96, 0x03,
/* ABS: 011 Pixels @ 134,025*/ 0, 11, 0x21, 0x10, 0x01, 0x12, 0x33, 0x30,
/* RLE: 005 Pixels @ 007,026*/ 5, 0x04,
/* RLE: 007 Pixels @ 012,026*/ 7, 0x03,
/* RLE: 001 Pixels @ 019,026*/ 1, 0x05,
/* RLE: 005 Pixels @ 020,026*/ 5, 0x04,
/* RLE: 001 Pixels @ 025,026*/ 1, 0x05,
/* RLE: 007 Pixels @ 026,026*/ 7, 0x03,
/* RLE: 006 Pixels @ 033,026*/ 6, 0x04,
/* RLE: 095 Pixels @ 039,026*/ 95, 0x03,
/* ABS: 011 Pixels @ 134,026*/ 0, 11, 0x21, 0x10, 0x01, 0x12, 0x33, 0x30,
/* RLE: 006 Pixels @ 007,027*/ 6, 0x04,
/* RLE: 007 Pixels @ 013,027*/ 7, 0x03,
/* RLE: 001 Pixels @ 020,027*/ 1, 0x05,
/* RLE: 005 Pixels @ 021,027*/ 5, 0x04,
/* RLE: 008 Pixels @ 026,027*/ 8, 0x03,
/* RLE: 095 Pixels @ 034,027*/ 95, 0x04,
/* RLE: 005 Pixels @ 129,027*/ 5, 0x03,
/* ABS: 011 Pixels @ 134,027*/ 0, 11, 0x21, 0x10, 0x01, 0x12, 0x33, 0x30,
/* RLE: 006 Pixels @ 007,028*/ 6, 0x04,
/* RLE: 001 Pixels @ 013,028*/ 1, 0x05,
/* RLE: 007 Pixels @ 014,028*/ 7, 0x03,
/* RLE: 006 Pixels @ 021,028*/ 6, 0x04,
/* RLE: 007 Pixels @ 027,028*/ 7, 0x03,
/* RLE: 001 Pixels @ 034,028*/ 1, 0x05,
/* RLE: 095 Pixels @ 035,028*/ 95, 0x04,
/* RLE: 004 Pixels @ 130,028*/ 4, 0x03,
/* ABS: 011 Pixels @ 134,028*/ 0, 11, 0x21, 0x10, 0x01, 0x12, 0x33, 0x30,
/* RLE: 007 Pixels @ 007,029*/ 7, 0x04,
/* RLE: 008 Pixels @ 014,029*/ 8, 0x03,
/* RLE: 006 Pixels @ 022,029*/ 6, 0x04,
/* RLE: 007 Pixels @ 028,029*/ 7, 0x03,
/* RLE: 095 Pixels @ 035,029*/ 95, 0x04,
/* RLE: 004 Pixels @ 130,029*/ 4, 0x03,
/* ABS: 011 Pixels @ 134,029*/ 0, 11, 0x21, 0x10, 0x01, 0x12, 0x33, 0x30,
/* RLE: 008 Pixels @ 007,030*/ 8, 0x04,
/* RLE: 007 Pixels @ 015,030*/ 7, 0x03,
/* RLE: 001 Pixels @ 022,030*/ 1, 0x05,
/* RLE: 005 Pixels @ 023,030*/ 5, 0x04,
/* RLE: 001 Pixels @ 028,030*/ 1, 0x05,
/* RLE: 007 Pixels @ 029,030*/ 7, 0x03,
/* RLE: 094 Pixels @ 036,030*/ 94, 0x04,
/* RLE: 004 Pixels @ 130,030*/ 4, 0x03,
/* ABS: 011 Pixels @ 134,030*/ 0, 11, 0x21, 0x10, 0x01, 0x12, 0x33, 0x30,
/* RLE: 009 Pixels @ 007,031*/ 9, 0x04,
/* RLE: 007 Pixels @ 016,031*/ 7, 0x03,
/* RLE: 001 Pixels @ 023,031*/ 1, 0x05,
/* RLE: 005 Pixels @ 024,031*/ 5, 0x04,
/* RLE: 001 Pixels @ 029,031*/ 1, 0x05,
/* RLE: 006 Pixels @ 030,031*/ 6, 0x03,
/* RLE: 093 Pixels @ 036,031*/ 93, 0x04,
/* RLE: 005 Pixels @ 129,031*/ 5, 0x03,
/* ABS: 011 Pixels @ 134,031*/ 0, 11, 0x21, 0x10, 0x01, 0x12, 0x33, 0x30,
/* RLE: 010 Pixels @ 007,032*/ 10, 0x04,
/* RLE: 007 Pixels @ 017,032*/ 7, 0x03,
/* RLE: 006 Pixels @ 024,032*/ 6, 0x04,
/* RLE: 104 Pixels @ 030,032*/ 104, 0x03,
/* ABS: 011 Pixels @ 134,032*/ 0, 11, 0x21, 0x10, 0x01, 0x12, 0x33, 0x30,
/* RLE: 009 Pixels @ 007,033*/ 9, 0x04,
/* RLE: 007 Pixels @ 016,033*/ 7, 0x03,
/* RLE: 001 Pixels @ 023,033*/ 1, 0x05,
/* RLE: 005 Pixels @ 024,033*/ 5, 0x04,
/* RLE: 001 Pixels @ 029,033*/ 1, 0x05,
/* RLE: 006 Pixels @ 030,033*/ 6, 0x03,
/* RLE: 093 Pixels @ 036,033*/ 93, 0x04,
/* RLE: 005 Pixels @ 129,033*/ 5, 0x03,
/* ABS: 011 Pixels @ 134,033*/ 0, 11, 0x21, 0x10, 0x01, 0x12, 0x33, 0x30,
/* RLE: 008 Pixels @ 007,034*/ 8, 0x04,
/* RLE: 007 Pixels @ 015,034*/ 7, 0x03,
/* RLE: 001 Pixels @ 022,034*/ 1, 0x05,
/* RLE: 006 Pixels @ 023,034*/ 6, 0x04,
/* RLE: 007 Pixels @ 029,034*/ 7, 0x03,
/* RLE: 094 Pixels @ 036,034*/ 94, 0x04,
/* RLE: 004 Pixels @ 130,034*/ 4, 0x03,
/* ABS: 011 Pixels @ 134,034*/ 0, 11, 0x21, 0x10, 0x01, 0x12, 0x33, 0x30,
/* RLE: 007 Pixels @ 007,035*/ 7, 0x04,
/* RLE: 008 Pixels @ 014,035*/ 8, 0x03,
/* RLE: 006 Pixels @ 022,035*/ 6, 0x04,
/* RLE: 007 Pixels @ 028,035*/ 7, 0x03,
/* RLE: 095 Pixels @ 035,035*/ 95, 0x04,
/* RLE: 004 Pixels @ 130,035*/ 4, 0x03,
/* ABS: 011 Pixels @ 134,035*/ 0, 11, 0x21, 0x10, 0x01, 0x12, 0x33, 0x30,
/* RLE: 006 Pixels @ 007,036*/ 6, 0x04,
/* RLE: 001 Pixels @ 013,036*/ 1, 0x05,
/* RLE: 007 Pixels @ 014,036*/ 7, 0x03,
/* RLE: 006 Pixels @ 021,036*/ 6, 0x04,
/* RLE: 007 Pixels @ 027,036*/ 7, 0x03,
/* RLE: 001 Pixels @ 034,036*/ 1, 0x05,
/* RLE: 095 Pixels @ 035,036*/ 95, 0x04,
/* RLE: 004 Pixels @ 130,036*/ 4, 0x03,
/* ABS: 011 Pixels @ 134,036*/ 0, 11, 0x21, 0x10, 0x01, 0x12, 0x33, 0x30,
/* RLE: 006 Pixels @ 007,037*/ 6, 0x04,
/* RLE: 007 Pixels @ 013,037*/ 7, 0x03,
/* RLE: 001 Pixels @ 020,037*/ 1, 0x05,
/* RLE: 005 Pixels @ 021,037*/ 5, 0x04,
/* RLE: 008 Pixels @ 026,037*/ 8, 0x03,
/* RLE: 095 Pixels @ 034,037*/ 95, 0x04,
/* RLE: 005 Pixels @ 129,037*/ 5, 0x03,
/* ABS: 011 Pixels @ 134,037*/ 0, 11, 0x21, 0x10, 0x01, 0x12, 0x33, 0x30,
/* RLE: 005 Pixels @ 007,038*/ 5, 0x04,
/* RLE: 007 Pixels @ 012,038*/ 7, 0x03,
/* RLE: 001 Pixels @ 019,038*/ 1, 0x05,
/* RLE: 005 Pixels @ 020,038*/ 5, 0x04,
/* RLE: 001 Pixels @ 025,038*/ 1, 0x05,
/* RLE: 007 Pixels @ 026,038*/ 7, 0x03,
/* RLE: 006 Pixels @ 033,038*/ 6, 0x04,
/* RLE: 095 Pixels @ 039,038*/ 95, 0x03,
/* ABS: 011 Pixels @ 134,038*/ 0, 11, 0x21, 0x10, 0x01, 0x12, 0x33, 0x30,
/* RLE: 004 Pixels @ 007,039*/ 4, 0x04,
/* RLE: 008 Pixels @ 011,039*/ 8, 0x03,
/* RLE: 006 Pixels @ 019,039*/ 6, 0x04,
/* RLE: 007 Pixels @ 025,039*/ 7, 0x03,
/* RLE: 001 Pixels @ 032,039*/ 1, 0x05,
/* RLE: 005 Pixels @ 033,039*/ 5, 0x04,
/* RLE: 096 Pixels @ 038,039*/ 96, 0x03,
/* ABS: 015 Pixels @ 134,039*/ 0, 15, 0x21, 0x10, 0x01, 0x12, 0x33, 0x34, 0x44, 0x50,
/* RLE: 007 Pixels @ 011,040*/ 7, 0x03,
/* RLE: 006 Pixels @ 018,040*/ 6, 0x04,
/* RLE: 007 Pixels @ 024,040*/ 7, 0x03,
/* RLE: 001 Pixels @ 031,040*/ 1, 0x05,
/* RLE: 005 Pixels @ 032,040*/ 5, 0x04,
/* RLE: 097 Pixels @ 037,040*/ 97, 0x03,
/* ABS: 014 Pixels @ 134,040*/ 0, 14, 0x21, 0x10, 0x01, 0x12, 0x33, 0x34, 0x44,
/* RLE: 007 Pixels @ 010,041*/ 7, 0x03,
/* RLE: 001 Pixels @ 017,041*/ 1, 0x05,
/* RLE: 005 Pixels @ 018,041*/ 5, 0x04,
/* RLE: 008 Pixels @ 023,041*/ 8, 0x03,
/* RLE: 005 Pixels @ 031,041*/ 5, 0x04,
/* RLE: 001 Pixels @ 036,041*/ 1, 0x05,
/* RLE: 097 Pixels @ 037,041*/ 97, 0x03,
/* ABS: 013 Pixels @ 134,041*/ 0, 13, 0x21, 0x10, 0x01, 0x12, 0x33, 0x34, 0x40,
/* RLE: 007 Pixels @ 009,042*/ 7, 0x03,
/* RLE: 001 Pixels @ 016,042*/ 1, 0x05,
/* RLE: 005 Pixels @ 017,042*/ 5, 0x04,
/* RLE: 001 Pixels @ 022,042*/ 1, 0x05,
/* RLE: 007 Pixels @ 023,042*/ 7, 0x03,
/* RLE: 006 Pixels @ 030,042*/ 6, 0x04,
/* RLE: 098 Pixels @ 036,042*/ 98, 0x03,
/* ABS: 012 Pixels @ 134,042*/ 0, 12, 0x21, 0x10, 0x01, 0x12, 0x33, 0x34,
/* RLE: 008 Pixels @ 008,043*/ 8, 0x03,
/* RLE: 006 Pixels @ 016,043*/ 6, 0x04,
/* RLE: 007 Pixels @ 022,043*/ 7, 0x03,
/* RLE: 001 Pixels @ 029,043*/ 1, 0x05,
/* RLE: 005 Pixels @ 030,043*/ 5, 0x04,
/* RLE: 007 Pixels @ 035,043*/ 7, 0x03,
/* ABS: 007 Pixels @ 042,043*/ 0, 7, 0x22, 0x11, 0x12, 0x20,
/* RLE: 006 Pixels @ 049,043*/ 6, 0x03,
/* RLE: 001 Pixels @ 055,043*/ 1, 0x02,
/* RLE: 010 Pixels @ 056,043*/ 10, 0x01,
/* RLE: 001 Pixels @ 066,043*/ 1, 0x02,
/* RLE: 004 Pixels @ 067,043*/ 4, 0x03,
/* ABS: 008 Pixels @ 071,043*/ 0, 8, 0x52, 0x21, 0x11, 0x25,
/* RLE: 008 Pixels @ 079,043*/ 8, 0x03,
/* ABS: 008 Pixels @ 087,043*/ 0, 8, 0x52, 0x21, 0x11, 0x25,
/* RLE: 007 Pixels @ 095,043*/ 7, 0x03,
/* RLE: 001 Pixels @ 102,043*/ 1, 0x02,
/* RLE: 010 Pixels @ 103,043*/ 10, 0x01,
/* ABS: 004 Pixels @ 113,043*/ 0, 4, 0x23, 0x32,
/* RLE: 008 Pixels @ 117,043*/ 8, 0x01,
/* ABS: 002 Pixels @ 125,043*/ 0, 2, 0x25,
/* RLE: 007 Pixels @ 127,043*/ 7, 0x03,
/* ABS: 012 Pixels @ 134,043*/ 0, 12, 0x21, 0x10, 0x01, 0x12, 0x33, 0x34,
/* RLE: 007 Pixels @ 008,044*/ 7, 0x03,
/* RLE: 006 Pixels @ 015,044*/ 6, 0x04,
/* RLE: 008 Pixels @ 021,044*/ 8, 0x03,
/* RLE: 005 Pixels @ 029,044*/ 5, 0x04,
/* RLE: 001 Pixels @ 034,044*/ 1, 0x05,
/* RLE: 006 Pixels @ 035,044*/ 6, 0x03,
/* RLE: 009 Pixels @ 041,044*/ 9, 0x01,
/* RLE: 001 Pixels @ 050,044*/ 1, 0x05,
/* RLE: 004 Pixels @ 051,044*/ 4, 0x03,
/* RLE: 011 Pixels @ 055,044*/ 11, 0x01,
/* ABS: 005 Pixels @ 066,044*/ 0, 5, 0x23, 0x33, 0x20,
/* RLE: 009 Pixels @ 071,044*/ 9, 0x01,
/* RLE: 006 Pixels @ 080,044*/ 6, 0x03,
/* RLE: 001 Pixels @ 086,044*/ 1, 0x02,
/* RLE: 009 Pixels @ 087,044*/ 9, 0x01,
/* RLE: 006 Pixels @ 096,044*/ 6, 0x03,
/* RLE: 011 Pixels @ 102,044*/ 11, 0x01,
/* ABS: 003 Pixels @ 113,044*/ 0, 3, 0x23, 0x30,
/* RLE: 011 Pixels @ 116,044*/ 11, 0x01,
/* RLE: 001 Pixels @ 127,044*/ 1, 0x05,
/* RLE: 006 Pixels @ 128,044*/ 6, 0x03,
/* ABS: 008 Pixels @ 134,044*/ 0, 8, 0x21, 0x10, 0x01, 0x12,
/* RLE: 010 Pixels @ 004,045*/ 10, 0x03,
/* RLE: 001 Pixels @ 014,045*/ 1, 0x05,
/* RLE: 005 Pixels @ 015,045*/ 5, 0x04,
/* RLE: 008 Pixels @ 020,045*/ 8, 0x03,
/* RLE: 006 Pixels @ 028,045*/ 6, 0x04,
/* RLE: 006 Pixels @ 034,045*/ 6, 0x03,
/* ABS: 011 Pixels @ 040,045*/ 0, 11, 0x21, 0x12, 0x33, 0x35, 0x11, 0x10,
/* RLE: 004 Pixels @ 051,045*/ 4, 0x03,
/* RLE: 003 Pixels @ 055,045*/ 3, 0x01,
/* RLE: 011 Pixels @ 058,045*/ 11, 0x03,
/* ABS: 012 Pixels @ 069,045*/ 0, 12, 0x21, 0x12, 0x53, 0x35, 0x21, 0x11,
/* RLE: 004 Pixels @ 081,045*/ 4, 0x03,
/* ABS: 012 Pixels @ 085,045*/ 0, 12, 0x21, 0x12, 0x53, 0x35, 0x21, 0x11,
/* RLE: 005 Pixels @ 097,045*/ 5, 0x03,
/* RLE: 003 Pixels @ 102,045*/ 3, 0x01,
/* RLE: 011 Pixels @ 105,045*/ 11, 0x03,
/* RLE: 003 Pixels @ 116,045*/ 3, 0x01,
/* RLE: 005 Pixels @ 119,045*/ 5, 0x03,
/* ABS: 004 Pixels @ 124,045*/ 0, 4, 0x21, 0x12,
/* RLE: 006 Pixels @ 128,045*/ 6, 0x03,
/* ABS: 008 Pixels @ 134,045*/ 0, 8, 0x21, 0x10, 0x01, 0x12,
/* RLE: 009 Pixels @ 004,046*/ 9, 0x03,
/* RLE: 001 Pixels @ 013,046*/ 1, 0x05,
/* RLE: 005 Pixels @ 014,046*/ 5, 0x04,
/* RLE: 001 Pixels @ 019,046*/ 1, 0x05,
/* RLE: 007 Pixels @ 020,046*/ 7, 0x03,
/* RLE: 006 Pixels @ 027,046*/ 6, 0x04,
/* RLE: 007 Pixels @ 033,046*/ 7, 0x03,
/* RLE: 003 Pixels @ 040,046*/ 3, 0x01,
/* RLE: 005 Pixels @ 043,046*/ 5, 0x03,
/* ABS: 003 Pixels @ 048,046*/ 0, 3, 0x51, 0x20,
/* RLE: 004 Pixels @ 051,046*/ 4, 0x03,
/* RLE: 003 Pixels @ 055,046*/ 3, 0x01,
/* RLE: 010 Pixels @ 058,046*/ 10, 0x03,
/* ABS: 004 Pixels @ 068,046*/ 0, 4, 0x51, 0x12,
/* RLE: 006 Pixels @ 072,046*/ 6, 0x03,
/* ABS: 010 Pixels @ 078,046*/ 0, 10, 0x21, 0x23, 0x33, 0x51, 0x12,
/* RLE: 006 Pixels @ 088,046*/ 6, 0x03,
/* ABS: 003 Pixels @ 094,046*/ 0, 3, 0x21, 0x20,
/* RLE: 005 Pixels @ 097,046*/ 5, 0x03,
/* RLE: 003 Pixels @ 102,046*/ 3, 0x01,
/* RLE: 011 Pixels @ 105,046*/ 11, 0x03,
/* RLE: 003 Pixels @ 116,046*/ 3, 0x01,
/* RLE: 006 Pixels @ 119,046*/ 6, 0x03,
/* RLE: 003 Pixels @ 125,046*/ 3, 0x01,
/* RLE: 006 Pixels @ 128,046*/ 6, 0x03,
/* ABS: 008 Pixels @ 134,046*/ 0, 8, 0x21, 0x10, 0x01, 0x12,
/* RLE: 009 Pixels @ 004,047*/ 9, 0x03,
/* RLE: 006 Pixels @ 013,047*/ 6, 0x04,
/* RLE: 007 Pixels @ 019,047*/ 7, 0x03,
/* RLE: 001 Pixels @ 026,047*/ 1, 0x05,
/* RLE: 005 Pixels @ 027,047*/ 5, 0x04,
/* RLE: 001 Pixels @ 032,047*/ 1, 0x05,
/* RLE: 007 Pixels @ 033,047*/ 7, 0x03,
/* ABS: 005 Pixels @ 040,047*/ 0, 5, 0x21, 0x12, 0x50,
/* RLE: 010 Pixels @ 045,047*/ 10, 0x03,
/* RLE: 003 Pixels @ 055,047*/ 3, 0x01,
/* RLE: 010 Pixels @ 058,047*/ 10, 0x03,
/* ABS: 004 Pixels @ 068,047*/ 0, 4, 0x21, 0x15,
/* RLE: 012 Pixels @ 072,047*/ 12, 0x03,
/* ABS: 004 Pixels @ 084,047*/ 0, 4, 0x21, 0x15,
/* RLE: 014 Pixels @ 088,047*/ 14, 0x03,
/* RLE: 003 Pixels @ 102,047*/ 3, 0x01,
/* RLE: 011 Pixels @ 105,047*/ 11, 0x03,
/* RLE: 003 Pixels @ 116,047*/ 3, 0x01,
/* RLE: 006 Pixels @ 119,047*/ 6, 0x03,
/* RLE: 003 Pixels @ 125,047*/ 3, 0x01,
/* RLE: 006 Pixels @ 128,047*/ 6, 0x03,
/* ABS: 008 Pixels @ 134,047*/ 0, 8, 0x21, 0x10, 0x01, 0x12,
/* RLE: 008 Pixels @ 004,048*/ 8, 0x03,
/* RLE: 006 Pixels @ 012,048*/ 6, 0x04,
/* RLE: 008 Pixels @ 018,048*/ 8, 0x03,
/* RLE: 005 Pixels @ 026,048*/ 5, 0x04,
/* RLE: 001 Pixels @ 031,048*/ 1, 0x05,
/* RLE: 009 Pixels @ 032,048*/ 9, 0x03,
/* RLE: 006 Pixels @ 041,048*/ 6, 0x01,
/* ABS: 002 Pixels @ 047,048*/ 0, 2, 0x22,
/* RLE: 006 Pixels @ 049,048*/ 6, 0x03,
/* RLE: 010 Pixels @ 055,048*/ 10, 0x01,
/* ABS: 006 Pixels @ 065,048*/ 0, 6, 0x23, 0x31, 0x11,
/* RLE: 013 Pixels @ 071,048*/ 13, 0x03,
/* RLE: 003 Pixels @ 084,048*/ 3, 0x01,
/* RLE: 015 Pixels @ 087,048*/ 15, 0x03,
/* RLE: 010 Pixels @ 102,048*/ 10, 0x01,
/* ABS: 007 Pixels @ 112,048*/ 0, 7, 0x23, 0x33, 0x11, 0x10,
/* RLE: 005 Pixels @ 119,048*/ 5, 0x03,
/* ABS: 004 Pixels @ 124,048*/ 0, 4, 0x21, 0x12,
/* RLE: 006 Pixels @ 128,048*/ 6, 0x03,
/* ABS: 008 Pixels @ 134,048*/ 0, 8, 0x21, 0x10, 0x01, 0x12,
/* RLE: 007 Pixels @ 004,049*/ 7, 0x03,
/* RLE: 001 Pixels @ 011,049*/ 1, 0x05,
/* RLE: 005 Pixels @ 012,049*/ 5, 0x04,
/* RLE: 008 Pixels @ 017,049*/ 8, 0x03,
/* RLE: 006 Pixels @ 025,049*/ 6, 0x04,
/* RLE: 011 Pixels @ 031,049*/ 11, 0x03,
/* ABS: 003 Pixels @ 042,049*/ 0, 3, 0x52, 0x20,
/* RLE: 005 Pixels @ 045,049*/ 5, 0x01,
/* RLE: 001 Pixels @ 050,049*/ 1, 0x02,
/* RLE: 004 Pixels @ 051,049*/ 4, 0x03,
/* RLE: 010 Pixels @ 055,049*/ 10, 0x01,
/* ABS: 006 Pixels @ 065,049*/ 0, 6, 0x23, 0x31, 0x11,
/* RLE: 004 Pixels @ 071,049*/ 4, 0x03,
/* RLE: 001 Pixels @ 075,049*/ 1, 0x02,
/* RLE: 005 Pixels @ 076,049*/ 5, 0x01,
/* ABS: 006 Pixels @ 081,049*/ 0, 6, 0x23, 0x31, 0x11,
/* RLE: 004 Pixels @ 087,049*/ 4, 0x03,
/* RLE: 001 Pixels @ 091,049*/ 1, 0x02,
/* RLE: 005 Pixels @ 092,049*/ 5, 0x01,
/* RLE: 001 Pixels @ 097,049*/ 1, 0x02,
/* RLE: 004 Pixels @ 098,049*/ 4, 0x03,
/* RLE: 010 Pixels @ 102,049*/ 10, 0x01,
/* ABS: 004 Pixels @ 112,049*/ 0, 4, 0x23, 0x33,
/* RLE: 010 Pixels @ 116,049*/ 10, 0x01,
/* RLE: 001 Pixels @ 126,049*/ 1, 0x02,
/* RLE: 007 Pixels @ 127,049*/ 7, 0x03,
/* ABS: 008 Pixels @ 134,049*/ 0, 8, 0x21, 0x10, 0x01, 0x12,
/* RLE: 006 Pixels @ 004,050*/ 6, 0x03,
/* RLE: 001 Pixels @ 010,050*/ 1, 0x05,
/* RLE: 005 Pixels @ 011,050*/ 5, 0x04,
/* RLE: 001 Pixels @ 016,050*/ 1, 0x05,
/* RLE: 007 Pixels @ 017,050*/ 7, 0x03,
/* RLE: 001 Pixels @ 024,050*/ 1, 0x05,
/* RLE: 005 Pixels @ 025,050*/ 5, 0x04,
/* RLE: 016 Pixels @ 030,050*/ 16, 0x03,
/* ABS: 012 Pixels @ 046,050*/ 0, 12, 0x52, 0x11, 0x12, 0x33, 0x31, 0x11,
/* RLE: 010 Pixels @ 058,050*/ 10, 0x03,
/* RLE: 003 Pixels @ 068,050*/ 3, 0x01,
/* RLE: 004 Pixels @ 071,050*/ 4, 0x03,
/* RLE: 001 Pixels @ 075,050*/ 1, 0x02,
/* RLE: 006 Pixels @ 076,050*/ 6, 0x01,
/* ABS: 005 Pixels @ 082,050*/ 0, 5, 0x33, 0x11, 0x10,
/* RLE: 004 Pixels @ 087,050*/ 4, 0x03,
/* RLE: 001 Pixels @ 091,050*/ 1, 0x02,
/* RLE: 006 Pixels @ 092,050*/ 6, 0x01,
/* RLE: 004 Pixels @ 098,050*/ 4, 0x03,
/* RLE: 003 Pixels @ 102,050*/ 3, 0x01,
/* RLE: 011 Pixels @ 105,050*/ 11, 0x03,
/* RLE: 010 Pixels @ 116,050*/ 10, 0x01,
/* RLE: 001 Pixels @ 126,050*/ 1, 0x02,
/* RLE: 007 Pixels @ 127,050*/ 7, 0x03,
/* ABS: 008 Pixels @ 134,050*/ 0, 8, 0x21, 0x10, 0x01, 0x12,
/* RLE: 006 Pixels @ 004,051*/ 6, 0x03,
/* RLE: 005 Pixels @ 010,051*/ 5, 0x04,
/* RLE: 001 Pixels @ 015,051*/ 1, 0x05,
/* RLE: 007 Pixels @ 016,051*/ 7, 0x03,
/* RLE: 001 Pixels @ 023,051*/ 1, 0x05,
/* RLE: 005 Pixels @ 024,051*/ 5, 0x04,
/* RLE: 001 Pixels @ 029,051*/ 1, 0x05,
/* RLE: 010 Pixels @ 030,051*/ 10, 0x03,
/* ABS: 003 Pixels @ 040,051*/ 0, 3, 0x21, 0x50,
/* RLE: 005 Pixels @ 043,051*/ 5, 0x03,
/* ABS: 010 Pixels @ 048,051*/ 0, 10, 0x51, 0x11, 0x33, 0x31, 0x11,
/* RLE: 010 Pixels @ 058,051*/ 10, 0x03,
/* ABS: 004 Pixels @ 068,051*/ 0, 4, 0x21, 0x15,
/* RLE: 007 Pixels @ 072,051*/ 7, 0x03,
/* RLE: 003 Pixels @ 079,051*/ 3, 0x01,
/* ABS: 006 Pixels @ 082,051*/ 0, 6, 0x33, 0x21, 0x15,
/* RLE: 007 Pixels @ 088,051*/ 7, 0x03,
/* RLE: 003 Pixels @ 095,051*/ 3, 0x01,
/* RLE: 004 Pixels @ 098,051*/ 4, 0x03,
/* RLE: 003 Pixels @ 102,051*/ 3, 0x01,
/* RLE: 011 Pixels @ 105,051*/ 11, 0x03,
/* RLE: 003 Pixels @ 116,051*/ 3, 0x01,
/* RLE: 005 Pixels @ 119,051*/ 5, 0x03,
/* ABS: 004 Pixels @ 124,051*/ 0, 4, 0x21, 0x12,
/* RLE: 006 Pixels @ 128,051*/ 6, 0x03,
/* ABS: 008 Pixels @ 134,051*/ 0, 8, 0x21, 0x10, 0x01, 0x12,
/* RLE: 005 Pixels @ 004,052*/ 5, 0x03,
/* RLE: 006 Pixels @ 009,052*/ 6, 0x04,
/* RLE: 008 Pixels @ 015,052*/ 8, 0x03,
/* RLE: 006 Pixels @ 023,052*/ 6, 0x04,
/* RLE: 011 Pixels @ 029,052*/ 11, 0x03,
/* RLE: 003 Pixels @ 040,052*/ 3, 0x01,
/* RLE: 006 Pixels @ 043,052*/ 6, 0x03,
/* RLE: 003 Pixels @ 049,052*/ 3, 0x01,
/* RLE: 003 Pixels @ 052,052*/ 3, 0x03,
/* RLE: 003 Pixels @ 055,052*/ 3, 0x01,
/* RLE: 010 Pixels @ 058,052*/ 10, 0x03,
/* ABS: 004 Pixels @ 068,052*/ 0, 4, 0x51, 0x12,
/* RLE: 006 Pixels @ 072,052*/ 6, 0x03,
/* ABS: 010 Pixels @ 078,052*/ 0, 10, 0x21, 0x11, 0x33, 0x51, 0x12,
/* RLE: 006 Pixels @ 088,052*/ 6, 0x03,
/* ABS: 004 Pixels @ 094,052*/ 0, 4, 0x21, 0x11,
/* RLE: 004 Pixels @ 098,052*/ 4, 0x03,
/* RLE: 003 Pixels @ 102,052*/ 3, 0x01,
/* RLE: 011 Pixels @ 105,052*/ 11, 0x03,
/* RLE: 003 Pixels @ 116,052*/ 3, 0x01,
/* RLE: 006 Pixels @ 119,052*/ 6, 0x03,
/* RLE: 003 Pixels @ 125,052*/ 3, 0x01,
/* RLE: 006 Pixels @ 128,052*/ 6, 0x03,
/* ABS: 008 Pixels @ 134,052*/ 0, 8, 0x21, 0x10, 0x01, 0x12,
/* RLE: 004 Pixels @ 004,053*/ 4, 0x03,
/* RLE: 006 Pixels @ 008,053*/ 6, 0x04,
/* RLE: 008 Pixels @ 014,053*/ 8, 0x03,
/* RLE: 006 Pixels @ 022,053*/ 6, 0x04,
/* RLE: 012 Pixels @ 028,053*/ 12, 0x03,
/* ABS: 018 Pixels @ 040,053*/ 0, 18, 0x21, 0x11, 0x53, 0x33, 0x21, 0x12, 0x33, 0x31, 0x11,
/* RLE: 011 Pixels @ 058,053*/ 11, 0x03,
/* ABS: 009 Pixels @ 069,053*/ 0, 9, 0x21, 0x12, 0x53, 0x33, 0x20,
/* RLE: 004 Pixels @ 078,053*/ 4, 0x01,
/* RLE: 003 Pixels @ 082,053*/ 3, 0x03,
/* ABS: 009 Pixels @ 085,053*/ 0, 9, 0x21, 0x12, 0x53, 0x33, 0x20,
/* RLE: 004 Pixels @ 094,053*/ 4, 0x01,
/* RLE: 004 Pixels @ 098,053*/ 4, 0x03,
/* RLE: 003 Pixels @ 102,053*/ 3, 0x01,
/* RLE: 011 Pixels @ 105,053*/ 11, 0x03,
/* RLE: 003 Pixels @ 116,053*/ 3, 0x01,
/* RLE: 006 Pixels @ 119,053*/ 6, 0x03,
/* RLE: 003 Pixels @ 125,053*/ 3, 0x01,
/* RLE: 006 Pixels @ 128,053*/ 6, 0x03,
/* ABS: 008 Pixels @ 134,053*/ 0, 8, 0x21, 0x10, 0x01, 0x12,
/* RLE: 004 Pixels @ 004,054*/ 4, 0x03,
/* RLE: 005 Pixels @ 008,054*/ 5, 0x04,
/* RLE: 001 Pixels @ 013,054*/ 1, 0x05,
/* RLE: 008 Pixels @ 014,054*/ 8, 0x03,
/* RLE: 005 Pixels @ 022,054*/ 5, 0x04,
/* RLE: 001 Pixels @ 027,054*/ 1, 0x05,
/* RLE: 013 Pixels @ 028,054*/ 13, 0x03,
/* RLE: 001 Pixels @ 041,054*/ 1, 0x02,
/* RLE: 008 Pixels @ 042,054*/ 8, 0x01,
/* RLE: 001 Pixels @ 050,054*/ 1, 0x02,
/* RLE: 004 Pixels @ 051,054*/ 4, 0x03,
/* RLE: 011 Pixels @ 055,054*/ 11, 0x01,
/* ABS: 005 Pixels @ 066,054*/ 0, 5, 0x23, 0x33, 0x20,
/* RLE: 008 Pixels @ 071,054*/ 8, 0x01,
/* ABS: 003 Pixels @ 079,054*/ 0, 3, 0x21, 0x10,
/* RLE: 004 Pixels @ 082,054*/ 4, 0x03,
/* RLE: 001 Pixels @ 086,054*/ 1, 0x02,
/* RLE: 008 Pixels @ 087,054*/ 8, 0x01,
/* ABS: 003 Pixels @ 095,054*/ 0, 3, 0x21, 0x10,
/* RLE: 004 Pixels @ 098,054*/ 4, 0x03,
/* RLE: 011 Pixels @ 102,054*/ 11, 0x01,
/* ABS: 006 Pixels @ 113,054*/ 0, 6, 0x23, 0x31, 0x11,
/* RLE: 006 Pixels @ 119,054*/ 6, 0x03,
/* ABS: 003 Pixels @ 125,054*/ 0, 3, 0x21, 0x10,
/* RLE: 006 Pixels @ 128,054*/ 6, 0x03,
/* ABS: 008 Pixels @ 134,054*/ 0, 8, 0x21, 0x10, 0x01, 0x12,
/* RLE: 004 Pixels @ 004,055*/ 4, 0x03,
/* RLE: 004 Pixels @ 008,055*/ 4, 0x04,
/* RLE: 001 Pixels @ 012,055*/ 1, 0x05,
/* RLE: 009 Pixels @ 013,055*/ 9, 0x03,
/* RLE: 004 Pixels @ 022,055*/ 4, 0x04,
/* RLE: 001 Pixels @ 026,055*/ 1, 0x05,
/* RLE: 015 Pixels @ 027,055*/ 15, 0x03,
/* ABS: 008 Pixels @ 042,055*/ 0, 8, 0x52, 0x21, 0x11, 0x25,
/* RLE: 005 Pixels @ 050,055*/ 5, 0x03,
/* RLE: 001 Pixels @ 055,055*/ 1, 0x02,
/* RLE: 010 Pixels @ 056,055*/ 10, 0x01,
/* RLE: 001 Pixels @ 066,055*/ 1, 0x02,
/* RLE: 004 Pixels @ 067,055*/ 4, 0x03,
/* ABS: 011 Pixels @ 071,055*/ 0, 11, 0x52, 0x21, 0x12, 0x23, 0x51, 0x20,
/* RLE: 005 Pixels @ 082,055*/ 5, 0x03,
/* ABS: 011 Pixels @ 087,055*/ 0, 11, 0x52, 0x21, 0x12, 0x23, 0x51, 0x20,
/* RLE: 004 Pixels @ 098,055*/ 4, 0x03,
/* RLE: 001 Pixels @ 102,055*/ 1, 0x02,
/* RLE: 010 Pixels @ 103,055*/ 10, 0x01,
/* ABS: 006 Pixels @ 113,055*/ 0, 6, 0x23, 0x32, 0x12,
/* RLE: 006 Pixels @ 119,055*/ 6, 0x03,
/* ABS: 003 Pixels @ 125,055*/ 0, 3, 0x51, 0x20,
/* RLE: 006 Pixels @ 128,055*/ 6, 0x03,
/* ABS: 008 Pixels @ 134,055*/ 0, 8, 0x21, 0x10, 0x01, 0x12,
/* RLE: 004 Pixels @ 004,056*/ 4, 0x03,
/* RLE: 004 Pixels @ 008,056*/ 4, 0x04,
/* RLE: 010 Pixels @ 012,056*/ 10, 0x03,
/* RLE: 004 Pixels @ 022,056*/ 4, 0x04,
/* RLE: 108 Pixels @ 026,056*/ 108, 0x03,
/* ABS: 008 Pixels @ 134,056*/ 0, 8, 0x21, 0x10, 0x01, 0x12,
/* RLE: 130 Pixels @ 004,057*/ 130, 0x03,
/* ABS: 008 Pixels @ 134,057*/ 0, 8, 0x21, 0x10, 0x01, 0x12,
/* RLE: 130 Pixels @ 004,058*/ 130, 0x03,
/* ABS: 008 Pixels @ 134,058*/ 0, 8, 0x21, 0x10, 0x01, 0x12,
/* RLE: 130 Pixels @ 004,059*/ 130, 0x03,
/* RLE: 003 Pixels @ 134,059*/ 3, 0x01,
/* ABS: 005 Pixels @ 137,059*/ 0, 5, 0x00, 0x11, 0x10,
/* RLE: 129 Pixels @ 004,060*/ 129, 0x03,
/* ABS: 006 Pixels @ 133,060*/ 0, 6, 0x51, 0x11, 0x00,
/* RLE: 004 Pixels @ 001,061*/ 4, 0x01,
/* RLE: 128 Pixels @ 005,061*/ 128, 0x02,
/* RLE: 004 Pixels @ 133,061*/ 4, 0x01,
/* ABS: 002 Pixels @ 137,061*/ 0, 2, 0x00,
/* RLE: 135 Pixels @ 001,062*/ 135, 0x01,
/* RLE: 005 Pixels @ 136,062*/ 5, 0x00,
/* RLE: 132 Pixels @ 003,063*/ 132, 0x01,
/* RLE: 008 Pixels @ 135,063*/ 8, 0x00,
/* RLE: 128 Pixels @ 005,064*/ 128, 0x01,
/* RLE: 005 Pixels @ 133,064*/ 5, 0x00,
0}; /* 1682 for 8970 pixels */
GUI_CONST_STORAGE GUI_BITMAP bmSeggerLogoBlue = {
138, /* XSize */
65, /* YSize */
69, /* BytesPerLine */
GUI_COMPRESS_RLE4, /* BitsPerPixel */
acSeggerLogoBlue, /* Pointer to picture data (indices) */
&PalSeggerLogoBlue /* Pointer to palette */
,GUI_DRAW_RLE4
};
#else
GUI_CONST_STORAGE unsigned char acSeggerLogoBlue[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x00,
0x00, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00,
0x01, 0x11, 0x12, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x11, 0x10,
0x01, 0x11, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x11, 0x10,
0x01, 0x12, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x11, 0x10,
0x01, 0x12, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x33, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x33, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x33, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x33, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x33, 0x44, 0x44, 0x45, 0x33, 0x33, 0x33, 0x33, 0x44, 0x44, 0x45, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x33, 0x44, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x44, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x33, 0x34, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x33, 0x33, 0x44, 0x44, 0x45, 0x33, 0x33, 0x33, 0x35, 0x44, 0x44, 0x45, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x33, 0x33, 0x54, 0x44, 0x44, 0x53, 0x33, 0x33, 0x33, 0x44, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x33, 0x33, 0x35, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x33, 0x33, 0x33, 0x44, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x44, 0x44, 0x45, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x54, 0x44, 0x44, 0x53, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x33, 0x33, 0x33, 0x35, 0x44, 0x44, 0x45, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x33, 0x33, 0x33, 0x33, 0x54, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x44, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x33, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x53, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x34, 0x33, 0x33, 0x33, 0x33, 0x44, 0x44, 0x44, 0x33, 0x33, 0x33, 0x35, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x34, 0x43, 0x33, 0x33, 0x33, 0x54, 0x44, 0x44, 0x53, 0x33, 0x33, 0x33, 0x44, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x34, 0x44, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x53, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x34, 0x44, 0x53, 0x33, 0x33, 0x33, 0x44, 0x44, 0x44, 0x33, 0x33, 0x33, 0x35, 0x44, 0x44, 0x45, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x34, 0x44, 0x43, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x54, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x34, 0x44, 0x44, 0x33, 0x33, 0x33, 0x35, 0x44, 0x44, 0x45, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x34, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x54, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x43, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x34, 0x44, 0x44, 0x45, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x54, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x34, 0x44, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x44, 0x44, 0x44, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x34, 0x44, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x54, 0x44, 0x44, 0x53, 0x33, 0x33, 0x33, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x34, 0x44, 0x44, 0x44, 0x44, 0x33, 0x33, 0x33, 0x35, 0x44, 0x44, 0x45, 0x33, 0x33, 0x33, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x43, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x34, 0x44, 0x44, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x44, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x34, 0x44, 0x44, 0x44, 0x44, 0x33, 0x33, 0x33, 0x35, 0x44, 0x44, 0x45, 0x33, 0x33, 0x33, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x43, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x34, 0x44, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x54, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x34, 0x44, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x44, 0x44, 0x44, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x34, 0x44, 0x44, 0x45, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x54, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x34, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x54, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x43, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x34, 0x44, 0x44, 0x33, 0x33, 0x33, 0x35, 0x44, 0x44, 0x45, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x34, 0x44, 0x43, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x54, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x34, 0x44, 0x53, 0x33, 0x33, 0x33, 0x44, 0x44, 0x44, 0x33, 0x33, 0x33, 0x35, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x34, 0x44, 0x33, 0x33, 0x33, 0x35, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x53, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x34, 0x43, 0x33, 0x33, 0x33, 0x54, 0x44, 0x44, 0x53, 0x33, 0x33, 0x33, 0x44, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x34, 0x33, 0x33, 0x33, 0x33, 0x44, 0x44, 0x44, 0x33, 0x33, 0x33, 0x35, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x22, 0x11, 0x12, 0x23, 0x33, 0x33, 0x32, 0x11, 0x11, 0x11, 0x11, 0x11, 0x23, 0x33, 0x35, 0x22, 0x11, 0x12, 0x53, 0x33, 0x33, 0x33, 0x35, 0x22, 0x11, 0x12, 0x53, 0x33, 0x33, 0x33, 0x21, 0x11, 0x11, 0x11, 0x11, 0x12, 0x33, 0x21, 0x11, 0x11, 0x11, 0x12, 0x53, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x34, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x53, 0x33, 0x33, 0x31, 0x11, 0x11, 0x11, 0x11, 0x53, 0x33, 0x31, 0x11, 0x11, 0x11, 0x11, 0x11, 0x23, 0x33, 0x21, 0x11, 0x11, 0x11, 0x11, 0x33, 0x33, 0x33, 0x21, 0x11, 0x11, 0x11, 0x11, 0x33, 0x33, 0x33, 0x11, 0x11, 0x11, 0x11, 0x11, 0x12, 0x33, 0x11, 0x11, 0x11, 0x11, 0x11, 0x15, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x33, 0x33, 0x33, 0x33, 0x54, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x44, 0x44, 0x44, 0x33, 0x33, 0x33, 0x21, 0x12, 0x33, 0x35, 0x11, 0x13, 0x33, 0x31, 0x11, 0x33, 0x33, 0x33, 0x33, 0x33, 0x32, 0x11, 0x25, 0x33, 0x52, 0x11, 0x13, 0x33, 0x32, 0x11, 0x25, 0x33, 0x52, 0x11, 0x13, 0x33, 0x33, 0x11, 0x13, 0x33, 0x33, 0x33, 0x33, 0x33, 0x11, 0x13, 0x33, 0x33, 0x21, 0x12, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x33, 0x33, 0x33, 0x35, 0x44, 0x44, 0x45, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x11, 0x13, 0x33, 0x33, 0x51, 0x23, 0x33, 0x31, 0x11, 0x33, 0x33, 0x33, 0x33, 0x33, 0x51, 0x12, 0x33, 0x33, 0x33, 0x21, 0x23, 0x33, 0x51, 0x12, 0x33, 0x33, 0x33, 0x21, 0x23, 0x33, 0x33, 0x11, 0x13, 0x33, 0x33, 0x33, 0x33, 0x33, 0x11, 0x13, 0x33, 0x33, 0x31, 0x11, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x54, 0x44, 0x44, 0x53, 0x33, 0x33, 0x33, 0x21, 0x12, 0x53, 0x33, 0x33, 0x33, 0x33, 0x31, 0x11, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x15, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x15, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x11, 0x13, 0x33, 0x33, 0x33, 0x33, 0x33, 0x11, 0x13, 0x33, 0x33, 0x31, 0x11, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x33, 0x33, 0x33, 0x44, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x44, 0x44, 0x45, 0x33, 0x33, 0x33, 0x33, 0x31, 0x11, 0x11, 0x12, 0x23, 0x33, 0x33, 0x31, 0x11, 0x11, 0x11, 0x11, 0x12, 0x33, 0x11, 0x13, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x11, 0x13, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x11, 0x11, 0x11, 0x11, 0x11, 0x23, 0x33, 0x11, 0x13, 0x33, 0x33, 0x21, 0x12, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x33, 0x33, 0x35, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x33, 0x52, 0x21, 0x11, 0x11, 0x23, 0x33, 0x31, 0x11, 0x11, 0x11, 0x11, 0x12, 0x33, 0x11, 0x13, 0x33, 0x32, 0x11, 0x11, 0x12, 0x33, 0x11, 0x13, 0x33, 0x32, 0x11, 0x11, 0x12, 0x33, 0x33, 0x11, 0x11, 0x11, 0x11, 0x11, 0x23, 0x33, 0x11, 0x11, 0x11, 0x11, 0x11, 0x23, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x33, 0x33, 0x54, 0x44, 0x44, 0x53, 0x33, 0x33, 0x33, 0x54, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x52, 0x11, 0x12, 0x33, 0x31, 0x11, 0x33, 0x33, 0x33, 0x33, 0x33, 0x11, 0x13, 0x33, 0x32, 0x11, 0x11, 0x11, 0x33, 0x11, 0x13, 0x33, 0x32, 0x11, 0x11, 0x11, 0x33, 0x33, 0x11, 0x13, 0x33, 0x33, 0x33, 0x33, 0x33, 0x11, 0x11, 0x11, 0x11, 0x11, 0x23, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x33, 0x33, 0x44, 0x44, 0x45, 0x33, 0x33, 0x33, 0x35, 0x44, 0x44, 0x45, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x53, 0x33, 0x33, 0x51, 0x11, 0x33, 0x31, 0x11, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x15, 0x33, 0x33, 0x33, 0x31, 0x11, 0x33, 0x21, 0x15, 0x33, 0x33, 0x33, 0x31, 0x11, 0x33, 0x33, 0x11, 0x13, 0x33, 0x33, 0x33, 0x33, 0x33, 0x11, 0x13, 0x33, 0x33, 0x21, 0x12, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x33, 0x34, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x33, 0x11, 0x13, 0x33, 0x33, 0x31, 0x11, 0x33, 0x31, 0x11, 0x33, 0x33, 0x33, 0x33, 0x33, 0x51, 0x12, 0x33, 0x33, 0x33, 0x21, 0x11, 0x33, 0x51, 0x12, 0x33, 0x33, 0x33, 0x21, 0x11, 0x33, 0x33, 0x11, 0x13, 0x33, 0x33, 0x33, 0x33, 0x33, 0x11, 0x13, 0x33, 0x33, 0x31, 0x11, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x33, 0x44, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x44, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x11, 0x53, 0x33, 0x21, 0x12, 0x33, 0x31, 0x11, 0x33, 0x33, 0x33, 0x33, 0x33, 0x32, 0x11, 0x25, 0x33, 0x32, 0x11, 0x11, 0x33, 0x32, 0x11, 0x25, 0x33, 0x32, 0x11, 0x11, 0x33, 0x33, 0x11, 0x13, 0x33, 0x33, 0x33, 0x33, 0x33, 0x11, 0x13, 0x33, 0x33, 0x31, 0x11, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x33, 0x44, 0x44, 0x45, 0x33, 0x33, 0x33, 0x33, 0x44, 0x44, 0x45, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x32, 0x11, 0x11, 0x11, 0x11, 0x23, 0x33, 0x31, 0x11, 0x11, 0x11, 0x11, 0x11, 0x23, 0x33, 0x21, 0x11, 0x11, 0x11, 0x12, 0x11, 0x33, 0x33, 0x21, 0x11, 0x11, 0x11, 0x12, 0x11, 0x33, 0x33, 0x11, 0x11, 0x11, 0x11, 0x11, 0x12, 0x33, 0x11, 0x13, 0x33, 0x33, 0x32, 0x11, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x33, 0x44, 0x44, 0x53, 0x33, 0x33, 0x33, 0x33, 0x44, 0x44, 0x53, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x52, 0x21, 0x11, 0x25, 0x33, 0x33, 0x32, 0x11, 0x11, 0x11, 0x11, 0x11, 0x23, 0x33, 0x35, 0x22, 0x11, 0x22, 0x35, 0x12, 0x33, 0x33, 0x35, 0x22, 0x11, 0x22, 0x35, 0x12, 0x33, 0x33, 0x21, 0x11, 0x11, 0x11, 0x11, 0x12, 0x33, 0x21, 0x23, 0x33, 0x33, 0x35, 0x12, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x33, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x33, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x01, 0x12, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x11, 0x10,
0x01, 0x11, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x35, 0x11, 0x10,
0x01, 0x11, 0x12, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x11, 0x10,
0x01, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00,
0x00, 0x01, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x00,
0x00, 0x00, 0x01, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x00, 0x00
};
GUI_CONST_STORAGE GUI_BITMAP bmSeggerLogoBlue = {
138, /* XSize */
65, /* YSize */
69, /* BytesPerLine */
4, /* BitsPerPixel */
acSeggerLogoBlue, /* Pointer to picture data (indices) */
&PalSeggerLogoBlue /* Pointer to palette */
};
#endif /* LOGO_COMP */
#elif (LCD_YSIZE < 90) /* GUIDEMO_TINY */
/*********************************************************************
*
* SEGGER logo, 65% size
*
**********************************************************************
*/
GUI_CONST_STORAGE unsigned char acSeggerLogoBlue[] = {
0x01, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x00,
0x11, 0x12, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x11, 0x10,
0x11, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x31, 0x10,
0x12, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x31, 0x10,
0x12, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x31, 0x10,
0x12, 0x33, 0x34, 0x43, 0x33, 0x33, 0x33, 0x44, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x31, 0x10,
0x12, 0x33, 0x34, 0x44, 0x53, 0x33, 0x33, 0x44, 0x45, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x31, 0x10,
0x12, 0x33, 0x34, 0x44, 0x43, 0x33, 0x33, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x31, 0x10,
0x12, 0x33, 0x33, 0x54, 0x44, 0x53, 0x33, 0x34, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x31, 0x10,
0x12, 0x33, 0x33, 0x34, 0x44, 0x43, 0x33, 0x33, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x31, 0x10,
0x12, 0x33, 0x33, 0x33, 0x44, 0x44, 0x33, 0x33, 0x54, 0x44, 0x53, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x31, 0x10,
0x12, 0x33, 0x33, 0x33, 0x54, 0x44, 0x53, 0x33, 0x34, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x31, 0x10,
0x12, 0x33, 0x33, 0x33, 0x34, 0x44, 0x43, 0x33, 0x33, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x31, 0x10,
0x12, 0x33, 0x43, 0x33, 0x33, 0x44, 0x44, 0x33, 0x33, 0x54, 0x44, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x31, 0x10,
0x12, 0x33, 0x44, 0x33, 0x33, 0x34, 0x44, 0x33, 0x33, 0x33, 0x44, 0x45, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x31, 0x10,
0x12, 0x33, 0x44, 0x53, 0x33, 0x34, 0x44, 0x43, 0x33, 0x33, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x31, 0x10,
0x12, 0x33, 0x44, 0x43, 0x33, 0x33, 0x54, 0x44, 0x33, 0x33, 0x34, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x31, 0x10,
0x12, 0x33, 0x44, 0x44, 0x33, 0x33, 0x34, 0x44, 0x33, 0x33, 0x33, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x43, 0x33, 0x31, 0x10,
0x12, 0x33, 0x44, 0x44, 0x43, 0x33, 0x33, 0x44, 0x44, 0x33, 0x33, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x33, 0x31, 0x10,
0x12, 0x33, 0x44, 0x44, 0x43, 0x33, 0x33, 0x44, 0x44, 0x33, 0x33, 0x34, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x33, 0x31, 0x10,
0x12, 0x33, 0x44, 0x44, 0x44, 0x43, 0x33, 0x34, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x31, 0x10,
0x12, 0x33, 0x44, 0x44, 0x43, 0x33, 0x33, 0x44, 0x44, 0x33, 0x33, 0x34, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x33, 0x31, 0x10,
0x12, 0x33, 0x44, 0x44, 0x43, 0x33, 0x33, 0x44, 0x44, 0x33, 0x33, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x33, 0x31, 0x10,
0x12, 0x33, 0x44, 0x44, 0x33, 0x33, 0x34, 0x44, 0x33, 0x33, 0x33, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x43, 0x33, 0x31, 0x10,
0x12, 0x33, 0x44, 0x43, 0x33, 0x33, 0x54, 0x44, 0x33, 0x33, 0x34, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x31, 0x10,
0x12, 0x33, 0x44, 0x53, 0x33, 0x34, 0x44, 0x43, 0x33, 0x33, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x31, 0x10,
0x12, 0x33, 0x44, 0x33, 0x33, 0x34, 0x44, 0x33, 0x33, 0x33, 0x44, 0x45, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x31, 0x10,
0x12, 0x33, 0x43, 0x33, 0x33, 0x44, 0x44, 0x33, 0x33, 0x54, 0x44, 0x33, 0x33, 0x32, 0x11, 0x23, 0x33, 0x32, 0x11, 0x11, 0x11, 0x23, 0x33, 0x22, 0x11, 0x53, 0x33, 0x33, 0x52, 0x11, 0x23, 0x33, 0x33, 0x11, 0x11, 0x11, 0x12, 0x32, 0x11, 0x11, 0x15, 0x33, 0x33, 0x31, 0x10,
0x12, 0x33, 0x43, 0x33, 0x34, 0x44, 0x43, 0x33, 0x33, 0x44, 0x44, 0x33, 0x33, 0x11, 0x11, 0x11, 0x53, 0x31, 0x11, 0x11, 0x11, 0x23, 0x32, 0x11, 0x11, 0x11, 0x33, 0x32, 0x11, 0x11, 0x11, 0x33, 0x33, 0x11, 0x11, 0x11, 0x12, 0x31, 0x11, 0x11, 0x11, 0x53, 0x33, 0x31, 0x10,
0x12, 0x33, 0x33, 0x33, 0x54, 0x44, 0x53, 0x33, 0x34, 0x44, 0x43, 0x33, 0x33, 0x13, 0x33, 0x31, 0x23, 0x31, 0x13, 0x33, 0x33, 0x33, 0x11, 0x33, 0x33, 0x21, 0x33, 0x51, 0x23, 0x33, 0x31, 0x23, 0x33, 0x11, 0x33, 0x33, 0x33, 0x31, 0x13, 0x33, 0x31, 0x13, 0x33, 0x31, 0x10,
0x12, 0x33, 0x33, 0x33, 0x44, 0x44, 0x33, 0x33, 0x54, 0x44, 0x53, 0x33, 0x33, 0x12, 0x53, 0x33, 0x33, 0x31, 0x13, 0x33, 0x33, 0x33, 0x11, 0x33, 0x33, 0x33, 0x33, 0x21, 0x53, 0x33, 0x33, 0x33, 0x33, 0x11, 0x33, 0x33, 0x33, 0x31, 0x13, 0x33, 0x31, 0x13, 0x33, 0x31, 0x10,
0x12, 0x33, 0x33, 0x34, 0x44, 0x43, 0x33, 0x33, 0x44, 0x44, 0x33, 0x33, 0x33, 0x32, 0x21, 0x11, 0x23, 0x31, 0x11, 0x11, 0x11, 0x33, 0x11, 0x33, 0x21, 0x11, 0x23, 0x11, 0x33, 0x31, 0x11, 0x13, 0x33, 0x11, 0x11, 0x11, 0x23, 0x31, 0x11, 0x11, 0x12, 0x33, 0x33, 0x31, 0x10,
0x12, 0x33, 0x33, 0x54, 0x44, 0x53, 0x33, 0x35, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x35, 0x21, 0x13, 0x31, 0x13, 0x33, 0x33, 0x33, 0x11, 0x33, 0x21, 0x11, 0x13, 0x11, 0x33, 0x31, 0x11, 0x13, 0x33, 0x11, 0x33, 0x33, 0x33, 0x31, 0x11, 0x11, 0x12, 0x33, 0x33, 0x31, 0x10,
0x12, 0x33, 0x34, 0x44, 0x43, 0x33, 0x33, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x13, 0x33, 0x31, 0x13, 0x31, 0x13, 0x33, 0x33, 0x33, 0x11, 0x33, 0x33, 0x21, 0x13, 0x51, 0x23, 0x33, 0x31, 0x13, 0x33, 0x11, 0x33, 0x33, 0x33, 0x31, 0x13, 0x33, 0x31, 0x13, 0x33, 0x31, 0x10,
0x12, 0x33, 0x34, 0x44, 0x53, 0x33, 0x33, 0x44, 0x45, 0x33, 0x33, 0x33, 0x33, 0x21, 0x11, 0x11, 0x23, 0x31, 0x11, 0x11, 0x11, 0x23, 0x32, 0x11, 0x11, 0x12, 0x13, 0x32, 0x11, 0x11, 0x12, 0x13, 0x33, 0x11, 0x11, 0x11, 0x12, 0x31, 0x13, 0x33, 0x31, 0x13, 0x33, 0x31, 0x10,
0x12, 0x33, 0x34, 0x45, 0x33, 0x33, 0x33, 0x44, 0x53, 0x33, 0x33, 0x33, 0x33, 0x32, 0x21, 0x15, 0x33, 0x32, 0x11, 0x11, 0x11, 0x23, 0x33, 0x22, 0x12, 0x35, 0x23, 0x33, 0x52, 0x12, 0x25, 0x13, 0x33, 0x11, 0x11, 0x11, 0x12, 0x32, 0x23, 0x33, 0x31, 0x23, 0x33, 0x31, 0x10,
0x12, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x31, 0x10,
0x12, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x31, 0x10,
0x11, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x51, 0x10,
0x11, 0x12, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x11, 0x10,
0x01, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x00,
0x00, 0x01, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00
};
GUI_CONST_STORAGE GUI_BITMAP bmSeggerLogoBlue = {
89, /* XSize */
42, /* YSize */
45, /* BytesPerLine */
4, /* BitsPerPixel */
acSeggerLogoBlue, /* Pointer to picture data (indices) */
&PalSeggerLogoBlue /* Pointer to palette */
};
#else /* (LCD_YSIZE < 90) */
/*********************************************************************
*
* SEGGER logo, 90% size
*
**********************************************************************
*/
GUI_CONST_STORAGE unsigned char acSeggerLogoBlue[] = {
0x00, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x00,
0x01, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00,
0x11, 0x11, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x11, 0x10,
0x11, 0x13, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x11, 0x10,
0x11, 0x23, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x11, 0x10,
0x11, 0x23, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x34, 0x44, 0x33, 0x33, 0x33, 0x33, 0x34, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x34, 0x44, 0x33, 0x33, 0x33, 0x33, 0x34, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x34, 0x44, 0x45, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x53, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x34, 0x44, 0x44, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x33, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x44, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x33, 0x34, 0x44, 0x45, 0x33, 0x33, 0x33, 0x54, 0x44, 0x44, 0x53, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x33, 0x34, 0x44, 0x44, 0x53, 0x33, 0x33, 0x34, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x33, 0x35, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x43, 0x33, 0x33, 0x35, 0x44, 0x44, 0x53, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x33, 0x33, 0x35, 0x44, 0x44, 0x45, 0x33, 0x33, 0x33, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x33, 0x33, 0x33, 0x54, 0x44, 0x44, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x44, 0x44, 0x53, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x43, 0x33, 0x33, 0x33, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x54, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x44, 0x33, 0x33, 0x33, 0x54, 0x44, 0x45, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x44, 0x43, 0x33, 0x33, 0x34, 0x44, 0x44, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x53, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x44, 0x43, 0x33, 0x33, 0x33, 0x44, 0x44, 0x43, 0x33, 0x33, 0x35, 0x44, 0x44, 0x45, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x44, 0x43, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x33, 0x33, 0x33, 0x54, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x44, 0x44, 0x45, 0x33, 0x33, 0x33, 0x44, 0x44, 0x44, 0x33, 0x33, 0x33, 0x54, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x43, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x44, 0x44, 0x44, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x43, 0x33, 0x33, 0x34, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x43, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x44, 0x44, 0x44, 0x43, 0x33, 0x33, 0x35, 0x44, 0x44, 0x45, 0x33, 0x33, 0x33, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x43, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x44, 0x44, 0x44, 0x44, 0x33, 0x33, 0x33, 0x54, 0x44, 0x44, 0x53, 0x33, 0x33, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x44, 0x44, 0x44, 0x44, 0x43, 0x33, 0x33, 0x34, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x44, 0x44, 0x44, 0x44, 0x33, 0x33, 0x33, 0x54, 0x44, 0x44, 0x53, 0x33, 0x33, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x44, 0x44, 0x44, 0x43, 0x33, 0x33, 0x35, 0x44, 0x44, 0x44, 0x33, 0x33, 0x33, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x43, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x44, 0x44, 0x44, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x43, 0x33, 0x33, 0x34, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x43, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x44, 0x44, 0x33, 0x33, 0x33, 0x35, 0x44, 0x44, 0x53, 0x33, 0x33, 0x34, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x44, 0x43, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x33, 0x33, 0x33, 0x54, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x44, 0x43, 0x33, 0x33, 0x33, 0x44, 0x44, 0x43, 0x33, 0x33, 0x35, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x44, 0x43, 0x33, 0x33, 0x35, 0x44, 0x44, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x53, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x44, 0x33, 0x33, 0x33, 0x54, 0x44, 0x45, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x43, 0x33, 0x33, 0x33, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x54, 0x44, 0x43, 0x33, 0x33, 0x32, 0x21, 0x11, 0x22, 0x33, 0x33, 0x32, 0x11, 0x11, 0x11, 0x11, 0x12, 0x33, 0x35, 0x22, 0x11, 0x12, 0x53, 0x33, 0x33, 0x33, 0x52, 0x21, 0x12, 0x53, 0x33, 0x33, 0x32, 0x11, 0x11, 0x11, 0x11, 0x12, 0x33, 0x21, 0x11, 0x11, 0x11, 0x25, 0x33, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x43, 0x33, 0x33, 0x34, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x44, 0x44, 0x53, 0x33, 0x33, 0x11, 0x11, 0x11, 0x11, 0x13, 0x33, 0x31, 0x11, 0x11, 0x11, 0x11, 0x12, 0x33, 0x31, 0x11, 0x11, 0x11, 0x11, 0x33, 0x33, 0x32, 0x11, 0x11, 0x11, 0x11, 0x33, 0x33, 0x31, 0x11, 0x11, 0x11, 0x11, 0x12, 0x33, 0x11, 0x11, 0x11, 0x11, 0x11, 0x53, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x33, 0x33, 0x33, 0x54, 0x44, 0x44, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x33, 0x33, 0x33, 0x11, 0x23, 0x33, 0x51, 0x13, 0x33, 0x31, 0x11, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x25, 0x33, 0x52, 0x11, 0x33, 0x33, 0x21, 0x12, 0x53, 0x52, 0x11, 0x13, 0x33, 0x31, 0x11, 0x33, 0x33, 0x33, 0x33, 0x33, 0x11, 0x13, 0x33, 0x32, 0x11, 0x23, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x43, 0x33, 0x33, 0x35, 0x44, 0x44, 0x53, 0x33, 0x33, 0x33, 0x11, 0x25, 0x33, 0x33, 0x33, 0x33, 0x31, 0x11, 0x33, 0x33, 0x33, 0x33, 0x32, 0x15, 0x33, 0x33, 0x33, 0x33, 0x33, 0x32, 0x11, 0x53, 0x33, 0x33, 0x33, 0x33, 0x33, 0x31, 0x11, 0x33, 0x33, 0x33, 0x33, 0x33, 0x11, 0x13, 0x33, 0x33, 0x11, 0x13, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x33, 0x33, 0x44, 0x44, 0x44, 0x33, 0x33, 0x33, 0x34, 0x44, 0x45, 0x33, 0x33, 0x33, 0x33, 0x11, 0x11, 0x11, 0x22, 0x33, 0x33, 0x31, 0x11, 0x11, 0x11, 0x11, 0x23, 0x31, 0x13, 0x33, 0x33, 0x33, 0x33, 0x33, 0x31, 0x11, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x31, 0x11, 0x11, 0x11, 0x11, 0x23, 0x33, 0x11, 0x13, 0x33, 0x32, 0x11, 0x23, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x33, 0x35, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x35, 0x22, 0x11, 0x11, 0x13, 0x33, 0x31, 0x11, 0x11, 0x11, 0x11, 0x23, 0x31, 0x13, 0x33, 0x32, 0x11, 0x11, 0x23, 0x31, 0x11, 0x33, 0x32, 0x11, 0x11, 0x12, 0x33, 0x31, 0x11, 0x11, 0x11, 0x11, 0x23, 0x33, 0x11, 0x11, 0x11, 0x11, 0x12, 0x33, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x33, 0x34, 0x44, 0x44, 0x53, 0x33, 0x33, 0x35, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x35, 0x21, 0x12, 0x33, 0x31, 0x11, 0x33, 0x33, 0x33, 0x33, 0x31, 0x13, 0x33, 0x32, 0x11, 0x11, 0x13, 0x31, 0x11, 0x33, 0x32, 0x11, 0x11, 0x11, 0x33, 0x31, 0x11, 0x33, 0x33, 0x33, 0x33, 0x33, 0x11, 0x11, 0x11, 0x11, 0x12, 0x33, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x33, 0x34, 0x44, 0x45, 0x33, 0x33, 0x33, 0x54, 0x44, 0x44, 0x53, 0x33, 0x33, 0x33, 0x33, 0x15, 0x33, 0x33, 0x35, 0x11, 0x33, 0x31, 0x11, 0x33, 0x33, 0x33, 0x33, 0x32, 0x15, 0x33, 0x33, 0x33, 0x31, 0x13, 0x32, 0x11, 0x53, 0x33, 0x33, 0x31, 0x11, 0x33, 0x31, 0x11, 0x33, 0x33, 0x33, 0x33, 0x33, 0x11, 0x13, 0x33, 0x32, 0x11, 0x23, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x33, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x44, 0x44, 0x44, 0x33, 0x33, 0x33, 0x33, 0x33, 0x11, 0x33, 0x33, 0x33, 0x11, 0x33, 0x31, 0x11, 0x33, 0x33, 0x33, 0x33, 0x35, 0x12, 0x33, 0x33, 0x33, 0x21, 0x13, 0x35, 0x11, 0x23, 0x33, 0x33, 0x21, 0x11, 0x33, 0x31, 0x11, 0x33, 0x33, 0x33, 0x33, 0x33, 0x11, 0x13, 0x33, 0x33, 0x11, 0x13, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x34, 0x44, 0x44, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x33, 0x11, 0x15, 0x33, 0x32, 0x12, 0x33, 0x31, 0x11, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x25, 0x33, 0x32, 0x11, 0x13, 0x33, 0x21, 0x12, 0x53, 0x32, 0x11, 0x11, 0x33, 0x31, 0x11, 0x33, 0x33, 0x33, 0x33, 0x33, 0x11, 0x13, 0x33, 0x33, 0x11, 0x13, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x34, 0x44, 0x45, 0x33, 0x33, 0x33, 0x34, 0x44, 0x44, 0x53, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x11, 0x11, 0x11, 0x13, 0x33, 0x31, 0x11, 0x11, 0x11, 0x11, 0x12, 0x33, 0x31, 0x11, 0x11, 0x11, 0x12, 0x13, 0x33, 0x32, 0x11, 0x11, 0x11, 0x12, 0x11, 0x33, 0x31, 0x11, 0x11, 0x11, 0x11, 0x12, 0x33, 0x11, 0x13, 0x33, 0x33, 0x21, 0x13, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x34, 0x44, 0x53, 0x33, 0x33, 0x33, 0x34, 0x44, 0x45, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x35, 0x22, 0x11, 0x12, 0x53, 0x33, 0x32, 0x11, 0x11, 0x11, 0x11, 0x12, 0x33, 0x35, 0x22, 0x11, 0x22, 0x35, 0x23, 0x33, 0x33, 0x52, 0x21, 0x22, 0x35, 0x12, 0x33, 0x32, 0x11, 0x11, 0x11, 0x11, 0x12, 0x33, 0x21, 0x23, 0x33, 0x33, 0x51, 0x23, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x21, 0x10,
0x11, 0x23, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x11, 0x10,
0x11, 0x13, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x35, 0x11, 0x10,
0x11, 0x11, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x11, 0x10,
0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00,
0x00, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x00,
0x00, 0x00, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x00, 0x00
};
GUI_CONST_STORAGE GUI_BITMAP bmSeggerLogoBlue = {
123, /* XSize */
58, /* YSize */
62, /* BytesPerLine */
4, /* BitsPerPixel */
acSeggerLogoBlue, /* Pointer to picture data (indices) */
&PalSeggerLogoBlue /* Pointer to palette */
};
#endif /* (LCD_YSIZE < 90) */
/* *** End of file *** */
@@ -0,0 +1,166 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : BUTTON.h
Purpose : BUTTON public header file (API)
--------------------END-OF-HEADER-------------------------------------
*/
#ifndef BUTTON_H
#define BUTTON_H
#include "WM.h"
#include "DIALOG_Intern.h" /* Req. for Create indirect data structure */
#include "WIDGET.h"
#if defined(__cplusplus)
extern "C" { /* Make sure we have C-declarations in C++ programs */
#endif
#if GUI_WINSUPPORT
/************************************************************
*
* Create flags
*/
/* For compatibility only ! */
#define BUTTON_CF_HIDE WM_CF_HIDE
#define BUTTON_CF_SHOW WM_CF_SHOW
#define BUTTON_CF_MEMDEV WM_CF_MEMDEV
/*********************************************************************
*
* Color indices
*/
#define BUTTON_CI_UNPRESSED 0
#define BUTTON_CI_PRESSED 1
#define BUTTON_CI_DISABLED 2
/*********************************************************************
*
* Bitmap indices
*/
#define BUTTON_BI_UNPRESSED 0
#define BUTTON_BI_PRESSED 1
#define BUTTON_BI_DISABLED 2
/************************************************************
*
* Messages
*/
/************************************************************
*
* States
*/
#define BUTTON_STATE_FOCUS WIDGET_STATE_FOCUS
#define BUTTON_STATE_PRESSED WIDGET_STATE_USER0
/************************************************************
*
* Types
*
*************************************************************
*/
typedef WM_HMEM BUTTON_Handle;
/************************************************************
*
* Create function(s)
Note: the parameters to a create function may vary.
Some widgets may have multiple create functions
*/
BUTTON_Handle BUTTON_Create (int x0, int y0, int xsize, int ysize, int ID, int Flags);
BUTTON_Handle BUTTON_CreateAsChild (int x0, int y0, int xsize, int ysize, WM_HWIN hParent, int Id, int Flags);
BUTTON_Handle BUTTON_CreateIndirect(const GUI_WIDGET_CREATE_INFO* pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK* cb);
BUTTON_Handle BUTTON_CreateEx (int x0, int y0, int xsize, int ysize, WM_HWIN hParent,
int WinFlags, int ExFlags, int Id);
/*********************************************************************
*
* Standard member functions
*
**********************************************************************
*/
GUI_COLOR BUTTON_GetDefaultBkColor (unsigned Index);
const GUI_FONT GUI_UNI_PTR * BUTTON_GetDefaultFont (void);
int BUTTON_GetDefaultTextAlign(void);
GUI_COLOR BUTTON_GetDefaultTextColor(unsigned Index);
void BUTTON_SetDefaultBkColor (GUI_COLOR Color, unsigned Index);
void BUTTON_SetDefaultFont (const GUI_FONT GUI_UNI_PTR * pFont);
void BUTTON_SetDefaultTextAlign(int Align);
void BUTTON_SetDefaultTextColor(GUI_COLOR Color, unsigned Index);
#define BUTTON_EnableMemdev(hObj) WM_EnableMemdev (hObj)
#define BUTTON_DisableMemdev(hObj) WM_DisableMemdev (hObj)
#define BUTTON_Delete(hObj) WM_DeleteWindow (hObj)
#define BUTTON_Paint(hObj) WM_Paint (hObj)
#define BUTTON_Invalidate(hObj) WM_InvalidateWindow(hObj)
/*********************************************************************
*
* The callback ...
*
* Do not call it directly ! It is only to be used from within an
* overwritten callback.
*/
void BUTTON_Callback(WM_MESSAGE *pMsg);
/*********************************************************************
*
* Member functions
*
**********************************************************************
*/
GUI_COLOR BUTTON_GetBkColor (BUTTON_Handle hObj, unsigned int Index);
const GUI_FONT GUI_UNI_PTR * BUTTON_GetFont(BUTTON_Handle hObj);
void BUTTON_GetText (BUTTON_Handle hObj, char * pBuffer, int MaxLen);
GUI_COLOR BUTTON_GetTextColor (BUTTON_Handle hObj, unsigned int Index);
unsigned BUTTON_IsPressed (BUTTON_Handle hObj);
void BUTTON_SetBitmap (BUTTON_Handle hObj, unsigned int Index, const GUI_BITMAP * pBitmap);
void BUTTON_SetBitmapEx (BUTTON_Handle hObj, unsigned int Index, const GUI_BITMAP * pBitmap, int x, int y);
void BUTTON_SetBkColor (BUTTON_Handle hObj, unsigned int Index, GUI_COLOR Color);
void BUTTON_SetBMP (BUTTON_Handle hObj, unsigned int Index, const void * pBitmap);
void BUTTON_SetBMPEx (BUTTON_Handle hObj, unsigned int Index, const void * pBitmap, int x, int y);
void BUTTON_SetFont (BUTTON_Handle hObj, const GUI_FONT GUI_UNI_PTR * pfont);
void BUTTON_SetState (BUTTON_Handle hObj, int State); /* Not to be doc. */
void BUTTON_SetPressed (BUTTON_Handle hObj, int State);
void BUTTON_SetFocussable (BUTTON_Handle hObj, int State);
void BUTTON_SetStreamedBitmap (BUTTON_Handle hObj, unsigned int Index, const GUI_BITMAP_STREAM * pBitmap);
void BUTTON_SetStreamedBitmapEx(BUTTON_Handle hObj, unsigned int Index, const GUI_BITMAP_STREAM * pBitmap, int x, int y);
void BUTTON_SetText (BUTTON_Handle hObj, const char* s);
void BUTTON_SetTextAlign (BUTTON_Handle hObj, int Align);
void BUTTON_SetTextColor (BUTTON_Handle hObj, unsigned int Index, GUI_COLOR Color);
void BUTTON_SetSelfDrawEx (BUTTON_Handle hObj, unsigned int Index, void (*pDraw)(void), int x, int y); /* Not to be doc. */
void BUTTON_SetSelfDraw (BUTTON_Handle hObj, unsigned int Index, void (*pDraw)(void)); /* Not to be doc. */
/************************************************************
*
* States
*/
#define BUTTON_STATE_HASFOCUS 0
#endif /* BUTTON_H */
#if defined(__cplusplus)
}
#endif
#endif /* BUTTON_H */
@@ -0,0 +1,65 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : BUTTON_Private.h
Purpose : BUTTON private header file
--------------------END-OF-HEADER-------------------------------------
*/
#ifndef BUTTON_PRIVATE_H
#define BUTTON_PRIVATE_H
#include "WM.h"
#include "BUTTON.h"
#if GUI_WINSUPPORT
#define BUTTON_ID 0x42555454
#define BUTTON_H2P(h) (BUTTON_Obj*) GUI_ALLOC_h2p(h)
#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
#define BUTTON_ASSERT_IS_VALID_PTR(p) GUI_DEBUG_ERROROUT_IF(p->DebugId != BUTTON_ID, "BUTTON.C: Wrong handle type or object not init'ed")
#define BUTTON_INIT_ID(p) p->DebugId = BUTTON_ID
#define BUTTON_DEINIT_ID(p) p->DebugId = BUTTON_ID+1
#else
#define BUTTON_ASSERT_IS_VALID_PTR(p)
#define BUTTON_INIT_ID(p)
#define BUTTON_DEINIT_ID(p)
#endif
typedef struct {
GUI_COLOR aBkColor[3];
GUI_COLOR aTextColor[3];
const GUI_FONT GUI_UNI_PTR * pFont;
I16 Align;
} BUTTON_PROPS;
typedef struct {
WIDGET Widget;
BUTTON_PROPS Props;
WM_HMEM hpText;
WM_HMEM ahDrawObj[3];
#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
int DebugId;
#endif
} BUTTON_Obj;
extern BUTTON_PROPS BUTTON__DefaultProps;
void BUTTON__SetDrawObj(BUTTON_Handle hObj, int Index, GUI_DRAW_HANDLE hDrawObj);
#endif /* GUI_WINSUPPORT */
#endif /* BUTTON_H */
@@ -0,0 +1,124 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : CHECKBOX.h
Purpose : CHECKBOX include
--------------------END-OF-HEADER-------------------------------------
*/
#ifndef CHECKBOX_H
#define CHECKBOX_H
#include "WM.h"
#include "DIALOG_Intern.h" /* Req. for Create indirect data structure */
#if GUI_WINSUPPORT
#if defined(__cplusplus)
extern "C" { /* Make sure we have C-declarations in C++ programs */
#endif
/*********************************************************************
*
* defines
*
**********************************************************************
*/
/*********************************************************************
*
* Bitmap indices
*/
#define CHECKBOX_BI_INACTIV 0
#define CHECKBOX_BI_ACTIV 1
#define CHECKBOX_BI_INACTIV_3STATE 2
#define CHECKBOX_BI_ACTIV_3STATE 3
/*********************************************************************
*
* Public Types
*
**********************************************************************
*/
typedef WM_HMEM CHECKBOX_Handle;
/*********************************************************************
*
* Create functions
*
**********************************************************************
*/
CHECKBOX_Handle CHECKBOX_Create (int x0, int y0, int xsize, int ysize, WM_HWIN hParent, int Id, int Flags);
CHECKBOX_Handle CHECKBOX_CreateIndirect(const GUI_WIDGET_CREATE_INFO* pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK* cb);
CHECKBOX_Handle CHECKBOX_CreateEx (int x0, int y0, int xsize, int ysize, WM_HWIN hParent,
int WinFlags, int ExFlags, int Id);
/*********************************************************************
*
* Standard member functions
*
**********************************************************************
*/
int CHECKBOX_GetDefaultAlign (void);
GUI_COLOR CHECKBOX_GetDefaultBkColor (void);
const GUI_FONT GUI_UNI_PTR * CHECKBOX_GetDefaultFont (void);
int CHECKBOX_GetDefaultSpacing (void);
int CHECKBOX_GetDefaultTextAlign(void);
GUI_COLOR CHECKBOX_GetDefaultTextColor(void);
void CHECKBOX_SetDefaultAlign (int Align);
void CHECKBOX_SetDefaultBkColor (GUI_COLOR Color);
void CHECKBOX_SetDefaultFont (const GUI_FONT GUI_UNI_PTR * pFont);
void CHECKBOX_SetDefaultImage (const GUI_BITMAP * pBitmap, unsigned int Index);
void CHECKBOX_SetDefaultSpacing (int Spacing);
void CHECKBOX_SetDefaultTextAlign(int Align);
void CHECKBOX_SetDefaultTextColor(GUI_COLOR Color);
/*********************************************************************
*
* Member functions
*
**********************************************************************
*/
int CHECKBOX_GetState (CHECKBOX_Handle hObj);
int CHECKBOX_IsChecked (CHECKBOX_Handle hObj);
void CHECKBOX_SetBkColor (CHECKBOX_Handle hObj, GUI_COLOR Color);
void CHECKBOX_SetFont (CHECKBOX_Handle hObj, const GUI_FONT GUI_UNI_PTR * pFont);
void CHECKBOX_SetImage (CHECKBOX_Handle hObj, const GUI_BITMAP * pBitmap, unsigned int Index);
void CHECKBOX_SetNumStates(CHECKBOX_Handle hObj, unsigned NumStates);
void CHECKBOX_SetSpacing (CHECKBOX_Handle hObj, unsigned Spacing);
void CHECKBOX_SetState (CHECKBOX_Handle hObj, unsigned State);
void CHECKBOX_SetText (CHECKBOX_Handle hObj, const char * pText);
void CHECKBOX_SetTextAlign(CHECKBOX_Handle hObj, int Align);
void CHECKBOX_SetTextColor(CHECKBOX_Handle hObj, GUI_COLOR Color);
/*********************************************************************
*
* Macros for compatibility
*
**********************************************************************
*/
#define CHECKBOX_Check(hObj) CHECKBOX_SetState(hObj, 1)
#define CHECKBOX_Uncheck(hObj) CHECKBOX_SetState(hObj, 0)
#if defined(__cplusplus)
}
#endif
#endif /* if GUI_WINSUPPORT */
#endif /* CHECKBOX_H */
@@ -0,0 +1,103 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : CHECKBOX_Private.h
Purpose : CHECKBOX private header file
--------------------END-OF-HEADER-------------------------------------
*/
#ifndef CHECKBOX_PRIVATE_H
#define CHECKBOX_PRIVATE_H
#include "WM.h"
#include "WIDGET.h"
#include "CHECKBOX.h"
#if GUI_WINSUPPORT
/*********************************************************************
*
* Defines
*
**********************************************************************
*/
#ifndef CHECKBOX_BKCOLOR0_DEFAULT
#define CHECKBOX_BKCOLOR0_DEFAULT 0x808080 /* Inactive color */
#endif
#ifndef CHECKBOX_BKCOLOR1_DEFAULT
#define CHECKBOX_BKCOLOR1_DEFAULT GUI_WHITE /* Active color */
#endif
#ifndef CHECKBOX_FGCOLOR0_DEFAULT
#define CHECKBOX_FGCOLOR0_DEFAULT 0x101010
#endif
#ifndef CHECKBOX_FGCOLOR1_DEFAULT
#define CHECKBOX_FGCOLOR1_DEFAULT GUI_BLACK
#endif
/*********************************************************************
*
* Object definition
*
**********************************************************************
*/
typedef struct {
const GUI_FONT GUI_UNI_PTR * pFont;
GUI_COLOR aBkColorBox[2]; /* Colors used to draw the box background */
GUI_COLOR BkColor; /* Widget background color */
GUI_COLOR TextColor;
I16 Align;
U8 Spacing;
const GUI_BITMAP * apBm[4];
} CHECKBOX_PROPS;
typedef struct {
WIDGET Widget;
CHECKBOX_PROPS Props;
U8 NumStates;
U8 CurrentState;
WM_HMEM hpText;
#if GUI_DEBUG_LEVEL > 1
int DebugId;
#endif
} CHECKBOX_Obj;
/*********************************************************************
*
* Macros for internal use
*
**********************************************************************
*/
#define CHECKBOX_H2P(h) (CHECKBOX_Obj*) GUI_ALLOC_h2p(h)
/*********************************************************************
*
* Public data (internal defaults)
*
**********************************************************************
*/
extern CHECKBOX_PROPS CHECKBOX__DefaultProps;
/*********************************************************************
*
* Extern data
*
**********************************************************************
*/
extern const GUI_BITMAP CHECKBOX__abmCheck[2];
#endif /* GUI_WINSUPPORT */
#endif /* CHECKBOX_PRIVATE_H */
@@ -0,0 +1,54 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : Dialog.h
Purpose : Dialog box include
----------------------------------------------------------------------
Open items:
None
--------------------END-OF-HEADER-------------------------------------
*/
#ifndef DIALOG_H
#define DIALOG_H
#include "WM.h"
#include "BUTTON.h"
#include "CHECKBOX.h"
#include "DROPDOWN.h"
#include "EDIT.h"
#include "FRAMEWIN.h"
#include "LISTBOX.h"
#include "MULTIEDIT.h"
#include "RADIO.h"
#include "SLIDER.h"
#include "TEXT.h"
#if GUI_WINSUPPORT
#if defined(__cplusplus)
extern "C" { /* Make sure we have C-declarations in C++ programs */
#endif
WM_HWIN WINDOW_CreateIndirect(const GUI_WIDGET_CREATE_INFO* pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK* cb);
void WINDOW_SetDefaultBkColor(GUI_COLOR Color);
#if defined(__cplusplus)
}
#endif
#endif
#endif
@@ -0,0 +1,98 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : Dialog.h
Purpose : Dialog box include
----------------------------------------------------------------------
Open items:
None
--------------------END-OF-HEADER-------------------------------------
*/
#ifndef DIALOG_INTERN_H
#define DIALOG_INTERN_H
#include "WM.h"
#if GUI_WINSUPPORT
#if defined(__cplusplus)
extern "C" { /* Make sure we have C-declarations in C++ programs */
#endif
/*********************************************************************
*
* typedefs
*
**********************************************************************
*/
typedef struct GUI_WIDGET_CREATE_INFO_struct GUI_WIDGET_CREATE_INFO;
typedef WM_HWIN GUI_WIDGET_CREATE_FUNC (const GUI_WIDGET_CREATE_INFO* pCreate, WM_HWIN hWin, int x0, int y0, WM_CALLBACK* cb);
/*********************************************************************
*
* structures
*
**********************************************************************
*/
struct GUI_WIDGET_CREATE_INFO_struct {
GUI_WIDGET_CREATE_FUNC* pfCreateIndirect;
const char* pName; /* Text ... Not used on all widgets */
I16 Id; /* ID ... should be unique in a dialog */
I16 x0, y0, xSize, ySize; /* Define position and size */
U16 Flags; /* Widget specific create flags (opt.) */
I32 Para; /* Widget specific parameter (opt.) */
};
/*********************************************************************
*
* Create functions for well known widgets
*
**********************************************************************
*/
WM_HWIN BUTTON_CreateIndirect (const GUI_WIDGET_CREATE_INFO* pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK* cb);
WM_HWIN CHECKBOX_CreateIndirect (const GUI_WIDGET_CREATE_INFO* pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK* cb);
WM_HWIN EDIT_CreateIndirect (const GUI_WIDGET_CREATE_INFO* pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK* cb);
WM_HWIN FRAMEWIN_CreateIndirect (const GUI_WIDGET_CREATE_INFO* pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK* cb);
WM_HWIN RADIO_CreateIndirect (const GUI_WIDGET_CREATE_INFO* pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK* cb);
WM_HWIN SLIDER_CreateIndirect (const GUI_WIDGET_CREATE_INFO* pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK* cb);
WM_HWIN SCROLLBAR_CreateIndirect(const GUI_WIDGET_CREATE_INFO* pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK* cb);
WM_HWIN TEXT_CreateIndirect (const GUI_WIDGET_CREATE_INFO* pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK* cb);
/*********************************************************************
*
* Public API functions
*
**********************************************************************
*/
int GUI_ExecDialogBox (const GUI_WIDGET_CREATE_INFO* paWidget, int NumWidgets, WM_CALLBACK* cb, WM_HWIN hParent, int x0, int y0);
int GUI_ExecCreatedDialog (WM_HWIN hDialog);
WM_HWIN GUI_CreateDialogBox (const GUI_WIDGET_CREATE_INFO* paWidget, int NumWidgets, WM_CALLBACK* cb, WM_HWIN hParent, int x0, int y0);
void GUI_SetDialogStatusPtr(WM_HWIN hDialog, WM_DIALOG_STATUS* pDialogStatus); /* not to documented */
WM_DIALOG_STATUS* GUI_GetDialogStatusPtr(WM_HWIN hDialog); /* not to documented */
void GUI_EndDialog(WM_HWIN hWin, int r);
LCD_COLOR DIALOG_GetBkColor(void); /* obsolete */
LCD_COLOR DIALOG_SetBkColor(LCD_COLOR BkColor); /* obsolete */
#if defined(__cplusplus)
}
#endif
#endif /* GUI_WINSUPPORT */
#endif
@@ -0,0 +1,117 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : DROPDOWN.h
Purpose : Multiple choice object include
--------------------END-OF-HEADER-------------------------------------
*/
#ifndef DROPDOWN_H
#define DROPDOWN_H
#include "WM.h"
#include "DIALOG_Intern.h" /* Req. for Create indirect data structure */
#if GUI_WINSUPPORT
#if defined(__cplusplus)
extern "C" { /* Make sure we have C-declarations in C++ programs */
#endif
typedef WM_HMEM DROPDOWN_Handle;
/************************************************************
*
* Create flags
*/
#define DROPDOWN_CF_AUTOSCROLLBAR (1 << 0)
#define DROPDOWN_CF_UP (1 << 1)
/*********************************************************************
*
* Color indices
*/
#define DROPDOWN_CI_UNSEL 0
#define DROPDOWN_CI_SEL 1
#define DROPDOWN_CI_SELFOCUS 2
/*********************************************************************
*
* Standard member functions
*
**********************************************************************
*/
#define DROPDOWN_EnableMemdev(hObj) WM_EnableMemdev(hObj)
#define DROPDOWN_DisableMemdev(hObj) WM_DisableMemdev(hObj)
#define DROPDOWN_Delete(hObj) WM_DeleteWindow(hObj)
#define DROPDOWN_Paint(hObj) WM_Paint(hObj)
#define DROPDOWN_Invalidate(hObj) WM_InvalidateWindow(hObj)
/*********************************************************************
*
* Create functions
*
**********************************************************************
*/
DROPDOWN_Handle DROPDOWN_Create (WM_HWIN hWinParent, int x0, int y0, int xsize, int ysize, int Flags);
DROPDOWN_Handle DROPDOWN_CreateIndirect(const GUI_WIDGET_CREATE_INFO* pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK* cb);
DROPDOWN_Handle DROPDOWN_CreateEx (int x0, int y0, int xsize, int ysize, WM_HWIN hParent,
int WinFlags, int ExFlags, int Id);
/*********************************************************************
*
* Member functions
*
**********************************************************************
*/
void DROPDOWN_AddKey (DROPDOWN_Handle hObj, int Key);
void DROPDOWN_AddString (DROPDOWN_Handle hObj, const char* s);
void DROPDOWN_Collapse (DROPDOWN_Handle hObj);
void DROPDOWN_DecSel (DROPDOWN_Handle hObj);
void DROPDOWN_DeleteItem (DROPDOWN_Handle hObj, unsigned int Index);
void DROPDOWN_Expand (DROPDOWN_Handle hObj);
unsigned DROPDOWN_GetItemSpacing (DROPDOWN_Handle hObj);
int DROPDOWN_GetNumItems (DROPDOWN_Handle hObj);
int DROPDOWN_GetSel (DROPDOWN_Handle hObj);
void DROPDOWN_IncSel (DROPDOWN_Handle hObj);
void DROPDOWN_InsertString (DROPDOWN_Handle hObj, const char* s, unsigned int Index);
void DROPDOWN_SetAutoScroll (DROPDOWN_Handle hObj, int OnOff);
void DROPDOWN_SetBkColor (DROPDOWN_Handle hObj, unsigned int index, GUI_COLOR color);
void DROPDOWN_SetFont (DROPDOWN_Handle hObj, const GUI_FONT GUI_UNI_PTR * pfont);
void DROPDOWN_SetItemSpacing (DROPDOWN_Handle hObj, unsigned Value);
void DROPDOWN_SetSel (DROPDOWN_Handle hObj, int Sel);
void DROPDOWN_SetScrollbarWidth(DROPDOWN_Handle hObj, unsigned Width);
void DROPDOWN_SetTextAlign (DROPDOWN_Handle hObj, int Align);
void DROPDOWN_SetTextColor (DROPDOWN_Handle hObj, unsigned int index, GUI_COLOR color);
void DROPDOWN_SetTextHeight (DROPDOWN_Handle hObj, unsigned TextHeight);
/*********************************************************************
*
* Global functions
*
**********************************************************************
*/
const GUI_FONT GUI_UNI_PTR * DROPDOWN_GetDefaultFont(void);
void DROPDOWN_SetDefaultFont(const GUI_FONT* pFont);
#if defined(__cplusplus)
}
#endif
#endif /* GUI_WINSUPPORT */
#endif /* DROPDOWN_H */
@@ -0,0 +1,66 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : DROPDOWN_Private.h
Purpose : DROPDOWN private header file
--------------------END-OF-HEADER-------------------------------------
*/
#ifndef DROPDOWN_PRIVATE_H
#define DROPDOWN_PRIVATE_H
#include "DROPDOWN.h"
#include "WIDGET.h"
#include "GUI_ARRAY.h"
#if GUI_WINSUPPORT
/************************************************************
*
* Create / Status flags
*/
#define DROPDOWN_SF_AUTOSCROLLBAR DROPDOWN_CF_AUTOSCROLLBAR
#define DROPDOWN_H2P(h) (DROPDOWN_Obj*) GUI_ALLOC_h2p(h)
typedef struct {
const GUI_FONT GUI_UNI_PTR * pFont;
GUI_COLOR aBackColor[3];
GUI_COLOR aTextColor[3];
I16 TextBorderSize;
I16 Align;
} DROPDOWN_PROPS;
typedef struct {
WIDGET Widget;
I16 Sel; /* current selection */
I16 ySizeEx; /* Drop down size */
I16 TextHeight;
GUI_ARRAY Handles;
WM_SCROLL_STATE ScrollState;
DROPDOWN_PROPS Props;
WM_HWIN hListWin;
U8 Flags;
U16 ItemSpacing;
U8 ScrollbarWidth;
char IsPressed;
#if GUI_DEBUG_LEVEL >1
int DebugId;
#endif
} DROPDOWN_Obj;
void DROPDOWN__AdjustHeight(DROPDOWN_Handle hObj, DROPDOWN_Obj* pObj);
#endif /* GUI_WINSUPPORT */
#endif /* DROPDOWN_PRIVATE_H */
@@ -0,0 +1,205 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : EDIT.h
Purpose : EDIT include
--------------------END-OF-HEADER-------------------------------------
*/
#ifndef EDIT_H
#define EDIT_H
#include "WM.h"
#include "DIALOG_Intern.h" /* Req. for Create indirect data structure */
#if GUI_WINSUPPORT
#if defined(__cplusplus)
extern "C" { /* Make sure we have C-declarations in C++ programs */
#endif
/*********************************************************************
*
* Defaults for configuration switches
*
**********************************************************************
The following are defaults for config switches which affect the
interface specified in this module
*/
/*********************************************************************
*
* Defines
*
**********************************************************************
*/
/************************************************************
*
* Create / Status flags
*/
#define EDIT_CF_LEFT GUI_TA_LEFT
#define EDIT_CF_RIGHT GUI_TA_RIGHT
#define EDIT_CF_HCENTER GUI_TA_HCENTER
#define EDIT_CF_VCENTER GUI_TA_VCENTER
#define EDIT_CF_TOP GUI_TA_TOP
#define EDIT_CF_BOTTOM GUI_TA_BOTTOM
/*********************************************************************
*
* Color indices
*/
#define EDIT_CI_DISABLED 0
#define EDIT_CI_ENABLED 1
/************************************************************
*
* States
*/
/*********************************************************************
*
* Types
*
**********************************************************************
*/
typedef WM_HMEM EDIT_Handle;
typedef void tEDIT_AddKeyEx (EDIT_Handle hObj, int Key);
typedef void tEDIT_UpdateBuffer(EDIT_Handle hObj);
/*
*************************************************************
* *
* Create function(s) *
* *
* (Constructors) *
* *
*************************************************************
*/
/* Note: the parameters to a create function may vary.
Some widgets may have multiple create functions */
EDIT_Handle EDIT_Create (int x0, int y0, int xsize, int ysize, int Id, int MaxLen, int Flags);
EDIT_Handle EDIT_CreateAsChild (int x0, int y0, int xsize, int ysize, WM_HWIN hParent, int Id, int Flags, int MaxLen);
EDIT_Handle EDIT_CreateIndirect(const GUI_WIDGET_CREATE_INFO* pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK* cb);
EDIT_Handle EDIT_CreateEx (int x0, int y0, int xsize, int ysize, WM_HWIN hParent,
int WinFlags, int ExFlags, int Id, int MaxLen);
/*
*************************************************************
* *
* Standard member functions *
* *
*************************************************************
*/
#define EDIT_EnableMemdev(hObj) WM_EnableMemdev(hObj)
#define EDIT_DisableMemdev(hObj) WM_DisableMemdev(hObj)
#define EDIT_Delete(hObj) WM_DeleteWindow(hObj)
#define EDIT_Paint(hObj) WM_Paint(hObj)
#define EDIT_Invalidate(hObj) WM_InvalidateWindow(hObj)
/*
*************************************************************
* *
* Individual member functions *
* *
*************************************************************
*/
/* Methods changing preferences */
void EDIT_SetDefaultBkColor(unsigned int Index, GUI_COLOR Color);
void EDIT_SetDefaultFont(const GUI_FONT* pFont);
void EDIT_SetDefaultTextAlign(int Align);
void EDIT_SetDefaultTextColor(unsigned int Index, GUI_COLOR Color);
/* Query preferences */
GUI_COLOR EDIT_GetDefaultBkColor(unsigned int Index);
const GUI_FONT GUI_UNI_PTR * EDIT_GetDefaultFont(void);
int EDIT_GetDefaultTextAlign(void);
GUI_COLOR EDIT_GetDefaultTextColor(unsigned int Index);
/* Methods changing properties */
void EDIT_AddKey (EDIT_Handle hObj, int Key);
void EDIT_ClearCursor (EDIT_Handle hObj);
void EDIT_SetBkColor (EDIT_Handle hObj, unsigned int Index, GUI_COLOR color);
void EDIT_SetCursorAtChar (EDIT_Handle hObj, int Pos);
void EDIT_SetCursorAtPixel (EDIT_Handle hObj, int xPos);
void EDIT_SetFont (EDIT_Handle hObj, const GUI_FONT GUI_UNI_PTR * pfont);
int EDIT_SetInsertMode (EDIT_Handle hObj, int OnOff);
void EDIT_SetMaxLen (EDIT_Handle hObj, int MaxLen);
void EDIT_SetpfAddKeyEx (EDIT_Handle hObj, tEDIT_AddKeyEx * pfAddKeyEx);
void EDIT_SetpfUpdateBuffer(EDIT_Handle hObj, tEDIT_UpdateBuffer * pfUpdateBuffer);
void EDIT_SetText (EDIT_Handle hObj, const char* s);
void EDIT_SetTextAlign (EDIT_Handle hObj, int Align);
void EDIT_SetTextColor (EDIT_Handle hObj, unsigned int Index, GUI_COLOR color);
void EDIT_SetSel (EDIT_Handle hObj, int FirstChar, int LastChar);
/* Get/Set user input */
float EDIT_GetFloatValue(EDIT_Handle hObj);
void EDIT_GetText (EDIT_Handle hObj, char* sDest, int MaxLen);
I32 EDIT_GetValue (EDIT_Handle hObj);
void EDIT_SetFloatValue(EDIT_Handle hObj, float Value);
void EDIT_SetValue (EDIT_Handle hObj, I32 Value);
int EDIT_GetNumChars (EDIT_Handle hObj);
/*********************************************************************
*
* Routines for editing values
*
**********************************************************************
*/
void EDIT_SetHexMode(EDIT_Handle hEdit, U32 Value, U32 Min, U32 Max);
void EDIT_SetBinMode(EDIT_Handle hEdit, U32 Value, U32 Min, U32 Max);
void EDIT_SetDecMode(EDIT_Handle hEdit, I32 Value, I32 Min, I32 Max, int Shift, U8 Flags);
void EDIT_SetFloatMode(EDIT_Handle hEdit, float Value, float Min, float Max, int Shift, U8 Flags);
U32 GUI_EditHex(U32 Value, U32 Min, U32 Max, int Len, int xsize);
U32 GUI_EditBin(U32 Value, U32 Min, U32 Max, int Len, int xsize);
I32 GUI_EditDec(I32 Value, I32 Min, I32 Max, int Len, int xsize, int Shift, U8 Flags);
float GUI_EditFloat(float Value, float Min, float Max, int Len, int xsize, int Shift, U8 Flags);
void GUI_EditString(char * pString, int Len, int xsize);
/*********************************************************************
*
* Flags
*
**********************************************************************
*/
/* Signed or normal mode */
#define GUI_EDIT_NORMAL 0
#define GUI_EDIT_SIGNED 1
/* Edit modes */
#define GUI_EDIT_MODE_INSERT 0
#define GUI_EDIT_MODE_OVERWRITE 1
/* Compatibility macros */
#define EDIT_CI_DISABELD EDIT_CI_DISABLED
#define EDIT_CI_ENABELD EDIT_CI_ENABLED
#if defined(__cplusplus)
}
#endif
#endif /* GUI_WINSUPPORT */
#endif /* EDIT_H */
@@ -0,0 +1,98 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : EDIT_Private.h
Purpose : Internal header file
---------------------------END-OF-HEADER------------------------------
*/
#if GUI_WINSUPPORT
#include "WIDGET.h"
/*********************************************************************
*
* Defines
*
**********************************************************************
*/
#define EDIT_REALLOC_SIZE 16
/*********************************************************************
*
* Types
*
**********************************************************************
*/
typedef struct EDIT_Obj_struct EDIT_Obj;
typedef struct {
int Align;
int Border;
const GUI_FONT GUI_UNI_PTR * pFont;
GUI_COLOR aTextColor[2];
GUI_COLOR aBkColor[2];
} EDIT_PROPS;
struct EDIT_Obj_struct {
WIDGET Widget;
WM_HMEM hpText;
I16 MaxLen;
U16 BufferSize;
I32 Min, Max; /* Min max values as normalized floats (integers) */
U8 NumDecs; /* Number of decimals */
U32 CurrentValue; /* Current value */
int CursorPos; /* Cursor position. 0 means left most */
unsigned SelSize; /* Number of selected characters */
U8 EditMode; /* Insert or overwrite mode */
U8 XSizeCursor; /* Size of cursor when working in insert mode */
U8 Flags;
tEDIT_AddKeyEx * pfAddKeyEx; /* Handle key input */
tEDIT_UpdateBuffer * pfUpdateBuffer; /* Update textbuffer */
EDIT_PROPS Props;
#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
int DebugId;
#endif
};
#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
EDIT_Obj* EDIT_h2p(EDIT_Handle h);
#define EDIT_H2P(h) EDIT_h2p(h)
#else
#define EDIT_H2P(h) ((EDIT_Obj*)GUI_ALLOC_h2p(h))
#endif
/*********************************************************************
*
* Public data (internal defaults)
*
**********************************************************************
*/
extern EDIT_PROPS EDIT__DefaultProps;
/*********************************************************************
*
* Public functions (internal)
*
**********************************************************************
*/
void EDIT__SetCursorPos (EDIT_Obj* pObj, int CursorPos);
U16 EDIT__GetCurrentChar (EDIT_Obj* pObj);
#endif /* GUI_WINSUPPORT */
@@ -0,0 +1,173 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : FRAMEWIN.h
Purpose : Frame window include
--------------------END-OF-HEADER-------------------------------------
*/
#ifndef FRAMEWIN_H
#define FRAMEWIN_H
#include "WM.h"
#if GUI_WINSUPPORT
#include "DIALOG_Intern.h" /* Req. for Create indirect data structure */
#if defined(__cplusplus)
extern "C" { /* Make sure we have C-declarations in C++ programs */
#endif
/************************************************************
*
* #defines
*
*************************************************************
*/
/************************************************************
*
* Create / Status flags
*/
#define FRAMEWIN_CF_ACTIVE (1<<3)
#define FRAMEWIN_CF_MOVEABLE (1<<4)
#define FRAMEWIN_CF_TITLEVIS (1<<5)
#define FRAMEWIN_CF_MINIMIZED (1<<6)
#define FRAMEWIN_CF_MAXIMIZED (1<<7)
#define FRAMEWIN_SF_ACTIVE FRAMEWIN_CF_ACTIVE
#define FRAMEWIN_SF_MOVEABLE FRAMEWIN_CF_MOVEABLE
#define FRAMEWIN_SF_TITLEVIS FRAMEWIN_CF_TITLEVIS
#define FRAMEWIN_SF_MINIMIZED FRAMEWIN_CF_MINIMIZED
#define FRAMEWIN_SF_MAXIMIZED FRAMEWIN_CF_MAXIMIZED
/************************************************************
*
* BUTTON Flags
*/
#define FRAMEWIN_BUTTON_RIGHT (1<<0)
#define FRAMEWIN_BUTTON_LEFT (1<<1)
/************************************************************
* *
* Types *
* *
*************************************************************
*/
typedef WM_HMEM FRAMEWIN_Handle;
/*********************************************************************
*
* Create functions
*
**********************************************************************
*/
FRAMEWIN_Handle FRAMEWIN_Create (const char* pTitle, WM_CALLBACK* cb, int Flags, int x0, int y0, int xsize, int ysize);
FRAMEWIN_Handle FRAMEWIN_CreateAsChild (int x0, int y0, int xsize, int ysize, WM_HWIN hParent, const char* pText, WM_CALLBACK* cb, int Flags);
FRAMEWIN_Handle FRAMEWIN_CreateIndirect(const GUI_WIDGET_CREATE_INFO* pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK* cb);
FRAMEWIN_Handle FRAMEWIN_CreateEx (int x0, int y0, int xsize, int ysize, WM_HWIN hParent,
int WinFlags, int ExFlags, int Id, const char* pTitle, WM_CALLBACK* cb);
/*********************************************************************
*
* Standard member functions
*
**********************************************************************
*/
#define FRAMEWIN_EnableMemdev(hObj) WM_EnableMemdev(hObj)
#define FRAMEWIN_DisableMemdev(hObj) WM_DisableMemdev(hObj)
#define FRAMEWIN_Delete(hObj) WM_DeleteWindow(hObj)
#define FRAMEWIN_Paint(hObj) WM_Paint(hObj)
#define FRAMEWIN_Invalidate(hObj) WM_InvalidateWindow(hObj)
WM_HWIN FRAMEWIN_AddButton (FRAMEWIN_Handle hObj, int Flags, int Off, int Id);
WM_HWIN FRAMEWIN_AddCloseButton(FRAMEWIN_Handle hObj, int Flags, int Off);
WM_HWIN FRAMEWIN_AddMaxButton (FRAMEWIN_Handle hObj, int Flags, int Off);
void FRAMEWIN_AddMenu (FRAMEWIN_Handle hObj, WM_HWIN hMenu);
WM_HWIN FRAMEWIN_AddMinButton (FRAMEWIN_Handle hObj, int Flags, int Off);
void FRAMEWIN_Minimize (FRAMEWIN_Handle hObj);
void FRAMEWIN_Maximize (FRAMEWIN_Handle hObj);
void FRAMEWIN_Restore (FRAMEWIN_Handle hObj);
/*********************************************************************
*
* Member functions: Set Properties
*
**********************************************************************
*/
void FRAMEWIN_SetActive (FRAMEWIN_Handle hObj, int State);
void FRAMEWIN_SetBarColor (FRAMEWIN_Handle hObj, unsigned Index, GUI_COLOR Color);
void FRAMEWIN_SetBorderSize (FRAMEWIN_Handle hObj, unsigned Size);
void FRAMEWIN_SetClientColor (FRAMEWIN_Handle hObj, GUI_COLOR Color);
void FRAMEWIN_SetFont (FRAMEWIN_Handle hObj, const GUI_FONT GUI_UNI_PTR * pFont);
void FRAMEWIN_SetMoveable (FRAMEWIN_Handle hObj, int State);
void FRAMEWIN_SetResizeable (FRAMEWIN_Handle hObj, int State);
void FRAMEWIN_SetText (FRAMEWIN_Handle hObj, const char* s);
void FRAMEWIN_SetTextAlign (FRAMEWIN_Handle hObj, int Align);
void FRAMEWIN_SetTextColor (FRAMEWIN_Handle hObj, GUI_COLOR Color);
void FRAMEWIN_SetTextColorEx (FRAMEWIN_Handle hObj, unsigned Index, GUI_COLOR Color);
void FRAMEWIN_SetTitleVis (FRAMEWIN_Handle hObj, int Show);
int FRAMEWIN_SetTitleHeight (FRAMEWIN_Handle hObj, int Height);
/*********************************************************************
*
* Member functions: Get Properties
*
**********************************************************************
*/
int FRAMEWIN_GetTitleHeight (FRAMEWIN_Handle hObj);
int FRAMEWIN_GetBorderSize (FRAMEWIN_Handle hObj);
int FRAMEWIN_IsMinimized (FRAMEWIN_Handle hObj);
int FRAMEWIN_IsMaximized (FRAMEWIN_Handle hObj);
/*********************************************************************
*
* Global functions
*
**********************************************************************
*/
GUI_COLOR FRAMEWIN_GetDefaultBarColor (unsigned Index);
int FRAMEWIN_GetDefaultBorderSize (void);
int FRAMEWIN_GetDefaultTitleHeight(void);
GUI_COLOR FRAMEWIN_GetDefaultClientColor(void);
const GUI_FONT GUI_UNI_PTR * FRAMEWIN_GetDefaultFont (void);
GUI_COLOR FRAMEWIN_GetDefaultTextColor (unsigned Index);
void FRAMEWIN_SetDefaultBarColor (unsigned Index, GUI_COLOR Color);
void FRAMEWIN_SetDefaultBorderSize (int DefaultBorderSize);
void FRAMEWIN_SetDefaultTitleHeight(int DefaultTitleHeight);
void FRAMEWIN_SetDefaultClientColor(GUI_COLOR Color);
void FRAMEWIN_SetDefaultFont (const GUI_FONT GUI_UNI_PTR * pFont);
void FRAMEWIN_SetDefaultTextColor (unsigned Index, GUI_COLOR Color);
/*********************************************************************
*
* Macros for compatibility
*
**********************************************************************
*/
#define FRAMEWIN_SetDefaultCaptionSize(Height) FRAMEWIN_SetDefaultTitleHeight(Height)
#define FRAMEWIN_GetDefaultCaptionSize() FRAMEWIN_GetDefaultTitleHeight()
#define FRAMEWIN_CreateButton(hObj, Flags, Off, Id) FRAMEWIN_AddButton(hObj, Flags, Off, Id)
#define FRAMEWIN_CreateCloseButton(hObj, Flags, Off) FRAMEWIN_AddCloseButton(hObj, Flags, Off)
#define FRAMEWIN_CreateMaxButton(hObj, Flags, Off) FRAMEWIN_AddMaxButton(hObj, Flags, Off)
#define FRAMEWIN_CreateMinButton(hObj, Flags, Off) FRAMEWIN_AddMinButton(hObj, Flags, Off)
#if defined(__cplusplus)
}
#endif
#endif
#endif /* FRAMEWIN_H */
@@ -0,0 +1,119 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : FRAMEWIN_Private.h
Purpose : FRAMEWIN private header file
--------------------END-OF-HEADER-------------------------------------
*/
#ifndef FRAMEWIN_PRIVATE_H
#define FRAMEWIN_PRIVATE_H
#include "WM.h"
#include "FRAMEWIN.h"
#include "WIDGET.h"
#include "GUI_HOOK.h"
#if GUI_WINSUPPORT
/*********************************************************************
*
* Object definition
*
**********************************************************************
*/
typedef struct {
const GUI_FONT GUI_UNI_PTR * pFont;
GUI_COLOR aBarColor[2];
GUI_COLOR aTextColor[2];
GUI_COLOR ClientColor;
I16 TitleHeight;
I16 BorderSize;
I16 IBorderSize;
} FRAMEWIN_PROPS;
typedef struct {
WIDGET Widget;
FRAMEWIN_PROPS Props;
WM_CALLBACK* cb;
WM_HWIN hClient;
WM_HWIN hMenu;
WM_HWIN hText;
GUI_RECT rRestore;
I16 TextAlign;
U16 Flags;
WM_HWIN hFocussedChild; /* Handle to focussed child .. default none (0) */
WM_DIALOG_STATUS* pDialogStatus;
GUI_HOOK* pFirstHook;
} FRAMEWIN_Obj;
/*********************************************************************
*
* Types
*
**********************************************************************
*/
typedef struct {
I16 TitleHeight;
I16 MenuHeight;
GUI_RECT rClient;
GUI_RECT rTitleText;
} POSITIONS;
/*********************************************************************
*
* Macros for internal use
*
**********************************************************************
*/
#define FRAMEWIN_H2P(h) (FRAMEWIN_Obj*) GUI_ALLOC_h2p(h)
/*********************************************************************
*
* public data (internal defaults)
*
**********************************************************************
*/
extern FRAMEWIN_PROPS FRAMEWIN__DefaultProps;
/*********************************************************************
*
* public functions (internal)
*
**********************************************************************
*/
void FRAMEWIN__CalcPositions (FRAMEWIN_Obj* pObj, POSITIONS* pPos);
int FRAMEWIN__CalcTitleHeight (FRAMEWIN_Obj* pObj);
void FRAMEWIN__UpdatePositions (FRAMEWIN_Obj* pObj);
void FRAMEWIN__UpdateButtons (FRAMEWIN_Obj* pObj, int OldHeight);
/*********************************************************************
*
* public functions
*
**********************************************************************
*/
const GUI_FONT GUI_UNI_PTR * FRAMEWIN_GetFont (FRAMEWIN_Handle hObj);
int FRAMEWIN_GetTitleHeight (FRAMEWIN_Handle hObj);
void FRAMEWIN_MinButtonSetState(WM_HWIN hButton, int State);
void FRAMEWIN_MaxButtonSetState(WM_HWIN hButton, int State);
#endif /* GUI_WINSUPPORT */
#endif /* FRAMEWIN_H */
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,172 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* ľC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : GUIDebug.h
Purpose : Debug macros
----------------------------------------------------------------------
Debug macros for logging
In the GUI Simulation, all output is transferred into the log window.
*/
#ifndef GUI_DEBUG_H
#define GUI_DEBUG_H
#include "GUI.h"
#include "GUI_X.h"
#define GUI_DEBUG_LEVEL_NOCHECK 0 /* No run time checks are performed */
#define GUI_DEBUG_LEVEL_CHECK_PARA 1 /* Parameter checks are performed to avoid crashes */
#define GUI_DEBUG_LEVEL_CHECK_ALL 2 /* Parameter checks and consistency checks are performed */
#define GUI_DEBUG_LEVEL_LOG_ERRORS 3 /* Errors are recorded */
#define GUI_DEBUG_LEVEL_LOG_WARNINGS 4 /* Errors & Warnings are recorded */
#define GUI_DEBUG_LEVEL_LOG_ALL 5 /* Errors, Warnings and Messages are recorded. */
#ifndef GUI_DEBUG_LEVEL
#ifdef WIN32
#define GUI_DEBUG_LEVEL GUI_DEBUG_LEVEL_LOG_WARNINGS /* Simulation should log all warnings */
#else
#define GUI_DEBUG_LEVEL GUI_DEBUG_LEVEL_CHECK_PARA /* For most targets, min. size is important */
#endif
#endif
/*******************************************************************
*
* Commandline
*
********************************************************************
*/
#ifdef WIN32
#define GUI_DEBUG_GETCMDLINE() SIM_GetCmdLine()
#else
#define GUI_DEBUG_GETCMDLINE() 0
#endif
/*******************************************************************
*
* Error macros
*
********************************************************************
*/
/* Make sure the macros are actually defined */
#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_LOG_ERRORS
#define GUI_DEBUG_ERROROUT(s) GUI_ErrorOut(s)
#define GUI_DEBUG_ERROROUT1(s,p0) GUI_ErrorOut1(s,p0)
#define GUI_DEBUG_ERROROUT2(s,p0,p1) GUI_ErrorOut2(s,p0,p1)
#define GUI_DEBUG_ERROROUT3(s,p0,p1,p2) GUI_ErrorOut3(s,p0,p1,p2)
#define GUI_DEBUG_ERROROUT4(s,p0,p1,p2,p3) GUI_ErrorOut4(s,p0,p1,p2,p3)
#define GUI_DEBUG_ERROROUT_IF(exp,s) { if (exp) GUI_DEBUG_ERROROUT(s); }
#define GUI_DEBUG_ERROROUT1_IF(exp,s,p0) { if (exp) GUI_DEBUG_ERROROUT1(s,p0); }
#define GUI_DEBUG_ERROROUT2_IF(exp,s,p0,p1) { if (exp) GUI_DEBUG_ERROROUT2(s,p0,p1); }
#define GUI_DEBUG_ERROROUT3_IF(exp,s,p0,p1,p2) { if (exp) GUI_DEBUG_ERROROUT3(s,p0,p1,p2); }
#define GUI_DEBUG_ERROROUT4_IF(exp,s,p0,p1,p2,p3) { if (exp) GUI_DEBUG_ERROROUT4(s,p0,p1,p2,p3); }
#else
#define GUI_DEBUG_ERROROUT(s)
#define GUI_DEBUG_ERROROUT1(s,p0)
#define GUI_DEBUG_ERROROUT2(s,p0,p1)
#define GUI_DEBUG_ERROROUT3(s,p0,p1,p2)
#define GUI_DEBUG_ERROROUT4(s,p0,p1,p2,p3)
#define GUI_DEBUG_ERROROUT_IF(exp,s)
#define GUI_DEBUG_ERROROUT1_IF(exp,s,p0)
#define GUI_DEBUG_ERROROUT2_IF(exp,s,p0,p1)
#define GUI_DEBUG_ERROROUT3_IF(exp,s,p0,p1,p2)
#define GUI_DEBUG_ERROROUT4_IF(exp,s,p0,p1,p2,p3)
#endif
/*******************************************************************
*
* Warning macros
*
********************************************************************
*/
/* Make sure the macros are actually defined */
#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_LOG_WARNINGS
#define GUI_DEBUG_WARN(s) GUI_Warn(s)
#define GUI_DEBUG_WARN1(s,p0) GUI_Warn1(s,p0)
#define GUI_DEBUG_WARN2(s,p0,p1) GUI_Warn2(s,p0,p1)
#define GUI_DEBUG_WARN3(s,p0,p1,p2) GUI_Warn3(s,p0,p1,p2)
#define GUI_DEBUG_WARN4(s,p0,p1,p2,p3) GUI_Warn4(s,p0,p1,p2,p3)
#define GUI_DEBUG_WARN_IF(exp,s) { if (exp) GUI_DEBUG_WARN(s); }
#define GUI_DEBUG_WARN1_IF(exp,s,p0) { if (exp) GUI_DEBUG_WARN1(s,p0); }
#define GUI_DEBUG_WARN2_IF(exp,s,p0,p1) { if (exp) GUI_DEBUG_WARN2(s,p0,p1); }
#define GUI_DEBUG_WARN3_IF(exp,s,p0,p1,p2) { if (exp) GUI_DEBUG_WARN3(s,p0,p1,p2); }
#define GUI_DEBUG_WARN4_IF(exp,s,p0,p1,p2,p3) { if (exp) GUI_DEBUG_WARN4(s,p0,p1,p2,p3); }
#else
#define GUI_DEBUG_WARN(s)
#define GUI_DEBUG_WARN1(s,p0)
#define GUI_DEBUG_WARN2(s,p0,p1)
#define GUI_DEBUG_WARN3(s,p0,p1,p2)
#define GUI_DEBUG_WARN4(s,p0,p1,p2,p3)
#define GUI_DEBUG_WARN_IF(exp,s)
#define GUI_DEBUG_WARN1_IF(exp,s,p0)
#define GUI_DEBUG_WARN2_IF(exp,s,p0,p1)
#define GUI_DEBUG_WARN3_IF(exp,s,p0,p1,p2)
#define GUI_DEBUG_WARN4_IF(exp,s,p0,p1,p2,p3)
#endif
/*******************************************************************
*
* Logging macros
*
********************************************************************
*/
/* Make sure the macros are actually defined */
#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_LOG_ALL
#define GUI_DEBUG_LOG(s) GUI_Log(s)
#define GUI_DEBUG_LOG1(s,p0) GUI_Warn1(s,p0)
#define GUI_DEBUG_LOG2(s,p0,p1) GUI_Warn2(s,p0,p1)
#define GUI_DEBUG_LOG3(s,p0,p1,p2) GUI_Warn3(s,p0,p1,p2)
#define GUI_DEBUG_LOG4(s,p0,p1,p2,p3) GUI_Warn4(s,p0,p1,p2,p3)
#define GUI_DEBUG_LOG_IF(exp,s) { if (exp) GUI_DEBUG_LOG(s); }
#define GUI_DEBUG_LOG1_IF(exp,s,p0) { if (exp) GUI_DEBUG_LOG1(s,p0); }
#define GUI_DEBUG_LOG2_IF(exp,s,p0,p1) { if (exp) GUI_DEBUG_LOG2(s,p0,p1); }
#define GUI_DEBUG_LOG3_IF(exp,s,p0,p1,p2) { if (exp) GUI_DEBUG_LOG3(s,p0,p1,p2); }
#define GUI_DEBUG_LOG4_IF(exp,s,p0,p1,p2,p3) { if (exp) GUI_DEBUG_LOG4(s,p0,p1,p2,p3); }
#else
#define GUI_DEBUG_LOG(s)
#define GUI_DEBUG_LOG1(s,p0)
#define GUI_DEBUG_LOG2(s,p0,p1)
#define GUI_DEBUG_LOG3(s,p0,p1,p2)
#define GUI_DEBUG_LOG4(s,p0,p1,p2,p3)
#define GUI_DEBUG_LOG_IF(exp,s)
#define GUI_DEBUG_LOG1_IF(exp,s,p0)
#define GUI_DEBUG_LOG2_IF(exp,s,p0,p1)
#define GUI_DEBUG_LOG3_IF(exp,s,p0,p1,p2)
#define GUI_DEBUG_LOG4_IF(exp,s,p0,p1,p2,p3)
#endif
/*******************************************************************
*
* Asserts
*
********************************************************************
*/
#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_LOG_ERRORS
#define GUI_DEBUG_ASSERT(exp) { if (!exp) GUI_DEBUG_ERROROUT(#exp); }
#else
#define GUI_DEBUG_ASSERT(exp)
#endif
#endif /* LCD_H */
/*************************** End of file ****************************/
@@ -0,0 +1,385 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : GUIType.h
Purpose : Include file define the types used for GUI
---------------------------END-OF-HEADER------------------------------
Attention : Do not modify this file ! If you do, you will not
be able do update to a later GUI version !
*/
#ifndef GUITYPE_H_INCLUDED
#define GUITYPE_H_INCLUDED
#include "LCD.h"
#include "uCGUI\Config\GUIConf.h"
/* *************************************************************
* *
* Simple types *
* *
*************************************************************
*/
typedef const char * GUI_ConstString;
/* *************************************************************
* *
* Structures *
* *
*************************************************************
*/
typedef LCD_COLOR GUI_COLOR;
typedef LCD_LOGPALETTE GUI_LOGPALETTE;
typedef LCD_DRAWMODE GUI_DRAWMODE;
typedef LCD_RECT GUI_RECT;
typedef struct {
void (* pfDraw)(int x0,int y0,int xsize, int ysize, const U8 GUI_UNI_PTR * pPixel, const LCD_LOGPALETTE GUI_UNI_PTR * pLogPal, int xMag, int yMag);
GUI_COLOR (* pfIndex2Color)(int Index);
} GUI_BITMAP_METHODS;
typedef struct {
U16P XSize;
U16P YSize;
U16P BytesPerLine;
U16P BitsPerPixel;
const U8 GUI_UNI_PTR * pData;
const GUI_LOGPALETTE GUI_UNI_PTR * pPal;
const GUI_BITMAP_METHODS * pMethods;
} GUI_BITMAP;
/* This structure may not be changed because the data that it
expects is read in binary form (via any kind of interface,
at runtime).
This structure should therefor not be changed.
*/
typedef struct {
U16 ID; /* Version 1.00 => 100*/
U16 Version;
U16 XSize;
U16 YSize;
U16 BytesPerLine;
U16 BitsPerPixel;
U16 NumColors;
U16 HasTrans;
} GUI_BITMAP_STREAM;
typedef struct {
int x,y;
unsigned char Pressed;
} GUI_PID_STATE;
/*
****************************************
* *
* FONT structures (new in V1.10) *
* *
****************************************
*/
/* Translation list. Translates a character code into up to 2
indices of images to display on top of each other;
'á' -> index('a'), index('´') */
typedef struct {
I16P c0;
I16P c1;
} GUI_FONT_TRANSLIST;
typedef struct {
U16P FirstChar;
U16P LastChar;
const GUI_FONT_TRANSLIST GUI_UNI_PTR * pList;
} GUI_FONT_TRANSINFO;
typedef struct {
U8 XSize;
U8 XDist;
U8 BytesPerLine;
const unsigned char GUI_UNI_PTR * pData;
} GUI_CHARINFO;
typedef struct GUI_FONT_PROP {
U16P First; /* first character */
U16P Last; /* last character */
const GUI_CHARINFO GUI_UNI_PTR * paCharInfo; /* address of first character */
const struct GUI_FONT_PROP GUI_UNI_PTR * pNext; /* pointer to next */
} GUI_FONT_PROP;
typedef struct {
const unsigned char GUI_UNI_PTR * pData;
const U8 GUI_UNI_PTR * pTransData;
const GUI_FONT_TRANSINFO GUI_UNI_PTR * pTrans;
U16P FirstChar;
U16P LastChar;
U8 XSize;
U8 XDist;
U8 BytesPerLine;
} GUI_FONT_MONO;
typedef struct GUI_FONT_INFO {
U16P First; /* first character */
U16P Last; /* last character */
const GUI_CHARINFO* paCharInfo; /* address of first character */
const struct GUI_FONT_INFO* pNext; /* pointer to next */
} GUI_FONT_INFO;
/*
****************************************
* *
* FONT info structure *
* *
****************************************
This structure is used when retrieving information about a font.
It is designed for future expansion without incompatibilities.
*/
typedef struct {
U16 Flags;
U8 Baseline;
U8 LHeight; /* height of a small lower case character (a,x) */
U8 CHeight; /* height of a small upper case character (A,X) */
} GUI_FONTINFO;
#define GUI_FONTINFO_FLAG_PROP (1<<0) /* Is proportional */
#define GUI_FONTINFO_FLAG_MONO (1<<1) /* Is monospaced */
#define GUI_FONTINFO_FLAG_AA (1<<2) /* Is an antialiased font */
#define GUI_FONTINFO_FLAG_AA2 (1<<3) /* Is an antialiased font, 2bpp */
#define GUI_FONTINFO_FLAG_AA4 (1<<4) /* Is an antialiased font, 4bpp */
/**********************************************************************
*
* UNICODE Encoding
*
***********************************************************************
*/
typedef U16 tGUI_GetCharCode(const char GUI_UNI_PTR *s);
typedef int tGUI_GetCharSize(const char GUI_UNI_PTR *s);
typedef int tGUI_CalcSizeOfChar(U16 Char);
typedef int tGUI_Encode(char *s, U16 Char);
typedef struct {
tGUI_GetCharCode* pfGetCharCode;
tGUI_GetCharSize* pfGetCharSize;
tGUI_CalcSizeOfChar* pfCalcSizeOfChar;
tGUI_Encode* pfEncode;
} GUI_UC_ENC_APILIST;
/**********************************************************************
*
* FONT Encoding
*
***********************************************************************
*/
typedef int tGUI_GetLineDistX(const char GUI_UNI_PTR *s, int Len);
typedef int tGUI_GetLineLen(const char GUI_UNI_PTR *s, int MaxLen);
typedef void tGL_DispLine(const char GUI_UNI_PTR *s, int Len);
typedef struct {
tGUI_GetLineDistX* pfGetLineDistX;
tGUI_GetLineLen* pfGetLineLen;
tGL_DispLine* pfDispLine;
} tGUI_ENC_APIList;
extern const tGUI_ENC_APIList GUI_ENC_APIList_SJIS;
/*
****************************************
* *
* FONT methods *
* *
****************************************
The parameter to the methods called pFont should be of type
GUI_FONT, but unfortunately a lot of compilers can not handle
forward declarations right ...
So it ends up to be a void pointer.
*/
typedef struct GUI_FONT GUI_FONT;
typedef void GUI_DISPCHAR(U16 c);
typedef int GUI_GETCHARDISTX(U16P c);
typedef void GUI_GETFONTINFO(const GUI_FONT GUI_UNI_PTR * pFont, GUI_FONTINFO * pfi);
typedef char GUI_ISINFONT (const GUI_FONT GUI_UNI_PTR * pFont, U16 c);
#define DECLARE_FONT(Type) \
void GUI##Type##_DispChar (U16P c); \
int GUI##Type##_GetCharDistX(U16P c); \
void GUI##Type##_GetFontInfo (const GUI_FONT GUI_UNI_PTR * pFont, GUI_FONTINFO * pfi); \
char GUI##Type##_IsInFont (const GUI_FONT GUI_UNI_PTR * pFont, U16 c)
#if defined(__cplusplus)
extern "C" { /* Make sure we have C-declarations in C++ programs */
#endif
/* MONO: Monospaced fonts */
DECLARE_FONT(MONO);
#define GUI_FONTTYPE_MONO \
GUIMONO_DispChar, \
GUIMONO_GetCharDistX, \
GUIMONO_GetFontInfo, \
GUIMONO_IsInFont, \
(tGUI_ENC_APIList*)0
/* PROP: Proportional fonts */
DECLARE_FONT(PROP);
#define GUI_FONTTYPE_PROP \
GUIPROP_DispChar, \
GUIPROP_GetCharDistX, \
GUIPROP_GetFontInfo, \
GUIPROP_IsInFont, \
(tGUI_ENC_APIList*)0
/* PROP: Proportional fonts SJIS */
DECLARE_FONT(PROP);
#define GUI_FONTTYPE_PROP_SJIS \
GUIPROP_DispChar, \
GUIPROP_GetCharDistX, \
GUIPROP_GetFontInfo, \
GUIPROP_IsInFont, \
&GUI_ENC_APIList_SJIS
/* PROPAA: Proportional, antialiased fonts */
DECLARE_FONT(PROPAA);
#define GUI_FONTTYPE_PROPAA \
GUIPROPAA_DispChar, \
GUIPROPAA_GetCharDistX, \
GUIPROPAA_GetFontInfo, \
GUIPROPAA_IsInFont, \
(tGUI_ENC_APIList*)0
/* PROPAA: Proportional, antialiased fonts, 2bpp */
DECLARE_FONT(PROP_AA2);
#define GUI_FONTTYPE_PROP_AA2 \
GUIPROP_AA2_DispChar, \
GUIPROP_AA2_GetCharDistX, \
GUIPROP_AA2_GetFontInfo, \
GUIPROP_AA2_IsInFont, \
(tGUI_ENC_APIList*)0
/* PROPAA: Proportional, antialiased fonts, 2bpp, SJIS encoding */
DECLARE_FONT(PROP_AA2);
#define GUI_FONTTYPE_PROP_AA2_SJIS \
GUIPROP_AA2_DispChar, \
GUIPROP_AA2_GetCharDistX, \
GUIPROP_AA2_GetFontInfo, \
GUIPROP_AA2_IsInFont, \
GUI_ENCODE_SJIS
/* PROPAA: Proportional, antialiased fonts, 4bpp */
DECLARE_FONT(PROP_AA4);
#define GUI_FONTTYPE_PROP_AA4 \
GUIPROP_AA4_DispChar, \
GUIPROP_AA4_GetCharDistX, \
GUIPROP_AA4_GetFontInfo, \
GUIPROP_AA4_IsInFont, \
(tGUI_ENC_APIList*)0
/* PROPAA: Proportional, antialiased fonts, 4bpp, SJIS encoding */
DECLARE_FONT(PROP_AA4);
#define GUI_FONTTYPE_PROP_AA4_SJIS \
GUIPROP_AA4_DispChar, \
GUIPROP_AA4_GetCharDistX, \
GUIPROP_AA4_GetFontInfo, \
GUIPROP_AA4_IsInFont, \
GUI_ENCODE_SJIS
#if defined(__cplusplus)
}
#endif
struct GUI_FONT {
GUI_DISPCHAR* pfDispChar;
GUI_GETCHARDISTX* pfGetCharDistX;
GUI_GETFONTINFO* pfGetFontInfo;
GUI_ISINFONT* pfIsInFont;
const tGUI_ENC_APIList* pafEncode;
U8 YSize;
U8 YDist;
U8 XMag;
U8 YMag;
union {
const void GUI_UNI_PTR * pFontData;
const GUI_FONT_MONO GUI_UNI_PTR * pMono;
const GUI_FONT_PROP GUI_UNI_PTR * pProp;
} p;
U8 Baseline;
U8 LHeight; /* height of a small lower case character (a,x) */
U8 CHeight; /* height of a small upper case character (A,X) */
};
/*********************************************************************
*
* Position independent font structures
*/
typedef struct {
U32 ID; /* Font file ID */
U16 YSize; /* Height of font */
U16 YDist; /* Space of font Y */
U16 Baseline; /* Index of baseline */
U16 LHeight; /* Height of a small lower case character (a) */
U16 CHeight; /* Height of a upper case character (A) */
U16 NumAreas; /* Number of character areas */
} GUI_SI_FONT;
typedef struct {
U16 First; /* Index of first character */
U16 Last; /* Index of last character */
} GUI_SIF_CHAR_AREA;
typedef struct {
U16 XSize; /* Size of bitmap data in X */
U16 XDist; /* Number of pixels for increment cursor in X */
U16 BytesPerLine; /* Number of bytes per line */
U16 Dummy;
U32 OffData; /* Offset of pixel data */
} GUI_SIF_CHARINFO;
typedef struct tGUI_SIF_APIList_struct {
GUI_DISPCHAR * pDispChar;
GUI_GETCHARDISTX * pGetCharDistX;
GUI_GETFONTINFO * pGetFontInfo;
GUI_ISINFONT * pIsInFont;
} tGUI_SIF_APIList;
#define GUI_SIF_TYPE tGUI_SIF_APIList
#define GUI_SIF_TYPE_PROP &GUI_SIF_APIList_Prop
extern const tGUI_SIF_APIList GUI_SIF_APIList_Prop;
/*
*********************************
* *
* Typedefs *
* *
*********************************
*/
#ifndef GUI_HMEM
#define GUI_HMEM I16P
#endif
#define GUI_HMEM_NULL (0)
typedef GUI_HMEM GUI_HWIN;
#endif /* GUITYPE_H_INCLUDED */
/*************************** End of file ****************************/
@@ -0,0 +1,27 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : GUIVersion.h
Purpose : Include file defining current GUI version
---------------------------END-OF-HEADER------------------------------
*/
#ifndef GUI_VERSION_H
#define GUI_VERSION_H
#define GUI_VERSION 39001
#endif /* Avoid multiple inclusion */
/*************************** End of file ****************************/
@@ -0,0 +1,69 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : GUI_ARRAY.h
Purpose : Array handling routines
---------------------------END-OF-HEADER------------------------------
*/
#ifndef GUIARRAY_H
#define GUIARRAY_H
#include "WM_Intern.h"
#if GUI_WINSUPPORT
typedef enum {
GUI_ARRAY_STATE_NOT_CREATED,
GUI_ARRAY_STATE_CREATED,
GUI_ARRAY_STATE_DELETED
} GUI_ARRAY_STATE;
typedef struct {
U16 NumItems;
WM_HMEM haHandle; /* Handle to buffer holding handles */
#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
GUI_ARRAY_STATE InitState;
#endif
} GUI_ARRAY;
int GUI_ARRAY_AddItem (GUI_ARRAY* pThis, const void *pNew, int Len);
void GUI_ARRAY_Delete (GUI_ARRAY* pThis);
WM_HMEM GUI_ARRAY_GethItem (const GUI_ARRAY* pThis, unsigned int Index);
unsigned GUI_ARRAY_GetNumItems (const GUI_ARRAY* pThis);
void* GUI_ARRAY_GetpItem (const GUI_ARRAY* pThis, unsigned int Index);
/* Optional methods */
int GUI_ARRAY_SethItem (GUI_ARRAY* pThis, unsigned int Index, WM_HMEM hItem);
WM_HMEM GUI_ARRAY_SetItem (GUI_ARRAY* pThis, unsigned int Index, const void* pData, int Len);
void GUI_ARRAY_DeleteItem (GUI_ARRAY* pThis, unsigned int Index);
char GUI_ARRAY_InsertBlankItem(GUI_ARRAY* pThis, unsigned int Index);
WM_HMEM GUI_ARRAY_InsertItem (GUI_ARRAY* pThis, unsigned int Index, int Len);
void* GUI_ARRAY_ResizeItem (GUI_ARRAY* pThis, unsigned int Index, int Len);
#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
void GUI_ARRAY_Create ( GUI_ARRAY * pThis);
void GUI_ARRAY_Check (const GUI_ARRAY * pThis);
#define GUI_ARRAY_CREATE(pThis) GUI_ARRAY_Create(pThis)
#define GUI_ARRAY_CHECK(pThis) GUI_ARRAY_Check(pThis)
#else
#define GUI_ARRAY_CREATE(pThis)
#define GUI_ARRAY_CHECK(pThis)
#endif
#endif
#endif
@@ -0,0 +1,155 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : GUI_ConfDefaults.h
Purpose : Defaults for GUI config switches.
---------------------------END-OF-HEADER------------------------------
Attention : Do not modify this file ! If you do, you will not
be able do update to a later GUI version !
*/
#ifndef GUI_CONFDEFAULTS_H
#define GUI_CONFDEFAULTS_H
#include "uCGUI\Config\GUIConf.h"
/**********************************************************************
*
* Defaults for config switches
*
***********************************************************************
*/
/* Define "universal pointer". Normally, this is not needed (define will expand to nothing)
However, on some systems (AVR - IAR compiler) it can be necessary ( -> __generic),
since a default pointer can access RAM only, not the built-in Flash
*/
#ifndef GUI_UNI_PTR
#define GUI_UNI_PTR
#define GUI_UNI_PTR_USED 0
#else
#define GUI_UNI_PTR_USED 1
#endif
/* Define const storage. Normally, this is not needed (define will expand to const)
However, on some systems (AVR - IAR compiler) it can be necessary ( -> __flash const),
since otherwise constants are copied into RAM
*/
#ifndef GUI_ALLOC_SIZE
#define GUI_ALLOC_SIZE 1000
#endif
#ifndef GUI_CONST_STORAGE
#define GUI_CONST_STORAGE const
#endif
#ifndef GUI_SUPPORT_TOUCH
#define GUI_SUPPORT_TOUCH 0
#endif
#ifndef GUI_SUPPORT_MOUSE
#define GUI_SUPPORT_MOUSE 0
#endif
#ifndef GUI_SUPPORT_MEMDEV
#define GUI_SUPPORT_MEMDEV 0
#endif
#ifndef GUI_SUPPORT_AA
#define GUI_SUPPORT_AA 0
#endif
#ifndef GUI_OS
#define GUI_OS 0
#endif
#ifndef GUI_SUPPORT_LARGE_BITMAPS
#if GUI_ALLOC_SIZE > 65535
#define GUI_SUPPORT_LARGE_BITMAPS 1
#else
#define GUI_SUPPORT_LARGE_BITMAPS 0
#endif
#endif
#ifndef GUI_COMPATIBLE_MODE
#define GUI_COMPATIBLE_MODE 1
#endif
#ifndef GUI_NUM_LAYERS
#define GUI_NUM_LAYERS 1
#endif
#ifndef GUI_SUPPORT_CURSOR
#define GUI_SUPPORT_CURSOR (GUI_SUPPORT_MOUSE | GUI_SUPPORT_TOUCH)
#endif
#ifndef GUI_SUPPORT_DEVICES
#ifdef __C51__ /* Keil C51 limitation ... Indirect function calls are limited */
#define GUI_SUPPORT_DEVICES 0
#else
#define GUI_SUPPORT_DEVICES (GUI_SUPPORT_MEMDEV | (GUI_NUM_LAYERS > 1))
#endif
#endif
/* Some compilers for very simple chips can not generate code for function pointers
with parameters. In this case, we do not use function pointers, but limit the functionality slightly */
#ifndef GUI_COMPILER_SUPPORTS_FP
#ifdef __C51__
#define GUI_COMPILER_SUPPORTS_FP 0
#else
#define GUI_COMPILER_SUPPORTS_FP 1
#endif
#endif
#ifndef GUI_SUPPORT_ROTATION
#if GUI_COMPILER_SUPPORTS_FP
#define GUI_SUPPORT_ROTATION 1
#else
#define GUI_SUPPORT_ROTATION 0
#endif
#endif
/* In order to avoid warnings for undefined parameters */
#ifndef GUI_USE_PARA
#if defined (__BORLANDC__) || defined(NC30) || defined(NC308)
#define GUI_USE_PARA(para)
#else
#define GUI_USE_PARA(para) para=para;
#endif
#endif
/* Default for types */
#ifndef GUI_TIMER_TIME
#define GUI_TIMER_TIME int /* default is to use 16 bits for 16 bit CPUs,
32 bits on 32 bit CPUs for timing */
#endif
/* Types used for memory allocation */
#if GUI_ALLOC_SIZE <32767
#define GUI_ALLOC_DATATYPE I16
#define GUI_ALLOC_DATATYPE_U U16
#else
#define GUI_ALLOC_DATATYPE I32
#define GUI_ALLOC_DATATYPE_U U32
#endif
#ifndef GUI_MEMSET
#define GUI_MEMSET GUI__memset
#endif
#endif /* ifdef GUI_CONFDEFAULTS_H */
/*************************** End of file ****************************/
@@ -0,0 +1,67 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : GUI_FontIntern.h
Purpose : Internal decalrations used in font files
---------------------------END-OF-HEADER------------------------------
Attention : Do not modify this file ! If you do, you will not
be able do update to a later GUI version !
*/
#ifndef GUI_FONTINTERN_H /* Guard against multiple inclusion */
#define GUI_FONTINTERN_H
#include "GUI.h"
#if defined(__cplusplus)
extern "C" { /* Make sure we have C-declarations in C++ programs */
#endif
extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font8ASCII_Prop;
extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font10S_ASCII_FontProp1;
extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font10ASCIIProp1;
extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font16ASCIIProp1;
extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font16_1_FontProp1;
extern GUI_CONST_STORAGE GUI_FONT_PROP FontComic24BProp_ASCII;
extern GUI_CONST_STORAGE GUI_CHARINFO GUI_Font24B_ASCII_CharInfo[95];
extern GUI_CONST_STORAGE GUI_CHARINFO GUI_Font24_ASCII_CharInfo[95];
extern GUI_CONST_STORAGE GUI_CHARINFO GUI_Font32B_ASCII_CharInfo[95];
extern GUI_CONST_STORAGE GUI_CHARINFO GUI_Font32_ASCII_CharInfo[95];
extern GUI_CONST_STORAGE GUI_CHARINFO GUI_CharInfoF8x13_ASCII[96];
extern GUI_CONST_STORAGE GUI_CHARINFO GUI_CharInfoF8x15B_ASCII[96];
extern GUI_CONST_STORAGE GUI_CHARINFO CharInfo18B_ASCII[97];
extern GUI_CONST_STORAGE GUI_CHARINFO CharInfo24B_ASCII[96];
extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font13ASCII_Prop1;
extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font13B_ASCII_Prop1;
extern GUI_CONST_STORAGE GUI_CHARINFO GUI_Font13H_ASCII_CharInfo[95];
extern GUI_CONST_STORAGE GUI_CHARINFO GUI_Font13HB_ASCII_CharInfo[95];
extern GUI_CONST_STORAGE GUI_CHARINFO GUI_Font16_HK_CharInfo[169];
extern GUI_CONST_STORAGE GUI_CHARINFO GUI_Font16B_ASCII_CharInfo[95];
#if defined(__cplusplus)
}
#endif
#endif /* Guard against multiple inclusion */
/*************************** End of file ****************************/
@@ -0,0 +1,62 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : GUI_HOOK.h
Purpose : Hook handling routines
--------------------END-OF-HEADER-------------------------------------
*/
#ifndef GUI_HOOK_H
#define GUI_HOOK_H
#include "WM_Intern.h"
#if GUI_WINSUPPORT
#if defined(__cplusplus)
extern "C" { /* Make sure we have C-declarations in C++ programs */
#endif
/*********************************************************************
*
* Types
*
**********************************************************************
*/
typedef int GUI_HOOK_FUNC(WM_MESSAGE* pMsg);
typedef struct GUI_HOOK {
struct GUI_HOOK* pNext;
GUI_HOOK_FUNC* pHookFunc;
} GUI_HOOK;
/*********************************************************************
*
* Functions
*
**********************************************************************
*/
void GUI_HOOK_Add (GUI_HOOK** ppFirstHook, GUI_HOOK* pNewHook, GUI_HOOK_FUNC* pHookFunc);
void GUI_HOOK_Remove(GUI_HOOK** ppFirstHook, GUI_HOOK* pHook);
#if defined(__cplusplus)
}
#endif
#endif /* GUI_WINSUPPORT */
#endif /* GUI_HOOK_H */
/*************************** End of file ****************************/
@@ -0,0 +1,94 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : GUI_Private.h
Purpose : GUI internal declarations
---------------------------END-OF-HEADER------------------------------
Attention : Do not modify this file ! If you do, you will not
be able do update to a later GUI version !
*/
#ifndef GUI_PRIVATE_H
#define GUI_PRIVATE_H
#include "GUI_Protected.h"
#include "LCD_Private.h" /* Required because of LCD_PIXELINDEX, which depends on LCDConf */
#if GUI_SUPPORT_DEVICES
#define LCDDEV_L0_Color2Index GUI_Context.pDeviceAPI->pfColor2Index
#define LCDDEV_L0_DrawBitmap GUI_Context.pDeviceAPI->pfDrawBitmap
#define LCDDEV_L0_DrawHLine GUI_Context.pDeviceAPI->pfDrawHLine
#define LCDDEV_L0_DrawVLine GUI_Context.pDeviceAPI->pfDrawVLine
#define LCDDEV_L0_DrawPixel GUI_Context.pDeviceAPI->pfDrawPixel
#define LCDDEV_L0_FillRect GUI_Context.pDeviceAPI->pfFillRect
#define LCDDEV_L0_GetPixel GUI_Context.pDeviceAPI->pfGetPixel
#define LCDDEV_L0_GetRect GUI_Context.pDeviceAPI->pfGetRect
#define LCDDEV_L0_GetPixelIndex GUI_Context.pDeviceAPI->pfGetPixelIndex
#define LCDDEV_L0_Index2Color GUI_Context.pDeviceAPI->pfIndex2Color
#define LCDDEV_L0_SetPixelIndex GUI_Context.pDeviceAPI->pfSetPixelIndex
#define LCDDEV_L0_XorPixel GUI_Context.pDeviceAPI->pfXorPixel
#else
#define LCDDEV_L0_Color2Index LCD_L0_Color2Index
#define LCDDEV_L0_DrawBitmap LCD_L0_DrawBitmap
#define LCDDEV_L0_DrawHLine LCD_L0_DrawHLine
#define LCDDEV_L0_DrawVLine LCD_L0_DrawVLine
#define LCDDEV_L0_DrawPixel LCD_L0_DrawPixel
#define LCDDEV_L0_FillRect LCD_L0_FillRect
#define LCDDEV_L0_GetPixel LCD_L0_GetPixel
#define LCDDEV_L0_GetRect LCD_L0_GetRect
#define LCDDEV_L0_GetPixelIndex LCD_L0_GetPixelIndex
#define LCDDEV_L0_Index2Color LCD_L0_Index2Color
#define LCDDEV_L0_SetPixelIndex LCD_L0_SetPixelIndex
#define LCDDEV_L0_XorPixel LCD_L0_XorPixel
#endif
void LCD_L0_DrawBitmap (int x0, int y0, int xsize, int ysize,
int BitsPerPixel, int BytesPerLine,
const U8 GUI_UNI_PTR * pData, int Diff, const LCD_PIXELINDEX* pTrans);
void LCD_L0_1_DrawBitmap (int x0, int y0, int xsize, int ysize,
int BitsPerPixel, int BytesPerLine,
const U8 GUI_UNI_PTR * pData, int Diff, const LCD_PIXELINDEX* pTrans);
void LCD_L0_2_DrawBitmap (int x0, int y0, int xsize, int ysize,
int BitsPerPixel, int BytesPerLine,
const U8 GUI_UNI_PTR * pData, int Diff, const LCD_PIXELINDEX* pTrans);
void LCD_L0_3_DrawBitmap (int x0, int y0, int xsize, int ysize,
int BitsPerPixel, int BytesPerLine,
const U8 GUI_UNI_PTR * pData, int Diff, const LCD_PIXELINDEX* pTrans);
void LCD_L0_4_DrawBitmap (int x0, int y0, int xsize, int ysize,
int BitsPerPixel, int BytesPerLine,
const U8 GUI_UNI_PTR * pData, int Diff, const LCD_PIXELINDEX* pTrans);
void LCD_L0_MAG_DrawBitmap(int x0, int y0, int xsize, int ysize,
int BitsPerPixel, int BytesPerLine,
const U8 GUI_UNI_PTR * pData, int Diff, const LCD_PIXELINDEX* pTrans);
void LCD_L0_DELTA_DrawBitmap(int x0, int y0, int xsize, int ysize,
int BitsPerPixel, int BytesPerLine,
const U8 GUI_UNI_PTR * pData, int Diff, const LCD_PIXELINDEX* pTrans);
LCD_PIXELINDEX* LCD_GetpPalConvTable(const LCD_LOGPALETTE GUI_UNI_PTR * pLogPal);
LCD_PIXELINDEX* LCD_GetpPalConvTableUncached(const LCD_LOGPALETTE GUI_UNI_PTR * pLogPal);
#define GUI_POS_AUTO -4095 /* Position value for auto-pos */
#if GUI_SUPPORT_MEMDEV
void* GUI_MEMDEV__XY2PTR (int x,int y);
void* GUI_MEMDEV__XY2PTREx(GUI_MEMDEV* pDev, int x,int y);
void GUI_MEMDEV__WriteToActiveAt(GUI_MEMDEV_Handle hMem,int x, int y);
#endif
#endif /* ifdef GUI_H */
/*************************** End of file ****************************/
@@ -0,0 +1,404 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* ľC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : GUI_Protected.h
Purpose : GUI internal declarations
---------------------------END-OF-HEADER------------------------------
*/
#ifndef GUI_PROTECTED_H
#define GUI_PROTECTED_H
#include "GUI.h"
#include "LCD_Protected.h"
#include "GUIDebug.h"
#if GUI_WINSUPPORT
#include "WM_GUI.h"
#endif
#if defined(__cplusplus)
extern "C" { /* Make sure we have C-declarations in C++ programs */
#endif
/**********************************************************************
*
* Defaults for config switches
*
***********************************************************************
The config switches below do not affect the interface in GUI.h and
are therefor not required to be in GUI.h.
*/
/* Short address area.
For most compilers, this is "near" or "__near"
We do not use this except for some CPUs which we know to always have some
near memory, because the GUI_Context ans some other data will be declared
to be in this short address (near) memory area as it has a major effect
on performance.
Please define in GUIConf.h (if you want to use it)
*/
#ifndef GUI_SADDR
#define GUI_SADDR
#endif
#ifndef GUI_DEFAULT_FONT
#define GUI_DEFAULT_FONT &GUI_Font6x8
#endif
#ifndef GUI_DEFAULT_CURSOR
#define GUI_DEFAULT_CURSOR &GUI_CursorArrowM
#endif
#ifndef GUI_DEFAULT_BKCOLOR
#define GUI_DEFAULT_BKCOLOR GUI_BLACK
#endif
#ifndef GUI_DEFAULT_COLOR
#define GUI_DEFAULT_COLOR GUI_WHITE
#endif
#ifndef GUI_X_SIGNAL_EVENT
#define GUI_X_SIGNAL_EVENT()
#endif
#ifndef GUI_X_WAIT_EVENT
#define GUI_X_WAIT_EVENT() GUI_X_ExecIdle()
#endif
/* *********************************
* *
* Angles *
* *
*********************************
*/
#define GUI_45DEG 512
#define GUI_90DEG (2*GUI_45DEG)
#define GUI_180DEG (4*GUI_45DEG)
#define GUI_360DEG (8*GUI_45DEG)
/*****************************************************
*
* Locking checks
*
******************************************************
*/
#if defined (WIN32) && defined (_DEBUG) && GUI_OS
#define GUI_ASSERT_LOCK() GUITASK_AssertLock()
#define GUI_ASSERT_NO_LOCK() GUITASK_AssertNoLock()
void GUITASK_AssertLock(void);
void GUITASK_AssertNoLock(void);
#else
#define GUI_ASSERT_LOCK()
#define GUI_ASSERT_NO_LOCK()
#endif
/*****************************************************
*
* Usage internals
*
******************************************************
*/
typedef enum { GUI_WRAPMODE_NONE, GUI_WRAPMODE_WORD, GUI_WRAPMODE_CHAR } GUI_WRAPMODE;
typedef GUI_HMEM GUI_USAGE_Handle;
typedef struct tsUSAGE_APIList tUSAGE_APIList;
typedef struct GUI_Usage GUI_USAGE;
#define GUI_USAGE_h GUI_USAGE_Handle
typedef GUI_USAGE_h tUSAGE_CreateCompatible(GUI_USAGE* p);
typedef void tUSAGE_AddPixel (GUI_USAGE* p, int x, int y);
typedef void tUSAGE_AddHLine (GUI_USAGE* p, int x0, int y0, int len);
typedef void tUSAGE_Clear (GUI_USAGE* p);
typedef void tUSAGE_Delete (GUI_USAGE_h h);
typedef int tUSAGE_GetNextDirty (GUI_USAGE* p, int *pxOff, int yOff);
#define GUI_USAGE_H2P(h) ((GUI_USAGE*)GUI_ALLOC_h2p(h))
void GUI_USAGE_DecUseCnt(GUI_USAGE_Handle hUsage);
GUI_USAGE_Handle GUI_USAGE_BM_Create(int x0, int y0, int xsize, int ysize, int Flags);
void GUI_USAGE_Select(GUI_USAGE_Handle hUsage);
void GUI_USAGE_AddRect(GUI_USAGE* pUsage, int x0, int y0, int xSize, int ySize);
#define GUI_USAGE_AddPixel(p, x,y) p->pAPI->pfAddPixel(p,x,y)
#define GUI_USAGE_AddHLine(p,x,y,len) p->pAPI->pfAddHLine(p,x,y,len)
#define GUI_USAGE_Clear(p) p->pAPI->pfClear(p)
#define GUI_USAGE_Delete(p) p->pAPI->pfDelete(p)
#define GUI_USAGE_GetNextDirty(p,pxOff, yOff) p->pAPI->pfGetNextDirty(p,pxOff, yOff)
struct tsUSAGE_APIList {
tUSAGE_AddPixel* pfAddPixel;
tUSAGE_AddHLine* pfAddHLine;
tUSAGE_Clear* pfClear;
tUSAGE_CreateCompatible* pfCreateCompatible;
tUSAGE_Delete* pfDelete;
tUSAGE_GetNextDirty* pfGetNextDirty;
} ;
struct GUI_Usage {
I16P x0, y0, XSize, YSize;
const tUSAGE_APIList *pAPI;
I16 UseCnt;
};
/*****************************************************
*
* GUI_MEMDEV
*
******************************************************
*/
#if GUI_SUPPORT_MEMDEV
typedef struct /*GUI_MEMDEV*/ {
I16P x0, y0, XSize, YSize;
int NumColors;
unsigned BytesPerLine;
unsigned BitsPerPixel;
unsigned LayerIndex;
GUI_HMEM hUsage;
tLCDDEV_Color2Index* pfColor2Index;
tLCDDEV_Index2Color* pfIndex2Color;
tLCDDEV_GetIndexMask* pfGetIndexMask;
const tLCDDEV_APIList* pAPIList;
} GUI_MEMDEV;
#define GUI_MEMDEV_H2P(h) ((GUI_MEMDEV*)GUI_ALLOC_h2p(h))
void GUI_MEMDEV__CopyFromLCD (GUI_MEMDEV_Handle hMem);
void GUI_MEMDEV__GetRect (GUI_RECT* pRect);
unsigned GUI_MEMDEV__Color2Index (LCD_COLOR Color);
LCD_COLOR GUI_MEMDEV__Index2Color (int Index);
unsigned int GUI_MEMDEV__GetIndexMask(void);
GUI_MEMDEV_Handle GUI_MEMDEV__CreateFixed(int x0, int y0, int xsize, int ysize, int Flags
,const tLCDDEV_APIList * pMemDevAPI
,tLCDDEV_Color2Index* pfColor2Index
,tLCDDEV_Index2Color* pfIndex2Color
,tLCDDEV_GetIndexMask* pfGetIndexMask);
#endif
/*******************************************************************
*
* LCD_HL_ level defines
*
********************************************************************
*/
#if GUI_SUPPORT_AA
#define LCD_HL_DrawHLine GUI_Context.pLCD_HL->pfDrawHLine
#define LCD_HL_DrawPixel GUI_Context.pLCD_HL->pfDrawPixel
#else
#define LCD_HL_DrawHLine LCD_DrawHLine
#define LCD_HL_DrawPixel LCD_DrawPixel
#endif
/*********************************************************************
*
* Helper functions
*
***********************************************************************
*/
#define GUI_ZEROINIT(Obj) GUI_MEMSET(Obj, 0, sizeof(Obj))
int GUI_cos(int angle);
int GUI_sin(int angle);
void GL_DrawLine1(int x0, int y0, int x1, int y1);
extern const U32 GUI_Pow10[10];
/* GUIAALib.c --- direct anti-aliased drawing */
int GUI_AA_Init(int x0, int x1);
int GUI_AA_Init_HiRes(int x0, int x1);
void GUI_AA_Exit(void);
I16 GUI_AA_HiRes2Pixel(int HiRes);
void GL_FillCircleAA_HiRes(int x0, int y0, int r);
/* Conversion routines */
void GUI_AddHex (U32 v, U8 Len, char**ps);
void GUI_AddBin (U32 v, U8 Len, char**ps);
void GUI_AddDecMin (I32 v, char**ps);
void GUI_AddDec (I32 v, U8 Len, char**ps);
void GUI_AddDecShift(I32 v, U8 Len, U8 Shift, char**ps);
long GUI_AddSign (long v, char**ps);
int GUI_Long2Len (I32 v);
#define GUI_UC__GetCharSize(sText) GUI_Context.pUC_API->pfGetCharSize(sText)
#define GUI_UC__GetCharCode(sText) GUI_Context.pUC_API->pfGetCharCode(sText)
int GUI_UC__CalcSizeOfChar (U16 Char);
U16 GUI_UC__GetCharCodeInc (const char GUI_UNI_PTR ** ps);
int GUI_UC__NumChars2NumBytes(const char GUI_UNI_PTR * s, int NumChars);
int GUI_UC__NumBytes2NumChars(const char GUI_UNI_PTR * s, int NumBytes);
int GUI__GetLineNumChars (const char GUI_UNI_PTR *s, int MaxNumChars);
int GUI__GetNumChars (const char GUI_UNI_PTR *s);
int GUI__GetLineDistX (const char GUI_UNI_PTR *s, int Len);
int GUI__GetFontSizeY (void);
int GUI__HandleEOLine (const char GUI_UNI_PTR **ps);
void GUI__DispLine (const char GUI_UNI_PTR *s, int Len, const GUI_RECT* pr);
void GUI__AddSpaceHex (U32 v, U8 Len, char**ps);
void GUI__CalcTextRect (const char GUI_UNI_PTR* pText, const GUI_RECT* pTextRectIn, GUI_RECT* pTextRectOut, int TextAlign);
int GUI__WrapGetNumCharsDisp (const char GUI_UNI_PTR * pText, int xSize, GUI_WRAPMODE WrapMode);
int GUI__WrapGetNumCharsToNextLine (const char GUI_UNI_PTR * pText, int xSize, GUI_WRAPMODE WrapMode);
int GUI__WrapGetNumBytesToNextLine (const char GUI_UNI_PTR * pText, int xSize, GUI_WRAPMODE WrapMode);
void GUI__memset (U8 * p, U8 Fill, int NumBytes);
void GUI__memset16 (U16* p, U16 Fill, int NumWords);
int GUI__strlen (const char GUI_UNI_PTR * s);
int GUI__strcmp (const char GUI_UNI_PTR * s0, const char GUI_UNI_PTR * s1);
int GUI__strcmp_hp (GUI_HMEM hs0, const char GUI_UNI_PTR * s1);
/* Reading data routines */
U16 GUI__Read16(const U8 ** ppData);
U32 GUI__Read32(const U8 ** ppData);
/*********************************************************************
*
* 2d - GL
*
**********************************************************************
*/
void GL_DispChar (U16 c);
void GL_DrawArc (int x0, int y0, int rx, int ry, int a0, int a1);
void GL_DrawBitmap (const GUI_BITMAP GUI_UNI_PTR * pBM, int x0, int y0);
void GL_DrawCircle (int x0, int y0, int r);
void GL_DrawEllipse (int x0, int y0, int rx, int ry);
void GL_DrawHLine (int y0, int x0, int x1);
void GL_DrawPolygon (const GUI_POINT* pPoints, int NumPoints, int x0, int y0);
void GL_DrawPoint (int x, int y);
void GL_DrawLineRel (int dx, int dy);
void GL_DrawLineTo (int x, int y);
void GL_DrawLine (int x0, int y0, int x1, int y1);
void GL_MoveTo (int x, int y);
void GL_FillCircle (int x0, int y0, int r);
void GL_FillCircleAA (int x0, int y0, int r);
void GL_FillEllipse (int x0, int y0, int rx, int ry);
void GL_FillPolygon (const GUI_POINT* pPoints, int NumPoints, int x0, int y0);
void GL_SetDefault (void);
/************************************************************
*
* Callback pointers for dynamic linkage
*
*************************************************************
Dynamic linkage pointers reduces configuration hassles.
*/
typedef int GUI_tfTimer(void);
typedef char GUI_CURSOR_tfTempHide (const GUI_RECT* pRect);
typedef void GUI_CURSOR_tfTempUnhide(void);
typedef int WM_tfHandlePID(void);
/************************************************************
*
* Cursors
*
*************************************************************
*/
extern GUI_CONST_STORAGE unsigned char GUI_Pixels_ArrowS[45];
extern GUI_CONST_STORAGE unsigned char GUI_Pixels_ArrowM[60];
extern GUI_CONST_STORAGE unsigned char GUI_Pixels_ArrowL[150];
extern GUI_CONST_STORAGE unsigned char GUI_Pixels_CrossS[33];
extern GUI_CONST_STORAGE unsigned char GUI_Pixels_CrossM[126];
extern GUI_CONST_STORAGE unsigned char GUI_Pixels_CrossL[248];
extern GUI_CONST_STORAGE unsigned char GUI_PixelsHeaderM[5 * 17];
extern GUI_CONST_STORAGE GUI_LOGPALETTE GUI_CursorPal;
extern GUI_CONST_STORAGE GUI_LOGPALETTE GUI_CursorPalI;
/************************************************************
*
* Text rotation
*
*************************************************************
*/
extern GUI_RECT GUI_RectDispString; /* Used by LCD_Rotate...() and GUI_DispStringInRect() */
/*********************************************************************
*
* Bitmap related functions
*
**********************************************************************
*/
int GUI_GetBitmapPixelIndex(const GUI_BITMAP GUI_UNI_PTR * pBMP, unsigned x, unsigned y);
GUI_COLOR GUI_GetBitmapPixelColor(const GUI_BITMAP GUI_UNI_PTR * pBMP, unsigned x, unsigned y);
#if defined(__cplusplus)
}
#endif
#endif /* Avoid multiple inclusion */
/************************************************************
*
* GUI_EXTERN declartions/definitions
*
*************************************************************
*/
#ifdef GL_CORE_C
#define GUI_EXTERN
#else
#if defined(__cplusplus)
#define GUI_EXTERN extern "C"
#else
#define GUI_EXTERN extern
#endif
#endif
GUI_EXTERN GUI_SADDR GUI_CONTEXT GUI_Context; /* Thread wide globals */
GUI_EXTERN GUI_SADDR char GUI_DecChar;
GUI_EXTERN GUI_tfTimer* GUI_pfTimerExec;
GUI_EXTERN WM_tfHandlePID* WM_pfHandlePID;
GUI_EXTERN void (*GUI_pfDispCharStyle)(U16 Char);
#if GUI_COMPILER_SUPPORTS_FP && GUI_SUPPORT_ROTATION
GUI_EXTERN const tLCD_APIList * GUI_pLCD_APIList; /* Used for rotating text */
#endif
#if GUI_SUPPORT_CURSOR
GUI_EXTERN GUI_CURSOR_tfTempHide* GUI_CURSOR_pfTempHide;
GUI_EXTERN GUI_CURSOR_tfTempUnhide* GUI_CURSOR_pfTempUnhide;
#endif
#if defined(__cplusplus)
extern "C" { /* Make sure we have C-declarations in C++ programs */
#endif
extern const GUI_UC_ENC_APILIST GUI__API_TableNone;
#if defined(__cplusplus)
}
#endif
#undef GUI_EXTERN
/*************************** End of file ****************************/
@@ -0,0 +1,95 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : GUI_VNC.h
Purpose : Publics for the VNC server
---------------------------END-OF-HEADER------------------------------
Attention : Do not modify this file ! If you do, you will not
be able do update to a later GUI version !
*/
#ifndef GUI_VNC_H
#define GUI_VNC_H
#include "GUI.h"
#include "LCD_Private.h" /* Required because the Driver API depends on Config currently */
#if GUI_SUPPORT_DEVICES
#if defined(__cplusplus)
extern "C" { /* Make sure we have C-declarations in C++ programs */
#endif
/*********************************************************************
*
* defines
*
**********************************************************************
*/
#define GUI_VNC_NO_ERROR 0
#define GUI_VNC_ERROR_MISC 1
#define GUI_VNC_ERROR_WRONGFORMAT 2
/*********************************************************************
*
* types
*
**********************************************************************
*/
typedef int (*GUI_tSend) (const U8 * pData, int len, void* pConnectInfo);
typedef int (*GUI_tReceive)( U8 * pData, int len, void* pConnectInfo);
typedef struct GUI_VNC_CONTEXT {
struct GUI_VNC_CONTEXT * pNext;
int LayerIndex;
/* Connection related data */
GUI_tSend pfSend;
GUI_tReceive pfReceive;
void* pConnectInfo;
U16 ServerIndex;
/* Display related info */
const tLCDDEV_APIList* pLayerAPIOrig;
tLCDDEV_APIList VNC_LayerAPI;
int x0Dirty, y0Dirty, x1Dirty, y1Dirty;
int XSize, YSize;
/* Status */
char ClientSupportsHextile;
char IsBigEndian;
} GUI_VNC_CONTEXT;
/*********************************************************************
*
* functions
*
**********************************************************************
*/
int GUI_VNC_Process (GUI_VNC_CONTEXT* pContext, GUI_tSend pfSend, GUI_tReceive pfReceive, void* pConnectInfo);
void GUI_VNC_AttachToLayer(GUI_VNC_CONTEXT* pContext, int LayerIndex);
int GUI_VNC_GetNumConnections(void);
/**** External routine to link the server to the system ... USER defined ! ****/
int GUI_VNC_X_StartServer(int LayerIndex, int ServerIndex);
#if defined(__cplusplus)
}
#endif
#endif /* GUI_SUPPORT_DEVICES */
#endif /* Avoid multiple inclusion */
/*************************** End of file ****************************/
@@ -0,0 +1,79 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : GUI_X.h
Purpose : Declarations for GUI_X module
---------------------------END-OF-HEADER------------------------------
Attention : Do not modify this file ! If you do, you will not
be able do update to a later GUI version !
*/
#ifndef GUI_X_H
#define GUI_X_H
#include "GUI.h"
#if defined(__cplusplus)
extern "C" { /* Make sure we have C-declarations in C++ programs */
#endif
/************************************************************
*
* GUI_X_
*
* externals, to be defined by application
*
*************************************************************
The externals defined below should be defined by the
application. They are per default contained in the module
GUI_X.c.
Note that a lot if not all of these are not required in most target
systems.
For this module, samples are available for configurations
with or without operating system.
*/
/**** Init ****/
void GUI_X_Init(void);
/**** ExecIdle - called if nothing else is left to do ****/
void GUI_X_ExecIdle(void);
/**** Timing routines - required for blinking ****/
int GUI_X_GetTime(void);
void GUI_X_Delay(int Period);
/**** Multitask routines - required only if multitasking is used (#define GUI_OS 1) ****/
void GUI_X_Unlock(void);
void GUI_X_Lock(void);
U32 GUI_X_GetTaskId(void);
void GUI_X_InitOS(void);
/**** Event driving (optional with multitasking) ****/
void GUI_X_WaitEvent(void);
void GUI_X_SignalEvent(void);
/**** Recording (logs/warnings and errors) - required only for higher levels ****/
void GUI_X_Log(const char *s);
void GUI_X_Warn(const char *s);
void GUI_X_ErrorOut(const char *s);
#if defined(__cplusplus)
}
#endif
#endif /* ifdef GUI_X_H */
/*************************** End of file ****************************/
@@ -0,0 +1,141 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : HEADER.h
Purpose : HEADER include
--------------------END-OF-HEADER-------------------------------------
*/
#ifndef HEADER_H
#define HEADER_H
#include "GUI.h"
#include "WM.h"
#include "DIALOG_Intern.h" /* Req. for Create indirect data structure */
#if GUI_WINSUPPORT
#if defined(__cplusplus)
extern "C" { /* Make sure we have C-declarations in C++ programs */
#endif
/*********************************************************************
*
* Public Types
*
**********************************************************************
*/
typedef WM_HMEM HEADER_Handle;
/*********************************************************************
*
* Create functions
*
**********************************************************************
*/
HEADER_Handle HEADER_Create (int x0, int y0, int xsize, int ysize, WM_HWIN hParent, int Id, int Flags, int SpecialFlags);
HEADER_Handle HEADER_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
HEADER_Handle HEADER_CreateAttached(WM_HWIN hParent, int Id, int SpecialFlags);
HEADER_Handle HEADER_CreateEx (int x0, int y0, int xsize, int ysize, WM_HWIN hParent,
int WinFlags, int ExFlags, int Id);
/*********************************************************************
*
* Standard member functions
*
**********************************************************************
*/
#define HEADER_EnableMemdev(hObj) WM_EnableMemdev (hObj)
#define HEADER_DisableMemdev(hObj) WM_DisableMemdev (hObj)
#define HEADER_Delete(hObj) WM_DeleteWindow (hObj)
#define HEADER_Paint(hObj) WM_Paint (hObj)
#define HEADER_Invalidate(hObj) WM_InvalidateWindow(hObj)
/*********************************************************************
*
* Global functions
*
**********************************************************************
*/
/* Set defaults */
GUI_COLOR HEADER_SetDefaultBkColor (GUI_COLOR Color);
const GUI_CURSOR GUI_UNI_PTR * HEADER_SetDefaultCursor (const GUI_CURSOR * pCursor);
const GUI_FONT GUI_UNI_PTR * HEADER_SetDefaultFont (const GUI_FONT GUI_UNI_PTR * pFont);
int HEADER_SetDefaultBorderH (int Spacing);
int HEADER_SetDefaultBorderV (int Spacing);
GUI_COLOR HEADER_SetDefaultTextColor(GUI_COLOR Color);
/* Get defaults */
GUI_COLOR HEADER_GetDefaultBkColor (void);
const GUI_CURSOR GUI_UNI_PTR * HEADER_GetDefaultCursor (void);
const GUI_FONT GUI_UNI_PTR * HEADER_GetDefaultFont (void);
int HEADER_GetDefaultBorderH (void);
int HEADER_GetDefaultBorderV (void);
GUI_COLOR HEADER_GetDefaultTextColor(void);
/*********************************************************************
*
* Member functions
*
**********************************************************************
*/
void HEADER_AddItem (HEADER_Handle hObj, int Width, const char * s, int Align);
void HEADER_DeleteItem (HEADER_Handle hObj, unsigned Index);
int HEADER_GetHeight (HEADER_Handle hObj);
int HEADER_GetItemWidth (HEADER_Handle hObj, unsigned int Index);
int HEADER_GetNumItems (HEADER_Handle hObj);
void HEADER_SetBitmap (HEADER_Handle hObj, unsigned int Index, const GUI_BITMAP * pBitmap);
void HEADER_SetBitmapEx (HEADER_Handle hObj, unsigned int Index, const GUI_BITMAP * pBitmap, int x, int y);
void HEADER_SetBkColor (HEADER_Handle hObj, GUI_COLOR Color);
void HEADER_SetBMP (HEADER_Handle hObj, unsigned int Index, const void * pBitmap);
void HEADER_SetBMPEx (HEADER_Handle hObj, unsigned int Index, const void * pBitmap, int x, int y);
void HEADER_SetFont (HEADER_Handle hObj, const GUI_FONT GUI_UNI_PTR * pFont);
void HEADER_SetHeight (HEADER_Handle hObj, int Height);
void HEADER_SetTextAlign (HEADER_Handle hObj, unsigned int Index, int Align);
void HEADER_SetItemText (HEADER_Handle hObj, unsigned int Index, const char * s);
void HEADER_SetItemWidth (HEADER_Handle hObj, unsigned int Index, int Width);
void HEADER_SetScrollPos (HEADER_Handle hObj, int ScrollPos);
void HEADER_SetStreamedBitmap (HEADER_Handle hObj, unsigned int Index, const GUI_BITMAP_STREAM * pBitmap);
void HEADER_SetStreamedBitmapEx(HEADER_Handle hObj, unsigned int Index, const GUI_BITMAP_STREAM * pBitmap, int x, int y);
void HEADER_SetTextColor (HEADER_Handle hObj, GUI_COLOR Color);
/*********************************************************************
*
* Macros for compatibility with older versions
*
**********************************************************************
*/
#ifdef HEADER_SPACING_H
#define HEADER_BORDER_H_DEFAULT HEADER_SPACING_H
#endif
#ifdef HEADER_SPACING_V
#define HEADER_BORDER_V_DEFAULT HEADER_SPACING_V
#endif
#define HEADER_SetDefaultSpacingH(Value) HEADER_SetDefaultBorderH(Value)
#define HEADER_SetDefaultSpacingV(Value) HEADER_SetDefaultBorderV(Value)
#define HEADER_GetDefaultSpacingH() HEADER_GetDefaultBorderH()
#define HEADER_GetDefaultSpacingV() HEADER_GetDefaultBorderV()
#if defined(__cplusplus)
}
#endif
#endif /* if GUI_WINSUPPORT */
#endif /* HEADER_H */
@@ -0,0 +1,84 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : HEADER_Private.h
Purpose : Private HEADER include
--------------------END-OF-HEADER-------------------------------------
*/
#ifndef HEADER_PRIVATE_H
#define HEADER_PRIVATE_H
#include "WIDGET.h"
#include "HEADER.h"
#include "WM.h"
#include "GUI_ARRAY.h"
#if GUI_WINSUPPORT
/*********************************************************************
*
* Macros for internal use
*
**********************************************************************
*/
#define HEADER_ID 0x4567 /* Magic numer, should be unique if possible */
#define HEADER_H2P(h) (HEADER_Obj*) WM_H2P(h)
#if GUI_DEBUG_LEVEL > 1
#define HEADER_ASSERT_IS_VALID_PTR(p) DEBUG_ERROROUT_IF(p->DebugId != HEADER_ID, "xxx.c: Wrong handle type or Object not init'ed")
#define HEADER_INIT_ID(p) p->DebugId = HEADER_ID
#define HEADER_DEINIT_ID(p) p->DebugId = HEADER_ID+1
#else
#define HEADER_ASSERT_IS_VALID_PTR(p)
#define HEADER_INIT_ID(p)
#define HEADER_DEINIT_ID(p)
#endif
/*********************************************************************
*
* Object definition
*
**********************************************************************
*/
typedef struct {
int Width;
I16 Align;
WM_HMEM hDrawObj;
char acText[1];
} HEADER_COLUMN;
typedef struct {
WIDGET Widget;
GUI_COLOR BkColor;
GUI_COLOR TextColor;
GUI_ARRAY Columns;
int CapturePosX;
int CaptureItem;
int ScrollPos;
const GUI_FONT GUI_UNI_PTR * pFont;
#if (GUI_DEBUG_LEVEL > 1)
int DebugId;
#endif
} HEADER_Obj;
void HEADER__SetDrawObj(HEADER_Handle hObj, unsigned Index, GUI_DRAW_HANDLE hDrawObj);
#endif /* GUI_WINSUPPORT */
#endif /* Avoid multiple inclusion */
@@ -0,0 +1,538 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : LCD.h
Purpose : Declares LCD interface functions
----------------------------------------------------------------------
*/
#ifndef LCD_H
#define LCD_H
#include "GUI_ConfDefaults.h" /* Used for GUI_UNI_PTR */
#if defined(__cplusplus)
extern "C" { /* Make sure we have C-declarations in C++ programs */
#endif
/*
********************************************************************
* *
* Basic type defines *
* *
********************************************************************
The follwing are defines for types used in the LCD-driver and the
GUI layers on top of that. Since "C" does not provide data types of
fixed length which are identical on all platforms, this is done here.
For most 16/32 controllers, the settings will work fine. However, if
you have similar defines in other sections of your program, you might
want to change or relocate these defines, e.g. in a TYPE.h file.
*/
#define I8 signed char
#define U8 unsigned char /* unsigned 8 bits. */
#define I16 signed short /* signed 16 bits. */
#define U16 unsigned short /* unsigned 16 bits. */
#define I32 signed long /* signed 32 bits. */
#define U32 unsigned long /* unsigned 32 bits. */
#define I16P I16 /* signed 16 bits OR MORE ! */
#define U16P U16 /* unsigned 16 bits OR MORE ! */
/*
********************************************************************
* *
* Settings for windows simulation *
* *
********************************************************************
Some settings in the configuration may conflict with the values required
in the Simulation. This is why we ignore the target settings for data
types and use the correct settings for the simulation.
(U32 could be defined as long, which would yield a 64 bit type on
the PC)
*/
#ifdef WIN32
#pragma warning( disable : 4244 ) // Disable warning messages in simulation
#pragma warning( disable : 4761 ) // Disable warning "integral size mismatch in argument; conversion supplied"
#endif
/* *************************************************************
* *
* Constants *
* *
*************************************************************
*/
#define LCD_ERR0 (0x10)
#define LCD_ERR_CONTROLLER_NOT_FOUND (LCD_ERR0+1)
#define LCD_ERR_MEMORY (LCD_ERR0+2)
/*
*********************************
* *
* Drawing modes *
* *
*********************************
*/
#define LCD_DRAWMODE_NORMAL (0)
#define LCD_DRAWMODE_XOR (1<<0)
#define LCD_DRAWMODE_TRANS (1<<1)
#define LCD_DRAWMODE_REV (1<<2)
/* *************************************************************
* *
* Typedefs *
* *
*************************************************************
*/
typedef int LCD_DRAWMODE;
typedef U32 LCD_COLOR;
/********************************************************
*
* Data structures
*
*********************************************************
*/
typedef struct { I16P x,y; } GUI_POINT;
typedef struct { I16 x0,y0,x1,y1; } LCD_RECT;
/*typedef struct { GUI_POINT P0, P1; } LCD_RECT; */
typedef struct {
int NumEntries;
char HasTrans;
const LCD_COLOR GUI_UNI_PTR * pPalEntries;
} LCD_LOGPALETTE;
/* This is used for the simulation only ! */
typedef struct {
int x,y;
unsigned char KeyStat;
} LCD_tMouseState;
/*********************************************************************
*
* Index2Color
This function needs to be int the public part of the software
since it is needed by the simulation. Most other driver
functions are hidden in the private header file.
*/
typedef LCD_COLOR tLCDDEV_Index2Color (int Index);
typedef unsigned int tLCDDEV_Color2Index (LCD_COLOR Color);
typedef unsigned int tLCDDEV_GetIndexMask (void);
LCD_COLOR LCD_L0_Index2Color (int Index);
LCD_COLOR LCD_L0_1_Index2Color(int Index);
LCD_COLOR LCD_L0_2_Index2Color(int Index);
LCD_COLOR LCD_L0_3_Index2Color(int Index);
LCD_COLOR LCD_L0_4_Index2Color(int Index);
unsigned int LCD_L0_Color2Index (LCD_COLOR Color);
unsigned int LCD_L0_1_Color2Index(LCD_COLOR Color);
unsigned int LCD_L0_2_Color2Index(LCD_COLOR Color);
unsigned int LCD_L0_3_Color2Index(LCD_COLOR Color);
unsigned int LCD_L0_4_Color2Index(LCD_COLOR Color);
unsigned int LCD_L0_GetIndexMask (void);
unsigned int LCD_L0_1_GetIndexMask(void);
unsigned int LCD_L0_2_GetIndexMask(void);
unsigned int LCD_L0_3_GetIndexMask(void);
unsigned int LCD_L0_4_GetIndexMask(void);
/*********************************************************************
*
* Color conversion API tables
*/
typedef struct {
tLCDDEV_Color2Index* pfColor2Index;
tLCDDEV_Index2Color* pfIndex2Color;
tLCDDEV_GetIndexMask* pfGetIndexMask;
} LCD_API_COLOR_CONV;
extern const LCD_API_COLOR_CONV LCD_API_ColorConv_1;
extern const LCD_API_COLOR_CONV LCD_API_ColorConv_2;
extern const LCD_API_COLOR_CONV LCD_API_ColorConv_4;
extern const LCD_API_COLOR_CONV LCD_API_ColorConv_8666;
#define GUI_COLOR_CONV_1 &LCD_API_ColorConv_1
#define GUI_COLOR_CONV_2 &LCD_API_ColorConv_2
#define GUI_COLOR_CONV_4 &LCD_API_ColorConv_4
#define GUI_COLOR_CONV_8666 &LCD_API_ColorConv_8666
/*********************************************************************
*
* LCDDEV function table
*
**********************************************************************
Below the routines which need to in an LCDDEV routine table are
defined. All of these routines have to be in the low-level driver
(LCD_L0) or in the memory device which can be used to replace the
driver.
The one exception to this is the SetClipRect routine, which would
be identical for all drivers and is therefor contained in the
level above (LCD).
*/
typedef void tLCDDEV_DrawHLine (int x0, int y0, int x1);
typedef void tLCDDEV_DrawVLine (int x , int y0, int y1);
typedef void tLCDDEV_FillRect (int x0, int y0, int x1, int y1);
typedef unsigned int tLCDDEV_GetPixelIndex(int x, int y);
typedef void tLCDDEV_SetPixelIndex(int x, int y, int ColorIndex);
typedef void tLCDDEV_XorPixel (int x, int y);
typedef void tLCDDEV_FillPolygon (const GUI_POINT* pPoints, int NumPoints, int x0, int y0);
typedef void tLCDDEV_FillPolygonAA(const GUI_POINT* pPoints, int NumPoints, int x0, int y0);
typedef void tLCDDEV_GetRect (LCD_RECT*pRect);
typedef int tLCDDEV_Init (void);
typedef void tLCDDEV_On (void);
typedef void tLCDDEV_Off (void);
typedef void tLCDDEV_SetLUTEntry (U8 Pos, LCD_COLOR color);
/*********************************************************************
*
* Memory device API tables
*/
#if GUI_COMPILER_SUPPORTS_FP
typedef struct tLCDDEV_APIList_struct tLCDDEV_APIList;
#endif
typedef void tLCDDEV_DrawBitmap (int x0, int y0, int xsize, int ysize,
int BitsPerPixel, int BytesPerLine,
const U8 GUI_UNI_PTR * pData, int Diff,
const void* pTrans); /* Really LCD_PIXELINDEX, but is void to avoid compiler warnings*/
struct tLCDDEV_APIList_struct {
tLCDDEV_Color2Index* pfColor2Index;
tLCDDEV_Index2Color* pfIndex2Color;
tLCDDEV_GetIndexMask* pfGetIndexMask;
tLCDDEV_DrawBitmap* pfDrawBitmap;
tLCDDEV_DrawHLine* pfDrawHLine;
tLCDDEV_DrawVLine* pfDrawVLine;
tLCDDEV_FillRect* pfFillRect;
tLCDDEV_GetPixelIndex* pfGetPixelIndex;
tLCDDEV_GetRect* pfGetRect;
tLCDDEV_SetPixelIndex* pfSetPixelIndex;
tLCDDEV_XorPixel* pfXorPixel;
tLCDDEV_SetLUTEntry* pfSetLUTEntry;
#if GUI_SUPPORT_MEMDEV
tLCDDEV_FillPolygon* pfFillPolygon;
tLCDDEV_FillPolygonAA* pfFillPolygonAA;
const tLCDDEV_APIList* pMemDevAPI;
unsigned BitsPerPixel;
#endif
};
#if GUI_COMPILER_SUPPORTS_FP
extern const struct tLCDDEV_APIList_struct GUI_MEMDEV__APIList1;
extern const struct tLCDDEV_APIList_struct GUI_MEMDEV__APIList8;
extern const struct tLCDDEV_APIList_struct GUI_MEMDEV__APIList16;
#define GUI_MEMDEV_APILIST_1 &GUI_MEMDEV__APIList1
#define GUI_MEMDEV_APILIST_8 &GUI_MEMDEV__APIList8
#define GUI_MEMDEV_APILIST_16 &GUI_MEMDEV__APIList16
#endif
/* *************************************************************
* *
* Defines *
* *
* for device capabilities *
* *
*************************************************************
The following is the list of device capabilities which can, but do
not have to be implemented in the driver. This way the driver can be
enhanced in the future without affecting the driver interface,
keeping older drivers compatible.
More DevCaps can always be added in the future, as older drivers
are guaranteed to return 0 for all unimplemented features or queries.
The values below define the legal parameters to the LCD_GetDeviceCaps
and the LCD_GetpCapFunc routines.
*/
#define LCD_DEVCAP_NUMCOLORS 0x0 /* Quest number of colors
which LCD can display */
#define LCD_DEVCAP_XSIZE 0x1 /* Quest horiz. res. of display */
#define LCD_DEVCAP_YSIZE 0x2 /* Quest vert. res. of display */
#define LCD_DEVCAP_VXSIZE 0x3 /* Quest vert. res. of virtual disp.*/
#define LCD_DEVCAP_VYSIZE 0x4 /* Quest vert. res. of virtual disp.*/
#define LCD_DEVCAP_XORG 0x5 /* X-origin ... usually 0 */
#define LCD_DEVCAP_YORG 0x6 /* Y-origin ... usually 0 */
#define LCD_DEVCAP_CONTROLLER 0x7 /* LCD Controller (Numerical) */
#define LCD_DEVCAP_BITSPERPIXEL 0x8 /* Bits per pixel ... 1/2/4/8 */
#define LCD_DEVCAP_NUMPAGES 0x10 /* Quest number of pages of display */
#define LCD_DEVCAP_COLOR 0x1000 /* Quest Color[0]
0x1001 Quest Color[1]
0x1002 Quest Color[2]
... */
/* The next 4095 entries are reserved so up to 4096 colors
can be queried ...*/
int LCD_GetXSize(void);
int LCD_GetXSize_1(void);
int LCD_GetXSizeEx(int Index);
int LCD_GetYSize(void);
int LCD_GetYSize_1(void);
int LCD_GetYSizeEx(int Index);
int LCD_GetVXSize(void);
int LCD_GetVXSize_1(void);
int LCD_GetVXSizeEx(int Index);
int LCD_GetVYSize(void);
int LCD_GetVYSize_1(void);
int LCD_GetVYSizeEx(int Index);
U32 LCD_GetNumColors(void);
U32 LCD_GetNumColors_1(void);
U32 LCD_GetNumColorsEx(int Index);
int LCD_GetBitsPerPixel(void);
int LCD_GetBitsPerPixel_1(void);
int LCD_GetBitsPerPixelEx(int Index);
int LCD_GetFixedPalette(void);
int LCD_GetFixedPalette_1(void);
I32 LCD_GetFixedPaletteEx(int Index);
int LCD_GetXMag(void);
int LCD_GetXMag_1(void);
int LCD_GetXMagEx(int Index);
int LCD_GetYMag(void);
int LCD_GetYMag_1(void);
int LCD_GetYMagEx(int Index);
int LCD_GetMirrorXEx(int LayerIndex);
int LCD_GetMirrorYEx(int LayerIndex);
int LCD_GetSwapXYEx(int LayerIndex);
int LCD_GetSwapRBEx(int LayerIndex);
int LCD_GetDeltaModeEx(int LayerIndex);
int LCD_GetBitsPerPixel_L0Ex(int LayerIndex);
int LCD_GetNumLayers(void);
#define LCD_GetNumDisplays() LCD_GetNumLayers()
#define LCD_GET_XSIZE() LCD_GetXSize()
#define LCD_GET_YSIZE() LCD_GetYSize()
#define LCD_GET_VXSIZE() LCD_GetVXSize()
#define LCD_GET_VYSIZE() LCD_GetVYSize()
#define LCD_GET_NUMCOLORS() LCD_GetNumColors()
#define LCD_GET_BITSPERPIXEL() LCD_GetBitsPerPixel()
/*********************************************************************
*
* LCD_CLIP function table
*
**********************************************************************
*/
typedef void tLCD_HL_DrawHLine (int x0, int y0, int x1);
typedef void tLCD_HL_DrawPixel (int x0, int y0);
typedef struct {
tLCD_HL_DrawHLine* pfDrawHLine;
tLCD_HL_DrawPixel* pfDrawPixel;
} tLCD_HL_APIList;
void LCD_DrawHLine(int x0, int y0, int x1);
void LCD_DrawPixel(int x0, int y0);
void LCD_DrawVLine (int x, int y0, int y1);
/*********************************************************************
*
* Declarations for LCD_
*
**********************************************************************
*/
void LCD_SetClipRectEx(const LCD_RECT* pRect);
void LCD_SetClipRectMax(void);
/* Get device capabilities (0 if not supported) */
I32 LCD_GetDevCap(int Index);
/* Initialize LCD using config-paramters */
int LCD_Init(void);
void LCD_SetBkColor (LCD_COLOR Color); /* Set background color */
void LCD_SetColor (LCD_COLOR Color); /* Set foreground color */
void LCD_SetPixelIndex(int x, int y, int ColorIndex);
/* Palette routines (Not available on all drivers) */
void LCD_InitLUT(void);
/* Decompressors */
//typedef void tfDrawSpecialBitmap(int x0,int y0,int xsize, int ysize, const U8 GUI_UNI_PTR *pPixel, const LCD_LOGPALETTE GUI_UNI_PTR * pLogPal, int xMag, int yMag);
void LCD_DrawBitmap_RLE8(int x0,int y0,int xsize, int ysize, const U8 GUI_UNI_PTR *pPixel, const LCD_LOGPALETTE GUI_UNI_PTR * pLogPal, int xMag, int yMag);
void LCD_DrawBitmap_RLE4(int x0,int y0,int xsize, int ysize, const U8 GUI_UNI_PTR *pPixel, const LCD_LOGPALETTE GUI_UNI_PTR * pLogPal, int xMag, int yMag);
void LCD_DrawBitmap_565 (int x0,int y0,int xsize, int ysize, const U8 GUI_UNI_PTR *pPixel, const LCD_LOGPALETTE GUI_UNI_PTR * pLogPal, int xMag, int yMag);
void LCD_DrawBitmap_M565(int x0,int y0,int xsize, int ysize, const U8 GUI_UNI_PTR *pPixel, const LCD_LOGPALETTE GUI_UNI_PTR * pLogPal, int xMag, int yMag);
LCD_DRAWMODE LCD_SetDrawMode (LCD_DRAWMODE dm);
void LCD_SetColorIndex(int Index);
void LCD_SetBkColorIndex(int Index);
void LCD_FillRect(int x0, int y0, int x1, int y1);
typedef void tLCD_SetPixelAA(int x, int y, U8 Intens);
void LCD_SetPixelAA(int x, int y, U8 Intens);
void LCD_SetPixelAA_NoTrans(int x, int y, U8 Intens);
LCD_COLOR LCD_AA_MixColors(LCD_COLOR Color, LCD_COLOR BkColor, U8 Intens);
LCD_COLOR LCD_MixColors256(LCD_COLOR Color, LCD_COLOR BkColor, unsigned Intens);
LCD_COLOR LCD_GetPixelColor(int x, int y); /* Get RGB color of pixel */
unsigned int LCD_GetPixelIndex(int x, int y);
int LCD_GetBkColorIndex (void);
int LCD_GetColorIndex (void);
/*********************************************************************
*
* Optional support for rotatation
*
**********************************************************************
*/
#if GUI_SUPPORT_ROTATION
typedef void tLCD_DrawBitmap(int x0, int y0, int xsize, int ysize,
int xMul, int yMul, int BitsPerPixel, int BytesPerLine,
const U8 GUI_UNI_PTR * pPixel, const void * pTrans);
typedef void tRect2TextRect (LCD_RECT * pRect);
struct tLCD_APIList_struct {
tLCD_DrawBitmap * pfDrawBitmap;
tRect2TextRect * pfRect2TextRect;
};
typedef struct tLCD_APIList_struct tLCD_APIList;
extern tLCD_APIList LCD_APIListCCW;
extern tLCD_APIList LCD_APIListCW;
extern tLCD_APIList LCD_APIList180;
#define GUI_ROTATION tLCD_APIList
#define GUI_ROTATE_CCW &LCD_APIListCCW
#define GUI_ROTATE_CW &LCD_APIListCW
#define GUI_ROTATE_180 &LCD_APIList180
#define GUI_ROTATE_0 0
#endif
/* *************************************************************
* *
* LCD publics not used by GUI *
* *
*************************************************************
The following functions can, but do not have to be defined in the LCD driver
as they are not used by the GUI level.
*/
#define LCD_On LCD_L0_On
#define LCD_Off LCD_L0_Off
#define LCD_ReInit LCD_L0_ReInit
#define LCD_SetLUTEntry LCD_L0_SetLUTEntry
#define LCD_CC_UNLOCK (0) /* Default mode: Cache is transparent */
#define LCD_CC_LOCK (1) /* Cache is locked, no write operations */
#define LCD_CC_FLUSH (2) /* Flush cache, do not change mode */
U8 LCD_L0_ControlCache(U8 mode);
U8 LCD_L0_1_ControlCache(U8 mode);
U8 LCD_L0_2_ControlCache(U8 mode);
U8 LCD_L0_3_ControlCache(U8 mode);
U8 LCD_L0_4_ControlCache(U8 mode);
void LCD_L0_Refresh(void);
void LCD_L0_1_Refresh(void);
void LCD_L0_2_Refresh(void);
void LCD_L0_3_Refresh(void);
void LCD_L0_4_Refresh(void);
/* Check if controller is still properly initialized */
int LCD_L0_CheckInit(void); /* returns if init is still O.K.
by reading all available registers of
Display controller.
0: Init O.K.
*/
#define LCD_ControlCache LCD_L0_ControlCache
/*
******************************************
* *
* Support for paging *
* *
******************************************
*/
int LCD_SelPage (int NewPage); /* returns formerly sel. page */
int LCD_ShowPage (int NewPage); /* sets / returns visible page */
int LCD_GetSelPage (void); /* returns selected page */
int LCD_GetVisPage (void); /* returns visible page */
/* *************************************************************
* *
* LCD imports *
* (for routines in LCDColor) *
* *
*************************************************************
*/
int LCD_Color2Index (LCD_COLOR Color);
LCD_COLOR LCD_Index2Color (int Index);
LCD_COLOR LCD_Index2ColorEx (int i, unsigned int LayerIndex);
/*********************************************************************
*
* LCD_X_...
*
**********************************************************************
*/
void LCD_X_Init(void);
void LCD_X_On (void);
void LCD_X_Off (void);
char LCD_X_Read00(void);
char LCD_X_Read01(void);
void LCD_X_Write00(char c);
void LCD_X_Write01(char c);
void LCD_X_WriteM01(char * pData, int NumBytes);
#if defined(__cplusplus)
}
#endif
#endif /* LCD_H */
/*************************** End of file ****************************/
@@ -0,0 +1,90 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : LCDSIM.h
Purpose : Declares LCD interface functions
----------------------------------------------------------------------
*/
#ifndef LCDSIM_H
#define LCDSIM_H
/************************************************************
*
* defines
*
*************************************************************
*/
#define LCDSIM_MAX_DISPLAYS 5
/************************************************************
*
* LCDSIM_ General declarations
*
*************************************************************
*/
char* LCDSIM_Init(void);
int LCDSIM_GetMouseState(LCD_tMouseState *pState);
void LCDSIM_SetMouseState(int x, int y, int KeyStat);
void LCDSIM_CheckMouseState(void);
int LCDSIM_SaveBMP (const char * sFileName);
int LCDSIM_SaveBMPEx (const char * sFileName, int x0, int y0, int xSize, int ySize);
int LCDSIM_SaveSBMP (const char * sFileName);
int LCDSIM_SaveSBMPEx(const char * sFileName, int x0, int y0, int xSize, int ySize);
/************************************************************
*
* LCDSIM_ Functions for each display
*
*************************************************************
*/
void LCDSIM_FillRect(int x0, int y0, int x1, int y1, int Index, int LayerIndex);
int LCDSIM_GetModifyCnt(int LayerIndex);
int LCDSIM_GetModifyCntInfo(int LayerIndex);
int LCDSIM_GetPixelColor(int x, int y, int LayerIndex);
int LCDSIM_GetPixelIndex(int x, int y, int LayerIndex);
int LCDSIM_Index2Color(int Index, int LayerIndex);
int LCDSIM_RLUT_GetPixelIndex(int x, int y, int LayerIndex);
void LCDSIM_RLUT_SetPixelIndex(int x, int y, int Index, int LayerIndex);
void LCDSIM_SetLUTEntry(U8 Pos, LCD_COLOR color, int LayerIndex);
void LCDSIM_SetPixelIndex(int x, int y, int Index, int LayerIndex);
void LCDSIM_SetPixelColor(int x, int y, LCD_COLOR PixelColor, int LayerIndex);
void LCDSIM_SetSubPixel(int x, int y, U8 Value, int LayerIndex);
void LCDSIM_SetSubPixelPhys(int xPhys, int yPhys, int Index, int LayerIndex);
void LCDSIM_SetPixelPhys(int x, int y, int Index, int LayerIndex);
int LCDSIM_GetPixelPhys(int xPhys, int yPhys, int LayerIndex);
void LCDSIM_FillRectPhys(int x0Phys, int y0Phys, int x1Phys, int y1Phys, int Index, int LayerIndex);
/************************************************************
*
* LCDSIM_ Declarations for painting in windows program
*
*************************************************************
*/
#if defined(_WINDOWS_) | defined(_WINDOWS_H) /* if windows.h has already been included */
void LCDSIM_Paint (HWND hWnd);
void LCDSIM_PaintEx(HWND hWnd, LPRECT pRectDest, LPRECT pRectSrc);
void LCDSIM_PaintAt(HWND hWnd, int x, int y);
#endif
#endif /* LCD_H */
@@ -0,0 +1,756 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : LCD_ConfDefaults.h
Purpose : Valid LCD configuration and defaults
----------------------------------------------------------------------
*/
#ifndef LCD_CONFIG_DEFAULTS_H
#define LCD_CONFIG_DEFAULTS_H
#include "uCGUI\Config\LCDConf.h" /* Configuration header file */
#include "GUI_ConfDefaults.h" /* Needed for GUI_NUM_LAYERS */
/*********************************************************************
*
* Map the defines for this controller
*
* #define LCD_<xxx> LCD_<xxx>_0
*
**********************************************************************
*/
#ifdef LCD_CONTROLLER_0
#define LCD_CONTROLLER LCD_CONTROLLER_0
#endif
#ifdef LCD_XSIZE_0
#define LCD_XSIZE LCD_XSIZE_0
#endif
#ifdef LCD_YSIZE_0
#define LCD_YSIZE LCD_YSIZE_0
#endif
#ifdef LCD_BITSPERPIXEL_0
#define LCD_BITSPERPIXEL LCD_BITSPERPIXEL_0
#endif
#ifdef LCD_VYSIZE_0
#define LCD_VYSIZE LCD_VYSIZE_0
#endif
#ifdef LCD_MIRROR_X_0
#define LCD_MIRROR_X LCD_MIRROR_X_0
#endif
#ifdef LCD_MIRROR_Y_0
#define LCD_MIRROR_Y LCD_MIRROR_Y_0
#endif
#ifdef LCD_SWAP_XY_0
#define LCD_SWAP_XY LCD_SWAP_XY_0
#endif
#ifdef LCD_CACHE_CONTROL_0
#define LCD_CACHE_CONTROL LCD_CACHE_CONTROL_0
#endif
#ifdef LCD_FIRSTSEG0_0
#define LCD_FIRSTSEG0 LCD_FIRSTSEG0_0
#endif
#ifdef LCD_LASTSEG0_0
#define LCD_LASTSEG0 LCD_LASTSEG0_0
#endif
#ifdef LCD_FIRSTCOM0_0
#define LCD_FIRSTCOM0 LCD_FIRSTCOM0_0
#endif
#ifdef LCD_LASTCOM0_0
#define LCD_LASTCOM0 LCD_LASTCOM0_0
#endif
#ifdef LCD_BITSPERPIXEL_L0_0
#define LCD_BITSPERPIXEL_L0 LCD_BITSPERPIXEL_0
#endif
#ifdef LCD_DELTA_MODE_0
#define LCD_DELTA_MODE LCD_DELTA_MODE_0
#endif
#ifdef LCD_XORG0_0
#define LCD_XORG0 LCD_XORG0_0
#endif
#ifdef LCD_YORG0_0
#define LCD_YORG0 LCD_YORG0_0
#endif
#ifdef LCD_FIXEDPALETTE_0
#define LCD_FIXEDPALETTE LCD_FIXEDPALETTE_0
#endif
#ifdef LCD_CACHE_0
#ifdef LCD_CACHE
#undef LCD_CACHE
#endif
#define LCD_CACHE LCD_CACHE_0
#endif
#ifdef LCD_CHECKBUSY_0
#ifdef LCD_CHECKBUSY
#undef LCD_CHECKBUSY
#endif
#define LCD_CHECKBUSY LCD_CHECKBUSY_0
#endif
#ifdef LCD_SWAP_BYTE_ORDER_0
#define LCD_SWAP_BYTE_ORDER LCD_SWAP_BYTE_ORDER_0
#endif
#ifdef LCD_SWAP_RB_0
#define LCD_SWAP_RB LCD_SWAP_RB_0
#endif
#ifdef LCD_PHYSCOLORS_0
#define LCD_PHYSCOLORS LCD_PHYSCOLORS_0
#endif
#ifndef LCD_ALLOW_NON_OPTIMIZED_MODE
#define LCD_ALLOW_NON_OPTIMIZED_MODE 0
#endif
/*********************************************************************
*
* Some error checking
*
**********************************************************************
*/
#ifndef LCD_CONTROLLER
#error LCD_CONTROLLER not defined !
#endif
/*******************************************************************
*
* Defaults for config switches
*
********************************************************************
*/
#ifndef LCD_NUM_CONTROLLERS
#define LCD_NUM_CONTROLLERS (1)
#endif
#ifndef LCD_NUM_COLORS
#define LCD_NUM_COLORS (1L<<LCD_BITSPERPIXEL)
#endif
/*********************************************************************
*
* Map the defines for controller 0 to general defines
*
**********************************************************************
*/
/* Allow use of multiple physical lines for one logical line ...
Used for delta-type LCDs, where value should be 2 */
#ifndef LCD_YMAG
#define LCD_YMAG 1
#endif
#ifndef LCD_XMAG
#define LCD_XMAG 1
#endif
#ifndef LCD_VXSIZE
#define LCD_VXSIZE (LCD_XSIZE*LCD_XMAG) /* virtual x-size */
#endif
#ifndef LCD_VYSIZE
#define LCD_VYSIZE (LCD_YSIZE*LCD_YMAG) /* virtual y-size */
#endif
#ifndef LCD_SWAP_BYTE_ORDER
#define LCD_SWAP_BYTE_ORDER (0) /* only for 16 bit bus, default is not swapped */
#endif
#ifndef LCD_MAX_LOG_COLORS
#define LCD_MAX_LOG_COLORS (256)
#endif
/* Optionally swap red and blue components */
#ifndef LCD_SWAP_RB
#define LCD_SWAP_RB 0
#endif
#if !defined (LCD_CONTROLLER) && defined (LCD_CONTROLLER_0)
#define LCD_CONTROLLER LCD_CONTROLLER_0
#endif
#if !defined (LCD_XSIZE) && defined (LCD_XSIZE_0)
#define LCD_XSIZE LCD_XSIZE_0
#endif
#if !defined (LCD_YSIZE) && defined (LCD_YSIZE_0)
#define LCD_YSIZE LCD_YSIZE_0
#endif
#if !defined (LCD_BITSPERPIXEL) && defined (LCD_BITSPERPIXEL_0)
#define LCD_BITSPERPIXEL LCD_BITSPERPIXEL_0
#endif
#if !defined (LCD_VYSIZE) && defined (LCD_VYSIZE_0)
#define LCD_VYSIZE LCD_VYSIZE_0
#endif
/*********************************************************************
*
* Defaults for Display 0 (first display)
*
**********************************************************************
*/
#ifndef LCD_MIRROR_X
#define LCD_MIRROR_X (0) /* If active: X -> -X */
#endif
#ifndef LCD_MIRROR_Y
#define LCD_MIRROR_Y (0) /* If active: Y -> -Y */
#endif
#ifndef LCD_SWAP_XY
#define LCD_SWAP_XY (0) /* If active: X <-> Y */
#endif
#ifndef LCD_BITSPERPIXEL_L0
#define LCD_BITSPERPIXEL_L0 LCD_BITSPERPIXEL
#endif
#ifndef LCD_DELTA_MODE
#define LCD_DELTA_MODE 0 /**/
#endif
/* Position data for controller 0 */
#ifndef LCD_XORG0
#define LCD_XORG0 (0) /* leftmost position covered by this controller */
#endif
#ifndef LCD_YORG0
#define LCD_YORG0 (0) /* topmost position covered by this controller */
#endif
#ifndef LCD_XSIZE0
#define LCD_XSIZE0 (LCD_XSIZE) /* horizontal size covered by this controller */
#endif
#ifndef LCD_YSIZE0
#define LCD_YSIZE0 (LCD_YSIZE) /* vertical size covered by this controller */
#endif
#ifndef LCD_FIRSTSEG0
#define LCD_FIRSTSEG0 (0) /* first segment used by this controller */
#endif
#ifndef LCD_LASTSEG0
#define LCD_LASTSEG0 (LCD_XSIZE-1) /* Contr.0: last segment line used */
#endif
#ifndef LCD_FIRSTCOM0
#define LCD_FIRSTCOM0 (0) /* first com used by this controller */
#endif
#ifndef LCD_LASTCOM0
#define LCD_LASTCOM0 (LCD_YSIZE-1) /* Contr.0: last com line used */
#endif
#if (!LCD_SWAP_XY)
#define LCD_XSIZE_PHYS LCD_XSIZE
#define LCD_YSIZE_PHYS LCD_YSIZE
#define LCD_VXSIZE_PHYS LCD_VXSIZE
#define LCD_VYSIZE_PHYS LCD_VYSIZE
#else
#define LCD_XSIZE_PHYS LCD_YSIZE
#define LCD_YSIZE_PHYS LCD_XSIZE
#define LCD_VXSIZE_PHYS LCD_VYSIZE
#define LCD_VYSIZE_PHYS LCD_VXSIZE
#endif
/**********************************************************
*
* Color settings
*/
#ifndef LCD_REVERSE
#define LCD_REVERSE 0
#endif
#ifndef LCD_REVERSE_LUT
#define LCD_REVERSE_LUT 0
#endif
#ifndef LCD_PHYSCOLORS_IN_RAM
#define LCD_PHYSCOLORS_IN_RAM 0
#endif
#if !defined (LCD_PHYSCOLORS)
#if (LCD_BITSPERPIXEL == 1) | (LCD_BITSPERPIXEL == 2) | (LCD_BITSPERPIXEL == 4)
#ifndef LCD_FIXEDPALETTE
#define LCD_FIXEDPALETTE LCD_BITSPERPIXEL
#endif
#endif
#endif /* defined (LCD_PHYSCOLORS) */
#if !defined (LCD_FIXEDPALETTE)
#if !defined (LCD_PHYSCOLORS)
#if LCD_BITSPERPIXEL == 8
#define LCD_FIXEDPALETTE 8666
#elif LCD_BITSPERPIXEL == 12
#define LCD_FIXEDPALETTE 44412
#elif LCD_BITSPERPIXEL == 15
#define LCD_FIXEDPALETTE 555
#elif LCD_BITSPERPIXEL == 16
#define LCD_FIXEDPALETTE 565
#else
#define LCD_FIXEDPALETTE 0
#endif
#else
#define LCD_FIXEDPALETTE 0
#endif
#endif
#if (LCD_BITSPERPIXEL > 8) && defined (LCD_PHYSCOLORS)
#error List of physical colors not permitted if more than 8 bpp are used !
#endif
#if (LCD_FIXEDPALETTE==0)
#if !defined(LCD_PHYSCOLORS)
#error You have to define a fixed palette (LCD_FIXEDPALETTE) or
#error the list of physical colors (LCD_PHYSCOLORS) in LCDConf.h !
#endif
#endif
/* In order to avoid warnings for undefined parameters */
#ifndef LCD_USE_PARA
#define LCD_USE_PARA(para) para=para;
#endif
/*********************************************************************
*
* Defaults for Display 1 (second display)
*
**********************************************************************
*/
#if GUI_NUM_LAYERS > 1
#ifndef LCD_MIRROR_X_1
#define LCD_MIRROR_X_1 (0) /* If active: X -> -X */
#endif
#ifndef LCD_MIRROR_Y_1
#define LCD_MIRROR_Y_1 (0) /* If active: Y -> -Y */
#endif
#ifndef LCD_SWAP_XY_1
#define LCD_SWAP_XY_1 (0) /* If active: X <-> Y */
#endif
#ifndef LCD_BITSPERPIXEL_L0_1
#define LCD_BITSPERPIXEL_L0_1 LCD_BITSPERPIXEL_1
#endif
#ifndef LCD_DELTA_MODE_1
#define LCD_DELTA_MODE_1 0 /**/
#endif
#ifndef LCD_YMAG_1
#define LCD_YMAG_1 1
#endif
#ifndef LCD_XMAG_1
#define LCD_XMAG_1 1
#endif
#ifndef LCD_VXSIZE_1
#define LCD_VXSIZE_1 (LCD_XSIZE_1 * LCD_XMAG_1) /* virtual x-size */
#endif
#ifndef LCD_VYSIZE_1
#define LCD_VYSIZE_1 (LCD_YSIZE_1 * LCD_YMAG_1) /* virtual y-size */
#endif
#ifndef LCD_NUM_COLORS_1
#define LCD_NUM_COLORS_1 (1L<<LCD_BITSPERPIXEL_1)
#endif
/* Optionally swap red and blue components */
#ifndef LCD_SWAP_RB_1
#define LCD_SWAP_RB_1 0
#endif
/**********************************************************
*
* Color settings
*/
#ifndef LCD_REVERSE_1
#define LCD_REVERSE_1 0
#endif
#ifndef LCD_REVERSE_LUT_1
#define LCD_REVERSE_LUT_1 0
#endif
#if !defined (LCD_PHYSCOLORS_1)
#if (LCD_BITSPERPIXEL_1 == 1) | (LCD_BITSPERPIXEL_1 == 2) | (LCD_BITSPERPIXEL_1 == 4)
#ifndef LCD_FIXEDPALETTE_1
#define LCD_FIXEDPALETTE_1 LCD_BITSPERPIXEL_1
#endif
#endif
#endif /* defined (LCD_PHYSCOLORS) */
#if !defined (LCD_FIXEDPALETTE_1)
#if !defined (LCD_PHYSCOLORS_1)
#if LCD_BITSPERPIXEL_1 == 8
#define LCD_FIXEDPALETTE_1 8666
#elif LCD_BITSPERPIXEL_1 == 15
#define LCD_FIXEDPALETTE_1 555
#elif LCD_BITSPERPIXEL_1 == 16
#define LCD_FIXEDPALETTE_1 565
#else
#define LCD_FIXEDPALETTE_1 0
#endif
#else
#define LCD_FIXEDPALETTE_1 0
#endif
#endif
#if (LCD_BITSPERPIXEL_1 > 8) && defined (LCD_PHYSCOLORS_1)
#error List of physical colors not permitted if more than 8 bpp are used !
#endif
#if (LCD_FIXEDPALETTE_1 == 0)
#if !defined(LCD_PHYSCOLORS_1)
#error You have to define a fixed palette (LCD_FIXEDPALETTE_1) or
#error the list of physical colors (LCD_PHYSCOLORS_1) in LCDConf.h !
#endif
#endif
#endif /* GUI_NUM_LAYERS > 1 */
/*********************************************************************
*
* Defaults for Display 2 (third display)
*
**********************************************************************
*/
#if GUI_NUM_LAYERS > 2
#ifndef LCD_MIRROR_X_2
#define LCD_MIRROR_X_2 (0) /* If active: X -> -X */
#endif
#ifndef LCD_MIRROR_Y_2
#define LCD_MIRROR_Y_2 (0) /* If active: Y -> -Y */
#endif
#ifndef LCD_SWAP_XY_2
#define LCD_SWAP_XY_2 (0) /* If active: X <-> Y */
#endif
#ifndef LCD_BITSPERPIXEL_L0_2
#define LCD_BITSPERPIXEL_L0_2 LCD_BITSPERPIXEL_2
#endif
#ifndef LCD_DELTA_MODE_2
#define LCD_DELTA_MODE_2 0 /**/
#endif
#ifndef LCD_YMAG_2
#define LCD_YMAG_2 1
#endif
#ifndef LCD_XMAG_2
#define LCD_XMAG_2 1
#endif
#ifndef LCD_VXSIZE_2
#define LCD_VXSIZE_2 (LCD_XSIZE_2 * LCD_XMAG_2) /* virtual x-size */
#endif
#ifndef LCD_VYSIZE_2
#define LCD_VYSIZE_2 (LCD_YSIZE_2 * LCD_YMAG_2) /* virtual y-size */
#endif
#ifndef LCD_NUM_COLORS_2
#define LCD_NUM_COLORS_2 (1L<<LCD_BITSPERPIXEL_2)
#endif
/* Optionally swap red and blue components */
#ifndef LCD_SWAP_RB_2
#define LCD_SWAP_RB_2 0
#endif
/**********************************************************
*
* Color settings
*/
#ifndef LCD_REVERSE_2
#define LCD_REVERSE_2 0
#endif
#ifndef LCD_REVERSE_LUT_2
#define LCD_REVERSE_LUT_2 0
#endif
#if !defined (LCD_PHYSCOLORS_2)
#if (LCD_BITSPERPIXEL_2 == 1) | (LCD_BITSPERPIXEL_2 == 2) | (LCD_BITSPERPIXEL_2 == 4)
#ifndef LCD_FIXEDPALETTE_2
#define LCD_FIXEDPALETTE_2 LCD_BITSPERPIXEL_2
#endif
#endif
#endif /* defined (LCD_PHYSCOLORS) */
#if !defined (LCD_FIXEDPALETTE_2)
#if !defined (LCD_PHYSCOLORS_2)
#if LCD_BITSPERPIXEL_2 == 8
#define LCD_FIXEDPALETTE_2 8666
#elif LCD_BITSPERPIXEL_2 == 15
#define LCD_FIXEDPALETTE_2 555
#elif LCD_BITSPERPIXEL_2 == 16
#define LCD_FIXEDPALETTE_2 565
#else
#define LCD_FIXEDPALETTE_2 0
#endif
#else
#define LCD_FIXEDPALETTE_2 0
#endif
#endif
#if (LCD_BITSPERPIXEL_2 > 8) && defined (LCD_PHYSCOLORS_2)
#error List of physical colors not permitted if more than 8 bpp are used !
#endif
#if (LCD_FIXEDPALETTE_2 == 0)
#if !defined(LCD_PHYSCOLORS_2)
#error You have to define a fixed palette (LCD_FIXEDPALETTE_2) or
#error the list of physical colors (LCD_PHYSCOLORS_2) in LCDConf.h !
#endif
#endif
#endif /* GUI_NUM_LAYERS > 2 */
/*********************************************************************
*
* Defaults for Display 3 (fourth display)
*
**********************************************************************
*/
#if GUI_NUM_LAYERS > 3
#ifndef LCD_MIRROR_X_3
#define LCD_MIRROR_X_3 (0) /* If active: X -> -X */
#endif
#ifndef LCD_MIRROR_Y_3
#define LCD_MIRROR_Y_3 (0) /* If active: Y -> -Y */
#endif
#ifndef LCD_SWAP_XY_3
#define LCD_SWAP_XY_3 (0) /* If active: X <-> Y */
#endif
#ifndef LCD_BITSPERPIXEL_L0_3
#define LCD_BITSPERPIXEL_L0_3 LCD_BITSPERPIXEL_3
#endif
#ifndef LCD_DELTA_MODE_3
#define LCD_DELTA_MODE_3 0 /**/
#endif
#ifndef LCD_YMAG_3
#define LCD_YMAG_3 1
#endif
#ifndef LCD_XMAG_3
#define LCD_XMAG_3 1
#endif
#ifndef LCD_VXSIZE_3
#define LCD_VXSIZE_3 (LCD_XSIZE_3 * LCD_XMAG_3) /* virtual x-size */
#endif
#ifndef LCD_VYSIZE_3
#define LCD_VYSIZE_3 (LCD_YSIZE_3 * LCD_YMAG_3) /* virtual y-size */
#endif
#ifndef LCD_NUM_COLORS_3
#define LCD_NUM_COLORS_3 (1L<<LCD_BITSPERPIXEL_3)
#endif
/* Optionally swap red and blue components */
#ifndef LCD_SWAP_RB_3
#define LCD_SWAP_RB_3 0
#endif
/**********************************************************
*
* Color settings
*/
#ifndef LCD_REVERSE_3
#define LCD_REVERSE_3 0
#endif
#ifndef LCD_REVERSE_LUT_3
#define LCD_REVERSE_LUT_3 0
#endif
#if !defined (LCD_PHYSCOLORS_3)
#if (LCD_BITSPERPIXEL_3 == 1) | (LCD_BITSPERPIXEL_3 == 2) | (LCD_BITSPERPIXEL_3 == 4)
#ifndef LCD_FIXEDPALETTE_3
#define LCD_FIXEDPALETTE_3 LCD_BITSPERPIXEL_3
#endif
#endif
#endif /* defined (LCD_PHYSCOLORS) */
#if !defined (LCD_FIXEDPALETTE_3)
#if !defined (LCD_PHYSCOLORS_3)
#if LCD_BITSPERPIXEL_3 == 8
#define LCD_FIXEDPALETTE_3 8666
#elif LCD_BITSPERPIXEL_3 == 15
#define LCD_FIXEDPALETTE_3 555
#elif LCD_BITSPERPIXEL_3 == 16
#define LCD_FIXEDPALETTE_3 565
#else
#define LCD_FIXEDPALETTE_3 0
#endif
#else
#define LCD_FIXEDPALETTE_3 0
#endif
#endif
#if (LCD_BITSPERPIXEL_3 > 8) && defined (LCD_PHYSCOLORS_3)
#error List of physical colors not permitted if more than 8 bpp are used !
#endif
#if (LCD_FIXEDPALETTE_3 == 0)
#if !defined(LCD_PHYSCOLORS_3)
#error You have to define a fixed palette (LCD_FIXEDPALETTE_3) or
#error the list of physical colors (LCD_PHYSCOLORS_3) in LCDConf.h !
#endif
#endif
#endif /* GUI_NUM_LAYERS > 3 */
/*********************************************************************
*
* Defaults for Display 4 (fiveth display)
*
**********************************************************************
*/
#if GUI_NUM_LAYERS > 4
#ifndef LCD_MIRROR_X_4
#define LCD_MIRROR_X_4 (0) /* If active: X -> -X */
#endif
#ifndef LCD_MIRROR_Y_4
#define LCD_MIRROR_Y_4 (0) /* If active: Y -> -Y */
#endif
#ifndef LCD_SWAP_XY_4
#define LCD_SWAP_XY_4 (0) /* If active: X <-> Y */
#endif
#ifndef LCD_BITSPERPIXEL_L0_4
#define LCD_BITSPERPIXEL_L0_4 LCD_BITSPERPIXEL_4
#endif
#ifndef LCD_DELTA_MODE_4
#define LCD_DELTA_MODE_4 0 /**/
#endif
#ifndef LCD_YMAG_4
#define LCD_YMAG_4 1
#endif
#ifndef LCD_XMAG_4
#define LCD_XMAG_4 1
#endif
#ifndef LCD_VXSIZE_4
#define LCD_VXSIZE_4 (LCD_XSIZE_4 * LCD_XMAG_4) /* virtual x-size */
#endif
#ifndef LCD_VYSIZE_4
#define LCD_VYSIZE_4 (LCD_YSIZE_4 * LCD_YMAG_4) /* virtual y-size */
#endif
#ifndef LCD_NUM_COLORS_4
#define LCD_NUM_COLORS_4 (1L<<LCD_BITSPERPIXEL_4)
#endif
/* Optionally swap red and blue components */
#ifndef LCD_SWAP_RB_4
#define LCD_SWAP_RB_4 0
#endif
/**********************************************************
*
* Color settings
*/
#ifndef LCD_REVERSE_4
#define LCD_REVERSE_4 0
#endif
#ifndef LCD_REVERSE_LUT_4
#define LCD_REVERSE_LUT_4 0
#endif
#if !defined (LCD_PHYSCOLORS_4)
#if (LCD_BITSPERPIXEL_4 == 1) | (LCD_BITSPERPIXEL_4 == 2) | (LCD_BITSPERPIXEL_4 == 4)
#ifndef LCD_FIXEDPALETTE_4
#define LCD_FIXEDPALETTE_4 LCD_BITSPERPIXEL_4
#endif
#endif
#endif /* defined (LCD_PHYSCOLORS) */
#if !defined (LCD_FIXEDPALETTE_4)
#if !defined (LCD_PHYSCOLORS_4)
#if LCD_BITSPERPIXEL_4 == 8
#define LCD_FIXEDPALETTE_4 8666
#elif LCD_BITSPERPIXEL_4 == 15
#define LCD_FIXEDPALETTE_4 555
#elif LCD_BITSPERPIXEL_4 == 16
#define LCD_FIXEDPALETTE_4 565
#else
#define LCD_FIXEDPALETTE_4 0
#endif
#else
#define LCD_FIXEDPALETTE_4 0
#endif
#endif
#if (LCD_BITSPERPIXEL_4 > 8) && defined (LCD_PHYSCOLORS_4)
#error List of physical colors not permitted if more than 8 bpp are used !
#endif
#if (LCD_FIXEDPALETTE_4 == 0)
#if !defined(LCD_PHYSCOLORS_4)
#error You have to define a fixed palette (LCD_FIXEDPALETTE_4) or
#error the list of physical colors (LCD_PHYSCOLORS_4) in LCDConf.h !
#endif
#endif
#endif /* GUI_NUM_LAYERS > 4 */
/*********************************************************************
*
* Global defaults for all displays
*
**********************************************************************
*/
#if (LCD_BITSPERPIXEL <= 8) && (GUI_NUM_LAYERS < 2)
#define LCD_PIXELINDEX U8
#else
#define LCD_PIXELINDEX U16
#endif
#endif /* LCD_INTERN_H */
@@ -0,0 +1,97 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : LCD_IncludeDriver.h
Purpose : Glue code for including the configured driver
---------------------------END-OF-HEADER------------------------------
*/
#ifndef LCD_INCLUDEDRIVER_H
#define LCD_INCLUDEDRIVER_H
/*********************************************************************
*
* Some error checking
*
**********************************************************************
*/
#ifndef LCD_CONTROLLER
#error LCD_CONTROLLER not defined !
#endif
/*********************************************************************
*
* Color conversion routines for layer <n>
*
**********************************************************************
*/
#include "LCD_L0_Generic.c"
/*********************************************************************
*
* Driver for layer <n>
*
**********************************************************************
*/
#if !defined(WIN32) | defined(LCD_SIMCONTROLLER)
#if (LCD_CONTROLLER == -2)
#include "LCDNull.c" /* Empty driver, no output to LCD */
#elif (LCD_CONTROLLER == -1)
#include "LCDDummy.c" /* Empty driver, no output to LCD */
#elif (LCD_CONTROLLER == 0)
#if ((LCD_BITSPERPIXEL == 1) | (LCD_BITSPERPIXEL == 2))
#include "LCDMem.c"
#elif ((LCD_BITSPERPIXEL == 3) | (LCD_BITSPERPIXEL == 6))
#include "LCDMemC.c"
#else
#error LCD Config error !
#endif
#elif (LCD_CONTROLLER / 100 == 4)
#include "LCDColorOnMono.c"
#elif (LCD_CONTROLLER / 100 == 5)
#include "LCD501.c"
#elif (LCD_CONTROLLER / 100 == 7)
#include "LCD07X1.c"
#elif (LCD_CONTROLLER / 100 == 13)
#include "LCDLin.c"
#elif (LCD_CONTROLLER / 100 == 15)
#include "LCDPage1bpp.c"
#include "LCDPage1bpp_1.c"
#elif (LCD_CONTROLLER / 100 == 16)
#include "LCD159A.c"
#elif (LCD_CONTROLLER / 100 == 17)
#include "LCD15E05.c"
#elif (LCD_CONTROLLER / 100 == 18)
#include "LCD1611.c"
#elif (LCD_CONTROLLER / 100 == 32)
#include "LCDLin32.c"
#elif (LCD_CONTROLLER / 100 == 69)
#include "LCDSLin.c"
#elif (LCD_CONTROLLER / 100 == 87)
#include "LCDFujitsu.c"
#elif (LCD_CONTROLLER / 100 == 63)
#include "LCD6331.c"
#elif (LCD_CONTROLLER / 100 == 664)
#include "LCD6642X.c"
#else
#error LCD Config error !
#endif
#else
#include "LCDWin.c"
#endif
#endif /* LCD_INCLUDEDRIVER_H */
@@ -0,0 +1,119 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : LCD_Private.h
Purpose : Internals of the LCD level
----------------------------------------------------------------------
*/
#ifndef LCD_Private_H
#define LCD_Private_H
#include "LCD_ConfDefaults.h" /* Configuration header file */
#include "LCD_Protected.h"
#include "GUI.h"
typedef struct {
LCD_COLOR * paColor;
I16 NumEntries;
} LCD_LUT_INFO;
#if LCD_PHYSCOLORS_IN_RAM
#if (LCD_FIXEDPALETTE == 0)
#if (LCD_FIXEDPALETTE == 0)
extern LCD_COLOR LCD_PhysColors[1 << LCD_BITSPERPIXEL];
#endif
#endif
#if (GUI_NUM_LAYERS > 1)
#if (LCD_FIXEDPALETTE_1 == 0)
extern LCD_COLOR LCD_PhysColors_1[1 << LCD_BITSPERPIXEL_1];
#endif
#endif
#if (GUI_NUM_LAYERS > 2)
#if (LCD_FIXEDPALETTE_2 == 0)
extern LCD_COLOR LCD_PhysColors_2[1 << LCD_BITSPERPIXEL_2];
#endif
#endif
#if (GUI_NUM_LAYERS > 3)
#if (LCD_FIXEDPALETTE_3 == 0)
extern LCD_COLOR LCD_PhysColors_3[1 << LCD_BITSPERPIXEL_3];
#endif
#endif
#if (GUI_NUM_LAYERS > 4)
#if (LCD_FIXEDPALETTE_4 == 0)
extern LCD_COLOR LCD_PhysColors_4[1 << LCD_BITSPERPIXEL_4];
#endif
#endif
#endif
#if GUI_COMPILER_SUPPORTS_FP
extern const struct tLCDDEV_APIList_struct * /* const */ LCD_aAPI[GUI_NUM_LAYERS];
const tLCDDEV_APIList* LCD_SetAPI(const tLCDDEV_APIList* pAPI, int Index);
#endif
#if (LCD_BITSPERPIXEL <= 8) && (GUI_NUM_LAYERS < 2)
#define LCD_BKCOLORINDEX GUI_Context.LCD.aColorIndex8[0]
#define LCD_COLORINDEX GUI_Context.LCD.aColorIndex8[1]
#define LCD_ACOLORINDEX GUI_Context.LCD.aColorIndex8
#else
#define LCD_BKCOLORINDEX GUI_Context.LCD.aColorIndex16[0]
#define LCD_COLORINDEX GUI_Context.LCD.aColorIndex16[1]
#define LCD_ACOLORINDEX GUI_Context.LCD.aColorIndex16
#endif
extern LCD_PIXELINDEX LCD__aConvTable[LCD_MAX_LOG_COLORS];
void LCD_DrawBitmap (int x0, int y0,
int xsize, int ysize,
int xMul, int yMul,
int BitsPerPixel,
int BytesPerLine,
const U8 GUI_UNI_PTR * pPixel,
const LCD_PIXELINDEX* pTrans);
void LCD_UpdateColorIndices(void);
/*********************************************************************
*
* Support for Segment/COMLUTs
*
**********************************************************************
*/
#define LCD_TYPE_SEGTRANS U16
#define LCD_TYPE_COMTRANS U16
#ifdef LCD_LUT_COM
#ifdef LCDCOLOR_C
LCD_TYPE_COMTRANS LCD__aLine2Com0[LCD_YSIZE] = { LCD_LUT_COM };
#else
extern LCD_TYPE_COMTRANS LCD__aLine2Com0[LCD_YSIZE];
#endif
#endif
#ifdef LCD_LUT_SEG
#ifdef LCDCOLOR_C
LCD_TYPE_SEGTRANS LCD__aCol2Seg0[LCD_XSIZE] = { LCD_LUT_SEG };
#else
extern LCD_TYPE_COMTRANS LCD__aCol2Seg0[LCD_XSIZE];
#endif
#endif
#endif /* Avoid multiple inclusion */
/*************************** End of file ****************************/
@@ -0,0 +1,255 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : LCD_Protected.h
Purpose : Internals of the LCD level
----------------------------------------------------------------------
*/
#ifndef LCD_INTERN_H
#define LCD_INTERN_H
#include "LCD.h"
/*********************************************************************
*
* Data types
*
**********************************************************************
*/
typedef struct {
int NumEntries;
const LCD_COLOR* pPalEntries;
} LCD_PHYSPALETTE;
/*********************************************************************
*
* Data
*
**********************************************************************
*/
extern GUI_CONST_STORAGE U8 LCD_aMirror[256];
/********************************************************
*
* Color conversion routines (used internally only !
*
*********************************************************
*/
unsigned LCD_Color2Index_User (LCD_COLOR Color);
unsigned LCD_Color2Index_0 (LCD_COLOR Color, const LCD_PHYSPALETTE* pPhysPal);
unsigned LCD_Color2Index_1 (LCD_COLOR Color);
unsigned LCD_Color2Index_M1 (LCD_COLOR Color);
unsigned LCD_Color2Index_2 (LCD_COLOR Color);
unsigned LCD_Color2Index_M2 (LCD_COLOR Color);
unsigned LCD_Color2Index_4 (LCD_COLOR Color);
unsigned LCD_Color2Index_M4 (LCD_COLOR Color);
unsigned LCD_Color2Index_111 (LCD_COLOR Color);
unsigned LCD_Color2Index_222 (LCD_COLOR Color);
unsigned LCD_Color2Index_233 (LCD_COLOR Color);
unsigned LCD_Color2Index_323 (LCD_COLOR Color);
unsigned LCD_Color2Index_332 (LCD_COLOR Color);
unsigned LCD_Color2Index_444_12 (LCD_COLOR Color);
unsigned LCD_Color2Index_444_12_1(LCD_COLOR Color);
unsigned LCD_Color2Index_444_16 (LCD_COLOR Color);
unsigned LCD_Color2Index_555 (LCD_COLOR Color);
unsigned LCD_Color2Index_565 (LCD_COLOR Color);
unsigned LCD_Color2Index_556 (LCD_COLOR Color);
unsigned LCD_Color2Index_655 (LCD_COLOR Color);
unsigned LCD_Color2Index_8666 (LCD_COLOR Color);
unsigned LCD_Color2Index_8666_1 (LCD_COLOR Color);
unsigned LCD_Color2Index_M111 (LCD_COLOR Color);
unsigned LCD_Color2Index_M222 (LCD_COLOR Color);
unsigned LCD_Color2Index_M233 (LCD_COLOR Color);
unsigned LCD_Color2Index_M323 (LCD_COLOR Color);
unsigned LCD_Color2Index_M332 (LCD_COLOR Color);
unsigned LCD_Color2Index_M444_12 (LCD_COLOR Color);
unsigned LCD_Color2Index_M444_16 (LCD_COLOR Color);
unsigned LCD_Color2Index_M555 (LCD_COLOR Color);
unsigned LCD_Color2Index_M565 (LCD_COLOR Color);
unsigned LCD_Color2Index_M556 (LCD_COLOR Color);
unsigned LCD_Color2Index_M655 (LCD_COLOR Color);
LCD_COLOR LCD_Index2Color_User (int Index);
LCD_COLOR LCD_Index2Color_0 (int Index, const LCD_PHYSPALETTE* pPhysPal);
LCD_COLOR LCD_Index2Color_1 (int Index);
LCD_COLOR LCD_Index2Color_2 (int Index);
LCD_COLOR LCD_Index2Color_4 (int Index);
LCD_COLOR LCD_Index2Color_111 (int Index);
LCD_COLOR LCD_Index2Color_222 (int Index);
LCD_COLOR LCD_Index2Color_233 (int Index);
LCD_COLOR LCD_Index2Color_323 (int Index);
LCD_COLOR LCD_Index2Color_332 (int Index);
LCD_COLOR LCD_Index2Color_444_12 (int Index);
LCD_COLOR LCD_Index2Color_444_12_1(int Index);
LCD_COLOR LCD_Index2Color_444_16 (int Index);
LCD_COLOR LCD_Index2Color_555 (int Index);
LCD_COLOR LCD_Index2Color_565 (int Index);
LCD_COLOR LCD_Index2Color_556 (int Index);
LCD_COLOR LCD_Index2Color_655 (int Index);
LCD_COLOR LCD_Index2Color_8666 (int Index);
LCD_COLOR LCD_Index2Color_8666_1 (int Index);
LCD_COLOR LCD_Index2Color_M111 (int Index);
LCD_COLOR LCD_Index2Color_M222 (int Index);
LCD_COLOR LCD_Index2Color_M233 (int Index);
LCD_COLOR LCD_Index2Color_M323 (int Index);
LCD_COLOR LCD_Index2Color_M332 (int Index);
LCD_COLOR LCD_Index2Color_M444_12 (int Index);
LCD_COLOR LCD_Index2Color_M444_16 (int Index);
LCD_COLOR LCD_Index2Color_M555 (int Index);
LCD_COLOR LCD_Index2Color_M565 (int Index);
LCD_COLOR LCD_Index2Color_M556 (int Index);
LCD_COLOR LCD_Index2Color_M655 (int Index);
unsigned LCD_GetIndexMask_User (void);
unsigned LCD_GetIndexMask_0 (void);
unsigned LCD_GetIndexMask_1 (void);
unsigned LCD_GetIndexMask_M1 (void);
unsigned LCD_GetIndexMask_2 (void);
unsigned LCD_GetIndexMask_M2 (void);
unsigned LCD_GetIndexMask_4 (void);
unsigned LCD_GetIndexMask_M4 (void);
unsigned LCD_GetIndexMask_111 (void);
unsigned LCD_GetIndexMask_222 (void);
unsigned LCD_GetIndexMask_233 (void);
unsigned LCD_GetIndexMask_323 (void);
unsigned LCD_GetIndexMask_332 (void);
unsigned LCD_GetIndexMask_444_12 (void);
unsigned LCD_GetIndexMask_444_12_1(void);
unsigned LCD_GetIndexMask_444_16 (void);
unsigned LCD_GetIndexMask_555 (void);
unsigned LCD_GetIndexMask_565 (void);
unsigned LCD_GetIndexMask_556 (void);
unsigned LCD_GetIndexMask_655 (void);
unsigned LCD_GetIndexMask_8666 (void);
unsigned LCD_GetIndexMask_8666_1 (void);
unsigned LCD_GetIndexMask_M111 (void);
unsigned LCD_GetIndexMask_M222 (void);
unsigned LCD_GetIndexMask_M233 (void);
unsigned LCD_GetIndexMask_M323 (void);
unsigned LCD_GetIndexMask_M332 (void);
unsigned LCD_GetIndexMask_M444_12 (void);
unsigned LCD_GetIndexMask_M444_16 (void);
unsigned LCD_GetIndexMask_M555 (void);
unsigned LCD_GetIndexMask_M565 (void);
unsigned LCD_GetIndexMask_M556 (void);
unsigned LCD_GetIndexMask_M655 (void);
void LCD_SelectLCD(void);
/*********************************************************************
*
* Declarations for LCD_L0_
*
**********************************************************************
Prefixes are as follows:
LCD_L0_xxx ... Driver for first LCD
LCD_L0_1_xxx ... Driver for second LCD/layer
LCD_L0_2_xxx ... Driver for third LCD/layer
LCD_L0_MAG_xxx ... Driver for first LCD, magnification level (calling LCD_L0_xxx after magnification)
LCD_L0_DELTA_xxx ... Driver for first LCD, delta mode
*/
unsigned int LCD_L0_Color2Index (LCD_COLOR Color);
unsigned int LCD_L0_1_Color2Index (LCD_COLOR Color);
unsigned int LCD_L0_2_Color2Index (LCD_COLOR Color);
unsigned int LCD_L0_3_Color2Index (LCD_COLOR Color);
unsigned int LCD_L0_4_Color2Index (LCD_COLOR Color);
void LCD_L0_DrawHLine (int x0, int y0, int x1);
void LCD_L0_1_DrawHLine (int x0, int y0, int x1);
void LCD_L0_2_DrawHLine (int x0, int y0, int x1);
void LCD_L0_3_DrawHLine (int x0, int y0, int x1);
void LCD_L0_4_DrawHLine (int x0, int y0, int x1);
void LCD_L0_MAG_DrawHLine (int x0, int y0, int x1);
void LCD_L0_DELTA_DrawHLine (int x0, int y0, int x1);
void LCD_L0_DrawVLine (int x, int y0, int y1);
void LCD_L0_1_DrawVLine (int x, int y0, int y1);
void LCD_L0_2_DrawVLine (int x, int y0, int y1);
void LCD_L0_3_DrawVLine (int x, int y0, int y1);
void LCD_L0_4_DrawVLine (int x, int y0, int y1);
void LCD_L0_MAG_DrawVLine (int x, int y0, int y1);
void LCD_L0_DELTA_DrawVLine (int x, int y0, int y1);
void LCD_L0_FillRect (int x0, int y0, int x1, int y1);
void LCD_L0_1_FillRect (int x0, int y0, int x1, int y1);
void LCD_L0_2_FillRect (int x0, int y0, int x1, int y1);
void LCD_L0_3_FillRect (int x0, int y0, int x1, int y1);
void LCD_L0_4_FillRect (int x0, int y0, int x1, int y1);
void LCD_L0_MAG_FillRect (int x0, int y0, int x1, int y1);
void LCD_L0_DELTA_FillRect (int x0, int y0, int x1, int y1);
unsigned int LCD_L0_GetPixelIndex (int x, int y);
unsigned int LCD_L0_1_GetPixelIndex (int x, int y);
unsigned int LCD_L0_2_GetPixelIndex (int x, int y);
unsigned int LCD_L0_3_GetPixelIndex (int x, int y);
unsigned int LCD_L0_4_GetPixelIndex (int x, int y);
unsigned int LCD_L0_MAG_GetPixelIndex (int x, int y);
unsigned int LCD_L0_DELTA_GetPixelIndex (int x, int y);
void LCD_L0_GetRect (LCD_RECT * pRect);
void LCD_L0_1_GetRect (LCD_RECT * pRect);
void LCD_L0_2_GetRect (LCD_RECT * pRect);
void LCD_L0_3_GetRect (LCD_RECT * pRect);
void LCD_L0_4_GetRect (LCD_RECT * pRect);
void LCD_L0_SetPixelIndex (int x, int y, int ColorIndex);
void LCD_L0_1_SetPixelIndex (int x, int y, int ColorIndex);
void LCD_L0_2_SetPixelIndex (int x, int y, int ColorIndex);
void LCD_L0_3_SetPixelIndex (int x, int y, int ColorIndex);
void LCD_L0_4_SetPixelIndex (int x, int y, int ColorIndex);
void LCD_L0_MAG_SetPixelIndex (int x, int y, int ColorIndex);
void LCD_L0_DELTA_SetPixelIndex (int x, int y, int ColorIndex);
void LCD_L0_XorPixel (int x, int y);
void LCD_L0_1_XorPixel (int x, int y);
void LCD_L0_2_XorPixel (int x, int y);
void LCD_L0_3_XorPixel (int x, int y);
void LCD_L0_4_XorPixel (int x, int y);
void LCD_L0_MAG_XorPixel (int x, int y);
void LCD_L0_DELTA_XorPixel (int x, int y);
int LCD_L0_Init (void);
int LCD_L0_1_Init (void);
int LCD_L0_2_Init (void);
int LCD_L0_3_Init (void);
int LCD_L0_4_Init (void);
int LCD_L0_MAG_Init (void);
int LCD_L0_DELTA_Init (void);
void LCD_L0_On (void);
void LCD_L0_1_On (void);
void LCD_L0_2_On (void);
void LCD_L0_3_On (void);
void LCD_L0_4_On (void);
void LCD_L0_Off (void);
void LCD_L0_1_Off (void);
void LCD_L0_2_Off (void);
void LCD_L0_3_Off (void);
void LCD_L0_4_Off (void);
void LCD_L0_SetLUTEntry (U8 Pos, LCD_COLOR color);
void LCD_L0_1_SetLUTEntry (U8 Pos, LCD_COLOR color);
void LCD_L0_2_SetLUTEntry (U8 Pos, LCD_COLOR color);
void LCD_L0_3_SetLUTEntry (U8 Pos, LCD_COLOR color);
void LCD_L0_4_SetLUTEntry (U8 Pos, LCD_COLOR color);
void LCD_L0_ReInit (void); /* Reinitialize LCD using config-paramters */
void LCD_L0_Refresh (void); /* Refresh entire LCD */
/* Refresh LCD partially. Could be one line, depends on what
the LCD controller can handle efficiently */
void LCD_L0_SetOrg (int x, int y);
#endif /* LCD_INTERN_H */
/*************************** End of file ****************************/
@@ -0,0 +1,175 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : LISTBOX.h
Purpose : LISTBOX widget include
--------------------END-OF-HEADER-------------------------------------
*/
#ifndef LISTBOX_H
#define LISTBOX_H
#include "WM.h"
#include "WIDGET.h" /* Req. for WIDGET_DRAW_ITEM_FUNC */
#include "DIALOG_Intern.h" /* Req. for Create indirect data structure */
#if GUI_WINSUPPORT
#if defined(__cplusplus)
extern "C" { /* Make sure we have C-declarations in C++ programs */
#endif
/*********************************************************************
*
* defines
*
**********************************************************************
*/
#define LISTBOX_ALL_ITEMS -1
/*********************************************************************
*
* Color indices
*/
#define LISTBOX_CI_UNSEL 0
#define LISTBOX_CI_SEL 1
#define LISTBOX_CI_SELFOCUS 2
/************************************************************
*
* States
*/
typedef WM_HMEM LISTBOX_Handle;
/*********************************************************************
*
* Notification codes
*
* The following is the list of notification codes specific to this widget,
* Send with the WM_NOTIFY_PARENT message
*/
#define LISTBOX_NOTIFICATION_LOST_FOCUS (WM_NOTIFICATION_WIDGET + 0)
/************************************************************
*
* Create / Status flags
*/
#define LISTBOX_CF_AUTOSCROLLBAR_H (1<<0)
#define LISTBOX_CF_AUTOSCROLLBAR_V (1<<1)
#define LISTBOX_CF_MULTISEL (1<<2)
#define LISTBOX_SF_AUTOSCROLLBAR_H LISTBOX_CF_AUTOSCROLLBAR_H
#define LISTBOX_SF_AUTOSCROLLBAR_V LISTBOX_CF_AUTOSCROLLBAR_V
#define LISTBOX_SF_MULTISEL LISTBOX_CF_MULTISEL
/*********************************************************************
*
* Standard member functions
*
**********************************************************************
*/
#define LISTBOX_EnableMemdev(hObj) WM_EnableMemdev(hObj)
#define LISTBOX_DisableMemdev(hObj) WM_DisableMemdev(hObj)
#define LISTBOX_Delete(hObj) WM_DeleteWindow(hObj)
#define LISTBOX_Paint(hObj) WM_Paint(hObj)
#define LISTBOX_Invalidate(hObj) WM_InvalidateWindow(hObj)
/*********************************************************************
*
* Create functions
*
**********************************************************************
*/
LISTBOX_Handle LISTBOX_Create (const GUI_ConstString* ppText, int x0, int y0, int xsize, int ysize, int Flags);
LISTBOX_Handle LISTBOX_CreateAsChild (const GUI_ConstString* ppText, WM_HWIN hWinParent, int x0, int y0, int xsize, int ysize, int Flags);
LISTBOX_Handle LISTBOX_CreateIndirect(const GUI_WIDGET_CREATE_INFO* pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK* cb);
LISTBOX_Handle LISTBOX_CreateEx (int x0, int y0, int xsize, int ysize, WM_HWIN hParent,
int WinFlags, int ExFlags, int Id, const GUI_ConstString* ppText);
/*********************************************************************
*
* Member functions
*
**********************************************************************
*/
int LISTBOX_AddKey (LISTBOX_Handle hObj, int Key);
void LISTBOX_AddString (LISTBOX_Handle hObj, const char* s);
void LISTBOX_DecSel (LISTBOX_Handle hObj);
void LISTBOX_DeleteItem (LISTBOX_Handle hObj, unsigned int Index);
unsigned LISTBOX_GetItemSpacing (LISTBOX_Handle hObj);
unsigned LISTBOX_GetNumItems (LISTBOX_Handle hObj);
int LISTBOX_GetSel (LISTBOX_Handle hObj);
const GUI_FONT GUI_UNI_PTR * LISTBOX_GetFont (LISTBOX_Handle hObj);
int LISTBOX_GetItemDisabled (LISTBOX_Handle hObj, unsigned Index);
int LISTBOX_GetItemSel (LISTBOX_Handle hObj, unsigned Index);
void LISTBOX_GetItemText (LISTBOX_Handle hObj, unsigned Index, char * pBuffer, int MaxSize);
int LISTBOX_GetMulti (LISTBOX_Handle hObj);
int LISTBOX_GetScrollStepH (LISTBOX_Handle hObj);
void LISTBOX_IncSel (LISTBOX_Handle hObj);
void LISTBOX_InsertString (LISTBOX_Handle hObj, const char* s, unsigned int Index);
int LISTBOX_OwnerDraw (const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
void LISTBOX_SetAutoScrollH (LISTBOX_Handle hObj, int OnOff);
void LISTBOX_SetAutoScrollV (LISTBOX_Handle hObj, int OnOff);
void LISTBOX_SetBkColor (LISTBOX_Handle hObj, unsigned int Index, GUI_COLOR color);
void LISTBOX_SetFont (LISTBOX_Handle hObj, const GUI_FONT GUI_UNI_PTR * pFont);
void LISTBOX_SetItemDisabled (LISTBOX_Handle hObj, unsigned Index, int OnOff);
void LISTBOX_SetItemSel (LISTBOX_Handle hObj, unsigned Index, int OnOff);
void LISTBOX_SetItemSpacing (LISTBOX_Handle hObj, unsigned Value);
void LISTBOX_SetMulti (LISTBOX_Handle hObj, int Mode);
void LISTBOX_SetOwner (LISTBOX_Handle hObj, WM_HWIN hOwner);
void LISTBOX_SetOwnerDraw (LISTBOX_Handle hObj, WIDGET_DRAW_ITEM_FUNC * pfDrawItem);
void LISTBOX_SetScrollStepH (LISTBOX_Handle hObj, int Value);
void LISTBOX_SetSel (LISTBOX_Handle hObj, int Sel);
void LISTBOX_SetScrollbarWidth(LISTBOX_Handle hObj, unsigned Width);
void LISTBOX_SetString (LISTBOX_Handle hObj, const char* s, unsigned int Index);
void LISTBOX_SetText (LISTBOX_Handle hObj, const GUI_ConstString* ppText);
GUI_COLOR LISTBOX_SetTextColor (LISTBOX_Handle hObj, unsigned int Index, GUI_COLOR Color);
int LISTBOX_UpdateScrollers (LISTBOX_Handle hObj);
void LISTBOX_InvalidateItem (LISTBOX_Handle hObj, int Index);
/*********************************************************************
*
* Global functions
*
**********************************************************************
*/
const GUI_FONT GUI_UNI_PTR* LISTBOX_GetDefaultFont(void);
int LISTBOX_GetDefaultScrollStepH (void);
GUI_COLOR LISTBOX_GetDefaultBkColor (unsigned Index);
GUI_COLOR LISTBOX_GetDefaultTextColor (unsigned Index);
void LISTBOX_SetDefaultFont (const GUI_FONT GUI_UNI_PTR * pFont);
void LISTBOX_SetDefaultScrollStepH (int Value);
void LISTBOX_SetDefaultBkColor (unsigned Index, GUI_COLOR Color);
void LISTBOX_SetDefaultTextColor (unsigned Index, GUI_COLOR Color);
/*********************************************************************
*
* Compatibility to older versions
*
**********************************************************************
*/
#define LISTBOX_SetBackColor(hObj, Index, Color) LISTBOX_SetBkColor(hObj, Index, Color)
#define LISTBOX_DeleteString LISTBOX_DeleteItem
#if defined(__cplusplus)
}
#endif
#endif /* GUI_WINSUPPORT */
#endif /* LISTBOX_H */
@@ -0,0 +1,119 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : LISTBOX_Private.h
Purpose : Private LISTBOX include
--------------------END-OF-HEADER-------------------------------------
*/
#ifndef LISTBOX_PRIVATE_H
#define LISTBOX_PRIVATE_H
#include "LISTBOX.h"
#include "WM.h"
#include "GUI_ARRAY.h"
#include "WIDGET.h"
#if GUI_WINSUPPORT
/*********************************************************************
*
* Macros for internal use
*
**********************************************************************
*/
#define LISTBOX_H2P(h) (LISTBOX_Obj*) GUI_ALLOC_h2p(h)
#if GUI_DEBUG_LEVEL >1
#define OBJECT_ID 0x4C69 /* Magic numer, should be unique if possible */
#define ASSERT_IS_VALID_PTR(p) GUI_DEBUG_ERROROUT_IF(p->DebugId != OBJECT_ID, "EDIT.C: Wrong handle type or Object not init'ed")
#define INIT_ID(p) p->DebugId = OBJECT_ID
#define DEINIT_ID(p) p->DebugId = 0
#else
#define ASSERT_IS_VALID_PTR(p)
#define INIT_ID(p)
#define DEINIT_ID(p)
#endif
#define LISTBOX_ITEM_SELECTED (1 << 0)
#define LISTBOX_ITEM_DISABLED (1 << 1)
/*********************************************************************
*
* Object definition
*
**********************************************************************
*/
typedef struct {
U16 xSize, ySize;
U8 Status;
char acText[1];
} LISTBOX_ITEM;
typedef struct {
const GUI_FONT GUI_UNI_PTR* pFont;
U16 ScrollStepH;
GUI_COLOR aBackColor[4];
GUI_COLOR aTextColor[4];
} LISTBOX_PROPS;
typedef struct {
WIDGET Widget;
GUI_ARRAY ItemArray;
WIDGET_DRAW_ITEM_FUNC* pfDrawItem;
WM_SCROLL_STATE ScrollStateV;
WM_SCROLL_STATE ScrollStateH;
LISTBOX_PROPS Props;
WM_HWIN hOwner;
#if GUI_DEBUG_LEVEL >1
int DebugId;
#endif
I16 Sel; /* current selection */
U8 Flags;
U8 ScrollbarWidth;
U16 ItemSpacing;
} LISTBOX_Obj;
/*********************************************************************
*
* Private (module internal) data
*
**********************************************************************
*/
extern LISTBOX_PROPS LISTBOX_DefaultProps;
/*********************************************************************
*
* Private (module internal) functions
*
**********************************************************************
*/
unsigned LISTBOX__GetNumItems (const LISTBOX_Obj* pObj);
const char* LISTBOX__GetpString (const LISTBOX_Obj* pObj, int Index);
void LISTBOX__InvalidateInsideArea (LISTBOX_Handle hObj);
void LISTBOX__InvalidateItem (LISTBOX_Handle hObj, const LISTBOX_Obj* pObj, int Sel);
void LISTBOX__InvalidateItemAndBelow(LISTBOX_Handle hObj, const LISTBOX_Obj* pObj, int Sel);
void LISTBOX__InvalidateItemSize (const LISTBOX_Obj* pObj, unsigned Index);
void LISTBOX__SetScrollbarWidth (LISTBOX_Handle hObj, const LISTBOX_Obj* pObj);
#endif /* GUI_WINSUPPORT */
#else /* Avoid problems with empty object modules */
void LISTBOX_C(void) {}
#endif
/*************************** End of file ****************************/
@@ -0,0 +1,127 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : LISTVIEW.h
Purpose : LISTVIEW include
--------------------END-OF-HEADER-------------------------------------
*/
#ifndef LISTVIEW_H
#define LISTVIEW_H
#include "WM.h"
#include "DIALOG.h" /* Req. for Create indirect data structure */
#include "HEADER.h"
#if GUI_WINSUPPORT
#if defined(__cplusplus)
extern "C" { /* Make sure we have C-declarations in C++ programs */
#endif
/*********************************************************************
*
* Color indices
*/
#define LISTVIEW_CI_UNSEL 0
#define LISTVIEW_CI_SEL 1
#define LISTVIEW_CI_SELFOCUS 2
/*********************************************************************
*
* Public Types
*
**********************************************************************
*/
typedef WM_HMEM LISTVIEW_Handle;
/*********************************************************************
*
* Create functions
*
**********************************************************************
*/
LISTVIEW_Handle LISTVIEW_Create (int x0, int y0, int xsize, int ysize, WM_HWIN hParent, int Id, int Flags, int SpecialFlags);
LISTVIEW_Handle LISTVIEW_CreateAttached(WM_HWIN hParent, int Id, int SpecialFlags);
LISTVIEW_Handle LISTVIEW_CreateIndirect(const GUI_WIDGET_CREATE_INFO* pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK* cb);
LISTVIEW_Handle LISTVIEW_CreateEx (int x0, int y0, int xsize, int ysize, WM_HWIN hParent,
int WinFlags, int ExFlags, int Id);
/*********************************************************************
*
* Standard member functions
*
**********************************************************************
*/
#define LISTVIEW_Delete(hObj) WM_DeleteWindow (hObj)
#define LISTVIEW_DisableMemdev(hObj) WM_DisableMemdev (hObj)
#define LISTVIEW_EnableMemdev(hObj) WM_EnableMemdev (hObj)
#define LISTVIEW_Invalidate(hObj) WM_InvalidateWindow(hObj)
#define LISTVIEW_Paint(hObj) WM_Paint (hObj)
/*********************************************************************
*
* Member functions
*
**********************************************************************
*/
void LISTVIEW_AddColumn (LISTVIEW_Handle hObj, int Width, const char * s, int Align);
void LISTVIEW_AddRow (LISTVIEW_Handle hObj, const GUI_ConstString * ppText);
void LISTVIEW_DecSel (LISTVIEW_Handle hObj);
void LISTVIEW_DeleteColumn (LISTVIEW_Handle hObj, unsigned Index);
void LISTVIEW_DeleteRow (LISTVIEW_Handle hObj, unsigned Index);
GUI_COLOR LISTVIEW_GetBkColor (LISTVIEW_Handle hObj, unsigned Index);
const GUI_FONT GUI_UNI_PTR * LISTVIEW_GetFont (LISTVIEW_Handle hObj);
HEADER_Handle LISTVIEW_GetHeader (LISTVIEW_Handle hObj);
unsigned LISTVIEW_GetNumColumns (LISTVIEW_Handle hObj);
unsigned LISTVIEW_GetNumRows (LISTVIEW_Handle hObj);
int LISTVIEW_GetSel (LISTVIEW_Handle hObj);
GUI_COLOR LISTVIEW_GetTextColor (LISTVIEW_Handle hObj, unsigned Index);
void LISTVIEW_IncSel (LISTVIEW_Handle hObj);
void LISTVIEW_SetBkColor (LISTVIEW_Handle hObj, unsigned int Index, GUI_COLOR Color);
void LISTVIEW_SetColumnWidth(LISTVIEW_Handle hObj, unsigned int Index, int Width);
void LISTVIEW_SetFont (LISTVIEW_Handle hObj, const GUI_FONT GUI_UNI_PTR * pFont);
int LISTVIEW_SetGridVis (LISTVIEW_Handle hObj, int Show);
void LISTVIEW_SetItemBkColor(LISTVIEW_Handle hObj, unsigned Column, unsigned Row, unsigned int Index, GUI_COLOR Color);
void LISTVIEW_SetItemText (LISTVIEW_Handle hObj, unsigned Column, unsigned Row, const char * s);
void LISTVIEW_SetItemTextColor(LISTVIEW_Handle hObj, unsigned Column, unsigned Row, unsigned int Index, GUI_COLOR Color);
void LISTVIEW_SetLBorder (LISTVIEW_Handle hObj, unsigned BorderSize);
void LISTVIEW_SetRBorder (LISTVIEW_Handle hObj, unsigned BorderSize);
unsigned LISTVIEW_SetRowHeight (LISTVIEW_Handle hObj, unsigned RowHeight);
void LISTVIEW_SetSel (LISTVIEW_Handle hObj, int Sel);
void LISTVIEW_SetTextAlign (LISTVIEW_Handle hObj, unsigned int Index, int Align);
void LISTVIEW_SetTextColor (LISTVIEW_Handle hObj, unsigned int Index, GUI_COLOR Color);
/*********************************************************************
*
* Global functions
*
**********************************************************************
*/
GUI_COLOR LISTVIEW_SetDefaultBkColor (unsigned Index, GUI_COLOR Color);
const GUI_FONT GUI_UNI_PTR * LISTVIEW_SetDefaultFont (const GUI_FONT GUI_UNI_PTR * pFont);
GUI_COLOR LISTVIEW_SetDefaultGridColor(GUI_COLOR Color);
GUI_COLOR LISTVIEW_SetDefaultTextColor(unsigned Index, GUI_COLOR Color);
#if defined(__cplusplus)
}
#endif
#endif /* if GUI_WINSUPPORT */
#endif /* LISTVIEW_H */
@@ -0,0 +1,120 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : LISTVIEW_Private.h
Purpose : Private LISTVIEW include
--------------------END-OF-HEADER-------------------------------------
*/
#ifndef LISTVIEW_PRIVATE_H
#define LISTVIEW_PRIVATE_H
#include "WM.h"
#include "LISTVIEW.h"
#include "GUI_ARRAY.h"
#if GUI_WINSUPPORT
/*********************************************************************
*
* Macros for internal use
*
**********************************************************************
*/
#define LISTVIEW_ID 0x4567 /* Magic numer, should be unique if possible */
#define LISTVIEW_H2P(h) (LISTVIEW_Obj*) WM_H2P(h)
#if GUI_DEBUG_LEVEL > 1
#define LISTVIEW_ASSERT_IS_VALID_PTR(p) DEBUG_ERROROUT_IF(p->DebugId != LISTVIEW_ID, "xxx.c: Wrong handle type or Object not init'ed")
#define LISTVIEW_INIT_ID(p) p->DebugId = LISTVIEW_ID
#define LISTVIEW_DEINIT_ID(p) p->DebugId = LISTVIEW_ID+1
#else
#define LISTVIEW_ASSERT_IS_VALID_PTR(p)
#define LISTVIEW_INIT_ID(p)
#define LISTVIEW_DEINIT_ID(p)
#endif
/*********************************************************************
*
* Object definition
*
**********************************************************************
*/
typedef struct {
GUI_COLOR aBkColor[3];
GUI_COLOR aTextColor[3];
} LISTVIEW_ITEM_INFO;
typedef struct {
WM_HMEM hItemInfo;
char acText[1];
} LISTVIEW_ITEM;
typedef struct {
GUI_COLOR aBkColor[3];
GUI_COLOR aTextColor[3];
GUI_COLOR GridColor;
const GUI_FONT GUI_UNI_PTR * pFont;
} LISTVIEW_PROPS;
typedef struct {
WIDGET Widget;
HEADER_Handle hHeader;
GUI_ARRAY RowArray; /* One entry per line. Every entry is a handle of GUI_ARRAY of strings */
GUI_ARRAY AlignArray; /* One entry per column */
LISTVIEW_PROPS Props;
int Sel;
int ShowGrid;
unsigned RowDistY;
unsigned LBorder;
unsigned RBorder;
WM_SCROLL_STATE ScrollStateV;
WM_SCROLL_STATE ScrollStateH;
WM_HWIN hOwner;
#if GUI_DEBUG_LEVEL > 1
int DebugId;
#endif
} LISTVIEW_Obj;
/*********************************************************************
*
* Private (module internal) data
*
**********************************************************************
*/
extern LISTVIEW_PROPS LISTVIEW_DefaultProps;
/*********************************************************************
*
* Private (module internal) functions
*
**********************************************************************
*/
int LISTVIEW__UpdateScrollParas (LISTVIEW_Handle hObj, LISTVIEW_Obj* pObj);
void LISTVIEW__InvalidateInsideArea(LISTVIEW_Handle hObj, LISTVIEW_Obj* pObj);
unsigned LISTVIEW__GetRowDistY (const LISTVIEW_Obj* pObj);
void LISTVIEW__InvalidateRow (LISTVIEW_Handle hObj, LISTVIEW_Obj* pObj, int Sel);
int LISTVIEW__UpdateScrollPos (LISTVIEW_Handle hObj, LISTVIEW_Obj* pObj);
#endif /* GUI_WINSUPPORT */
#else /* Avoid problems with empty object modules */
void LISTVIEW_C(void) {}
#endif
/*************************** End of file ****************************/
@@ -0,0 +1,198 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : MENU.h
Purpose : MENU include
--------------------END-OF-HEADER-------------------------------------
*/
#ifndef MENU_H
#define MENU_H
#include "WM.h"
#include "WIDGET.h"
#include "DIALOG_Intern.h" /* Req. for Create indirect data structure */
#if GUI_WINSUPPORT
#if defined(__cplusplus)
extern "C" { /* Make sure we have C-declarations in C++ programs */
#endif
/*********************************************************************
*
* Defines
*
**********************************************************************
*/
/*********************************************************************
*
* Create flags
*/
#define MENU_CF_HORIZONTAL (0<<0)
#define MENU_CF_VERTICAL (1<<0)
#define MENU_CF_OPEN_ON_POINTEROVER (1<<1)
#define MENU_CF_CLOSE_ON_SECOND_CLICK (1<<2)
#define MENU_CF_HIDE_DISABLED_SEL (1<<3) /* Hides the selection when a disabled item is selected */
/*********************************************************************
*
* Menu item flags
*/
#define MENU_IF_DISABLED (1<<0)
#define MENU_IF_SEPARATOR (1<<1)
/*********************************************************************
*
* Color indices
*/
#define MENU_CI_ENABLED 0
#define MENU_CI_SELECTED 1
#define MENU_CI_DISABLED 2
#define MENU_CI_DISABLED_SEL 3
#define MENU_CI_ACTIVE_SUBMENU 4
/*********************************************************************
*
* Border indices
*/
#define MENU_BI_LEFT 0
#define MENU_BI_RIGHT 1
#define MENU_BI_TOP 2
#define MENU_BI_BOTTOM 3
/*********************************************************************
*
* Message types
*/
#define MENU_ON_ITEMSELECT 0 /* Send to owner when selecting a menu item */
#define MENU_ON_INITMENU 1 /* Send to owner when for the first time selecting a submenu */
#define MENU_ON_INITSUBMENU 2 /* Send to owner when selecting a submenu */
#define MENU_ON_OPEN 3 /* Internal message of menu widget (send to submenus) */
#define MENU_ON_CLOSE 4 /* Internal message of menu widget (send to submenus) */
#define MENU_IS_MENU 5 /* Internal message of menu widget. Owner must call */
/* WM_DefaultProc() when not handle the message. */
/*********************************************************************
*
* Types
*
**********************************************************************
*/
typedef WM_HMEM MENU_Handle;
/*********************************************************************
*
* menu message data
*/
typedef struct {
U16 MsgType;
U16 ItemId;
} MENU_MSG_DATA;
/*********************************************************************
*
* menu item data
*/
typedef struct {
const char* pText;
U16 Id;
U16 Flags;
MENU_Handle hSubmenu;
} MENU_ITEM_DATA;
/*********************************************************************
*
* Create functions
*
**********************************************************************
*/
MENU_Handle MENU_CreateIndirect(const GUI_WIDGET_CREATE_INFO* pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK* cb);
MENU_Handle MENU_CreateEx (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id);
/*********************************************************************
*
* Standard member functions
*
**********************************************************************
*/
#define MENU_EnableMemdev(hObj) WM_EnableMemdev(hObj)
#define MENU_DisableMemdev(hObj) WM_DisableMemdev(hObj)
#define MENU_Delete(hObj) WM_DeleteWindow(hObj)
#define MENU_Paint(hObj) WM_Paint(hObj)
#define MENU_Invalidate(hObj) WM_InvalidateWindow(hObj)
/*********************************************************************
*
* Individual member functions
*
**********************************************************************
*/
void MENU_Attach (MENU_Handle hObj, WM_HWIN hDestWin, int x, int y, int xSize, int ySize, int Flags);
void MENU_Popup (MENU_Handle hObj, WM_HWIN hDestWin, int x, int y, int xSize, int ySize, int Flags);
void MENU_SetOwner (MENU_Handle hObj, WM_HWIN hOwner);
void MENU_AddItem (MENU_Handle hObj, const MENU_ITEM_DATA* pItemData);
void MENU_DeleteItem (MENU_Handle hObj, U16 ItemId);
void MENU_InsertItem (MENU_Handle hObj, U16 ItemId, const MENU_ITEM_DATA* pItemData);
void MENU_SetItem (MENU_Handle hObj, U16 ItemId, const MENU_ITEM_DATA* pItemData);
void MENU_GetItem (MENU_Handle hObj, U16 ItemId, MENU_ITEM_DATA* pItemData);
void MENU_GetItemText (MENU_Handle hObj, U16 ItemId, char* pBuffer, unsigned BufferSize);
unsigned MENU_GetNumItems (MENU_Handle hObj);
void MENU_DisableItem (MENU_Handle hObj, U16 ItemId);
void MENU_EnableItem (MENU_Handle hObj, U16 ItemId);
/*********************************************************************
*
* Member functions, get / set properties
*
**********************************************************************
*/
void MENU_SetTextColor (MENU_Handle hObj, unsigned ColorIndex, GUI_COLOR Color);
void MENU_SetBkColor (MENU_Handle hObj, unsigned ColorIndex, GUI_COLOR Color);
void MENU_SetBorderSize (MENU_Handle hObj, unsigned BorderIndex, U8 BorderSize);
void MENU_SetFont (MENU_Handle hObj, const GUI_FONT GUI_UNI_PTR* pFont);
/*********************************************************************
*
* Member functions, get / set defaults
*
**********************************************************************
*/
GUI_COLOR MENU_GetDefaultTextColor (unsigned ColorIndex);
GUI_COLOR MENU_GetDefaultBkColor (unsigned ColorIndex);
U8 MENU_GetDefaultBorderSize (unsigned BorderIndex);
const WIDGET_EFFECT* MENU_GetDefaultEffect (void);
const GUI_FONT GUI_UNI_PTR* MENU_GetDefaultFont (void);
void MENU_SetDefaultTextColor (unsigned ColorIndex, GUI_COLOR Color);
void MENU_SetDefaultBkColor (unsigned ColorIndex, GUI_COLOR Color);
void MENU_SetDefaultBorderSize (unsigned BorderIndex, U8 BorderSize);
void MENU_SetDefaultEffect (const WIDGET_EFFECT* pEffect);
void MENU_SetDefaultFont (const GUI_FONT GUI_UNI_PTR* pFont);
#if defined(__cplusplus)
}
#endif
#endif /* GUI_WINSUPPORT */
#endif /* MENU_H */
/*************************** End of file ****************************/
@@ -0,0 +1,131 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : MENU_Private.h
Purpose : Internal header file
---------------------------END-OF-HEADER------------------------------
*/
#ifndef MENU_PRIVATE_H
#define MENU_PRIVATE_H
#if GUI_WINSUPPORT
#include "WIDGET.h"
#include "GUI_ARRAY.h"
/*********************************************************************
*
* Defines
*
**********************************************************************
*/
/*********************************************************************
*
* Status flags
*/
#define MENU_SF_HORIZONTAL MENU_CF_HORIZONTAL
#define MENU_SF_VERTICAL MENU_CF_VERTICAL
#define MENU_SF_OPEN_ON_POINTEROVER MENU_CF_OPEN_ON_POINTEROVER
#define MENU_SF_CLOSE_ON_SECOND_CLICK MENU_CF_CLOSE_ON_SECOND_CLICK
#define MENU_SF_HIDE_DISABLED_SEL MENU_CF_HIDE_DISABLED_SEL
#define MENU_SF_ACTIVE (1<<6) /* Internal flag only */
#define MENU_SF_POPUP (1<<7) /* Internal flag only */
/*********************************************************************
*
* Types
*
**********************************************************************
*/
/*********************************************************************
*
* menu item
*/
typedef struct {
MENU_Handle hSubmenu;
U16 Id;
U16 Flags;
int TextWidth;
char acText[1];
} MENU_ITEM;
/*********************************************************************
*
* menu properties
*/
typedef struct {
GUI_COLOR aTextColor[5];
GUI_COLOR aBkColor[5];
U8 aBorder[4];
const GUI_FONT GUI_UNI_PTR* pFont;
} MENU_PROPS;
/*********************************************************************
*
* menu object
*/
typedef struct {
WIDGET Widget;
MENU_PROPS Props;
GUI_ARRAY ItemArray;
WM_HWIN hOwner;
U16 Flags;
char IsSubmenuActive;
int Width;
int Height;
int Sel;
#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
int DebugId;
#endif
} MENU_Obj;
#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
MENU_Obj* MENU_h2p(MENU_Handle h);
#define MENU_H2P(h) MENU_h2p(h)
#else
#define MENU_H2P(h) ((MENU_Obj*)GUI_ALLOC_h2p(h))
#endif
/*********************************************************************
*
* Public data (internal defaults)
*
**********************************************************************
*/
extern MENU_PROPS MENU__DefaultProps;
extern const WIDGET_EFFECT* MENU__pDefaultEffect;
/*********************************************************************
*
* Public functions (internal)
*
**********************************************************************
*/
void MENU__RecalcTextWidthOfItems(MENU_Obj* pObj);
void MENU__ResizeMenu (MENU_Handle hObj, MENU_Obj* pObj);
unsigned MENU__GetNumItems (MENU_Obj* pObj);
char MENU__SetItem (MENU_Handle hObj, MENU_Obj* pObj, unsigned Index, const MENU_ITEM_DATA* pItemData);
void MENU__SetItemFlags (MENU_Obj* pObj, unsigned Index, U16 Mask, U16 Flags);
void MENU__InvalidateItem (MENU_Handle hObj, const MENU_Obj* pObj, unsigned Index);
int MENU__FindItem (MENU_Handle hObj, U16 ItemId, MENU_Handle* phMenu);
int MENU__SendMenuMessage (MENU_Handle hObj, WM_HWIN hDestWin, U16 MsgType, U16 ItemId);
#endif /* GUI_WINSUPPORT */
#endif /* MENU_PRIVATE_H */
/*************************** End of file ****************************/
@@ -0,0 +1,39 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : MESSAGEBOX.h
Purpose : Message box interface
--------------------END-OF-HEADER-------------------------------------
*/
#ifndef MESSAGEBOX_H
#define MESSAGEBOX_H
#include "WM.h"
#if GUI_WINSUPPORT
#if defined(__cplusplus)
extern "C" { /* Make sure we have C-declarations in C++ programs */
#endif
WM_HWIN MESSAGEBOX_Create(const char * sMessage, const char * sCaption, int Flags);
#if defined(__cplusplus)
}
#endif
#endif /* GUI_WINSUPPORT */
#endif /* MESSAGEBOX */
@@ -0,0 +1,122 @@
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : MULTIEDIT.h
Purpose : MULTIEDIT include
--------------------END-OF-HEADER-------------------------------------
*/
#ifndef MULTIEDIT_H
#define MULTIEDIT_H
#include "WM.h"
#include "DIALOG.h" /* Req. for Create indirect data structure */
#if GUI_WINSUPPORT
#if defined(__cplusplus)
extern "C" { /* Make sure we have C-declarations in C++ programs */
#endif
#define MULTIEDIT_CF_READONLY (1 << 0)
#define MULTIEDIT_CF_INSERT (1 << 2)
#define MULTIEDIT_CF_AUTOSCROLLBAR_V (1 << 3)
#define MULTIEDIT_CF_AUTOSCROLLBAR_H (1 << 4)
#define MULTIEDIT_CF_PASSWORD (1 << 5)
#define MULTIEDIT_SF_READONLY MULTIEDIT_CF_READONLY
#define MULTIEDIT_SF_INSERT MULTIEDIT_CF_INSERT
#define MULTIEDIT_SF_AUTOSCROLLBAR_V MULTIEDIT_CF_AUTOSCROLLBAR_V
#define MULTIEDIT_SF_AUTOSCROLLBAR_H MULTIEDIT_CF_AUTOSCROLLBAR_H
#define MULTIEDIT_SF_PASSWORD MULTIEDIT_CF_PASSWORD
/*********************************************************************
*
* Color indices
*/
#define MULTIEDIT_CI_EDIT 0
#define MULTIEDIT_CI_READONLY 1
/*********************************************************************
*
* Public Types
*
**********************************************************************
*/
typedef WM_HMEM MULTIEDIT_HANDLE;
/*********************************************************************
*
* Create functions
*
**********************************************************************
*/
MULTIEDIT_HANDLE MULTIEDIT_CreateEx (int x0, int y0, int xsize, int ysize, WM_HWIN hParent, int WinFlags, int ExFlags,
int Id, int BufferSize, const char* pText);
MULTIEDIT_HANDLE MULTIEDIT_Create (int x0, int y0, int xsize, int ysize, WM_HWIN hParent,
int Id, int Flags, int ExFlags, const char* pText,
int BufferSize);
MULTIEDIT_HANDLE MULTIEDIT_CreateIndirect(const GUI_WIDGET_CREATE_INFO* pCreateInfo,
WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK* cb);
/*********************************************************************
*
* Member functions
*
**********************************************************************
*/
int MULTIEDIT_AddKey (MULTIEDIT_HANDLE hObj, U16 Key);
void MULTIEDIT_GetPrompt (MULTIEDIT_HANDLE hObj, char* sDest, int MaxNumChars);
int MULTIEDIT_GetTextSize (MULTIEDIT_HANDLE hObj);
void MULTIEDIT_GetText (MULTIEDIT_HANDLE hObj, char* sDest, int MaxNumChars);
void MULTIEDIT_SetAutoScrollH (MULTIEDIT_HANDLE hObj, int OnOff);
void MULTIEDIT_SetAutoScrollV (MULTIEDIT_HANDLE hObj, int OnOff);
void MULTIEDIT_SetBkColor (MULTIEDIT_HANDLE hObj, unsigned Index, GUI_COLOR color);
void MULTIEDIT_SetCursorCharPos (MULTIEDIT_HANDLE hObj, int x, int y); /* Not yet implemented */
void MULTIEDIT_SetCursorPixelPos(MULTIEDIT_HANDLE hObj, int x, int y); /* Not yet implemented */
void MULTIEDIT_SetCursorOffset (MULTIEDIT_HANDLE hObj, int Offset);
void MULTIEDIT_SetHBorder (MULTIEDIT_HANDLE hObj, unsigned HBorder);
void MULTIEDIT_SetFont (MULTIEDIT_HANDLE hObj, const GUI_FONT GUI_UNI_PTR * pFont);
void MULTIEDIT_SetInsertMode (MULTIEDIT_HANDLE hObj, int OnOff);
void MULTIEDIT_SetBufferSize (MULTIEDIT_HANDLE hObj, int BufferSize);
void MULTIEDIT_SetMaxNumChars (MULTIEDIT_HANDLE hObj, unsigned MaxNumChars);
void MULTIEDIT_SetPrompt (MULTIEDIT_HANDLE hObj, const char* sPrompt);
void MULTIEDIT_SetReadOnly (MULTIEDIT_HANDLE hObj, int OnOff);
void MULTIEDIT_SetPasswordMode (MULTIEDIT_HANDLE hObj, int OnOff);
void MULTIEDIT_SetText (MULTIEDIT_HANDLE hObj, const char* s);
void MULTIEDIT_SetTextColor (MULTIEDIT_HANDLE hObj, unsigned Index, GUI_COLOR color);
void MULTIEDIT_SetWrapNone (MULTIEDIT_HANDLE hObj);
void MULTIEDIT_SetWrapChar (MULTIEDIT_HANDLE hObj);
void MULTIEDIT_SetWrapWord (MULTIEDIT_HANDLE hObj);
/*********************************************************************
*
* Macros for compatibility with older versions
*
**********************************************************************
*/
#define MULTIEDIT_SetMaxLen(hObj, MaxLen) MULTIEDIT_SetBufferSize(hObj, MaxLen)
#define MULTIEDIT_GetStringSize MULTIEDIT_GetTextSize
#if defined(__cplusplus)
}
#endif
#endif /* if GUI_WINSUPPORT */
#endif /* MULTIEDIT_H */

Some files were not shown because too many files have changed in this diff Show More