diff --git a/libraries/DigitalIO/DigitalIO.h b/libraries/DigitalIO/DigitalIO.h new file mode 100644 index 0000000..8f47bf1 --- /dev/null +++ b/libraries/DigitalIO/DigitalIO.h @@ -0,0 +1,36 @@ +/* Arduino DigitalIO Library + * Copyright (C) 2013 by William Greiman + * + * This file is part of the Arduino DigitalIO Library + * + * This Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with the Arduino DigitalIO Library. If not, see + * . + */ +/** + * @file + * @brief Fast Digital I/O functions + * + */ +#ifndef DigitalIO_h +#define DigitalIO_h 1 +//------------------------------------------------------------------------------ +/** DigitalPin version YYYYMMDD */ +#define DIGITAL_IO_VERSION 20140217 +//------------------------------------------------------------------------------ +#include +#include +#include +#include +#include +#endif // DigitalIO_h \ No newline at end of file diff --git a/libraries/DigitalIO/DigitalPin.h b/libraries/DigitalIO/DigitalPin.h new file mode 100644 index 0000000..2c41f38 --- /dev/null +++ b/libraries/DigitalIO/DigitalPin.h @@ -0,0 +1,597 @@ +/* Arduino DigitalIO Library + * Copyright (C) 2013 by William Greiman + * + * This file is part of the Arduino DigitalIO Library + * + * This Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with the Arduino DigitalIO Library. If not, see + * . + */ +/** + * @file + * @brief Fast Digital Pin functions + * + * @defgroup digitalPin Fast Pin I/O + * @details Fast Digital I/O functions and template class. + * @{ + */ +#ifndef DigitalPin_h +#define DigitalPin_h +#include +#include +#include +//------------------------------------------------------------------------------ +/** + * @class pin_map_t + * @brief struct for mapping digital pins + */ +struct pin_map_t { + volatile uint8_t* ddr; /**< address of DDR for this pin */ + volatile uint8_t* pin; /**< address of PIN for this pin */ + volatile uint8_t* port; /**< address of PORT for this pin */ + uint8_t bit; /**< bit number for this pin */ +}; +//------------------------------------------------------------------------------ +#if defined(__AVR_ATmega168__)\ +||defined(__AVR_ATmega168P__)\ +||defined(__AVR_ATmega328P__) +// 168 and 328 Arduinos +const static pin_map_t pinMap[] = { + {&DDRD, &PIND, &PORTD, 0}, // D0 0 + {&DDRD, &PIND, &PORTD, 1}, // D1 1 + {&DDRD, &PIND, &PORTD, 2}, // D2 2 + {&DDRD, &PIND, &PORTD, 3}, // D3 3 + {&DDRD, &PIND, &PORTD, 4}, // D4 4 + {&DDRD, &PIND, &PORTD, 5}, // D5 5 + {&DDRD, &PIND, &PORTD, 6}, // D6 6 + {&DDRD, &PIND, &PORTD, 7}, // D7 7 + {&DDRB, &PINB, &PORTB, 0}, // B0 8 + {&DDRB, &PINB, &PORTB, 1}, // B1 9 + {&DDRB, &PINB, &PORTB, 2}, // B2 10 + {&DDRB, &PINB, &PORTB, 3}, // B3 11 + {&DDRB, &PINB, &PORTB, 4}, // B4 12 + {&DDRB, &PINB, &PORTB, 5}, // B5 13 + {&DDRC, &PINC, &PORTC, 0}, // C0 14 + {&DDRC, &PINC, &PORTC, 1}, // C1 15 + {&DDRC, &PINC, &PORTC, 2}, // C2 16 + {&DDRC, &PINC, &PORTC, 3}, // C3 17 + {&DDRC, &PINC, &PORTC, 4}, // C4 18 + {&DDRC, &PINC, &PORTC, 5} // C5 19 +}; +//------------------------------------------------------------------------------ +#elif defined(__AVR_ATmega1280__)\ +|| defined(__AVR_ATmega2560__) +// Mega +static const pin_map_t pinMap[] = { + {&DDRE, &PINE, &PORTE, 0}, // E0 0 + {&DDRE, &PINE, &PORTE, 1}, // E1 1 + {&DDRE, &PINE, &PORTE, 4}, // E4 2 + {&DDRE, &PINE, &PORTE, 5}, // E5 3 + {&DDRG, &PING, &PORTG, 5}, // G5 4 + {&DDRE, &PINE, &PORTE, 3}, // E3 5 + {&DDRH, &PINH, &PORTH, 3}, // H3 6 + {&DDRH, &PINH, &PORTH, 4}, // H4 7 + {&DDRH, &PINH, &PORTH, 5}, // H5 8 + {&DDRH, &PINH, &PORTH, 6}, // H6 9 + {&DDRB, &PINB, &PORTB, 4}, // B4 10 + {&DDRB, &PINB, &PORTB, 5}, // B5 11 + {&DDRB, &PINB, &PORTB, 6}, // B6 12 + {&DDRB, &PINB, &PORTB, 7}, // B7 13 + {&DDRJ, &PINJ, &PORTJ, 1}, // J1 14 + {&DDRJ, &PINJ, &PORTJ, 0}, // J0 15 + {&DDRH, &PINH, &PORTH, 1}, // H1 16 + {&DDRH, &PINH, &PORTH, 0}, // H0 17 + {&DDRD, &PIND, &PORTD, 3}, // D3 18 + {&DDRD, &PIND, &PORTD, 2}, // D2 19 + {&DDRD, &PIND, &PORTD, 1}, // D1 20 + {&DDRD, &PIND, &PORTD, 0}, // D0 21 + {&DDRA, &PINA, &PORTA, 0}, // A0 22 + {&DDRA, &PINA, &PORTA, 1}, // A1 23 + {&DDRA, &PINA, &PORTA, 2}, // A2 24 + {&DDRA, &PINA, &PORTA, 3}, // A3 25 + {&DDRA, &PINA, &PORTA, 4}, // A4 26 + {&DDRA, &PINA, &PORTA, 5}, // A5 27 + {&DDRA, &PINA, &PORTA, 6}, // A6 28 + {&DDRA, &PINA, &PORTA, 7}, // A7 29 + {&DDRC, &PINC, &PORTC, 7}, // C7 30 + {&DDRC, &PINC, &PORTC, 6}, // C6 31 + {&DDRC, &PINC, &PORTC, 5}, // C5 32 + {&DDRC, &PINC, &PORTC, 4}, // C4 33 + {&DDRC, &PINC, &PORTC, 3}, // C3 34 + {&DDRC, &PINC, &PORTC, 2}, // C2 35 + {&DDRC, &PINC, &PORTC, 1}, // C1 36 + {&DDRC, &PINC, &PORTC, 0}, // C0 37 + {&DDRD, &PIND, &PORTD, 7}, // D7 38 + {&DDRG, &PING, &PORTG, 2}, // G2 39 + {&DDRG, &PING, &PORTG, 1}, // G1 40 + {&DDRG, &PING, &PORTG, 0}, // G0 41 + {&DDRL, &PINL, &PORTL, 7}, // L7 42 + {&DDRL, &PINL, &PORTL, 6}, // L6 43 + {&DDRL, &PINL, &PORTL, 5}, // L5 44 + {&DDRL, &PINL, &PORTL, 4}, // L4 45 + {&DDRL, &PINL, &PORTL, 3}, // L3 46 + {&DDRL, &PINL, &PORTL, 2}, // L2 47 + {&DDRL, &PINL, &PORTL, 1}, // L1 48 + {&DDRL, &PINL, &PORTL, 0}, // L0 49 + {&DDRB, &PINB, &PORTB, 3}, // B3 50 + {&DDRB, &PINB, &PORTB, 2}, // B2 51 + {&DDRB, &PINB, &PORTB, 1}, // B1 52 + {&DDRB, &PINB, &PORTB, 0}, // B0 53 + {&DDRF, &PINF, &PORTF, 0}, // F0 54 + {&DDRF, &PINF, &PORTF, 1}, // F1 55 + {&DDRF, &PINF, &PORTF, 2}, // F2 56 + {&DDRF, &PINF, &PORTF, 3}, // F3 57 + {&DDRF, &PINF, &PORTF, 4}, // F4 58 + {&DDRF, &PINF, &PORTF, 5}, // F5 59 + {&DDRF, &PINF, &PORTF, 6}, // F6 60 + {&DDRF, &PINF, &PORTF, 7}, // F7 61 + {&DDRK, &PINK, &PORTK, 0}, // K0 62 + {&DDRK, &PINK, &PORTK, 1}, // K1 63 + {&DDRK, &PINK, &PORTK, 2}, // K2 64 + {&DDRK, &PINK, &PORTK, 3}, // K3 65 + {&DDRK, &PINK, &PORTK, 4}, // K4 66 + {&DDRK, &PINK, &PORTK, 5}, // K5 67 + {&DDRK, &PINK, &PORTK, 6}, // K6 68 + {&DDRK, &PINK, &PORTK, 7} // K7 69 +}; +//------------------------------------------------------------------------------ +#elif defined(__AVR_ATmega1284P__)\ +|| defined(__AVR_ATmega1284__)\ +|| defined(__AVR_ATmega644P__)\ +|| defined(__AVR_ATmega644__)\ +|| defined(__AVR_ATmega64__)\ +|| defined(__AVR_ATmega32__)\ +|| defined(__AVR_ATmega324__)\ +|| defined(__AVR_ATmega16__) + +#ifdef defined(VARIANT_MIGHTY) +// Mighty Layout +static const pin_map_t pinMap[] = { + {&DDRB, &PINB, &PORTB, 0}, // B0 0 + {&DDRB, &PINB, &PORTB, 1}, // B1 1 + {&DDRB, &PINB, &PORTB, 2}, // B2 2 + {&DDRB, &PINB, &PORTB, 3}, // B3 3 + {&DDRB, &PINB, &PORTB, 4}, // B4 4 + {&DDRB, &PINB, &PORTB, 5}, // B5 5 + {&DDRB, &PINB, &PORTB, 6}, // B6 6 + {&DDRB, &PINB, &PORTB, 7}, // B7 7 + {&DDRD, &PIND, &PORTD, 0}, // D0 8 + {&DDRD, &PIND, &PORTD, 1}, // D1 9 + {&DDRD, &PIND, &PORTD, 2}, // D2 10 + {&DDRD, &PIND, &PORTD, 3}, // D3 11 + {&DDRD, &PIND, &PORTD, 4}, // D4 12 + {&DDRD, &PIND, &PORTD, 5}, // D5 13 + {&DDRD, &PIND, &PORTD, 6}, // D6 14 + {&DDRD, &PIND, &PORTD, 7}, // D7 15 + {&DDRC, &PINC, &PORTC, 0}, // C0 16 + {&DDRC, &PINC, &PORTC, 1}, // C1 17 + {&DDRC, &PINC, &PORTC, 2}, // C2 18 + {&DDRC, &PINC, &PORTC, 3}, // C3 19 + {&DDRC, &PINC, &PORTC, 4}, // C4 20 + {&DDRC, &PINC, &PORTC, 5}, // C5 21 + {&DDRC, &PINC, &PORTC, 6}, // C6 22 + {&DDRC, &PINC, &PORTC, 7}, // C7 23 + {&DDRA, &PINA, &PORTA, 0}, // A0 24 + {&DDRA, &PINA, &PORTA, 1}, // A1 25 + {&DDRA, &PINA, &PORTA, 2}, // A2 26 + {&DDRA, &PINA, &PORTA, 3}, // A3 27 + {&DDRA, &PINA, &PORTA, 4}, // A4 28 + {&DDRA, &PINA, &PORTA, 5}, // A5 29 + {&DDRA, &PINA, &PORTA, 6}, // A6 30 + {&DDRA, &PINA, &PORTA, 7} // A7 31 +}; +#elif defined(VARIANT_BOBUINO) +// Bobuino Layout +static const pin_map_t pinMap[] = { + {&DDRD, &PIND, &PORTD, 0}, // D0 0 + {&DDRD, &PIND, &PORTD, 1}, // D1 1 + {&DDRD, &PIND, &PORTD, 2}, // D2 2 + {&DDRD, &PIND, &PORTD, 3}, // D3 3 + {&DDRB, &PINB, &PORTB, 0}, // B0 4 + {&DDRB, &PINB, &PORTB, 1}, // B1 5 + {&DDRB, &PINB, &PORTB, 2}, // B2 6 + {&DDRB, &PINB, &PORTB, 3}, // B3 7 + {&DDRD, &PIND, &PORTD, 5}, // D5 8 + {&DDRD, &PIND, &PORTD, 6}, // D6 9 + {&DDRB, &PINB, &PORTB, 4}, // B4 10 + {&DDRB, &PINB, &PORTB, 5}, // B5 11 + {&DDRB, &PINB, &PORTB, 6}, // B6 12 + {&DDRB, &PINB, &PORTB, 7}, // B7 13 + {&DDRA, &PINA, &PORTA, 7}, // A7 14 + {&DDRA, &PINA, &PORTA, 6}, // A6 15 + {&DDRA, &PINA, &PORTA, 5}, // A5 16 + {&DDRA, &PINA, &PORTA, 4}, // A4 17 + {&DDRA, &PINA, &PORTA, 3}, // A3 18 + {&DDRA, &PINA, &PORTA, 2}, // A2 19 + {&DDRA, &PINA, &PORTA, 1}, // A1 20 + {&DDRA, &PINA, &PORTA, 0}, // A0 21 + {&DDRC, &PINC, &PORTC, 0}, // C0 22 + {&DDRC, &PINC, &PORTC, 1}, // C1 23 + {&DDRC, &PINC, &PORTC, 2}, // C2 24 + {&DDRC, &PINC, &PORTC, 3}, // C3 25 + {&DDRC, &PINC, &PORTC, 4}, // C4 26 + {&DDRC, &PINC, &PORTC, 5}, // C5 27 + {&DDRC, &PINC, &PORTC, 6}, // C6 28 + {&DDRC, &PINC, &PORTC, 7}, // C7 29 + {&DDRD, &PIND, &PORTD, 4}, // D4 30 + {&DDRD, &PIND, &PORTD, 7} // D7 31 +}; +#elif defined(VARIANT_STANDARD) +// Standard Layout +static const pin_map_t pinMap[] = { + {&DDRB, &PINB, &PORTB, 0}, // B0 0 + {&DDRB, &PINB, &PORTB, 1}, // B1 1 + {&DDRB, &PINB, &PORTB, 2}, // B2 2 + {&DDRB, &PINB, &PORTB, 3}, // B3 3 + {&DDRB, &PINB, &PORTB, 4}, // B4 4 + {&DDRB, &PINB, &PORTB, 5}, // B5 5 + {&DDRB, &PINB, &PORTB, 6}, // B6 6 + {&DDRB, &PINB, &PORTB, 7}, // B7 7 + {&DDRD, &PIND, &PORTD, 0}, // D0 8 + {&DDRD, &PIND, &PORTD, 1}, // D1 9 + {&DDRD, &PIND, &PORTD, 2}, // D2 10 + {&DDRD, &PIND, &PORTD, 3}, // D3 11 + {&DDRD, &PIND, &PORTD, 4}, // D4 12 + {&DDRD, &PIND, &PORTD, 5}, // D5 13 + {&DDRD, &PIND, &PORTD, 6}, // D6 14 + {&DDRD, &PIND, &PORTD, 7}, // D7 15 + {&DDRC, &PINC, &PORTC, 0}, // C0 16 + {&DDRC, &PINC, &PORTC, 1}, // C1 17 + {&DDRC, &PINC, &PORTC, 2}, // C2 18 + {&DDRC, &PINC, &PORTC, 3}, // C3 19 + {&DDRC, &PINC, &PORTC, 4}, // C4 20 + {&DDRC, &PINC, &PORTC, 5}, // C5 21 + {&DDRC, &PINC, &PORTC, 6}, // C6 22 + {&DDRC, &PINC, &PORTC, 7}, // C7 23 + {&DDRA, &PINA, &PORTA, 7}, // A7 24 + {&DDRA, &PINA, &PORTA, 6}, // A6 25 + {&DDRA, &PINA, &PORTA, 5}, // A5 26 + {&DDRA, &PINA, &PORTA, 4}, // A4 27 + {&DDRA, &PINA, &PORTA, 3}, // A3 28 + {&DDRA, &PINA, &PORTA, 2}, // A2 29 + {&DDRA, &PINA, &PORTA, 1}, // A1 30 + {&DDRA, &PINA, &PORTA, 0} // A0 31 +}; +#else // VARIANT_MIGHTY +#error Undefined variant 1284, 644, 324, 64, 32 +#endif // VARIANT_MIGHTY +//------------------------------------------------------------------------------ +#elif defined(__AVR_ATmega32U4__) +#ifdef CORE_TEENSY +// Teensy 2.0 +static const pin_map_t pinMap[] = { + {&DDRB, &PINB, &PORTB, 0}, // B0 0 + {&DDRB, &PINB, &PORTB, 1}, // B1 1 + {&DDRB, &PINB, &PORTB, 2}, // B2 2 + {&DDRB, &PINB, &PORTB, 3}, // B3 3 + {&DDRB, &PINB, &PORTB, 7}, // B7 4 + {&DDRD, &PIND, &PORTD, 0}, // D0 5 + {&DDRD, &PIND, &PORTD, 1}, // D1 6 + {&DDRD, &PIND, &PORTD, 2}, // D2 7 + {&DDRD, &PIND, &PORTD, 3}, // D3 8 + {&DDRC, &PINC, &PORTC, 6}, // C6 9 + {&DDRC, &PINC, &PORTC, 7}, // C7 10 + {&DDRD, &PIND, &PORTD, 6}, // D6 11 + {&DDRD, &PIND, &PORTD, 7}, // D7 12 + {&DDRB, &PINB, &PORTB, 4}, // B4 13 + {&DDRB, &PINB, &PORTB, 5}, // B5 14 + {&DDRB, &PINB, &PORTB, 6}, // B6 15 + {&DDRF, &PINF, &PORTF, 7}, // F7 16 + {&DDRF, &PINF, &PORTF, 6}, // F6 17 + {&DDRF, &PINF, &PORTF, 5}, // F5 18 + {&DDRF, &PINF, &PORTF, 4}, // F4 19 + {&DDRF, &PINF, &PORTF, 1}, // F1 20 + {&DDRF, &PINF, &PORTF, 0}, // F0 21 + {&DDRD, &PIND, &PORTD, 4}, // D4 22 + {&DDRD, &PIND, &PORTD, 5}, // D5 23 + {&DDRE, &PINE, &PORTE, 6} // E6 24 +}; +//------------------------------------------------------------------------------ +#else // CORE_TEENSY +// Leonardo +static const pin_map_t pinMap[] = { + {&DDRD, &PIND, &PORTD, 2}, // D2 0 + {&DDRD, &PIND, &PORTD, 3}, // D3 1 + {&DDRD, &PIND, &PORTD, 1}, // D1 2 + {&DDRD, &PIND, &PORTD, 0}, // D0 3 + {&DDRD, &PIND, &PORTD, 4}, // D4 4 + {&DDRC, &PINC, &PORTC, 6}, // C6 5 + {&DDRD, &PIND, &PORTD, 7}, // D7 6 + {&DDRE, &PINE, &PORTE, 6}, // E6 7 + {&DDRB, &PINB, &PORTB, 4}, // B4 8 + {&DDRB, &PINB, &PORTB, 5}, // B5 9 + {&DDRB, &PINB, &PORTB, 6}, // B6 10 + {&DDRB, &PINB, &PORTB, 7}, // B7 11 + {&DDRD, &PIND, &PORTD, 6}, // D6 12 + {&DDRC, &PINC, &PORTC, 7}, // C7 13 + {&DDRB, &PINB, &PORTB, 3}, // B3 14 + {&DDRB, &PINB, &PORTB, 1}, // B1 15 + {&DDRB, &PINB, &PORTB, 2}, // B2 16 + {&DDRB, &PINB, &PORTB, 0}, // B0 17 + {&DDRF, &PINF, &PORTF, 7}, // F7 18 + {&DDRF, &PINF, &PORTF, 6}, // F6 19 + {&DDRF, &PINF, &PORTF, 5}, // F5 20 + {&DDRF, &PINF, &PORTF, 4}, // F4 21 + {&DDRF, &PINF, &PORTF, 1}, // F1 22 + {&DDRF, &PINF, &PORTF, 0}, // F0 23 + {&DDRD, &PIND, &PORTD, 4}, // D4 24 + {&DDRD, &PIND, &PORTD, 7}, // D7 25 + {&DDRB, &PINB, &PORTB, 4}, // B4 26 + {&DDRB, &PINB, &PORTB, 5}, // B5 27 + {&DDRB, &PINB, &PORTB, 6}, // B6 28 + {&DDRD, &PIND, &PORTD, 6} // D6 29 +}; +#endif // CORE_TEENSY +//------------------------------------------------------------------------------ +#elif defined(__AVR_AT90USB646__)\ +|| defined(__AVR_AT90USB1286__) +// Teensy++ 1.0 & 2.0 +static const pin_map_t pinMap[] = { + {&DDRD, &PIND, &PORTD, 0}, // D0 0 + {&DDRD, &PIND, &PORTD, 1}, // D1 1 + {&DDRD, &PIND, &PORTD, 2}, // D2 2 + {&DDRD, &PIND, &PORTD, 3}, // D3 3 + {&DDRD, &PIND, &PORTD, 4}, // D4 4 + {&DDRD, &PIND, &PORTD, 5}, // D5 5 + {&DDRD, &PIND, &PORTD, 6}, // D6 6 + {&DDRD, &PIND, &PORTD, 7}, // D7 7 + {&DDRE, &PINE, &PORTE, 0}, // E0 8 + {&DDRE, &PINE, &PORTE, 1}, // E1 9 + {&DDRC, &PINC, &PORTC, 0}, // C0 10 + {&DDRC, &PINC, &PORTC, 1}, // C1 11 + {&DDRC, &PINC, &PORTC, 2}, // C2 12 + {&DDRC, &PINC, &PORTC, 3}, // C3 13 + {&DDRC, &PINC, &PORTC, 4}, // C4 14 + {&DDRC, &PINC, &PORTC, 5}, // C5 15 + {&DDRC, &PINC, &PORTC, 6}, // C6 16 + {&DDRC, &PINC, &PORTC, 7}, // C7 17 + {&DDRE, &PINE, &PORTE, 6}, // E6 18 + {&DDRE, &PINE, &PORTE, 7}, // E7 19 + {&DDRB, &PINB, &PORTB, 0}, // B0 20 + {&DDRB, &PINB, &PORTB, 1}, // B1 21 + {&DDRB, &PINB, &PORTB, 2}, // B2 22 + {&DDRB, &PINB, &PORTB, 3}, // B3 23 + {&DDRB, &PINB, &PORTB, 4}, // B4 24 + {&DDRB, &PINB, &PORTB, 5}, // B5 25 + {&DDRB, &PINB, &PORTB, 6}, // B6 26 + {&DDRB, &PINB, &PORTB, 7}, // B7 27 + {&DDRA, &PINA, &PORTA, 0}, // A0 28 + {&DDRA, &PINA, &PORTA, 1}, // A1 29 + {&DDRA, &PINA, &PORTA, 2}, // A2 30 + {&DDRA, &PINA, &PORTA, 3}, // A3 31 + {&DDRA, &PINA, &PORTA, 4}, // A4 32 + {&DDRA, &PINA, &PORTA, 5}, // A5 33 + {&DDRA, &PINA, &PORTA, 6}, // A6 34 + {&DDRA, &PINA, &PORTA, 7}, // A7 35 + {&DDRE, &PINE, &PORTE, 4}, // E4 36 + {&DDRE, &PINE, &PORTE, 5}, // E5 37 + {&DDRF, &PINF, &PORTF, 0}, // F0 38 + {&DDRF, &PINF, &PORTF, 1}, // F1 39 + {&DDRF, &PINF, &PORTF, 2}, // F2 40 + {&DDRF, &PINF, &PORTF, 3}, // F3 41 + {&DDRF, &PINF, &PORTF, 4}, // F4 42 + {&DDRF, &PINF, &PORTF, 5}, // F5 43 + {&DDRF, &PINF, &PORTF, 6}, // F6 44 + {&DDRF, &PINF, &PORTF, 7} // F7 45 +}; +//------------------------------------------------------------------------------ +#else // CPU type +#error unknown CPU type +#endif // CPU type +//------------------------------------------------------------------------------ +/** count of pins */ +static const uint8_t digitalPinCount = sizeof(pinMap)/sizeof(pin_map_t); +//============================================================================== +/** generate bad pin number error */ +void badPinNumber(void) + __attribute__((error("Pin number is too large or not a constant"))); +//------------------------------------------------------------------------------ +/** Check for valid pin number + * @param[in] pin Number of pin to be checked. + */ +static inline __attribute__((always_inline)) +void badPinCheck(uint8_t pin) { + if (!__builtin_constant_p(pin) || pin >= digitalPinCount) { + badPinNumber(); + } +} +//------------------------------------------------------------------------------ +/** fast write helper + * @param[in] address I/O register address + * @param[in] bit bit number to write + * @param[in] level value for bit + */ +static inline __attribute__((always_inline)) +void fastBitWriteSafe(volatile uint8_t* address, uint8_t bit, bool level) { + uint8_t oldSREG; + if (address > (uint8_t*)0X5F) { + oldSREG = SREG; + cli(); + } + if (level) { + *address |= 1 << bit; + } else { + *address &= ~(1 << bit); + } + if (address > (uint8_t*)0X5F) { + SREG = oldSREG; + } +} +//------------------------------------------------------------------------------ +/** read pin value + * @param[in] pin Arduino pin number + * @return value read + */ +static inline __attribute__((always_inline)) +bool fastDigitalRead(uint8_t pin) { + badPinCheck(pin); + return (*pinMap[pin].pin >> pinMap[pin].bit) & 1; +} +//------------------------------------------------------------------------------ +/** toggle a pin + * @param[in] pin Arduino pin number + * + * If the pin is in output mode toggle the pin level. + * If the pin is in input mode toggle the state of the 20K pullup. + */ +static inline __attribute__((always_inline)) +void fastDigitalToggle(uint8_t pin) { + badPinCheck(pin); + if (pinMap[pin].pin > (uint8_t*)0X5F) { + // must write bit to high address port + *pinMap[pin].pin = 1 << pinMap[pin].bit; + } else { + // will compile to sbi and PIN register will not be read. + *pinMap[pin].pin |= 1 << pinMap[pin].bit; + } +} +//------------------------------------------------------------------------------ +/** Set pin value + * @param[in] pin Arduino pin number + * @param[in] level value to write + */ +static inline __attribute__((always_inline)) +void fastDigitalWrite(uint8_t pin, bool level) { + badPinCheck(pin); + fastBitWriteSafe(pinMap[pin].port, pinMap[pin].bit, level); +} +//------------------------------------------------------------------------------ +/** set pin mode + * @param[in] pin Arduino pin number + * @param[in] mode if true set output mode else input mode + * + * fastPinMode does not enable or disable the 20K pullup for input mode. + */ +static inline __attribute__((always_inline)) +void fastPinMode(uint8_t pin, bool mode) { + badPinCheck(pin); + fastBitWriteSafe(pinMap[pin].ddr, pinMap[pin].bit, mode); +} +//------------------------------------------------------------------------------ +/** set pin configuration + * @param[in] pin Arduino pin number + * @param[in] mode If true set output mode else input mode + * @param[in] level If mode is output, set level high/low. + * If mode is input, enable or disable the pin's 20K pullup. + */ +static inline __attribute__((always_inline)) +void fastPinConfig(uint8_t pin, bool mode, bool level) { + fastPinMode(pin, mode); + fastDigitalWrite(pin, level); +} +//============================================================================== +/** + * @class DigitalPin + * @brief Fast AVR digital port I/O + */ +template +class DigitalPin { + public: + //---------------------------------------------------------------------------- + /** Constructor */ + DigitalPin() {} + //---------------------------------------------------------------------------- + /** Constructor + * @param[in] pinMode if true set output mode else input mode. + */ + explicit DigitalPin(bool pinMode) { + mode(pinMode); + } + //---------------------------------------------------------------------------- + /** Constructor + * @param[in] mode If true set output mode else input mode + * @param[in] level If mode is output, set level high/low. + * If mode is input, enable or disable the pin's 20K pullup. + */ + DigitalPin(bool mode, bool level) { + config(mode, level); + } + //---------------------------------------------------------------------------- + /** Asignment operator + * @param[in] value If true set the pin's level high else set the + * pin's level low. + * + * @return This DigitalPin instance. + */ + inline DigitalPin & operator = (bool value) __attribute__((always_inline)) { + write(value); + return *this; + } + //---------------------------------------------------------------------------- + /** Parenthesis operator + * @return Pin's level + */ + inline operator bool () const __attribute__((always_inline)) { + return read(); + } + //---------------------------------------------------------------------------- + /** set pin configuration + * @param[in] mode If true set output mode else input mode + * @param[in] level If mode is output, set level high/low. + * If mode is input, enable or disable the pin's 20K pullup. + */ + inline __attribute__((always_inline)) + void config(bool mode, bool level) { + fastPinConfig(PinNumber, mode, level); + } + //---------------------------------------------------------------------------- + /** + * Set pin level high if output mode or enable 20K pullup if input mode. + */ + inline __attribute__((always_inline)) + void high() {write(true);} + //---------------------------------------------------------------------------- + /** + * Set pin level low if output mode or disable 20K pullup if input mode. + */ + inline __attribute__((always_inline)) + void low() {write(false);} + //---------------------------------------------------------------------------- + /** + * Set pin mode + * @param[in] pinMode if true set output mode else input mode. + * + * mode() does not enable or disable the 20K pullup for input mode. + */ + inline __attribute__((always_inline)) + void mode(bool pinMode) { + fastPinMode(PinNumber, pinMode); + } + //---------------------------------------------------------------------------- + /** @return Pin's level */ + inline __attribute__((always_inline)) + bool read() const { + return fastDigitalRead(PinNumber); + } + //---------------------------------------------------------------------------- + /** toggle a pin + * + * If the pin is in output mode toggle the pin's level. + * If the pin is in input mode toggle the state of the 20K pullup. + */ + inline __attribute__((always_inline)) + void toggle() { + fastDigitalToggle(PinNumber); + } + //---------------------------------------------------------------------------- + /** Write the pin's level. + * @param[in] value If true set the pin's level high else set the + * pin's level low. + */ + inline __attribute__((always_inline)) + void write(bool value) { + fastDigitalWrite(PinNumber, value); + } +}; +#endif // DigitalPin_h +/** @} */ \ No newline at end of file diff --git a/libraries/DigitalIO/I2cConstants.h b/libraries/DigitalIO/I2cConstants.h new file mode 100644 index 0000000..7b2c749 --- /dev/null +++ b/libraries/DigitalIO/I2cConstants.h @@ -0,0 +1,62 @@ +/* Arduino I2C Library + * Copyright (C) 2013 by William Greiman + * + * This file is part of the Arduino I2C Library + * + * This Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with the Arduino I2C Library. If not, see + * . + */ +/** + * @file I2cConstants.h + * @brief Two Wire Interface constants. + * + * @defgroup twoWire I2C constants + * @details Two Wire Interface library. + * @{ + */ +#ifndef I2cConstants_h +#define I2cConstants_h +#include + +/** Option argument for transfer() of transferContinue() to continue a + an I2C operation. */ +const uint8_t I2C_CONTINUE = 0; + +/** Option argument for transfer() of transferContinue() to end a + transfer with a STOP condition */ +const uint8_t I2C_STOP = 1; + +/** Option argument for transfer() of transferContinue() to end a + transfer with a repeated START condition */ +const uint8_t I2C_REP_START = 2; + +/** Set I2C bus speed to 100 kHz. Used by TwiMaster class. */ +const uint8_t I2C_100KHZ = 0; + +/** Set I2C bus speed to 400 kHz. Used by TwiMaster class. */ +const uint8_t I2C_400KHZ = 1; + +/** Bit to OR with address for a read operation. */ +const uint8_t I2C_READ = 1; + +/** Bit to OR with address for write operation. */ +const uint8_t I2C_WRITE = 0; + +/** Disable internal pull-ups on SDA and SCL. Used by TwiMaster class. */ +const uint8_t I2C_NO_PULLUPS = 0; + +/** Enable internal pull-ups on SDA and SCL. Used by TwiMaster class. */ +const uint8_t I2C_INTERNAL_PULLUPS = 1; +#endif // I2cConstants_h +/** @} */ \ No newline at end of file diff --git a/libraries/DigitalIO/PinIO.cpp b/libraries/DigitalIO/PinIO.cpp new file mode 100644 index 0000000..b0367b7 --- /dev/null +++ b/libraries/DigitalIO/PinIO.cpp @@ -0,0 +1,68 @@ +/* Arduino DigitalIO Library + * Copyright (C) 2013 by William Greiman + * + * This file is part of the Arduino DigitalIO Library + * + * This Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with the Arduino DigitalIO Library. If not, see + * . + */ +/** + * @file + * @brief Digital AVR port I/O with runtime pin number. + * + * @defgroup runtimeDigital Runtime Pin I/O + * @details Two Wire Interface library. + * @{ + */ +#include +#include +#include +//============================================================================== +/** Constructor + * @param[in] pin Pin assigned to this object. + */ +PinIO::PinIO(uint8_t pin) { + begin(pin); +} +//------------------------------------------------------------------------------ +/** Initialize pin bit mask and port address. + * @param[in] pin Arduino board pin number. + * @return true for success or false if invalid pin number. + */ +bool PinIO::begin(uint8_t pin) { + if (pin >= NUM_DIGITAL_PINS) return false; + uint8_t port = digitalPinToPort(pin); + pinReg_ = portInputRegister(port); + bit_ = digitalPinToBitMask(pin); + mask_ = ~bit_; + portReg_ = pinReg_ + 2; + return true; +} +//------------------------------------------------------------------------------ +/** Configure the pin + * + * @param[in] mode Configure as output mode if true else input mode. + * @param[in] data For output mode set pin high if true else low. + * For input mode enable 20K pullup if true else Hi-Z. + * + * This function may be used with interrupts enabled or disabled. + * The previous interrupt state will be restored. + */ +void PinIO::config(bool mode, bool data) { + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { + modeI(mode); + writeI(data); + } +} +/** @} */ \ No newline at end of file diff --git a/libraries/DigitalIO/PinIO.h b/libraries/DigitalIO/PinIO.h new file mode 100644 index 0000000..96fe492 --- /dev/null +++ b/libraries/DigitalIO/PinIO.h @@ -0,0 +1,145 @@ +/* Arduino DigitalIO Library + * Copyright (C) 2013 by William Greiman + * + * This file is part of the Arduino DigitalIO Library + * + * This Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with the Arduino DigitalIO Library. If not, see + * . + */ +/** + * @file + * @brief Digital AVR port I/O with runtime pin number. + * + * @defgroup runtimeDigital Runtime Pin I/O + * @details Two Wire Interface library. + * @{ + */ +#ifndef PinIO_h +#define PinIO_h +#include +#include +//------------------------------------------------------------------------------ +/** + * @class PinIO + * @brief AVR port I/O with runtime pin numbers. + */ +class PinIO { + public: + /** Create a PinIO object with no assigned pin. */ + PinIO() : bit_(0), mask_(0XFF) {} + explicit PinIO(uint8_t pin); + bool begin(uint8_t pin); + void config(bool mode, bool data); + //---------------------------------------------------------------------------- + /** @return Pin's level */ + inline __attribute__((always_inline)) + bool read() {return *pinReg_ & bit_;} + //---------------------------------------------------------------------------- + /** toggle a pin + * + * If the pin is in output mode toggle the pin's level. + * If the pin is in input mode toggle the state of the 20K pullup. + */ + inline __attribute__((always_inline)) + void toggle() {*pinReg_ = bit_;} + //============================================================================ + /** + * Set pin high if output mode or enable 20K pullup if input mode. + * + * This function must be called with interrupts disabled. + * This function will not change the interrupt state. + */ + inline __attribute__((always_inline)) + void highI() {writeI(1);} + /** + * Set pin low if output mode or disable 20K pullup if input mode. + * + * This function must be called with interrupts disabled. + * This function will not change the interrupt state. + */ + inline __attribute__((always_inline)) + void lowI() {writeI(0);} + /** + * Set pin mode + * @param[in] mode if true set output mode else input mode. + * + * mode() does not enable or disable the 20K pullup for input mode. + * + * This function must be called with interrupts disabled. + * This function will not change the interrupt state. + */ + inline __attribute__((always_inline)) + void modeI(bool mode) { + volatile uint8_t* ddrReg = pinReg_ + 1; + *ddrReg = mode ? *ddrReg | bit_ : *ddrReg & mask_; + } + /** Write pin. + * + * @param[in] level If output mode set pin high if true else low. + * If input mode enable 20K pullup if true else disable pullup. + * + * This function must be called with interrupts disabled. + * This function will not change the interrupt state. + */ + inline __attribute__((always_inline)) + void writeI(bool level) { + *portReg_ = level ? *portReg_ | bit_ : *portReg_ & mask_; + } + //============================================================================ + /** + * Set pin level high if output mode or enable 20K pullup if input mode. + * + * This function will enable interrupts. This function should not be + * called in an ISR or where interrupts are disabled. + */ + inline __attribute__((always_inline)) + void high() {ATOMIC_BLOCK(ATOMIC_FORCEON) {highI();}} + /** + * Set pin level low if output mode or disable 20K pullup if input mode. + * + * This function will enable interrupts. This function should not be + * called in an ISR or where interrupts are disabled. + */ + inline __attribute__((always_inline)) + void low() {ATOMIC_BLOCK(ATOMIC_FORCEON) {lowI();}} + /** + * Set pin mode + * @param[in] pinMode if true set output mode else input mode. + * + * mode() does not enable or disable the 20K pullup for input mode. + * + * This function will enable interrupts. This function should not be + * called in an ISR or where interrupts are disabled. + */ + inline __attribute__((always_inline)) + void mode(bool pinMode) {ATOMIC_BLOCK(ATOMIC_FORCEON) {modeI(pinMode);}} + /** Write pin. + * + * @param[in] level If output mode set pin high if true else low. + * If input mode enable 20K pullup if true else disable pullup. + * + * This function will enable interrupts. This function should not be + * called in an ISR or where interrupts are disabled. + */ + inline __attribute__((always_inline)) + void write(bool level) {ATOMIC_BLOCK(ATOMIC_FORCEON) {writeI(level);}} + //---------------------------------------------------------------------------- + private: + uint8_t bit_; + uint8_t mask_; + volatile uint8_t* pinReg_; + volatile uint8_t* portReg_; +}; +#endif // PinIO_h +/** @} */ \ No newline at end of file diff --git a/libraries/DigitalIO/SoftI2cMaster.cpp b/libraries/DigitalIO/SoftI2cMaster.cpp new file mode 100644 index 0000000..efc338a --- /dev/null +++ b/libraries/DigitalIO/SoftI2cMaster.cpp @@ -0,0 +1,240 @@ +/* Arduino DigitalIO Library + * Copyright (C) 2013 by William Greiman + * + * This file is part of the Arduino DigitalIO Library + * + * This Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with the Arduino DigitalIO Library. If not, see + * . + */ +/** + * @file + * @brief Software I2C library + * + * @defgroup softI2C Software I2C + * @details Software Two Wire Interface library. + * @{ + */ +#include +//------------------------------------------------------------------------------ +/** + * Start an I2C transfer with possible continuation. + * + * @param[in] addrRW I2C slave address plus R/W bit. + * The I2C slave address is in the high seven bits + * and is ORed with on of the following: + * - I2C_READ for a read transfer. + * - I2C_WRITE for a write transfer. + * . + * @param[in,out] buf Source or destination for transfer. + * @param[in] nbytes Number of bytes to transfer (may be zero). + * @param[in] option Option for ending the transfer, one of: + * - I2C_STOP end the transfer with an I2C stop + * condition. + * - I2C_REP_START end the transfer with an I2C + * repeated start condition. + * - I2C_CONTINUE allow additional transferContinue() + * calls. + * . + * @return true for success else false. + */ +bool I2cMasterBase::transfer(uint8_t addrRW, + void *buf, size_t nbytes, uint8_t option) { + uint8_t* p = reinterpret_cast(buf); + if (_state != STATE_REP_START) { + start(); + } + if (!write(addrRW)) { + _state = addrRW & I2C_READ ? STATE_RX_ADDR_NACK : STATE_TX_ADDR_NACK; + return false; + } + _state = addrRW & I2C_READ ? STATE_RX_DATA : STATE_TX_DATA; + return transferContinue(buf, nbytes, option); +} +//------------------------------------------------------------------------------ +/** + * Continue an I2C transfer. + * + * @param[in,out] buf Source or destination for transfer. + * @param[in] nbytes Number of bytes to transfer (may be zero). + * @param[in] option Option for ending the transfer, one of: + * - I2C_STOP end the transfer with an I2C stop + * condition. + * - I2C_REP_START end the transfer with an I2C + * repeated start condition. + * - I2C_CONTINUE allow additional transferContinue() + * calls. + * . + * @return true for success else false. + */ +bool I2cMasterBase::transferContinue(void *buf, size_t nbytes, uint8_t option) { + uint8_t* p = reinterpret_cast(buf); + if (_state == STATE_RX_DATA) { + for (size_t i = 0; i < nbytes; i++) { + p[i] = read(i == (nbytes - 1) && option != I2C_CONTINUE); + } + } else if (_state == STATE_TX_DATA) { + for (size_t i = 0; i < nbytes; i++) { + if (!write(p[i])) { + _state = STATE_TX_DATA_NACK; + return false; + } + } + } else { + return false; + } + if (option == I2C_STOP) { + stop(); + _state = STATE_STOP; + } else if (option == I2C_REP_START) { + start(); + _state = STATE_STOP; + } + return true; +} +//============================================================================== +// WARNING don't change SoftI2cMaster unless you verify the change with a scope +//------------------------------------------------------------------------------ +/** + * Constructor, initialize SCL/SDA pins and set the bus high. + * + * @param[in] sdaPin The software SDA pin number. + * + * @param[in] sclPin The software SCL pin number. + */ +SoftI2cMaster::SoftI2cMaster(uint8_t sclPin, uint8_t sdaPin) { + begin(sclPin, sdaPin); +} +//------------------------------------------------------------------------------ +/** + * Initialize SCL/SDA pins and set the bus high. + * + * @param[in] sdaPin The software SDA pin number. + * + * @param[in] sclPin The software SCL pin number. + */ +void SoftI2cMaster::begin(uint8_t sclPin, uint8_t sdaPin) { + uint8_t port; + + // Get bit mask and address of scl registers. + _sclBit = digitalPinToBitMask(sclPin); + port = digitalPinToPort(sclPin); + _sclDDR = portModeRegister(port); + volatile uint8_t* sclOutReg = portOutputRegister(port); + + // Get bit mask and address of sda registers. + _sdaBit = digitalPinToBitMask(sdaPin); + port = digitalPinToPort(sdaPin); + _sdaDDR = portModeRegister(port); + _sdaInReg = portInputRegister(port); + volatile uint8_t* sdaOutReg = portOutputRegister(port); + + // Clear PORT bit for scl and sda. + uint8_t s = SREG; + noInterrupts(); + *sclOutReg &= ~_sclBit; + *sdaOutReg &= ~_sdaBit; + SREG = s; + + // Set scl and sda high. + writeScl(HIGH); + writeSda(HIGH); +} +//------------------------------------------------------------------------------ +/* Read a byte and send ACK if more reads follow else NACK to terminate read. + * + * @param[in] last Set true to terminate the read else false. + * + * @return The byte read from the I2C bus. + */ +uint8_t SoftI2cMaster::read(uint8_t last) { + uint8_t b = 0; + + // Set sda to high Z mode for read. + writeSda(HIGH); + // Read a byte. + for (uint8_t i = 0; i < 8; i++) { + // Don't change this loop unless you verify the change with a scope. + b <<= 1; + sclDelay(16); + writeScl(HIGH); + sclDelay(12); + if (readSda()) b |= 1; + writeScl(LOW); + } + // send ACK or NACK + writeSda(last); + sclDelay(12); + writeScl(HIGH); + sclDelay(18); + writeScl(LOW); + writeSda(LOW); + return b; +} +//------------------------------------------------------------------------------ +/* Issue a start condition. */ +void SoftI2cMaster::start() { + if (!readSda()) { + writeSda(HIGH); + writeScl(HIGH); + sclDelay(20); + } + writeSda(LOW); + sclDelay(20); + writeScl(LOW); +} +//------------------------------------------------------------------------------ + /* Issue a stop condition. */ +void SoftI2cMaster::stop(void) { + writeSda(LOW); + sclDelay(20); + writeScl(HIGH); + sclDelay(20); + writeSda(HIGH); + sclDelay(20); +} +//------------------------------------------------------------------------------ +/* + * Write a byte. + * + * @param[in] data The byte to send. + * + * @return The value true, 1, if the slave returned an ACK or false for NACK. + */ +bool SoftI2cMaster::write(uint8_t data) { + // write byte + for (uint8_t m = 0X80; m != 0; m >>= 1) { + // don't change this loop unless you verify the change with a scope + writeSda(m & data); + sclDelay(8); + writeScl(HIGH); + sclDelay(18); + writeScl(LOW); + } + sclDelay(8); + // Go to sda high Z mode for input. + writeSda(HIGH); + writeScl(HIGH); + sclDelay(16); + + // Get ACK or NACK. + uint8_t rtn = readSda(); + + // pull scl low. + writeScl(LOW); + + // Pull sda low. + writeSda(LOW); + return rtn == 0; +} +/** @} */ diff --git a/libraries/DigitalIO/SoftI2cMaster.h b/libraries/DigitalIO/SoftI2cMaster.h new file mode 100644 index 0000000..e2d559a --- /dev/null +++ b/libraries/DigitalIO/SoftI2cMaster.h @@ -0,0 +1,284 @@ +/* Arduino DigitalIO Library + * Copyright (C) 2013 by William Greiman + * + * This file is part of the Arduino DigitalIO Library + * + * This Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with the Arduino DigitalIO Library. If not, see + * . + */ +#ifndef SOFT_I2C_MASTER_H +#define SOFT_I2C_MASTER_H +/** + * @file + * @brief Software I2C library + * + * @defgroup softI2C Software I2C + * @details Software Two Wire Interface library. + * @{ + */ +#if ARDUINO < 100 +#error Requires Arduino 1.0 or greater. +#else // ARDUINO +#include +#endif // ARDUINO +#include +#include +#include +//------------------------------------------------------------------------------ +// State codes. + +/** Stop condition transmitted. */ +const uint8_t STATE_STOP = 0; + +/** Repeated start condition transmitted. */ +const uint8_t STATE_REP_START = 1; + +/** Read data transfer active. */ +const uint8_t STATE_RX_DATA = 2; + +/** Write data transfer active. */ +const uint8_t STATE_TX_DATA = 3; + +/** Slave address plus read bit transmitted, NACK received. */ +const uint8_t STATE_RX_ADDR_NACK = 4; + +/** Slave address plus write bit transmitted, NACK received. */ +const uint8_t STATE_TX_ADDR_NACK = 5; +/** Data byte transmitted, NACK received. */ +const uint8_t STATE_TX_DATA_NACK = 6; +//============================================================================== +/** + * @class I2cMasterBase + * @brief Base class for FastI2cMaster, SoftI2cMaster + */ +class I2cMasterBase { + public: + I2cMasterBase() : _state(STATE_STOP) {} + /** Read a byte + * + * @note This function should only be used by experts. Data should be + * accessed by calling transfer() and transferContinue() + * + * @param[in] last send a NACK to terminate read if last is true else + * send an ACK to continue the read. + * + * @return byte read from I2C bus + */ + virtual uint8_t read(uint8_t last) = 0; + + /** Issue a start condition + * + * @note This function should only be used by experts. Data should be + * accessed by calling transfer() and transferContinue() + */ + virtual void start() = 0; + /** Issue a stop condition. + * + * @note This function should only be used by experts. Data should be + * accessed by calling transfer() and transferContinue() + */ + virtual void stop() = 0; + + bool transfer(uint8_t addressRW, void *buf, + size_t nbyte, uint8_t option = I2C_STOP); + + bool transferContinue(void *buf, size_t nbyte, uint8_t option = I2C_STOP); + /** Write a byte + * + * @note This function should only be used by experts. Data should be + * accessed by calling transfer() and transferContinue() + * + * @param[in] data byte to write + * @return true for ACK or false for NACK */ + virtual bool write(uint8_t data) = 0; + + private: + uint8_t _state; +}; +//============================================================================== +/** + * @class SoftI2cMaster + * @brief Software I2C master class + */ +class SoftI2cMaster : public I2cMasterBase { + public: + SoftI2cMaster() {} + SoftI2cMaster(uint8_t sclPin, uint8_t sdaPin); + void begin(uint8_t sclPin, uint8_t sdaPin); + uint8_t read(uint8_t last); + void start(); + void stop(void); + bool write(uint8_t b); + + private: + uint8_t _sclBit; + uint8_t _sdaBit; + volatile uint8_t* _sclDDR; + volatile uint8_t* _sdaDDR; + volatile uint8_t* _sdaInReg; + //---------------------------------------------------------------------------- + bool readSda() {return *_sdaInReg & _sdaBit;} + //---------------------------------------------------------------------------- + void sclDelay(uint8_t n) {_delay_loop_1(n);} + //---------------------------------------------------------------------------- + bool writeScl(bool value) { + uint8_t s = SREG; + noInterrupts(); + if (value == LOW) { + // Pull scl low. + *_sclDDR |= _sclBit; + } else { + // Put scl in high Z input mode. + *_sclDDR &= ~_sclBit; + } + SREG = s; + } + //---------------------------------------------------------------------------- + bool writeSda(bool value) { + uint8_t s = SREG; + noInterrupts(); + if (value == LOW) { + // Pull sda low. + *_sdaDDR |= _sdaBit; + } else { + // Put sda in high Z input mode. + *_sdaDDR &= ~_sdaBit; + } + SREG = s; + } +}; +//============================================================================== +// Template based fast software I2C +//------------------------------------------------------------------------------ +/** + * @class FastI2cMaster + * @brief Fast software I2C master class. + */ +template +class FastI2cMaster : public I2cMasterBase { + public: + //---------------------------------------------------------------------------- + FastI2cMaster() { + begin(); + } + //---------------------------------------------------------------------------- + /** Initialize I2C bus pins. */ + void begin() { + fastDigitalWrite(sclPin, LOW); + fastDigitalWrite(sdaPin, LOW); + + sclWrite(HIGH); + sdaWrite(HIGH); + } + //---------------------------------------------------------------------------- + uint8_t read(uint8_t last) { + uint8_t data = 0; + sdaWrite(HIGH); + + readBit(7, &data); + readBit(6, &data); + readBit(5, &data); + readBit(4, &data); + readBit(3, &data); + readBit(2, &data); + readBit(1, &data); + readBit(0, &data); + + // send ACK or NACK + sdaWrite(last); + sclDelay(4); + sclWrite(HIGH); + sclDelay(6); + sclWrite(LOW); + sdaWrite(LOW); + return data; + } + //---------------------------------------------------------------------------- + void start() { + if (!fastDigitalRead(sdaPin)) { + // It's a repeat start. + sdaWrite(HIGH); + sclDelay(8); + sclWrite(HIGH); + sclDelay(8); + } + sdaWrite(LOW); + sclDelay(8); + sclWrite(LOW); + sclDelay(8); + } + //---------------------------------------------------------------------------- + void stop(void) { + sdaWrite(LOW); + sclDelay(8); + sclWrite(HIGH); + sclDelay(8); + sdaWrite(HIGH); + sclDelay(8); + } + //---------------------------------------------------------------------------- + bool write(uint8_t data) { + // write byte + writeBit(7, data); + writeBit(6, data); + writeBit(5, data); + writeBit(4, data); + writeBit(3, data); + writeBit(2, data); + writeBit(1, data); + writeBit(0, data); + + // get ACK or NACK + sdaWrite(HIGH); + + sclWrite(HIGH); + sclDelay(5); + bool rtn = fastDigitalRead(sdaPin); + sclWrite(LOW); + sdaWrite(LOW); + return rtn == 0; + } + + private: + //---------------------------------------------------------------------------- + inline __attribute__((always_inline)) + void sclWrite(bool value) {fastPinMode(sclPin, !value);} + //---------------------------------------------------------------------------- + inline __attribute__((always_inline)) + void sdaWrite(bool value) {fastPinMode(sdaPin, !value);} + //---------------------------------------------------------------------------- + inline __attribute__((always_inline)) + void readBit(uint8_t bit, uint8_t* data) { + sclWrite(HIGH); + sclDelay(5); + if (fastDigitalRead(sdaPin)) *data |= 1 << bit; + sclWrite(LOW); + if (bit) sclDelay(6); + } + //---------------------------------------------------------------------------- + void sclDelay(uint8_t n) {_delay_loop_1(n);} + //---------------------------------------------------------------------------- + inline __attribute__((always_inline)) + void writeBit(uint8_t bit, uint8_t data) { + uint8_t mask = 1 << bit; + sdaWrite(data & mask); + sclWrite(HIGH); + sclDelay(5); + sclWrite(LOW); + sclDelay(5); + } +}; +#endif // SOFT_I2C_MASTER_H +/** @} */ + diff --git a/libraries/DigitalIO/SoftSPI.h b/libraries/DigitalIO/SoftSPI.h new file mode 100644 index 0000000..036fad6 --- /dev/null +++ b/libraries/DigitalIO/SoftSPI.h @@ -0,0 +1,162 @@ +/* Arduino DigitalIO Library + * Copyright (C) 2013 by William Greiman + * + * This file is part of the Arduino DigitalIO Library + * + * This Library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with the Arduino DigitalIO Library. If not, see + * . + */ +/** + * @file + * @brief Software SPI. + * + * @defgroup softSPI Software SPI + * @details Software SPI Template Class. + * @{ + */ + +#ifndef SoftSPI_h +#define SoftSPI_h +#include +//------------------------------------------------------------------------------ +/** Nop for timing. */ +#define nop asm volatile ("nop\n\t") +//------------------------------------------------------------------------------ +/** Pin Mode for MISO is input.*/ +const bool MISO_MODE = false; +/** Pullups disabled for MISO are disabled. */ +const bool MISO_LEVEL = false; +/** Pin Mode for MOSI is output.*/ +const bool MOSI_MODE = true; +/** Pin Mode for SCK is output. */ +const bool SCK_MODE = true; +//------------------------------------------------------------------------------ +/** + * @class SoftSPI + * @brief Fast software SPI. + */ +template +class SoftSPI { + public: + //---------------------------------------------------------------------------- + /** Initialize SoftSPI pins. */ + void begin() { + fastPinConfig(MisoPin, MISO_MODE, MISO_LEVEL); + fastPinConfig(MosiPin, MOSI_MODE, !MODE_CPHA(Mode)); + fastPinConfig(SckPin, SCK_MODE, MODE_CPOL(Mode)); + } + //---------------------------------------------------------------------------- + /** Soft SPI receive byte. + * @return Data byte received. + */ + inline __attribute__((always_inline)) + uint8_t receive() { + uint8_t data = 0; + receiveBit(7, &data); + receiveBit(6, &data); + receiveBit(5, &data); + receiveBit(4, &data); + receiveBit(3, &data); + receiveBit(2, &data); + receiveBit(1, &data); + receiveBit(0, &data); + return data; + } + //---------------------------------------------------------------------------- + /** Soft SPI send byte. + * @param[in] data Data byte to send. + */ + inline __attribute__((always_inline)) + void send(uint8_t data) { + sendBit(7, data); + sendBit(6, data); + sendBit(5, data); + sendBit(4, data); + sendBit(3, data); + sendBit(2, data); + sendBit(1, data); + sendBit(0, data); + } + //---------------------------------------------------------------------------- + /** Soft SPI transfer byte. + * @param[in] txData Data byte to send. + * @return Data byte received. + */ + inline __attribute__((always_inline)) + uint8_t transfer(uint8_t txData) { + uint8_t rxData = 0; + transferBit(7, &rxData, txData); + transferBit(6, &rxData, txData); + transferBit(5, &rxData, txData); + transferBit(4, &rxData, txData); + transferBit(3, &rxData, txData); + transferBit(2, &rxData, txData); + transferBit(1, &rxData, txData); + transferBit(0, &rxData, txData); + return rxData; + } + + private: + //---------------------------------------------------------------------------- + inline __attribute__((always_inline)) + bool MODE_CPHA(uint8_t mode) {return (mode & 1) != 0;} + inline __attribute__((always_inline)) + bool MODE_CPOL(uint8_t mode) {return (mode & 2) != 0;} + inline __attribute__((always_inline)) + void receiveBit(uint8_t bit, uint8_t* data) { + if (MODE_CPHA(Mode)) { + fastDigitalWrite(SckPin, !MODE_CPOL(Mode)); + } + nop; + nop; + fastDigitalWrite(SckPin, + MODE_CPHA(Mode) ? MODE_CPOL(Mode) : !MODE_CPOL(Mode)); + if (fastDigitalRead(MisoPin)) *data |= 1 << bit; + if (!MODE_CPHA(Mode)) { + fastDigitalWrite(SckPin, MODE_CPOL(Mode)); + } + } + //---------------------------------------------------------------------------- + inline __attribute__((always_inline)) + void sendBit(uint8_t bit, uint8_t data) { + if (MODE_CPHA(Mode)) { + fastDigitalWrite(SckPin, !MODE_CPOL(Mode)); + } + fastDigitalWrite(MosiPin, data & (1 << bit)); + fastDigitalWrite(SckPin, + MODE_CPHA(Mode) ? MODE_CPOL(Mode) : !MODE_CPOL(Mode)); + nop; + nop; + if (!MODE_CPHA(Mode)) { + fastDigitalWrite(SckPin, MODE_CPOL(Mode)); + } + } + //---------------------------------------------------------------------------- + inline __attribute__((always_inline)) + void transferBit(uint8_t bit, uint8_t* rxData, uint8_t txData) { + if (MODE_CPHA(Mode)) { + fastDigitalWrite(SckPin, !MODE_CPOL(Mode)); + } + fastDigitalWrite(MosiPin, txData & (1 << bit)); + fastDigitalWrite(SckPin, + MODE_CPHA(Mode) ? MODE_CPOL(Mode) : !MODE_CPOL(Mode)); + if (fastDigitalRead(MisoPin)) *rxData |= 1 << bit; + if (!MODE_CPHA(Mode)) { + fastDigitalWrite(SckPin, MODE_CPOL(Mode)); + } + } + //---------------------------------------------------------------------------- +}; +#endif // SoftSPI_h +/** @} */ diff --git a/libraries/DigitalIO/attic/ADS7818.h b/libraries/DigitalIO/attic/ADS7818.h new file mode 100644 index 0000000..c416acc --- /dev/null +++ b/libraries/DigitalIO/attic/ADS7818.h @@ -0,0 +1,120 @@ +#ifndef ADS7818_h +#define ADS7871_h +//------------------------------------------------------------------------------ +/** nop to tune soft SPI timing */ +#define nop asm volatile ("nop\n\t") +//------------------------------------------------------------------------------ +/** doxygen can't handle __attribute__ very well */ +#define STATIC_ALWAYS_INLINE static inline __attribute__((always_inline)) +//------------------------------------------------------------------------------ +template +class ADS7818 { + public: + void begin() { + fastPinMode(ClkPin, 1); + fastDigitalWrite(ClkPin, 0); + fastPinMode(ConvPin, 1); + fastDigitalWrite(ConvPin, 1); + fastPinMode(DataPin, 0); + } + //---------------------------------------------------------------------------- + inline __attribute__((always_inline)) + uint16_t read() { + uint16_t v = 0; + fastDigitalWrite(ConvPin, 0); + fastDigitalWrite(ClkPin, 1); + fastDigitalWrite(ClkPin, 0); + fastDigitalWrite(ConvPin, 1); + fastDigitalWrite(ClkPin, 1); + fastDigitalWrite(ClkPin, 0); + + readBitFast16(v, 11); + readBitFast16(v, 10); + readBitFast16(v, 9); + readBitFast16(v, 8); + readBitFast16(v, 7); + readBitFast16(v, 6); + readBitFast16(v, 5); + readBitFast16(v, 4); + readBitFast16(v, 3); + readBitFast16(v, 2); + readBitFast16(v, 1); + readBitFast16(v, 0); + return v; + } + private: + //---------------------------------------------------------------------------- + inline __attribute__((always_inline)) + void readBitFast16(uint16_t &v, uint8_t b) { + fastDigitalWrite(ClkPin, 1); + if (fastDigitalRead(DataPin)) v |= (1 << b); + fastDigitalWrite(ClkPin, 0); + } +}; +#if 0 +/** initialize I/O ports */ +STATIC_ALWAYS_INLINE void adcBegin() { + fastPinMode(ADC_CLK_PIN, 1); + fastDigitalWrite(ADC_CLK_PIN, 0); + fastPinMode(ADC_CONV_PIN, 1); + fastDigitalWrite(ADC_CONV_PIN, 1); + fastPinMode(ADC_DATA_PIN, 0); +} +//------------------------------------------------------------------------------ +/** clock for don't care bits + *\param[in] delayBefore if true, delay before raising clock*/ +STATIC_ALWAYS_INLINE void fastDummy(bool first) { + if (!first) nop; + fastDigitalWrite(ADC_CLK_PIN, 1); + nop; + fastDigitalWrite(ADC_CLK_PIN, 0); +} +//------------------------------------------------------------------------------ +/** read next bit fast as possible + * \param[in] v word to receive bit + * \param[in] b bit number to be set. v |= (1 << b) if next bit is high. + */ +STATIC_ALWAYS_INLINE void readBitFast16(uint16_t &v, uint8_t b) { + fastDigitalWrite(ADC_CLK_PIN, 1); + if (fastDigitalRead(ADC_DATA_PIN)) v |= (1 << b); + fastDigitalWrite(ADC_CLK_PIN, 0); +} +//------------------------------------------------------------------------------ +/** Read AD7680 16-bit ADC in less than 8 microseconds + * cs is chip select pin + */ +STATIC_ALWAYS_INLINE uint16_t adcRead(bool centered = false) { + uint16_t v = 0; + fastDigitalWrite(ADC_CONV_PIN, 0); + fastDigitalWrite(ADC_CLK_PIN, 1); + fastDigitalWrite(ADC_CLK_PIN, 0); + fastDigitalWrite(ADC_CONV_PIN, 1); + fastDigitalWrite(ADC_CLK_PIN, 1); + fastDigitalWrite(ADC_CLK_PIN, 0); +// uint16_t v = 0; + +// fastDummy(1); +// fastDummy(0); +// fastDummy(0); + // fastDummy(0); + +// readBitFast16(v, 15); +// readBitFast16(v, 14); +// readBitFast16(v, 13); +// readBitFast16(v, 12); + readBitFast16(v, 11); + readBitFast16(v, 10); + readBitFast16(v, 9); + readBitFast16(v, 8); + readBitFast16(v, 7); + readBitFast16(v, 6); + readBitFast16(v, 5); + readBitFast16(v, 4); + readBitFast16(v, 3); + readBitFast16(v, 2); + readBitFast16(v, 1); + readBitFast16(v, 0); + return centered ? v ^ 0X8000 : v; +} +#endif // 0 +#endif // ADS7818_h \ No newline at end of file diff --git a/libraries/DigitalIO/attic/MCP320X.h b/libraries/DigitalIO/attic/MCP320X.h new file mode 100644 index 0000000..e4d1b81 --- /dev/null +++ b/libraries/DigitalIO/attic/MCP320X.h @@ -0,0 +1,259 @@ +#ifndef MCP320X_h +#define MCP320X_h +#include +//============================================================================== +template +class MCP3201 { + public: + //---------------------------------------------------------------------------- + /** Set pin modes and initial levels. */ + void begin() { + fastPinMode(ClkPin, 1); + fastDigitalWrite(ClkPin, 0); + fastPinMode(CsPin, 1); + fastDigitalWrite(CsPin, 1); + fastPinMode(DoutPin, 0); + } + //---------------------------------------------------------------------------- + /** Read MCP3201 12-bit ADC + * \return 16-bit value read. + */ + inline __attribute__((always_inline)) + uint16_t read() { + fastDigitalWrite(CsPin, 0); + // Start sample. + mcpAdcDummy(3); + // Extra sample time. + if (UsecDelay){ + delayMicroseconds(UsecDelay); + } + // End sample. + mcpAdcDummy(3); + // Null bit. + mcpAdcDummy(3); + uint16_t v = 0; + readBit(v, 11); + readBit(v, 10); + readBit(v, 9); + readBit(v, 8); + readBit(v, 7); + readBit(v, 6); + readBit(v, 5); + readBit(v, 4); + readBit(v, 3); + readBit(v, 2); + readBit(v, 1); + readBit(v, 0); + fastDigitalWrite(CsPin, 1); + return v; + } + private: + //---------------------------------------------------------------------------- + /** delay n nops + * \param[in] n nops to delay, must be a constant so compiler optimizes if(). + */ + inline __attribute__((always_inline)) + void delayCycles(uint8_t n) { + if (n & 1) asm volatile("nop\n\t"); + if (n & 2) asm volatile("nop\n\t" "nop\n\t"); + if (n & 4) asm volatile("nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t"); + } + //---------------------------------------------------------------------------- + /** clock for don't care bits + *\param[in] delayBefore if true, delay before raising clock*/ + inline __attribute__((always_inline)) + void mcpAdcDummy(uint8_t delayBefore) { + delayCycles(delayBefore); + fastDigitalWrite(ClkPin, 1); + delayCycles(3); + fastDigitalWrite(ClkPin, 0); + } + //---------------------------------------------------------------------------- + inline __attribute__((always_inline)) + void readBit(uint16_t &v, uint8_t b, uint8_t delayRead = 2) { + delayCycles(3); + fastDigitalWrite(ClkPin, 1); + delayCycles(delayRead); + if (fastDigitalRead(DoutPin)) v |= (1 << b); + fastDigitalWrite(ClkPin, 0); + } +}; +//============================================================================== +template +class MCP3202 { + public: + //---------------------------------------------------------------------------- + /** Set pin modes and initial levels. */ + void begin() { + fastPinMode(ClkPin, 1); + fastDigitalWrite(ClkPin, 0); + fastPinMode(CsPin, 1); + fastDigitalWrite(CsPin, 1); + fastPinMode(DoutPin, 0); + fastPinMode(DinPin, 1); + } + //---------------------------------------------------------------------------- + /** Read MCP3202 12-bit ADC + * \return 16-bit value read. + */ + inline __attribute__((always_inline)) + uint16_t read(uint8_t config) { + uint16_t v = 0; + fastDigitalWrite(CsPin, 0); + // Start bit. + writeBit(true); + // Mode bit. + writeBit(config & 2); + // Channel Selection and start sample. + writeBit(config & 1); + // Extra sample time. + if (UsecDelay){ + delayMicroseconds(UsecDelay); + } + // MSB first format and end sample. + writeBit(true); + // Null bit. + writeBit(true); + // Data bits. + readBit(v, 11); + readBit(v, 10); + readBit(v, 9); + readBit(v, 8); + readBit(v, 7); + readBit(v, 6); + readBit(v, 5); + readBit(v, 4); + readBit(v, 3); + readBit(v, 2); + readBit(v, 1); + readBit(v, 0); + fastDigitalWrite(CsPin, 1); + return v; + } + private: + //---------------------------------------------------------------------------- + /** delay n nops + * \param[in] n nops to delay, must be a constant so compiler optimizes if(). + */ + inline __attribute__((always_inline)) + void delayCycles(uint8_t n) { + if (n & 1) asm volatile("nop\n\t"); + if (n & 2) asm volatile("nop\n\t" "nop\n\t"); + if (n & 4) asm volatile("nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t"); + } + //---------------------------------------------------------------------------- + /** clock for don't care bits + *\param[in] delayBefore if true, delay before raising clock*/ + inline __attribute__((always_inline)) + void writeBit(bool value) { + fastDigitalWrite(DinPin, value); + fastDigitalWrite(ClkPin, 1); + delayCycles(2); + fastDigitalWrite(ClkPin, 0); + } + //---------------------------------------------------------------------------- + inline __attribute__((always_inline)) + void readBit(uint16_t &v, uint8_t b, uint8_t delayRead = 1) { + delayCycles(2); + fastDigitalWrite(ClkPin, 1); + delayCycles(delayRead); + if (fastDigitalRead(DoutPin)) v |= (1 << b); + fastDigitalWrite(ClkPin, 0); + } +}; +//============================================================================== +template +class MCP3204 { + public: + //---------------------------------------------------------------------------- + /** Set pin modes and initial levels. */ + void begin() { + fastPinMode(ClkPin, 1); + fastDigitalWrite(ClkPin, 0); + fastPinMode(CsPin, 1); + fastDigitalWrite(CsPin, 1); + fastPinMode(DoutPin, 0); + fastPinMode(DinPin, 1); + } + //---------------------------------------------------------------------------- + /** Read MCP3204 12-bit ADC + * \return 16-bit value read. + */ + inline __attribute__((always_inline)) + uint16_t read(uint8_t config) { + uint16_t v = 0; + fastDigitalWrite(CsPin, 0); + // Start bit. + writeBit(true); + // Mode bit. + writeBit(config & 8); + // D2 channel bit. + writeBit(config & 4); + // D1 channel bit. + writeBit(config & 2); + // D0 channel bit and start sample. + writeBit(config & 1); + // Extra sample time. + if (UsecDelay){ + delayMicroseconds(UsecDelay); + } + // End sample cycle. + writeBit(true); + // Null bit. + writeBit(true); + // Data bits. + readBit(v, 11); + readBit(v, 10); + readBit(v, 9); + readBit(v, 8); + readBit(v, 7); + readBit(v, 6); + readBit(v, 5); + readBit(v, 4); + readBit(v, 3); + readBit(v, 2); + readBit(v, 1); + readBit(v, 0); + fastDigitalWrite(CsPin, 1); + return v; + } + private: + //---------------------------------------------------------------------------- + /** delay n nops + * \param[in] n nops to delay, must be a constant so compiler optimizes if(). + */ + inline __attribute__((always_inline)) + void delayCycles(uint8_t n) { + if (n & 1) asm volatile("nop\n\t"); + if (n & 2) asm volatile("nop\n\t" "nop\n\t"); + if (n & 4) asm volatile("nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t"); + } + //---------------------------------------------------------------------------- + /** clock for don't care bits + *\param[in] delayBefore if true, delay before raising clock*/ + inline __attribute__((always_inline)) + void writeBit(bool value) { + fastDigitalWrite(DinPin, value); + fastDigitalWrite(ClkPin, 1); + delayCycles(2); + fastDigitalWrite(ClkPin, 0); + } + //---------------------------------------------------------------------------- + inline __attribute__((always_inline)) + void readBit(uint16_t &v, uint8_t b, uint8_t delayRead = 1) { + delayCycles(2); + fastDigitalWrite(ClkPin, 1); + delayCycles(delayRead); + if (fastDigitalRead(DoutPin)) v |= (1 << b); + fastDigitalWrite(ClkPin, 0); + } +}; +//============================================================================== +// MCP3204 and MCP3208 use the same code. +template +class MCP3208 : public MCP3204 { +}; +#endif // MCP320X_h \ No newline at end of file diff --git a/libraries/DigitalIO/attic/MCP355X.h b/libraries/DigitalIO/attic/MCP355X.h new file mode 100644 index 0000000..0cde640 --- /dev/null +++ b/libraries/DigitalIO/attic/MCP355X.h @@ -0,0 +1,126 @@ +#ifndef MCP355X_h +#define MCP355X_h +#include +// Overflow values. +const int32_t MCP355X_OVH = 2097152L; +const int32_t MCP355X_OVL = -2097153L; +const int32_t MCP355X_ERR = 0X80000000; +const uint8_t MCP355X_TO_MS = 100; +//============================================================================== +template +class MCP355X { + public: + //---------------------------------------------------------------------------- + /** Set pin modes and initial levels. */ + void begin(bool singleMode = true) { + m_singleMode = singleMode; + fastPinMode(SdoPin, 0); + fastPinMode(SckPin, 1); + fastDigitalWrite(SckPin, 1); + fastPinMode(CsPin, 1); + fastDigitalWrite(CsPin, 1); + if (!m_singleMode) { + // Wait for conversion to complete. + delay(100); + // Start continuous conversion mode. + fastDigitalWrite(CsPin, 0); + } + } + //---------------------------------------------------------------------------- + /** Read MCP355X 22-bit ADC + * \return 22-bit value. + */ + inline __attribute__((always_inline)) + int32_t read() { + uint8_t t = 0; + uint8_t v3 = 0; + if (m_singleMode) { + // Start conversion. + fastDigitalWrite(CsPin, 0); + // Delay at least 10 usec to avoid RDY glitch on exit from Shutdown. + delay(1); + // Toggle CsPin to indicate single conversion mode. + fastDigitalWrite(CsPin, 1); + // Wait for conversion to complete. + while (1) { + delay(1); + fastDigitalWrite(CsPin, 0); + // Delay while RDY settles. + delayCycles(4); + if (!fastDigitalRead(SdoPin)) break; + fastDigitalWrite(CsPin, 1); + if (t++ > MCP355X_TO_MS) return MCP355X_ERR; + } + } else { + while (1) { + if (!fastDigitalRead(SdoPin)) break; + delay(1); + if (t++ > MCP355X_TO_MS) return MCP355X_ERR; + } + } + uint8_t v2 = readByte(); + uint8_t v1 = readByte(); + uint8_t v0 = readByte(); + + // The 25th falling edge of SCK changes SDO/RDY from Data mode to RDY mode. + uint8_t dummy = 0; + readBit(dummy, 0); + + if (m_singleMode) { + fastDigitalWrite(CsPin, 1); + } + if ((v2 & 0XE0) == 0X20) { + // Negative in range so extend sign bit. + v2 |= 0XC0; + v3 = 0XFF; + } else if (v2 & 0X40) { + // Overflow high. Cause value to be >= MCP355X_OVH. + if (v2 & 0X20) v2 &= 0X3F; + } else if (v2 & 0X80) { + // Overflow low. Cause value to be <= MCP355X_OVH. + if ((v2 & 0X20) == 0) v2 |= 0X40; + v3 = 0XFF; + } + uint16_t v_high = (v3 << 8) | v2; + uint16_t v_low = (v1 << 8) | v0; + return ((uint32_t)v_high << 16) | v_low; + } + private: + //---------------------------------------------------------------------------- + /** delay n nops + * \param[in] n nops to delay, must be a constant so compiler optimizes if(). + */ + inline __attribute__((always_inline)) + void delayCycles(uint8_t n) { + if (n & 1) asm volatile("nop\n\t"); + if (n & 2) asm volatile("nop\n\t" "nop\n\t"); + if (n & 4) asm volatile("nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t"); + } + //---------------------------------------------------------------------------- + // Default delay yields about 2 MHz clock. + inline __attribute__((always_inline)) + void readBit(uint8_t &v, uint8_t b, uint8_t delayRead = 0) { + fastDigitalWrite(SckPin, 0); + delayCycles(2 + delayRead); + fastDigitalWrite(SckPin, 1); + if (fastDigitalRead(SdoPin)) v |= (1 << b); + delayCycles(delayRead); + } + //---------------------------------------------------------------------------- + inline __attribute__((always_inline)) + uint8_t readByte() { + uint8_t v = 0; + readBit(v, 7); + readBit(v, 6); + readBit(v, 5); + readBit(v, 4); + readBit(v, 3); + readBit(v, 2); + readBit(v, 1); + readBit(v, 0); + return v; + } + //---------------------------------------------------------------------------- + bool m_singleMode; +}; +#endif // MCP355X_h \ No newline at end of file diff --git a/libraries/DigitalIO/examples/DigitalPinBlink/DigitalPinBlink.ino b/libraries/DigitalIO/examples/DigitalPinBlink/DigitalPinBlink.ino new file mode 100644 index 0000000..4a698ba --- /dev/null +++ b/libraries/DigitalIO/examples/DigitalPinBlink/DigitalPinBlink.ino @@ -0,0 +1,12 @@ +#include +// Create object for pin 13 in output mode and demo toggle(). +DigitalPin<13> pin13(OUTPUT); + +void setup() {} + +void loop() { + // toggle is a two byte instruction that executes + // in two cycles or 125 ns on a 16 MHz CPU + pin13.toggle(); + delay(250); +} \ No newline at end of file diff --git a/libraries/DigitalIO/examples/DigitalPinConfigToggle/DigitalPinConfigToggle.ino b/libraries/DigitalIO/examples/DigitalPinConfigToggle/DigitalPinConfigToggle.ino new file mode 100644 index 0000000..06ad860 --- /dev/null +++ b/libraries/DigitalIO/examples/DigitalPinConfigToggle/DigitalPinConfigToggle.ino @@ -0,0 +1,18 @@ +// Demo of config() and fast toggle() function. +#include + +// Class with compile time pin number. +DigitalPin<13> pin13; + +void setup() { + // Set mode to OUTPUT and level LOW. + pin13.config(OUTPUT, LOW); +} +void loop() { + // toggle is a two byte instruction that executes + // in two cycles or 125 ns on a 16 MHz CPU + pin13.toggle(); + delay(100); + pin13.toggle(); + delay(400); +} \ No newline at end of file diff --git a/libraries/DigitalIO/examples/DigitalPinReadWrite/DigitalPinReadWrite.ino b/libraries/DigitalIO/examples/DigitalPinReadWrite/DigitalPinReadWrite.ino new file mode 100644 index 0000000..57be1fa --- /dev/null +++ b/libraries/DigitalIO/examples/DigitalPinReadWrite/DigitalPinReadWrite.ino @@ -0,0 +1,11 @@ +// Read pin 12 and write value to pin 13. +#include + +DigitalPin<12> pin12(INPUT); +DigitalPin<13> pin13(OUTPUT); + +void setup() {} + +void loop() { + pin13 = pin12; +} \ No newline at end of file diff --git a/libraries/DigitalIO/examples/DigitalPinShiftOut/DigitalPinShiftOut.ino b/libraries/DigitalIO/examples/DigitalPinShiftOut/DigitalPinShiftOut.ino new file mode 100644 index 0000000..98682bb --- /dev/null +++ b/libraries/DigitalIO/examples/DigitalPinShiftOut/DigitalPinShiftOut.ino @@ -0,0 +1,39 @@ +// Scope test for fast shiftOut function. +#include + +// Create clockPin in output mode with inital level LOW. +DigitalPin<12> clockPin(OUTPUT, LOW); + +// Create dataPin in output mode with inital level HIGH. +DigitalPin<13> dataPin(OUTPUT, HIGH); + +//------------------------------------------------------------------------------ +// Time to send one bit is ten cycles or 625 ns for 16 MHz CPU. +inline __attribute__((always_inline)) +void sendBit(uint8_t bit, uint8_t data) { + dataPin = data & (1 << bit); + clockPin = 1; + // may want a nop here - clock pulse is 125 ns wide + clockPin = 0; +} +//------------------------------------------------------------------------------ +// Time to send one byte is 5 usec. +void shiftOut(uint8_t bits) { + sendBit(7, bits); + sendBit(6, bits); + sendBit(5, bits); + sendBit(4, bits); + sendBit(3, bits); + sendBit(2, bits); + sendBit(1, bits); + sendBit(0, bits); +} +//------------------------------------------------------------------------------ +void setup() { + // Not used. +} +//------------------------------------------------------------------------------ +void loop() { + shiftOut(0X55); + delay(2); +} diff --git a/libraries/DigitalIO/examples/PinIOBegin/PinIOBegin.ino b/libraries/DigitalIO/examples/PinIOBegin/PinIOBegin.ino new file mode 100644 index 0000000..5f7e124 --- /dev/null +++ b/libraries/DigitalIO/examples/PinIOBegin/PinIOBegin.ino @@ -0,0 +1,24 @@ +// Use begin to assign pin numbers. +// Read pin 12 and write the value to pin 13. +#include + +// Declare the PinIO instances. +PinIO readPin; +PinIO writePin; +//------------------------------------------------------------------------------ +void setup() { + // Assign pin 12 to readPin. + readPin.begin(12); + + // input mode with pull-ups disabled + readPin.config(INPUT, LOW); + + // Assign pin 13 to writePin and set mode to output. + writePin.begin(13); + writePin.mode(OUTPUT); +} +//------------------------------------------------------------------------------ +void loop() { + // Copy the value read from readPin to writePin. + writePin.write(readPin.read()); +} \ No newline at end of file diff --git a/libraries/DigitalIO/examples/PinIOConfigToggle/PinIOConfigToggle.ino b/libraries/DigitalIO/examples/PinIOConfigToggle/PinIOConfigToggle.ino new file mode 100644 index 0000000..3bf3e00 --- /dev/null +++ b/libraries/DigitalIO/examples/PinIOConfigToggle/PinIOConfigToggle.ino @@ -0,0 +1,16 @@ +// Test the config() and toggle() functions. +#include + +// Set runtime pin number. +PinIO pin13(13); + +void setup() { + // set mode to OUTPUT and level LOW + pin13.config(OUTPUT, LOW); +} +void loop() { + pin13.toggle(); + delay(100); + pin13.toggle(); + delay(400); +} \ No newline at end of file diff --git a/libraries/DigitalIO/examples/PinIOReadWrite/PinIOReadWrite.ino b/libraries/DigitalIO/examples/PinIOReadWrite/PinIOReadWrite.ino new file mode 100644 index 0000000..8b225d5 --- /dev/null +++ b/libraries/DigitalIO/examples/PinIOReadWrite/PinIOReadWrite.ino @@ -0,0 +1,16 @@ +// Read pin 12 and write the value to pin 13. +#include + +PinIO readPin(12); +PinIO writePin(13); + +void setup() { + // Set input mode and disable pull-up. + readPin.config(INPUT, LOW); + + // set output mode + writePin.mode(OUTPUT); +} +void loop() { + writePin.write(readPin.read()); +} \ No newline at end of file diff --git a/libraries/DigitalIO/examples/ScanI2cBus/ScanI2cBus.ino b/libraries/DigitalIO/examples/ScanI2cBus/ScanI2cBus.ino new file mode 100644 index 0000000..6132a3f --- /dev/null +++ b/libraries/DigitalIO/examples/ScanI2cBus/ScanI2cBus.ino @@ -0,0 +1,78 @@ +/* Scan I2C bus for devices. + * + * For I2C write addresses: the scanner sends a start, + * the write address, looks for an ACK, then sends a stop. + * + * For I2C read addresses: the scanner sends a start, the + * read address, looks for an ACK. If there is an ACK, it + * reads a byte and NACKs it. Finally it sends a stop. + * + * When the I2C chip responds to the read address, it + * outputs data and will miss a stop condition sent + * immediately after the read address (bus contention). + * + * If the I2C chip misses the stop condition, the + * address scanner will see ghost addresses until the + * read ends randomly. By reading a byte after any read + * address that ACKs, there is a chance to NACK the read + * and properly end the I2C transaction. + */ +#include + +// Set pin numbers for your configuration. +const uint8_t SDA_PIN = A4; +const uint8_t SCL_PIN = A5; + +SoftI2cMaster i2c(SCL_PIN, SDA_PIN); +//FastI2cMaster i2c; +//------------------------------------------------------------------------------ +void setup() { + + Serial.begin(9600); + while (!Serial); + + if (!digitalRead(SDA_PIN) && !digitalRead(SCL_PIN)) { + Serial.println("External pull-up resistors appear to be missing."); + Serial.println("Many false responses may be detected."); + Serial.println("Type any character to continue."); + + while (!Serial.available()); + Serial.println(); + + } + uint8_t add = 0; + bool found = false; + do { + bool wr = i2c.transfer(add | I2C_WRITE, 0, 0); + bool rd = i2c.transfer(add | I2C_READ, 0, 0, I2C_CONTINUE); + if (rd) { + uint8_t dummy; + // Must read byte, send NACK, and issue STOP. + i2c.transferContinue(&dummy, 1); + } + if (rd || wr) { + found = true; + Serial.print("Device at address: 0X"); + Serial.print(add, HEX); + Serial.print(" responds to "); + if (rd) Serial.print("Read"); + if (rd && wr) Serial.print(" and "); + if (wr) Serial.print("Write"); + Serial.println('.'); + } + add += 2; + } + while (add); + + if (!found) { + Serial.println("No devices found."); + } + Serial.println("Done"); +} +//------------------------------------------------------------------------------ +void loop() { + // Not used. +} + + + diff --git a/libraries/DigitalIO/examples/SoftDS1307Utility/SoftDS1307Utility.ino b/libraries/DigitalIO/examples/SoftDS1307Utility/SoftDS1307Utility.ino new file mode 100644 index 0000000..3747b96 --- /dev/null +++ b/libraries/DigitalIO/examples/SoftDS1307Utility/SoftDS1307Utility.ino @@ -0,0 +1,324 @@ +// Utility sketch to explore DS1307 and demonstrate software I2C Master. +// + +#include + +// Set pin numbers for your configuration. +const uint8_t SDA_PIN = A4; +const uint8_t SCL_PIN = A5; + +//SoftI2cMaster rtc(SCL_PIN, SDA_PIN); +FastI2cMaster rtc; + +// i2c 8-bit address for DS1307. low bit is read/write +#define DS1307ADDR 0XD0 +//------------------------------------------------------------------------------ +/* + * Read 'count' bytes from the DS1307 starting at 'address'. + */ +uint8_t readDS1307(uint8_t address, uint8_t *buf, uint8_t count) { + + // Send address of data. + if (!rtc.transfer(DS1307ADDR | I2C_WRITE, &address, 1)) return false; + + // Read data. + return rtc.transfer(DS1307ADDR | I2C_READ, buf, count); +} +//------------------------------------------------------------------------------ +/* + * write 'count' bytes to DS1307 starting at 'address'. + */ +uint8_t writeDS1307(uint8_t address, uint8_t *buf, uint8_t count) { + + // Write address and continue transfer for write of data. + if (!rtc.transfer(DS1307ADDR | I2C_WRITE, &address, 1, I2C_CONTINUE)) { + return false; + } + // Write data. + return rtc.transferContinue(buf, count); +} +//------------------------------------------------------------------------------ +void setup(void) { + Serial.begin(9600); +} +//------------------------------------------------------------------------------ +/** Store and print a string in flash memory.*/ +#define PgmPrint(x) Serial.print(F(x)) +/** Store and print a string in flash memory followed by a CR/LF.*/ +#define PgmPrintln(x) Serial.println(F(x)) +//------------------------------------------------------------------------------- +// Day of week U.S. convention. +char *Ddd[] = {"Bad", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; +//------------------------------------------------------------------------------ +void hexPrint(uint8_t v) { + Serial.print(v >> 4, HEX); + Serial.print(v & 0XF, HEX); +} +//------------------------------------------------------------------------------ +void hexPrintln(uint8_t v) { + hexPrint(v); + Serial.println(); +} +//------------------------------------------------------------------------------ +// read hex input +uint8_t hexRead(uint16_t* v) { + bool valid = false; + uint16_t n = 0; + while (!Serial.available()); + while (Serial.available()) { + uint8_t c = Serial.read(); + // Exit if end-of-line. + if (c == '\n' || c == '\r') { + delay(10); + // If CR/LF. + Serial.read(); + break; + } + n <<= 4; + if ('a' <= c && c <= 'f') { + n += c - ('a' - 10); + } + else if ('A' <= c && c <= 'F') { + n += c - ('A' - 10); + } + else if ('0' <= c && c <= '9') { + n += c - '0'; + } + else { + valid = false; + break; + } + delay(10); + valid = true; + } + if (!valid) { + PgmPrintln("Invalid entry"); + return false; + } + *v = n; + return true; +} +//------------------------------------------------------------------------------ +uint8_t bcdRead(uint8_t min, uint8_t max, uint8_t* n) { + uint16_t v; + if (!hexRead(&v)) return false; + uint8_t d = 10 * (v >> 4) + (v & 0XF); + if ((v >> 4) > 9 || (v & 0XF) > 9 || d < min || d > max) { + PgmPrintln("Invalid"); + return false; + } + *n = v; + return true; +} +//------------------------------------------------------------------------------ +void displayTime(void) { + uint8_t r[8]; + if (!readDS1307(0, r, 8)) { + PgmPrintln("Read Failed for display time"); + return; + } + PgmPrint("The current time is 20"); + // year + hexPrint(r[6]); + Serial.write('-'); + + // month + hexPrint(r[5]); + Serial.write('-'); + + // day + hexPrint(r[4]); + Serial.write(' '); + + Serial.print(Ddd[r[3] < 8 ? r[3] : 0]); + Serial.write(' '); + + // hour + hexPrint(r[2]); + Serial.write(':'); + + // minute + hexPrint(r[1]); + Serial.write(':'); + + // second + hexPrintln(r[0]); + + // Control register. + PgmPrint("Control Register: "); + hexPrintln(r[7]); +} +//------------------------------------------------------------------------------ +// dump registers and 56 bytes of RAM +void dumpAll(void) { + uint8_t buf[8]; + for (uint8_t a = 0; a < 64; a += 8) { + hexPrint(a); + Serial.write(' '); + if (!readDS1307(a, buf, 8)) { + PgmPrint("read failed for dumpAll"); + return; + } + for (uint8_t i = 0; i < 8; i++) { + Serial.write(' '); + hexPrint(buf[i]); + } + Serial.println(); + } +} +//------------------------------------------------------------------------------ +void fillNvRam(void) { + uint8_t buf[8]; + PgmPrint("Enter HEX value for all NV RAM locations (00-FF): "); + uint16_t v; + if (!hexRead(&v)) return; + hexPrint(v); + for (uint8_t a = 8; a < 64; a ++) { + if (!writeDS1307(a, (uint8_t *)&v, 1)) { + PgmPrintln("write failed for fillNvRam"); + } + } +} +//------------------------------------------------------------------------------ +// set control register +/* +The DS1307 control register is used to control the operation of the SQW/OUT pin. ++-----------------------------------------------+ +|BIT 7|BIT 6|BIT 5|BIT 4|BIT 3|BIT 2|BIT 1|BIT 0| ++-----------------------------------------------+ +|OUT | 0 | 0 |SQWE | 0 | 0 | RS1 | RS0 | ++-----------------------------------------------+ + +OUT (Output control): This bit controls the output level of the SQW/OUT pin +when the square wave output is disabled. If SQWE = 0, the logic level on the +SQW/OUT pin is 1 if OUT = 1 and is 0 if OUT = 0. + +SQWE (Square Wave Enable): This bit, when set to a logic 1, will enable the +oscillator output. The frequency of the square wave output depends upon the +value of the RS0 and RS1 bits. With the square wave output set to 1Hz, the +clock registers update on the falling edge of the square wave. + +Square wave Output Frequency for SQWE = 1. +RS1 RS0 FREQUENCY + 0 0 1Hz + 0 1 4.096kHz + 1 0 8.192kHz + 1 1 32.768kHz +*/ +void setControl(void) { + PgmPrintln("SQW/OUT pin: "); + PgmPrintln("(00) Low"); + PgmPrintln("(10) 1Hz"); + PgmPrintln("(11) 4.096kHz"); + PgmPrintln("(12) 8.192kHz"); + PgmPrintln("(13) 32.768kHz"); + PgmPrintln("(80) High"); + PgmPrint("Enter control: "); + uint16_t r; + if (!hexRead(&r)) return; + hexPrintln(r); + if (!writeDS1307(7, (uint8_t *)&r, 1)) { + PgmPrint("Write Failed for setControl"); + } +} +//------------------------------------------------------------------------------ +void setDate(void) { + uint8_t r[4]; + PgmPrint("Enter year (00-99): "); + if (!bcdRead(0, 99, &r[3])) return; + hexPrintln(r[3]); + PgmPrint("Enter month (01-12): "); + if (!bcdRead(1, 12, &r[2])) return; + hexPrintln(r[2]); + PgmPrint("Enter day (01-31): "); + if (!bcdRead(1, 31, &r[1])) return; + hexPrintln(r[1]); + PgmPrint("Enter day of week (01-07, Sun-Sat): "); + if (!bcdRead(1, 7, &r[0])) return; + hexPrintln(r[0]); + + if (!writeDS1307(3, r, 4)) { + PgmPrintln("Write failed for setDate"); + } +} +//------------------------------------------------------------------------------ +void setNvRam() { + uint8_t u; + uint16_t a, v; + while (true) { + PgmPrint("Enter zero to quit or Hex address (8-3F):"); + if (!hexRead(&a) || a == 0) return; + if (a < 8 || a > 0X3F) { + PgmPrintln("Invalid address"); + return; + } + hexPrintln(a); + if (!readDS1307(a, &u, 1)) { + PgmPrintln("Read failed"); + return; + } + PgmPrint("Current value: "); + hexPrintln(u); + PgmPrint("Enter new HEX value (00-FF): "); + if (!hexRead(&v)) return; + hexPrintln(v); + if (!writeDS1307(a, (uint8_t *)&v, 1)) { + PgmPrint("Write Failed"); + return; + } + } +} +//------------------------------------------------------------------------------ +void setTime(void) { + uint8_t r[3]; + PgmPrint("Enter hours (00-23): "); + if (!bcdRead(0, 23, &r[2])) return; + hexPrintln(r[2]); + PgmPrint("Enter minutes (00-59): "); + if (!bcdRead(0, 59, &r[1])) return; + hexPrintln(r[1]); + PgmPrint("Enter seconds (00-59): "); + if (!bcdRead(0, 59, &r[0])) return; + hexPrintln(r[0]); + + if (!writeDS1307(0, r, 3)) { + PgmPrintln("write failed in setTime"); + return; + } +} +//------------------------------------------------------------------------------ +void loop(void) { + Serial.println(); + displayTime(); + while (Serial.read() >= 0) {} + PgmPrintln("\nOptions are:"); + PgmPrintln("(0) Display date and time"); + PgmPrintln("(1) Set time"); + PgmPrintln("(2) Set date"); + PgmPrintln("(3) Set Control"); + PgmPrintln("(4) Dump all"); + PgmPrintln("(5) Fill NV RAM"); + PgmPrintln("(6) Set NV RAM value"); + PgmPrint("Enter option: "); + + uint16_t n; + if (!hexRead(&n)) return; + Serial.println(n, DEC); + if (n == 0) return; + Serial.println(); + if (n == 1) { + setTime(); + } else if (n == 2) { + setDate(); + } else if (n == 3) { + setControl(); + } else if (n == 4) { + dumpAll(); + } else if (n == 5) { + fillNvRam(); + } else if (n == 6) { + setNvRam(); + } else { + PgmPrintln("Invalid option"); + } +} \ No newline at end of file diff --git a/libraries/DigitalIO/examples/testArduino/testArduino.ino b/libraries/DigitalIO/examples/testArduino/testArduino.ino new file mode 100644 index 0000000..13afe04 --- /dev/null +++ b/libraries/DigitalIO/examples/testArduino/testArduino.ino @@ -0,0 +1,14 @@ +// Scope test for write timing with Arduino digitaWrite(). +const uint8_t PIN13 = 13; + +void setup() { + // Set mode to OUTPUT. + pinMode(PIN13, OUTPUT); +} +void loop() { + digitalWrite(PIN13, HIGH); + digitalWrite(PIN13, LOW); + digitalWrite(PIN13, HIGH); + digitalWrite(PIN13, LOW); + delay(1); +} \ No newline at end of file diff --git a/libraries/DigitalIO/examples/testDigitalPin/testDigitalPin.ino b/libraries/DigitalIO/examples/testDigitalPin/testDigitalPin.ino new file mode 100644 index 0000000..1ac0c02 --- /dev/null +++ b/libraries/DigitalIO/examples/testDigitalPin/testDigitalPin.ino @@ -0,0 +1,19 @@ +// Scope test for write timing of DigitalPin functions. +#include + +// Class with compile time pin number. +DigitalPin<13> pin13; + +void setup() { + // set mode to OUTPUT + pin13.mode(OUTPUT); +} +void loop() { + pin13.high(); + pin13.low(); + pin13.write(1); + pin13.write(0); + pin13.toggle(); + pin13.toggle(); + delay(1); +} \ No newline at end of file diff --git a/libraries/DigitalIO/examples/testFastDigital/testFastDigital.ino b/libraries/DigitalIO/examples/testFastDigital/testFastDigital.ino new file mode 100644 index 0000000..03f38d5 --- /dev/null +++ b/libraries/DigitalIO/examples/testFastDigital/testFastDigital.ino @@ -0,0 +1,13 @@ +// Test fastDigital function timing with a scope. +#include +const uint8_t PIN = 13; +void setup() { + fastPinMode(PIN, OUTPUT); +} +void loop() { + fastDigitalWrite(PIN, HIGH); + fastDigitalWrite(PIN, LOW); + fastDigitalToggle(PIN); + fastDigitalToggle(PIN); + delay(1); +} \ No newline at end of file diff --git a/libraries/DigitalIO/examples/testPinIO/testPinIO.ino b/libraries/DigitalIO/examples/testPinIO/testPinIO.ino new file mode 100644 index 0000000..4f72823 --- /dev/null +++ b/libraries/DigitalIO/examples/testPinIO/testPinIO.ino @@ -0,0 +1,19 @@ +// Scope test for PinIO class write timing. +#include + +// Class with runtime pin numbers. +PinIO pin(13); + +void setup() { + // Set mode to OUTPUT. + pin.mode(OUTPUT); +} +void loop() { + pin.high(); + pin.low(); + pin.write(1); + pin.write(0); + pin.toggle(); + pin.toggle(); + delay(1); +} \ No newline at end of file diff --git a/libraries/DigitalIO/examples/testSoftSPI/testSoftSPI.ino b/libraries/DigitalIO/examples/testSoftSPI/testSoftSPI.ino new file mode 100644 index 0000000..7b9544f --- /dev/null +++ b/libraries/DigitalIO/examples/testSoftSPI/testSoftSPI.ino @@ -0,0 +1,37 @@ +// Scope test for development - assumes 328 processor. +#include + +const uint8_t SOFT_SPI_MISO_PIN = 7; +const uint8_t SOFT_SPI_MOSI_PIN = 8; +const uint8_t SOFT_SPI_SCK_PIN = 9; +const uint8_t SPI_MODE = 0; + +SoftSPI spi; + +int test; +void setup() { + Serial.begin(9600); + spi.begin(); + while(1) { + Serial.println("Enter:"); + Serial.println("R - Receive"); + Serial.println("S - Send"); + Serial.println("T - Transfer"); + while ((test = Serial.read()) <= 0) {} + test = toupper(test); + if (strchr("RST", test)) break; + Serial.println("Invalid entry"); + }; + Serial.print("Starting test "); + Serial.println((char)test); +} +void loop() { + if (test == 'S') spi.send(0X55); + if (test == 'R') { + Serial.println(spi.receive(), HEX); + } + if (test == 'T') { + Serial.println(spi.transfer(0XAA), HEX); + } + delay(10); +} \ No newline at end of file diff --git a/libraries/MySensors/examples/EthernetGateway/EthernetGateway.ino b/libraries/MySensors/examples/EthernetGateway/EthernetGateway.ino index df3b935..a6537e7 100644 --- a/libraries/MySensors/examples/EthernetGateway/EthernetGateway.ino +++ b/libraries/MySensors/examples/EthernetGateway/EthernetGateway.ino @@ -14,11 +14,15 @@ * * The GW code is designed for Arduino 328p / 16MHz. ATmega168 does not have enough memory to run this program. * - * COMPILING - * You must make sure to disable DEBUG in Sensor.h before compiling this sketch. Othervise the sketch won't fit in program space when downloading. - * For UIPEthernet(ENC28J60) usage: Note that I had to disable UDP and DHCP support in uipethernet-conf.h to reduce space. (which meas you ave to choose a static IP) - * For WizNET usage: Do *not* install the provided UIPEthernet-library. Remove UIPEthernet-include below and uncomment the Ethernet.h. + * COMPILING ENC28J60 + * > Use Arduino IDE 1.5.7 (or later) + * > Disable DEBUG in Sensor.h before compiling this sketch. Othervise the sketch will probably not fit in program space when downloading. + * > Remove Ethernet.h include below and inlcude UIPEthernet.h + * COMPILING WizNET (W5100) + * > Remove UIPEthernet include below and include Ethernet.h. * + * Note that I had to disable UDP and DHCP support in uipethernet-conf.h to reduce space. (which meas you ave to choose a static IP for that module) + * VERA CONFIGURATION: * Enter "ip-number:port" in the ip-field of the Arduino GW device. This will temporarily override any serial configuration for the Vera plugin. * E.g. If you want to use the defualt values in this sketch enter: 192.168.178.66:5003 @@ -50,10 +54,10 @@ #include // Use this if you have attached a Ethernet ENC28J60 shields -//#include +#include // Use this fo WizNET module and Arduino Ethernet Shield -#include +//#include #define INCLUSION_MODE_TIME 1 // Number of minutes inclusion mode is enabled @@ -66,7 +70,7 @@ #define RADIO_TX_LED_PIN 9 // the PCB, on board LED #define IP_PORT 5003 // The port you want to open -IPAddress myIp (192, 168, 178, 66); // Configure your static ip-address here +IPAddress myIp (192, 168, 178, 66); // Configure your static ip-address here COMPILE ERROR HERE? Use Arduino IDE 1.5.7 or later! // The MAC address can be anything you want but should be unique on your network. // Newer boards have a MAC address printed on the underside of the PCB, which you can (optionally) use. diff --git a/libraries/MySensors/examples/RelayWithButtonActuator/RelayWithButtonActuator.ino b/libraries/MySensors/examples/RelayWithButtonActuator/RelayWithButtonActuator.ino index 77b5f8d..7cc2a77 100644 --- a/libraries/MySensors/examples/RelayWithButtonActuator/RelayWithButtonActuator.ino +++ b/libraries/MySensors/examples/RelayWithButtonActuator/RelayWithButtonActuator.ino @@ -70,7 +70,7 @@ void incomingMessage(const MyMessage &message) { Serial.println("This is an ack from gateway"); } - if (message.type == V_LIGHT && strlen(msg.getString()) != 0) { + if (message.type == V_LIGHT) { // Change relay state state = message.getBool(); digitalWrite(RELAY_PIN, state?RELAY_ON:RELAY_OFF); diff --git a/libraries/MySensors/examples/TouchDisplaySceneControllerSensor/ArialNumFontPlus.c b/libraries/MySensors/examples/TouchDisplaySceneControllerSensor/ArialNumFontPlus.c new file mode 100644 index 0000000..bbe7fd1 --- /dev/null +++ b/libraries/MySensors/examples/TouchDisplaySceneControllerSensor/ArialNumFontPlus.c @@ -0,0 +1,22 @@ +// SevenSegNumFontPlus.c +// Font type : Special (SubSet) +// Font size : 32x50 pixels +// Memory usage : 2204 bytes + +#include + +const uint8_t ArialNumFontPlus[2204] PROGMEM={ +0x20,0x32,0x30,0x0B, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0x00,0x00,0x1F,0xF8,0x00,0x00,0x7F,0xFE,0x00,0x00,0xFF,0xFF,0x00,0x01,0xFF,0xFF,0x00,0x03,0xF8,0x1F,0x80,0x03,0xF0,0x0F,0xC0,0x07,0xE0,0x07,0xC0,0x07,0xC0,0x03,0xE0,0x0F,0xC0,0x03,0xE0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x00,0x00,0xF8,0x1F,0x00,0x00,0xF8,0x1F,0x00,0x00,0xF8,0x1F,0x00,0x00,0xF8,0x3F,0x00,0x00,0xFC,0x3E,0x00,0x00,0x7C,0x3E,0x00,0x00,0x7C,0x3E,0x00,0x00,0x7C,0x3E,0x00,0x00,0x7C,0x3E,0x00,0x00,0x7C,0x3E,0x00,0x00,0x7C,0x3E,0x00,0x00,0x7C,0x3E,0x00,0x00,0x7C,0x3E,0x00,0x00,0x7C,0x3E,0x00,0x00,0x7C,0x3F,0x00,0x00,0x7C,0x1F,0x00,0x00,0xF8,0x1F,0x00,0x00,0xF8,0x1F,0x00,0x00,0xF8,0x1F,0x00,0x00,0xF8,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x03,0xE0,0x07,0xC0,0x03,0xF0,0x0F,0xC0,0x01,0xF8,0x1F,0x80,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFE,0x00,0x00,0x7F,0xFC,0x00,0x00,0x1F,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 0 neu +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x07,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x1F,0xF0,0x00,0x00,0x3F,0xF0,0x00,0x00,0x7F,0xF0,0x00,0x01,0xFF,0xF0,0x00,0x03,0xFD,0xF0,0x00,0x0F,0xF1,0xF0,0x00,0x0F,0xE1,0xF0,0x00,0x0F,0x81,0xF0,0x00,0x0F,0x01,0xF0,0x00,0x0C,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //1 neu +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0x00,0x00,0x7F,0xFE,0x00,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0xC0,0x03,0xFF,0xFF,0xE0,0x07,0xE0,0x0F,0xF0,0x0F,0xC0,0x03,0xF0,0x0F,0x80,0x01,0xF0,0x1F,0x00,0x00,0xF8,0x1F,0x00,0x00,0xF8,0x3E,0x00,0x00,0xF8,0x3E,0x00,0x00,0x7C,0x3E,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x03,0xF0,0x00,0x00,0x07,0xF0,0x00,0x00,0x0F,0xE0,0x00,0x00,0x1F,0xC0,0x00,0x00,0x3F,0x80,0x00,0x00,0x7F,0x00,0x00,0x00,0xFE,0x00,0x00,0x01,0xFC,0x00,0x00,0x03,0xF8,0x00,0x00,0x07,0xF0,0x00,0x00,0x0F,0xE0,0x00,0x00,0x1F,0xC0,0x00,0x00,0x3F,0x80,0x00,0x00,0x7F,0x00,0x00,0x00,0xFE,0x00,0x00,0x01,0xFC,0x00,0x00,0x03,0xF8,0x00,0x00,0x07,0xF0,0x00,0x00,0x07,0xE0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x0F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x3F,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xFC,0x7F,0xFF,0xFF,0xFC,0x7F,0xFF,0xFF,0xFC,0x7F,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 2 neu +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0x00,0x00,0x3F,0xFC,0x00,0x00,0xFF,0xFE,0x00,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x03,0xE0,0x1F,0xC0,0x07,0xC0,0x0F,0xC0,0x07,0x80,0x07,0xE0,0x0F,0x80,0x03,0xE0,0x0F,0x00,0x03,0xE0,0x0F,0x00,0x03,0xF0,0x0F,0x00,0x01,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x1F,0xC0,0x00,0x00,0x3F,0x80,0x00,0x07,0xFF,0x00,0x00,0x07,0xFF,0x00,0x00,0x07,0xFF,0x00,0x00,0x07,0xFF,0x80,0x00,0x00,0x1F,0xC0,0x00,0x00,0x0F,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x01,0xF0,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0xFC,0x1F,0x00,0x00,0xFC,0x1F,0x00,0x00,0xFC,0x1F,0x00,0x00,0xF8,0x1F,0x00,0x01,0xF8,0x0F,0x80,0x01,0xF8,0x0F,0x80,0x03,0xF0,0x0F,0xC0,0x07,0xF0,0x07,0xE0,0x0F,0xE0,0x03,0xFC,0x3F,0xC0,0x01,0xFF,0xFF,0x80,0x00,0xFF,0xFF,0x00,0x00,0x7F,0xFC,0x00,0x00,0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 3 neu +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0xFF,0x00,0x00,0x01,0xFF,0x00,0x00,0x01,0xFF,0x00,0x00,0x03,0xFF,0x00,0x00,0x07,0xDF,0x00,0x00,0x07,0xDF,0x00,0x00,0x0F,0x9F,0x00,0x00,0x0F,0x9F,0x00,0x00,0x1F,0x1F,0x00,0x00,0x3E,0x1F,0x00,0x00,0x7E,0x1F,0x00,0x00,0x7C,0x1F,0x00,0x00,0xF8,0x1F,0x00,0x00,0xF8,0x1F,0x00,0x01,0xF0,0x1F,0x00,0x03,0xE0,0x1F,0x00,0x03,0xE0,0x1F,0x00,0x07,0xC0,0x1F,0x00,0x07,0xC0,0x1F,0x00,0x0F,0x80,0x1F,0x00,0x1F,0x80,0x1F,0x00,0x1F,0x00,0x1F,0x00,0x3E,0x00,0x1F,0x00,0x3F,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xFC,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00, //4 neu +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xF0,0x01,0xFF,0xFF,0xF0,0x01,0xFF,0xFF,0xF0,0x01,0xFF,0xFF,0xF0,0x01,0xFF,0xFF,0xF0,0x03,0xE0,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0xF0,0x00,0x0F,0x8F,0xFE,0x00,0x0F,0xBF,0xFF,0x80,0x0F,0xFF,0xFF,0xC0,0x0F,0xFF,0xFF,0xE0,0x1F,0xFF,0x07,0xF0,0x1F,0xE0,0x03,0xF0,0x1F,0xC0,0x01,0xF8,0x1F,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x3F,0x00,0x00,0xF8,0x3F,0x00,0x00,0xF8,0x3F,0x00,0x00,0xF8,0x1F,0x00,0x00,0xF0,0x1F,0x00,0x01,0xF0,0x1F,0x80,0x03,0xE0,0x0F,0xC0,0x07,0xE0,0x07,0xE0,0x1F,0xC0,0x03,0xFF,0xFF,0x80,0x03,0xFF,0xFF,0x00,0x01,0xFF,0xFE,0x00,0x00,0x7F,0xF8,0x00,0x00,0x0F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 5 neu +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0x00,0x00,0x3F,0xFE,0x00,0x00,0xFF,0xFF,0x00,0x01,0xFF,0xFF,0x80,0x03,0xFF,0xFF,0xC0,0x07,0xE0,0x07,0xE0,0x07,0xC0,0x03,0xF0,0x0F,0xC0,0x01,0xF0,0x0F,0x80,0x00,0xF8,0x1F,0x80,0x00,0xF8,0x1F,0x80,0x00,0xF8,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x03,0xF0,0x00,0x3F,0x1F,0xFC,0x00,0x3F,0x7F,0xFE,0x00,0x3F,0xFF,0xFF,0x80,0x3F,0xFF,0xFF,0xC0,0x3F,0xF8,0x0F,0xE0,0x3F,0xE0,0x03,0xF0,0x3F,0xE0,0x03,0xF0,0x3F,0xC0,0x01,0xF8,0x3F,0x80,0x00,0xF8,0x3F,0x80,0x00,0xF8,0x3F,0x00,0x00,0x7C,0x3F,0x00,0x00,0x7C,0x3F,0x00,0x00,0x7C,0x3F,0x00,0x00,0x7C,0x3F,0x00,0x00,0x7C,0x3F,0x00,0x00,0x7C,0x1F,0x00,0x00,0x7C,0x1F,0x80,0x00,0x78,0x1F,0x80,0x00,0xF8,0x1F,0x80,0x00,0xF8,0x0F,0x80,0x00,0xF8,0x0F,0xC0,0x01,0xF0,0x07,0xF0,0x03,0xF0,0x03,0xF8,0x0F,0xE0,0x01,0xFF,0xFF,0xC0,0x00,0xFF,0xFF,0x80,0x00,0x7F,0xFF,0x00,0x00,0x1F,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 6 neu +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xFC,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0xFC,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x07,0xC0,0x00,0x00,0x0F,0x80,0x00,0x00,0x1F,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 7 neu +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0x00,0x00,0x7F,0xFE,0x00,0x00,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x80,0x03,0xF8,0x1F,0xC0,0x07,0xE0,0x07,0xE0,0x07,0xC0,0x03,0xE0,0x0F,0xC0,0x03,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x03,0xE0,0x07,0xC0,0x01,0xF0,0x07,0x80,0x00,0xFC,0x3F,0x00,0x00,0x7F,0xFF,0x00,0x00,0x3F,0xFC,0x00,0x00,0x7F,0xFE,0x00,0x00,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0xC0,0x07,0xF0,0x0F,0xE0,0x0F,0xC0,0x03,0xF0,0x0F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF8,0x1F,0x00,0x00,0xF8,0x1F,0x00,0x00,0xF8,0x3E,0x00,0x00,0x7C,0x3E,0x00,0x00,0x7C,0x3E,0x00,0x00,0x7C,0x3E,0x00,0x00,0x7C,0x3E,0x00,0x00,0x7C,0x3E,0x00,0x00,0x7C,0x1F,0x00,0x00,0xF8,0x1F,0x00,0x00,0xF8,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x03,0xF0,0x07,0xC0,0x07,0xE0,0x03,0xF0,0x0F,0xC0,0x01,0xFF,0xFF,0x80,0x00,0xFF,0xFF,0x00,0x00,0x3F,0xFC,0x00,0x00,0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 8 neu +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0x00,0x00,0x3F,0xFC,0x00,0x00,0xFF,0xFF,0x00,0x01,0xFF,0xFF,0x80,0x03,0xFF,0xFF,0xC0,0x03,0xF8,0x1F,0xE0,0x07,0xE0,0x07,0xE0,0x07,0xE0,0x07,0xF0,0x0F,0xC0,0x03,0xF0,0x0F,0xC0,0x03,0xF8,0x1F,0x80,0x01,0xF8,0x1F,0x80,0x01,0xF8,0x1F,0x00,0x00,0xFC,0x1F,0x00,0x00,0xFC,0x1F,0x00,0x00,0xFC,0x1F,0x00,0x00,0xFC,0x1F,0x00,0x00,0xFC,0x1F,0x00,0x00,0xFC,0x1F,0x80,0x01,0xFC,0x1F,0x80,0x01,0xFC,0x0F,0xC0,0x03,0xFC,0x0F,0xC0,0x03,0xFC,0x07,0xE0,0x07,0xFC,0x07,0xE0,0x07,0xFC,0x03,0xF8,0x1F,0xFC,0x01,0xFF,0xFF,0xFC,0x00,0xFF,0xFF,0xFC,0x00,0xFF,0xFE,0xFC,0x00,0x7F,0xF8,0xFC,0x00,0x1F,0xE0,0xFC,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0xFC,0x00,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF0,0x1F,0x00,0x03,0xF0,0x1F,0x80,0x07,0xE0,0x0F,0xC0,0x0F,0xE0,0x0F,0xE0,0x3F,0xC0,0x07,0xFF,0xFF,0x80,0x03,0xFF,0xFF,0x00,0x01,0xFF,0xFE,0x00,0x00,0xFF,0xF8,0x00,0x00,0x3F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 9 neu +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x01,0xF0,0x00,0x00,0x03,0xF8,0x00,0x00,0x03,0xF8,0x00,0x00,0x03,0xF8,0x00,0x00,0x01,0xF0,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x01,0xF0,0x00,0x00,0x03,0xF8,0x00,0x00,0x03,0xF8,0x00,0x00,0x03,0xF8,0x00,0x00,0x01,0xF0,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // : +}; diff --git a/libraries/MySensors/examples/TouchDisplaySceneControllerSensor/TouchDisplaySceneControllerSensor.ino b/libraries/MySensors/examples/TouchDisplaySceneControllerSensor/TouchDisplaySceneControllerSensor.ino new file mode 100644 index 0000000..37ebf29 --- /dev/null +++ b/libraries/MySensors/examples/TouchDisplaySceneControllerSensor/TouchDisplaySceneControllerSensor.ino @@ -0,0 +1,174 @@ + +/* + * Touch Display Scene Controller build using a touch enabled tft display + * attached to a ATMega 2560. This example fetches time from controller and sends + * in scene commands to the controller. + * Short press sends V_SCENE_ON and long press (>0.5sec) sends V_SCENE_OFF. + * + * Henrik Ekblad + * + * This example uses: + * UTFT library: http://www.henningkarlsen.com/electronics/library.php?id=51 + * Convert your own images here: http://www.henningkarlsen.com/electronics/t_imageconverter565.php + * + * The 3v3 output on the ATMega2560 is especially bad. I had to use a step down + * on the 5V output to get solid transmissions. + * + * The shield does not seem like sharing SPI with RF24 so you'll have to + * activate SOFTSPI-define in MySenors/util/RF24_config.h + * + * Connect radio + * ---------------------------------- + * Radio Arduino Pin + * ---------------------------------- + * GND GND + * 5V -> Step down -> 3V3 (see buying guide for help finding step-down) + * SCK 14 + * MOSI 15 + * MISO 16 + * CE 17 + * CSN 18 + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "arial_bold.c" +#include "ArialNumFontPlus.c" +#include "logo.c" + +#define CHILD_ID 1 + +int LONG_PRESS = 500; // Number of millisecons to trinnger scene off for button push +int RESEND_DEBOUNCE = 2000; // Number of millisecons interval between sending of same + // scene number again. + // This is used to avoid unwanted re-trigger when using + // a sensetive touch diplay. + +// Add your buttons here. Max is 5 if you still want time at the top. +char *buttons[] = { + "Good Morning", + "Clean Up!", + "All Lights Off", + "Music On/Off" + }; + +const int buttonCount = sizeof(buttons)/sizeof(char *); +const int padding = 10; +const int topBarHeight = 60; + +MySensor gw(17,18); +MyMessage on(CHILD_ID, V_SCENE_ON); +MyMessage off(CHILD_ID, V_SCENE_OFF); + +UTFT myGLCD(ITDB32S,38,39,40,41); +UTouch myTouch( 6, 5, 4, 3, 2); +UTFT_Buttons myButtons(&myGLCD, &myTouch); +boolean timeReceived = false; +unsigned long lastTimeUpdate=0, lastRequest=0; +char timeBuf[20]; + + +void setup() +{ + gw.begin(NULL, AUTO, false, 0); + + myGLCD.InitLCD(); + myGLCD.clrScr(); + myGLCD.setFont((uint8_t*)ArialNumFontPlus); + myGLCD.setColor(100, 255, 100); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawBitmap (0, 0, 60, 60, (unsigned int*)logo); + + myTouch.InitTouch(); + myTouch.setPrecision(PREC_MEDIUM); + + myButtons.setButtonColors(VGA_WHITE, VGA_GRAY, VGA_WHITE, VGA_RED, VGA_BLUE); + myButtons.setTextFont((uint8_t*)arial_bold); + int height = (myGLCD.getDisplayYSize()-topBarHeight-(padding*(buttonCount+2)))/buttonCount; + + // Add buttons + for (int i=0; i=0) { + bool longPress = millis()-now>LONG_PRESS; + + if (pressedButton != lastPressedButton || now-lastPressedButtonTime > RESEND_DEBOUNCE) { + if (longPress) { + gw.send(off.set(pressedButton)); + Serial.print("Long pressed: "); + } else { + gw.send(on.set(pressedButton)); + Serial.print("Pressed: "); + } + Serial.println(pressedButton); + lastPressedButton = pressedButton; + lastPressedButtonTime=now; + } + } + } + + // If no time has been received yet, request it every 10 second from controller + // When time has been received, request update every hour + if ((!timeReceived && now-lastRequest > 10*1000) + || (timeReceived && now-lastRequest > 60*1000*60)) { + // Request time from controller. + Serial.println("requesting time"); + gw.requestTime(receiveTime); + lastRequest = now; + } + + // Update time every second + if (timeReceived && now-lastTimeUpdate > 1000) { + printTime(); + lastTimeUpdate = now; + } +} + + + +// This is called when a new time value was received +void receiveTime(unsigned long time) { + // Ok, set incoming time + setTime(time); + timeReceived = true; +} + +void printTime() { + sprintf(timeBuf, "%02d:%02d:%02d", hour(), minute(), second()); + myGLCD.print(timeBuf, 60,7); +} + + diff --git a/libraries/MySensors/examples/TouchDisplaySceneControllerSensor/Ubuntu.c b/libraries/MySensors/examples/TouchDisplaySceneControllerSensor/Ubuntu.c new file mode 100644 index 0000000..4d7ce1c --- /dev/null +++ b/libraries/MySensors/examples/TouchDisplaySceneControllerSensor/Ubuntu.c @@ -0,0 +1,110 @@ +// Ubuntu.c +// Font type : Full (95 characters) +// Font size : 24x32 pixels +// Memory usage : 9124 bytes + +#include + +const uint8_t Ubuntu[9124] PROGMEM={ +0x18,0x20,0x20,0x5F, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // +0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x3E,0x00,0x00,0x3E,0x00,0x00,0x3E,0x00,0x00,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,0x01,0xC0,0xE0,0x03,0xE1,0xF0,0x03,0xE1,0xF0,0x03,0xE1,0xF0,0x01,0xE0,0xF0,0x00,0xE0,0x70,0x01,0xC0,0xE0,0x03,0xC1,0xE0,0x0F,0x87,0xC0,0x0E,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,0x38,0x70,0x00,0x38,0x70,0x00,0x70,0xE0,0x00,0x70,0xE0,0x00,0x70,0xE0,0x00,0x70,0xE0,0x0F,0xFF,0xF8,0x0F,0xFF,0xF8,0x0F,0xFF,0xF8,0x00,0xE1,0xC0,0x00,0xE1,0xC0,0x00,0xE1,0xC0,0x01,0xC3,0x80,0x01,0xC3,0x80,0x01,0xC3,0x80,0x0F,0xFF,0xF8,0x0F,0xFF,0xF8,0x0F,0xFF,0xF8,0x03,0x87,0x00,0x03,0x87,0x00,0x03,0x87,0x00,0x03,0x87,0x00,0x07,0x0E,0x00,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,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x7F,0x00,0x01,0xFF,0xC0,0x03,0xFF,0xC0,0x07,0x80,0x80,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x80,0x00,0x03,0xC0,0x00,0x03,0xF8,0x00,0x01,0xFE,0x00,0x00,0x7F,0x80,0x00,0x0F,0xC0,0x00,0x03,0xC0,0x00,0x01,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x02,0x01,0xC0,0x07,0xFF,0xC0,0x07,0xFF,0x80,0x01,0xFE,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x00,0x00, // $ +0x00,0x00,0x00,0x07,0x80,0x70,0x0F,0xC0,0xE0,0x0C,0xC0,0xE0,0x18,0x61,0xC0,0x18,0x63,0x80,0x18,0x63,0x80,0x18,0x67,0x00,0x18,0x67,0x00,0x18,0x6E,0x00,0x0C,0xDC,0x00,0x0F,0xDC,0x00,0x07,0xB8,0x00,0x00,0x3B,0xC0,0x00,0x77,0xE0,0x00,0x76,0x60,0x00,0xEC,0x30,0x01,0xCC,0x30,0x01,0xCC,0x30,0x03,0x8C,0x30,0x03,0x8C,0x30,0x07,0x0C,0x30,0x0E,0x06,0x60,0x0E,0x07,0xE0,0x1C,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // % +0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0xFF,0x00,0x01,0xFF,0x00,0x03,0xC7,0x80,0x03,0x83,0x80,0x03,0x83,0x80,0x03,0x83,0x80,0x03,0x87,0x00,0x01,0xCF,0x00,0x01,0xFE,0x00,0x00,0xFC,0x00,0x01,0xF0,0x70,0x03,0xF8,0x70,0x03,0xBC,0x70,0x07,0x1E,0x60,0x0E,0x0F,0xE0,0x0E,0x07,0xE0,0x0E,0x03,0xC0,0x0E,0x01,0xC0,0x0F,0x03,0xE0,0x07,0x8F,0xE0,0x07,0xFF,0x70,0x03,0xFE,0x70,0x00,0xF8,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // & +0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x3C,0x00,0x00,0x1E,0x00,0x00,0x0E,0x00,0x00,0x07,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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,0x00,0x00,0x0F,0x80,0x00,0x0F,0x00,0x00,0x1E,0x00,0x00,0x3C,0x00,0x00,0x38,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0x38,0x00,0x00,0x3C,0x00,0x00,0x1E,0x00,0x00,0x0F,0x00,0x00,0x07,0x80,0x00,0x03,0x00,0x00,0x01,0x00, // ( +0x00,0x60,0x00,0x00,0xF0,0x00,0x00,0x78,0x00,0x00,0x3C,0x00,0x00,0x1E,0x00,0x00,0x0E,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x0E,0x00,0x00,0x1E,0x00,0x00,0x3C,0x00,0x00,0x78,0x00,0x00,0xF0,0x00,0x00,0x60,0x00,0x00,0x40,0x00, // ) +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x02,0x1C,0x20,0x03,0xC9,0xE0,0x07,0xFF,0xF0,0x01,0xFF,0xC0,0x00,0x1C,0x00,0x00,0x36,0x00,0x00,0x77,0x00,0x00,0xF3,0x80,0x01,0xE3,0xC0,0x00,0xE3,0x80,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // * +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x0F,0xFF,0xE0,0x0F,0xFF,0xE0,0x0F,0xFF,0xE0,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // + +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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,0x1F,0x00,0x00,0x1F,0x00,0x00,0x1F,0x00,0x00,0x0F,0x00,0x00,0x07,0x00,0x00,0x0E,0x00,0x00,0x1C,0x00,0x00,0x78,0x00,0x00,0x70,0x00,0x00,0x00,0x00, // , +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0xFF,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // - +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x3E,0x00,0x00,0x3E,0x00,0x00,0x3E,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // . +0x00,0x01,0xC0,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x07,0x00,0x00,0x07,0x00,0x00, // / + +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x01,0xFF,0x00,0x03,0xFF,0x80,0x03,0xC7,0x80,0x07,0x83,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x30,0xE0,0x0E,0x78,0xE0,0x0E,0x78,0xE0,0x0E,0x78,0xE0,0x0E,0x30,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x83,0xC0,0x03,0xC7,0x80,0x03,0xFF,0x80,0x01,0xFF,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 0 +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x7C,0x00,0x00,0xFC,0x00,0x03,0xFC,0x00,0x07,0x9C,0x00,0x02,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x03,0xFF,0xC0,0x03,0xFF,0xC0,0x03,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 1 +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x00,0x03,0xFF,0x00,0x07,0xFF,0x80,0x07,0x87,0xC0,0x02,0x03,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x03,0x80,0x00,0x07,0x80,0x00,0x07,0x00,0x00,0x0E,0x00,0x00,0x1C,0x00,0x00,0x38,0x00,0x00,0x70,0x00,0x00,0xE0,0x00,0x01,0xC0,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x07,0x00,0x00,0x07,0xFF,0xE0,0x07,0xFF,0xE0,0x07,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 2 +0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFC,0x00,0x0F,0xFF,0x00,0x0F,0xFF,0x80,0x06,0x07,0x80,0x00,0x03,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x03,0xC0,0x00,0x07,0x80,0x00,0xFF,0x00,0x00,0xFF,0x00,0x00,0xFF,0x80,0x00,0x07,0xC0,0x00,0x01,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x01,0xE0,0x04,0x03,0xC0,0x0F,0xFF,0x80,0x0F,0xFF,0x00,0x03,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 3 +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x0F,0x80,0x00,0x1F,0x80,0x00,0x3F,0x80,0x00,0x3B,0x80,0x00,0x73,0x80,0x00,0xF3,0x80,0x01,0xE3,0x80,0x01,0xC3,0x80,0x03,0x83,0x80,0x03,0x83,0x80,0x07,0x03,0x80,0x0F,0x03,0x80,0x0E,0x03,0x80,0x1E,0x03,0x80,0x1F,0xFF,0xF0,0x1F,0xFF,0xF0,0x1F,0xFF,0xF0,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 4 +0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0x80,0x03,0xFF,0x80,0x03,0xFF,0x80,0x03,0x00,0x00,0x03,0x00,0x00,0x03,0x00,0x00,0x03,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0xF0,0x00,0x07,0xFE,0x00,0x07,0xFF,0x00,0x00,0x1F,0x80,0x00,0x07,0x80,0x00,0x03,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x03,0xC0,0x0C,0x07,0x80,0x0F,0xFF,0x00,0x0F,0xFE,0x00,0x03,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 5 +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x00,0x1F,0xC0,0x00,0x7F,0xC0,0x00,0xFC,0x00,0x01,0xE0,0x00,0x03,0xC0,0x00,0x03,0x80,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x06,0x7E,0x00,0x0F,0xFF,0x80,0x0F,0xFF,0xC0,0x0F,0x03,0xC0,0x0E,0x01,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x07,0x00,0xE0,0x07,0x01,0xC0,0x07,0xC3,0xC0,0x03,0xFF,0x80,0x01,0xFF,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 6 +0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xE0,0x0F,0xFF,0xE0,0x0F,0xFF,0xE0,0x00,0x00,0xE0,0x00,0x01,0xC0,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 7 +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x01,0xFF,0x00,0x03,0xFF,0x80,0x03,0xC7,0xC0,0x07,0x03,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x81,0xC0,0x03,0xC3,0x80,0x03,0xF7,0x00,0x01,0xFE,0x00,0x01,0xFF,0x80,0x03,0xCF,0xC0,0x07,0x03,0xC0,0x06,0x01,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0F,0x01,0xE0,0x07,0x83,0xC0,0x07,0xFF,0xC0,0x03,0xFF,0x80,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 8 +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x00,0x01,0xFF,0x00,0x03,0xFF,0x80,0x07,0x87,0xC0,0x07,0x01,0xC0,0x0E,0x01,0xC0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0F,0x00,0xE0,0x07,0x81,0xE0,0x07,0xFF,0xE0,0x03,0xFF,0xE0,0x00,0xFE,0xE0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x03,0xC0,0x00,0x07,0x80,0x00,0x0F,0x00,0x00,0x7E,0x00,0x07,0xFC,0x00,0x07,0xF8,0x00,0x07,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 9 +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // : +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x3C,0x00,0x00,0x1C,0x00,0x00,0x38,0x00,0x00,0x70,0x00,0x01,0xE0,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ; +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x01,0xE0,0x00,0x0F,0xE0,0x00,0x3F,0xC0,0x00,0xFE,0x00,0x03,0xF8,0x00,0x0F,0xC0,0x00,0x0F,0x00,0x00,0x0F,0xC0,0x00,0x07,0xF8,0x00,0x00,0xFE,0x00,0x00,0x3F,0xC0,0x00,0x0F,0xE0,0x00,0x01,0xE0,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // < +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xE0,0x0F,0xFF,0xE0,0x0F,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xE0,0x0F,0xFF,0xE0,0x0F,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // = +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x0F,0x00,0x00,0x0F,0xE0,0x00,0x07,0xF8,0x00,0x00,0xFE,0x00,0x00,0x3F,0x80,0x00,0x07,0xE0,0x00,0x01,0xE0,0x00,0x07,0xE0,0x00,0x3F,0xC0,0x00,0xFE,0x00,0x07,0xF8,0x00,0x0F,0xE0,0x00,0x0F,0x00,0x00,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,0xFE,0x00,0x03,0xFF,0x80,0x03,0xFF,0xC0,0x01,0x03,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x01,0xC0,0x00,0x03,0x80,0x00,0x07,0x00,0x00,0x0E,0x00,0x00,0x1C,0x00,0x00,0x3C,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ? + +0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0xFF,0x80,0x01,0xFF,0xC0,0x01,0xE1,0xE0,0x03,0x80,0xE0,0x03,0x80,0x70,0x07,0x00,0x70,0x07,0x00,0x70,0x07,0x07,0xF0,0x0E,0x1F,0xF0,0x0E,0x3F,0xF0,0x0E,0x3C,0x70,0x0E,0x78,0x70,0x0E,0x70,0x70,0x0E,0x70,0x70,0x0E,0x70,0x70,0x0E,0x70,0x70,0x0E,0x78,0x70,0x0E,0x38,0x70,0x07,0x3F,0xF0,0x07,0x1F,0xF0,0x07,0x07,0xE0,0x07,0x80,0x00,0x03,0xC0,0x00,0x03,0xC0,0x00,0x01,0xF0,0x00,0x00,0xFF,0xC0,0x00,0x7F,0xC0,0x00,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, // @ +0x00,0x00,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00,0xFF,0x00,0x00,0xF7,0x00,0x00,0xE7,0x00,0x00,0xE7,0x00,0x01,0xE7,0x80,0x01,0xC3,0x80,0x01,0xC3,0x80,0x03,0xC3,0xC0,0x03,0xC1,0xC0,0x03,0x81,0xC0,0x03,0x81,0xC0,0x07,0x81,0xE0,0x07,0xFF,0xE0,0x07,0xFF,0xE0,0x07,0xFF,0xE0,0x0F,0x00,0xF0,0x0E,0x00,0x70,0x0E,0x00,0x70,0x0E,0x00,0x70,0x1E,0x00,0x78,0x1C,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // A +0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFC,0x00,0x0F,0xFF,0x00,0x0F,0xFF,0x80,0x0E,0x07,0xC0,0x0E,0x03,0xC0,0x0E,0x01,0xC0,0x0E,0x01,0xC0,0x0E,0x01,0xC0,0x0E,0x03,0x80,0x0E,0x07,0x80,0x0F,0xFF,0x00,0x0F,0xFF,0x00,0x0F,0xFF,0x80,0x0E,0x03,0xC0,0x0E,0x01,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x01,0xE0,0x0E,0x07,0xC0,0x0F,0xFF,0xC0,0x0F,0xFF,0x00,0x0F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // B +0x00,0x00,0x00,0x00,0x3F,0x80,0x00,0x7F,0xE0,0x01,0xFF,0xE0,0x03,0xE0,0x40,0x03,0xC0,0x00,0x07,0x80,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x0F,0x00,0x00,0x07,0x00,0x00,0x07,0x80,0x00,0x03,0xC0,0x00,0x03,0xE0,0x40,0x01,0xFF,0xE0,0x00,0xFF,0xE0,0x00,0x3F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // C +0x00,0x00,0x00,0x0F,0xF0,0x00,0x0F,0xFE,0x00,0x0F,0xFF,0x00,0x0E,0x0F,0x80,0x0E,0x03,0x80,0x0E,0x03,0xC0,0x0E,0x01,0xC0,0x0E,0x01,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x01,0xE0,0x0E,0x01,0xC0,0x0E,0x03,0xC0,0x0E,0x03,0x80,0x0E,0x0F,0x80,0x0F,0xFF,0x00,0x0F,0xFE,0x00,0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // D +0x00,0x00,0x00,0x07,0xFF,0xC0,0x07,0xFF,0xC0,0x07,0xFF,0xC0,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0xFF,0x80,0x07,0xFF,0x80,0x07,0xFF,0x80,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0xFF,0xE0,0x07,0xFF,0xE0,0x07,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // E +0x00,0x00,0x00,0x07,0xFF,0xE0,0x07,0xFF,0xE0,0x07,0xFF,0xE0,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0xFF,0xC0,0x07,0xFF,0xC0,0x07,0xFF,0xC0,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // F +0x00,0x00,0x00,0x00,0x3F,0x80,0x00,0xFF,0xC0,0x01,0xFF,0xE0,0x03,0xE0,0xC0,0x03,0xC0,0x40,0x07,0x80,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0F,0x00,0xE0,0x07,0x00,0xE0,0x07,0x80,0xE0,0x03,0xC0,0xE0,0x03,0xE0,0xE0,0x01,0xFF,0xE0,0x00,0xFF,0xE0,0x00,0x3F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // G +0x00,0x00,0x00,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0F,0xFF,0xE0,0x0F,0xFF,0xE0,0x0F,0xFF,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // H +0x00,0x00,0x00,0x07,0xFF,0xC0,0x07,0xFF,0xC0,0x07,0xFF,0xC0,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x07,0xFF,0xC0,0x07,0xFF,0xC0,0x07,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // I +0x00,0x00,0x00,0x01,0xFF,0xC0,0x01,0xFF,0xC0,0x01,0xFF,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x04,0x03,0xC0,0x07,0x07,0x80,0x0F,0xFF,0x00,0x07,0xFE,0x00,0x01,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // J +0x00,0x00,0x00,0x0E,0x01,0xE0,0x0E,0x03,0xC0,0x0E,0x03,0x80,0x0E,0x07,0x80,0x0E,0x0F,0x00,0x0E,0x0E,0x00,0x0E,0x1C,0x00,0x0E,0x3C,0x00,0x0E,0x78,0x00,0x0E,0xF0,0x00,0x0F,0xE0,0x00,0x0F,0xE0,0x00,0x0F,0xF0,0x00,0x0E,0xF8,0x00,0x0E,0x7C,0x00,0x0E,0x3E,0x00,0x0E,0x1E,0x00,0x0E,0x0F,0x00,0x0E,0x07,0x80,0x0E,0x03,0xC0,0x0E,0x03,0xC0,0x0E,0x01,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // K +0x00,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0xFF,0xE0,0x07,0xFF,0xE0,0x07,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // L +0x00,0x00,0x00,0x03,0x00,0x60,0x03,0x80,0xF0,0x07,0x80,0xF0,0x07,0x80,0xF0,0x06,0xC1,0xB0,0x06,0xC1,0xB0,0x06,0xE3,0xB0,0x06,0x63,0x30,0x06,0x63,0x30,0x06,0x77,0x30,0x06,0x36,0x30,0x06,0x36,0x30,0x06,0x3E,0x30,0x06,0x1C,0x38,0x0E,0x1C,0x38,0x0E,0x00,0x38,0x0E,0x00,0x38,0x0E,0x00,0x38,0x0E,0x00,0x38,0x0E,0x00,0x38,0x0E,0x00,0x38,0x0E,0x00,0x38,0x0E,0x00,0x38,0x0E,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // M +0x00,0x00,0x00,0x07,0x80,0x70,0x07,0xC0,0x70,0x07,0xC0,0x70,0x07,0xE0,0x70,0x07,0xE0,0x70,0x07,0xF0,0x70,0x07,0x70,0x70,0x07,0x70,0x70,0x07,0x38,0x70,0x07,0x38,0x70,0x07,0x1C,0x70,0x07,0x1C,0x70,0x07,0x0E,0x70,0x07,0x0E,0x70,0x07,0x06,0x70,0x07,0x07,0x70,0x07,0x07,0x70,0x07,0x03,0xF0,0x07,0x03,0xF0,0x07,0x01,0xF0,0x07,0x01,0xF0,0x07,0x00,0xF0,0x07,0x00,0xF0,0x07,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // N +0x00,0x00,0x00,0x00,0x7C,0x00,0x01,0xFF,0x00,0x03,0xFF,0x80,0x07,0x83,0xC0,0x0F,0x01,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x1C,0x00,0xF0,0x1C,0x00,0x70,0x1C,0x00,0x70,0x1C,0x00,0x70,0x1C,0x00,0x70,0x1C,0x00,0x70,0x1C,0x00,0x70,0x1C,0x00,0x70,0x1C,0x00,0x70,0x1C,0x00,0xF0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0F,0x01,0xE0,0x07,0x83,0xC0,0x03,0xFF,0x80,0x01,0xFF,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // O + +0x00,0x00,0x00,0x07,0xFC,0x00,0x07,0xFF,0x00,0x07,0xFF,0x80,0x07,0x03,0xC0,0x07,0x01,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x01,0xE0,0x07,0x03,0xC0,0x07,0xFF,0x80,0x07,0xFF,0x00,0x07,0xFC,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // P +0x00,0x00,0x00,0x00,0x7C,0x00,0x01,0xFF,0x00,0x03,0xFF,0x80,0x07,0x83,0xC0,0x0F,0x01,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x1C,0x00,0xF0,0x1C,0x00,0x70,0x1C,0x00,0x70,0x1C,0x00,0x70,0x1C,0x00,0x70,0x1C,0x00,0x70,0x1C,0x00,0x70,0x1C,0x00,0x70,0x1C,0x00,0x70,0x1C,0x00,0xF0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0F,0x01,0xE0,0x07,0x83,0xC0,0x03,0xFF,0x80,0x01,0xFF,0x00,0x00,0xFE,0x00,0x00,0x38,0x00,0x00,0x3C,0x00,0x00,0x1F,0x00,0x00,0x0F,0xE0,0x00,0x07,0xE0,0x00,0x00,0xC0,0x00,0x00,0x00, // Q +0x00,0x00,0x00,0x0F,0xF8,0x00,0x0F,0xFE,0x00,0x0F,0xFF,0x00,0x0E,0x07,0x80,0x0E,0x03,0xC0,0x0E,0x01,0xC0,0x0E,0x01,0xC0,0x0E,0x01,0xC0,0x0E,0x01,0xC0,0x0E,0x01,0xC0,0x0E,0x03,0x80,0x0E,0x07,0x80,0x0F,0xFF,0x00,0x0F,0xFE,0x00,0x0F,0xFC,0x00,0x0E,0x1E,0x00,0x0E,0x0E,0x00,0x0E,0x07,0x00,0x0E,0x07,0x00,0x0E,0x03,0x80,0x0E,0x03,0x80,0x0E,0x01,0xC0,0x0E,0x01,0xC0,0x0E,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // R +0x00,0x00,0x00,0x00,0x7F,0x00,0x01,0xFF,0xC0,0x03,0xFF,0xC0,0x03,0xC0,0x80,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x80,0x00,0x03,0xE0,0x00,0x01,0xF8,0x00,0x00,0xFE,0x00,0x00,0x3F,0x80,0x00,0x0F,0xC0,0x00,0x03,0xC0,0x00,0x01,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x04,0x01,0xE0,0x0F,0x03,0xC0,0x0F,0xFF,0xC0,0x07,0xFF,0x80,0x01,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // S +0x00,0x00,0x00,0x0F,0xFF,0xE0,0x0F,0xFF,0xE0,0x0F,0xFF,0xE0,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // T +0x00,0x00,0x00,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0F,0x01,0xE0,0x07,0x01,0xC0,0x07,0x83,0xC0,0x03,0xFF,0x80,0x01,0xFF,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // U +0x00,0x00,0x00,0x1C,0x00,0x70,0x1C,0x00,0x70,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x03,0x83,0x80,0x03,0x83,0x80,0x03,0x83,0x80,0x03,0x87,0x80,0x01,0xC7,0x00,0x01,0xC7,0x00,0x01,0xC7,0x00,0x00,0xEE,0x00,0x00,0xEE,0x00,0x00,0xEE,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // V +0x00,0x00,0x00,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x38,0xE0,0x0E,0x38,0xE0,0x0E,0x38,0xE0,0x0E,0x6C,0xE0,0x0E,0x6C,0xE0,0x0E,0x6C,0xE0,0x0E,0xC6,0xE0,0x0E,0xC6,0xE0,0x0E,0xC6,0xE0,0x0F,0x83,0xE0,0x0F,0x83,0xE0,0x0F,0x83,0xE0,0x0F,0x01,0xE0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // W +0x00,0x00,0x00,0x1E,0x00,0xF0,0x0E,0x00,0xE0,0x0F,0x01,0xE0,0x07,0x01,0xC0,0x03,0x83,0x80,0x03,0x83,0x80,0x01,0xC7,0x00,0x01,0xEF,0x00,0x00,0xEE,0x00,0x00,0xFE,0x00,0x00,0x7C,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x7C,0x00,0x00,0xFE,0x00,0x00,0xEE,0x00,0x01,0xC7,0x00,0x03,0xC7,0x80,0x03,0x83,0x80,0x07,0x83,0xC0,0x07,0x01,0xC0,0x0F,0x01,0xE0,0x0E,0x00,0xE0,0x1E,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // X +0x00,0x00,0x00,0x1C,0x00,0x70,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0F,0x01,0xE0,0x07,0x01,0xC0,0x07,0x83,0xC0,0x03,0x83,0x80,0x03,0xC3,0x80,0x01,0xC7,0x00,0x01,0xEF,0x00,0x00,0xEE,0x00,0x00,0xFE,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Y +0x00,0x00,0x00,0x07,0xFF,0xE0,0x07,0xFF,0xE0,0x07,0xFF,0xE0,0x00,0x01,0xC0,0x00,0x03,0xC0,0x00,0x03,0x80,0x00,0x07,0x00,0x00,0x0F,0x00,0x00,0x0E,0x00,0x00,0x1E,0x00,0x00,0x3C,0x00,0x00,0x38,0x00,0x00,0x78,0x00,0x00,0x70,0x00,0x00,0xE0,0x00,0x01,0xE0,0x00,0x01,0xC0,0x00,0x03,0xC0,0x00,0x03,0x80,0x00,0x07,0x80,0x00,0x07,0x00,0x00,0x0F,0xFF,0xE0,0x0F,0xFF,0xE0,0x0F,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Z +0x01,0xFF,0x00,0x01,0xFF,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xFF,0x00,0x01,0xFF,0x00, // [ +0x03,0x80,0x00,0x03,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x00,0xE0,0x00,0x00,0xE0, // +0x00,0xFF,0x80,0x00,0xFF,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0xFF,0x80,0x00,0xFF,0x80, // ] +0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0xEE,0x00,0x00,0xEE,0x00,0x01,0xC7,0x00,0x01,0xC7,0x00,0x03,0xC7,0x80,0x03,0x83,0x80,0x07,0x83,0xC0,0x07,0x01,0xC0,0x0F,0x01,0xE0,0x02,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ^ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xF8,0x3F,0xFF,0xF8,0x3F,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // _ + +0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0xFE,0x00,0x01,0xC7,0x00,0x01,0x83,0x00,0x01,0x83,0x00,0x01,0x83,0x00,0x01,0xC7,0x00,0x00,0xFE,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ` +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x01,0xFF,0x80,0x01,0xFF,0xC0,0x01,0x83,0xE0,0x00,0x01,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x7F,0xE0,0x01,0xFF,0xE0,0x03,0xFF,0xE0,0x07,0xC0,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x80,0xE0,0x03,0xFF,0xE0,0x01,0xFF,0xE0,0x00,0x7F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // a +0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x7E,0x00,0x07,0xFF,0x00,0x07,0xFF,0x80,0x07,0x83,0xC0,0x07,0x01,0xC0,0x07,0x01,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x01,0xE0,0x07,0x01,0xC0,0x07,0x07,0xC0,0x07,0xFF,0x80,0x07,0xFF,0x00,0x03,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // b +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xC0,0x00,0xFF,0xE0,0x03,0xFF,0xE0,0x03,0xE0,0x40,0x07,0x80,0x00,0x07,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x07,0x00,0x00,0x07,0x80,0x00,0x03,0xE0,0x60,0x03,0xFF,0xE0,0x00,0xFF,0xE0,0x00,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // c +0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x7E,0xE0,0x00,0xFF,0xE0,0x01,0xFF,0xE0,0x03,0xC1,0xE0,0x03,0x80,0xE0,0x07,0x80,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x80,0xE0,0x03,0x80,0xE0,0x03,0xE0,0xE0,0x01,0xFF,0xE0,0x00,0xFF,0xE0,0x00,0x3F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // d +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x01,0xFF,0x00,0x03,0xFF,0x80,0x07,0xC3,0xC0,0x07,0x01,0xC0,0x07,0x00,0xE0,0x0E,0x00,0xE0,0x0F,0xFF,0xE0,0x0F,0xFF,0xE0,0x0F,0xFF,0xE0,0x0E,0x00,0x00,0x0E,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0xC0,0xC0,0x03,0xFF,0xC0,0x01,0xFF,0xC0,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // e +0x00,0x0F,0xC0,0x00,0x3F,0xF0,0x00,0x7F,0xF0,0x00,0x78,0x30,0x00,0xF0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x0F,0xFF,0xC0,0x0F,0xFF,0xC0,0x0F,0xFF,0xC0,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // f +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x01,0xFF,0xC0,0x03,0xFF,0xC0,0x07,0x81,0xC0,0x07,0x01,0xC0,0x0F,0x01,0xC0,0x0E,0x01,0xC0,0x0E,0x01,0xC0,0x0E,0x01,0xC0,0x0E,0x01,0xC0,0x0E,0x01,0xC0,0x0E,0x01,0xC0,0x07,0x01,0xC0,0x07,0x83,0xC0,0x03,0xFF,0xC0,0x01,0xFF,0xC0,0x00,0xFD,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x03,0xC0,0x06,0x07,0x80,0x07,0xFF,0x80,0x07,0xFF,0x00,0x03,0xFC,0x00,0x00,0x00,0x00, // g +0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0xFC,0x00,0x07,0xFF,0x00,0x07,0xFF,0x80,0x07,0x07,0x80,0x07,0x03,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // h +0x00,0x00,0x00,0x00,0x60,0x00,0x00,0xF0,0x00,0x00,0xF0,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0x00,0x0F,0xF0,0x00,0x0F,0xF0,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0x78,0x20,0x00,0x3F,0xE0,0x00,0x3F,0xE0,0x00,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // i +0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x0F,0x00,0x00,0x0F,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0x80,0x03,0xFF,0x80,0x03,0xFF,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x06,0x0F,0x00,0x0F,0xFF,0x00,0x0F,0xFE,0x00,0x03,0xF8,0x00, // j +0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x01,0xE0,0x07,0x03,0xC0,0x07,0x07,0x80,0x07,0x0F,0x00,0x07,0x1E,0x00,0x07,0x3C,0x00,0x07,0x78,0x00,0x07,0xF0,0x00,0x07,0xE0,0x00,0x07,0xF0,0x00,0x07,0x78,0x00,0x07,0x1C,0x00,0x07,0x0F,0x00,0x07,0x07,0x00,0x07,0x03,0x80,0x07,0x03,0xC0,0x07,0x01,0xE0,0x07,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // k +0x07,0xF8,0x00,0x07,0xF8,0x00,0x07,0xF8,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x3C,0x10,0x00,0x1F,0xF0,0x00,0x1F,0xF0,0x00,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // l +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,0xE3,0xC0,0x0F,0xFF,0xE0,0x0F,0xFF,0xE0,0x0E,0x3C,0xF0,0x0E,0x1C,0x70,0x0E,0x1C,0x70,0x0E,0x1C,0x70,0x0E,0x1C,0x70,0x0E,0x1C,0x70,0x0E,0x1C,0x70,0x0E,0x1C,0x70,0x0E,0x00,0x70,0x0E,0x00,0x70,0x0E,0x00,0x70,0x0E,0x00,0x70,0x0E,0x00,0x70,0x0E,0x00,0x70,0x0E,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // m +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x03,0xFF,0x80,0x03,0xFF,0xC0,0x03,0x83,0xC0,0x03,0x81,0xE0,0x03,0x80,0xE0,0x03,0x80,0xE0,0x03,0x80,0xE0,0x03,0x80,0xE0,0x03,0x80,0xE0,0x03,0x80,0xE0,0x03,0x80,0xE0,0x03,0x80,0xE0,0x03,0x80,0xE0,0x03,0x80,0xE0,0x03,0x80,0xE0,0x03,0x80,0xE0,0x03,0x80,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // n +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x01,0xFF,0x00,0x03,0xFF,0x80,0x07,0x83,0xC0,0x07,0x01,0xC0,0x0F,0x01,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x07,0x01,0xE0,0x07,0x01,0xC0,0x07,0x83,0xC0,0x03,0xFF,0x80,0x01,0xFF,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // o + +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,0xFC,0x00,0x07,0xFF,0x00,0x07,0xFF,0x80,0x07,0x07,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x01,0xE0,0x07,0x01,0xC0,0x07,0x83,0xC0,0x07,0xFF,0x80,0x07,0xFF,0x00,0x07,0x7C,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00, // p +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x80,0x00,0xFF,0xE0,0x01,0xFF,0xE0,0x03,0xE0,0xE0,0x03,0x80,0xE0,0x03,0x80,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x80,0xE0,0x03,0x80,0xE0,0x03,0xC1,0xE0,0x01,0xFF,0xE0,0x00,0xFF,0xE0,0x00,0x3E,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0, // q +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xC0,0x07,0xFF,0xC0,0x07,0xFF,0xC0,0x07,0x80,0x80,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // r +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x01,0xFF,0x80,0x03,0xFF,0x80,0x07,0x81,0x80,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0xC0,0x00,0x03,0xF0,0x00,0x01,0xFE,0x00,0x00,0x7F,0x00,0x00,0x1F,0x80,0x00,0x03,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x06,0x03,0xC0,0x07,0xFF,0x80,0x07,0xFF,0x80,0x01,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // s +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x0F,0xFF,0xE0,0x0F,0xFF,0xE0,0x0F,0xFF,0xE0,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xF0,0x20,0x00,0x7F,0xE0,0x00,0x7F,0xE0,0x00,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // t +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,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x81,0xC0,0x03,0xC1,0xC0,0x03,0xFF,0xC0,0x01,0xFF,0xC0,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // u +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x70,0x1E,0x00,0xF0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0F,0x01,0xE0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x83,0xC0,0x03,0x83,0x80,0x03,0x83,0x80,0x03,0xC7,0x00,0x01,0xC7,0x00,0x01,0xEF,0x00,0x00,0xEE,0x00,0x00,0xFE,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // v +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x70,0x1C,0x00,0x70,0x1C,0x00,0x70,0x1C,0x00,0x70,0x1C,0x10,0x70,0x0C,0x38,0xE0,0x0E,0x38,0xE0,0x0E,0x38,0xE0,0x0E,0x28,0xE0,0x0E,0x6C,0xE0,0x0E,0x6C,0xE0,0x06,0x44,0xC0,0x06,0xC6,0xC0,0x06,0xC7,0xC0,0x07,0x87,0xC0,0x07,0x83,0xC0,0x07,0x83,0x80,0x03,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // w +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x01,0xE0,0x0F,0x03,0xC0,0x07,0x03,0x80,0x03,0x87,0x80,0x03,0xCF,0x00,0x01,0xEE,0x00,0x00,0xFC,0x00,0x00,0x7C,0x00,0x00,0x78,0x00,0x00,0x7C,0x00,0x00,0xFE,0x00,0x01,0xEE,0x00,0x01,0xC7,0x00,0x03,0xC3,0x80,0x07,0x83,0xC0,0x0F,0x01,0xC0,0x0E,0x01,0xE0,0x1E,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // x +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,0x70,0x0F,0x00,0xF0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x80,0xE0,0x03,0x81,0xE0,0x03,0x81,0xC0,0x03,0xC1,0xC0,0x01,0xC3,0xC0,0x01,0xC3,0x80,0x01,0xE3,0x80,0x00,0xE7,0x80,0x00,0xF7,0x80,0x00,0x77,0x00,0x00,0x7F,0x00,0x00,0x3E,0x00,0x00,0x3E,0x00,0x00,0x1E,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x78,0x00,0x0F,0xF0,0x00,0x0F,0xF0,0x00,0x0F,0xC0,0x00, // y +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,0xFF,0xC0,0x07,0xFF,0xC0,0x07,0xFF,0xC0,0x00,0x03,0x80,0x00,0x07,0x80,0x00,0x0F,0x00,0x00,0x1E,0x00,0x00,0x1C,0x00,0x00,0x38,0x00,0x00,0x78,0x00,0x00,0xF0,0x00,0x00,0xE0,0x00,0x01,0xE0,0x00,0x03,0xC0,0x00,0x03,0x80,0x00,0x07,0xFF,0xC0,0x07,0xFF,0xC0,0x07,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // z +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x01,0xC0,0x00,0x0F,0x80,0x00,0x0F,0x80,0x00,0x01,0xC0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0x70,0x00,0x00,0x7F,0x80,0x00,0x1F,0x80, // { +0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00, // | +0x00,0xFC,0x00,0x00,0xFF,0x00,0x00,0x07,0x00,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x01,0xC0,0x00,0x00,0xF8,0x00,0x00,0xF8,0x00,0x01,0xC0,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x07,0x00,0x00,0xFF,0x00,0x00,0xFC,0x00, // } +0x00,0x00,0x00,0x01,0xE0,0x20,0x03,0xF0,0x30,0x07,0xFC,0x70,0x0E,0x3F,0xE0,0x0C,0x0F,0xC0,0x04,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ~ +}; diff --git a/libraries/MySensors/examples/TouchDisplaySceneControllerSensor/arial_bold.c b/libraries/MySensors/examples/TouchDisplaySceneControllerSensor/arial_bold.c new file mode 100644 index 0000000..e8107e9 --- /dev/null +++ b/libraries/MySensors/examples/TouchDisplaySceneControllerSensor/arial_bold.c @@ -0,0 +1,111 @@ +// arial_bold.c +// Font type : Full (95 characters) +// Font size : 16x16 pixels +// Memory usage : 3044 bytes +// Submitted by : MBWK + +#include + +const uint8_t arial_bold[3044] PROGMEM={ +0x10,0x10,0x20,0x5F, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00, // ! +0x00,0x00,0x00,0x00,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // " +0x00,0x00,0x00,0x00,0x03,0x60,0x03,0x60,0x06,0xC0,0x3F,0xF0,0x3F,0xF0,0x06,0xC0,0x0D,0x80,0x3F,0xF0,0x3F,0xF0,0x0D,0x80,0x1B,0x00,0x1B,0x00,0x00,0x00,0x00,0x00, // # +0x00,0x00,0x01,0x00,0x03,0x80,0x07,0xC0,0x0D,0x60,0x0D,0x00,0x0F,0x00,0x07,0x80,0x03,0xC0,0x01,0xE0,0x0D,0x60,0x0D,0x60,0x07,0xC0,0x03,0x80,0x01,0x00,0x00,0x00, // $ +0x00,0x00,0x00,0x00,0x3C,0x18,0x66,0x30,0x66,0x30,0x66,0x60,0x66,0xC0,0x3C,0xC0,0x01,0x9E,0x01,0xB3,0x03,0x33,0x03,0x33,0x06,0x33,0x0C,0x1E,0x00,0x00,0x00,0x00, // % +0x00,0x00,0x00,0x00,0x07,0xC0,0x0F,0xE0,0x0C,0x60,0x0C,0x60,0x07,0xC0,0x07,0x80,0x0D,0x90,0x19,0xD8,0x18,0xF0,0x18,0x78,0x0F,0xFC,0x07,0x88,0x00,0x00,0x00,0x00, // & +0x00,0x00,0x00,0x00,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ' +0x00,0x00,0x01,0x80,0x03,0x00,0x03,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x03,0x00,0x03,0x00,0x01,0x80,0x00,0x00,0x00,0x00, // ( +0x00,0x00,0x06,0x00,0x03,0x00,0x03,0x00,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x03,0x00,0x03,0x00,0x06,0x00,0x00,0x00,0x00,0x00, // ) +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x03,0x80,0x33,0x98,0x3F,0xF8,0x07,0xC0,0x07,0xC0,0x0E,0xE0,0x1C,0x70,0x04,0x40,0x00,0x00,0x00,0x00,0x00,0x00, // * +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x07,0xF8,0x07,0xF8,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0x00,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,0x00,0x03,0x00,0x01,0x00,0x01,0x00,0x02,0x00,0x00,0x00, // , +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xE0,0x03,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // . +0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00, // / + +0x00,0x00,0x00,0x00,0x03,0xC0,0x07,0xE0,0x0E,0x70,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0E,0x70,0x07,0xE0,0x03,0xC0,0x00,0x00,0x00,0x00, // 0 +0x00,0x00,0x00,0x00,0x01,0x80,0x03,0x80,0x07,0x80,0x0D,0x80,0x09,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x00,0x00,0x00,0x00, // 1 +0x00,0x00,0x00,0x00,0x03,0xC0,0x07,0xE0,0x0E,0x30,0x0C,0x30,0x00,0x30,0x00,0x60,0x00,0xE0,0x01,0xC0,0x03,0x80,0x06,0x00,0x0F,0xF0,0x0F,0xF0,0x00,0x00,0x00,0x00, // 2 +0x00,0x00,0x00,0x00,0x03,0xE0,0x07,0xF0,0x0E,0x30,0x00,0x30,0x01,0xE0,0x01,0xE0,0x00,0x70,0x00,0x30,0x0C,0x30,0x0E,0x70,0x07,0xE0,0x03,0xC0,0x00,0x00,0x00,0x00, // 3 +0x00,0x00,0x00,0x00,0x00,0x60,0x00,0xE0,0x00,0xE0,0x01,0xE0,0x03,0x60,0x03,0x60,0x06,0x60,0x0C,0x60,0x0F,0xF0,0x0F,0xF0,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00, // 4 +0x00,0x00,0x00,0x00,0x07,0xE0,0x07,0xE0,0x06,0x00,0x0C,0x00,0x0F,0xC0,0x0F,0xE0,0x0C,0x70,0x00,0x30,0x0C,0x30,0x0E,0x70,0x07,0xE0,0x03,0xC0,0x00,0x00,0x00,0x00, // 5 +0x00,0x00,0x00,0x00,0x03,0xE0,0x07,0xF0,0x06,0x30,0x0C,0x00,0x0D,0xC0,0x0F,0xE0,0x0E,0x70,0x0C,0x30,0x0C,0x30,0x06,0x30,0x07,0xE0,0x03,0xC0,0x00,0x00,0x00,0x00, // 6 +0x00,0x00,0x00,0x00,0x0F,0xF0,0x0F,0xF0,0x00,0x60,0x00,0xC0,0x00,0xC0,0x01,0x80,0x01,0x80,0x01,0x80,0x03,0x80,0x03,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00, // 7 +0x00,0x00,0x00,0x00,0x03,0xC0,0x07,0xE0,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x07,0xE0,0x07,0xE0,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x07,0xE0,0x03,0xC0,0x00,0x00,0x00,0x00, // 8 +0x00,0x00,0x00,0x00,0x03,0xC0,0x07,0xE0,0x0C,0x60,0x0C,0x30,0x0C,0x30,0x0E,0x70,0x07,0xF0,0x03,0xB0,0x00,0x30,0x0C,0x60,0x0F,0xE0,0x07,0xC0,0x00,0x00,0x00,0x00, // 9 +0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // : +0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x01,0x80,0x00,0x80,0x00,0x80,0x01,0x00,0x00,0x00, // ; +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0xE0,0x03,0xC0,0x0F,0x00,0x1C,0x00,0x0F,0x00,0x03,0xC0,0x00,0xE0,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00, // < +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xF0,0x1F,0xF0,0x00,0x00,0x00,0x00,0x1F,0xF0,0x1F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // = +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x0E,0x00,0x07,0x80,0x01,0xE0,0x00,0x70,0x01,0xE0,0x07,0x80,0x0E,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // > +0x00,0x00,0x00,0x00,0x03,0xC0,0x07,0xE0,0x0E,0x30,0x0C,0x30,0x00,0x70,0x00,0xE0,0x01,0xC0,0x01,0x80,0x01,0x80,0x00,0x00,0x01,0x80,0x01,0x80,0x00,0x00,0x00,0x00, // ? + +0x00,0x00,0x07,0xC0,0x0C,0x30,0x13,0x78,0x17,0xE8,0x2C,0xC8,0x2C,0xC8,0x2C,0xC8,0x2F,0xD0,0x26,0xE0,0x10,0x08,0x08,0x10,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00, // @ +0x00,0x00,0x00,0x00,0x03,0x80,0x03,0x80,0x06,0xC0,0x06,0xC0,0x06,0xC0,0x0C,0x60,0x0C,0x60,0x0F,0xE0,0x1F,0xF0,0x18,0x30,0x18,0x30,0x30,0x18,0x00,0x00,0x00,0x00, // A +0x00,0x00,0x00,0x00,0x1F,0xE0,0x1F,0xF0,0x18,0x30,0x18,0x30,0x18,0x30,0x1F,0xE0,0x1F,0xF0,0x18,0x18,0x18,0x18,0x18,0x18,0x1F,0xF0,0x1F,0xE0,0x00,0x00,0x00,0x00, // B +0x00,0x00,0x00,0x00,0x03,0xE0,0x0F,0xF0,0x0C,0x38,0x1C,0x10,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x1C,0x10,0x0C,0x38,0x0F,0xF0,0x03,0xE0,0x00,0x00,0x00,0x00, // C +0x00,0x00,0x00,0x00,0x1F,0xC0,0x1F,0xF0,0x18,0x30,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x30,0x1F,0xF0,0x1F,0xC0,0x00,0x00,0x00,0x00, // D +0x00,0x00,0x00,0x00,0x0F,0xF8,0x0F,0xF8,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0F,0xF8,0x0F,0xF8,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0F,0xF8,0x0F,0xF8,0x00,0x00,0x00,0x00, // E +0x00,0x00,0x00,0x00,0x0F,0xF0,0x0F,0xF0,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0F,0xE0,0x0F,0xE0,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00, // F +0x00,0x00,0x00,0x00,0x07,0xE0,0x1F,0xF0,0x18,0x38,0x38,0x10,0x30,0x00,0x30,0x00,0x30,0xF8,0x30,0xF8,0x38,0x18,0x18,0x38,0x1F,0xF8,0x07,0xE0,0x00,0x00,0x00,0x00, // G +0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1F,0xF8,0x1F,0xF8,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00, // H +0x00,0x00,0x00,0x00,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x00,0x00,0x00,0x00, // I +0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x0C,0x30,0x0E,0x70,0x07,0xE0,0x03,0xC0,0x00,0x00,0x00,0x00, // J +0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x30,0x18,0x60,0x18,0xC0,0x19,0x80,0x1B,0xC0,0x1E,0xC0,0x1C,0x60,0x18,0x70,0x18,0x30,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00, // K +0x00,0x00,0x00,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0F,0xF0,0x0F,0xF0,0x00,0x00,0x00,0x00, // L +0x00,0x00,0x00,0x00,0x38,0x38,0x38,0x38,0x3C,0x78,0x3C,0x78,0x34,0x58,0x36,0xD8,0x36,0xD8,0x36,0xD8,0x33,0x98,0x33,0x98,0x33,0x98,0x31,0x18,0x00,0x00,0x00,0x00, // M +0x00,0x00,0x00,0x00,0x18,0x18,0x1C,0x18,0x1E,0x18,0x1E,0x18,0x1B,0x18,0x19,0x98,0x19,0x98,0x18,0xD8,0x18,0x78,0x18,0x78,0x18,0x38,0x18,0x18,0x00,0x00,0x00,0x00, // N +0x00,0x00,0x00,0x00,0x07,0xC0,0x1F,0xF0,0x18,0x30,0x30,0x18,0x30,0x18,0x30,0x18,0x30,0x18,0x30,0x18,0x30,0x18,0x18,0x30,0x1F,0xF0,0x07,0xC0,0x00,0x00,0x00,0x00, // O + +0x00,0x00,0x00,0x00,0x0F,0xE0,0x0F,0xF0,0x0C,0x38,0x0C,0x18,0x0C,0x38,0x0F,0xF0,0x0F,0xE0,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00, // P +0x00,0x00,0x00,0x00,0x07,0xC0,0x1F,0xF0,0x18,0x30,0x30,0x18,0x30,0x18,0x30,0x18,0x30,0x18,0x30,0x18,0x31,0xB8,0x18,0xF0,0x1F,0xF0,0x07,0xB0,0x00,0x18,0x00,0x00, // Q +0x00,0x00,0x00,0x00,0x1F,0xE0,0x1F,0xF0,0x18,0x38,0x18,0x18,0x18,0x38,0x1F,0xF0,0x1F,0xC0,0x18,0xE0,0x18,0x70,0x18,0x30,0x18,0x38,0x18,0x1C,0x00,0x00,0x00,0x00, // R +0x00,0x00,0x00,0x00,0x03,0xE0,0x07,0xF0,0x0E,0x38,0x0C,0x18,0x0F,0x00,0x07,0xE0,0x01,0xF0,0x00,0x38,0x0C,0x18,0x0E,0x38,0x07,0xF0,0x03,0xE0,0x00,0x00,0x00,0x00, // S +0x00,0x00,0x00,0x00,0x1F,0xF8,0x1F,0xF8,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x00,0x00,0x00,0x00, // T +0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1C,0x38,0x0F,0xF0,0x07,0xE0,0x00,0x00,0x00,0x00, // U +0x00,0x00,0x00,0x00,0x30,0x18,0x18,0x30,0x18,0x30,0x18,0x30,0x0C,0x60,0x0C,0x60,0x0E,0xE0,0x06,0xC0,0x06,0xC0,0x03,0x80,0x03,0x80,0x03,0x80,0x00,0x00,0x00,0x00, // V +0x00,0x00,0x00,0x00,0x31,0xC6,0x31,0xC6,0x31,0xC6,0x1B,0x6C,0x1B,0x6C,0x1B,0x6C,0x1B,0x6C,0x1B,0x6C,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x00,0x00,0x00,0x00, // W +0x00,0x00,0x00,0x00,0x18,0x30,0x1C,0x70,0x0C,0x60,0x06,0xC0,0x07,0xC0,0x03,0x80,0x03,0x80,0x07,0xC0,0x06,0xC0,0x0C,0x60,0x1C,0x70,0x18,0x30,0x00,0x00,0x00,0x00, // X +0x00,0x00,0x00,0x00,0x18,0x18,0x1C,0x38,0x0C,0x30,0x06,0x60,0x06,0x60,0x03,0xC0,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x00,0x00,0x00,0x00, // Y +0x00,0x00,0x00,0x00,0x07,0xF8,0x07,0xF8,0x00,0x30,0x00,0x60,0x00,0xE0,0x00,0xC0,0x01,0x80,0x03,0x80,0x03,0x00,0x06,0x00,0x0F,0xF8,0x0F,0xF8,0x00,0x00,0x00,0x00, // Z +0x00,0x00,0x03,0xC0,0x03,0xC0,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0xC0,0x03,0xC0,0x00,0x00, // [ +0x00,0x00,0x00,0x00,0x03,0x00,0x03,0x00,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00, // +0x00,0x00,0x03,0xC0,0x03,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x03,0xC0,0x03,0xC0,0x00,0x00, // ] +0x00,0x00,0x01,0x80,0x03,0xC0,0x03,0xC0,0x06,0x60,0x06,0x60,0x06,0x60,0x0C,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ^ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00, // _ + +0x00,0x00,0x00,0x00,0x01,0x80,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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,0xC0,0x0F,0xE0,0x0C,0x60,0x01,0xE0,0x07,0xE0,0x0E,0x60,0x0C,0x60,0x0F,0xE0,0x07,0xB0,0x00,0x00,0x00,0x00,0x00,0x00, // a +0x00,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0D,0xC0,0x0F,0xE0,0x0E,0x70,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0E,0x70,0x0F,0xE0,0x0D,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, // b +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x07,0xE0,0x0E,0x60,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0E,0x60,0x07,0xE0,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, // c +0x00,0x00,0x00,0x30,0x00,0x30,0x00,0x30,0x03,0xB0,0x07,0xF0,0x0E,0x70,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0E,0x70,0x07,0xF0,0x03,0xB0,0x00,0x00,0x00,0x00,0x00,0x00, // d +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x07,0xC0,0x0C,0x60,0x0F,0xE0,0x0F,0xE0,0x0C,0x00,0x0E,0x60,0x07,0xC0,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00, // e +0x00,0x00,0x03,0xC0,0x07,0xC0,0x06,0x00,0x0F,0x80,0x0F,0x80,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // f +0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x60,0x0F,0xE0,0x1C,0xE0,0x18,0x60,0x18,0x60,0x18,0x60,0x1C,0xE0,0x0F,0xE0,0x07,0x60,0x18,0x60,0x1F,0xE0,0x0F,0xC0,0x00,0x00, // g +0x00,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0D,0xE0,0x0F,0xF0,0x0E,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x00,0x00,0x00,0x00,0x00,0x00, // h +0x00,0x00,0x00,0x00,0x01,0x80,0x01,0x80,0x00,0x00,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00, // i +0x00,0x00,0x00,0x00,0x01,0x80,0x01,0x80,0x00,0x00,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x07,0x80,0x07,0x00, // j +0x00,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x60,0x0C,0xC0,0x0D,0x80,0x0F,0x80,0x0F,0xC0,0x0E,0xC0,0x0C,0xC0,0x0C,0x60,0x0C,0x60,0x00,0x00,0x00,0x00,0x00,0x00, // k +0x00,0x00,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00, // l +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x37,0x38,0x3F,0xFC,0x39,0xCC,0x31,0x8C,0x31,0x8C,0x31,0x8C,0x31,0x8C,0x31,0x8C,0x31,0x8C,0x00,0x00,0x00,0x00,0x00,0x00, // m +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0D,0xE0,0x0F,0xF0,0x0E,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x00,0x00,0x00,0x00,0x00,0x00, // n +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x07,0xE0,0x0E,0x70,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0E,0x70,0x07,0xE0,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, // o + +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0D,0xC0,0x0F,0xE0,0x0E,0x70,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0E,0x70,0x0F,0xE0,0x0D,0xC0,0x0C,0x00,0x0C,0x00,0x0C,0x00, // p +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xB0,0x07,0xF0,0x0E,0x70,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0E,0x70,0x07,0xF0,0x03,0xB0,0x00,0x30,0x00,0x30,0x00,0x30, // q +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x70,0x03,0xF0,0x03,0x80,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // r +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xC0,0x0F,0xE0,0x0C,0x60,0x0F,0x00,0x07,0xC0,0x00,0xE0,0x0C,0x60,0x0F,0xE0,0x07,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, // s +0x00,0x00,0x01,0x00,0x03,0x00,0x03,0x00,0x07,0xC0,0x07,0xC0,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0xC0,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, // t +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x70,0x0F,0xF0,0x07,0xB0,0x00,0x00,0x00,0x00,0x00,0x00, // u +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x30,0x06,0x30,0x06,0x30,0x03,0x60,0x03,0x60,0x03,0x60,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, // v +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0xC6,0x31,0xC6,0x19,0xCC,0x1B,0x6C,0x1B,0x6C,0x1B,0x6C,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x00,0x00,0x00,0x00,0x00,0x00, // w +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x30,0x07,0x70,0x03,0x60,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x03,0x60,0x07,0x70,0x06,0x30,0x00,0x00,0x00,0x00,0x00,0x00, // x +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x18,0x0C,0x18,0x06,0x30,0x06,0x30,0x03,0x60,0x03,0x60,0x03,0xE0,0x01,0xC0,0x01,0xC0,0x01,0x80,0x07,0x80,0x07,0x00, // y +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xF8,0x03,0xF8,0x00,0x30,0x00,0x70,0x00,0xE0,0x01,0xC0,0x01,0x80,0x03,0xF8,0x03,0xF8,0x00,0x00,0x00,0x00,0x00,0x00, // z +0x01,0xC0,0x03,0xC0,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x0E,0x00,0x0E,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0xC0,0x01,0xC0,0x00,0x00, // { +0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80, // | +0x03,0x80,0x03,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0x70,0x00,0x70,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x03,0xC0,0x03,0x80,0x00,0x00, // } +0x00,0x00,0x00,0x00,0x07,0x88,0x0F,0xF8,0x08,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ~ +}; diff --git a/libraries/MySensors/examples/TouchDisplaySceneControllerSensor/logo.c b/libraries/MySensors/examples/TouchDisplaySceneControllerSensor/logo.c new file mode 100644 index 0000000..116321b --- /dev/null +++ b/libraries/MySensors/examples/TouchDisplaySceneControllerSensor/logo.c @@ -0,0 +1,235 @@ +// Generated by : ImageConverter 565 Online +// Generated from : top.png +// Time generated : Tue, 30 Sep 14 23:16:51 +0200 (Server timezone: CET) +// Image Size : 60x60 pixels +// Memory usage : 7200 bytes + +#include + +const unsigned short logo[3600] PROGMEM={ +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0010 (16) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0020 (32) pixels +0x08E4, 0x28A3, 0x89A7, 0x71C7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0030 (48) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0040 (64) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0050 (80) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xAD55, 0x18C3, 0x0082, 0x4944, 0x5A08, 0x8147, 0xBB0D, 0x5A69, // 0x0060 (96) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0070 (112) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0080 (128) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x52A0, 0x3180, 0x0000, 0x52AA, 0x2945, // 0x0090 (144) pixels +0x2965, 0x0000, 0x0000, 0x0000, 0x18E3, 0x0021, 0x4144, 0x69C6, 0x6924, 0xAA49, 0xB3AD, 0x00E2, 0x0000, 0x0000, 0x0000, 0x0000, // 0x00A0 (160) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x00B0 (176) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x00C0 (192) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2104, 0x0861, 0x2924, 0x0000, 0x0000, 0x00C2, // 0x00D0 (208) pixels +0x1862, 0x4924, 0x4924, 0x9965, 0xCB4A, 0xE48D, 0x9329, 0x0004, 0x6A69, 0x51A5, 0x2125, 0x0000, 0x5000, 0x0000, 0x0000, 0x0000, // 0x00E0 (224) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x00F0 (240) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0100 (256) pixels +0x0000, 0x1002, 0x1924, 0x41A4, 0x3124, 0x0000, 0x0000, 0x4A69, 0x2924, 0x0000, 0x0000, 0x4125, 0x38E4, 0x5983, 0x9A46, 0xE40A, // 0x0110 (272) pixels +0xFCCD, 0xF4CE, 0x50E5, 0x6226, 0xBBAC, 0xAAEB, 0x4904, 0x0000, 0x4104, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0120 (288) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0130 (304) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2124, 0x10C3, 0x0000, 0x0000, 0x2800, 0x41A5, 0x9309, // 0x0140 (320) pixels +0x8288, 0x00E5, 0x4A49, 0x73AE, 0x31A6, 0x1800, 0x59C7, 0x71E7, 0x2100, 0x8266, 0xE40B, 0xFCAC, 0xFC8C, 0xDC8F, 0x5187, 0xA387, // 0x0150 (336) pixels +0xABA9, 0x9249, 0x58C0, 0x0000, 0x0000, 0x8410, 0x2104, 0x10A2, 0x2965, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0160 (352) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0170 (368) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0944, 0x2062, 0x5165, 0x5903, 0x00A4, 0x0165, 0x8A67, 0xAB28, 0x7267, 0x29E8, 0x7B0C, // 0x0180 (384) pixels +0x6185, 0x8207, 0xC3AC, 0x6A04, 0x0140, 0xC36A, 0xFDEC, 0xF5AC, 0xFD30, 0xCC51, 0x70C5, 0xC469, 0xEC8D, 0x89E9, 0x0000, 0x5269, // 0x0190 (400) pixels +0x20C3, 0x0861, 0x0841, 0x18A2, 0x39E7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x01A0 (416) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x01B0 (432) pixels +0x5000, 0x0000, 0x71A5, 0x9A88, 0xAAA8, 0xC2C9, 0xA248, 0x9A26, 0xCA87, 0xCAC8, 0x58C0, 0x69C5, 0xC30B, 0xD3AC, 0xDC4A, 0x51A2, // 0x01C0 (448) pixels +0x5A65, 0xEC6B, 0xFDCB, 0xFE0E, 0xFD0F, 0xEBF1, 0xB3EB, 0xED6E, 0xEC10, 0x61C7, 0x0123, 0x0021, 0x0082, 0x10C3, 0x3186, 0x0000, // 0x01D0 (464) pixels +0x0000, 0x6180, 0x5000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x01E0 (480) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF800, 0x0000, 0xFFF0, 0x5943, // 0x01F0 (496) pixels +0xA226, 0xD369, 0xEB4A, 0xE289, 0xE26A, 0xEB0E, 0x9AAA, 0x5042, 0xDBAC, 0xEC8C, 0xDC29, 0x7A45, 0xCC4A, 0xFB4C, 0xFD8D, 0xFDF0, // 0x0200 (512) pixels +0xF510, 0xFD8F, 0xF5CF, 0xFE31, 0xCC31, 0x0000, 0x3801, 0x4143, 0x59A6, 0x4165, 0x0082, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0210 (528) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0220 (544) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4000, 0x0000, 0x0041, 0x9986, 0xC2E8, 0xDB88, 0xF44A, // 0x0230 (560) pixels +0xDBCB, 0xEBCD, 0xD44D, 0x41C5, 0xB308, 0xEC0B, 0xF46C, 0xE40D, 0xD38A, 0xEC2D, 0xFEAE, 0xFEF2, 0xFDD2, 0xFE51, 0xFD52, 0xFCB1, // 0x0240 (576) pixels +0xEC50, 0xCBEE, 0xB42A, 0xA2C6, 0x8985, 0x79A6, 0x89A6, 0xB1E6, 0xA1C6, 0x5924, 0x4986, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0250 (592) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0260 (608) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0040, 0x6125, 0xE3A9, 0xF4EB, 0xF5AC, 0xDD49, 0xE5CB, 0xFE6E, 0xC44E, // 0x0270 (624) pixels +0x9B8A, 0xE4CD, 0xFD70, 0xFDB1, 0xCCCE, 0xF62E, 0xFE8D, 0xFE50, 0xFE56, 0xFD97, 0xF4B6, 0xF3F0, 0xFD2F, 0xFE50, 0xF5D1, 0xDC10, // 0x0280 (640) pixels +0xB289, 0xC269, 0xCA68, 0xEB6C, 0xDC2F, 0xA2C9, 0x2062, 0x1945, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0290 (656) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x02A0 (672) pixels +0x0000, 0x0000, 0x0000, 0x00E3, 0x3904, 0xB1C6, 0xE34C, 0xEC2C, 0xE4AB, 0xCD2B, 0xF64C, 0xFE70, 0xFE4F, 0xEE4E, 0xFED2, 0xFED2, // 0x02B0 (688) pixels +0xFEB2, 0xFE33, 0xFDD3, 0xFE74, 0xF535, 0xCB11, 0xEB32, 0xFCF2, 0xFDF1, 0xF574, 0xFE13, 0xFE52, 0xBC4B, 0x8226, 0x6945, 0x6A28, // 0x02C0 (704) pixels +0x3228, 0x2124, 0x1904, 0x51C7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x02D0 (720) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x10A2, // 0x02E0 (736) pixels +0x0861, 0x91C5, 0xDA4A, 0xEAAB, 0xF3D1, 0xED12, 0xD591, 0xC50D, 0xA3E9, 0xB50C, 0xEE92, 0xB4EE, 0x7329, 0x82E8, 0xC572, 0xEDF3, // 0x02F0 (752) pixels +0xB3ED, 0x3800, 0xA3CF, 0xFEF6, 0xFED0, 0xFEB4, 0xFEF3, 0xF6CF, 0xEEAE, 0xBD2A, 0x0120, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0300 (768) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0310 (784) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1001, 0x39C7, 0x8227, 0xE2AA, 0xDB0C, // 0x0320 (800) pixels +0xE4B3, 0xCD11, 0x83EA, 0x5286, 0x52AA, 0x7BEF, 0x2940, 0x3A2A, 0x5AEB, 0x73CF, 0x52AA, 0x3945, 0x1184, 0x6B2B, 0xACF1, 0xB54F, // 0x0330 (816) pixels +0xF733, 0xFF51, 0xFF32, 0xFF55, 0xFF33, 0xF696, 0xCC93, 0x624A, 0x0120, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0340 (832) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0350 (848) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6248, 0x9249, 0xCB2A, 0xABEC, 0x8C2B, 0x5AE6, 0x10C3, 0x5269, // 0x0360 (864) pixels +0xA4F3, 0xD637, 0x9C90, 0xAD33, 0xAD12, 0xE6FA, 0xC5B5, 0x6AC9, 0x83CE, 0xBD53, 0xCDD5, 0x9450, 0x6B47, 0xCD91, 0xFEB4, 0xEED4, // 0x0370 (880) pixels +0x9490, 0x736E, 0xCCD5, 0xCC94, 0x7B2D, 0x0000, 0xFC10, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0380 (896) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0390 (912) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x6A8A, 0x8B0A, 0x9C2B, 0x7BCA, 0x3163, 0x526B, 0x1904, 0x736C, 0xE698, 0xD658, 0xD658, 0xD616, // 0x03A0 (928) pixels +0xF719, 0xFF5B, 0xF71A, 0xEED8, 0xD5F5, 0xEEFA, 0xE6B8, 0xA4F3, 0x29A8, 0x0000, 0xAC31, 0xEE36, 0x9C2E, 0x0000, 0x4145, 0xAB70, // 0x03B0 (944) pixels +0xC4B4, 0x93F0, 0x0000, 0x0000, 0x4008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x03C0 (960) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x03D0 (976) pixels +0x8B6B, 0x7B6A, 0x1124, 0x0000, 0x0000, 0x41E6, 0x0002, 0xB512, 0xFF7B, 0xFF9C, 0xFF9C, 0xFFDD, 0xFF9C, 0xFFBD, 0xFFFF, 0xFF9C, // 0x03E0 (992) pixels +0xFF5B, 0xFFBD, 0xFF9C, 0xF71A, 0x9CB1, 0x0000, 0x0000, 0xACB2, 0xE6B6, 0x4A68, 0x0000, 0x0144, 0x738E, 0x6B4D, 0x0000, 0x0000, // 0x03F0 (1008) pixels +0x500A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0400 (1024) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2145, 0x3144, 0x0002, 0x0000, 0x0000, // 0x0410 (1040) pixels +0x0000, 0x39C7, 0x0083, 0xC594, 0xEED9, 0xEEB8, 0xEEFA, 0xC5F7, 0xEEFA, 0xFFDD, 0xDEFB, 0xA4F2, 0xEE97, 0xF6D8, 0xEEF9, 0xFF7B, // 0x0420 (1056) pixels +0xDE56, 0x41C6, 0x0000, 0x0000, 0x9491, 0x7BCE, 0x0000, 0x6209, 0x0000, 0x0000, 0x6A49, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0430 (1072) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0440 (1088) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2965, 0x0000, 0xAD12, // 0x0450 (1104) pixels +0xCE17, 0x534E, 0x02B0, 0x7472, 0xF73A, 0xFF7B, 0xF71A, 0xA4F2, 0x02AE, 0x4B6F, 0x9C91, 0xFF5B, 0xF6D9, 0x838C, 0x0000, 0x0000, // 0x0460 (1120) pixels +0x0000, 0x0001, 0x2124, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0470 (1136) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0480 (1152) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x8400, 0x5000, 0x8410, 0x0000, 0xB4D3, 0x2965, 0x3985, 0xA4D1, 0xFFDF, 0xCEDC, 0x4413, 0xDEFA, // 0x0490 (1168) pixels +0xFF9C, 0xEED9, 0xFF5A, 0xFF5A, 0x8D36, 0xBE59, 0xFFDE, 0xFF7B, 0xFF19, 0x8BEE, 0x0000, 0x0000, 0x0000, 0x632C, 0x0005, 0x0000, // 0x04A0 (1184) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x04B0 (1200) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x04C0 (1216) pixels +0x0000, 0x0000, 0x8410, 0x0000, 0x7BCF, 0x2966, 0x5247, 0xBD95, 0xFFDE, 0xFF9C, 0xF73A, 0xFF7B, 0xF719, 0xCE17, 0xF75C, 0xFFDE, // 0x04D0 (1232) pixels +0xFF7C, 0xFF5A, 0xFFDE, 0xFF3A, 0xFF5A, 0xACF1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x04E0 (1248) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x04F0 (1264) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8410, 0x0000, // 0x0500 (1280) pixels +0x8C51, 0x2966, 0x62A9, 0x9CB2, 0xE6B9, 0xEEB8, 0xFF5B, 0xFF9C, 0xEEB8, 0xD637, 0xFF9C, 0xFFBD, 0xFF7B, 0xFF5B, 0xFF5B, 0xFF19, // 0x0510 (1296) pixels +0xFF5A, 0xC574, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0520 (1312) pixels +0x0000, 0x0000, 0x5000, 0x52AA, 0x8000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0530 (1328) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8410, 0x0000, 0xACF3, 0x3186, 0x5AA9, 0x940E, // 0x0540 (1344) pixels +0x9C90, 0xD616, 0xEEF9, 0xFF7B, 0xDE78, 0xB533, 0xE697, 0xFF39, 0xFF5A, 0xFF5B, 0xFF3A, 0xFF5B, 0xFF5A, 0xC593, 0x0000, 0x0000, // 0x0550 (1360) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0560 (1376) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0570 (1392) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2125, 0x5248, 0xA490, 0xC5B5, 0xEED9, 0xF73A, 0xF71A, // 0x0580 (1408) pixels +0xACF2, 0xBD74, 0xB533, 0xF71A, 0xFF9C, 0xFF3B, 0xFF7C, 0xFF9C, 0xFF9C, 0xB512, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0590 (1424) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x05A0 (1440) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x05B0 (1456) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2125, 0x41E7, 0xA4B1, 0xBD95, 0xE698, 0xF71A, 0xFF7B, 0xEEB8, 0xFF3A, 0xF6F9, 0xFFBD, // 0x05C0 (1472) pixels +0xEEB9, 0xAC2F, 0xE71B, 0xFFBD, 0xFF9C, 0xB532, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x05D0 (1488) pixels +0x0000, 0x0000, 0x0000, 0x4208, 0x2965, 0x5248, 0xB512, 0xE676, 0xA46F, 0x0000, 0xFFF0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x05E0 (1504) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x05F0 (1520) pixels +0x0000, 0x4208, 0x0000, 0xA490, 0xFF7C, 0xAD54, 0x91E6, 0xFF3B, 0xFFBC, 0xFF5A, 0xFF7B, 0xFFDD, 0xDC90, 0xB450, 0xF75B, 0xFF3A, // 0x0600 (1536) pixels +0xFF9B, 0xA4D1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0610 (1552) pixels +0x4A28, 0xC573, 0xFF7B, 0xFF5A, 0x7B4B, 0x0000, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x52AA, 0x0000, 0x0000, // 0x0620 (1568) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4208, 0x0000, 0x52AA, 0x1904, 0x62C9, // 0x0630 (1584) pixels +0xFF5B, 0xE6BA, 0x5800, 0xDC0E, 0xFF1B, 0xFF7B, 0xFFBD, 0xF617, 0xB940, 0xD617, 0xFF5A, 0xFF19, 0xFF7B, 0x7B6C, 0x0000, 0x0000, // 0x0640 (1600) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5000, 0x0000, 0x08C4, 0x6B0A, 0x942F, 0xF6F9, 0xFF7A, 0xC574, // 0x0650 (1616) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0660 (1632) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8410, 0x0000, 0x738E, 0x4A49, 0x08A3, 0xCDB4, 0xFF7B, 0x9CB1, 0x9000, // 0x0670 (1648) pixels +0xC267, 0xA3AD, 0xB34C, 0xA8E0, 0xBD14, 0xF71A, 0xFF39, 0xFF9B, 0xE698, 0x0000, 0x0000, 0x52AA, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0680 (1664) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x4200, 0x0000, 0x1904, 0x6AEA, 0x83AC, 0xC573, 0x8BEE, 0x0000, 0x52AA, 0x0000, 0x0000, 0x0000, // 0x0690 (1680) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0004, 0x4229, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x06A0 (1696) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x4208, 0x0000, 0x5AAA, 0x2146, 0x83CD, 0xFF19, 0xFF19, 0xBD53, 0x9BEE, 0x9BAD, 0xACD3, 0xC658, // 0x06B0 (1712) pixels +0xF73B, 0xFF5A, 0xFF5A, 0xF73A, 0x630C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x06C0 (1728) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00A7, // 0x06D0 (1744) pixels +0x4A28, 0x4A48, 0x428B, 0x0000, 0x4208, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x06E0 (1760) pixels +0x0000, 0x0000, 0x0000, 0x4228, 0x3186, 0xCDF6, 0xFF7B, 0xFF7B, 0xF71A, 0xF73A, 0xFF9C, 0xFF7C, 0xFF3A, 0xFF3A, 0xFF9C, 0x9471, // 0x06F0 (1776) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2104, // 0x0700 (1792) pixels +0x2104, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4208, 0x0000, 0x0000, 0xACD1, 0xE677, 0x836C, 0x0000, // 0x0710 (1808) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8410, 0x0000, 0x8C51, // 0x0720 (1824) pixels +0x2945, 0x39C6, 0x9C90, 0xE6B9, 0xFF9C, 0xFF5A, 0xFF19, 0xFF3A, 0xFF7B, 0xFFDD, 0xB5B6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0730 (1840) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x39C7, 0x18C3, 0x3186, 0x0000, 0x0000, 0x0000, // 0x0740 (1856) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFF0, 0x10E4, 0xB512, 0xFF9B, 0xE6B8, 0x0002, 0x0000, 0x8410, 0x0000, 0x0000, // 0x0750 (1872) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0180, 0x0000, 0x52AA, 0x10E3, 0x0000, 0x83AD, // 0x0760 (1888) pixels +0xE698, 0xFF19, 0xFF39, 0xEED8, 0xD658, 0x9492, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0770 (1904) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18E3, 0x18E3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0780 (1920) pixels +0x0000, 0x0000, 0xAD55, 0x2145, 0x9C4F, 0xBD32, 0x9450, 0x31A7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0790 (1936) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x52AA, 0x0000, 0x0000, 0x8C31, 0xB576, 0x41E7, 0x5AA9, 0x5A68, 0x8C0F, 0x8C0F, 0x5ACA, // 0x07A0 (1952) pixels +0x4A6A, 0xB532, 0x8BCD, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x07B0 (1968) pixels +0x0000, 0x0000, 0x18C3, 0x2945, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2965, // 0x07C0 (1984) pixels +0x18C3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x07D0 (2000) pixels +0x0000, 0x52AA, 0x0000, 0x1003, 0xCE1A, 0xEF1D, 0x62EC, 0x7B8C, 0xA4B1, 0x9C70, 0xB512, 0xB532, 0xD616, 0xF6D8, 0x6B0B, 0x0000, // 0x07E0 (2016) pixels +0x3165, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18E3, 0x18E3, 0x0000, // 0x07F0 (2032) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xA451, 0x2945, 0x18E3, // 0x0800 (2048) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9E73, 0x0000, // 0x0810 (2064) pixels +0x9493, 0xF77E, 0xCE39, 0x4A48, 0xCDF6, 0xC5B5, 0xEED9, 0xE6B8, 0xFF3A, 0x942F, 0x73AE, 0x8430, 0x39C7, 0x0000, 0x0000, 0x0000, // 0x0820 (2080) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2124, 0x18E3, 0x8410, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0830 (2096) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8410, 0x18E3, 0x18E3, 0x4A69, 0x0000, 0x0000, // 0x0840 (2112) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8410, 0x0000, 0x4268, 0x5A8C, 0x0003, 0xB557, 0xFFDF, 0xA555, // 0x0850 (2128) pixels +0xA4B1, 0xDE57, 0xEEB8, 0xFFBC, 0xB554, 0xA534, 0xB595, 0xB576, 0x7BD0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0860 (2144) pixels +0x0000, 0x0000, 0x4208, 0x18C3, 0x18E3, 0x31A6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0870 (2160) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x52AA, 0x0000, 0x0000, 0x2124, 0x18C3, 0x2104, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0880 (2176) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x4208, 0x0000, 0x4A68, 0x526B, 0x7B50, 0x62AD, 0xDEBC, 0xFFFF, 0x8430, 0xB554, 0xFF7B, 0xE6B9, // 0x0890 (2192) pixels +0x636E, 0xF7BE, 0x8C71, 0xDE9B, 0xCE1A, 0x1063, 0x0100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x39E7, 0x18E3, 0x18E3, 0x2104, // 0x08A0 (2208) pixels +0x8410, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x08B0 (2224) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3186, 0x18C3, 0x2104, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x08C0 (2240) pixels +0x4208, 0x0000, 0x4A49, 0x4A0A, 0xACF7, 0x7B70, 0xA514, 0xFFFF, 0xF79E, 0x9491, 0xE6B8, 0x83EF, 0xDEDB, 0xE71C, 0x8410, 0xFFFF, // 0x08D0 (2256) pixels +0xF77E, 0xA4D5, 0x0000, 0x0000, 0x0000, 0x0000, 0x3186, 0x2104, 0x18E3, 0x18E3, 0x39C7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x08E0 (2272) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x08F0 (2288) pixels +0x0000, 0x0000, 0x0000, 0x18C3, 0x2104, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x31C6, 0x734E, // 0x0900 (2304) pixels +0xB537, 0xACB6, 0x5AAB, 0xE71C, 0xFFFF, 0xCE59, 0x0000, 0x9CD3, 0xFFFF, 0xA535, 0xBDF7, 0xFFFF, 0xF79E, 0xE6DD, 0xC5D8, 0x4228, // 0x0910 (2320) pixels +0x0000, 0x3186, 0x18E3, 0x2104, 0x4208, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0920 (2336) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4A49, // 0x0930 (2352) pixels +0x10A2, 0x18C3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3166, 0x9453, 0xBD58, 0xB518, 0x83B1, 0xAD75, // 0x0940 (2368) pixels +0xD6BA, 0x2125, 0x3186, 0x736E, 0xB596, 0x7BF0, 0xE73C, 0xFFFF, 0xF77E, 0xF79E, 0xF79E, 0xC5F8, 0x10A1, 0x1082, 0x8410, 0x0000, // 0x0950 (2384) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0960 (2400) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x52AA, 0x18E3, 0x10A2, 0x18C3, // 0x0970 (2416) pixels +0x18C3, 0x0861, 0x0861, 0x0000, 0x0000, 0x2985, 0x41E8, 0xA4D5, 0xACF7, 0xC5D9, 0xE6DC, 0x6B4D, 0x62ED, 0xA4D4, 0x9452, 0xC5B9, // 0x0980 (2432) pixels +0x522A, 0x8430, 0xFFFF, 0xFFBF, 0xF77E, 0xF7BE, 0xF77E, 0xE6DD, 0x9CD4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0990 (2448) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x09A0 (2464) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2104, 0x18E3, 0x18E3, 0x18C3, 0x18C3, 0x2945, // 0x09B0 (2480) pixels +0x39C7, 0x3186, 0x62CC, 0x9C54, 0x9C35, 0xD63A, 0xF75E, 0xA534, 0x83D0, 0xC5D8, 0x9CD3, 0xE6DD, 0x7B70, 0xB5B6, 0xFFFF, 0xEF5E, // 0x09C0 (2496) pixels +0xF77E, 0xFFBF, 0xF77E, 0xE6FD, 0xBD98, 0x39A7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x09D0 (2512) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x09E0 (2528) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4A49, 0x5AAC, 0x8392, // 0x09F0 (2544) pixels +0xB537, 0xCE1A, 0xE6FC, 0xF7BE, 0xDEDB, 0xD69A, 0x8C71, 0xFFFF, 0xEF7D, 0xEF7D, 0xFFFF, 0xEF5E, 0xF77E, 0xFFDF, 0xF79E, 0xF77E, // 0x0A00 (2560) pixels +0xD65B, 0x7B70, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0A10 (2576) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0A20 (2592) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4208, 0x5A4B, 0xA495, 0xD67B, 0xC599, 0xDEBC, 0xFFFF, // 0x0A30 (2608) pixels +0xFFBF, 0xE71C, 0x8C71, 0xE73C, 0xB5B6, 0xEF7D, 0xFFFF, 0xEF5E, 0xF77E, 0xFFFF, 0xFFDF, 0xF79E, 0xEF5E, 0xC5B9, 0x4A49, 0x0000, // 0x0A40 (2624) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0A50 (2640) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0A60 (2656) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x39E7, 0x4A2A, 0xACF6, 0xE6FC, 0xD63A, 0xE71D, 0xFFFF, 0xF79E, 0xEF3D, 0x9CD3, 0xD69A, // 0x0A70 (2672) pixels +0xBDF7, 0xFFDE, 0xFFDF, 0xF77E, 0xF79E, 0xFFDF, 0xFFFF, 0xFFBF, 0xF7BF, 0xEF1D, 0xAD15, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0A80 (2688) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0A90 (2704) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0AA0 (2720) pixels +0x0000, 0x2965, 0x62CC, 0xACD6, 0xEF3D, 0xE6DC, 0xE71D, 0xFFFF, 0xF7BF, 0xF75E, 0x9CF3, 0xDEDB, 0xFFDF, 0xE73C, 0xFFDF, 0xF7BE, // 0x0AB0 (2736) pixels +0xF7BF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF5E, 0xD65A, 0x41E8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0AC0 (2752) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0AD0 (2768) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1922, 0x734F, 0xB4F7, // 0x0AE0 (2784) pixels +0xEF5E, 0xE6FC, 0xEF3D, 0xEF5D, 0xF79E, 0xF79E, 0xB5B6, 0xBDF7, 0xC638, 0xC638, 0xFFFF, 0xFFDF, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0AF0 (2800) pixels +0xFFFF, 0xFFDF, 0xEF1D, 0x9452, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0B00 (2816) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0B10 (2832) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2144, 0x736F, 0xBD78, 0xEF5E, 0xDEBC, 0xEF3D, 0xE6FC, // 0x0B20 (2848) pixels +0xF7BF, 0xF79E, 0xD69A, 0x9492, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFDF, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79F, 0xC5D9, // 0x0B30 (2864) pixels +0x2144, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0B40 (2880) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0B50 (2896) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x31A6, 0x7B8F, 0xB537, 0xE6DC, 0xE71D, 0xF79E, 0xE6FD, 0xFFDF, 0xFFFF, 0xEF7D, 0x9492, // 0x0B60 (2912) pixels +0xE71C, 0x738E, 0xEF7D, 0xFFDF, 0xFFBF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xD67B, 0x62ED, 0x0000, 0x8410, 0x0000, // 0x0B70 (2928) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0B80 (2944) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0B90 (2960) pixels +0x0000, 0x39C7, 0x83F0, 0xACF7, 0xD65B, 0xF79E, 0xFFDF, 0xE6FC, 0xFFDF, 0xFFFF, 0xFFDF, 0x8C71, 0xE71C, 0xE71C, 0xFFFF, 0xFFDF, // 0x0BA0 (2976) pixels +0xFFBF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDE7B, 0x8BD2, 0x0000, 0x630C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0BB0 (2992) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0BC0 (3008) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x39C7, 0x8C31, 0xACD6, // 0x0BD0 (3024) pixels +0xD65B, 0xF79E, 0xFFDF, 0xE6FD, 0xFFDF, 0xEF5E, 0xEF1D, 0x83F0, 0xE73C, 0xFFFF, 0xEF5D, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0BE0 (3040) pixels +0xFFFF, 0xFFFF, 0xDE9C, 0xD65B, 0x8430, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0BF0 (3056) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0C00 (3072) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x52AA, 0x0000, 0x31A6, 0x8C31, 0x9C74, 0xDE9B, 0xFFDF, 0xFFDF, 0xEF1D, // 0x0C10 (3088) pixels +0xF79E, 0xEF5E, 0xE6FD, 0x9493, 0xCE79, 0xD6BA, 0xBDD7, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF77E, 0xBD78, 0x9472, // 0x0C20 (3104) pixels +0x4A4C, 0x524B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0C30 (3120) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0C40 (3136) pixels +0x0000, 0x0000, 0x0000, 0x4208, 0x0000, 0x3166, 0x73AE, 0x9C74, 0xE6DC, 0xFFDF, 0xF79E, 0xF79E, 0xF79E, 0xF79E, 0xE6DC, 0xC618, // 0x0C50 (3152) pixels +0x9492, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF3D, 0xDE9C, 0xACD6, 0x6ACD, 0x3ACF, 0x9D9A, 0x7C94, 0x0000, 0x0000, // 0x0C60 (3168) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0C70 (3184) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0C80 (3200) pixels +0x0000, 0x2945, 0x4A8B, 0xA4F5, 0xF77E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFBF, 0xFFDF, 0x8C51, 0xBDD8, 0xC5DA, 0xBDB9, // 0x0C90 (3216) pixels +0xCE3A, 0xC5F9, 0x9C74, 0x622D, 0x3806, 0x2106, 0x3BF4, 0x7DBB, 0xAEBE, 0x8578, 0x0000, 0x0000, 0x4208, 0x0000, 0x0000, 0x0000, // 0x0CA0 (3232) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0CB0 (3248) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x52AA, 0x0000, 0x420A, 0x11CB, 0x632F, // 0x0CC0 (3264) pixels +0x9CB5, 0xB597, 0xCE79, 0xD6BA, 0xD6BB, 0xAD77, 0xB5B7, 0xAD96, 0x6B30, 0x0809, 0x300C, 0x280C, 0x3009, 0x0003, 0x0000, 0x00A3, // 0x0CD0 (3280) pixels +0x332F, 0x7D99, 0x8E1C, 0x8E1B, 0x9E7D, 0x95FB, 0x2986, 0x0000, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0CE0 (3296) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0CF0 (3312) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x001F, 0x0000, 0x82B5, 0x398D, 0x18CC, 0x0170, 0x00B0, 0x000C, 0x100A, // 0x0D00 (3328) pixels +0x180B, 0x000A, 0x0009, 0x0009, 0x380B, 0x518D, 0x48CC, 0x484B, 0x49AD, 0x3BF5, 0x5CF8, 0x6539, 0x7DDC, 0xBEDD, 0xCF1D, 0x759B, // 0x0D10 (3344) pixels +0x9E7C, 0xA67D, 0x3AAC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0D20 (3360) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0D30 (3376) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x000A, 0x0000, 0x398C, 0x314B, 0x3A32, 0x53B7, 0x53B6, 0x42D4, 0x4314, 0x5375, 0x63B5, 0x6395, // 0x0D40 (3392) pixels +0x4252, 0x496E, 0x4AF2, 0x5436, 0x5CD9, 0x5D5B, 0x8DFC, 0x9E7D, 0xAE9D, 0xBEDD, 0xCEFD, 0x5D5A, 0xA67C, 0xA69D, 0x5390, 0x0000, // 0x0D50 (3408) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0D60 (3424) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0D70 (3440) pixels +0x4208, 0x0000, 0x318A, 0x292A, 0x30ED, 0x52F4, 0x53B7, 0x4BF7, 0x5438, 0x5458, 0x5C17, 0x5376, 0x4B36, 0x6CD9, 0x5D5A, 0x75DB, // 0x0D80 (3456) pixels +0x85FC, 0x963C, 0xA67C, 0xA67C, 0x9E5C, 0xA67C, 0x8DFB, 0x5D5A, 0xA67C, 0xBEFE, 0x74B5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0D90 (3472) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0DA0 (3488) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02AA, 0x0000, 0x31C9, 0x292A, // 0x0DB0 (3504) pixels +0x394D, 0x4212, 0x4315, 0x43B6, 0x5CB9, 0x4B96, 0x5BB6, 0x7458, 0x6C58, 0x755A, 0x5D5A, 0x85DB, 0xAE9D, 0x9E5C, 0xBEDD, 0xAE9D, // 0x0DC0 (3520) pixels +0x963C, 0x9E5C, 0x75BB, 0x657B, 0xBEBD, 0xB6DE, 0x74F7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0DD0 (3536) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0DE0 (3552) pixels +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2108, 0x396E, 0x41D0, 0x42D4, 0x3356, // 0x0DF0 (3568) pixels +0x3BF7, 0x43B7, 0x53D7, 0x5C99, 0x5417, 0x651A, 0x5D5A, 0x7DBB, 0x85FB, 0x8E1C, 0x9E5C, 0x8E1C, 0x85FB, 0x963C, 0x961C, 0x7DDB, // 0x0E00 (3584) pixels +0xD73E, 0xAEBD, 0x8517, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0E10 (3600) pixels +}; diff --git a/libraries/MySensors/utility/RF24.cpp b/libraries/MySensors/utility/RF24.cpp index 38053ab..5f5329d 100755 --- a/libraries/MySensors/utility/RF24.cpp +++ b/libraries/MySensors/utility/RF24.cpp @@ -19,15 +19,30 @@ void RF24::csn(bool mode) // divider of 4 is the minimum we want. // CLK:BUS 8Mhz:2Mhz, 16Mhz:4Mhz, or 20Mhz:5Mhz #ifdef ARDUINO - #if !defined( __AVR_ATtiny85__ ) && !defined( __AVR_ATtiny84__) && !defined (__arm__) - SPI.setBitOrder(MSBFIRST); - SPI.setDataMode(SPI_MODE0); - SPI.setClockDivider(SPI_CLOCK_DIV2); + #if ( !defined(RF24_TINY) && !defined (__arm__) && !defined (SOFTSPI)) || defined (CORE_TEENSY) + _SPI.setBitOrder(MSBFIRST); + _SPI.setDataMode(SPI_MODE0); + _SPI.setClockDivider(SPI_CLOCK_DIV2); #endif #endif -#ifndef __arm__ - digitalWrite(csn_pin,mode); + +#if defined (RF24_TINY) + if (ce_pin != csn_pin) { + digitalWrite(csn_pin,mode); + } + else { + if (mode == HIGH) { + PORTB |= (1<CSN HIGH + delayMicroseconds(100); // allow csn to settle. + } + else { + PORTB &= ~(1<CSN LOW + delayMicroseconds(11); // allow csn to settle + } + } +#else if !defined (__arm__) || defined (CORE_TEENSY) + digitalWrite(csn_pin,mode); #endif } @@ -36,7 +51,8 @@ void RF24::csn(bool mode) void RF24::ce(bool level) { - digitalWrite(ce_pin,level); + //Allow for 3-pin use on ATTiny + if (ce_pin != csn_pin) digitalWrite(ce_pin,level); } /****************************************************************************/ @@ -45,18 +61,18 @@ uint8_t RF24::read_register(uint8_t reg, uint8_t* buf, uint8_t len) { uint8_t status; -#if defined (__arm__) - status = SPI.transfer(csn_pin, R_REGISTER | ( REGISTER_MASK & reg ), SPI_CONTINUE ); +#if defined (__arm__) && !defined ( CORE_TEENSY ) + status = _SPI.transfer(csn_pin, R_REGISTER | ( REGISTER_MASK & reg ), SPI_CONTINUE ); while ( len-- > 1 ){ - *buf++ = SPI.transfer(csn_pin,0xff, SPI_CONTINUE); + *buf++ = _SPI.transfer(csn_pin,0xff, SPI_CONTINUE); } - *buf++ = SPI.transfer(csn_pin,0xff); + *buf++ = _SPI.transfer(csn_pin,0xff); #else csn(LOW); - status = SPI.transfer( R_REGISTER | ( REGISTER_MASK & reg ) ); + status = _SPI.transfer( R_REGISTER | ( REGISTER_MASK & reg ) ); while ( len-- ){ - *buf++ = SPI.transfer(0xff); + *buf++ = _SPI.transfer(0xff); } csn(HIGH); @@ -70,13 +86,13 @@ uint8_t RF24::read_register(uint8_t reg, uint8_t* buf, uint8_t len) uint8_t RF24::read_register(uint8_t reg) { - #if defined (__arm__) - SPI.transfer(csn_pin, R_REGISTER | ( REGISTER_MASK & reg ) , SPI_CONTINUE); - uint8_t result = SPI.transfer(csn_pin,0xff); + #if defined (__arm__) && !defined ( CORE_TEENSY ) + _SPI.transfer(csn_pin, R_REGISTER | ( REGISTER_MASK & reg ) , SPI_CONTINUE); + uint8_t result = _SPI.transfer(csn_pin,0xff); #else csn(LOW); - SPI.transfer( R_REGISTER | ( REGISTER_MASK & reg ) ); - uint8_t result = SPI.transfer(0xff); + _SPI.transfer( R_REGISTER | ( REGISTER_MASK & reg ) ); + uint8_t result = _SPI.transfer(0xff); csn(HIGH); #endif @@ -90,18 +106,18 @@ uint8_t RF24::write_register(uint8_t reg, const uint8_t* buf, uint8_t len) { uint8_t status; - #if defined (__arm__) - status = SPI.transfer(csn_pin, W_REGISTER | ( REGISTER_MASK & reg ), SPI_CONTINUE ); - while ( len-- > 1){ - SPI.transfer(csn_pin,*buf++, SPI_CONTINUE); + #if defined (__arm__) && !defined ( CORE_TEENSY ) + status = _SPI.transfer(csn_pin, W_REGISTER | ( REGISTER_MASK & reg ), SPI_CONTINUE ); + while ( --len){ + _SPI.transfer(csn_pin,*buf++, SPI_CONTINUE); } - SPI.transfer(csn_pin,*buf++); + _SPI.transfer(csn_pin,*buf++); #else csn(LOW); - status = SPI.transfer( W_REGISTER | ( REGISTER_MASK & reg ) ); + status = _SPI.transfer( W_REGISTER | ( REGISTER_MASK & reg ) ); while ( len-- ) - SPI.transfer(*buf++); + _SPI.transfer(*buf++); csn(HIGH); @@ -118,14 +134,14 @@ uint8_t RF24::write_register(uint8_t reg, uint8_t value) IF_SERIAL_DEBUG(printf_P(PSTR("write_register(%02x,%02x)\r\n"),reg,value)); - #if defined (__arm__) - status = SPI.transfer(csn_pin, W_REGISTER | ( REGISTER_MASK & reg ), SPI_CONTINUE); - SPI.transfer(csn_pin,value); + #if defined (__arm__) && !defined ( CORE_TEENSY ) + status = _SPI.transfer(csn_pin, W_REGISTER | ( REGISTER_MASK & reg ), SPI_CONTINUE); + _SPI.transfer(csn_pin,value); #else csn(LOW); - status = SPI.transfer( W_REGISTER | ( REGISTER_MASK & reg ) ); - SPI.transfer(value); + status = _SPI.transfer( W_REGISTER | ( REGISTER_MASK & reg ) ); + _SPI.transfer(value); csn(HIGH); #endif @@ -140,39 +156,39 @@ uint8_t RF24::write_payload(const void* buf, uint8_t data_len, const uint8_t wri uint8_t status; const uint8_t* current = reinterpret_cast(buf); - if(data_len > payload_size) data_len = payload_size; - uint8_t blank_len = dynamic_payloads_enabled ? 0 : payload_size - data_len; - + data_len = min(data_len, payload_size); + uint8_t blank_len = dynamic_payloads_enabled ? 0 : payload_size - data_len; + //printf("[Writing %u bytes %u blanks]",data_len,blank_len); - #if defined (__arm__) + #if defined (__arm__) && !defined ( CORE_TEENSY ) - status = SPI.transfer(csn_pin, writeType , SPI_CONTINUE); + status = _SPI.transfer(csn_pin, writeType , SPI_CONTINUE); if(blank_len){ while ( data_len--){ - SPI.transfer(csn_pin,*current++, SPI_CONTINUE); + _SPI.transfer(csn_pin,*current++, SPI_CONTINUE); } while ( --blank_len ){ - SPI.transfer(csn_pin,0, SPI_CONTINUE); + _SPI.transfer(csn_pin,0, SPI_CONTINUE); } - SPI.transfer(csn_pin,0); + _SPI.transfer(csn_pin,0); }else{ while( --data_len ){ - SPI.transfer(csn_pin,*current++, SPI_CONTINUE); + _SPI.transfer(csn_pin,*current++, SPI_CONTINUE); } - SPI.transfer(csn_pin,*current); + _SPI.transfer(csn_pin,*current); } #else csn(LOW); - status = SPI.transfer( writeType ); + status = _SPI.transfer( writeType ); while ( data_len-- ) { - SPI.transfer(*current++); + _SPI.transfer(*current++); } while ( blank_len-- ) { - SPI.transfer(0); + _SPI.transfer(0); } csn(HIGH); @@ -190,39 +206,39 @@ uint8_t RF24::read_payload(void* buf, uint8_t data_len) if(data_len > payload_size) data_len = payload_size; uint8_t blank_len = dynamic_payloads_enabled ? 0 : payload_size - data_len; - + //printf("[Reading %u bytes %u blanks]",data_len,blank_len); - #if defined (__arm__) + #if defined (__arm__) && !defined ( CORE_TEENSY ) - status = SPI.transfer(csn_pin, R_RX_PAYLOAD, SPI_CONTINUE ); + status = _SPI.transfer(csn_pin, R_RX_PAYLOAD, SPI_CONTINUE ); if( blank_len ){ - while ( data_len-- ){ - *current++ = SPI.transfer(csn_pin,0xFF, SPI_CONTINUE); + *current++ = _SPI.transfer(csn_pin,0xFF, SPI_CONTINUE); } + while ( --blank_len ){ - SPI.transfer(csn_pin,0xFF, SPI_CONTINUE); + _SPI.transfer(csn_pin,0xFF, SPI_CONTINUE); } - SPI.transfer(csn_pin,0xFF); + _SPI.transfer(csn_pin,0xFF); }else{ while ( --data_len ){ - *current++ = SPI.transfer(csn_pin,0xFF, SPI_CONTINUE); + *current++ = _SPI.transfer(csn_pin,0xFF, SPI_CONTINUE); } - *current = SPI.transfer(csn_pin,0xFF); + *current = _SPI.transfer(csn_pin,0xFF); } #else csn(LOW); - status = SPI.transfer( R_RX_PAYLOAD ); + status = _SPI.transfer( R_RX_PAYLOAD ); while ( data_len-- ) { - *current++ = SPI.transfer(0xFF); + *current++ = _SPI.transfer(0xFF); } while ( blank_len-- ) { - SPI.transfer(0xff); + _SPI.transfer(0xff); } csn(HIGH); @@ -250,12 +266,12 @@ uint8_t RF24::flush_tx(void) uint8_t RF24::spiTrans(uint8_t cmd){ uint8_t status; - #if defined (__arm__) - status = SPI.transfer(csn_pin, cmd ); + #if defined (__arm__) && !defined ( CORE_TEENSY ) + status = _SPI.transfer(csn_pin, cmd ); #else csn(LOW); - status = SPI.transfer( cmd ); + status = _SPI.transfer( cmd ); csn(HIGH); #endif return status; @@ -271,7 +287,6 @@ uint8_t RF24::get_status(void) /****************************************************************************/ #if !defined (MINIMAL) - void RF24::print_status(uint8_t status) { printf_P(PSTR("STATUS\t\t = 0x%02x RX_DR=%x TX_DS=%x MAX_RT=%x RX_P_NO=%x TX_FULL=%x\r\n"), @@ -315,7 +330,7 @@ void RF24::print_address_register(const char* name, uint8_t reg, uint8_t qty) while (qty--) { - uint8_t buffer[5]; + uint8_t buffer[addr_width]; read_register(reg++,buffer,sizeof buffer); printf_P(PSTR(" 0x")); @@ -330,9 +345,8 @@ void RF24::print_address_register(const char* name, uint8_t reg, uint8_t qty) /****************************************************************************/ RF24::RF24(uint8_t _cepin, uint8_t _cspin): - ce_pin(_cepin), csn_pin(_cspin), wide_band(false), p_variant(false), - payload_size(32), dynamic_payloads_enabled(false), - pipe0_reading_address(0) + ce_pin(_cepin), csn_pin(_cspin), p_variant(false), + payload_size(32), dynamic_payloads_enabled(false), addr_width(5)//,pipe0_reading_address(0) { } @@ -340,9 +354,6 @@ RF24::RF24(uint8_t _cepin, uint8_t _cspin): void RF24::setChannel(uint8_t channel) { - // TODO: This method could take advantage of the 'wide_band' calculation - // done in setChannel() to require certain channel spacing. - const uint8_t max_channel = 127; write_register(RF_CH,min(channel,max_channel)); } @@ -425,6 +436,7 @@ void RF24::printDetails(void) printf_P(PSTR("CRC Length\t = %S\r\n"),pgm_read_word(&rf24_crclength_e_str_P[getCRCLength()])); printf_P(PSTR("PA Power\t = %S\r\n"),pgm_read_word(&rf24_pa_dbm_e_str_P[getPALevel()])); #endif + } #endif @@ -433,18 +445,18 @@ void RF24::printDetails(void) void RF24::begin(void) { // Initialize pins - pinMode(ce_pin,OUTPUT); + if (ce_pin != csn_pin) pinMode(ce_pin,OUTPUT); - #if defined(__arm__) - SPI.begin(csn_pin); // Using the extended SPI features of the DUE - SPI.setClockDivider(csn_pin, 9); // Set the bus speed to 8.4mhz on Due - SPI.setBitOrder(csn_pin,MSBFIRST); // Set the bit order and mode specific to this device - SPI.setDataMode(csn_pin,SPI_MODE0); + #if defined(__arm__) && ! defined( CORE_TEENSY ) + _SPI.begin(csn_pin); // Using the extended SPI features of the DUE + _SPI.setClockDivider(csn_pin, 9); // Set the bus speed to 8.4mhz on Due + _SPI.setBitOrder(csn_pin,MSBFIRST); // Set the bit order and mode specific to this device + _SPI.setDataMode(csn_pin,SPI_MODE0); ce(LOW); //csn(HIGH); #else - pinMode(csn_pin,OUTPUT); - SPI.begin(); + if (ce_pin != csn_pin) pinMode(csn_pin,OUTPUT); + _SPI.begin(); ce(LOW); csn(HIGH); #endif @@ -503,39 +515,66 @@ void RF24::begin(void) // PTX should use only 22uA of power write_register(CONFIG, ( read_register(CONFIG) ) & ~_BV(PRIM_RX) ); - } /****************************************************************************/ void RF24::startListening(void) { + #if !defined (RF24_TINY) powerUp(); + #endif write_register(CONFIG, read_register(CONFIG) | _BV(PRIM_RX)); write_register(STATUS, _BV(RX_DR) | _BV(TX_DS) | _BV(MAX_RT) ); // Restore the pipe0 adddress, if exists - if (pipe0_reading_address){ - write_register(RX_ADDR_P0, reinterpret_cast(&pipe0_reading_address), 5); + if (pipe0_reading_address[0] > 0){ + write_register(RX_ADDR_P0, pipe0_reading_address, addr_width); + }else{ + closeReadingPipe(0); } // Flush buffers - flush_rx(); - flush_tx(); + //flush_rx(); + if(read_register(FEATURE) & _BV(EN_ACK_PAY)){ + flush_tx(); + } // Go! ce(HIGH); - + } /****************************************************************************/ +static const uint8_t child_pipe_enable[] PROGMEM = +{ + ERX_P0, ERX_P1, ERX_P2, ERX_P3, ERX_P4, ERX_P5 +}; void RF24::stopListening(void) { + ce(LOW); - flush_tx(); - flush_rx(); + #if defined(__arm__) + delayMicroseconds(300); + #endif + delayMicroseconds(130); + if(read_register(FEATURE) & _BV(EN_ACK_PAY)){ + flush_tx(); + } + //flush_rx(); write_register(CONFIG, ( read_register(CONFIG) ) & ~_BV(PRIM_RX) ); + + #if defined (RF24_TINY) + // for 3 pins solution TX mode is only left with additonal powerDown/powerUp cycle + if (ce_pin == csn_pin) { + powerDown(); + powerUp(); + } + #endif + write_register(EN_RXADDR,read_register(EN_RXADDR) | _BV(pgm_read_byte(&child_pipe_enable[0]))); // Enable RX on pipe0 + + delayMicroseconds(100); } @@ -566,18 +605,36 @@ void RF24::powerUp(void) } } +/******************************************************************/ +#if defined (FAILURE_HANDLING) +void RF24::errNotify(){ + IF_SERIAL_DEBUG(printf_P(PSTR("HARDWARE FAIL\r\n"))); + failureDetected = 1; +} +#endif /******************************************************************/ //Similar to the previous write, clears the interrupt flags bool RF24::write( const void* buf, uint8_t len, const bool multicast ) { //Start Writing - startWrite(buf,len,multicast); + startFastWrite(buf,len,multicast); //Wait until complete or failed - //ACK payloads that are handled improperly will cause this to hang - //If autoAck is ON, a payload has to be written prior to reading a payload, else write after reading a payload - while( ! ( get_status() & ( _BV(TX_DS) | _BV(MAX_RT) ))) { } + #if defined (FAILURE_HANDLING) + uint32_t timer = millis(); + #endif + + while( ! ( get_status() & ( _BV(TX_DS) | _BV(MAX_RT) ))) { + #if defined (FAILURE_HANDLING) + if(millis() - timer > 75){ + errNotify(); + return 0; + } + #endif + } + + ce(LOW); uint8_t status = write_register(STATUS,_BV(RX_DR) | _BV(TX_DS) | _BV(MAX_RT) ); @@ -611,6 +668,12 @@ bool RF24::writeBlocking( const void* buf, uint8_t len, uint32_t timeout ) reUseTX(); //Set re-transmit and clear the MAX_RT interrupt flag if(millis() - timer > timeout){ return 0; } //If this payload has exceeded the user-defined timeout, exit and return 0 } + #if defined (FAILURE_HANDLING) + if(millis() - timer > (timeout+75) ){ + errNotify(); + return 0; + } + #endif } @@ -638,6 +701,10 @@ bool RF24::writeFast( const void* buf, uint8_t len, const bool multicast ) //Return 0 so the user can control the retrys and set a timer or failure counter if required //The radio will auto-clear everything in the FIFO as long as CE remains high + #if defined (FAILURE_HANDLING) + uint32_t timer = millis(); + #endif + while( ( get_status() & ( _BV(TX_FULL) ))) { //Blocking only if FIFO is full. This will loop and block until TX is successful or fail if( get_status() & _BV(MAX_RT)){ @@ -646,7 +713,12 @@ bool RF24::writeFast( const void* buf, uint8_t len, const bool multicast ) return 0; //Return 0. The previous payload has been retransmitted //From the user perspective, if you get a 0, just keep trying to send the same payload } - + #if defined (FAILURE_HANDLING) + if(millis() - timer > 75 ){ + errNotify(); + return 0; + } + #endif } //Start Writing startFastWrite(buf,len,multicast); @@ -673,6 +745,7 @@ void RF24::startFastWrite( const void* buf, uint8_t len, const bool multicast){ } +/****************************************************************************/ //Added the original startWrite back in so users can still use interrupts, ack payloads, etc //Allows the library to pass all tests @@ -681,16 +754,27 @@ void RF24::startWrite( const void* buf, uint8_t len, const bool multicast ){ // Send the payload //write_payload( buf, len ); - write_payload( buf, len, multicast?static_cast(W_TX_PAYLOAD_NO_ACK):static_cast(W_TX_PAYLOAD)) ; - + write_payload( buf, len,multicast? W_TX_PAYLOAD_NO_ACK : W_TX_PAYLOAD ) ; ce(HIGH); - ce(LOW); + #if defined(CORE_TEENSY) || !defined(ARDUINO) + delayMicroseconds(10); + #endif + ce(LOW); } -bool RF24::txStandBy(){ +/****************************************************************************/ +bool RF24::rxFifoFull(){ + return read_register(FIFO_STATUS) & _BV(RX_FULL); +} +/****************************************************************************/ + +bool RF24::txStandBy(){ + #if defined (FAILURE_HANDLING) + uint32_t timeout = millis(); + #endif while( ! (read_register(FIFO_STATUS) & _BV(TX_EMPTY)) ){ if( get_status() & _BV(MAX_RT)){ write_register(STATUS,_BV(MAX_RT) ); @@ -698,12 +782,20 @@ bool RF24::txStandBy(){ flush_tx(); //Non blocking, flush the data return 0; } + #if defined (FAILURE_HANDLING) + if( millis() - timeout > 75){ + errNotify(); + return 0; + } + #endif } ce(LOW); //Set STANDBY-I mode return 1; } +/****************************************************************************/ + bool RF24::txStandBy(uint32_t timeout){ uint32_t start = millis(); @@ -717,7 +809,15 @@ bool RF24::txStandBy(uint32_t timeout){ ce(LOW); flush_tx(); return 0; } } + #if defined (FAILURE_HANDLING) + if( millis() - start > (timeout+75)){ + errNotify(); + return 0; + } + #endif } + + ce(LOW); //Set STANDBY-I mode return 1; @@ -735,18 +835,18 @@ uint8_t RF24::getDynamicPayloadSize(void) { uint8_t result = 0; - #if defined (__arm__) - SPI.transfer(csn_pin, R_RX_PL_WID, SPI_CONTINUE ); - result = SPI.transfer(csn_pin,0xff); + #if defined (__arm__) && ! defined( CORE_TEENSY ) + _SPI.transfer(csn_pin, R_RX_PL_WID, SPI_CONTINUE ); + result = _SPI.transfer(csn_pin,0xff); #else csn(LOW); - SPI.transfer( R_RX_PL_WID ); - result = SPI.transfer(0xff); + _SPI.transfer( R_RX_PL_WID ); + result = _SPI.transfer(0xff); csn(HIGH); #endif - if(result > 32) { flush_rx(); return 0; } + if(result > 32) { flush_rx(); delay(2); return 0; } return result; } @@ -761,9 +861,12 @@ bool RF24::available(void) bool RF24::available(uint8_t* pipe_num) { - - //Check the FIFO buffer to see if data is waitng to be read - + //Check the FIFO buffer to see if data is waiting to be read + if(listeningStarted){ + while(micros() - lastAvailableCheck < 800 && listeningStarted){}; + lastAvailableCheck = micros(); + listeningStarted = 0; + } if (!( read_register(FIFO_STATUS) & _BV(RX_EMPTY) )){ // If the caller wants the pipe number, include that @@ -774,8 +877,8 @@ bool RF24::available(uint8_t* pipe_num) return 1; } - return 0; + return 0; } @@ -813,8 +916,23 @@ void RF24::openWritingPipe(uint64_t value) // Note that AVR 8-bit uC's store this LSB first, and the NRF24L01(+) // expects it LSB first too, so we're good. - write_register(RX_ADDR_P0, reinterpret_cast(&value), 5); - write_register(TX_ADDR, reinterpret_cast(&value), 5); + write_register(RX_ADDR_P0, reinterpret_cast(&value), addr_width); + write_register(TX_ADDR, reinterpret_cast(&value), addr_width); + + + //const uint8_t max_payload_size = 32; + //write_register(RX_PW_P0,min(payload_size,max_payload_size)); + write_register(RX_PW_P0,payload_size); +} + +/****************************************************************************/ +void RF24::openWritingPipe(const uint8_t *address) +{ + // Note that AVR 8-bit uC's store this LSB first, and the NRF24L01(+) + // expects it LSB first too, so we're good. + + write_register(RX_ADDR_P0,address, addr_width); + write_register(TX_ADDR, address, addr_width); //const uint8_t max_payload_size = 32; //write_register(RX_PW_P0,min(payload_size,max_payload_size)); @@ -822,7 +940,6 @@ void RF24::openWritingPipe(uint64_t value) } /****************************************************************************/ - static const uint8_t child_pipe[] PROGMEM = { RX_ADDR_P0, RX_ADDR_P1, RX_ADDR_P2, RX_ADDR_P3, RX_ADDR_P4, RX_ADDR_P5 @@ -831,24 +948,22 @@ static const uint8_t child_payload_size[] PROGMEM = { RX_PW_P0, RX_PW_P1, RX_PW_P2, RX_PW_P3, RX_PW_P4, RX_PW_P5 }; -static const uint8_t child_pipe_enable[] PROGMEM = -{ - ERX_P0, ERX_P1, ERX_P2, ERX_P3, ERX_P4, ERX_P5 -}; + void RF24::openReadingPipe(uint8_t child, uint64_t address) { // If this is pipe 0, cache the address. This is needed because // openWritingPipe() will overwrite the pipe 0 address, so // startListening() will have to restore it. - if (child == 0) - pipe0_reading_address = address; + if (child == 0){ + memcpy(pipe0_reading_address,&address,addr_width); + } if (child <= 6) { // For pipes 2-5, only write the LSB if ( child < 2 ) - write_register(pgm_read_byte(&child_pipe[child]), reinterpret_cast(&address), 5); + write_register(pgm_read_byte(&child_pipe[child]), reinterpret_cast(&address), addr_width); else write_register(pgm_read_byte(&child_pipe[child]), reinterpret_cast(&address), 1); @@ -861,6 +976,44 @@ void RF24::openReadingPipe(uint8_t child, uint64_t address) } } +/****************************************************************************/ +void RF24::setAddressWidth(uint8_t a_width){ + + if(a_width -= 2){ + write_register(SETUP_AW,a_width%4); + addr_width = (a_width%4) + 2; + } + +} + +/****************************************************************************/ + +void RF24::openReadingPipe(uint8_t child, const uint8_t *address) +{ + // If this is pipe 0, cache the address. This is needed because + // openWritingPipe() will overwrite the pipe 0 address, so + // startListening() will have to restore it. + if (child == 0){ + memcpy(pipe0_reading_address,address,addr_width); + } + if (child <= 6) + { + // For pipes 2-5, only write the LSB + if ( child < 2 ){ + write_register(pgm_read_byte(&child_pipe[child]), address, addr_width); + }else{ + write_register(pgm_read_byte(&child_pipe[child]), address, 1); + } + write_register(pgm_read_byte(&child_payload_size[child]),payload_size); + + // Note it would be more efficient to set all of the bits for all open + // pipes at once. However, I thought it would make the calling code + // more simple to do it this way. + write_register(EN_RXADDR,read_register(EN_RXADDR) | _BV(pgm_read_byte(&child_pipe_enable[child]))); + + } +} + /****************************************************************************/ void RF24::closeReadingPipe( uint8_t pipe ) @@ -868,19 +1021,18 @@ void RF24::closeReadingPipe( uint8_t pipe ) write_register(EN_RXADDR,read_register(EN_RXADDR) & ~_BV(pgm_read_byte(&child_pipe_enable[pipe]))); } - /****************************************************************************/ void RF24::toggle_features(void) { - #if defined (__arm__) - SPI.transfer(csn_pin, ACTIVATE, SPI_CONTINUE ); - SPI.transfer(csn_pin, 0x73 ); + #if defined (__arm__) && ! defined( CORE_TEENSY ) + _SPI.transfer(csn_pin, ACTIVATE, SPI_CONTINUE ); + _SPI.transfer(csn_pin, 0x73 ); #else csn(LOW); - SPI.transfer( ACTIVATE ); - SPI.transfer( 0x73 ); + _SPI.transfer( ACTIVATE ); + _SPI.transfer( 0x73 ); csn(HIGH); #endif } @@ -924,6 +1076,7 @@ void RF24::enableAckPayload(void) // write_register(DYNPD,read_register(DYNPD) | _BV(DPL_P1) | _BV(DPL_P0)); + dynamic_payloads_enabled = true; } /****************************************************************************/ @@ -948,19 +1101,19 @@ void RF24::writeAckPayload(uint8_t pipe, const void* buf, uint8_t len) uint8_t data_len = min(len,32); - #if defined (__arm__) - SPI.transfer(csn_pin, W_ACK_PAYLOAD | ( pipe & B111 ), SPI_CONTINUE); + #if defined (__arm__) && ! defined( CORE_TEENSY ) + _SPI.transfer(csn_pin, W_ACK_PAYLOAD | ( pipe & B111 ), SPI_CONTINUE); while ( data_len-- > 1 ){ - SPI.transfer(csn_pin,*current++, SPI_CONTINUE); + _SPI.transfer(csn_pin,*current++, SPI_CONTINUE); } - SPI.transfer(csn_pin,*current++); + _SPI.transfer(csn_pin,*current++); #else csn(LOW); - SPI.transfer(W_ACK_PAYLOAD | ( pipe & B111 ) ); + _SPI.transfer(W_ACK_PAYLOAD | ( pipe & B111 ) ); while ( data_len-- ) - SPI.transfer(*current++); + _SPI.transfer(*current++); csn(HIGH); @@ -1032,7 +1185,7 @@ void RF24::setPALevel(uint8_t level) uint8_t setup = read_register(RF_SETUP) & 0b11111000; if(level > 3){ // If invalid level, go to max PA - level = RF24_PA_MAX << 1 + 1; // +1 to support the SI24R1 chip extra bit + level = (RF24_PA_MAX << 1) + 1; // +1 to support the SI24R1 chip extra bit }else{ level = (level << 1) + 1; // Else set level as requested } @@ -1057,13 +1210,11 @@ bool RF24::setDataRate(rf24_datarate_e speed) uint8_t setup = read_register(RF_SETUP) ; // HIGH and LOW '00' is 1Mbs - our default - wide_band = false ; setup &= ~(_BV(RF_DR_LOW) | _BV(RF_DR_HIGH)) ; if( speed == RF24_250KBPS ) { // Must set the RF_DR_LOW to 1; RF_DR_HIGH (used to be RF_DR) is already 0 // Making it '10'. - wide_band = false ; setup |= _BV( RF_DR_LOW ) ; } else @@ -1072,14 +1223,8 @@ bool RF24::setDataRate(rf24_datarate_e speed) // Making it '01' if ( speed == RF24_2MBPS ) { - wide_band = true ; setup |= _BV(RF_DR_HIGH); } - else - { - // 1Mbs - wide_band = false ; - } } write_register(RF_SETUP,setup); @@ -1088,10 +1233,6 @@ bool RF24::setDataRate(rf24_datarate_e speed) { result = true; } - else - { - wide_band = false; - } return result; } @@ -1151,9 +1292,11 @@ void RF24::setCRCLength(rf24_crclength_e length) rf24_crclength_e RF24::getCRCLength(void) { rf24_crclength_e result = RF24_CRC_DISABLED; + uint8_t config = read_register(CONFIG) & ( _BV(CRCO) | _BV(EN_CRC)) ; - - if ( config & _BV(EN_CRC ) ) + uint8_t AA = read_register(EN_AA); + + if ( config & _BV(EN_CRC ) || AA) { if ( config & _BV(CRCO) ) result = RF24_CRC_16; @@ -1196,7 +1339,7 @@ void RF24::setRetries(uint8_t delay, uint8_t count) # define SS 3 // PA7 #endif -#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) || defined(__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) +#if defined(RF24_TINY) void SPIClass::begin() { diff --git a/libraries/MySensors/utility/RF24.h b/libraries/MySensors/utility/RF24.h index 89ed231..4934a0a 100755 --- a/libraries/MySensors/utility/RF24.h +++ b/libraries/MySensors/utility/RF24.h @@ -15,7 +15,10 @@ #ifndef __RF24_H__ #define __RF24_H__ - +#include +#if defined SOFTSPI +#include +#endif /** * Power Amplifier level. * @@ -44,14 +47,22 @@ typedef enum { RF24_CRC_DISABLED = 0, RF24_CRC_8, RF24_CRC_16 } rf24_crclength_e class RF24 { private: +#ifdef SOFTSPI + SoftSPI spi; +#elif defined (SPI_UART) + SPIUARTClass uspi; +#endif + uint8_t ce_pin; /**< "Chip Enable" pin, activates the RX or TX role */ - uint8_t csn_pin; /**< SPI Chip select */ - bool wide_band; /* 2Mbs data rate in use? */ + uint8_t csn_pin; /**< SPI Chip select */ bool p_variant; /* False for RF24L01 and true for RF24L01P */ uint8_t payload_size; /**< Fixed size of payloads */ bool dynamic_payloads_enabled; /**< Whether dynamic payloads are enabled. */ - uint64_t pipe0_reading_address; /**< Last address set on pipe 0 for reading. */ - + uint8_t pipe0_reading_address[5]; /**< Last address set on pipe 0 for reading. */ + uint8_t addr_width; /**< The address width to use - 3,4 or 5 bytes. */ + uint32_t lastAvailableCheck; /**< Limits the amount of time between reading data, only when switching between modes */ + boolean listeningStarted; /**< Var for delaying available() after start listening */ + public: /** @@ -76,9 +87,6 @@ public: * Begin operation of the chip * * Call this in setup(), before calling any other methods. - * - * @note Optimization: The radio is partially configured in PTX mode - * when begin is called to make the transition to PTX mode simpler. */ void begin(void); @@ -87,7 +95,7 @@ public: * * Be sure to call openReadingPipe() first. Do not call write() while * in this mode, without first calling stopListening(). Call - * isAvailable() to check for incoming traffic, and read() to get it. + * Available() to check for incoming traffic, and read() to get it. */ void startListening(void); @@ -95,27 +103,12 @@ public: * Stop listening for incoming messages * * Do this before calling write(). - * - * @note Optimization: The radio will be taken out of PRX mode as soon - * as listening is stopped. Enables quicker and simpler engaging of - * primary transmitter (PTX) mode. */ void stopListening(void); /** * Test whether there are bytes available to be read * - * @note Optimization: The available functino now checks the FIFO - * buffers directly for data instead of relying of interrupt flags. - * - * @note Interrupt flags will not be cleared until a payload is - * actually read from the FIFO - * - * @see txStandBy() - * @see startWrite() - * @see write() - * @see writeFast() - * * @return True if there is a payload available, false if none is */ bool available(void); @@ -128,9 +121,9 @@ public: * @note I specifically chose 'void*' as a data type to make it easier * for beginners to use. No casting needed. * - * @note Optimization: No longer boolean. Use available to - * determine if packets are available. Interrupt flags are now cleared - * during reads instead of when calling available(). + * @note No longer boolean. Use available to determine if packets are + * available. Interrupt flags are now cleared during reads instead of + * when calling available(). * * @param buf Pointer to a buffer where the data should be written * @param len Maximum number of bytes to read into the buffer @@ -139,15 +132,12 @@ public: void read( void* buf, uint8_t len ); /** - * @note Optimization: Improved performance slightly - * Write to the open writing pipe - * * Be sure to call openWritingPipe() first to set the destination * of where to write to. * * This blocks until the message is successfully acknowledged by * the receiver or the timeout/retransmit maxima are reached. In - * the current configuration, the max delay here is 60ms. + * the current configuration, the max delay here is 60-70ms. * * The maximum size of data written is the fixed payload size, see * getPayloadSize(). However, you can write less, and the remainder @@ -162,24 +152,27 @@ public: bool write( const void* buf, uint8_t len ); /** - * Open a pipe for writing + * New: Open a pipe for writing via byte array. Old addressing format retained + * for compatibility. * - * Only one pipe can be open at once, but you can change the pipe - * you'll listen to. Do not call this while actively listening. - * Remember to stopListening() first. + * Only one writing pipe can be open at once, but you can change the address + * you'll write to. Call stopListening() first. * - * Addresses are 40-bit hex values, e.g.: + * Addresses are assigned via a byte array, default is 5 byte address length + * + * Usage is exactly the same as before, except for declaring the array * * @code - * openWritingPipe(0xF0F0F0F0F0); + * uint8_t addresses[][6] = {"1Node","2Node"}; + * openWritingPipe(addresses[0]); * @endcode + * @see setAddressWidth * - * @param address The 40-bit address of the pipe to open. This can be - * any value whatsoever, as long as you are the only one writing to it - * and only one other radio is listening to it. Coordinate these pipe + * @param address The address of the pipe to open. Coordinate these pipe * addresses amongst nodes on the network. */ - void openWritingPipe(uint64_t address); + + void openWritingPipe(const uint8_t *address); /** * Open a pipe for reading @@ -188,35 +181,27 @@ public: * reading pipes, and then call startListening(). * * @see openWritingPipe + * @see setAddressWidth * - * @warning Pipes 1-5 should share the first 32 bits. - * Only the least significant byte should be unique, e.g. + * @warning Pipes 1-5 should share the same address, except the first byte. + * Only the first byte in the array should be unique, e.g. * @code - * openReadingPipe(1,0xF0F0F0F0AA); - * openReadingPipe(2,0xF0F0F0F066); + * uint8_t addresses[][6] = {"1Node","2Node"}; + * openReadingPipe(1,addresses[0]); + * openReadingPipe(2,addresses[1]); * @endcode * * @warning Pipe 0 is also used by the writing pipe. So if you open * pipe 0 for reading, and then startListening(), it will overwrite the * writing pipe. Ergo, do an openWritingPipe() again before write(). * - * @todo Enforce the restriction that pipes 1-5 must share the top 32 bits - * * @param number Which pipe# to open, 0-5. - * @param address The 40-bit address of the pipe to open. + * @param address The 24, 32 or 40 bit address of the pipe to open. */ - void openReadingPipe(uint8_t number, uint64_t address); + void openReadingPipe(uint8_t number, const uint8_t *address); - - /** - * Close a pipe after it has been previously opened. - * Can be safely called without having previously opened a pipe. - * @param pipe Which pipe # to close, 0-5. - */ - void closeReadingPipe( uint8_t pipe ) ; - - /**@}*/ + /**@}*/ /** * @name Advanced Operation * @@ -236,34 +221,41 @@ public: * FIFO buffers. This optimized version does not rely on interrupt * flags, but checks the actual FIFO buffers. * - * @note Optimization: Interrupt flags are no longer cleared when available is called, - * but will be reset only when the data is read from the FIFO buffers. - * * @param[out] pipe_num Which pipe has the payload available * @return True if there is a payload available, false if none is */ bool available(uint8_t* pipe_num); + /** + * Check if the radio needs to be read. Can be used to prevent data loss + * @@return True if all three 32-byte radio buffers are full + */ + bool rxFifoFull(); + /** * Enter low-power mode * * To return to normal power mode, either write() some data or * startListening, or powerUp(). * - * @note Optimization: The radio will never enter power down unless instructed - * by the MCU via this command. + * @note After calling startListening(), a basic radio will consume about 13.5mA + * at max PA level. + * During active transmission, the radio will consume about 11.5mA, but this will + * be reduced to 26uA (.026mA) between sending. + * In full powerDown mode, the radio will consume approximately 900nA (.0009mA) */ void powerDown(void); /** - * Leave low-power mode - making radio more responsive - * + * Leave low-power mode - required for normal radio operation after calling powerDown() + * * To return to low power mode, call powerDown(). + * @note This will take up to 5ms for maximum compatibility */ void powerUp(void) ; /** - * Write for single NOACK writes. Disables acknowledgements/autoretries for a single write. + * Write for single NOACK writes. Optionally disables acknowledgements/autoretries for a single write. * * @note enableDynamicAck() must be called to enable this feature * @@ -279,13 +271,12 @@ public: bool write( const void* buf, uint8_t len, const bool multicast ); /** - * @note Optimization: New Command * * This will not block until the 3 FIFO buffers are filled with data. * Once the FIFOs are full, writeFast will simply wait for success or * timeout, and return 1 or 0 respectively. From a user perspective, just * keep trying to send the same data. The library will keep auto retrying * the current payload using the built in functionality. - * @warning It is important to never keep the nRF24L01 in TX mode for more than 4ms at a time. If the auto + * @warning It is important to never keep the nRF24L01 in TX mode and FIFO full for more than 4ms at a time. If the auto * retransmit is enabled, the nRF24L01 is never in TX mode long enough to disobey this rule. Allow the FIFO * to clear by issuing txStandBy() or ensure appropriate time between transmissions. * @@ -325,12 +316,11 @@ public: bool writeFast( const void* buf, uint8_t len, const bool multicast ); /** - * @note Optimization: New Command * This function extends the auto-retry mechanism to any specified duration. * It will not block until the 3 FIFO buffers are filled with data. * If so the library will auto retry until a new payload is written * or the user specified timeout period is reached. - * @warning It is important to never keep the nRF24L01 in TX mode for more than 4ms at a time. If the auto + * @warning It is important to never keep the nRF24L01 in TX mode and FIFO full for more than 4ms at a time. If the auto * retransmit is enabled, the nRF24L01 is never in TX mode long enough to disobey this rule. Allow the FIFO * to clear by issuing txStandBy() or ensure appropriate time between transmissions. * @@ -355,7 +345,6 @@ public: bool writeBlocking( const void* buf, uint8_t len, uint32_t timeout ); /** - * @note Optimization: New Command * This function should be called as soon as transmission is finished to * drop the radio back to STANDBY-I mode. If not issued, the radio will * remain in STANDBY-II mode which, per the data sheet, is not a recommended @@ -383,8 +372,6 @@ public: bool txStandBy(); /** - * @note Optimization: New Command - * * This function allows extended blocking and auto-retries per a user defined timeout * @code * Fully Blocking Example: @@ -408,8 +395,7 @@ public: * The next time a message is received on @p pipe, the data in @p buf will * be sent back in the acknowledgement. * - * @warning According to the data sheet, only three of these can be pending - * at any time as there are only 3 FIFO buffers. + * @warning Only three of these can be pending at any time as there are only 3 FIFO buffers. * * @param pipe Which pipe# (typically 1-5) will get this response. * @param buf Pointer to data that is sent @@ -434,14 +420,10 @@ public: /** * Determine if an ack payload was received in the most recent call to - * write(). + * write(). The regular available() can also be used. * * Call read() to retrieve the ack payload. * - * @note Optimization: Calling this function NO LONGER clears the interrupt - * flag. The new functionality checks the RX FIFO buffer for an ACK payload - * instead of relying on interrupt flags.Reading the payload will clear the flags. - * * @return True if an ack payload is available. */ bool isAckPayloadAvailable(void); @@ -464,7 +446,7 @@ public: * @note Optimization: This function now leaves the CE pin high, so the radio * will remain in TX or STANDBY-II Mode until a txStandBy() command is issued. * This allows the chip to be used to its full potential in TX mode. - * @warning It is important to never keep the nRF24L01 in TX mode for more than 4ms at a time. If the auto + * @warning It is important to never keep the nRF24L01 in TX mode with FIFO full for more than 4ms at a time. If the auto * retransmit is enabled, the nRF24L01 is never in TX mode long enough to disobey this rule. Allow the FIFO * to clear by issuing txStandBy() or ensure appropriate time between transmissions. * @@ -490,10 +472,6 @@ public: * Just like write(), but it returns immediately. To find out what happened * to the send, catch the IRQ and then call whatHappened(). * - * @note Optimization: This function again behaves as it did previously for backwards-compatibility. - * with user code. The library uses startFastWrite() internally. - * This is mainly used for single-payload transactions. - * * @see write() * @see writeFast() * @see startFastWrite() @@ -511,8 +489,6 @@ public: void startWrite( const void* buf, uint8_t len, const bool multicast ); /** - * Optimization: New Command - * * This function is mainly used internally to take advantage of the auto payload * re-use functionality of the chip, but can be beneficial to users as well. * @@ -584,7 +560,23 @@ public: * @param rx_ready Mask payload received interrupts */ void maskIRQ(bool tx_ok,bool tx_fail,bool rx_ready); + + /** + * Set the address width from 3 to 5 bytes (24, 32 or 40 bit) + * + * @param a_width The address width to use: 3,4 or 5 + */ + void setAddressWidth(uint8_t a_width); + + + /** + * Close a pipe after it has been previously opened. + * Can be safely called without having previously opened a pipe. + * @param pipe Which pipe # to close, 0-5. + */ + void closeReadingPipe( uint8_t pipe ) ; + /**@}*/ /**@}*/ @@ -642,7 +634,7 @@ public: * For dynamic payloads, this pulls the size of the payload off * the chip * - * @note Optimization: Corrupt packets are now detected and flushed per the + * @note Corrupt packets are now detected and flushed per the * manufacturer. * * @return Payload length of last-received dynamic payload @@ -655,7 +647,7 @@ public: * Ack payloads are a handy way to return data back to senders without * manually changing the radio modes on both units. * - * @see examples/pingpair_pl/pingpair_pl.pde + * @see examples/GettingStarted_CallResponse/GettingStarted_CallResponse.ino */ void enableAckPayload(void); @@ -759,6 +751,73 @@ public: * */ void disableCRC( void ) ; + + /** + * Enable error detection by un-commenting #define FAILURE_HANDLING in RF24_config.h + * If a failure has been detected, it usually indicates a hardware issue. By default the library + * will cease operation when a failure is detected. + * This should allow advanced users to detect and resolve intermittent hardware issues. + * + * In most cases, the radio must be re-enabled via radio.begin(); and the appropriate settings + * applied after a failure occurs, if wanting to re-enable the device immediately. + * + * Usage: (Failure handling must be enabled per above) + * @code + * if(radio.failureDetected){ + * radio.begin(); // Attempt to re-configure the radio with defaults + * radio.failureDetected = 0; // Reset the detection value + * radio.openWritingPipe(addresses[1]); // Re-configure pipe addresses + * radio.openReadingPipe(1,addresses[0]); + * report_failure(); // Blink leds, send a message, etc. to indicate failure + * } + * @endcode + */ + //#if defined (FAILURE_HANDLING) + bool failureDetected; + //#endif + + + /**@}*/ + /** + * @name Deprecated + * + * Methods provided for backwards compabibility. + */ + /**@{*/ + + + /** + * Open a pipe for reading + * @note For compatibility with old code only, see new function + * + * @warning Pipes 1-5 should share the first 32 bits. + * Only the least significant byte should be unique, e.g. + * @code + * openReadingPipe(1,0xF0F0F0F0AA); + * openReadingPipe(2,0xF0F0F0F066); + * @endcode + * + * @warning Pipe 0 is also used by the writing pipe. So if you open + * pipe 0 for reading, and then startListening(), it will overwrite the + * writing pipe. Ergo, do an openWritingPipe() again before write(). + * + * @param number Which pipe# to open, 0-5. + * @param address The 40-bit address of the pipe to open. + */ + void openReadingPipe(uint8_t number, uint64_t address); + + /** + * Open a pipe for writing + * @note For compatibility with old code only, see new function + * Addresses are 40-bit hex values, e.g.: + * + * @code + * openWritingPipe(0xF0F0F0F0F0); + * @endcode + * + * @param address The 40-bit address of the pipe to open. + */ + void openWritingPipe(uint64_t address); private: @@ -863,7 +922,8 @@ private: * @return Current value of status register */ uint8_t get_status(void); -#if !defined (MINIMAL) + + #if !defined (MINIMAL) /** * Decode and print the given status to stdout * @@ -921,6 +981,11 @@ private: */ uint8_t spiTrans(uint8_t cmd); + + #if defined (FAILURE_HANDLING) + void errNotify(void); + #endif + /**@}*/ }; @@ -1014,6 +1079,18 @@ private: * ping/pong cycle, and the receiver sleeps between payloads.
*/ + /** + * @example rf24ping85.ino + * New: Contributed by https://github.com/tong67
+ * This is an example of how to use the RF24 class to communicate with ATtiny85 and other node.
+ */ + + /** + * @example timingSearch3pin.ino + * New: Contributed by https://github.com/tong67
+ * This is an example of how to determine the correct timing for ATtiny when using only 3-pins + */ + /** * @example pingpair_dyn.ino * @@ -1071,7 +1148,7 @@ private: * * This library fork is designed to be... * @li More compliant with the manufacturer specified operation of the chip, while allowing advanced users - * to work outside the reccommended operation. + * to work outside the recommended operation. * @li Utilize the capabilities of the radio to their full potential via Arduino * @li More reliable, responsive and feature rich * @li Easy for beginners to use, with well documented examples and features @@ -1079,25 +1156,30 @@ private: * * @section News News * - * April 2014: Official Release: Still some work to do, but most benefits have been realized
+ * Main changes:
* - The library has been tweaked to allow full use of the FIFO buffers for maximum transfer speeds + * - Many issues and bugs have been resolved * - Changes to read() and available () functionality have increased reliability and response * - Extended timeout periods have been added to aid in noisy or otherwise unreliable environments * - Delays have been removed where possible to ensure maximum efficiency * - Full Due support with extended SPI functions - * - ATTiny 24/44/84 25/45/85 now supported. + * - ATTiny now supported. + * - Raspberry Pi now supported * - More! See the links below and class documentation for more info. * - * If issues are discovered with the documentation, please report them here: here + * If issues are discovered with the documentation, please report them here * @section Useful Useful References * * Please refer to: * * @li Documentation Main Page * @li RF24 Class Documentation + * @li My Blog: RF24 Optimization Overview * @li Source Code - * @li Downloads Page + * @li Download * @li Chip Datasheet + * @li RF24Network: Easily create a home or long-range RF24 sensor network + * @li My Blog: RF24 Wireless Audio * @li Original Library * * This chip uses the SPI bus, plus two chip control pins. Remember that pin 10 must still remain an output, or @@ -1108,13 +1190,13 @@ private: * Most standard Arduino based boards are supported: * - ATMega 328 based boards (Uno, Nano, etc) * - Mega Boards (1280, 2560, etc) - * - ARM based boards (Arduino Due) Note: Do not include printf.h or use printf begin. This functionality is already present. Must use one of the - * hardware SS/CSN pins as extended SPI methods are used. + * - Arduino Due: Must use one of the hardware SS/CSN pins as extended SPI methods are used. * Initial Due support taken from https://github.com/mcrosson/RF24/tree/due - * - ATTiny board support added from https://github.com/jscrane/RF24 + * - ATTiny board support initially added from https://github.com/jscrane/RF24 * Note: ATTiny support is built into the library. Do not include SPI.h.
- * ATTiny 85: D0(pin 5): MISO, D1(pin6) MOSI, D2(pin7) SCK, D3(pin2):CSN/SS, D4(pin3): CE
- * ATTiny 84: PA6:MISO, PA5:MOSI, PA4:SCK, PA7:CSN/SS, CE as desired
+ * See the included examples for more info on using ATTiny with RF24
+ * See https://github.com/TCWORLD/ATTinyCore/tree/master/PCREL%20Patch%20for%20GCC for ATTiny patch + * - Raspberry Pi Support: See the readme at https://github.com/TMRh20/RF24/tree/master/RPi/RF24 * * @section More More Information * @@ -1122,7 +1204,7 @@ private: * * @li Project blog: * @li TMRh20.blogspot.com - * @li RF24 Wireless Audio Library (Coming Soon) + * @li RF24 Wireless Audio Library * @li Optimized RF24 Network Layer * @li ManiacBug on GitHub (Original Library Author) */ diff --git a/libraries/MySensors/utility/RF24_config.h b/libraries/MySensors/utility/RF24_config.h index 55962f1..7ee69e3 100755 --- a/libraries/MySensors/utility/RF24_config.h +++ b/libraries/MySensors/utility/RF24_config.h @@ -20,27 +20,65 @@ #include - //TMRh20: - #define MINIMAL // saves 432 bytes! - + /*** USER DEFINES: ***/ + //#define FAILURE_HANDLING + //#define SERIAL_DEBUG + //#define MINIMAL + //#define SPI_UART // Requires library from https://github.com/TMRh20/Sketches/tree/master/SPI_UART + //#define SOFTSPI // Requires library from https://github.com/greiman/DigitalIO + /**********************/ + // Define _BV for non-Arduino platforms and for Arduino DUE -#if defined (ARDUINO) - #include +#if defined (ARDUINO) && !defined (__arm__) + #if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) || defined(__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) + #define RF24_TINY + #define _SPI SPI + #else + #if defined SPI_UART + #include + #define _SPI uspi + #elif defined SOFTSPI + // change these pins to your liking + // + const uint8_t SOFT_SPI_MISO_PIN = 16; + const uint8_t SOFT_SPI_MOSI_PIN = 15; + const uint8_t SOFT_SPI_SCK_PIN = 14; + const uint8_t SPI_MODE = 0; + #define _SPI spi + + #else + #include + #define _SPI SPI + #endif + #endif #else - #include - #include - #include - extern HardwareSPI SPI; - #define _BV(x) (1<<(x)) - #endif + #include + #include + #include - #undef SERIAL_DEBUG + #if defined(__arm__) || defined (CORE_TEENSY) + #include + #endif + + #if !defined(CORE_TEENSY) + #define _BV(x) (1<<(x)) + #if !defined(__arm__) + extern HardwareSPI SPI; + #endif + #else + #define printf Serial.printf + #endif + + #define _SPI SPI +#endif + + #ifdef SERIAL_DEBUG #define IF_SERIAL_DEBUG(x) ({x;}) #else #define IF_SERIAL_DEBUG(x) - #if defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny85__) + #if defined(RF24_TINY) #define printf_P(...) #endif #endif @@ -48,7 +86,7 @@ // Avoid spurious warnings // Arduino DUE is arm and uses traditional PROGMEM constructs #if 1 -#if ! defined( NATIVE ) && defined( ARDUINO ) && ! defined(__arm__) +#if ! defined( NATIVE ) && defined( ARDUINO ) && ! defined(__arm__) && ! defined( CORE_TEENSY3 ) #undef PROGMEM #define PROGMEM __attribute__(( section(".progmem.data") )) #undef PSTR @@ -68,20 +106,25 @@ #define pgm_read_byte(addr) (*(const unsigned char *)(addr)) #endif + +#if !defined ( CORE_TEENSY ) typedef uint16_t prog_uint16_t; #define PSTR(x) (x) #define printf_P printf #define strlen_P strlen #define PROGMEM #define pgm_read_word(p) (*(p)) +#endif + #define PRIPSTR "%s" + #endif // ATTiny support code is from https://github.com/jscrane/RF24 -#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) || defined(__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) +#if defined(RF24_TINY) #include #include #include diff --git a/libraries/UIPEthernet/README b/libraries/UIPEthernet/README index 0fb5d67..ec51f2d 100644 --- a/libraries/UIPEthernet/README +++ b/libraries/UIPEthernet/README @@ -1,4 +1,4 @@ -This is UIPEthernet version 1.01 +This is UIPEthernet version 1.07 An plugin-replacement of the stock Arduino Ethernet library for ENC28J60 shields and breakout boards. Full support for persistent (streaming) TCP-connections and UDP (Client and Server each), ARP, ICMP, DHCP and DNS. Just include 'UIPEthernet.h' instead of 'Ethernet.h' and use all your code written for the stock Arduino Ethernet lib! @@ -26,7 +26,9 @@ On a Mac, you will want to create a folder named "libraries" in in the "Document $ cd ~/Documents/Arduino/libraries $ git clone https://github.com/ntruchsess/arduino_uip UIPEthernet -Or you download the zipped version of the library from https://github.com/ntruchsess/arduino_uip/archive/master.zip, create a directory [path to Arduino distribution]\libraries\UIPEthernet and put the contents of the zip-file there. +Or you download the zipped version of the library from https://github.com/ntruchsess/arduino_uip/releases, and copy the contained directory UIPEthernet to [path to Arduino distribution]\libraries\UIPEthernet. + +If you are running Arduino-IDE 1.5.x use release-version 1.57 or checkout branch 'Arduino_1.5.5' Additional information can be found on the Arduino website: http://www.arduino.cc/en/Hacking/Libraries diff --git a/libraries/UIPEthernet/UIPClient.cpp b/libraries/UIPEthernet/UIPClient.cpp index 73daaba..ffbb3e1 100644 --- a/libraries/UIPEthernet/UIPClient.cpp +++ b/libraries/UIPEthernet/UIPClient.cpp @@ -49,19 +49,22 @@ UIPClient::UIPClient(uip_userdata_t* conn_data) : int UIPClient::connect(IPAddress ip, uint16_t port) { + stop(); uip_ipaddr_t ipaddr; uip_ip_addr(ipaddr, ip); struct uip_conn* conn = uip_connect(&ipaddr, htons(port)); if (conn) { +#if UIP_CONNECT_TIMEOUT > 0 + int32_t timeout = millis() + 1000 * UIP_CONNECT_TIMEOUT; +#endif while((conn->tcpstateflags & UIP_TS_MASK) != UIP_CLOSED) { - UIPEthernet.tick(); + UIPEthernetClass::tick(); if ((conn->tcpstateflags & UIP_TS_MASK) == UIP_ESTABLISHED) { data = (uip_userdata_t*) conn->appstate; #ifdef UIPETHERNET_DEBUG_CLIENT - Serial.print(F("connected, state: ")); Serial.print(data->state); Serial.print(F(", first packet in: ")); @@ -69,6 +72,13 @@ UIPClient::connect(IPAddress ip, uint16_t port) #endif return 1; } +#if UIP_CONNECT_TIMEOUT > 0 + if (((int32_t)(millis() - timeout)) > 0) + { + conn->tcpstateflags = UIP_CLOSED; + break; + } +#endif } } return 0; @@ -83,7 +93,7 @@ UIPClient::connect(const char *host, uint16_t port) DNSClient dns; IPAddress remote_addr; - dns.begin(UIPEthernet.dnsServerIP()); + dns.begin(UIPEthernetClass::_dnsServerAddress); ret = dns.getHostByName(host, remote_addr); if (ret == 1) { return connect(remote_addr, port); @@ -95,10 +105,14 @@ UIPClient::connect(const char *host, uint16_t port) void UIPClient::stop() { - if (data) + if (data && data->state) { +#ifdef UIPETHERNET_DEBUG_CLIENT + Serial.println(F("before stop(), with data")); + _dumpAllData(); +#endif _flushBlocks(&data->packets_in[0]); - if (data->state & UIP_CLIENT_CLOSED) + if (data->state & UIP_CLIENT_REMOTECLOSED) { data->state = 0; } @@ -106,9 +120,19 @@ UIPClient::stop() { data->state |= UIP_CLIENT_CLOSE; } +#ifdef UIPETHERNET_DEBUG_CLIENT + Serial.println(F("after stop()")); + _dumpAllData(); +#endif } +#ifdef UIPETHERNET_DEBUG_CLIENT + else + { + Serial.println(F("stop(), data: NULL")); + } +#endif data = NULL; - UIPEthernet.tick(); + UIPEthernetClass::tick(); } uint8_t @@ -125,8 +149,8 @@ UIPClient::operator==(const UIPClient& rhs) UIPClient::operator bool() { - UIPEthernet.tick(); - return data && (!(data->state & UIP_CLIENT_CLOSED) || data->packets_in[0] != NOBLOCK); + UIPEthernetClass::tick(); + return data && (!(data->state & UIP_CLIENT_REMOTECLOSED) || data->packets_in[0] != NOBLOCK); } size_t @@ -150,15 +174,15 @@ UIPClient::_write(uip_userdata_t* u, const uint8_t *buf, size_t size) uint16_t attempts = UIP_ATTEMPTS_ON_WRITE; #endif repeat: - UIPEthernet.tick(); - if (u && !(u->state & (UIP_CLIENT_CLOSE | UIP_CLIENT_CLOSED))) + UIPEthernetClass::tick(); + if (u && !(u->state & (UIP_CLIENT_CLOSE | UIP_CLIENT_REMOTECLOSED))) { - memhandle* p = _currentBlock(&u->packets_out[0]); - if (*p == NOBLOCK) + uint8_t p = _currentBlock(&u->packets_out[0]); + if (u->packets_out[p] == NOBLOCK) { newpacket: - *p = UIPEthernet.network.allocBlock(UIP_SOCKET_DATALEN); - if (*p == NOBLOCK) + u->packets_out[p] = Enc28J60Network::allocBlock(UIP_SOCKET_DATALEN); + if (u->packets_out[p] == NOBLOCK) { #if UIP_ATTEMPTS_ON_WRITE > 0 if ((--attempts)>0) @@ -172,7 +196,7 @@ newpacket: } #ifdef UIPETHERNET_DEBUG_CLIENT Serial.print(F("UIPClient.write: writePacket(")); - Serial.print(*p); + Serial.print(u->packets_out[p]); Serial.print(F(") pos: ")); Serial.print(u->out_pos); Serial.print(F(", buf[")); @@ -183,12 +207,12 @@ newpacket: Serial.write((uint8_t*)buf+size-remain,remain); Serial.println(F("'")); #endif - written = UIPEthernet.network.writePacket(*p,u->out_pos,(uint8_t*)buf+size-remain,remain); + written = Enc28J60Network::writePacket(u->packets_out[p],u->out_pos,(uint8_t*)buf+size-remain,remain); remain -= written; u->out_pos+=written; if (remain > 0) { - if (p==&u->packets_out[UIP_SOCKET_NUMPACKETS-1]) + if (p == UIP_SOCKET_NUMPACKETS-1) { #if UIP_ATTEMPTS_ON_WRITE > 0 if ((--attempts)>0) @@ -218,15 +242,10 @@ UIPClient::available() int UIPClient::_available(uip_userdata_t *u) { - memhandle* p = &u->packets_in[0]; - if (*p == NOBLOCK) - return 0; int len = 0; - for(memhandle* end = p+UIP_SOCKET_NUMPACKETS; p < end; p++) + for (uint8_t i = 0; i < UIP_SOCKET_NUMPACKETS; i++) { - if(*p == NOBLOCK) - break; - len += UIPEthernet.network.blockSize(*p); + len += Enc28J60Network::blockSize(u->packets_in[i]); } return len; } @@ -236,23 +255,22 @@ UIPClient::read(uint8_t *buf, size_t size) { if (*this) { - int remain = size; - memhandle* p = &data->packets_in[0]; - if (*p == NOBLOCK) + uint16_t remain = size; + if (data->packets_in[0] == NOBLOCK) return 0; - int read; + uint16_t read; do { - read = UIPEthernet.network.readPacket(*p,0,buf+size-remain,remain); - if (read == UIPEthernet.network.blockSize(*p)) + read = Enc28J60Network::readPacket(data->packets_in[0],0,buf+size-remain,remain); + if (read == Enc28J60Network::blockSize(data->packets_in[0])) { remain -= read; - _eatBlock(p); - if (uip_stopped(&uip_conns[data->state & UIP_CLIENT_SOCKETS]) && !(data->state & (UIP_CLIENT_CLOSE | UIP_CLIENT_CLOSED))) + _eatBlock(&data->packets_in[0]); + if (uip_stopped(&uip_conns[data->state & UIP_CLIENT_SOCKETS]) && !(data->state & (UIP_CLIENT_CLOSE | UIP_CLIENT_REMOTECLOSED))) data->state |= UIP_CLIENT_RESTART; - if (*p == NOBLOCK) + if (data->packets_in[0] == NOBLOCK) { - if (data->state & UIP_CLIENT_CLOSED) + if (data->state & UIP_CLIENT_REMOTECLOSED) { data->state = 0; data = NULL; @@ -262,7 +280,7 @@ UIPClient::read(uint8_t *buf, size_t size) } else { - UIPEthernet.network.resizeBlock(*p,read); + Enc28J60Network::resizeBlock(data->packets_in[0],read); break; } } @@ -286,11 +304,10 @@ UIPClient::peek() { if (*this) { - memhandle p = data->packets_in[0]; - if (p != NOBLOCK) + if (data->packets_in[0] != NOBLOCK) { uint8_t c; - UIPEthernet.network.readPacket(p,0,&c,1); + Enc28J60Network::readPacket(data->packets_in[0],0,&c,1); return c; } } @@ -308,26 +325,21 @@ UIPClient::flush() void uipclient_appcall(void) -{ - UIPClient::uip_callback(); -} - -void -UIPClient::uip_callback() { uip_userdata_t *u = (uip_userdata_t*)uip_conn->appstate; if (!u && uip_connected()) { #ifdef UIPETHERNET_DEBUG_CLIENT Serial.println(F("UIPClient uip_connected")); + UIPClient::_dumpAllData(); #endif - u = (uip_userdata_t*) _allocateData(); + u = (uip_userdata_t*) UIPClient::_allocateData(); if (u) { uip_conn->appstate = u; #ifdef UIPETHERNET_DEBUG_CLIENT Serial.print(F("UIPClient allocated state: ")); - Serial.println(u->state); + Serial.println(u->state,BIN); #endif } #ifdef UIPETHERNET_DEBUG_CLIENT @@ -343,33 +355,24 @@ UIPClient::uip_callback() Serial.print(F("UIPClient uip_newdata, uip_len:")); Serial.println(uip_len); #endif - if (uip_len && !(u->state & (UIP_CLIENT_CLOSE | UIP_CLIENT_CLOSED))) + if (uip_len && !(u->state & (UIP_CLIENT_CLOSE | UIP_CLIENT_REMOTECLOSED))) { - memhandle newPacket = UIPEthernet.network.allocBlock(uip_len); + memhandle newPacket = Enc28J60Network::allocBlock(uip_len); if (newPacket != NOBLOCK) { - memhandle* p = _currentBlock(&u->packets_in[0]); - //if it's not the first packet - if (*p != NOBLOCK) + for (uint8_t i=0; i < UIP_SOCKET_NUMPACKETS; i++) { - uint8_t slot = p - &u->packets_in[0]; - if (slot < UIP_SOCKET_NUMPACKETS-1) - p++; - //if this is the last slot stop this connection - if (slot >= UIP_SOCKET_NUMPACKETS-2) + if (u->packets_in[i] == NOBLOCK) { - uip_stop(); - //if there's no free slot left omit loosing this packet and (again) stop this connection - if (slot == UIP_SOCKET_NUMPACKETS-1) - goto reject_newdata; + if (i == UIP_SOCKET_NUMPACKETS-1) + uip_stop(); + Enc28J60Network::copyPacket(newPacket,0,UIPEthernetClass::in_packet,((uint8_t*)uip_appdata)-uip_buf,uip_len); + u->packets_in[i] = newPacket; + goto finish_newdata; } } - UIPEthernet.network.copyPacket(newPacket,0,UIPEthernet.in_packet,((uint8_t*)uip_appdata)-uip_buf,uip_len); - *p = newPacket; - goto finish_newdata; } -reject_newdata: - UIPEthernet.packetstate &= ~UIPETHERNET_FREEPACKET; + UIPEthernetClass::packetstate &= ~UIPETHERNET_FREEPACKET; uip_stop(); } } @@ -384,17 +387,22 @@ finish_newdata: { #ifdef UIPETHERNET_DEBUG_CLIENT Serial.println(F("UIPClient uip_closed")); + UIPClient::_dumpAllData(); #endif // drop outgoing packets not sent yet: - _flushBlocks(&u->packets_out[0]); + UIPClient::_flushBlocks(&u->packets_out[0]); if (u->packets_in[0] != NOBLOCK) { ((uip_userdata_closed_t *)u)->lport = uip_conn->lport; - u->state |= UIP_CLIENT_CLOSED; + u->state |= UIP_CLIENT_REMOTECLOSED; } else u->state = 0; // disassociate appdata. +#ifdef UIPETHERNET_DEBUG_CLIENT + Serial.println(F("after UIPClient uip_closed")); + UIPClient::_dumpAllData(); +#endif uip_conn->appstate = NULL; goto nodata; } @@ -403,34 +411,33 @@ finish_newdata: #ifdef UIPETHERNET_DEBUG_CLIENT Serial.println(F("UIPClient uip_acked")); #endif - _eatBlock(&u->packets_out[0]); + UIPClient::_eatBlock(&u->packets_out[0]); } if (uip_poll() || uip_rexmit()) { #ifdef UIPETHERNET_DEBUG_CLIENT //Serial.println(F("UIPClient uip_poll")); #endif - memhandle p = u->packets_out[0]; - if (p != NOBLOCK) + if (u->packets_out[0] != NOBLOCK) { if (u->packets_out[1] == NOBLOCK) { uip_len = u->out_pos; if (uip_len > 0) { - UIPEthernet.network.resizeBlock(p,0,uip_len); + Enc28J60Network::resizeBlock(u->packets_out[0],0,uip_len); } } else - uip_len = UIPEthernet.network.blockSize(p); + uip_len = Enc28J60Network::blockSize(u->packets_out[0]); if (uip_len > 0) { - UIPEthernet.uip_hdrlen = ((uint8_t*)uip_appdata)-uip_buf; - UIPEthernet.uip_packet = UIPEthernet.network.allocBlock(UIPEthernet.uip_hdrlen+uip_len); - if (UIPEthernet.uip_packet != NOBLOCK) + UIPEthernetClass::uip_hdrlen = ((uint8_t*)uip_appdata)-uip_buf; + UIPEthernetClass::uip_packet = Enc28J60Network::allocBlock(UIPEthernetClass::uip_hdrlen+uip_len); + if (UIPEthernetClass::uip_packet != NOBLOCK) { - UIPEthernet.network.copyPacket(UIPEthernet.uip_packet,UIPEthernet.uip_hdrlen,p,0,uip_len); - UIPEthernet.packetstate |= UIPETHERNET_SENDPACKET; + Enc28J60Network::copyPacket(UIPEthernetClass::uip_packet,UIPEthernetClass::uip_hdrlen,u->packets_out[0],0,uip_len); + UIPEthernetClass::packetstate |= UIPETHERNET_SENDPACKET; uip_send(uip_appdata,uip_len); } return; @@ -441,23 +448,30 @@ finish_newdata: if (u->state & UIP_CLIENT_CLOSE) { #ifdef UIPETHERNET_DEBUG_CLIENT - Serial.print(F("UIPClient state UIP_CLIENT_CLOSE")); + Serial.println(F("UIPClient state UIP_CLIENT_CLOSE")); + UIPClient::_dumpAllData(); #endif if (u->packets_out[0] == NOBLOCK) { -#ifdef UIPETHERNET_DEBUG_CLIENT - Serial.print(F("UIPClient state UIP_CLIENT_CLOSE -> free userdata")); -#endif u->state = 0; uip_conn->appstate = NULL; uip_close(); +#ifdef UIPETHERNET_DEBUG_CLIENT + Serial.println(F("no blocks out -> free userdata")); + UIPClient::_dumpAllData(); +#endif } else - uip_stop(); + { + uip_stop(); +#ifdef UIPETHERNET_DEBUG_CLIENT + Serial.println(F("blocks outstanding transfer -> uip_stop()")); +#endif + } } } nodata: - UIPEthernet.uip_packet = NOBLOCK; + UIPEthernetClass::uip_packet = NOBLOCK; uip_len=0; } @@ -477,13 +491,15 @@ UIPClient::_allocateData() return NULL; } -memhandle* +uint8_t UIPClient::_currentBlock(memhandle* block) { - for(memhandle* end = block+UIP_SOCKET_NUMPACKETS-1; block < end; block++) - if(*(block+1) == NOBLOCK) - break; - return block; + for (uint8_t i = 1; i < UIP_SOCKET_NUMPACKETS; i++) + { + if (block[i] == NOBLOCK) + return i-1; + } + return UIP_SOCKET_NUMPACKETS-1; } void @@ -493,19 +509,20 @@ UIPClient::_eatBlock(memhandle* block) memhandle* start = block; Serial.print(F("eatblock(")); Serial.print(*block); - Serial.print("): "); + Serial.print(F("): ")); for (uint8_t i = 0; i < UIP_SOCKET_NUMPACKETS; i++) { Serial.print(start[i]); - Serial.print(" "); + Serial.print(F(" ")); } - Serial.print("-> "); + Serial.print(F("-> ")); #endif - memhandle* end = block+(UIP_SOCKET_NUMPACKETS-1); - UIPEthernet.network.freeBlock(*block); - while(block < end) - *block = *((block++)+1); - *end = NOBLOCK; + Enc28J60Network::freeBlock(block[0]); + for (uint8_t i = 0; i < UIP_SOCKET_NUMPACKETS-1; i++) + { + block[i] = block[i+1]; + } + block[UIP_SOCKET_NUMPACKETS-1] = NOBLOCK; #ifdef UIPETHERNET_DEBUG_CLIENT for (uint8_t i = 0; i < UIP_SOCKET_NUMPACKETS; i++) { @@ -519,15 +536,46 @@ UIPClient::_eatBlock(memhandle* block) void UIPClient::_flushBlocks(memhandle* block) { - for(memhandle* end = block+UIP_SOCKET_NUMPACKETS; block < end; block++) + for (uint8_t i = 0; i < UIP_SOCKET_NUMPACKETS; i++) { - if(*block != NOBLOCK) - { - UIPEthernet.network.freeBlock(*block); - *block = NOBLOCK; - } - else - break; + Enc28J60Network::freeBlock(block[i]); + block[i] = NOBLOCK; } } +#ifdef UIPETHERNET_DEBUG_CLIENT +void +UIPClient::_dumpAllData() { + for (uint8_t i=0; i < UIP_CONNS; i++) + { + Serial.print(F("UIPClient::all_data[")); + Serial.print(i); + Serial.print(F("], state:")); + Serial.println(all_data[i].state, BIN); + Serial.print(F("packets_in: ")); + for (uint8_t j=0; j < UIP_SOCKET_NUMPACKETS; j++) + { + Serial.print(all_data[i].packets_in[j]); + Serial.print(F(" ")); + } + Serial.println(); + if (all_data[i].state & UIP_CLIENT_REMOTECLOSED) + { + Serial.print(F("state remote closed, local port: ")); + Serial.println(htons(((uip_userdata_closed_t *)(&all_data[i]))->lport)); + } + else + { + Serial.print(F("packets_out: ")); + for (uint8_t j=0; j < UIP_SOCKET_NUMPACKETS; j++) + { + Serial.print(all_data[i].packets_out[j]); + Serial.print(F(" ")); + } + Serial.println(); + Serial.print(F("out_pos: ")); + Serial.println(all_data[i].out_pos); + } + } +} +#endif diff --git a/libraries/UIPEthernet/UIPClient.h b/libraries/UIPEthernet/UIPClient.h index 0d8beab..ac601da 100644 --- a/libraries/UIPEthernet/UIPClient.h +++ b/libraries/UIPEthernet/UIPClient.h @@ -21,6 +21,7 @@ #define UIPCLIENT_H #include "ethernet_comp.h" +#include "Print.h" #import "Client.h" #import "utility/mempool.h" @@ -36,9 +37,9 @@ extern "C" { #define UIP_CLIENT_CONNECTED 0x10 #define UIP_CLIENT_CLOSE 0x20 -#define UIP_CLIENT_CLOSED 0x40 +#define UIP_CLIENT_REMOTECLOSED 0x40 #define UIP_CLIENT_RESTART 0x80 -#define UIP_CLIENT_STATEFLAGS (UIP_CLIENT_CONNECTED | UIP_CLIENT_CLOSE | UIP_CLIENT_CLOSED | UIP_CLIENT_RESTART) +#define UIP_CLIENT_STATEFLAGS (UIP_CLIENT_CONNECTED | UIP_CLIENT_CLOSE | UIP_CLIENT_REMOTECLOSED | UIP_CLIENT_RESTART) #define UIP_CLIENT_SOCKETS ~UIP_CLIENT_STATEFLAGS typedef uint8_t uip_socket_ptr; @@ -76,6 +77,8 @@ public: int peek(); void flush(); + using Print::write; + private: UIPClient(struct uip_conn *_conn); UIPClient(uip_userdata_t* conn_data); @@ -84,21 +87,23 @@ private: static uip_userdata_t all_data[UIP_CONNS]; static uip_userdata_t* _allocateData(); - static uip_userdata_t* _getData(struct uip_conn * conn); - + static size_t _write(uip_userdata_t *,const uint8_t *buf, size_t size); static int _available(uip_userdata_t *); - static memhandle * _currentBlock(memhandle* blocks); + static uint8_t _currentBlock(memhandle* blocks); static void _eatBlock(memhandle* blocks); static void _flushBlocks(memhandle* blocks); +#ifdef UIPETHERNET_DEBUG_CLIENT + static void _dumpAllData(); +#endif + friend class UIPEthernetClass; friend class UIPServer; friend void uipclient_appcall(void); - static void uip_callback(); }; #endif diff --git a/libraries/UIPEthernet/UIPEthernet.cpp b/libraries/UIPEthernet/UIPEthernet.cpp index ca59e93..ea02c97 100644 --- a/libraries/UIPEthernet/UIPEthernet.cpp +++ b/libraries/UIPEthernet/UIPEthernet.cpp @@ -25,6 +25,8 @@ #include "HardwareSerial.h" #endif +#include "UIPUdp.h" + extern "C" { #include "utility/uip-conf.h" @@ -35,18 +37,24 @@ extern "C" #define ETH_HDR ((struct uip_eth_hdr *)&uip_buf[0]) +memhandle UIPEthernetClass::in_packet(NOBLOCK); +memhandle UIPEthernetClass::uip_packet(NOBLOCK); +uint8_t UIPEthernetClass::uip_hdrlen(0); +uint8_t UIPEthernetClass::packetstate(0); + +IPAddress UIPEthernetClass::_dnsServerAddress; +DhcpClass* UIPEthernetClass::_dhcp(NULL); + +struct uip_timer UIPEthernetClass::periodic_timer; + // Because uIP isn't encapsulated within a class we have to use global // variables, so we can only have one TCP/IP stack per program. -UIPEthernetClass::UIPEthernetClass() : - in_packet(NOBLOCK), - uip_packet(NOBLOCK), - uip_hdrlen(0), - packetstate(0), - _dhcp(NULL) +UIPEthernetClass::UIPEthernetClass() { } +#if UIP_UDP int UIPEthernetClass::begin(const uint8_t* mac) { @@ -66,6 +74,7 @@ UIPEthernetClass::begin(const uint8_t* mac) } return ret; } +#endif void UIPEthernetClass::begin(const uint8_t* mac, IPAddress ip) @@ -100,6 +109,7 @@ UIPEthernetClass::begin(const uint8_t* mac, IPAddress ip, IPAddress dns, IPAddre int UIPEthernetClass::maintain(){ tick(); int rc = DHCP_CHECK_NONE; +#if UIP_UDP if(_dhcp != NULL){ //we have a pointer to dhcp, use it rc = _dhcp->checkLease(); @@ -118,6 +128,7 @@ int UIPEthernetClass::maintain(){ } } return rc; +#endif } IPAddress UIPEthernetClass::localIP() @@ -154,7 +165,7 @@ UIPEthernetClass::tick() { if (in_packet == NOBLOCK) { - in_packet = network.receivePacket(); + in_packet = Enc28J60Network::receivePacket(); #ifdef UIPETHERNET_DEBUG if (in_packet != NOBLOCK) { @@ -166,10 +177,10 @@ UIPEthernetClass::tick() if (in_packet != NOBLOCK) { packetstate = UIPETHERNET_FREEPACKET; - uip_len = network.blockSize(in_packet); + uip_len = Enc28J60Network::blockSize(in_packet); if (uip_len > 0) { - network.readPacket(in_packet,0,(uint8_t*)uip_buf,UIP_BUFSIZE); + Enc28J60Network::readPacket(in_packet,0,(uint8_t*)uip_buf,UIP_BUFSIZE); if (ETH_HDR ->type == HTONS(UIP_ETHTYPE_IP)) { uip_packet = in_packet; @@ -204,7 +215,7 @@ UIPEthernetClass::tick() Serial.print(F("freeing packet: ")); Serial.println(in_packet); #endif - network.freePacket(); + Enc28J60Network::freePacket(); in_packet = NOBLOCK; } } @@ -216,7 +227,7 @@ UIPEthernetClass::tick() { uip_periodic(i); // If the above function invocation resulted in data that - // should be sent out on the network, the global variable + // should be sent out on the Enc28J60Network, the global variable // uip_len is set to a value > 0. if (uip_len > 0) { @@ -230,11 +241,11 @@ UIPEthernetClass::tick() { uip_udp_periodic(i); // If the above function invocation resulted in data that - // should be sent out on the network, the global variable + // should be sent out on the Enc28J60Network, the global variable // uip_len is set to a value > 0. */ if (uip_len > 0) { - network_send(); + UIPUDP::_send((uip_udp_userdata_t *)(uip_udp_conns[i].appstate)); } } #endif /* UIP_UDP */ @@ -246,41 +257,42 @@ boolean UIPEthernetClass::network_send() if (packetstate & UIPETHERNET_SENDPACKET) { #ifdef UIPETHERNET_DEBUG - Serial.print(F("network_send uip_packet: ")); + Serial.print(F("Enc28J60Network_send uip_packet: ")); Serial.print(uip_packet); Serial.print(F(", hdrlen: ")); Serial.println(uip_hdrlen); #endif - network.writePacket(uip_packet,0,uip_buf,uip_hdrlen); + Enc28J60Network::writePacket(uip_packet,0,uip_buf,uip_hdrlen); goto sendandfree; } - uip_packet = network.allocBlock(uip_len); + uip_packet = Enc28J60Network::allocBlock(uip_len); if (uip_packet != NOBLOCK) { #ifdef UIPETHERNET_DEBUG - Serial.print(F("network_send uip_buf (uip_len): ")); + Serial.print(F("Enc28J60Network_send uip_buf (uip_len): ")); Serial.print(uip_len); Serial.print(F(", packet: ")); Serial.println(uip_packet); #endif - network.writePacket(uip_packet,0,uip_buf,uip_len); + Enc28J60Network::writePacket(uip_packet,0,uip_buf,uip_len); goto sendandfree; } return false; sendandfree: - network.sendPacket(uip_packet); - network.freeBlock(uip_packet); + Enc28J60Network::sendPacket(uip_packet); + Enc28J60Network::freeBlock(uip_packet); uip_packet = NOBLOCK; return true; } void UIPEthernetClass::init(const uint8_t* mac) { - uip_timer_set(&this->periodic_timer, CLOCK_SECOND / 4); + uip_timer_set(&periodic_timer, CLOCK_SECOND / 4); - network.init((uint8_t*)mac); + Enc28J60Network::init((uint8_t*)mac); uip_seteth_addr(mac); uip_init(); + uip_arp_init(); } void UIPEthernetClass::configure(IPAddress ip, IPAddress dns, IPAddress gateway, IPAddress subnet) { @@ -345,7 +357,11 @@ UIPEthernetClass::ipchksum(void) /*---------------------------------------------------------------------------*/ uint16_t +#if UIP_UDP UIPEthernetClass::upper_layer_chksum(uint8_t proto) +#else +uip_tcpchksum(void) +#endif { uint16_t upper_layer_len; uint16_t sum; @@ -359,27 +375,34 @@ UIPEthernetClass::upper_layer_chksum(uint8_t proto) /* First sum pseudoheader. */ /* IP protocol and length fields. This addition cannot carry. */ +#if UIP_UDP sum = upper_layer_len + proto; +#else + sum = upper_layer_len + UIP_PROTO_TCP; +#endif /* Sum IP source and destination addresses. */ - sum = chksum(sum, (u8_t *)&BUF->srcipaddr[0], 2 * sizeof(uip_ipaddr_t)); + sum = UIPEthernetClass::chksum(sum, (u8_t *)&BUF->srcipaddr[0], 2 * sizeof(uip_ipaddr_t)); uint8_t upper_layer_memlen; +#if UIP_UDP switch(proto) { - case UIP_PROTO_ICMP: - case UIP_PROTO_ICMP6: - upper_layer_memlen = upper_layer_len; - break; - case UIP_PROTO_TCP: - upper_layer_memlen = (BUF->tcpoffset >> 4) << 2; - break; -#if UIP_UDP - case UIP_PROTO_UDP: +// case UIP_PROTO_ICMP: +// case UIP_PROTO_ICMP6: +// upper_layer_memlen = upper_layer_len; +// break; + case UIP_PROTO_UDP: upper_layer_memlen = UIP_UDPH_LEN; break; + default: +// case UIP_PROTO_TCP: #endif + upper_layer_memlen = (BUF->tcpoffset >> 4) << 2; +#if UIP_UDP + break; } - sum = chksum(sum, &uip_buf[UIP_IPH_LEN + UIP_LLH_LEN], upper_layer_memlen); +#endif + sum = UIPEthernetClass::chksum(sum, &uip_buf[UIP_IPH_LEN + UIP_LLH_LEN], upper_layer_memlen); #ifdef UIPETHERNET_DEBUG_CHKSUM Serial.print(F("chksum uip_buf[")); Serial.print(UIP_IPH_LEN + UIP_LLH_LEN); @@ -390,9 +413,9 @@ UIPEthernetClass::upper_layer_chksum(uint8_t proto) #endif if (upper_layer_memlen < upper_layer_len) { - sum = network.chksum( + sum = Enc28J60Network::chksum( sum, - uip_packet, + UIPEthernetClass::uip_packet, UIP_IPH_LEN + UIP_LLH_LEN + upper_layer_memlen, upper_layer_len - upper_layer_memlen ); @@ -403,7 +426,7 @@ UIPEthernetClass::upper_layer_chksum(uint8_t proto) Serial.print(UIP_IPH_LEN + UIP_LLH_LEN + upper_layer_memlen); Serial.print(F("-")); Serial.print(UIP_IPH_LEN + UIP_LLH_LEN + upper_layer_len); - Serial.print(F"]: ")); + Serial.print(F("]: ")); Serial.println(htons(sum),HEX); #endif } @@ -416,6 +439,7 @@ uip_ipchksum(void) return UIPEthernet.ipchksum(); } +#if UIP_UDP uint16_t uip_tcpchksum(void) { @@ -423,7 +447,6 @@ uip_tcpchksum(void) return sum; } -#if UIP_UDP uint16_t uip_udpchksum(void) { diff --git a/libraries/UIPEthernet/UIPEthernet.h b/libraries/UIPEthernet/UIPEthernet.h index 94502f1..3bb18d4 100644 --- a/libraries/UIPEthernet/UIPEthernet.h +++ b/libraries/UIPEthernet/UIPEthernet.h @@ -20,6 +20,11 @@ #ifndef UIPETHERNET_H #define UIPETHERNET_H +//#define UIPETHERNET_DEBUG +//#define UIPETHERNET_DEBUG_CHKSUM +//#define UIPETHERNET_DEBUG_UDP +//#define UIPETHERNET_DEBUG_CLIENT + #include "ethernet_comp.h" #include #include "Dhcp.h" @@ -35,11 +40,6 @@ extern "C" #include "utility/uip.h" } -//#define UIPETHERNET_DEBUG -//#define UIPETHERNET_DEBUG_CHKSUM -//#define UIPETHERNET_DEBUG_UDP -//#define UIPETHERNET_DEBUG_CLIENT - #define UIPETHERNET_FREEPACKET 1 #define UIPETHERNET_SENDPACKET 2 #define UIPETHERNET_BUFFERREAD 4 @@ -82,24 +82,22 @@ public: IPAddress dnsServerIP(); private: - IPAddress _dnsServerAddress; - DhcpClass* _dhcp; + static memhandle in_packet; + static memhandle uip_packet; + static uint8_t uip_hdrlen; + static uint8_t packetstate; + + static IPAddress _dnsServerAddress; + static DhcpClass* _dhcp; - struct uip_timer periodic_timer; + static struct uip_timer periodic_timer; - memhandle in_packet; - memhandle uip_packet; - uint8_t uip_hdrlen; - uint8_t packetstate; + static void init(const uint8_t* mac); + static void configure(IPAddress ip, IPAddress dns, IPAddress gateway, IPAddress subnet); - Enc28J60Network network; + static void tick(); - void init(const uint8_t* mac); - void configure(IPAddress ip, IPAddress dns, IPAddress gateway, IPAddress subnet); - - void tick(); - - boolean network_send(); + static boolean network_send(); friend class UIPServer; @@ -109,12 +107,16 @@ private: static uint16_t chksum(uint16_t sum, const uint8_t* data, uint16_t len); static uint16_t ipchksum(void); - uint16_t upper_layer_chksum(uint8_t proto); - +#if UIP_UDP + static uint16_t upper_layer_chksum(uint8_t proto); +#endif friend uint16_t uip_ipchksum(void); friend uint16_t uip_tcpchksum(void); friend uint16_t uip_udpchksum(void); + friend void uipclient_appcall(void); + friend void uipudp_appcall(void); + #if UIP_CONF_IPV6 uint16_t uip_icmp6chksum(void); #endif /* UIP_CONF_IPV6 */ diff --git a/libraries/UIPEthernet/UIPServer.cpp b/libraries/UIPEthernet/UIPServer.cpp index 12ff72f..21c7ef5 100644 --- a/libraries/UIPEthernet/UIPServer.cpp +++ b/libraries/UIPEthernet/UIPServer.cpp @@ -28,12 +28,12 @@ UIPServer::UIPServer(uint16_t port) : _port(htons(port)) UIPClient UIPServer::available() { - UIPEthernet.tick(); + UIPEthernetClass::tick(); for ( uip_userdata_t* data = &UIPClient::all_data[0]; data < &UIPClient::all_data[UIP_CONNS]; data++ ) { if (data->packets_in[0] != NOBLOCK && (((data->state & UIP_CLIENT_CONNECTED) && uip_conns[data->state & UIP_CLIENT_SOCKETS].lport ==_port) - || ((data->state & UIP_CLIENT_CLOSED) && ((uip_userdata_closed_t *)data)->lport == _port))) + || ((data->state & UIP_CLIENT_REMOTECLOSED) && ((uip_userdata_closed_t *)data)->lport == _port))) return UIPClient(data); } return UIPClient(); @@ -42,7 +42,7 @@ UIPClient UIPServer::available() void UIPServer::begin() { uip_listen(_port); - UIPEthernet.tick(); + UIPEthernetClass::tick(); } size_t UIPServer::write(uint8_t c) diff --git a/libraries/UIPEthernet/UIPServer.h b/libraries/UIPEthernet/UIPServer.h index 64bdade..0cc0619 100644 --- a/libraries/UIPEthernet/UIPServer.h +++ b/libraries/UIPEthernet/UIPServer.h @@ -23,7 +23,7 @@ #import "Server.h" #import "UIPClient.h" -class UIPServer : Server { +class UIPServer : public Server { public: UIPServer(uint16_t); diff --git a/libraries/UIPEthernet/UIPUdp.cpp b/libraries/UIPEthernet/UIPUdp.cpp index d1cb7b1..3deb2c4 100644 --- a/libraries/UIPEthernet/UIPUdp.cpp +++ b/libraries/UIPEthernet/UIPUdp.cpp @@ -65,28 +65,13 @@ UIPUDP::stop() { if (_uip_udp_conn) { - flush(); uip_udp_remove(_uip_udp_conn); _uip_udp_conn->appstate = NULL; _uip_udp_conn=NULL; - if (appdata.packet_in != NOBLOCK) - { - UIPEthernet.network.freeBlock(appdata.packet_in); - appdata.packet_in = NOBLOCK; - } - uint8_t i = 0; - memhandle* packet = &appdata.packets_in[0]; - while (*packet != NOBLOCK && i < UIP_UDP_NUMPACKETS) - { - UIPEthernet.network.freeBlock(*packet); - *packet++ = NOBLOCK; - i++; - } - if (appdata.packet_out != NOBLOCK) - { - UIPEthernet.network.freeBlock(appdata.packet_out); - appdata.packet_out = NOBLOCK; - } + Enc28J60Network::freeBlock(appdata.packet_in); + Enc28J60Network::freeBlock(appdata.packet_next); + Enc28J60Network::freeBlock(appdata.packet_out); + memset(&appdata,0,sizeof(appdata)); } } @@ -97,7 +82,7 @@ UIPUDP::stop() int UIPUDP::beginPacket(IPAddress ip, uint16_t port) { - UIPEthernet.tick(); + UIPEthernetClass::tick(); if (ip && port) { uip_ipaddr_t ripaddr; @@ -139,7 +124,7 @@ UIPUDP::beginPacket(IPAddress ip, uint16_t port) { if (appdata.packet_out == NOBLOCK) { - appdata.packet_out = UIPEthernet.network.allocBlock(UIP_UDP_MAXPACKETSIZE); + appdata.packet_out = Enc28J60Network::allocBlock(UIP_UDP_MAXPACKETSIZE); appdata.out_pos = UIP_UDP_PHYH_LEN; if (appdata.packet_out != NOBLOCK) return 1; @@ -183,11 +168,11 @@ UIPUDP::endPacket() if (_uip_udp_conn && appdata.packet_out != NOBLOCK) { appdata.send = true; - UIPEthernet.network.resizeBlock(appdata.packet_out,0,appdata.out_pos); + Enc28J60Network::resizeBlock(appdata.packet_out,0,appdata.out_pos); uip_udp_periodic_conn(_uip_udp_conn); if (uip_len > 0) { - UIPEthernet.network_send(); + _send(&appdata); return 1; } } @@ -207,7 +192,7 @@ UIPUDP::write(const uint8_t *buffer, size_t size) { if (appdata.packet_out != NOBLOCK) { - size_t ret = UIPEthernet.network.writePacket(appdata.packet_out,appdata.out_pos,(uint8_t*)buffer,size); + size_t ret = Enc28J60Network::writePacket(appdata.packet_out,appdata.out_pos,(uint8_t*)buffer,size); appdata.out_pos += ret; return ret; } @@ -219,61 +204,43 @@ UIPUDP::write(const uint8_t *buffer, size_t size) int UIPUDP::parsePacket() { - UIPEthernet.tick(); + UIPEthernetClass::tick(); +#ifdef UIPETHERNET_DEBUG_UDP if (appdata.packet_in != NOBLOCK) { -#ifdef UIPETHERNET_DEBUG_UDP Serial.print(F("udp parsePacket freeing previous packet: ")); Serial.println(appdata.packet_in); -#endif; - UIPEthernet.network.freeBlock(appdata.packet_in); } - memhandle *packet = &appdata.packets_in[0]; - appdata.packet_in = *packet; +#endif + Enc28J60Network::freeBlock(appdata.packet_in); + + appdata.packet_in = appdata.packet_next; + appdata.packet_next = NOBLOCK; + +#ifdef UIPETHERNET_DEBUG_UDP if (appdata.packet_in != NOBLOCK) { -#ifdef UIPETHERNET_DEBUG_UDP Serial.print(F("udp parsePacket received packet: ")); Serial.print(appdata.packet_in); + } #endif - if (UIP_UDP_NUMPACKETS > 1) - { - uint8_t i = 1; - memhandle* p = packet+1; -freeloop: - *packet = *p; - if (*packet == NOBLOCK) - goto freeready; - packet++; - if (i < UIP_UDP_NUMPACKETS-1) - { - i++; - p++; - goto freeloop; - } - } - *packet = NOBLOCK; -freeready: - int size = UIPEthernet.network.blockSize(appdata.packet_in); + int size = Enc28J60Network::blockSize(appdata.packet_in); #ifdef UIPETHERNET_DEBUG_UDP + if (appdata.packet_in != NOBLOCK) + { Serial.print(F(", size: ")); Serial.println(size); -#endif - return size; } - return 0; +#endif + return size; } // Number of bytes remaining in the current packet int UIPUDP::available() { - UIPEthernet.tick(); - if (appdata.packet_in != NOBLOCK) - { - return UIPEthernet.network.blockSize(appdata.packet_in); - } - return 0; + UIPEthernetClass::tick(); + return Enc28J60Network::blockSize(appdata.packet_in); } // Read a single byte from the current packet @@ -293,11 +260,17 @@ UIPUDP::read() int UIPUDP::read(unsigned char* buffer, size_t len) { - UIPEthernet.tick(); + UIPEthernetClass::tick(); if (appdata.packet_in != NOBLOCK) { - int read = UIPEthernet.network.readPacket(appdata.packet_in,0,buffer,len); - UIPEthernet.network.resizeBlock(appdata.packet_in,read); + memaddress read = Enc28J60Network::readPacket(appdata.packet_in,0,buffer,len); + if (read == Enc28J60Network::blockSize(appdata.packet_in)) + { + Enc28J60Network::freeBlock(appdata.packet_in); + appdata.packet_in = NOBLOCK; + } + else + Enc28J60Network::resizeBlock(appdata.packet_in,read); return read; } return 0; @@ -307,11 +280,11 @@ UIPUDP::read(unsigned char* buffer, size_t len) int UIPUDP::peek() { - UIPEthernet.tick(); + UIPEthernetClass::tick(); if (appdata.packet_in != NOBLOCK) { unsigned char c; - if (UIPEthernet.network.readPacket(appdata.packet_in,0,&c,1) == 1) + if (Enc28J60Network::readPacket(appdata.packet_in,0,&c,1) == 1) return c; } return -1; @@ -321,12 +294,9 @@ UIPUDP::peek() void UIPUDP::flush() { - UIPEthernet.tick(); - if (appdata.packet_in != NOBLOCK) - { - UIPEthernet.network.freeBlock(appdata.packet_in); - appdata.packet_in = NOBLOCK; - } + UIPEthernetClass::tick(); + Enc28J60Network::freeBlock(appdata.packet_in); + appdata.packet_in = NOBLOCK; } // Return the IP address of the host who sent the current incoming packet @@ -347,44 +317,28 @@ UIPUDP::remotePort() void uipudp_appcall(void) { - UIPUDP::uip_callback(); -} - -void -UIPUDP::uip_callback() { - if (appdata_t *data = (appdata_t *)(uip_udp_conn->appstate)) + if (uip_udp_userdata_t *data = (uip_udp_userdata_t *)(uip_udp_conn->appstate)) { if (uip_newdata()) { - uip_udp_conn->rport = UDPBUF->srcport; - uip_ipaddr_copy(uip_udp_conn->ripaddr,UDPBUF->srcipaddr); - memhandle *packet = &data->packets_in[0]; - uint8_t i = 0; - do + if (data->packet_next == NOBLOCK) { - if (*packet == NOBLOCK) - { - *packet = UIPEthernet.network.allocBlock(ntohs(UDPBUF->udplen)-UIP_UDPH_LEN); + uip_udp_conn->rport = UDPBUF->srcport; + uip_ipaddr_copy(uip_udp_conn->ripaddr,UDPBUF->srcipaddr); + data->packet_next = Enc28J60Network::allocBlock(ntohs(UDPBUF->udplen)-UIP_UDPH_LEN); //if we are unable to allocate memory the packet is dropped. udp doesn't guarantee packet delivery - if (*packet != NOBLOCK) - { - //discard Linklevel and IP and udp-header and any trailing bytes: - UIPEthernet.network.copyPacket(*packet,0,UIPEthernet.in_packet,UIP_UDP_PHYH_LEN,UIPEthernet.network.blockSize(*packet)); + if (data->packet_next != NOBLOCK) + { + //discard Linklevel and IP and udp-header and any trailing bytes: + Enc28J60Network::copyPacket(data->packet_next,0,UIPEthernetClass::in_packet,UIP_UDP_PHYH_LEN,Enc28J60Network::blockSize(data->packet_next)); #ifdef UIPETHERNET_DEBUG_UDP - Serial.print(F("udp, uip_newdata received packet: ")); - Serial.print(*packet); - Serial.print(F(", slot: ")); - Serial.print(i); - Serial.print(F(", size: ")); - Serial.println(UIPEthernet.network.blockSize(*packet)); + Serial.print(F("udp, uip_newdata received packet: ")); + Serial.print(data->packet_next); + Serial.print(F(", size: ")); + Serial.println(Enc28J60Network::blockSize(data->packet_next)); #endif - break; - } } - packet++; - i++; } - while (i < UIP_UDP_NUMPACKETS); } if (uip_poll() && data->send) { @@ -393,32 +347,37 @@ UIPUDP::uip_callback() { Serial.print(F("udp, uip_poll preparing packet to send: ")); Serial.print(data->packet_out); Serial.print(F(", size: ")); - Serial.println(UIPEthernet.network.blockSize(data->packet_out)); + Serial.println(Enc28J60Network::blockSize(data->packet_out)); #endif - UIPEthernet.uip_packet = data->packet_out; - data->packet_out = NOBLOCK; - UIPEthernet.uip_hdrlen = UIP_UDP_PHYH_LEN; - UIPEthernet.packetstate |= UIPETHERNET_SENDPACKET; + UIPEthernetClass::uip_packet = data->packet_out; + UIPEthernetClass::uip_hdrlen = UIP_UDP_PHYH_LEN; uip_udp_send(data->out_pos - (UIP_UDP_PHYH_LEN)); - uip_process(UIP_UDP_SEND_CONN); //generate udp + ip headers - uip_arp_out(); //add arp - if (uip_len == UIP_ARPHDRSIZE) - { - UIPEthernet.packetstate &= ~UIPETHERNET_SENDPACKET; -#ifdef UIPETHERNET_DEBUG_UDP - Serial.println(F("udp, uip_poll results in ARP-packet")); -#endif - } - else - //arp found ethaddr for ip (otherwise packet is replaced by arp-request) - { - data->send = false; -#ifdef UIPETHERNET_DEBUG_UDP - Serial.print(F("udp, uip_packet to send: ")); - Serial.println(UIPEthernet.uip_packet); -#endif - } } } } + +void +UIPUDP::_send(uip_udp_userdata_t *data) { + uip_arp_out(); //add arp + if (uip_len == UIP_ARPHDRSIZE) + { + UIPEthernetClass::uip_packet = NOBLOCK; + UIPEthernetClass::packetstate &= ~UIPETHERNET_SENDPACKET; +#ifdef UIPETHERNET_DEBUG_UDP + Serial.println(F("udp, uip_poll results in ARP-packet")); +#endif + } + else + //arp found ethaddr for ip (otherwise packet is replaced by arp-request) + { + data->send = false; + data->packet_out = NOBLOCK; + UIPEthernetClass::packetstate |= UIPETHERNET_SENDPACKET; +#ifdef UIPETHERNET_DEBUG_UDP + Serial.print(F("udp, uip_packet to send: ")); + Serial.println(UIPEthernetClass::uip_packet); +#endif + } + UIPEthernetClass::network_send(); +} #endif diff --git a/libraries/UIPEthernet/UIPUdp.h b/libraries/UIPEthernet/UIPUdp.h index c965ffa..b007a3c 100644 --- a/libraries/UIPEthernet/UIPUdp.h +++ b/libraries/UIPEthernet/UIPUdp.h @@ -25,15 +25,20 @@ #include #include "utility/mempool.h" extern "C" { - #include "utility/uip.h"; + #include "utility/uip.h" } #define UIP_UDP_MAXDATALEN 1500 #define UIP_UDP_PHYH_LEN UIP_LLH_LEN+UIP_IPUDPH_LEN #define UIP_UDP_MAXPACKETSIZE UIP_UDP_MAXDATALEN+UIP_UDP_PHYH_LEN -#ifndef UIP_UDP_NUMPACKETS -#define UIP_UDP_NUMPACKETS 5 -#endif + +typedef struct { + memaddress out_pos; + memhandle packet_next; + memhandle packet_in; + memhandle packet_out; + boolean send; +} uip_udp_userdata_t; class UIPUDP : public UDP { @@ -41,14 +46,7 @@ class UIPUDP : public UDP private: struct uip_udp_conn *_uip_udp_conn; - struct appdata_t - { - memaddress out_pos; - memhandle packets_in[UIP_UDP_NUMPACKETS]; - memhandle packet_in; - memhandle packet_out; - boolean send; - } appdata; + uip_udp_userdata_t appdata; public: UIPUDP(); // Constructor @@ -120,7 +118,9 @@ private: friend void uipudp_appcall(void); - static void uip_callback(); + friend class UIPEthernetClass; + static void _send(uip_udp_userdata_t *data); + }; #endif diff --git a/libraries/UIPEthernet/ethernet_comp.h b/libraries/UIPEthernet/ethernet_comp.h index 97a1ad7..4cec2ab 100644 --- a/libraries/UIPEthernet/ethernet_comp.h +++ b/libraries/UIPEthernet/ethernet_comp.h @@ -4,6 +4,6 @@ #define Ethernet UIPEthernet #define EthernetClient UIPClient #define EthernetServer UIPServer -//#define EthernetUDP UIPUDP +#define EthernetUDP UIPUDP #endif diff --git a/libraries/UIPEthernet/src/Dhcp.cpp b/libraries/UIPEthernet/src/Dhcp.cpp deleted file mode 100644 index d34e8e2..0000000 --- a/libraries/UIPEthernet/src/Dhcp.cpp +++ /dev/null @@ -1,478 +0,0 @@ -// DHCP Library v0.3 - April 25, 2009 -// Author: Jordan Terrell - blog.jordanterrell.com - -#include -#include -#include "Dhcp.h" -#include "Arduino.h" -#include "utility/util.h" - -int DhcpClass::beginWithDHCP(uint8_t *mac, unsigned long timeout, unsigned long responseTimeout) -{ - _dhcpLeaseTime=0; - _dhcpT1=0; - _dhcpT2=0; - _lastCheck=0; - _timeout = timeout; - _responseTimeout = responseTimeout; - - // zero out _dhcpMacAddr - memset(_dhcpMacAddr, 0, 6); - reset_DHCP_lease(); - - memcpy((void*)_dhcpMacAddr, (void*)mac, 6); - _dhcp_state = STATE_DHCP_START; - return request_DHCP_lease(); -} - -void DhcpClass::reset_DHCP_lease(){ - // zero out _dhcpSubnetMask, _dhcpGatewayIp, _dhcpLocalIp, _dhcpDhcpServerIp, _dhcpDnsServerIp - memset(_dhcpLocalIp, 0, 20); -} - -//return:0 on error, 1 if request is sent and response is received -int DhcpClass::request_DHCP_lease(){ - - uint8_t messageType = 0; - - - - // Pick an initial transaction ID - _dhcpTransactionId = random(1UL, 2000UL); - _dhcpInitialTransactionId = _dhcpTransactionId; - - _dhcpUdpSocket.stop(); - if (_dhcpUdpSocket.begin(DHCP_CLIENT_PORT) == 0) - { - // Couldn't get a socket - return 0; - } - - presend_DHCP(); - - int result = 0; - - unsigned long startTime = millis(); - - while(_dhcp_state != STATE_DHCP_LEASED) - { - if(_dhcp_state == STATE_DHCP_START) - { - _dhcpTransactionId++; - - send_DHCP_MESSAGE(DHCP_DISCOVER, ((millis() - startTime) / 1000)); - _dhcp_state = STATE_DHCP_DISCOVER; - } - else if(_dhcp_state == STATE_DHCP_REREQUEST){ - _dhcpTransactionId++; - send_DHCP_MESSAGE(DHCP_REQUEST, ((millis() - startTime)/1000)); - _dhcp_state = STATE_DHCP_REQUEST; - } - else if(_dhcp_state == STATE_DHCP_DISCOVER) - { - uint32_t respId; - messageType = parseDHCPResponse(_responseTimeout, respId); - if(messageType == DHCP_OFFER) - { - // We'll use the transaction ID that the offer came with, - // rather than the one we were up to - _dhcpTransactionId = respId; - send_DHCP_MESSAGE(DHCP_REQUEST, ((millis() - startTime) / 1000)); - _dhcp_state = STATE_DHCP_REQUEST; - } - } - else if(_dhcp_state == STATE_DHCP_REQUEST) - { - uint32_t respId; - messageType = parseDHCPResponse(_responseTimeout, respId); - if(messageType == DHCP_ACK) - { - _dhcp_state = STATE_DHCP_LEASED; - result = 1; - //use default lease time if we didn't get it - if(_dhcpLeaseTime == 0){ - _dhcpLeaseTime = DEFAULT_LEASE; - } - //calculate T1 & T2 if we didn't get it - if(_dhcpT1 == 0){ - //T1 should be 50% of _dhcpLeaseTime - _dhcpT1 = _dhcpLeaseTime >> 1; - } - if(_dhcpT2 == 0){ - //T2 should be 87.5% (7/8ths) of _dhcpLeaseTime - _dhcpT2 = _dhcpT1 << 1; - } - _renewInSec = _dhcpT1; - _rebindInSec = _dhcpT2; - } - else if(messageType == DHCP_NAK) - _dhcp_state = STATE_DHCP_START; - } - - if(messageType == 255) - { - messageType = 0; - _dhcp_state = STATE_DHCP_START; - } - - if(result != 1 && ((millis() - startTime) > _timeout)) - break; - } - - // We're done with the socket now - _dhcpUdpSocket.stop(); - _dhcpTransactionId++; - - return result; -} - -void DhcpClass::presend_DHCP() -{ -} - -void DhcpClass::send_DHCP_MESSAGE(uint8_t messageType, uint16_t secondsElapsed) -{ - uint8_t buffer[32]; - memset(buffer, 0, 32); - IPAddress dest_addr( 255, 255, 255, 255 ); // Broadcast address - - if (-1 == _dhcpUdpSocket.beginPacket(dest_addr, DHCP_SERVER_PORT)) - { - // FIXME Need to return errors - return; - } - - buffer[0] = DHCP_BOOTREQUEST; // op - buffer[1] = DHCP_HTYPE10MB; // htype - buffer[2] = DHCP_HLENETHERNET; // hlen - buffer[3] = DHCP_HOPS; // hops - - // xid - unsigned long xid = htonl(_dhcpTransactionId); - memcpy(buffer + 4, &(xid), 4); - - // 8, 9 - seconds elapsed - buffer[8] = ((secondsElapsed & 0xff00) >> 8); - buffer[9] = (secondsElapsed & 0x00ff); - - // flags - unsigned short flags = htons(DHCP_FLAGSBROADCAST); - memcpy(buffer + 10, &(flags), 2); - - // ciaddr: already zeroed - // yiaddr: already zeroed - // siaddr: already zeroed - // giaddr: already zeroed - - //put data in W5100 transmit buffer - _dhcpUdpSocket.write(buffer, 28); - - memset(buffer, 0, 32); // clear local buffer - - memcpy(buffer, _dhcpMacAddr, 6); // chaddr - - //put data in W5100 transmit buffer - _dhcpUdpSocket.write(buffer, 16); - - memset(buffer, 0, 32); // clear local buffer - - // leave zeroed out for sname && file - // put in W5100 transmit buffer x 6 (192 bytes) - - for(int i = 0; i < 6; i++) { - _dhcpUdpSocket.write(buffer, 32); - } - - // OPT - Magic Cookie - buffer[0] = (uint8_t)((MAGIC_COOKIE >> 24)& 0xFF); - buffer[1] = (uint8_t)((MAGIC_COOKIE >> 16)& 0xFF); - buffer[2] = (uint8_t)((MAGIC_COOKIE >> 8)& 0xFF); - buffer[3] = (uint8_t)(MAGIC_COOKIE& 0xFF); - - // OPT - message type - buffer[4] = dhcpMessageType; - buffer[5] = 0x01; - buffer[6] = messageType; //DHCP_REQUEST; - - // OPT - client identifier - buffer[7] = dhcpClientIdentifier; - buffer[8] = 0x07; - buffer[9] = 0x01; - memcpy(buffer + 10, _dhcpMacAddr, 6); - - // OPT - host name - buffer[16] = hostName; - buffer[17] = strlen(HOST_NAME) + 6; // length of hostname + last 3 bytes of mac address - strcpy((char*)&(buffer[18]), HOST_NAME); - - printByte((char*)&(buffer[24]), _dhcpMacAddr[3]); - printByte((char*)&(buffer[26]), _dhcpMacAddr[4]); - printByte((char*)&(buffer[28]), _dhcpMacAddr[5]); - - //put data in W5100 transmit buffer - _dhcpUdpSocket.write(buffer, 30); - - if(messageType == DHCP_REQUEST) - { - buffer[0] = dhcpRequestedIPaddr; - buffer[1] = 0x04; - buffer[2] = _dhcpLocalIp[0]; - buffer[3] = _dhcpLocalIp[1]; - buffer[4] = _dhcpLocalIp[2]; - buffer[5] = _dhcpLocalIp[3]; - - buffer[6] = dhcpServerIdentifier; - buffer[7] = 0x04; - buffer[8] = _dhcpDhcpServerIp[0]; - buffer[9] = _dhcpDhcpServerIp[1]; - buffer[10] = _dhcpDhcpServerIp[2]; - buffer[11] = _dhcpDhcpServerIp[3]; - - //put data in W5100 transmit buffer - _dhcpUdpSocket.write(buffer, 12); - } - - buffer[0] = dhcpParamRequest; - buffer[1] = 0x06; - buffer[2] = subnetMask; - buffer[3] = routersOnSubnet; - buffer[4] = dns; - buffer[5] = domainName; - buffer[6] = dhcpT1value; - buffer[7] = dhcpT2value; - buffer[8] = endOption; - - //put data in W5100 transmit buffer - _dhcpUdpSocket.write(buffer, 9); - - _dhcpUdpSocket.endPacket(); -} - -uint8_t DhcpClass::parseDHCPResponse(unsigned long responseTimeout, uint32_t& transactionId) -{ - uint8_t type = 0; - uint8_t opt_len = 0; - - unsigned long startTime = millis(); - - while(_dhcpUdpSocket.parsePacket() <= 0) - { - if((millis() - startTime) > responseTimeout) - { - return 255; - } - delay(50); - } - // start reading in the packet - RIP_MSG_FIXED fixedMsg; - _dhcpUdpSocket.read((uint8_t*)&fixedMsg, sizeof(RIP_MSG_FIXED)); - - if(fixedMsg.op == DHCP_BOOTREPLY && _dhcpUdpSocket.remotePort() == DHCP_SERVER_PORT) - { - transactionId = ntohl(fixedMsg.xid); - if(memcmp(fixedMsg.chaddr, _dhcpMacAddr, 6) != 0 || (transactionId < _dhcpInitialTransactionId) || (transactionId > _dhcpTransactionId)) - { - // Need to read the rest of the packet here regardless - _dhcpUdpSocket.flush(); - return 0; - } - - memcpy(_dhcpLocalIp, fixedMsg.yiaddr, 4); - - // Skip to the option part - // Doing this a byte at a time so we don't have to put a big buffer - // on the stack (as we don't have lots of memory lying around) - for (int i =0; i < (240 - (int)sizeof(RIP_MSG_FIXED)); i++) - { - _dhcpUdpSocket.read(); // we don't care about the returned byte - } - - while (_dhcpUdpSocket.available() > 0) - { - switch (_dhcpUdpSocket.read()) - { - case endOption : - break; - - case padOption : - break; - - case dhcpMessageType : - opt_len = _dhcpUdpSocket.read(); - type = _dhcpUdpSocket.read(); - break; - - case subnetMask : - opt_len = _dhcpUdpSocket.read(); - _dhcpUdpSocket.read(_dhcpSubnetMask, 4); - break; - - case routersOnSubnet : - opt_len = _dhcpUdpSocket.read(); - _dhcpUdpSocket.read(_dhcpGatewayIp, 4); - for (int i = 0; i < opt_len-4; i++) - { - _dhcpUdpSocket.read(); - } - break; - - case dns : - opt_len = _dhcpUdpSocket.read(); - _dhcpUdpSocket.read(_dhcpDnsServerIp, 4); - for (int i = 0; i < opt_len-4; i++) - { - _dhcpUdpSocket.read(); - } - break; - - case dhcpServerIdentifier : - opt_len = _dhcpUdpSocket.read(); - if( *((uint32_t*)_dhcpDhcpServerIp) == 0 || - IPAddress(_dhcpDhcpServerIp) == _dhcpUdpSocket.remoteIP() ) - { - _dhcpUdpSocket.read(_dhcpDhcpServerIp, sizeof(_dhcpDhcpServerIp)); - } - else - { - // Skip over the rest of this option - while (opt_len--) - { - _dhcpUdpSocket.read(); - } - } - break; - - case dhcpT1value : - opt_len = _dhcpUdpSocket.read(); - _dhcpUdpSocket.read((uint8_t*)&_dhcpT1, sizeof(_dhcpT1)); - _dhcpT1 = ntohl(_dhcpT1); - break; - - case dhcpT2value : - opt_len = _dhcpUdpSocket.read(); - _dhcpUdpSocket.read((uint8_t*)&_dhcpT2, sizeof(_dhcpT2)); - _dhcpT2 = ntohl(_dhcpT2); - break; - - case dhcpIPaddrLeaseTime : - opt_len = _dhcpUdpSocket.read(); - _dhcpUdpSocket.read((uint8_t*)&_dhcpLeaseTime, sizeof(_dhcpLeaseTime)); - _dhcpLeaseTime = ntohl(_dhcpLeaseTime); - _renewInSec = _dhcpLeaseTime; - break; - - default : - opt_len = _dhcpUdpSocket.read(); - // Skip over the rest of this option - while (opt_len--) - { - _dhcpUdpSocket.read(); - } - break; - } - } - } - - // Need to skip to end of the packet regardless here - _dhcpUdpSocket.flush(); - - return type; -} - - -/* - returns: - 0/DHCP_CHECK_NONE: nothing happened - 1/DHCP_CHECK_RENEW_FAIL: renew failed - 2/DHCP_CHECK_RENEW_OK: renew success - 3/DHCP_CHECK_REBIND_FAIL: rebind fail - 4/DHCP_CHECK_REBIND_OK: rebind success -*/ -int DhcpClass::checkLease(){ - //this uses a signed / unsigned trick to deal with millis overflow - unsigned long now = millis(); - signed long snow = (long)now; - int rc=DHCP_CHECK_NONE; - if (_lastCheck != 0){ - signed long factor; - //calc how many ms past the timeout we are - factor = snow - (long)_secTimeout; - //if on or passed the timeout, reduce the counters - if ( factor >= 0 ){ - //next timeout should be now plus 1000 ms minus parts of second in factor - _secTimeout = snow + 1000 - factor % 1000; - //how many seconds late are we, minimum 1 - factor = factor / 1000 +1; - - //reduce the counters by that mouch - //if we can assume that the cycle time (factor) is fairly constant - //and if the remainder is less than cycle time * 2 - //do it early instead of late - if(_renewInSec < factor*2 ) - _renewInSec = 0; - else - _renewInSec -= factor; - - if(_rebindInSec < factor*2 ) - _rebindInSec = 0; - else - _rebindInSec -= factor; - } - - //if we have a lease but should renew, do it - if (_dhcp_state == STATE_DHCP_LEASED && _renewInSec <=0){ - _dhcp_state = STATE_DHCP_REREQUEST; - rc = 1 + request_DHCP_lease(); - } - - //if we have a lease or is renewing but should bind, do it - if( (_dhcp_state == STATE_DHCP_LEASED || _dhcp_state == STATE_DHCP_START) && _rebindInSec <=0){ - //this should basically restart completely - _dhcp_state = STATE_DHCP_START; - reset_DHCP_lease(); - rc = 3 + request_DHCP_lease(); - } - } - else{ - _secTimeout = snow + 1000; - } - - _lastCheck = now; - return rc; -} - -IPAddress DhcpClass::getLocalIp() -{ - return IPAddress(_dhcpLocalIp); -} - -IPAddress DhcpClass::getSubnetMask() -{ - return IPAddress(_dhcpSubnetMask); -} - -IPAddress DhcpClass::getGatewayIp() -{ - return IPAddress(_dhcpGatewayIp); -} - -IPAddress DhcpClass::getDhcpServerIp() -{ - return IPAddress(_dhcpDhcpServerIp); -} - -IPAddress DhcpClass::getDnsServerIp() -{ - return IPAddress(_dhcpDnsServerIp); -} - -void DhcpClass::printByte(char * buf, uint8_t n ) { - char *str = &buf[1]; - buf[0]='0'; - do { - unsigned long m = n; - n /= 16; - char c = m - 16 * n; - *str-- = c < 10 ? c + '0' : c + 'A' - 10; - } while(n); -} diff --git a/libraries/UIPEthernet/src/Dhcp.h b/libraries/UIPEthernet/src/Dhcp.h deleted file mode 100644 index 01405d7..0000000 --- a/libraries/UIPEthernet/src/Dhcp.h +++ /dev/null @@ -1,178 +0,0 @@ -// DHCP Library v0.3 - April 25, 2009 -// Author: Jordan Terrell - blog.jordanterrell.com - -#ifndef Dhcp_h -#define Dhcp_h - -#include "UIPUdp.h" - -/* DHCP state machine. */ -#define STATE_DHCP_START 0 -#define STATE_DHCP_DISCOVER 1 -#define STATE_DHCP_REQUEST 2 -#define STATE_DHCP_LEASED 3 -#define STATE_DHCP_REREQUEST 4 -#define STATE_DHCP_RELEASE 5 - -#define DHCP_FLAGSBROADCAST 0x8000 - -/* UDP port numbers for DHCP */ -#define DHCP_SERVER_PORT 67 /* from server to client */ -#define DHCP_CLIENT_PORT 68 /* from client to server */ - -/* DHCP message OP code */ -#define DHCP_BOOTREQUEST 1 -#define DHCP_BOOTREPLY 2 - -/* DHCP message type */ -#define DHCP_DISCOVER 1 -#define DHCP_OFFER 2 -#define DHCP_REQUEST 3 -#define DHCP_DECLINE 4 -#define DHCP_ACK 5 -#define DHCP_NAK 6 -#define DHCP_RELEASE 7 -#define DHCP_INFORM 8 - -#define DHCP_HTYPE10MB 1 -#define DHCP_HTYPE100MB 2 - -#define DHCP_HLENETHERNET 6 -#define DHCP_HOPS 0 -#define DHCP_SECS 0 - -#define MAGIC_COOKIE 0x63825363 -#define MAX_DHCP_OPT 16 - -#define HOST_NAME "ENC28J" -#define DEFAULT_LEASE (900) //default lease time in seconds - -#define DHCP_CHECK_NONE (0) -#define DHCP_CHECK_RENEW_FAIL (1) -#define DHCP_CHECK_RENEW_OK (2) -#define DHCP_CHECK_REBIND_FAIL (3) -#define DHCP_CHECK_REBIND_OK (4) - -enum -{ - padOption = 0, - subnetMask = 1, - timerOffset = 2, - routersOnSubnet = 3, - /* timeServer = 4, - nameServer = 5,*/ - dns = 6, - /*logServer = 7, - cookieServer = 8, - lprServer = 9, - impressServer = 10, - resourceLocationServer = 11,*/ - hostName = 12, - /*bootFileSize = 13, - meritDumpFile = 14,*/ - domainName = 15, - /*swapServer = 16, - rootPath = 17, - extentionsPath = 18, - IPforwarding = 19, - nonLocalSourceRouting = 20, - policyFilter = 21, - maxDgramReasmSize = 22, - defaultIPTTL = 23, - pathMTUagingTimeout = 24, - pathMTUplateauTable = 25, - ifMTU = 26, - allSubnetsLocal = 27, - broadcastAddr = 28, - performMaskDiscovery = 29, - maskSupplier = 30, - performRouterDiscovery = 31, - routerSolicitationAddr = 32, - staticRoute = 33, - trailerEncapsulation = 34, - arpCacheTimeout = 35, - ethernetEncapsulation = 36, - tcpDefaultTTL = 37, - tcpKeepaliveInterval = 38, - tcpKeepaliveGarbage = 39, - nisDomainName = 40, - nisServers = 41, - ntpServers = 42, - vendorSpecificInfo = 43, - netBIOSnameServer = 44, - netBIOSdgramDistServer = 45, - netBIOSnodeType = 46, - netBIOSscope = 47, - xFontServer = 48, - xDisplayManager = 49,*/ - dhcpRequestedIPaddr = 50, - dhcpIPaddrLeaseTime = 51, - /*dhcpOptionOverload = 52,*/ - dhcpMessageType = 53, - dhcpServerIdentifier = 54, - dhcpParamRequest = 55, - /*dhcpMsg = 56, - dhcpMaxMsgSize = 57,*/ - dhcpT1value = 58, - dhcpT2value = 59, - /*dhcpClassIdentifier = 60,*/ - dhcpClientIdentifier = 61, - endOption = 255 -}; - -typedef struct _RIP_MSG_FIXED -{ - uint8_t op; - uint8_t htype; - uint8_t hlen; - uint8_t hops; - uint32_t xid; - uint16_t secs; - uint16_t flags; - uint8_t ciaddr[4]; - uint8_t yiaddr[4]; - uint8_t siaddr[4]; - uint8_t giaddr[4]; - uint8_t chaddr[6]; -}RIP_MSG_FIXED; - -class DhcpClass { -private: - uint32_t _dhcpInitialTransactionId; - uint32_t _dhcpTransactionId; - uint8_t _dhcpMacAddr[6]; - uint8_t _dhcpLocalIp[4]; - uint8_t _dhcpSubnetMask[4]; - uint8_t _dhcpGatewayIp[4]; - uint8_t _dhcpDhcpServerIp[4]; - uint8_t _dhcpDnsServerIp[4]; - uint32_t _dhcpLeaseTime; - uint32_t _dhcpT1, _dhcpT2; - signed long _renewInSec; - signed long _rebindInSec; - signed long _lastCheck; - unsigned long _timeout; - unsigned long _responseTimeout; - unsigned long _secTimeout; - uint8_t _dhcp_state; - UIPUDP _dhcpUdpSocket; - - int request_DHCP_lease(); - void reset_DHCP_lease(); - void presend_DHCP(); - void send_DHCP_MESSAGE(uint8_t, uint16_t); - void printByte(char *, uint8_t); - - uint8_t parseDHCPResponse(unsigned long responseTimeout, uint32_t& transactionId); -public: - IPAddress getLocalIp(); - IPAddress getSubnetMask(); - IPAddress getGatewayIp(); - IPAddress getDhcpServerIp(); - IPAddress getDnsServerIp(); - - int beginWithDHCP(uint8_t *, unsigned long timeout = 60000, unsigned long responseTimeout = 4000); - int checkLease(); -}; - -#endif diff --git a/libraries/UIPEthernet/src/Dns.cpp b/libraries/UIPEthernet/src/Dns.cpp deleted file mode 100644 index 2b97fb7..0000000 --- a/libraries/UIPEthernet/src/Dns.cpp +++ /dev/null @@ -1,422 +0,0 @@ -// Arduino DNS client for Enc28J60-based Ethernet shield -// (c) Copyright 2009-2010 MCQN Ltd. -// Released under Apache License, version 2.0 - -#include "Udp.h" -#include "utility/util.h" - -#include "Dns.h" -#include -//#include -#include "Arduino.h" - - -#define SOCKET_NONE 255 -// Various flags and header field values for a DNS message -#define UDP_HEADER_SIZE 8 -#define DNS_HEADER_SIZE 12 -#define TTL_SIZE 4 -#define QUERY_FLAG (0) -#define RESPONSE_FLAG (1<<15) -#define QUERY_RESPONSE_MASK (1<<15) -#define OPCODE_STANDARD_QUERY (0) -#define OPCODE_INVERSE_QUERY (1<<11) -#define OPCODE_STATUS_REQUEST (2<<11) -#define OPCODE_MASK (15<<11) -#define AUTHORITATIVE_FLAG (1<<10) -#define TRUNCATION_FLAG (1<<9) -#define RECURSION_DESIRED_FLAG (1<<8) -#define RECURSION_AVAILABLE_FLAG (1<<7) -#define RESP_NO_ERROR (0) -#define RESP_FORMAT_ERROR (1) -#define RESP_SERVER_FAILURE (2) -#define RESP_NAME_ERROR (3) -#define RESP_NOT_IMPLEMENTED (4) -#define RESP_REFUSED (5) -#define RESP_MASK (15) -#define TYPE_A (0x0001) -#define CLASS_IN (0x0001) -#define LABEL_COMPRESSION_MASK (0xC0) -// Port number that DNS servers listen on -#define DNS_PORT 53 - -// Possible return codes from ProcessResponse -#define SUCCESS 1 -#define TIMED_OUT -1 -#define INVALID_SERVER -2 -#define TRUNCATED -3 -#define INVALID_RESPONSE -4 - -void DNSClient::begin(const IPAddress& aDNSServer) -{ - iDNSServer = aDNSServer; - iRequestId = 0; -} - - -int DNSClient::inet_aton(const char* aIPAddrString, IPAddress& aResult) -{ - // See if we've been given a valid IP address - const char* p =aIPAddrString; - while (*p && - ( (*p == '.') || (*p >= '0') || (*p <= '9') )) - { - p++; - } - - if (*p == '\0') - { - // It's looking promising, we haven't found any invalid characters - p = aIPAddrString; - int segment =0; - int segmentValue =0; - while (*p && (segment < 4)) - { - if (*p == '.') - { - // We've reached the end of a segment - if (segmentValue > 255) - { - // You can't have IP address segments that don't fit in a byte - return 0; - } - else - { - aResult[segment] = (byte)segmentValue; - segment++; - segmentValue = 0; - } - } - else - { - // Next digit - segmentValue = (segmentValue*10)+(*p - '0'); - } - p++; - } - // We've reached the end of address, but there'll still be the last - // segment to deal with - if ((segmentValue > 255) || (segment > 3)) - { - // You can't have IP address segments that don't fit in a byte, - // or more than four segments - return 0; - } - else - { - aResult[segment] = (byte)segmentValue; - return 1; - } - } - else - { - return 0; - } -} - -int DNSClient::getHostByName(const char* aHostname, IPAddress& aResult) -{ - int ret =0; - - // See if it's a numeric IP address - if (inet_aton(aHostname, aResult)) - { - // It is, our work here is done - return 1; - } - - // Check we've got a valid DNS server to use - if (iDNSServer == INADDR_NONE) - { - return INVALID_SERVER; - } - - // Find a socket to use - if (iUdp.begin(1024+(millis() & 0xF)) == 1) - { - // Try up to three times - int retries = 0; -// while ((retries < 3) && (ret <= 0)) - { - // Send DNS request - ret = iUdp.beginPacket(iDNSServer, DNS_PORT); - if (ret != 0) - { - // Now output the request data - ret = BuildRequest(aHostname); - if (ret != 0) - { - // And finally send the request - ret = iUdp.endPacket(); - if (ret != 0) - { - // Now wait for a response - int wait_retries = 0; - ret = TIMED_OUT; - while ((wait_retries < 3) && (ret == TIMED_OUT)) - { - ret = ProcessResponse(5000, aResult); - wait_retries++; - } - } - } - } - retries++; - } - - // We're done with the socket now - iUdp.stop(); - } - - return ret; -} - -uint16_t DNSClient::BuildRequest(const char* aName) -{ - // Build header - // 1 1 1 1 1 1 - // 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 - // +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ - // | ID | - // +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ - // |QR| Opcode |AA|TC|RD|RA| Z | RCODE | - // +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ - // | QDCOUNT | - // +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ - // | ANCOUNT | - // +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ - // | NSCOUNT | - // +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ - // | ARCOUNT | - // +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ - // As we only support one request at a time at present, we can simplify - // some of this header - iRequestId = millis(); // generate a random ID - uint16_t twoByteBuffer; - - // FIXME We should also check that there's enough space available to write to, rather - // FIXME than assume there's enough space (as the code does at present) - iUdp.write((uint8_t*)&iRequestId, sizeof(iRequestId)); - - twoByteBuffer = htons(QUERY_FLAG | OPCODE_STANDARD_QUERY | RECURSION_DESIRED_FLAG); - iUdp.write((uint8_t*)&twoByteBuffer, sizeof(twoByteBuffer)); - - twoByteBuffer = htons(1); // One question record - iUdp.write((uint8_t*)&twoByteBuffer, sizeof(twoByteBuffer)); - - twoByteBuffer = 0; // Zero answer records - iUdp.write((uint8_t*)&twoByteBuffer, sizeof(twoByteBuffer)); - - iUdp.write((uint8_t*)&twoByteBuffer, sizeof(twoByteBuffer)); - // and zero additional records - iUdp.write((uint8_t*)&twoByteBuffer, sizeof(twoByteBuffer)); - - // Build question - const char* start =aName; - const char* end =start; - uint8_t len; - // Run through the name being requested - while (*end) - { - // Find out how long this section of the name is - end = start; - while (*end && (*end != '.') ) - { - end++; - } - - if (end-start > 0) - { - // Write out the size of this section - len = end-start; - iUdp.write(&len, sizeof(len)); - // And then write out the section - iUdp.write((uint8_t*)start, end-start); - } - start = end+1; - } - - // We've got to the end of the question name, so - // terminate it with a zero-length section - len = 0; - iUdp.write(&len, sizeof(len)); - // Finally the type and class of question - twoByteBuffer = htons(TYPE_A); - iUdp.write((uint8_t*)&twoByteBuffer, sizeof(twoByteBuffer)); - - twoByteBuffer = htons(CLASS_IN); // Internet class of question - iUdp.write((uint8_t*)&twoByteBuffer, sizeof(twoByteBuffer)); - // Success! Everything buffered okay - return 1; -} - - -uint16_t DNSClient::ProcessResponse(uint16_t aTimeout, IPAddress& aAddress) -{ - uint32_t startTime = millis(); - - // Wait for a response packet - while(iUdp.parsePacket() <= 0) - { - if((millis() - startTime) > aTimeout) - return TIMED_OUT; - delay(50); - } - - // We've had a reply! - // Read the UDP header - uint8_t header[DNS_HEADER_SIZE]; // Enough space to reuse for the DNS header - // Check that it's a response from the right server and the right port - if ( (iDNSServer != iUdp.remoteIP()) || - (iUdp.remotePort() != DNS_PORT) ) - { - // It's not from who we expected - return INVALID_SERVER; - } - - // Read through the rest of the response - if (iUdp.available() < DNS_HEADER_SIZE) - { - return TRUNCATED; - } - iUdp.read(header, DNS_HEADER_SIZE); - - uint16_t header_flags = htons(*((uint16_t*)&header[2])); - // Check that it's a response to this request - if ( ( iRequestId != (*((uint16_t*)&header[0])) ) || - ((header_flags & QUERY_RESPONSE_MASK) != (uint16_t)RESPONSE_FLAG) ) - { - // Mark the entire packet as read - iUdp.flush(); - return INVALID_RESPONSE; - } - // Check for any errors in the response (or in our request) - // although we don't do anything to get round these - if ( (header_flags & TRUNCATION_FLAG) || (header_flags & RESP_MASK) ) - { - // Mark the entire packet as read - iUdp.flush(); - return -5; //INVALID_RESPONSE; - } - - // And make sure we've got (at least) one answer - uint16_t answerCount = htons(*((uint16_t*)&header[6])); - if (answerCount == 0 ) - { - // Mark the entire packet as read - iUdp.flush(); - return -6; //INVALID_RESPONSE; - } - - // Skip over any questions - for (uint16_t i =0; i < htons(*((uint16_t*)&header[4])); i++) - { - // Skip over the name - uint8_t len; - do - { - iUdp.read(&len, sizeof(len)); - if (len > 0) - { - // Don't need to actually read the data out for the string, just - // advance ptr to beyond it - while(len--) - { - iUdp.read(); // we don't care about the returned byte - } - } - } while (len != 0); - - // Now jump over the type and class - for (int i =0; i < 4; i++) - { - iUdp.read(); // we don't care about the returned byte - } - } - - // Now we're up to the bit we're interested in, the answer - // There might be more than one answer (although we'll just use the first - // type A answer) and some authority and additional resource records but - // we're going to ignore all of them. - - for (uint16_t i =0; i < answerCount; i++) - { - // Skip the name - uint8_t len; - do - { - iUdp.read(&len, sizeof(len)); - if ((len & LABEL_COMPRESSION_MASK) == 0) - { - // It's just a normal label - if (len > 0) - { - // And it's got a length - // Don't need to actually read the data out for the string, - // just advance ptr to beyond it - while(len--) - { - iUdp.read(); // we don't care about the returned byte - } - } - } - else - { - // This is a pointer to a somewhere else in the message for the - // rest of the name. We don't care about the name, and RFC1035 - // says that a name is either a sequence of labels ended with a - // 0 length octet or a pointer or a sequence of labels ending in - // a pointer. Either way, when we get here we're at the end of - // the name - // Skip over the pointer - iUdp.read(); // we don't care about the returned byte - // And set len so that we drop out of the name loop - len = 0; - } - } while (len != 0); - - // Check the type and class - uint16_t answerType; - uint16_t answerClass; - iUdp.read((uint8_t*)&answerType, sizeof(answerType)); - iUdp.read((uint8_t*)&answerClass, sizeof(answerClass)); - - // Ignore the Time-To-Live as we don't do any caching - for (int i =0; i < TTL_SIZE; i++) - { - iUdp.read(); // we don't care about the returned byte - } - - // And read out the length of this answer - // Don't need header_flags anymore, so we can reuse it here - iUdp.read((uint8_t*)&header_flags, sizeof(header_flags)); - - if ( (htons(answerType) == TYPE_A) && (htons(answerClass) == CLASS_IN) ) - { - if (htons(header_flags) != 4) - { - // It's a weird size - // Mark the entire packet as read - iUdp.flush(); - return -9;//INVALID_RESPONSE; - } - iUdp.read(aAddress.raw_address(), 4); - return SUCCESS; - } - else - { - // This isn't an answer type we're after, move onto the next one - for (uint16_t i =0; i < htons(header_flags); i++) - { - iUdp.read(); // we don't care about the returned byte - } - } - } - - // Mark the entire packet as read - iUdp.flush(); - - // If we get here then we haven't found an answer - return -10;//INVALID_RESPONSE; -} - diff --git a/libraries/UIPEthernet/src/Dns.h b/libraries/UIPEthernet/src/Dns.h deleted file mode 100644 index 4913ca8..0000000 --- a/libraries/UIPEthernet/src/Dns.h +++ /dev/null @@ -1,41 +0,0 @@ -// Arduino DNS client for Enc28J60-based Ethernet shield -// (c) Copyright 2009-2010 MCQN Ltd. -// Released under Apache License, version 2.0 - -#ifndef DNSClient_h -#define DNSClient_h - -#include - -class DNSClient -{ -public: - // ctor - void begin(const IPAddress& aDNSServer); - - /** Convert a numeric IP address string into a four-byte IP address. - @param aIPAddrString IP address to convert - @param aResult IPAddress structure to store the returned IP address - @result 1 if aIPAddrString was successfully converted to an IP address, - else error code - */ - int inet_aton(const char *aIPAddrString, IPAddress& aResult); - - /** Resolve the given hostname to an IP address. - @param aHostname Name to be resolved - @param aResult IPAddress structure to store the returned IP address - @result 1 if aIPAddrString was successfully converted to an IP address, - else error code - */ - int getHostByName(const char* aHostname, IPAddress& aResult); - -protected: - uint16_t BuildRequest(const char* aName); - uint16_t ProcessResponse(uint16_t aTimeout, IPAddress& aAddress); - - IPAddress iDNSServer; - uint16_t iRequestId; - UIPUDP iUdp; -}; - -#endif diff --git a/libraries/UIPEthernet/src/UIPClient.cpp b/libraries/UIPEthernet/src/UIPClient.cpp deleted file mode 100644 index 73daaba..0000000 --- a/libraries/UIPEthernet/src/UIPClient.cpp +++ /dev/null @@ -1,533 +0,0 @@ -/* - UIPClient.cpp - Arduino implementation of a uIP wrapper class. - Copyright (c) 2013 Norbert Truchsess - All rights reserved. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - */ - -extern "C" -{ -#import "utility/uip-conf.h" -#import "utility/uip.h" -#import "utility/uip_arp.h" -#import "string.h" -} -#include "UIPEthernet.h" -#include "UIPClient.h" -#include "Dns.h" - -#ifdef UIPETHERNET_DEBUG_CLIENT -#include "HardwareSerial.h" -#endif - -#define UIP_TCP_PHYH_LEN UIP_LLH_LEN+UIP_IPTCPH_LEN - -uip_userdata_t UIPClient::all_data[UIP_CONNS]; - -UIPClient::UIPClient() : - data(NULL) -{ -} - -UIPClient::UIPClient(uip_userdata_t* conn_data) : - data(conn_data) -{ -} - -int -UIPClient::connect(IPAddress ip, uint16_t port) -{ - uip_ipaddr_t ipaddr; - uip_ip_addr(ipaddr, ip); - struct uip_conn* conn = uip_connect(&ipaddr, htons(port)); - if (conn) - { - while((conn->tcpstateflags & UIP_TS_MASK) != UIP_CLOSED) - { - UIPEthernet.tick(); - if ((conn->tcpstateflags & UIP_TS_MASK) == UIP_ESTABLISHED) - { - data = (uip_userdata_t*) conn->appstate; -#ifdef UIPETHERNET_DEBUG_CLIENT - - Serial.print(F("connected, state: ")); - Serial.print(data->state); - Serial.print(F(", first packet in: ")); - Serial.println(data->packets_in[0]); -#endif - return 1; - } - } - } - return 0; -} - -int -UIPClient::connect(const char *host, uint16_t port) -{ - // Look up the host first - int ret = 0; -#if UIP_UDP - DNSClient dns; - IPAddress remote_addr; - - dns.begin(UIPEthernet.dnsServerIP()); - ret = dns.getHostByName(host, remote_addr); - if (ret == 1) { - return connect(remote_addr, port); - } -#endif - return ret; -} - -void -UIPClient::stop() -{ - if (data) - { - _flushBlocks(&data->packets_in[0]); - if (data->state & UIP_CLIENT_CLOSED) - { - data->state = 0; - } - else - { - data->state |= UIP_CLIENT_CLOSE; - } - } - data = NULL; - UIPEthernet.tick(); -} - -uint8_t -UIPClient::connected() -{ - return (data && (data->packets_in[0] != NOBLOCK || (data->state & UIP_CLIENT_CONNECTED))) ? 1 : 0; -} - -bool -UIPClient::operator==(const UIPClient& rhs) -{ - return data && rhs.data && (data == rhs.data); -} - -UIPClient::operator bool() -{ - UIPEthernet.tick(); - return data && (!(data->state & UIP_CLIENT_CLOSED) || data->packets_in[0] != NOBLOCK); -} - -size_t -UIPClient::write(uint8_t c) -{ - return _write(data, &c, 1); -} - -size_t -UIPClient::write(const uint8_t *buf, size_t size) -{ - return _write(data, buf, size); -} - -size_t -UIPClient::_write(uip_userdata_t* u, const uint8_t *buf, size_t size) -{ - int remain = size; - uint16_t written; -#if UIP_ATTEMPTS_ON_WRITE > 0 - uint16_t attempts = UIP_ATTEMPTS_ON_WRITE; -#endif - repeat: - UIPEthernet.tick(); - if (u && !(u->state & (UIP_CLIENT_CLOSE | UIP_CLIENT_CLOSED))) - { - memhandle* p = _currentBlock(&u->packets_out[0]); - if (*p == NOBLOCK) - { -newpacket: - *p = UIPEthernet.network.allocBlock(UIP_SOCKET_DATALEN); - if (*p == NOBLOCK) - { -#if UIP_ATTEMPTS_ON_WRITE > 0 - if ((--attempts)>0) -#endif -#if UIP_ATTEMPTS_ON_WRITE != 0 - goto repeat; -#endif - goto ready; - } - u->out_pos = 0; - } -#ifdef UIPETHERNET_DEBUG_CLIENT - Serial.print(F("UIPClient.write: writePacket(")); - Serial.print(*p); - Serial.print(F(") pos: ")); - Serial.print(u->out_pos); - Serial.print(F(", buf[")); - Serial.print(size-remain); - Serial.print(F("-")); - Serial.print(remain); - Serial.print(F("]: '")); - Serial.write((uint8_t*)buf+size-remain,remain); - Serial.println(F("'")); -#endif - written = UIPEthernet.network.writePacket(*p,u->out_pos,(uint8_t*)buf+size-remain,remain); - remain -= written; - u->out_pos+=written; - if (remain > 0) - { - if (p==&u->packets_out[UIP_SOCKET_NUMPACKETS-1]) - { -#if UIP_ATTEMPTS_ON_WRITE > 0 - if ((--attempts)>0) -#endif -#if UIP_ATTEMPTS_ON_WRITE != 0 - goto repeat; -#endif - goto ready; - } - p++; - goto newpacket; - } -ready: - return size-remain; - } - return -1; -} - -int -UIPClient::available() -{ - if (*this) - return _available(data); - return 0; -} - -int -UIPClient::_available(uip_userdata_t *u) -{ - memhandle* p = &u->packets_in[0]; - if (*p == NOBLOCK) - return 0; - int len = 0; - for(memhandle* end = p+UIP_SOCKET_NUMPACKETS; p < end; p++) - { - if(*p == NOBLOCK) - break; - len += UIPEthernet.network.blockSize(*p); - } - return len; -} - -int -UIPClient::read(uint8_t *buf, size_t size) -{ - if (*this) - { - int remain = size; - memhandle* p = &data->packets_in[0]; - if (*p == NOBLOCK) - return 0; - int read; - do - { - read = UIPEthernet.network.readPacket(*p,0,buf+size-remain,remain); - if (read == UIPEthernet.network.blockSize(*p)) - { - remain -= read; - _eatBlock(p); - if (uip_stopped(&uip_conns[data->state & UIP_CLIENT_SOCKETS]) && !(data->state & (UIP_CLIENT_CLOSE | UIP_CLIENT_CLOSED))) - data->state |= UIP_CLIENT_RESTART; - if (*p == NOBLOCK) - { - if (data->state & UIP_CLIENT_CLOSED) - { - data->state = 0; - data = NULL; - } - return size-remain; - } - } - else - { - UIPEthernet.network.resizeBlock(*p,read); - break; - } - } - while(remain > 0); - return size; - } - return -1; -} - -int -UIPClient::read() -{ - uint8_t c; - if (read(&c,1) < 0) - return -1; - return c; -} - -int -UIPClient::peek() -{ - if (*this) - { - memhandle p = data->packets_in[0]; - if (p != NOBLOCK) - { - uint8_t c; - UIPEthernet.network.readPacket(p,0,&c,1); - return c; - } - } - return -1; -} - -void -UIPClient::flush() -{ - if (*this) - { - _flushBlocks(&data->packets_in[0]); - } -} - -void -uipclient_appcall(void) -{ - UIPClient::uip_callback(); -} - -void -UIPClient::uip_callback() -{ - uip_userdata_t *u = (uip_userdata_t*)uip_conn->appstate; - if (!u && uip_connected()) - { -#ifdef UIPETHERNET_DEBUG_CLIENT - Serial.println(F("UIPClient uip_connected")); -#endif - u = (uip_userdata_t*) _allocateData(); - if (u) - { - uip_conn->appstate = u; -#ifdef UIPETHERNET_DEBUG_CLIENT - Serial.print(F("UIPClient allocated state: ")); - Serial.println(u->state); -#endif - } -#ifdef UIPETHERNET_DEBUG_CLIENT - else - Serial.println(F("UIPClient allocation failed")); -#endif - } - if (u) - { - if (uip_newdata()) - { -#ifdef UIPETHERNET_DEBUG_CLIENT - Serial.print(F("UIPClient uip_newdata, uip_len:")); - Serial.println(uip_len); -#endif - if (uip_len && !(u->state & (UIP_CLIENT_CLOSE | UIP_CLIENT_CLOSED))) - { - memhandle newPacket = UIPEthernet.network.allocBlock(uip_len); - if (newPacket != NOBLOCK) - { - memhandle* p = _currentBlock(&u->packets_in[0]); - //if it's not the first packet - if (*p != NOBLOCK) - { - uint8_t slot = p - &u->packets_in[0]; - if (slot < UIP_SOCKET_NUMPACKETS-1) - p++; - //if this is the last slot stop this connection - if (slot >= UIP_SOCKET_NUMPACKETS-2) - { - uip_stop(); - //if there's no free slot left omit loosing this packet and (again) stop this connection - if (slot == UIP_SOCKET_NUMPACKETS-1) - goto reject_newdata; - } - } - UIPEthernet.network.copyPacket(newPacket,0,UIPEthernet.in_packet,((uint8_t*)uip_appdata)-uip_buf,uip_len); - *p = newPacket; - goto finish_newdata; - } -reject_newdata: - UIPEthernet.packetstate &= ~UIPETHERNET_FREEPACKET; - uip_stop(); - } - } -finish_newdata: - if (u->state & UIP_CLIENT_RESTART) - { - u->state &= ~UIP_CLIENT_RESTART; - uip_restart(); - } - // If the connection has been closed, save received but unread data. - if (uip_closed() || uip_timedout()) - { -#ifdef UIPETHERNET_DEBUG_CLIENT - Serial.println(F("UIPClient uip_closed")); -#endif - // drop outgoing packets not sent yet: - _flushBlocks(&u->packets_out[0]); - if (u->packets_in[0] != NOBLOCK) - { - ((uip_userdata_closed_t *)u)->lport = uip_conn->lport; - u->state |= UIP_CLIENT_CLOSED; - } - else - u->state = 0; - // disassociate appdata. - uip_conn->appstate = NULL; - goto nodata; - } - if (uip_acked()) - { -#ifdef UIPETHERNET_DEBUG_CLIENT - Serial.println(F("UIPClient uip_acked")); -#endif - _eatBlock(&u->packets_out[0]); - } - if (uip_poll() || uip_rexmit()) - { -#ifdef UIPETHERNET_DEBUG_CLIENT - //Serial.println(F("UIPClient uip_poll")); -#endif - memhandle p = u->packets_out[0]; - if (p != NOBLOCK) - { - if (u->packets_out[1] == NOBLOCK) - { - uip_len = u->out_pos; - if (uip_len > 0) - { - UIPEthernet.network.resizeBlock(p,0,uip_len); - } - } - else - uip_len = UIPEthernet.network.blockSize(p); - if (uip_len > 0) - { - UIPEthernet.uip_hdrlen = ((uint8_t*)uip_appdata)-uip_buf; - UIPEthernet.uip_packet = UIPEthernet.network.allocBlock(UIPEthernet.uip_hdrlen+uip_len); - if (UIPEthernet.uip_packet != NOBLOCK) - { - UIPEthernet.network.copyPacket(UIPEthernet.uip_packet,UIPEthernet.uip_hdrlen,p,0,uip_len); - UIPEthernet.packetstate |= UIPETHERNET_SENDPACKET; - uip_send(uip_appdata,uip_len); - } - return; - } - } - } - // don't close connection unless all outgoing packets are sent - if (u->state & UIP_CLIENT_CLOSE) - { -#ifdef UIPETHERNET_DEBUG_CLIENT - Serial.print(F("UIPClient state UIP_CLIENT_CLOSE")); -#endif - if (u->packets_out[0] == NOBLOCK) - { -#ifdef UIPETHERNET_DEBUG_CLIENT - Serial.print(F("UIPClient state UIP_CLIENT_CLOSE -> free userdata")); -#endif - u->state = 0; - uip_conn->appstate = NULL; - uip_close(); - } - else - uip_stop(); - } - } -nodata: - UIPEthernet.uip_packet = NOBLOCK; - uip_len=0; -} - -uip_userdata_t * -UIPClient::_allocateData() -{ - for ( uint8_t sock = 0; sock < UIP_CONNS; sock++ ) - { - uip_userdata_t* data = &UIPClient::all_data[sock]; - if (!data->state) - { - data->state = sock | UIP_CLIENT_CONNECTED; - memset(&data->packets_in[0],0,sizeof(uip_userdata_t)-sizeof(data->state)); - return data; - } - } - return NULL; -} - -memhandle* -UIPClient::_currentBlock(memhandle* block) -{ - for(memhandle* end = block+UIP_SOCKET_NUMPACKETS-1; block < end; block++) - if(*(block+1) == NOBLOCK) - break; - return block; -} - -void -UIPClient::_eatBlock(memhandle* block) -{ -#ifdef UIPETHERNET_DEBUG_CLIENT - memhandle* start = block; - Serial.print(F("eatblock(")); - Serial.print(*block); - Serial.print("): "); - for (uint8_t i = 0; i < UIP_SOCKET_NUMPACKETS; i++) - { - Serial.print(start[i]); - Serial.print(" "); - } - Serial.print("-> "); -#endif - memhandle* end = block+(UIP_SOCKET_NUMPACKETS-1); - UIPEthernet.network.freeBlock(*block); - while(block < end) - *block = *((block++)+1); - *end = NOBLOCK; -#ifdef UIPETHERNET_DEBUG_CLIENT - for (uint8_t i = 0; i < UIP_SOCKET_NUMPACKETS; i++) - { - Serial.print(start[i]); - Serial.print(F(" ")); - } - Serial.println(); -#endif -} - -void -UIPClient::_flushBlocks(memhandle* block) -{ - for(memhandle* end = block+UIP_SOCKET_NUMPACKETS; block < end; block++) - { - if(*block != NOBLOCK) - { - UIPEthernet.network.freeBlock(*block); - *block = NOBLOCK; - } - else - break; - } -} - diff --git a/libraries/UIPEthernet/src/UIPClient.h b/libraries/UIPEthernet/src/UIPClient.h deleted file mode 100644 index 0d8beab..0000000 --- a/libraries/UIPEthernet/src/UIPClient.h +++ /dev/null @@ -1,104 +0,0 @@ -/* - UIPClient.h - Arduino implementation of a uIP wrapper class. - Copyright (c) 2013 Norbert Truchsess - All rights reserved. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - */ - -#ifndef UIPCLIENT_H -#define UIPCLIENT_H - -#include "ethernet_comp.h" -#import "Client.h" -#import "utility/mempool.h" - -extern "C" { - #import "utility/uip.h" -} - -#define UIP_SOCKET_DATALEN UIP_TCP_MSS -//#define UIP_SOCKET_NUMPACKETS UIP_RECEIVE_WINDOW/UIP_TCP_MSS+1 -#ifndef UIP_SOCKET_NUMPACKETS -#define UIP_SOCKET_NUMPACKETS 5 -#endif - -#define UIP_CLIENT_CONNECTED 0x10 -#define UIP_CLIENT_CLOSE 0x20 -#define UIP_CLIENT_CLOSED 0x40 -#define UIP_CLIENT_RESTART 0x80 -#define UIP_CLIENT_STATEFLAGS (UIP_CLIENT_CONNECTED | UIP_CLIENT_CLOSE | UIP_CLIENT_CLOSED | UIP_CLIENT_RESTART) -#define UIP_CLIENT_SOCKETS ~UIP_CLIENT_STATEFLAGS - -typedef uint8_t uip_socket_ptr; - -typedef struct { - uint8_t state; - memhandle packets_in[UIP_SOCKET_NUMPACKETS]; - uint16_t lport; /**< The local TCP port, in network byte order. */ -} uip_userdata_closed_t; - -typedef struct { - uint8_t state; - memhandle packets_in[UIP_SOCKET_NUMPACKETS]; - memhandle packets_out[UIP_SOCKET_NUMPACKETS]; - memaddress out_pos; -} uip_userdata_t; - -class UIPClient : public Client { - -public: - UIPClient(); - int connect(IPAddress ip, uint16_t port); - int connect(const char *host, uint16_t port); - int read(uint8_t *buf, size_t size); - void stop(); - uint8_t connected(); - operator bool(); - virtual bool operator==(const EthernetClient&); - virtual bool operator!=(const EthernetClient& rhs) { return !this->operator==(rhs); }; - - size_t write(uint8_t); - size_t write(const uint8_t *buf, size_t size); - int available(); - int read(); - int peek(); - void flush(); - -private: - UIPClient(struct uip_conn *_conn); - UIPClient(uip_userdata_t* conn_data); - - uip_userdata_t* data; - - static uip_userdata_t all_data[UIP_CONNS]; - static uip_userdata_t* _allocateData(); - static uip_userdata_t* _getData(struct uip_conn * conn); - - static size_t _write(uip_userdata_t *,const uint8_t *buf, size_t size); - static int _available(uip_userdata_t *); - - static memhandle * _currentBlock(memhandle* blocks); - static void _eatBlock(memhandle* blocks); - static void _flushBlocks(memhandle* blocks); - - friend class UIPEthernetClass; - friend class UIPServer; - - friend void uipclient_appcall(void); - - static void uip_callback(); -}; - -#endif diff --git a/libraries/UIPEthernet/src/UIPEthernet.cpp b/libraries/UIPEthernet/src/UIPEthernet.cpp deleted file mode 100644 index ca59e93..0000000 --- a/libraries/UIPEthernet/src/UIPEthernet.cpp +++ /dev/null @@ -1,433 +0,0 @@ -/* - UIPEthernet.cpp - Arduino implementation of a uIP wrapper class. - Copyright (c) 2013 Norbert Truchsess - All rights reserved. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - */ - -#include -#include "UIPEthernet.h" -#include "utility/Enc28J60Network.h" - -#if(defined UIPETHERNET_DEBUG || defined UIPETHERNET_DEBUG_CHKSUM) -#include "HardwareSerial.h" -#endif - -extern "C" -{ -#include "utility/uip-conf.h" -#include "utility/uip.h" -#include "utility/uip_arp.h" -#include "utility/uip_timer.h" -} - -#define ETH_HDR ((struct uip_eth_hdr *)&uip_buf[0]) - -// Because uIP isn't encapsulated within a class we have to use global -// variables, so we can only have one TCP/IP stack per program. - -UIPEthernetClass::UIPEthernetClass() : - in_packet(NOBLOCK), - uip_packet(NOBLOCK), - uip_hdrlen(0), - packetstate(0), - _dhcp(NULL) -{ -} - -int -UIPEthernetClass::begin(const uint8_t* mac) -{ - static DhcpClass s_dhcp; - _dhcp = &s_dhcp; - - // Initialise the basic info - init(mac); - - // Now try to get our config info from a DHCP server - int ret = _dhcp->beginWithDHCP((uint8_t*)mac); - if(ret == 1) - { - // We've successfully found a DHCP server and got our configuration info, so set things - // accordingly - configure(_dhcp->getLocalIp(),_dhcp->getDnsServerIp(),_dhcp->getGatewayIp(),_dhcp->getSubnetMask()); - } - return ret; -} - -void -UIPEthernetClass::begin(const uint8_t* mac, IPAddress ip) -{ - IPAddress dns = ip; - dns[3] = 1; - begin(mac, ip, dns); -} - -void -UIPEthernetClass::begin(const uint8_t* mac, IPAddress ip, IPAddress dns) -{ - IPAddress gateway = ip; - gateway[3] = 1; - begin(mac, ip, dns, gateway); -} - -void -UIPEthernetClass::begin(const uint8_t* mac, IPAddress ip, IPAddress dns, IPAddress gateway) -{ - IPAddress subnet(255, 255, 255, 0); - begin(mac, ip, dns, gateway, subnet); -} - -void -UIPEthernetClass::begin(const uint8_t* mac, IPAddress ip, IPAddress dns, IPAddress gateway, IPAddress subnet) -{ - init(mac); - configure(ip,dns,gateway,subnet); -} - -int UIPEthernetClass::maintain(){ - tick(); - int rc = DHCP_CHECK_NONE; - if(_dhcp != NULL){ - //we have a pointer to dhcp, use it - rc = _dhcp->checkLease(); - switch ( rc ){ - case DHCP_CHECK_NONE: - //nothing done - break; - case DHCP_CHECK_RENEW_OK: - case DHCP_CHECK_REBIND_OK: - //we might have got a new IP. - configure(_dhcp->getLocalIp(),_dhcp->getDnsServerIp(),_dhcp->getGatewayIp(),_dhcp->getSubnetMask()); - break; - default: - //this is actually a error, it will retry though - break; - } - } - return rc; -} - -IPAddress UIPEthernetClass::localIP() -{ - IPAddress ret; - uip_ipaddr_t a; - uip_gethostaddr(a); - return ip_addr_uip(a); -} - -IPAddress UIPEthernetClass::subnetMask() -{ - IPAddress ret; - uip_ipaddr_t a; - uip_getnetmask(a); - return ip_addr_uip(a); -} - -IPAddress UIPEthernetClass::gatewayIP() -{ - IPAddress ret; - uip_ipaddr_t a; - uip_getdraddr(a); - return ip_addr_uip(a); -} - -IPAddress UIPEthernetClass::dnsServerIP() -{ - return _dnsServerAddress; -} - -void -UIPEthernetClass::tick() -{ - if (in_packet == NOBLOCK) - { - in_packet = network.receivePacket(); -#ifdef UIPETHERNET_DEBUG - if (in_packet != NOBLOCK) - { - Serial.print(F("--------------\nreceivePacket: ")); - Serial.println(in_packet); - } -#endif - } - if (in_packet != NOBLOCK) - { - packetstate = UIPETHERNET_FREEPACKET; - uip_len = network.blockSize(in_packet); - if (uip_len > 0) - { - network.readPacket(in_packet,0,(uint8_t*)uip_buf,UIP_BUFSIZE); - if (ETH_HDR ->type == HTONS(UIP_ETHTYPE_IP)) - { - uip_packet = in_packet; -#ifdef UIPETHERNET_DEBUG - Serial.print(F("readPacket type IP, uip_len: ")); - Serial.println(uip_len); -#endif - uip_arp_ipin(); - uip_input(); - if (uip_len > 0) - { - uip_arp_out(); - network_send(); - } - } - else if (ETH_HDR ->type == HTONS(UIP_ETHTYPE_ARP)) - { -#ifdef UIPETHERNET_DEBUG - Serial.print(F("readPacket type ARP, uip_len: ")); - Serial.println(uip_len); -#endif - uip_arp_arpin(); - if (uip_len > 0) - { - network_send(); - } - } - } - if (in_packet != NOBLOCK && (packetstate & UIPETHERNET_FREEPACKET)) - { -#ifdef UIPETHERNET_DEBUG - Serial.print(F("freeing packet: ")); - Serial.println(in_packet); -#endif - network.freePacket(); - in_packet = NOBLOCK; - } - } - - if (uip_timer_expired(&periodic_timer)) - { - uip_timer_restart(&periodic_timer); - for (int i = 0; i < UIP_CONNS; i++) - { - uip_periodic(i); - // If the above function invocation resulted in data that - // should be sent out on the network, the global variable - // uip_len is set to a value > 0. - if (uip_len > 0) - { - uip_arp_out(); - network_send(); - } - } - -#if UIP_UDP - for (int i = 0; i < UIP_UDP_CONNS; i++) - { - uip_udp_periodic(i); - // If the above function invocation resulted in data that - // should be sent out on the network, the global variable - // uip_len is set to a value > 0. */ - if (uip_len > 0) - { - network_send(); - } - } -#endif /* UIP_UDP */ - } -} - -boolean UIPEthernetClass::network_send() -{ - if (packetstate & UIPETHERNET_SENDPACKET) - { -#ifdef UIPETHERNET_DEBUG - Serial.print(F("network_send uip_packet: ")); - Serial.print(uip_packet); - Serial.print(F(", hdrlen: ")); - Serial.println(uip_hdrlen); -#endif - network.writePacket(uip_packet,0,uip_buf,uip_hdrlen); - goto sendandfree; - } - uip_packet = network.allocBlock(uip_len); - if (uip_packet != NOBLOCK) - { -#ifdef UIPETHERNET_DEBUG - Serial.print(F("network_send uip_buf (uip_len): ")); - Serial.print(uip_len); - Serial.print(F(", packet: ")); - Serial.println(uip_packet); -#endif - network.writePacket(uip_packet,0,uip_buf,uip_len); - goto sendandfree; - } - return false; -sendandfree: - network.sendPacket(uip_packet); - network.freeBlock(uip_packet); - uip_packet = NOBLOCK; - return true; -} - -void UIPEthernetClass::init(const uint8_t* mac) { - uip_timer_set(&this->periodic_timer, CLOCK_SECOND / 4); - - network.init((uint8_t*)mac); - uip_seteth_addr(mac); - - uip_init(); -} - -void UIPEthernetClass::configure(IPAddress ip, IPAddress dns, IPAddress gateway, IPAddress subnet) { - uip_ipaddr_t ipaddr; - - uip_ip_addr(ipaddr, ip); - uip_sethostaddr(ipaddr); - - uip_ip_addr(ipaddr, gateway); - uip_setdraddr(ipaddr); - - uip_ip_addr(ipaddr, subnet); - uip_setnetmask(ipaddr); - - _dnsServerAddress = dns; -} - -UIPEthernetClass UIPEthernet; - -/*---------------------------------------------------------------------------*/ -uint16_t -UIPEthernetClass::chksum(uint16_t sum, const uint8_t *data, uint16_t len) -{ - uint16_t t; - const uint8_t *dataptr; - const uint8_t *last_byte; - - dataptr = data; - last_byte = data + len - 1; - - while(dataptr < last_byte) { /* At least two more bytes */ - t = (dataptr[0] << 8) + dataptr[1]; - sum += t; - if(sum < t) { - sum++; /* carry */ - } - dataptr += 2; - } - - if(dataptr == last_byte) { - t = (dataptr[0] << 8) + 0; - sum += t; - if(sum < t) { - sum++; /* carry */ - } - } - - /* Return sum in host byte order. */ - return sum; -} - -/*---------------------------------------------------------------------------*/ - -uint16_t -UIPEthernetClass::ipchksum(void) -{ - uint16_t sum; - - sum = chksum(0, &uip_buf[UIP_LLH_LEN], UIP_IPH_LEN); - return (sum == 0) ? 0xffff : htons(sum); -} - -/*---------------------------------------------------------------------------*/ -uint16_t -UIPEthernetClass::upper_layer_chksum(uint8_t proto) -{ - uint16_t upper_layer_len; - uint16_t sum; - -#if UIP_CONF_IPV6 - upper_layer_len = (((u16_t)(BUF->len[0]) << 8) + BUF->len[1]); -#else /* UIP_CONF_IPV6 */ - upper_layer_len = (((u16_t)(BUF->len[0]) << 8) + BUF->len[1]) - UIP_IPH_LEN; -#endif /* UIP_CONF_IPV6 */ - - /* First sum pseudoheader. */ - - /* IP protocol and length fields. This addition cannot carry. */ - sum = upper_layer_len + proto; - /* Sum IP source and destination addresses. */ - sum = chksum(sum, (u8_t *)&BUF->srcipaddr[0], 2 * sizeof(uip_ipaddr_t)); - - uint8_t upper_layer_memlen; - switch(proto) - { - case UIP_PROTO_ICMP: - case UIP_PROTO_ICMP6: - upper_layer_memlen = upper_layer_len; - break; - case UIP_PROTO_TCP: - upper_layer_memlen = (BUF->tcpoffset >> 4) << 2; - break; -#if UIP_UDP - case UIP_PROTO_UDP: - upper_layer_memlen = UIP_UDPH_LEN; - break; -#endif - } - sum = chksum(sum, &uip_buf[UIP_IPH_LEN + UIP_LLH_LEN], upper_layer_memlen); -#ifdef UIPETHERNET_DEBUG_CHKSUM - Serial.print(F("chksum uip_buf[")); - Serial.print(UIP_IPH_LEN + UIP_LLH_LEN); - Serial.print(F("-")); - Serial.print(UIP_IPH_LEN + UIP_LLH_LEN + upper_layer_memlen); - Serial.print(F("]: ")); - Serial.println(htons(sum),HEX); -#endif - if (upper_layer_memlen < upper_layer_len) - { - sum = network.chksum( - sum, - uip_packet, - UIP_IPH_LEN + UIP_LLH_LEN + upper_layer_memlen, - upper_layer_len - upper_layer_memlen - ); -#ifdef UIPETHERNET_DEBUG_CHKSUM - Serial.print(F("chksum uip_packet(")); - Serial.print(uip_packet); - Serial.print(F(")[")); - Serial.print(UIP_IPH_LEN + UIP_LLH_LEN + upper_layer_memlen); - Serial.print(F("-")); - Serial.print(UIP_IPH_LEN + UIP_LLH_LEN + upper_layer_len); - Serial.print(F"]: ")); - Serial.println(htons(sum),HEX); -#endif - } - return (sum == 0) ? 0xffff : htons(sum); -} - -uint16_t -uip_ipchksum(void) -{ - return UIPEthernet.ipchksum(); -} - -uint16_t -uip_tcpchksum(void) -{ - uint16_t sum = UIPEthernet.upper_layer_chksum(UIP_PROTO_TCP); - return sum; -} - -#if UIP_UDP -uint16_t -uip_udpchksum(void) -{ - uint16_t sum = UIPEthernet.upper_layer_chksum(UIP_PROTO_UDP); - return sum; -} -#endif diff --git a/libraries/UIPEthernet/src/UIPEthernet.h b/libraries/UIPEthernet/src/UIPEthernet.h deleted file mode 100644 index 94502f1..0000000 --- a/libraries/UIPEthernet/src/UIPEthernet.h +++ /dev/null @@ -1,125 +0,0 @@ -/* - UIPEthernet.h - Arduino implementation of a uIP wrapper class. - Copyright (c) 2013 Norbert Truchsess - All rights reserved. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - */ - -#ifndef UIPETHERNET_H -#define UIPETHERNET_H - -#include "ethernet_comp.h" -#include -#include "Dhcp.h" -#include "IPAddress.h" -#include "utility/Enc28J60Network.h" -#include "UIPClient.h" -#include "UIPServer.h" -#include "UIPUdp.h" - -extern "C" -{ -#include "utility/uip_timer.h" -#include "utility/uip.h" -} - -//#define UIPETHERNET_DEBUG -//#define UIPETHERNET_DEBUG_CHKSUM -//#define UIPETHERNET_DEBUG_UDP -//#define UIPETHERNET_DEBUG_CLIENT - -#define UIPETHERNET_FREEPACKET 1 -#define UIPETHERNET_SENDPACKET 2 -#define UIPETHERNET_BUFFERREAD 4 - -#define uip_ip_addr(addr, ip) do { \ - ((u16_t *)(addr))[0] = HTONS(((ip[0]) << 8) | (ip[1])); \ - ((u16_t *)(addr))[1] = HTONS(((ip[2]) << 8) | (ip[3])); \ - } while(0) - -#define ip_addr_uip(a) IPAddress(a[0] & 0xFF, a[0] >> 8 , a[1] & 0xFF, a[1] >> 8) //TODO this is not IPV6 capable - -#define uip_seteth_addr(eaddr) do {uip_ethaddr.addr[0] = eaddr[0]; \ - uip_ethaddr.addr[1] = eaddr[1];\ - uip_ethaddr.addr[2] = eaddr[2];\ - uip_ethaddr.addr[3] = eaddr[3];\ - uip_ethaddr.addr[4] = eaddr[4];\ - uip_ethaddr.addr[5] = eaddr[5];} while(0) - -#define BUF ((struct uip_tcpip_hdr *)&uip_buf[UIP_LLH_LEN]) - -class UIPEthernetClass -{ -public: - UIPEthernetClass(); - - int begin(const uint8_t* mac); - void begin(const uint8_t* mac, IPAddress ip); - void begin(const uint8_t* mac, IPAddress ip, IPAddress dns); - void begin(const uint8_t* mac, IPAddress ip, IPAddress dns, IPAddress gateway); - void begin(const uint8_t* mac, IPAddress ip, IPAddress dns, IPAddress gateway, IPAddress subnet); - - // maintain() must be called at regular intervals to process the incoming serial - // data and issue IP events to the sketch. It does not return until all IP - // events have been processed. Renews dhcp-lease if required. - int maintain(); - - IPAddress localIP(); - IPAddress subnetMask(); - IPAddress gatewayIP(); - IPAddress dnsServerIP(); - -private: - IPAddress _dnsServerAddress; - DhcpClass* _dhcp; - - struct uip_timer periodic_timer; - - memhandle in_packet; - memhandle uip_packet; - uint8_t uip_hdrlen; - uint8_t packetstate; - - Enc28J60Network network; - - void init(const uint8_t* mac); - void configure(IPAddress ip, IPAddress dns, IPAddress gateway, IPAddress subnet); - - void tick(); - - boolean network_send(); - - friend class UIPServer; - - friend class UIPClient; - - friend class UIPUDP; - - static uint16_t chksum(uint16_t sum, const uint8_t* data, uint16_t len); - static uint16_t ipchksum(void); - uint16_t upper_layer_chksum(uint8_t proto); - - friend uint16_t uip_ipchksum(void); - friend uint16_t uip_tcpchksum(void); - friend uint16_t uip_udpchksum(void); - -#if UIP_CONF_IPV6 - uint16_t uip_icmp6chksum(void); -#endif /* UIP_CONF_IPV6 */ -}; - -extern UIPEthernetClass UIPEthernet; - -#endif diff --git a/libraries/UIPEthernet/src/UIPServer.cpp b/libraries/UIPEthernet/src/UIPServer.cpp deleted file mode 100644 index 12ff72f..0000000 --- a/libraries/UIPEthernet/src/UIPServer.cpp +++ /dev/null @@ -1,63 +0,0 @@ -/* - UIPServer.cpp - Arduino implementation of a uIP wrapper class. - Copyright (c) 2013 Norbert Truchsess - All rights reserved. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - */ -#include "UIPEthernet.h" -#include "UIPServer.h" -extern "C" { - #include "utility/uip-conf.h" -} - -UIPServer::UIPServer(uint16_t port) : _port(htons(port)) -{ -} - -UIPClient UIPServer::available() -{ - UIPEthernet.tick(); - for ( uip_userdata_t* data = &UIPClient::all_data[0]; data < &UIPClient::all_data[UIP_CONNS]; data++ ) - { - if (data->packets_in[0] != NOBLOCK - && (((data->state & UIP_CLIENT_CONNECTED) && uip_conns[data->state & UIP_CLIENT_SOCKETS].lport ==_port) - || ((data->state & UIP_CLIENT_CLOSED) && ((uip_userdata_closed_t *)data)->lport == _port))) - return UIPClient(data); - } - return UIPClient(); -} - -void UIPServer::begin() -{ - uip_listen(_port); - UIPEthernet.tick(); -} - -size_t UIPServer::write(uint8_t c) -{ - return write(&c,1); -} - -size_t UIPServer::write(const uint8_t *buf, size_t size) -{ - size_t ret = 0; - for ( uip_userdata_t* data = &UIPClient::all_data[0]; data < &UIPClient::all_data[UIP_CONNS]; data++ ) - { - if ((data->state & UIP_CLIENT_CONNECTED) && uip_conns[data->state & UIP_CLIENT_SOCKETS].lport ==_port) - ret += UIPClient::_write(data,buf,size); - } - return ret; -} - diff --git a/libraries/UIPEthernet/src/UIPServer.h b/libraries/UIPEthernet/src/UIPServer.h deleted file mode 100644 index 64bdade..0000000 --- a/libraries/UIPEthernet/src/UIPServer.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - UIPServer.h - Arduino implementation of a uIP wrapper class. - Copyright (c) 2013 Norbert Truchsess - All rights reserved. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - */ -#ifndef UIPSERVER_H -#define UIPSERVER_H - -#include "ethernet_comp.h" -#import "Server.h" -#import "UIPClient.h" - -class UIPServer : Server { - -public: - UIPServer(uint16_t); - UIPClient available(); - void begin(); - size_t write(uint8_t); - size_t write(const uint8_t *buf, size_t size); - using Print::write; - -private: - uint16_t _port; -}; - -#endif diff --git a/libraries/UIPEthernet/src/UIPUdp.cpp b/libraries/UIPEthernet/src/UIPUdp.cpp deleted file mode 100644 index d1cb7b1..0000000 --- a/libraries/UIPEthernet/src/UIPUdp.cpp +++ /dev/null @@ -1,424 +0,0 @@ -/* - UIPUdp.cpp - Arduino implementation of a uIP wrapper class. - Copyright (c) 2013 Norbert Truchsess - All rights reserved. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - */ - -#include "UIPEthernet.h" -#include "UIPUdp.h" -#include "Dns.h" - -#ifdef UIPETHERNET_DEBUG_UDP -#include "HardwareSerial.h" -#endif - -extern "C" { -#include "utility/uip-conf.h" -#include "utility/uip.h" -#include "utility/uip_arp.h" -} - -#if UIP_UDP -#define UIP_ARPHDRSIZE 42 -#define UDPBUF ((struct uip_udpip_hdr *)&uip_buf[UIP_LLH_LEN]) - -// Constructor -UIPUDP::UIPUDP() : - _uip_udp_conn(NULL) -{ - memset(&appdata,0,sizeof(appdata)); -} - -// initialize, start listening on specified port. Returns 1 if successful, 0 if there are no sockets available to use -uint8_t -UIPUDP::begin(uint16_t port) -{ - if (!_uip_udp_conn) - { - _uip_udp_conn = uip_udp_new(NULL, 0); - } - if (_uip_udp_conn) - { - uip_udp_bind(_uip_udp_conn,htons(port)); - _uip_udp_conn->appstate = &appdata; - return 1; - } - return 0; -} - -// Finish with the UDP socket -void -UIPUDP::stop() -{ - if (_uip_udp_conn) - { - flush(); - uip_udp_remove(_uip_udp_conn); - _uip_udp_conn->appstate = NULL; - _uip_udp_conn=NULL; - if (appdata.packet_in != NOBLOCK) - { - UIPEthernet.network.freeBlock(appdata.packet_in); - appdata.packet_in = NOBLOCK; - } - uint8_t i = 0; - memhandle* packet = &appdata.packets_in[0]; - while (*packet != NOBLOCK && i < UIP_UDP_NUMPACKETS) - { - UIPEthernet.network.freeBlock(*packet); - *packet++ = NOBLOCK; - i++; - } - if (appdata.packet_out != NOBLOCK) - { - UIPEthernet.network.freeBlock(appdata.packet_out); - appdata.packet_out = NOBLOCK; - } - } -} - -// Sending UDP packets - -// Start building up a packet to send to the remote host specific in ip and port -// Returns 1 if successful, 0 if there was a problem with the supplied IP address or port -int -UIPUDP::beginPacket(IPAddress ip, uint16_t port) -{ - UIPEthernet.tick(); - if (ip && port) - { - uip_ipaddr_t ripaddr; - uip_ip_addr(&ripaddr, ip); -#ifdef UIPETHERNET_DEBUG_UDP - Serial.print(F("udp beginPacket, ")); -#endif - if (_uip_udp_conn) - { - _uip_udp_conn->rport = htons(port); - uip_ipaddr_copy(_uip_udp_conn->ripaddr, &ripaddr); - } - else - { - _uip_udp_conn = uip_udp_new(&ripaddr,htons(port)); - if (_uip_udp_conn) - { -#ifdef UIPETHERNET_DEBUG_UDP - Serial.print(F("new connection, ")); -#endif - _uip_udp_conn->appstate = &appdata; - } - else - { -#ifdef UIPETHERNET_DEBUG_UDP - Serial.println(F("failed to allocate new connection")); -#endif - return 0; - } - } -#ifdef UIPETHERNET_DEBUG_UDP - Serial.print(F("rip: ")); - Serial.print(ip); - Serial.print(F(", port: ")); - Serial.println(port); -#endif - } - if (_uip_udp_conn) - { - if (appdata.packet_out == NOBLOCK) - { - appdata.packet_out = UIPEthernet.network.allocBlock(UIP_UDP_MAXPACKETSIZE); - appdata.out_pos = UIP_UDP_PHYH_LEN; - if (appdata.packet_out != NOBLOCK) - return 1; -#ifdef UIPETHERNET_DEBUG_UDP - else - Serial.println(F("failed to allocate memory for packet")); -#endif - } -#ifdef UIPETHERNET_DEBUG_UDP - else - Serial.println(F("previous packet on that connection not sent yet")); -#endif - } - return 0; -} - -// Start building up a packet to send to the remote host specific in host and port -// Returns 1 if successful, 0 if there was a problem resolving the hostname or port -int -UIPUDP::beginPacket(const char *host, uint16_t port) -{ - // Look up the host first - int ret = 0; - DNSClient dns; - IPAddress remote_addr; - - dns.begin(UIPEthernet.dnsServerIP()); - ret = dns.getHostByName(host, remote_addr); - if (ret == 1) { - return beginPacket(remote_addr, port); - } else { - return ret; - } -} - -// Finish off this packet and send it -// Returns 1 if the packet was sent successfully, 0 if there was an error -int -UIPUDP::endPacket() -{ - if (_uip_udp_conn && appdata.packet_out != NOBLOCK) - { - appdata.send = true; - UIPEthernet.network.resizeBlock(appdata.packet_out,0,appdata.out_pos); - uip_udp_periodic_conn(_uip_udp_conn); - if (uip_len > 0) - { - UIPEthernet.network_send(); - return 1; - } - } - return 0; -} - -// Write a single byte into the packet -size_t -UIPUDP::write(uint8_t c) -{ - return write(&c,1); -} - -// Write size bytes from buffer into the packet -size_t -UIPUDP::write(const uint8_t *buffer, size_t size) -{ - if (appdata.packet_out != NOBLOCK) - { - size_t ret = UIPEthernet.network.writePacket(appdata.packet_out,appdata.out_pos,(uint8_t*)buffer,size); - appdata.out_pos += ret; - return ret; - } - return 0; -} - -// Start processing the next available incoming packet -// Returns the size of the packet in bytes, or 0 if no packets are available -int -UIPUDP::parsePacket() -{ - UIPEthernet.tick(); - if (appdata.packet_in != NOBLOCK) - { -#ifdef UIPETHERNET_DEBUG_UDP - Serial.print(F("udp parsePacket freeing previous packet: ")); - Serial.println(appdata.packet_in); -#endif; - UIPEthernet.network.freeBlock(appdata.packet_in); - } - memhandle *packet = &appdata.packets_in[0]; - appdata.packet_in = *packet; - if (appdata.packet_in != NOBLOCK) - { -#ifdef UIPETHERNET_DEBUG_UDP - Serial.print(F("udp parsePacket received packet: ")); - Serial.print(appdata.packet_in); -#endif - if (UIP_UDP_NUMPACKETS > 1) - { - uint8_t i = 1; - memhandle* p = packet+1; -freeloop: - *packet = *p; - if (*packet == NOBLOCK) - goto freeready; - packet++; - if (i < UIP_UDP_NUMPACKETS-1) - { - i++; - p++; - goto freeloop; - } - } - *packet = NOBLOCK; -freeready: - int size = UIPEthernet.network.blockSize(appdata.packet_in); -#ifdef UIPETHERNET_DEBUG_UDP - Serial.print(F(", size: ")); - Serial.println(size); -#endif - return size; - } - return 0; -} - -// Number of bytes remaining in the current packet -int -UIPUDP::available() -{ - UIPEthernet.tick(); - if (appdata.packet_in != NOBLOCK) - { - return UIPEthernet.network.blockSize(appdata.packet_in); - } - return 0; -} - -// Read a single byte from the current packet -int -UIPUDP::read() -{ - unsigned char c; - if (read(&c,1) > 0) - { - return c; - } - return -1; -} - -// Read up to len bytes from the current packet and place them into buffer -// Returns the number of bytes read, or 0 if none are available -int -UIPUDP::read(unsigned char* buffer, size_t len) -{ - UIPEthernet.tick(); - if (appdata.packet_in != NOBLOCK) - { - int read = UIPEthernet.network.readPacket(appdata.packet_in,0,buffer,len); - UIPEthernet.network.resizeBlock(appdata.packet_in,read); - return read; - } - return 0; -} - -// Return the next byte from the current packet without moving on to the next byte -int -UIPUDP::peek() -{ - UIPEthernet.tick(); - if (appdata.packet_in != NOBLOCK) - { - unsigned char c; - if (UIPEthernet.network.readPacket(appdata.packet_in,0,&c,1) == 1) - return c; - } - return -1; -} - -// Finish reading the current packet -void -UIPUDP::flush() -{ - UIPEthernet.tick(); - if (appdata.packet_in != NOBLOCK) - { - UIPEthernet.network.freeBlock(appdata.packet_in); - appdata.packet_in = NOBLOCK; - } -} - -// Return the IP address of the host who sent the current incoming packet -IPAddress -UIPUDP::remoteIP() -{ - return _uip_udp_conn ? ip_addr_uip(_uip_udp_conn->ripaddr) : IPAddress(); -} - -// Return the port of the host who sent the current incoming packet -uint16_t -UIPUDP::remotePort() -{ - return _uip_udp_conn ? ntohs(_uip_udp_conn->rport) : 0; -} - -// uIP callback function - -void -uipudp_appcall(void) { - UIPUDP::uip_callback(); -} - -void -UIPUDP::uip_callback() { - if (appdata_t *data = (appdata_t *)(uip_udp_conn->appstate)) - { - if (uip_newdata()) - { - uip_udp_conn->rport = UDPBUF->srcport; - uip_ipaddr_copy(uip_udp_conn->ripaddr,UDPBUF->srcipaddr); - memhandle *packet = &data->packets_in[0]; - uint8_t i = 0; - do - { - if (*packet == NOBLOCK) - { - *packet = UIPEthernet.network.allocBlock(ntohs(UDPBUF->udplen)-UIP_UDPH_LEN); - //if we are unable to allocate memory the packet is dropped. udp doesn't guarantee packet delivery - if (*packet != NOBLOCK) - { - //discard Linklevel and IP and udp-header and any trailing bytes: - UIPEthernet.network.copyPacket(*packet,0,UIPEthernet.in_packet,UIP_UDP_PHYH_LEN,UIPEthernet.network.blockSize(*packet)); - #ifdef UIPETHERNET_DEBUG_UDP - Serial.print(F("udp, uip_newdata received packet: ")); - Serial.print(*packet); - Serial.print(F(", slot: ")); - Serial.print(i); - Serial.print(F(", size: ")); - Serial.println(UIPEthernet.network.blockSize(*packet)); - #endif - break; - } - } - packet++; - i++; - } - while (i < UIP_UDP_NUMPACKETS); - } - if (uip_poll() && data->send) - { - //set uip_slen (uip private) by calling uip_udp_send -#ifdef UIPETHERNET_DEBUG_UDP - Serial.print(F("udp, uip_poll preparing packet to send: ")); - Serial.print(data->packet_out); - Serial.print(F(", size: ")); - Serial.println(UIPEthernet.network.blockSize(data->packet_out)); -#endif - UIPEthernet.uip_packet = data->packet_out; - data->packet_out = NOBLOCK; - UIPEthernet.uip_hdrlen = UIP_UDP_PHYH_LEN; - UIPEthernet.packetstate |= UIPETHERNET_SENDPACKET; - uip_udp_send(data->out_pos - (UIP_UDP_PHYH_LEN)); - uip_process(UIP_UDP_SEND_CONN); //generate udp + ip headers - uip_arp_out(); //add arp - if (uip_len == UIP_ARPHDRSIZE) - { - UIPEthernet.packetstate &= ~UIPETHERNET_SENDPACKET; -#ifdef UIPETHERNET_DEBUG_UDP - Serial.println(F("udp, uip_poll results in ARP-packet")); -#endif - } - else - //arp found ethaddr for ip (otherwise packet is replaced by arp-request) - { - data->send = false; -#ifdef UIPETHERNET_DEBUG_UDP - Serial.print(F("udp, uip_packet to send: ")); - Serial.println(UIPEthernet.uip_packet); -#endif - } - } - } -} -#endif diff --git a/libraries/UIPEthernet/src/UIPUdp.h b/libraries/UIPEthernet/src/UIPUdp.h deleted file mode 100644 index c965ffa..0000000 --- a/libraries/UIPEthernet/src/UIPUdp.h +++ /dev/null @@ -1,126 +0,0 @@ -/* - UIPUdp.h - Arduino implementation of a uIP wrapper class. - Copyright (c) 2013 Norbert Truchsess - All rights reserved. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - */ - -#ifndef UIPUDP_H -#define UIPUDP_H - -#include "ethernet_comp.h" -#include "Arduino.h" -#include -#include "utility/mempool.h" -extern "C" { - #include "utility/uip.h"; -} - -#define UIP_UDP_MAXDATALEN 1500 -#define UIP_UDP_PHYH_LEN UIP_LLH_LEN+UIP_IPUDPH_LEN -#define UIP_UDP_MAXPACKETSIZE UIP_UDP_MAXDATALEN+UIP_UDP_PHYH_LEN -#ifndef UIP_UDP_NUMPACKETS -#define UIP_UDP_NUMPACKETS 5 -#endif - -class UIPUDP : public UDP -{ - -private: - struct uip_udp_conn *_uip_udp_conn; - - struct appdata_t - { - memaddress out_pos; - memhandle packets_in[UIP_UDP_NUMPACKETS]; - memhandle packet_in; - memhandle packet_out; - boolean send; - } appdata; - -public: - UIPUDP(); // Constructor - uint8_t - begin(uint16_t);// initialize, start listening on specified port. Returns 1 if successful, 0 if there are no sockets available to use - void - stop(); // Finish with the UDP socket - - // Sending UDP packets - - // Start building up a packet to send to the remote host specific in ip and port - // Returns 1 if successful, 0 if there was a problem with the supplied IP address or port - int - beginPacket(IPAddress ip, uint16_t port); - // Start building up a packet to send to the remote host specific in host and port - // Returns 1 if successful, 0 if there was a problem resolving the hostname or port - int - beginPacket(const char *host, uint16_t port); - // Finish off this packet and send it - // Returns 1 if the packet was sent successfully, 0 if there was an error - int - endPacket(); - // Write a single byte into the packet - size_t - write(uint8_t); - // Write size bytes from buffer into the packet - size_t - write(const uint8_t *buffer, size_t size); - - using Print::write; - - // Start processing the next available incoming packet - // Returns the size of the packet in bytes, or 0 if no packets are available - int - parsePacket(); - // Number of bytes remaining in the current packet - int - available(); - // Read a single byte from the current packet - int - read(); - // Read up to len bytes from the current packet and place them into buffer - // Returns the number of bytes read, or 0 if none are available - int - read(unsigned char* buffer, size_t len); - // Read up to len characters from the current packet and place them into buffer - // Returns the number of characters read, or 0 if none are available - int - read(char* buffer, size_t len) - { - return read((unsigned char*) buffer, len); - } - ; - // Return the next byte from the current packet without moving on to the next byte - int - peek(); - void - flush(); // Finish reading the current packet - - // Return the IP address of the host who sent the current incoming packet - IPAddress - remoteIP(); - - // Return the port of the host who sent the current incoming packet - uint16_t - remotePort(); - -private: - - friend void uipudp_appcall(void); - - static void uip_callback(); -}; - -#endif diff --git a/libraries/UIPEthernet/src/ethernet_comp.h b/libraries/UIPEthernet/src/ethernet_comp.h deleted file mode 100644 index 4cec2ab..0000000 --- a/libraries/UIPEthernet/src/ethernet_comp.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef ETHERNET_COMP_H -#define ETHERNET_COMP_H - -#define Ethernet UIPEthernet -#define EthernetClient UIPClient -#define EthernetServer UIPServer -#define EthernetUDP UIPUDP - -#endif diff --git a/libraries/UIPEthernet/src/utility/Enc28J60Network.h b/libraries/UIPEthernet/src/utility/Enc28J60Network.h deleted file mode 100644 index 461ec59..0000000 --- a/libraries/UIPEthernet/src/utility/Enc28J60Network.h +++ /dev/null @@ -1,93 +0,0 @@ -/* - Enc28J60Network.h - UIPEthernet network driver for Microchip ENC28J60 Ethernet Interface. - - Copyright (c) 2013 Norbert Truchsess - All rights reserved. - - inspired by enc28j60.c file from the AVRlib library by Pascal Stang. - For AVRlib See http://www.procyonengineering.com/ - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - */ - -#ifndef ENC28J60NETWORK_H_ -#define ENC28J60NETWORK_H_ - -#include "mempool.h" - -#define ENC28J60_CONTROL_CS SS // this is pin 10 on Uno and pin 53 on Mega256 - -#if defined(ARDUINO_ARCH_AVR) -// AVR-specific code -#define SPI_MOSI MOSI -#define SPI_MISO MISO -#define SPI_SCK SCK -#define SPI_SS SS -#define ENC28J60_USE_SPILIB 0 -#elif defined(ARDUINO_ARCH_SAM) -#define ENC28J60_USE_SPILIB 1 -#endif - -#define UIP_RECEIVEBUFFERHANDLE 0xff - -//#define ENC28J60DEBUG - -/* - * Empfangen von ip-header, arp etc... - * wenn tcp/udp -> tcp/udp-callback -> assign new packet to connection - */ - -class Enc28J60Network : public MemoryPool -{ - -private: - uint16_t nextPacketPtr; - uint8_t bank; - - struct memblock receivePkt; - - uint8_t readOp(uint8_t op, uint8_t address); - void writeOp(uint8_t op, uint8_t address, uint8_t data); - uint16_t setReadPtr(memhandle handle, memaddress position, uint16_t len); - void setERXRDPT(); - void readBuffer(uint16_t len, uint8_t* data); - void writeBuffer(uint16_t len, uint8_t* data); - uint8_t readByte(uint16_t addr); - void writeByte(uint16_t addr, uint8_t data); - void setBank(uint8_t address); - uint8_t readReg(uint8_t address); - void writeReg(uint8_t address, uint8_t data); - void writeRegPair(uint8_t address, uint16_t data); - void phyWrite(uint8_t address, uint16_t data); - void clkout(uint8_t clk); - uint8_t getrev(void); - -protected: - void memblock_mv_cb(memaddress dest, memaddress src, memaddress size); - -public: - Enc28J60Network(); - void init(uint8_t* macaddr); - memhandle receivePacket(); - void freePacket(); - memaddress blockSize(memhandle handle); - void sendPacket(memhandle handle); - uint16_t readPacket(memhandle handle, memaddress position, uint8_t* buffer, uint16_t len); - uint16_t writePacket(memhandle handle, memaddress position, uint8_t* buffer, uint16_t len); - void copyPacket(memhandle dest, memaddress dest_pos, memhandle src, memaddress src_pos, uint16_t len); - uint16_t chksum(uint16_t sum, memhandle handle, memaddress pos, uint16_t len); -}; - -#endif /* ENC28J60NETWORK_H_ */ diff --git a/libraries/UIPEthernet/src/utility/mempool_conf.h b/libraries/UIPEthernet/src/utility/mempool_conf.h deleted file mode 100644 index bd5a726..0000000 --- a/libraries/UIPEthernet/src/utility/mempool_conf.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef MEMPOOLCONF_H -#define MEMPOOLCONF_H -#include "uipethernet-conf.h" -extern "C" { - #include "uipopt.h" -} -#include - -typedef uint16_t memaddress; -typedef uint8_t memhandle; - -#if UIP_SOCKET_NUMPACKETS and UIP_CONNS -#define NUM_TCP_MEMBLOCKS (UIP_SOCKET_NUMPACKETS*2)*UIP_CONNS -#else -#define NUM_TCP_MEMBLOCKS 0 -#endif - -#if UIP_UDP and UIP_UDP_NUMPACKETS and UIP_UDP_CONNS -#define NUM_UDP_MEMBLOCKS (UIP_UDP_NUMPACKETS+1)*UIP_UDP_CONNS -#else -#define NUM_UDP_MEMBLOCKS 0 -#endif - -#define NUM_MEMBLOCKS (NUM_TCP_MEMBLOCKS+NUM_UDP_MEMBLOCKS) - -#define MEMBLOCK_MV - -#endif diff --git a/libraries/UIPEthernet/src/utility/uip-neighbor.c b/libraries/UIPEthernet/src/utility/uip-neighbor.c deleted file mode 100644 index 739c03e..0000000 --- a/libraries/UIPEthernet/src/utility/uip-neighbor.c +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Copyright (c) 2006, Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This file is part of the uIP TCP/IP stack - * - * $Id: uip-neighbor.c,v 1.2 2006/06/12 08:00:30 adam Exp $ - */ - -/** - * \file - * Database of link-local neighbors, used by IPv6 code and - * to be used by a future ARP code rewrite. - * \author - * Adam Dunkels - */ - -#include "uip-neighbor.h" - -#include - -#define MAX_TIME 128 - -#ifdef UIP_NEIGHBOR_CONF_ENTRIES -#define ENTRIES UIP_NEIGHBOR_CONF_ENTRIES -#else /* UIP_NEIGHBOR_CONF_ENTRIES */ -#define ENTRIES 8 -#endif /* UIP_NEIGHBOR_CONF_ENTRIES */ - -struct neighbor_entry { - uip_ipaddr_t ipaddr; - struct uip_neighbor_addr addr; - u8_t time; -}; -static struct neighbor_entry entries[ENTRIES]; - -/*---------------------------------------------------------------------------*/ -void -uip_neighbor_init(void) -{ - int i; - - for(i = 0; i < ENTRIES; ++i) { - entries[i].time = MAX_TIME; - } -} -/*---------------------------------------------------------------------------*/ -void -uip_neighbor_periodic(void) -{ - int i; - - for(i = 0; i < ENTRIES; ++i) { - if(entries[i].time < MAX_TIME) { - entries[i].time++; - } - } -} -/*---------------------------------------------------------------------------*/ -void -uip_neighbor_add(uip_ipaddr_t ipaddr, struct uip_neighbor_addr *addr) -{ - int i, oldest; - u8_t oldest_time; - - printf("Adding neighbor with link address %02x:%02x:%02x:%02x:%02x:%02x\n", - addr->addr.addr[0], addr->addr.addr[1], addr->addr.addr[2], addr->addr.addr[3], - addr->addr.addr[4], addr->addr.addr[5]); - - /* Find the first unused entry or the oldest used entry. */ - oldest_time = 0; - oldest = 0; - for(i = 0; i < ENTRIES; ++i) { - if(entries[i].time == MAX_TIME) { - oldest = i; - break; - } - if(uip_ipaddr_cmp(entries[i].ipaddr, addr)) { - oldest = i; - break; - } - if(entries[i].time > oldest_time) { - oldest = i; - oldest_time = entries[i].time; - } - } - - /* Use the oldest or first free entry (either pointed to by the - "oldest" variable). */ - entries[oldest].time = 0; - uip_ipaddr_copy(entries[oldest].ipaddr, ipaddr); - memcpy(&entries[oldest].addr, addr, sizeof(struct uip_neighbor_addr)); -} -/*---------------------------------------------------------------------------*/ -static struct neighbor_entry * -find_entry(uip_ipaddr_t ipaddr) -{ - int i; - - for(i = 0; i < ENTRIES; ++i) { - if(uip_ipaddr_cmp(entries[i].ipaddr, ipaddr)) { - return &entries[i]; - } - } - return NULL; -} -/*---------------------------------------------------------------------------*/ -void -uip_neighbor_update(uip_ipaddr_t ipaddr) -{ - struct neighbor_entry *e; - - e = find_entry(ipaddr); - if(e != NULL) { - e->time = 0; - } -} -/*---------------------------------------------------------------------------*/ -struct uip_neighbor_addr * -uip_neighbor_lookup(uip_ipaddr_t ipaddr) -{ - struct neighbor_entry *e; - - e = find_entry(ipaddr); - if(e != NULL) { - /* printf("Lookup neighbor with link address %02x:%02x:%02x:%02x:%02x:%02x\n", - e->addr.addr.addr[0], e->addr.addr.addr[1], e->addr.addr.addr[2], e->addr.addr.addr[3], - e->addr.addr.addr[4], e->addr.addr.addr[5]);*/ - - return &e->addr; - } - return NULL; -} -/*---------------------------------------------------------------------------*/ diff --git a/libraries/UIPEthernet/src/utility/uip-neighbor.h b/libraries/UIPEthernet/src/utility/uip-neighbor.h deleted file mode 100644 index d3b351c..0000000 --- a/libraries/UIPEthernet/src/utility/uip-neighbor.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2006, Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This file is part of the uIP TCP/IP stack - * - * $Id: uip-neighbor.h,v 1.2 2006/06/12 08:00:30 adam Exp $ - */ - -/** - * \file - * Header file for database of link-local neighbors, used by - * IPv6 code and to be used by future ARP code. - * \author - * Adam Dunkels - */ - -#ifndef __UIP_NEIGHBOR_H__ -#define __UIP_NEIGHBOR_H__ - -#include "uip.h" - -struct uip_neighbor_addr { -#if UIP_NEIGHBOR_CONF_ADDRTYPE - UIP_NEIGHBOR_CONF_ADDRTYPE addr; -#else - struct uip_eth_addr addr; -#endif -}; - -void uip_neighbor_init(void); -void uip_neighbor_add(uip_ipaddr_t ipaddr, struct uip_neighbor_addr *addr); -void uip_neighbor_update(uip_ipaddr_t ipaddr); -struct uip_neighbor_addr *uip_neighbor_lookup(uip_ipaddr_t ipaddr); -void uip_neighbor_periodic(void); - -#endif /* __UIP-NEIGHBOR_H__ */ diff --git a/libraries/UIPEthernet/src/utility/uipethernet-conf.h b/libraries/UIPEthernet/src/utility/uipethernet-conf.h deleted file mode 100644 index 733e26e..0000000 --- a/libraries/UIPEthernet/src/utility/uipethernet-conf.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef UIPETHERNET_CONF_H -#define UIPETHERNET_CONF_H - -/* for TCP */ -#define UIP_SOCKET_NUMPACKETS 5 -#define UIP_CONF_MAX_CONNECTIONS 4 - -/* for UDP */ -#define UIP_CONF_UDP 0//1 -#define UIP_CONF_BROADCAST 0//1 -#define UIP_CONF_UDP_CONNS 0//4 -#define UIP_UDP_NUMPACKETS 0//5 - -/* number of attempts on write before returning number of bytes sent so far - * set to -1 to block until connection is closed by timeout */ -#define UIP_ATTEMPTS_ON_WRITE -1 - -#endif diff --git a/libraries/UIPEthernet/src/utility/Enc28J60Network.cpp b/libraries/UIPEthernet/utility/Enc28J60Network.cpp similarity index 80% rename from libraries/UIPEthernet/src/utility/Enc28J60Network.cpp rename to libraries/UIPEthernet/utility/Enc28J60Network.cpp index 2670a6f..fbef88d 100644 --- a/libraries/UIPEthernet/src/utility/Enc28J60Network.cpp +++ b/libraries/UIPEthernet/utility/Enc28J60Network.cpp @@ -1,5 +1,5 @@ /* - Enc28J60Network.h + Enc28J60NetworkClass.h UIPEthernet network driver for Microchip ENC28J60 Ethernet Interface. Copyright (c) 2013 Norbert Truchsess @@ -25,19 +25,8 @@ #include "Enc28J60Network.h" #include "Arduino.h" -#if ENC28J60_USE_SPILIB -#include -#endif - extern "C" { - #if defined(ARDUINO_ARCH_AVR) - // AVR-specific code - #include - #elif defined(ARDUINO_ARCH_SAM) - // SAM-specific code - #else - // generic, non-platform specific code - #endif +#include #include "enc28j60.h" #include "uip.h" } @@ -51,57 +40,40 @@ extern "C" { // set CS to 1 = passive #define CSPASSIVE digitalWrite(ENC28J60_CONTROL_CS, HIGH) // -#if defined(ARDUINO_ARCH_AVR) #define waitspi() while(!(SPSR&(1<begin+dest_pos,src->begin+src_pos,len); + enc28J60_mempool_block_move_callback(dest->begin+dest_pos,src->begin+src_pos,len); // Move the RX read pointer to the start of the next received packet // This frees the memory we just read out setERXRDPT(); } void -Enc28J60Network::memblock_mv_cb(uint16_t dest, uint16_t src, uint16_t len) +enc28J60_mempool_block_move_callback(memaddress dest, memaddress src, memaddress len) { +//void +//Enc28J60Network::memblock_mv_cb(uint16_t dest, uint16_t src, uint16_t len) +//{ //as ENC28J60 DMA is unable to copy single bytes: if (len == 1) { - writeByte(dest,readByte(src)); + Enc28J60Network::writeByte(dest,Enc28J60Network::readByte(src)); } else { @@ -390,11 +349,11 @@ Enc28J60Network::memblock_mv_cb(uint16_t dest, uint16_t src, uint16_t len) prevent a never ending DMA operation which would overwrite the entire 8-Kbyte buffer. */ - writeRegPair(EDMASTL, src); - writeRegPair(EDMADSTL, dest); + Enc28J60Network::writeRegPair(EDMASTL, src); + Enc28J60Network::writeRegPair(EDMADSTL, dest); if ((src <= RXSTOP_INIT)&& (len > RXSTOP_INIT))len -= (RXSTOP_INIT-RXSTART_INIT); - writeRegPair(EDMANDL, len); + Enc28J60Network::writeRegPair(EDMANDL, len); /* 2. If an interrupt at the end of the copy process is @@ -402,13 +361,13 @@ Enc28J60Network::memblock_mv_cb(uint16_t dest, uint16_t src, uint16_t len) clear EIR.DMAIF. 3. Verify that ECON1.CSUMEN is clear. */ - writeOp(ENC28J60_BIT_FIELD_CLR, ECON1, ECON1_CSUMEN); + Enc28J60Network::writeOp(ENC28J60_BIT_FIELD_CLR, ECON1, ECON1_CSUMEN); /* 4. Start the DMA copy by setting ECON1.DMAST. */ - writeOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_DMAST); + Enc28J60Network::writeOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_DMAST); // wait until runnig DMA is completed - while (readOp(ENC28J60_READ_CTRL_REG, ECON1) & ECON1_DMAST); + while (Enc28J60Network::readOp(ENC28J60_READ_CTRL_REG, ECON1) & ECON1_DMAST); } } @@ -423,20 +382,6 @@ Enc28J60Network::readOp(uint8_t op, uint8_t address) { CSACTIVE; // issue read command -#if ENC28J60_USE_SPILIB - SPI.transfer(op | (address & ADDR_MASK)); - // read data - if(address & 0x80) - { - // do dummy read if needed (for mac and mii, see datasheet page 29) - SPI.transfer(0x00); - } - uint8_t c = SPI.transfer(0x00); - // release CS - CSPASSIVE; - return(c); -#else - // issue read command SPDR = op | (address & ADDR_MASK); waitspi(); // read data @@ -451,7 +396,6 @@ Enc28J60Network::readOp(uint8_t op, uint8_t address) // release CS CSPASSIVE; return(SPDR); -#endif } void @@ -459,18 +403,11 @@ Enc28J60Network::writeOp(uint8_t op, uint8_t address, uint8_t data) { CSACTIVE; // issue write command -#if ENC28J60_USE_SPILIB - SPI.transfer(op | (address & ADDR_MASK)); - // write data - SPI.transfer(data); -#else - // issue write command SPDR = op | (address & ADDR_MASK); waitspi(); // write data SPDR = data; waitspi(); -#endif CSPASSIVE; } @@ -479,23 +416,15 @@ Enc28J60Network::readBuffer(uint16_t len, uint8_t* data) { CSACTIVE; // issue read command -#if ENC28J60_USE_SPILIB - SPI.transfer(ENC28J60_READ_BUF_MEM); -#else SPDR = ENC28J60_READ_BUF_MEM; waitspi(); -#endif while(len) { len--; // read data -#if ENC28J60_USE_SPILIB - *data = SPI.transfer(0x00); -#else SPDR = 0x00; waitspi(); *data = SPDR; -#endif data++; } //*data='\0'; @@ -507,24 +436,15 @@ Enc28J60Network::writeBuffer(uint16_t len, uint8_t* data) { CSACTIVE; // issue write command -#if ENC28J60_USE_SPILIB - SPI.transfer(ENC28J60_WRITE_BUF_MEM); -#else SPDR = ENC28J60_WRITE_BUF_MEM; waitspi(); -#endif while(len) { len--; // write data -#if ENC28J60_USE_SPILIB - SPI.transfer(*data); - data++; -#else SPDR = *data; data++; waitspi(); -#endif } CSPASSIVE; } @@ -583,6 +503,19 @@ Enc28J60Network::phyWrite(uint8_t address, uint16_t data) } } +uint16_t +Enc28J60Network::phyRead(uint8_t address) +{ + writeReg(MIREGADR,address); + writeReg(MICMD, MICMD_MIIRD); + // wait until the PHY read completes + while(readReg(MISTAT) & MISTAT_BUSY){ + delayMicroseconds(15); + } //and MIRDH + writeReg(MICMD, 0); + return (readReg(MIRDL) | readReg(MIRDH) << 8); +} + void Enc28J60Network::clkout(uint8_t clk) { @@ -604,40 +537,27 @@ Enc28J60Network::chksum(uint16_t sum, memhandle handle, memaddress pos, uint16_t len = setReadPtr(handle, pos, len)-1; CSACTIVE; // issue read command -#if ENC28J60_USE_SPILIB - SPI.transfer(ENC28J60_READ_BUF_MEM); -#else SPDR = ENC28J60_READ_BUF_MEM; waitspi(); -#endif uint16_t i; for (i = 0; i < len; i+=2) { // read data -#if ENC28J60_USE_SPILIB - t = SPI.transfer(0x00) << 8; - t += SPI.transfer(0x00); -#else SPDR = 0x00; waitspi(); t = SPDR << 8; SPDR = 0x00; waitspi(); t += SPDR; -#endif sum += t; if(sum < t) { sum++; /* carry */ } } if(i == len) { -#if ENC28J60_USE_SPILIB - t = (SPI.transfer(0x00) << 8) + 0; -#else SPDR = 0x00; waitspi(); t = (SPDR << 8) + 0; -#endif sum += t; if(sum < t) { sum++; /* carry */ @@ -648,3 +568,30 @@ Enc28J60Network::chksum(uint16_t sum, memhandle handle, memaddress pos, uint16_t /* Return sum in host byte order. */ return sum; } + +void +Enc28J60Network::powerOff() +{ + writeOp(ENC28J60_BIT_FIELD_CLR, ECON1, ECON1_RXEN); + delay(50); + writeOp(ENC28J60_BIT_FIELD_SET, ECON2, ECON2_VRPS); + delay(50); + writeOp(ENC28J60_BIT_FIELD_SET, ECON2, ECON2_PWRSV); +} + +void +Enc28J60Network::powerOn() +{ + writeOp(ENC28J60_BIT_FIELD_CLR, ECON2, ECON2_PWRSV); + delay(50); + writeOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_RXEN); + delay(50); +} + +bool +Enc28J60Network::linkStatus() +{ + return (phyRead(PHSTAT2) & 0x0400) > 0; +} + +Enc28J60Network Enc28J60; diff --git a/libraries/UIPEthernet/utility/Enc28J60Network.h b/libraries/UIPEthernet/utility/Enc28J60Network.h new file mode 100644 index 0000000..7346e47 --- /dev/null +++ b/libraries/UIPEthernet/utility/Enc28J60Network.h @@ -0,0 +1,91 @@ +/* + Enc28J60NetworkClass.h + UIPEthernet network driver for Microchip ENC28J60 Ethernet Interface. + + Copyright (c) 2013 Norbert Truchsess + All rights reserved. + + inspired by enc28j60.c file from the AVRlib library by Pascal Stang. + For AVRlib See http://www.procyonengineering.com/ + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + */ + +#ifndef Enc28J60Network_H_ +#define Enc28J60Network_H_ + +#include "mempool.h" + +#define ENC28J60_CONTROL_CS SS +#define SPI_MOSI MOSI +#define SPI_MISO MISO +#define SPI_SCK SCK +#define SPI_SS SS + +#define UIP_RECEIVEBUFFERHANDLE 0xff + +//#define ENC28J60DEBUG + +/* + * Empfangen von ip-header, arp etc... + * wenn tcp/udp -> tcp/udp-callback -> assign new packet to connection + */ + +class Enc28J60Network : public MemoryPool +{ + +private: + static uint16_t nextPacketPtr; + static uint8_t bank; + + static struct memblock receivePkt; + + static uint8_t readOp(uint8_t op, uint8_t address); + static void writeOp(uint8_t op, uint8_t address, uint8_t data); + static uint16_t setReadPtr(memhandle handle, memaddress position, uint16_t len); + static void setERXRDPT(); + static void readBuffer(uint16_t len, uint8_t* data); + static void writeBuffer(uint16_t len, uint8_t* data); + static uint8_t readByte(uint16_t addr); + static void writeByte(uint16_t addr, uint8_t data); + static void setBank(uint8_t address); + static uint8_t readReg(uint8_t address); + static void writeReg(uint8_t address, uint8_t data); + static void writeRegPair(uint8_t address, uint16_t data); + static void phyWrite(uint8_t address, uint16_t data); + static uint16_t phyRead(uint8_t address); + static void clkout(uint8_t clk); + + friend void enc28J60_mempool_block_move_callback(memaddress,memaddress,memaddress); + +public: + + uint8_t getrev(void); + void powerOn(); + void powerOff(); + bool linkStatus(); + + static void init(uint8_t* macaddr); + static memhandle receivePacket(); + static void freePacket(); + static memaddress blockSize(memhandle handle); + static void sendPacket(memhandle handle); + static uint16_t readPacket(memhandle handle, memaddress position, uint8_t* buffer, uint16_t len); + static uint16_t writePacket(memhandle handle, memaddress position, uint8_t* buffer, uint16_t len); + static void copyPacket(memhandle dest, memaddress dest_pos, memhandle src, memaddress src_pos, uint16_t len); + static uint16_t chksum(uint16_t sum, memhandle handle, memaddress pos, uint16_t len); +}; + +extern Enc28J60Network Enc28J60; +#endif /* Enc28J60NetworkClass_H_ */ diff --git a/libraries/UIPEthernet/src/utility/clock-arch.c b/libraries/UIPEthernet/utility/clock-arch.c similarity index 100% rename from libraries/UIPEthernet/src/utility/clock-arch.c rename to libraries/UIPEthernet/utility/clock-arch.c diff --git a/libraries/UIPEthernet/src/utility/clock-arch.h b/libraries/UIPEthernet/utility/clock-arch.h similarity index 100% rename from libraries/UIPEthernet/src/utility/clock-arch.h rename to libraries/UIPEthernet/utility/clock-arch.h diff --git a/libraries/UIPEthernet/src/utility/enc28j60.h b/libraries/UIPEthernet/utility/enc28j60.h similarity index 100% rename from libraries/UIPEthernet/src/utility/enc28j60.h rename to libraries/UIPEthernet/utility/enc28j60.h diff --git a/libraries/UIPEthernet/src/utility/mempool.cpp b/libraries/UIPEthernet/utility/mempool.cpp similarity index 86% rename from libraries/UIPEthernet/src/utility/mempool.cpp rename to libraries/UIPEthernet/utility/mempool.cpp index 01f17fb..c2f7abf 100644 --- a/libraries/UIPEthernet/src/utility/mempool.cpp +++ b/libraries/UIPEthernet/utility/mempool.cpp @@ -22,13 +22,15 @@ #define POOLOFFSET 1 -MemoryPool::MemoryPool(memaddress start, memaddress size) +struct memblock MemoryPool::blocks[MEMPOOL_NUM_MEMBLOCKS+1]; + +void +MemoryPool::init() { memset(&blocks[0], 0, sizeof(blocks)); - blocks[POOLSTART].begin = start; + blocks[POOLSTART].begin = MEMPOOL_STARTADDRESS; blocks[POOLSTART].size = 0; blocks[POOLSTART].nextblock = NOBLOCK; - poolsize = size; } memhandle @@ -37,12 +39,12 @@ MemoryPool::allocBlock(memaddress size) memblock* best = NULL; memhandle cur = POOLSTART; memblock* block = &blocks[POOLSTART]; - memaddress bestsize = poolsize + 1; + memaddress bestsize = MEMPOOL_SIZE + 1; do { memhandle next = block->nextblock; - memaddress freesize = ( next == NOBLOCK ? blocks[POOLSTART].begin + poolsize : blocks[next].begin) - block->begin - block->size; + memaddress freesize = ( next == NOBLOCK ? blocks[POOLSTART].begin + MEMPOOL_SIZE : blocks[next].begin) - block->begin - block->size; if (freesize == size) { best = &blocks[cur]; @@ -77,14 +79,14 @@ MemoryPool::allocBlock(memaddress size) memaddress* src = &nextblock->begin; if (dest != *src) { -#ifdef MEMBLOCK_MV - memblock_mv_cb(dest,*src,nextblock->size); +#ifdef MEMPOOL_MEMBLOCK_MV + MEMPOOL_MEMBLOCK_MV(dest,*src,nextblock->size); #endif *src = dest; } block = nextblock; } - if (blocks[POOLSTART].begin + poolsize - block->begin - block->size >= size) + if (blocks[POOLSTART].begin + MEMPOOL_SIZE - block->begin - block->size >= size) best = block; else goto notfound; @@ -93,7 +95,7 @@ MemoryPool::allocBlock(memaddress size) found: { block = &blocks[POOLOFFSET]; - for (cur = POOLOFFSET; cur < NUM_MEMBLOCKS + POOLOFFSET; cur++) + for (cur = POOLOFFSET; cur < MEMPOOL_NUM_MEMBLOCKS + POOLOFFSET; cur++) { if (block->size) { @@ -118,6 +120,8 @@ MemoryPool::allocBlock(memaddress size) void MemoryPool::freeBlock(memhandle handle) { + if (handle == NOBLOCK) + return; memblock *b = &blocks[POOLSTART]; do diff --git a/libraries/UIPEthernet/src/utility/mempool.h b/libraries/UIPEthernet/utility/mempool.h similarity index 59% rename from libraries/UIPEthernet/src/utility/mempool.h rename to libraries/UIPEthernet/utility/mempool.h index ea79473..2a1db21 100644 --- a/libraries/UIPEthernet/src/utility/mempool.h +++ b/libraries/UIPEthernet/utility/mempool.h @@ -27,18 +27,6 @@ #include "mempool_conf.h" -//#ifdef MEMBLOCK_MV -//#define memblock_mv_cb(dest,src,size) MEMBLOCK_MV(dest,src,size) -//#endif - -#ifdef MEMBLOCK_ALLOC -#define memblock_alloc_cb(address,size) MEMBLOCK_ALLOC(address,size) -#endif - -#ifdef MEMBLOCK_FREE -#define memblock_free_cb(address,size) MEMBLOCK_FREE(address,size) -#endif - struct memblock { memaddress begin; @@ -53,19 +41,14 @@ class MemoryPool #endif protected: - memaddress poolsize; - struct memblock blocks[NUM_MEMBLOCKS+1]; -#ifdef MEMBLOCK_MV - virtual void memblock_mv_cb(memaddress dest, memaddress src, memaddress size) = 0; -#endif + static struct memblock blocks[MEMPOOL_NUM_MEMBLOCKS+1]; public: - MemoryPool(memaddress start, memaddress size); - memhandle - allocBlock(memaddress); - void freeBlock(memhandle); - void resizeBlock(memhandle handle, memaddress position); - void resizeBlock(memhandle handle, memaddress position, memaddress size); - memaddress blockSize(memhandle); + static void init(); + static memhandle allocBlock(memaddress); + static void freeBlock(memhandle); + static void resizeBlock(memhandle handle, memaddress position); + static void resizeBlock(memhandle handle, memaddress position, memaddress size); + static memaddress blockSize(memhandle); }; #endif diff --git a/libraries/UIPEthernet/utility/mempool_conf.h b/libraries/UIPEthernet/utility/mempool_conf.h new file mode 100644 index 0000000..9615f92 --- /dev/null +++ b/libraries/UIPEthernet/utility/mempool_conf.h @@ -0,0 +1,34 @@ +#ifndef MEMPOOLCONF_H +#define MEMPOOLCONF_H +#include "uipethernet-conf.h" +extern "C" { + #include "uipopt.h" + #include "enc28j60.h" +} +#include + +typedef uint16_t memaddress; +typedef uint8_t memhandle; + +#if UIP_SOCKET_NUMPACKETS and UIP_CONNS +#define NUM_TCP_MEMBLOCKS (UIP_SOCKET_NUMPACKETS*2)*UIP_CONNS +#else +#define NUM_TCP_MEMBLOCKS 0 +#endif + +#if UIP_UDP and UIP_UDP_CONNS +#define NUM_UDP_MEMBLOCKS 3*UIP_UDP_CONNS +#else +#define NUM_UDP_MEMBLOCKS 0 +#endif + +#define MEMPOOL_NUM_MEMBLOCKS (NUM_TCP_MEMBLOCKS+NUM_UDP_MEMBLOCKS) + +#define MEMPOOL_STARTADDRESS TXSTART_INIT+1 +#define MEMPOOL_SIZE TXSTOP_INIT-TXSTART_INIT + +void enc28J60_mempool_block_move_callback(memaddress,memaddress,memaddress); + +#define MEMPOOL_MEMBLOCK_MV(dest,src,size) enc28J60_mempool_block_move_callback(dest,src,size) + +#endif diff --git a/libraries/UIPEthernet/src/utility/uip-conf.h b/libraries/UIPEthernet/utility/uip-conf.h similarity index 100% rename from libraries/UIPEthernet/src/utility/uip-conf.h rename to libraries/UIPEthernet/utility/uip-conf.h diff --git a/libraries/UIPEthernet/src/utility/uip.c b/libraries/UIPEthernet/utility/uip.c similarity index 100% rename from libraries/UIPEthernet/src/utility/uip.c rename to libraries/UIPEthernet/utility/uip.c diff --git a/libraries/UIPEthernet/src/utility/uip.h b/libraries/UIPEthernet/utility/uip.h similarity index 100% rename from libraries/UIPEthernet/src/utility/uip.h rename to libraries/UIPEthernet/utility/uip.h diff --git a/libraries/UIPEthernet/src/utility/uip_arch.h b/libraries/UIPEthernet/utility/uip_arch.h similarity index 100% rename from libraries/UIPEthernet/src/utility/uip_arch.h rename to libraries/UIPEthernet/utility/uip_arch.h diff --git a/libraries/UIPEthernet/src/utility/uip_arp.c b/libraries/UIPEthernet/utility/uip_arp.c similarity index 100% rename from libraries/UIPEthernet/src/utility/uip_arp.c rename to libraries/UIPEthernet/utility/uip_arp.c diff --git a/libraries/UIPEthernet/src/utility/uip_arp.h b/libraries/UIPEthernet/utility/uip_arp.h similarity index 100% rename from libraries/UIPEthernet/src/utility/uip_arp.h rename to libraries/UIPEthernet/utility/uip_arp.h diff --git a/libraries/UIPEthernet/src/utility/uip_clock.h b/libraries/UIPEthernet/utility/uip_clock.h similarity index 100% rename from libraries/UIPEthernet/src/utility/uip_clock.h rename to libraries/UIPEthernet/utility/uip_clock.h diff --git a/libraries/UIPEthernet/src/utility/uip_debug.cpp b/libraries/UIPEthernet/utility/uip_debug.cpp similarity index 100% rename from libraries/UIPEthernet/src/utility/uip_debug.cpp rename to libraries/UIPEthernet/utility/uip_debug.cpp diff --git a/libraries/UIPEthernet/src/utility/uip_debug.h b/libraries/UIPEthernet/utility/uip_debug.h similarity index 100% rename from libraries/UIPEthernet/src/utility/uip_debug.h rename to libraries/UIPEthernet/utility/uip_debug.h diff --git a/libraries/UIPEthernet/src/utility/uip_timer.c b/libraries/UIPEthernet/utility/uip_timer.c similarity index 100% rename from libraries/UIPEthernet/src/utility/uip_timer.c rename to libraries/UIPEthernet/utility/uip_timer.c diff --git a/libraries/UIPEthernet/src/utility/uip_timer.h b/libraries/UIPEthernet/utility/uip_timer.h similarity index 100% rename from libraries/UIPEthernet/src/utility/uip_timer.h rename to libraries/UIPEthernet/utility/uip_timer.h diff --git a/libraries/UIPEthernet/utility/uipethernet-conf.h b/libraries/UIPEthernet/utility/uipethernet-conf.h new file mode 100644 index 0000000..016e0e3 --- /dev/null +++ b/libraries/UIPEthernet/utility/uipethernet-conf.h @@ -0,0 +1,21 @@ +#ifndef UIPETHERNET_CONF_H +#define UIPETHERNET_CONF_H + +/* for TCP */ +#define UIP_SOCKET_NUMPACKETS 5 +#define UIP_CONF_MAX_CONNECTIONS 4 + +/* for UDP */ +#define UIP_CONF_UDP 0 +#define UIP_CONF_BROADCAST 1 +#define UIP_CONF_UDP_CONNS 4 + +/* number of attempts on write before returning number of bytes sent so far + * set to -1 to block until connection is closed by timeout */ +#define UIP_ATTEMPTS_ON_WRITE -1 + +/* timeout after which UIPClient::connect gives up. The timeout is specified in seconds. + * if set to a number <= 0 connect will timeout when uIP does (which might be longer than you expect...) */ +#define UIP_CONNECT_TIMEOUT -1 + +#endif diff --git a/libraries/UIPEthernet/src/utility/uipopt.h b/libraries/UIPEthernet/utility/uipopt.h similarity index 100% rename from libraries/UIPEthernet/src/utility/uipopt.h rename to libraries/UIPEthernet/utility/uipopt.h diff --git a/libraries/UIPEthernet/src/utility/util.h b/libraries/UIPEthernet/utility/util.h similarity index 100% rename from libraries/UIPEthernet/src/utility/util.h rename to libraries/UIPEthernet/utility/util.h diff --git a/libraries/UTFT/DefaultFonts.c b/libraries/UTFT/DefaultFonts.c new file mode 100644 index 0000000..bc11d95 --- /dev/null +++ b/libraries/UTFT/DefaultFonts.c @@ -0,0 +1,246 @@ +// DO NOT ADD YOUR OWN FONTS TO THIS FILE +// If you want to use your own fonts you should just drop the font .c file into your sketch folder. +// ------------------------------------------------------------------------------------------------ + +#if defined(__AVR__) + #include + #define fontdatatype const uint8_t +#elif defined(__PIC32MX__) + #define PROGMEM + #define fontdatatype const unsigned char +#elif defined(__arm__) + #define PROGMEM + #define fontdatatype const unsigned char +#endif + +// SmallFont.c +// Font Size : 8x12 +// Memory usage : 1144 bytes +// # characters : 95 + +fontdatatype SmallFont[1144] PROGMEM={ +0x08,0x0C,0x20,0x5F, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // +0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x00,0x00, // ! +0x00,0x28,0x50,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // " +0x00,0x00,0x28,0x28,0xFC,0x28,0x50,0xFC,0x50,0x50,0x00,0x00, // # +0x00,0x20,0x78,0xA8,0xA0,0x60,0x30,0x28,0xA8,0xF0,0x20,0x00, // $ +0x00,0x00,0x48,0xA8,0xB0,0x50,0x28,0x34,0x54,0x48,0x00,0x00, // % +0x00,0x00,0x20,0x50,0x50,0x78,0xA8,0xA8,0x90,0x6C,0x00,0x00, // & +0x00,0x40,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ' +0x00,0x04,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x08,0x04,0x00, // ( +0x00,0x40,0x20,0x10,0x10,0x10,0x10,0x10,0x10,0x20,0x40,0x00, // ) +0x00,0x00,0x00,0x20,0xA8,0x70,0x70,0xA8,0x20,0x00,0x00,0x00, // * +0x00,0x00,0x20,0x20,0x20,0xF8,0x20,0x20,0x20,0x00,0x00,0x00, // + +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x80, // , +0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00, // - +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00, // . +0x00,0x08,0x10,0x10,0x10,0x20,0x20,0x40,0x40,0x40,0x80,0x00, // / +0x00,0x00,0x70,0x88,0x88,0x88,0x88,0x88,0x88,0x70,0x00,0x00, // 0 +0x00,0x00,0x20,0x60,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00, // 1 +0x00,0x00,0x70,0x88,0x88,0x10,0x20,0x40,0x80,0xF8,0x00,0x00, // 2 +0x00,0x00,0x70,0x88,0x08,0x30,0x08,0x08,0x88,0x70,0x00,0x00, // 3 +0x00,0x00,0x10,0x30,0x50,0x50,0x90,0x78,0x10,0x18,0x00,0x00, // 4 +0x00,0x00,0xF8,0x80,0x80,0xF0,0x08,0x08,0x88,0x70,0x00,0x00, // 5 +0x00,0x00,0x70,0x90,0x80,0xF0,0x88,0x88,0x88,0x70,0x00,0x00, // 6 +0x00,0x00,0xF8,0x90,0x10,0x20,0x20,0x20,0x20,0x20,0x00,0x00, // 7 +0x00,0x00,0x70,0x88,0x88,0x70,0x88,0x88,0x88,0x70,0x00,0x00, // 8 +0x00,0x00,0x70,0x88,0x88,0x88,0x78,0x08,0x48,0x70,0x00,0x00, // 9 +0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x20,0x00,0x00, // : +0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x20,0x00, // ; +0x00,0x04,0x08,0x10,0x20,0x40,0x20,0x10,0x08,0x04,0x00,0x00, // < +0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0xF8,0x00,0x00,0x00,0x00, // = +0x00,0x40,0x20,0x10,0x08,0x04,0x08,0x10,0x20,0x40,0x00,0x00, // > +0x00,0x00,0x70,0x88,0x88,0x10,0x20,0x20,0x00,0x20,0x00,0x00, // ? +0x00,0x00,0x70,0x88,0x98,0xA8,0xA8,0xB8,0x80,0x78,0x00,0x00, // @ +0x00,0x00,0x20,0x20,0x30,0x50,0x50,0x78,0x48,0xCC,0x00,0x00, // A +0x00,0x00,0xF0,0x48,0x48,0x70,0x48,0x48,0x48,0xF0,0x00,0x00, // B +0x00,0x00,0x78,0x88,0x80,0x80,0x80,0x80,0x88,0x70,0x00,0x00, // C +0x00,0x00,0xF0,0x48,0x48,0x48,0x48,0x48,0x48,0xF0,0x00,0x00, // D +0x00,0x00,0xF8,0x48,0x50,0x70,0x50,0x40,0x48,0xF8,0x00,0x00, // E +0x00,0x00,0xF8,0x48,0x50,0x70,0x50,0x40,0x40,0xE0,0x00,0x00, // F +0x00,0x00,0x38,0x48,0x80,0x80,0x9C,0x88,0x48,0x30,0x00,0x00, // G +0x00,0x00,0xCC,0x48,0x48,0x78,0x48,0x48,0x48,0xCC,0x00,0x00, // H +0x00,0x00,0xF8,0x20,0x20,0x20,0x20,0x20,0x20,0xF8,0x00,0x00, // I +0x00,0x00,0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x90,0xE0,0x00, // J +0x00,0x00,0xEC,0x48,0x50,0x60,0x50,0x50,0x48,0xEC,0x00,0x00, // K +0x00,0x00,0xE0,0x40,0x40,0x40,0x40,0x40,0x44,0xFC,0x00,0x00, // L +0x00,0x00,0xD8,0xD8,0xD8,0xD8,0xA8,0xA8,0xA8,0xA8,0x00,0x00, // M +0x00,0x00,0xDC,0x48,0x68,0x68,0x58,0x58,0x48,0xE8,0x00,0x00, // N +0x00,0x00,0x70,0x88,0x88,0x88,0x88,0x88,0x88,0x70,0x00,0x00, // O +0x00,0x00,0xF0,0x48,0x48,0x70,0x40,0x40,0x40,0xE0,0x00,0x00, // P +0x00,0x00,0x70,0x88,0x88,0x88,0x88,0xE8,0x98,0x70,0x18,0x00, // Q +0x00,0x00,0xF0,0x48,0x48,0x70,0x50,0x48,0x48,0xEC,0x00,0x00, // R +0x00,0x00,0x78,0x88,0x80,0x60,0x10,0x08,0x88,0xF0,0x00,0x00, // S +0x00,0x00,0xF8,0xA8,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00, // T +0x00,0x00,0xCC,0x48,0x48,0x48,0x48,0x48,0x48,0x30,0x00,0x00, // U +0x00,0x00,0xCC,0x48,0x48,0x50,0x50,0x30,0x20,0x20,0x00,0x00, // V +0x00,0x00,0xA8,0xA8,0xA8,0x70,0x50,0x50,0x50,0x50,0x00,0x00, // W +0x00,0x00,0xD8,0x50,0x50,0x20,0x20,0x50,0x50,0xD8,0x00,0x00, // X +0x00,0x00,0xD8,0x50,0x50,0x20,0x20,0x20,0x20,0x70,0x00,0x00, // Y +0x00,0x00,0xF8,0x90,0x10,0x20,0x20,0x40,0x48,0xF8,0x00,0x00, // Z +0x00,0x38,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x38,0x00, // [ +0x00,0x40,0x40,0x40,0x20,0x20,0x10,0x10,0x10,0x08,0x00,0x00, // +0x00,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x70,0x00, // ] +0x00,0x20,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ^ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC, // _ +0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ' +0x00,0x00,0x00,0x00,0x00,0x30,0x48,0x38,0x48,0x3C,0x00,0x00, // a +0x00,0x00,0xC0,0x40,0x40,0x70,0x48,0x48,0x48,0x70,0x00,0x00, // b +0x00,0x00,0x00,0x00,0x00,0x38,0x48,0x40,0x40,0x38,0x00,0x00, // c +0x00,0x00,0x18,0x08,0x08,0x38,0x48,0x48,0x48,0x3C,0x00,0x00, // d +0x00,0x00,0x00,0x00,0x00,0x30,0x48,0x78,0x40,0x38,0x00,0x00, // e +0x00,0x00,0x1C,0x20,0x20,0x78,0x20,0x20,0x20,0x78,0x00,0x00, // f +0x00,0x00,0x00,0x00,0x00,0x3C,0x48,0x30,0x40,0x78,0x44,0x38, // g +0x00,0x00,0xC0,0x40,0x40,0x70,0x48,0x48,0x48,0xEC,0x00,0x00, // h +0x00,0x00,0x20,0x00,0x00,0x60,0x20,0x20,0x20,0x70,0x00,0x00, // i +0x00,0x00,0x10,0x00,0x00,0x30,0x10,0x10,0x10,0x10,0x10,0xE0, // j +0x00,0x00,0xC0,0x40,0x40,0x5C,0x50,0x70,0x48,0xEC,0x00,0x00, // k +0x00,0x00,0xE0,0x20,0x20,0x20,0x20,0x20,0x20,0xF8,0x00,0x00, // l +0x00,0x00,0x00,0x00,0x00,0xF0,0xA8,0xA8,0xA8,0xA8,0x00,0x00, // m +0x00,0x00,0x00,0x00,0x00,0xF0,0x48,0x48,0x48,0xEC,0x00,0x00, // n +0x00,0x00,0x00,0x00,0x00,0x30,0x48,0x48,0x48,0x30,0x00,0x00, // o +0x00,0x00,0x00,0x00,0x00,0xF0,0x48,0x48,0x48,0x70,0x40,0xE0, // p +0x00,0x00,0x00,0x00,0x00,0x38,0x48,0x48,0x48,0x38,0x08,0x1C, // q +0x00,0x00,0x00,0x00,0x00,0xD8,0x60,0x40,0x40,0xE0,0x00,0x00, // r +0x00,0x00,0x00,0x00,0x00,0x78,0x40,0x30,0x08,0x78,0x00,0x00, // s +0x00,0x00,0x00,0x20,0x20,0x70,0x20,0x20,0x20,0x18,0x00,0x00, // t +0x00,0x00,0x00,0x00,0x00,0xD8,0x48,0x48,0x48,0x3C,0x00,0x00, // u +0x00,0x00,0x00,0x00,0x00,0xEC,0x48,0x50,0x30,0x20,0x00,0x00, // v +0x00,0x00,0x00,0x00,0x00,0xA8,0xA8,0x70,0x50,0x50,0x00,0x00, // w +0x00,0x00,0x00,0x00,0x00,0xD8,0x50,0x20,0x50,0xD8,0x00,0x00, // x +0x00,0x00,0x00,0x00,0x00,0xEC,0x48,0x50,0x30,0x20,0x20,0xC0, // y +0x00,0x00,0x00,0x00,0x00,0x78,0x10,0x20,0x20,0x78,0x00,0x00, // z +0x00,0x18,0x10,0x10,0x10,0x20,0x10,0x10,0x10,0x10,0x18,0x00, // { +0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, // | +0x00,0x60,0x20,0x20,0x20,0x10,0x20,0x20,0x20,0x20,0x60,0x00, // } +0x40,0xA4,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ~ +}; + +// BigFont.c (C)2010 by Henning Karlsen +// Font Size : 16x16 +// Memory usage : 3044 bytes +// # characters : 95 + +fontdatatype BigFont[3044] PROGMEM={ +0x10,0x10,0x20,0x5F, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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,0x00,0x0F,0x80,0x0F,0x80,0x0F,0x80,0x0F,0x80,0x0F,0x80,0x07,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x00,0x00, // ! +0x00,0x00,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x06,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // " +0x00,0x00,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x7F,0xFE,0x7F,0xFE,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x7F,0xFE,0x7F,0xFE,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x00,0x00, // # +0x00,0x00,0x02,0x40,0x02,0x40,0x0F,0xF8,0x1F,0xF8,0x1A,0x40,0x1A,0x40,0x1F,0xF0,0x0F,0xF8,0x02,0x58,0x02,0x58,0x1F,0xF8,0x1F,0xF0,0x02,0x40,0x02,0x40,0x00,0x00, // $ +0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x10,0x0E,0x30,0x0E,0x70,0x00,0xE0,0x01,0xC0,0x03,0x80,0x07,0x00,0x0E,0x70,0x0C,0x70,0x08,0x70,0x00,0x00,0x00,0x00,0x00,0x00, // % +0x00,0x00,0x00,0x00,0x0F,0x00,0x19,0x80,0x19,0x80,0x19,0x80,0x0F,0x00,0x0F,0x08,0x0F,0x98,0x19,0xF8,0x18,0xF0,0x18,0xE0,0x19,0xF0,0x0F,0x98,0x00,0x00,0x00,0x00, // & +0x00,0x00,0x00,0x00,0x07,0x00,0x07,0x00,0x07,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,0xF0,0x01,0xC0,0x03,0x80,0x07,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x07,0x00,0x03,0x80,0x01,0xC0,0x00,0xF0,0x00,0x00,0x00,0x00, // ( +0x00,0x00,0x00,0x00,0x0F,0x00,0x03,0x80,0x01,0xC0,0x00,0xE0,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0xE0,0x01,0xC0,0x03,0x80,0x0F,0x00,0x00,0x00,0x00,0x00, // ) +0x00,0x00,0x00,0x00,0x01,0x80,0x11,0x88,0x09,0x90,0x07,0xE0,0x07,0xE0,0x3F,0xFC,0x3F,0xFC,0x07,0xE0,0x07,0xE0,0x09,0x90,0x11,0x88,0x01,0x80,0x00,0x00,0x00,0x00, // * +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x01,0x80,0x01,0x80,0x0F,0xF0,0x0F,0xF0,0x01,0x80,0x01,0x80,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,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,0x00,0x07,0x00,0x07,0x00,0x0E,0x00,0x00,0x00, // , +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xF8,0x1F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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,0x00,0x07,0x00,0x07,0x00,0x00,0x00,0x00,0x00, // , +0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x06,0x00,0x0E,0x00,0x1C,0x00,0x38,0x00,0x70,0x00,0xE0,0x01,0xC0,0x03,0x80,0x07,0x00,0x0E,0x00,0x1C,0x00,0x00,0x00,0x00,0x00, // / + +0x00,0x00,0x00,0x00,0x0F,0xF0,0x1C,0x38,0x1C,0x78,0x1C,0xF8,0x1C,0xF8,0x1D,0xB8,0x1D,0xB8,0x1F,0x38,0x1F,0x38,0x1E,0x38,0x1C,0x38,0x0F,0xF0,0x00,0x00,0x00,0x00, // 0 +0x00,0x00,0x00,0x00,0x01,0x80,0x01,0x80,0x03,0x80,0x1F,0x80,0x1F,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x1F,0xF0,0x00,0x00,0x00,0x00, // 1 +0x00,0x00,0x00,0x00,0x0F,0xE0,0x1C,0x70,0x1C,0x38,0x00,0x38,0x00,0x70,0x00,0xE0,0x01,0xC0,0x03,0x80,0x07,0x00,0x0E,0x38,0x1C,0x38,0x1F,0xF8,0x00,0x00,0x00,0x00, // 2 +0x00,0x00,0x00,0x00,0x0F,0xE0,0x1C,0x70,0x1C,0x38,0x00,0x38,0x00,0x70,0x03,0xC0,0x03,0xC0,0x00,0x70,0x00,0x38,0x1C,0x38,0x1C,0x70,0x0F,0xE0,0x00,0x00,0x00,0x00, // 3 +0x00,0x00,0x00,0x00,0x00,0xE0,0x01,0xE0,0x03,0xE0,0x06,0xE0,0x0C,0xE0,0x18,0xE0,0x1F,0xF8,0x1F,0xF8,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x03,0xF8,0x00,0x00,0x00,0x00, // 4 +0x00,0x00,0x00,0x00,0x1F,0xF8,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1F,0xE0,0x1F,0xF0,0x00,0x78,0x00,0x38,0x1C,0x38,0x1C,0x70,0x0F,0xE0,0x00,0x00,0x00,0x00, // 5 +0x00,0x00,0x00,0x00,0x03,0xE0,0x07,0x00,0x0E,0x00,0x1C,0x00,0x1C,0x00,0x1F,0xF0,0x1F,0xF8,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x0F,0xF0,0x00,0x00,0x00,0x00, // 6 +0x00,0x00,0x00,0x00,0x1F,0xFC,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x00,0x1C,0x00,0x38,0x00,0x70,0x00,0xE0,0x01,0xC0,0x03,0x80,0x03,0x80,0x03,0x80,0x00,0x00,0x00,0x00, // 7 +0x00,0x00,0x00,0x00,0x0F,0xF0,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1F,0x38,0x07,0xE0,0x07,0xE0,0x1C,0xF8,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x0F,0xF0,0x00,0x00,0x00,0x00, // 8 +0x00,0x00,0x00,0x00,0x0F,0xF0,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1F,0xF8,0x0F,0xF8,0x00,0x38,0x00,0x38,0x00,0x70,0x00,0xE0,0x07,0xC0,0x00,0x00,0x00,0x00, // 9 +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x03,0x80,0x03,0x80,0x00,0x00,0x00,0x00,0x03,0x80,0x03,0x80,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // : +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x03,0x80,0x03,0x80,0x00,0x00,0x00,0x00,0x03,0x80,0x03,0x80,0x03,0x80,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ; +0x00,0x00,0x00,0x70,0x00,0xE0,0x01,0xC0,0x03,0x80,0x07,0x00,0x0E,0x00,0x1C,0x00,0x1C,0x00,0x0E,0x00,0x07,0x00,0x03,0x80,0x01,0xC0,0x00,0xE0,0x00,0x70,0x00,0x00, // < +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFC,0x3F,0xFC,0x00,0x00,0x00,0x00,0x3F,0xFC,0x3F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // = +0x00,0x00,0x1C,0x00,0x0E,0x00,0x07,0x00,0x03,0x80,0x01,0xC0,0x00,0xE0,0x00,0x70,0x00,0x70,0x00,0xE0,0x01,0xC0,0x03,0x80,0x07,0x00,0x0E,0x00,0x1C,0x00,0x00,0x00, // > +0x00,0x00,0x03,0xC0,0x0F,0xF0,0x1E,0x78,0x18,0x38,0x00,0x38,0x00,0x70,0x00,0xE0,0x01,0xC0,0x01,0xC0,0x00,0x00,0x00,0x00,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x00,0x00, // ? + +0x00,0x00,0x0F,0xF8,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0xFC,0x1C,0xFC,0x1C,0xFC,0x1C,0xFC,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1F,0xF0,0x07,0xF8,0x00,0x00, // @ +0x00,0x00,0x00,0x00,0x03,0xC0,0x07,0xE0,0x0E,0x70,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1F,0xF8,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x00,0x00,0x00,0x00, // A +0x00,0x00,0x00,0x00,0x1F,0xF0,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0F,0xF0,0x0F,0xF0,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x1F,0xF0,0x00,0x00,0x00,0x00, // B +0x00,0x00,0x00,0x00,0x07,0xF0,0x0E,0x38,0x1C,0x38,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x38,0x0E,0x38,0x07,0xF0,0x00,0x00,0x00,0x00, // C +0x00,0x00,0x00,0x00,0x1F,0xE0,0x0E,0x70,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x70,0x1F,0xE0,0x00,0x00,0x00,0x00, // D +0x00,0x00,0x00,0x00,0x1F,0xF8,0x0E,0x18,0x0E,0x08,0x0E,0x00,0x0E,0x30,0x0F,0xF0,0x0F,0xF0,0x0E,0x30,0x0E,0x00,0x0E,0x08,0x0E,0x18,0x1F,0xF8,0x00,0x00,0x00,0x00, // E +0x00,0x00,0x00,0x00,0x1F,0xF8,0x0E,0x18,0x0E,0x08,0x0E,0x00,0x0E,0x30,0x0F,0xF0,0x0F,0xF0,0x0E,0x30,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x1F,0x00,0x00,0x00,0x00,0x00, // F +0x00,0x00,0x00,0x00,0x07,0xF0,0x0E,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0xF8,0x1C,0x38,0x1C,0x38,0x0E,0x38,0x07,0xF8,0x00,0x00,0x00,0x00, // G +0x00,0x00,0x00,0x00,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1F,0xF0,0x1F,0xF0,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x00,0x00,0x00,0x00, // H +0x00,0x00,0x00,0x00,0x0F,0xE0,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x0F,0xE0,0x00,0x00,0x00,0x00, // I +0x00,0x00,0x00,0x00,0x01,0xFC,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x38,0x70,0x38,0x70,0x38,0x70,0x38,0x70,0x0F,0xE0,0x00,0x00,0x00,0x00, // J +0x00,0x00,0x00,0x00,0x1E,0x38,0x0E,0x38,0x0E,0x70,0x0E,0xE0,0x0F,0xC0,0x0F,0x80,0x0F,0x80,0x0F,0xC0,0x0E,0xE0,0x0E,0x70,0x0E,0x38,0x1E,0x38,0x00,0x00,0x00,0x00, // K +0x00,0x00,0x00,0x00,0x1F,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x08,0x0E,0x18,0x0E,0x38,0x1F,0xF8,0x00,0x00,0x00,0x00, // L +0x00,0x00,0x00,0x00,0x1C,0x1C,0x1E,0x3C,0x1F,0x7C,0x1F,0xFC,0x1F,0xFC,0x1D,0xDC,0x1C,0x9C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x00,0x00,0x00,0x00, // M +0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x1C,0x1E,0x1C,0x1F,0x1C,0x1F,0x9C,0x1D,0xDC,0x1C,0xFC,0x1C,0x7C,0x1C,0x3C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x00,0x00,0x00,0x00, // N +0x00,0x00,0x00,0x00,0x03,0xE0,0x07,0xF0,0x0E,0x38,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x0E,0x38,0x07,0xF0,0x03,0xE0,0x00,0x00,0x00,0x00, // O + +0x00,0x00,0x00,0x00,0x1F,0xF0,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0F,0xF0,0x0F,0xF0,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x1F,0x00,0x00,0x00,0x00,0x00, // P +0x00,0x00,0x00,0x00,0x03,0xE0,0x0F,0x78,0x0E,0x38,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x7C,0x1C,0xFC,0x0F,0xF8,0x0F,0xF8,0x00,0x38,0x00,0xFC,0x00,0x00, // Q +0x00,0x00,0x00,0x00,0x1F,0xF0,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0F,0xF0,0x0F,0xF0,0x0E,0x70,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x1E,0x38,0x00,0x00,0x00,0x00, // R +0x00,0x00,0x00,0x00,0x0F,0xF0,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x00,0x0F,0xE0,0x07,0xF0,0x00,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x0F,0xF0,0x00,0x00,0x00,0x00, // S +0x00,0x00,0x00,0x00,0x1F,0xFC,0x19,0xCC,0x11,0xC4,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x07,0xF0,0x00,0x00,0x00,0x00, // T +0x00,0x00,0x00,0x00,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0F,0xE0,0x00,0x00,0x00,0x00, // U +0x00,0x00,0x00,0x00,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0E,0xE0,0x07,0xC0,0x03,0x80,0x00,0x00,0x00,0x00, // V +0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x9C,0x1C,0x9C,0x1C,0x9C,0x0F,0xF8,0x0F,0xF8,0x07,0x70,0x07,0x70,0x00,0x00,0x00,0x00, // W +0x00,0x00,0x00,0x00,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0E,0xE0,0x07,0xC0,0x03,0x80,0x03,0x80,0x07,0xC0,0x0E,0xE0,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x00,0x00,0x00,0x00, // X +0x00,0x00,0x00,0x00,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0E,0xE0,0x07,0xC0,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x0F,0xE0,0x00,0x00,0x00,0x00, // Y +0x00,0x00,0x00,0x00,0x1F,0xF8,0x1C,0x38,0x18,0x38,0x10,0x70,0x00,0xE0,0x01,0xC0,0x03,0x80,0x07,0x00,0x0E,0x08,0x1C,0x18,0x1C,0x38,0x1F,0xF8,0x00,0x00,0x00,0x00, // Z +0x00,0x00,0x00,0x00,0x07,0xF0,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0xF0,0x00,0x00,0x00,0x00, // [ +0x00,0x00,0x00,0x00,0x10,0x00,0x18,0x00,0x1C,0x00,0x0E,0x00,0x07,0x00,0x03,0x80,0x01,0xC0,0x00,0xE0,0x00,0x70,0x00,0x38,0x00,0x1C,0x00,0x07,0x00,0x00,0x00,0x00, // +0x00,0x00,0x00,0x00,0x07,0xF0,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x07,0xF0,0x00,0x00,0x00,0x00, // ] +0x00,0x00,0x01,0x80,0x03,0xC0,0x07,0xE0,0x0E,0x70,0x1C,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ^ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0x7F,0xFF, // _ + +0x00,0x00,0x00,0x00,0x1C,0x00,0x1C,0x00,0x07,0x00,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,0x0F,0xE0,0x00,0x70,0x00,0x70,0x0F,0xF0,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0F,0xD8,0x00,0x00,0x00,0x00, // a +0x00,0x00,0x00,0x00,0x1E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0F,0xF0,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x1B,0xF0,0x00,0x00,0x00,0x00, // b +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x1C,0x70,0x1C,0x70,0x1C,0x00,0x1C,0x00,0x1C,0x70,0x1C,0x70,0x0F,0xE0,0x00,0x00,0x00,0x00, // c +0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x70,0x00,0x70,0x00,0x70,0x0F,0xF0,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0F,0xD8,0x00,0x00,0x00,0x00, // d +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x1C,0x70,0x1C,0x70,0x1F,0xF0,0x1C,0x00,0x1C,0x70,0x1C,0x70,0x0F,0xE0,0x00,0x00,0x00,0x00, // e +0x00,0x00,0x00,0x00,0x03,0xE0,0x07,0x70,0x07,0x70,0x07,0x00,0x07,0x00,0x1F,0xE0,0x1F,0xE0,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x1F,0xC0,0x00,0x00,0x00,0x00, // f +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xD8,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0F,0xF0,0x07,0xF0,0x00,0x70,0x1C,0x70,0x0F,0xE0, // g +0x00,0x00,0x00,0x00,0x1E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0xF0,0x0F,0x38,0x0F,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x1E,0x38,0x00,0x00,0x00,0x00, // h +0x00,0x00,0x00,0x00,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x00,0x00,0x0F,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x0F,0xF8,0x00,0x00,0x00,0x00, // i +0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x00,0x03,0xF0,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x1C,0x70,0x0C,0xF0,0x07,0xE0, // j +0x00,0x00,0x00,0x00,0x1E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x38,0x0E,0x70,0x0E,0xE0,0x0F,0xC0,0x0E,0xE0,0x0E,0x70,0x0E,0x38,0x1E,0x38,0x00,0x00,0x00,0x00, // k +0x00,0x00,0x00,0x00,0x0F,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x0F,0xF8,0x00,0x00,0x00,0x00, // l +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xF8,0x1C,0x9C,0x1C,0x9C,0x1C,0x9C,0x1C,0x9C,0x1C,0x9C,0x1C,0x9C,0x1C,0x9C,0x00,0x00,0x00,0x00, // m +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xE0,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x00,0x00,0x00,0x00, // n +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0F,0xE0,0x00,0x00,0x00,0x00, // o + +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1B,0xF0,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0F,0xF0,0x0E,0x00,0x0E,0x00,0x1F,0x00, // p +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xB0,0x38,0xE0,0x38,0xE0,0x38,0xE0,0x38,0xE0,0x38,0xE0,0x1F,0xE0,0x00,0xE0,0x00,0xE0,0x01,0xF0, // q +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0xF0,0x0F,0xF8,0x0F,0x38,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x1F,0x00,0x00,0x00,0x00,0x00, // r +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x1C,0x30,0x1C,0x30,0x0F,0x80,0x03,0xE0,0x18,0x70,0x18,0x70,0x0F,0xE0,0x00,0x00,0x00,0x00, // s +0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x03,0x00,0x07,0x00,0x1F,0xF0,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x70,0x07,0x70,0x03,0xE0,0x00,0x00,0x00,0x00, // t +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0F,0xD8,0x00,0x00,0x00,0x00, // u +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0E,0xE0,0x07,0xC0,0x03,0x80,0x00,0x00,0x00,0x00, // v +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x9C,0x1C,0x9C,0x0F,0xF8,0x07,0x70,0x07,0x70,0x00,0x00,0x00,0x00, // w +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0xE0,0x1C,0xE0,0x0F,0xC0,0x07,0x80,0x07,0x80,0x0F,0xC0,0x1C,0xE0,0x1C,0xE0,0x00,0x00,0x00,0x00, // x +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x07,0xF0,0x03,0xE0,0x00,0xE0,0x01,0xC0,0x1F,0x80, // y +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xE0,0x18,0xE0,0x11,0xC0,0x03,0x80,0x07,0x00,0x0E,0x20,0x1C,0x60,0x1F,0xE0,0x00,0x00,0x00,0x00, // z +0x00,0x00,0x00,0x00,0x01,0xF8,0x03,0x80,0x03,0x80,0x03,0x80,0x07,0x00,0x1C,0x00,0x1C,0x00,0x07,0x00,0x03,0x80,0x03,0x80,0x03,0x80,0x01,0xF8,0x00,0x00,0x00,0x00, // { +0x00,0x00,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x00,0x00, // | +0x00,0x00,0x00,0x00,0x1F,0x80,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x00,0xE0,0x00,0x38,0x00,0x38,0x00,0xE0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x1F,0x80,0x00,0x00,0x00,0x00, // } +0x00,0x00,0x00,0x00,0x1F,0x1C,0x3B,0x9C,0x39,0xDC,0x38,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 // ~ +}; + +// SevenSegNumFont.c +// Font Size : 32x50 +// Memory usage : 2004 bytes +// # characters : 10 + +fontdatatype SevenSegNumFont[2004] PROGMEM={ +0x20,0x32,0x30,0x0A, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x60,0x0C,0xFF,0xFE,0xF0,0x1E,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3E,0x00,0x00,0x78,0x38,0x00,0x00,0x18,0x20,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x38,0x00,0x00,0x18,0x3E,0x00,0x00,0x78,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x1E,0x00,0x00,0xF0,0x0C,0xFF,0xFE,0x60,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x00,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 0 +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0xF0,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x78,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 1 +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x60,0x00,0xFF,0xFE,0xF0,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,0x78,0x01,0xFF,0xFE,0x18,0x03,0xFF,0xFF,0x88,0x0F,0xFF,0xFF,0xE0,0x27,0xFF,0xFF,0xC0,0x39,0xFF,0xFF,0x00,0x3E,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x0C,0xFF,0xFE,0x00,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x00,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 2 +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x60,0x00,0xFF,0xFE,0xF0,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,0x78,0x01,0xFF,0xFE,0x18,0x03,0xFF,0xFF,0x88,0x0F,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xC0,0x01,0xFF,0xFF,0x18,0x00,0x00,0x00,0x78,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,0xF0,0x00,0xFF,0xFE,0x60,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x00,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 3 +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x0C,0x00,0x00,0xF0,0x1E,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3E,0x00,0x00,0x78,0x39,0xFF,0xFE,0x18,0x23,0xFF,0xFF,0x88,0x0F,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xC0,0x01,0xFF,0xFF,0x18,0x00,0x00,0x00,0x78,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 4 +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x00,0x0C,0xFF,0xFE,0x00,0x1E,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x39,0xFF,0xFE,0x00,0x23,0xFF,0xFF,0x80,0x0F,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xC0,0x01,0xFF,0xFF,0x18,0x00,0x00,0x00,0x78,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,0xF0,0x00,0xFF,0xFE,0x60,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x00,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 5 +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x00,0x0C,0xFF,0xFE,0x00,0x1E,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x39,0xFF,0xFE,0x00,0x23,0xFF,0xFF,0x80,0x0F,0xFF,0xFF,0xE0,0x27,0xFF,0xFF,0xC0,0x39,0xFF,0xFF,0x18,0x3E,0x00,0x00,0x78,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x1E,0x00,0x00,0xF0,0x0C,0xFF,0xFE,0x60,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x00,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 6 +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x60,0x00,0xFF,0xFE,0xF0,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x78,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 7 +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x60,0x0C,0xFF,0xFE,0xF0,0x1E,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3E,0x00,0x00,0x78,0x39,0xFF,0xFE,0x18,0x23,0xFF,0xFF,0x88,0x0F,0xFF,0xFF,0xE0,0x27,0xFF,0xFF,0xC0,0x39,0xFF,0xFF,0x18,0x3E,0x00,0x00,0x78,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x1E,0x00,0x00,0xF0,0x0C,0xFF,0xFE,0x60,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x00,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 8 +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x60,0x0C,0xFF,0xFE,0xF0,0x1E,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3E,0x00,0x00,0x78,0x39,0xFF,0xFE,0x18,0x23,0xFF,0xFF,0x88,0x0F,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xC0,0x01,0xFF,0xFF,0x18,0x00,0x00,0x00,0x78,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,0xF0,0x00,0xFF,0xFE,0x60,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x00,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 9 +}; diff --git a/libraries/UTFT/License - CC BY-NC-SA 3.0 - Legal.pdf b/libraries/UTFT/License - CC BY-NC-SA 3.0 - Legal.pdf new file mode 100644 index 0000000..ed326c9 Binary files /dev/null and b/libraries/UTFT/License - CC BY-NC-SA 3.0 - Legal.pdf differ diff --git a/libraries/UTFT/License - CC BY-NC-SA 3.0 - Summary.pdf b/libraries/UTFT/License - CC BY-NC-SA 3.0 - Summary.pdf new file mode 100644 index 0000000..b35e677 Binary files /dev/null and b/libraries/UTFT/License - CC BY-NC-SA 3.0 - Summary.pdf differ diff --git a/libraries/UTFT/Tools/ImageConverter565.exe b/libraries/UTFT/Tools/ImageConverter565.exe new file mode 100644 index 0000000..cca5c39 Binary files /dev/null and b/libraries/UTFT/Tools/ImageConverter565.exe differ diff --git a/libraries/UTFT/Tools/ImgConv.exe b/libraries/UTFT/Tools/ImgConv.exe new file mode 100644 index 0000000..229ae8b Binary files /dev/null and b/libraries/UTFT/Tools/ImgConv.exe differ diff --git a/libraries/UTFT/Tools/Online-tool - ImageConverter 565.url b/libraries/UTFT/Tools/Online-tool - ImageConverter 565.url new file mode 100644 index 0000000..e41696b --- /dev/null +++ b/libraries/UTFT/Tools/Online-tool - ImageConverter 565.url @@ -0,0 +1,7 @@ +[InternetShortcut] +URL=http://www.henningkarlsen.com/electronics/t_imageconverter565.php +IDList= +IconFile=http://www.henningkarlsen.com/favicon.ico +IconIndex=1 +[{000214A0-0000-0000-C000-000000000046}] +Prop3=19,2 diff --git a/libraries/UTFT/Tools/UTFT Image Converters.pdf b/libraries/UTFT/Tools/UTFT Image Converters.pdf new file mode 100644 index 0000000..43a8df6 Binary files /dev/null and b/libraries/UTFT/Tools/UTFT Image Converters.pdf differ diff --git a/libraries/UTFT/UTFT.cpp b/libraries/UTFT/UTFT.cpp new file mode 100644 index 0000000..5bfd21d --- /dev/null +++ b/libraries/UTFT/UTFT.cpp @@ -0,0 +1,1335 @@ +/* + UTFT.cpp - Arduino/chipKit library support for Color TFT LCD Boards + Copyright (C)2010-2014 Henning Karlsen. All right reserved + + This library is the continuation of my ITDB02_Graph, ITDB02_Graph16 + and RGB_GLCD libraries for Arduino and chipKit. As the number of + supported display modules and controllers started to increase I felt + it was time to make a single, universal library as it will be much + easier to maintain in the future. + + Basic functionality of this library was origianlly based on the + demo-code provided by ITead studio (for the ITDB02 modules) and + NKC Electronics (for the RGB GLCD module/shield). + + This library supports a number of 8bit, 16bit and serial graphic + displays, and will work with both Arduino and chipKit boards. For a + full list of tested display modules and controllers, see the + document UTFT_Supported_display_modules_&_controllers.pdf. + + When using 8bit and 16bit display modules there are some + requirements you must adhere to. These requirements can be found + in the document UTFT_Requirements.pdf. + There are no special requirements when using serial displays. + + You can always find the latest version of the library at + http://electronics.henningkarlsen.com/ + + If you make any modifications or improvements to the code, I would + appreciate that you share the code with me so that I might include + it in the next release. I can be contacted through + http://electronics.henningkarlsen.com/contact.php. + + This library is free software; you can redistribute it and/or + modify it under the terms of the CC BY-NC-SA 3.0 license. + Please see the included documents for further information. + + Commercial use of this library requires you to buy a license that + will allow commercial use. This includes using the library, + modified or not, as a tool to sell products. + + The license applies to all part of the library including the + examples and tools supplied with the library. +*/ + +#include "UTFT.h" +#include + +// Include hardware-specific functions for the correct MCU +#if defined(__AVR__) + #include + #include "hardware/avr/HW_AVR.h" + #if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) + #include "hardware/avr/HW_ATmega1280.h" + #elif defined(__AVR_ATmega328P__) + #include "hardware/avr/HW_ATmega328P.h" + #elif defined(__AVR_ATmega32U4__) + #include "hardware/avr/HW_ATmega32U4.h" + #elif defined(__AVR_ATmega168__) + #error "ATmega168 MCUs are not supported because they have too little flash memory!" + #elif defined(__AVR_ATmega1284P__) + #include "hardware/avr/HW_ATmega1284P.h" + #else + #error "Unsupported AVR MCU!" + #endif +#elif defined(__PIC32MX__) + #include "hardware/pic32/HW_PIC32.h" + #if defined(__32MX320F128H__) + #pragma message("Compiling for chipKIT UNO32 (PIC32MX320F128H)") + #include "hardware/pic32/HW_PIC32MX320F128H.h" + #elif defined(__32MX340F512H__) + #pragma message("Compiling for chipKIT uC32 (PIC32MX340F512H)") + #include "hardware/pic32/HW_PIC32MX340F512H.h" + #elif defined(__32MX795F512L__) + #pragma message("Compiling for chipKIT MAX32 (PIC32MX795F512L)") + #include "hardware/pic32/HW_PIC32MX795F512L.h" + #else + #error "Unsupported PIC32 MCU!" + #endif +#elif defined(__arm__) + #include "hardware/arm/HW_ARM.h" + #if defined(__SAM3X8E__) + #pragma message("Compiling for Arduino Due (AT91SAM3X8E)...") + #include "hardware/arm/HW_SAM3X8E.h" + #elif defined(__MK20DX128__) || defined(__MK20DX256__) + #pragma message("Compiling for Teensy 3.x (MK20DX128VLH7 / MK20DX256VLH7)...") + #include "hardware/arm/HW_MX20DX256.h" + #else + #error "Unsupported ARM MCU!" + #endif +#endif +#include "memorysaver.h" + +UTFT::UTFT() +{ +} + +UTFT::UTFT(byte model, int RS, int WR, int CS, int RST, int SER) +{ + word dsx[] = {239, 239, 239, 239, 239, 239, 175, 175, 239, 127, 127, 239, 271, 479, 239, 239, 239, 239, 239, 239, 479, 319, 239, 175, 127, 239, 239, 319, 319, 799, 127}; + word dsy[] = {319, 399, 319, 319, 319, 319, 219, 219, 399, 159, 127, 319, 479, 799, 319, 319, 319, 319, 319, 319, 799, 479, 319, 219, 159, 319, 319, 479, 479, 479, 159}; + byte dtm[] = {16, 16, 16, 8, 8, 16, 8, SERIAL_4PIN, 16, SERIAL_5PIN, SERIAL_5PIN, 16, 16, 16, 8, 16, LATCHED_16, 8, 16, 8, 16, 16, 16, 8, SERIAL_5PIN, SERIAL_5PIN, SERIAL_4PIN, 16, 16, 16, SERIAL_5PIN}; + + disp_x_size = dsx[model]; + disp_y_size = dsy[model]; + display_transfer_mode = dtm[model]; + display_model = model; + + __p1 = RS; + __p2 = WR; + __p3 = CS; + __p4 = RST; + __p5 = SER; + + if (display_transfer_mode == SERIAL_4PIN) + { + display_transfer_mode=1; + display_serial_mode=SERIAL_4PIN; + } + if (display_transfer_mode == SERIAL_5PIN) + { + display_transfer_mode=1; + display_serial_mode=SERIAL_5PIN; + } + + if (display_transfer_mode!=1) + { + _set_direction_registers(display_transfer_mode); + P_RS = portOutputRegister(digitalPinToPort(RS)); + B_RS = digitalPinToBitMask(RS); + P_WR = portOutputRegister(digitalPinToPort(WR)); + B_WR = digitalPinToBitMask(WR); + P_CS = portOutputRegister(digitalPinToPort(CS)); + B_CS = digitalPinToBitMask(CS); + P_RST = portOutputRegister(digitalPinToPort(RST)); + B_RST = digitalPinToBitMask(RST); + if (display_transfer_mode==LATCHED_16) + { + P_ALE = portOutputRegister(digitalPinToPort(SER)); + B_ALE = digitalPinToBitMask(SER); + cbi(P_ALE, B_ALE); + pinMode(8,OUTPUT); + digitalWrite(8, LOW); + } + } + else + { + P_SDA = portOutputRegister(digitalPinToPort(RS)); + B_SDA = digitalPinToBitMask(RS); + P_SCL = portOutputRegister(digitalPinToPort(WR)); + B_SCL = digitalPinToBitMask(WR); + P_CS = portOutputRegister(digitalPinToPort(CS)); + B_CS = digitalPinToBitMask(CS); + if (RST != NOTINUSE) + { + P_RST = portOutputRegister(digitalPinToPort(RST)); + B_RST = digitalPinToBitMask(RST); + } + if (display_serial_mode!=SERIAL_4PIN) + { + P_RS = portOutputRegister(digitalPinToPort(SER)); + B_RS = digitalPinToBitMask(SER); + } + } +} + +void UTFT::LCD_Write_COM(char VL) +{ + if (display_transfer_mode!=1) + { + cbi(P_RS, B_RS); + LCD_Writ_Bus(0x00,VL,display_transfer_mode); + } + else + LCD_Writ_Bus(0x00,VL,display_transfer_mode); +} + +void UTFT::LCD_Write_DATA(char VH,char VL) +{ + if (display_transfer_mode!=1) + { + sbi(P_RS, B_RS); + LCD_Writ_Bus(VH,VL,display_transfer_mode); + } + else + { + LCD_Writ_Bus(0x01,VH,display_transfer_mode); + LCD_Writ_Bus(0x01,VL,display_transfer_mode); + } +} + +void UTFT::LCD_Write_DATA(char VL) +{ + if (display_transfer_mode!=1) + { + sbi(P_RS, B_RS); + LCD_Writ_Bus(0x00,VL,display_transfer_mode); + } + else + LCD_Writ_Bus(0x01,VL,display_transfer_mode); +} + +void UTFT::LCD_Write_COM_DATA(char com1,int dat1) +{ + LCD_Write_COM(com1); + LCD_Write_DATA(dat1>>8,dat1); +} + +void UTFT::InitLCD(byte orientation) +{ + orient=orientation; + _hw_special_init(); + + pinMode(__p1,OUTPUT); + pinMode(__p2,OUTPUT); + pinMode(__p3,OUTPUT); + if (__p4 != NOTINUSE) + pinMode(__p4,OUTPUT); + if ((display_transfer_mode==LATCHED_16) or ((display_transfer_mode==1) and (display_serial_mode==SERIAL_5PIN))) + pinMode(__p5,OUTPUT); + if (display_transfer_mode!=1) + _set_direction_registers(display_transfer_mode); + + sbi(P_RST, B_RST); + delay(5); + cbi(P_RST, B_RST); + delay(15); + sbi(P_RST, B_RST); + delay(15); + + cbi(P_CS, B_CS); + + switch(display_model) + { +#ifndef DISABLE_HX8347A + #include "tft_drivers/hx8347a/initlcd.h" +#endif +#ifndef DISABLE_ILI9327 + #include "tft_drivers/ili9327/initlcd.h" +#endif +#ifndef DISABLE_SSD1289 + #include "tft_drivers/ssd1289/initlcd.h" +#endif +#ifndef DISABLE_ILI9325C + #include "tft_drivers/ili9325c/initlcd.h" +#endif +#ifndef DISABLE_ILI9325D + #include "tft_drivers/ili9325d/default/initlcd.h" +#endif +#ifndef DISABLE_ILI9325D_ALT + #include "tft_drivers/ili9325d/alt/initlcd.h" +#endif +#ifndef DISABLE_HX8340B_8 + #include "tft_drivers/hx8340b/8/initlcd.h" +#endif +#ifndef DISABLE_HX8340B_S + #include "tft_drivers/hx8340b/s/initlcd.h" +#endif +#ifndef DISABLE_ST7735 + #include "tft_drivers/st7735/initlcd.h" +#endif +#ifndef DISABLE_PCF8833 + #include "tft_drivers/pcf8833/initlcd.h" +#endif +#ifndef DISABLE_S1D19122 + #include "tft_drivers/s1d19122/initlcd.h" +#endif +#ifndef DISABLE_HX8352A + #include "tft_drivers/hx8352a/initlcd.h" +#endif +#ifndef DISABLE_SSD1963_480 + #include "tft_drivers/ssd1963/480/initlcd.h" +#endif +#ifndef DISABLE_SSD1963_800 + #include "tft_drivers/ssd1963/800/initlcd.h" +#endif +#ifndef DISABLE_SSD1963_800_ALT + #include "tft_drivers/ssd1963/800alt/initlcd.h" +#endif +#ifndef DISABLE_S6D1121 + #include "tft_drivers/s6d1121/initlcd.h" +#endif +#ifndef DISABLE_ILI9320 + #include "tft_drivers/ili9320/initlcd.h" +#endif +#ifndef DISABLE_ILI9481 + #include "tft_drivers/ili9481/initlcd.h" +#endif +#ifndef DISABLE_S6D0164 + #include "tft_drivers/s6d0164/initlcd.h" +#endif +#ifndef DISABLE_ST7735S + #include "tft_drivers/st7735s/initlcd.h" +#endif +#ifndef DISABLE_ILI9341_S4P + #include "tft_drivers/ili9341/s4p/initlcd.h" +#endif +#ifndef DISABLE_ILI9341_S5P + #include "tft_drivers/ili9341/s5p/initlcd.h" +#endif +#ifndef DISABLE_R61581 + #include "tft_drivers/r61581/initlcd.h" +#endif +#ifndef DISABLE_ILI9486 + #include "tft_drivers/ili9486/initlcd.h" +#endif +#ifndef DISABLE_CPLD + #include "tft_drivers/cpld/initlcd.h" +#endif +#ifndef DISABLE_HX8353C + #include "tft_drivers/hx8353c/initlcd.h" +#endif + } + + sbi (P_CS, B_CS); + + setColor(255, 255, 255); + setBackColor(0, 0, 0); + cfont.font=0; + _transparent = false; +} + +void UTFT::setXY(word x1, word y1, word x2, word y2) +{ + if (orient==LANDSCAPE) + { + swap(word, x1, y1); + swap(word, x2, y2) + y1=disp_y_size-y1; + y2=disp_y_size-y2; + swap(word, y1, y2) + } + + switch(display_model) + { +#ifndef DISABLE_HX8347A + #include "tft_drivers/hx8347a/setxy.h" +#endif +#ifndef DISABLE_HX8352A + #include "tft_drivers/hx8352a/setxy.h" +#endif +#ifndef DISABLE_ILI9327 + #include "tft_drivers/ili9327/setxy.h" +#endif +#ifndef DISABLE_SSD1289 + #include "tft_drivers/ssd1289/setxy.h" +#endif +#ifndef DISABLE_ILI9325C + #include "tft_drivers/ili9325c/setxy.h" +#endif +#ifndef DISABLE_ILI9325D + #include "tft_drivers/ili9325d/default/setxy.h" +#endif +#ifndef DISABLE_ILI9325D_ALT + #include "tft_drivers/ili9325d/alt/setxy.h" +#endif +#ifndef DISABLE_HX8340B_8 + #include "tft_drivers/hx8340b/8/setxy.h" +#endif +#ifndef DISABLE_HX8340B_S + #include "tft_drivers/hx8340b/s/setxy.h" +#endif +#ifndef DISABLE_ST7735 + #include "tft_drivers/st7735/setxy.h" +#endif +#ifndef DISABLE_S1D19122 + #include "tft_drivers/s1d19122/setxy.h" +#endif +#ifndef DISABLE_PCF8833 + #include "tft_drivers/pcf8833/setxy.h" +#endif +#ifndef DISABLE_SSD1963_480 + #include "tft_drivers/ssd1963/480/setxy.h" +#endif +#ifndef DISABLE_SSD1963_800 + #include "tft_drivers/ssd1963/800/setxy.h" +#endif +#ifndef DISABLE_SSD1963_800_ALT + #include "tft_drivers/ssd1963/800alt/setxy.h" +#endif +#ifndef DISABLE_S6D1121 + #include "tft_drivers/s6d1121/setxy.h" +#endif +#ifndef DISABLE_ILI9320 + #include "tft_drivers/ili9320/setxy.h" +#endif +#ifndef DISABLE_ILI9481 + #include "tft_drivers/ili9481/setxy.h" +#endif +#ifndef DISABLE_S6D0164 + #include "tft_drivers/s6d0164/setxy.h" +#endif +#ifndef DISABLE_ST7735S + #include "tft_drivers/st7735s/setxy.h" +#endif +#ifndef DISABLE_ILI9341_S4P + #include "tft_drivers/ili9341/s4p/setxy.h" +#endif +#ifndef DISABLE_ILI9341_S5P + #include "tft_drivers/ili9341/s5p/setxy.h" +#endif +#ifndef DISABLE_R61581 + #include "tft_drivers/r61581/setxy.h" +#endif +#ifndef DISABLE_ILI9486 + #include "tft_drivers/ili9486/setxy.h" +#endif +#ifndef DISABLE_CPLD + #include "tft_drivers/cpld/setxy.h" +#endif +#ifndef DISABLE_HX8353C + #include "tft_drivers/hx8353c/setxy.h" +#endif + } +} + +void UTFT::clrXY() +{ + if (orient==PORTRAIT) + setXY(0,0,disp_x_size,disp_y_size); + else + setXY(0,0,disp_y_size,disp_x_size); +} + +void UTFT::drawRect(int x1, int y1, int x2, int y2) +{ + if (x1>x2) + { + swap(int, x1, x2); + } + if (y1>y2) + { + swap(int, y1, y2); + } + + drawHLine(x1, y1, x2-x1); + drawHLine(x1, y2, x2-x1); + drawVLine(x1, y1, y2-y1); + drawVLine(x2, y1, y2-y1); +} + +void UTFT::drawRoundRect(int x1, int y1, int x2, int y2) +{ + if (x1>x2) + { + swap(int, x1, x2); + } + if (y1>y2) + { + swap(int, y1, y2); + } + if ((x2-x1)>4 && (y2-y1)>4) + { + drawPixel(x1+1,y1+1); + drawPixel(x2-1,y1+1); + drawPixel(x1+1,y2-1); + drawPixel(x2-1,y2-1); + drawHLine(x1+2, y1, x2-x1-4); + drawHLine(x1+2, y2, x2-x1-4); + drawVLine(x1, y1+2, y2-y1-4); + drawVLine(x2, y1+2, y2-y1-4); + } +} + +void UTFT::fillRect(int x1, int y1, int x2, int y2) +{ + if (x1>x2) + { + swap(int, x1, x2); + } + if (y1>y2) + { + swap(int, y1, y2); + } + if (display_transfer_mode==16) + { + cbi(P_CS, B_CS); + setXY(x1, y1, x2, y2); + sbi(P_RS, B_RS); + _fast_fill_16(fch,fcl,((long(x2-x1)+1)*(long(y2-y1)+1))); + sbi(P_CS, B_CS); + } + else if ((display_transfer_mode==8) and (fch==fcl)) + { + cbi(P_CS, B_CS); + setXY(x1, y1, x2, y2); + sbi(P_RS, B_RS); + _fast_fill_8(fch,((long(x2-x1)+1)*(long(y2-y1)+1))); + sbi(P_CS, B_CS); + } + else + { + if (orient==PORTRAIT) + { + for (int i=0; i<((y2-y1)/2)+1; i++) + { + drawHLine(x1, y1+i, x2-x1); + drawHLine(x1, y2-i, x2-x1); + } + } + else + { + for (int i=0; i<((x2-x1)/2)+1; i++) + { + drawVLine(x1+i, y1, y2-y1); + drawVLine(x2-i, y1, y2-y1); + } + } + } +} + +void UTFT::fillRoundRect(int x1, int y1, int x2, int y2) +{ + if (x1>x2) + { + swap(int, x1, x2); + } + if (y1>y2) + { + swap(int, y1, y2); + } + + if ((x2-x1)>4 && (y2-y1)>4) + { + for (int i=0; i<((y2-y1)/2)+1; i++) + { + switch(i) + { + case 0: + drawHLine(x1+2, y1+i, x2-x1-4); + drawHLine(x1+2, y2-i, x2-x1-4); + break; + case 1: + drawHLine(x1+1, y1+i, x2-x1-2); + drawHLine(x1+1, y2-i, x2-x1-2); + break; + default: + drawHLine(x1, y1+i, x2-x1); + drawHLine(x1, y2-i, x2-x1); + } + } + } +} + +void UTFT::drawCircle(int x, int y, int radius) +{ + int f = 1 - radius; + int ddF_x = 1; + int ddF_y = -2 * radius; + int x1 = 0; + int y1 = radius; + + cbi(P_CS, B_CS); + setXY(x, y + radius, x, y + radius); + LCD_Write_DATA(fch,fcl); + setXY(x, y - radius, x, y - radius); + LCD_Write_DATA(fch,fcl); + setXY(x + radius, y, x + radius, y); + LCD_Write_DATA(fch,fcl); + setXY(x - radius, y, x - radius, y); + LCD_Write_DATA(fch,fcl); + + while(x1 < y1) + { + if(f >= 0) + { + y1--; + ddF_y += 2; + f += ddF_y; + } + x1++; + ddF_x += 2; + f += ddF_x; + setXY(x + x1, y + y1, x + x1, y + y1); + LCD_Write_DATA(fch,fcl); + setXY(x - x1, y + y1, x - x1, y + y1); + LCD_Write_DATA(fch,fcl); + setXY(x + x1, y - y1, x + x1, y - y1); + LCD_Write_DATA(fch,fcl); + setXY(x - x1, y - y1, x - x1, y - y1); + LCD_Write_DATA(fch,fcl); + setXY(x + y1, y + x1, x + y1, y + x1); + LCD_Write_DATA(fch,fcl); + setXY(x - y1, y + x1, x - y1, y + x1); + LCD_Write_DATA(fch,fcl); + setXY(x + y1, y - x1, x + y1, y - x1); + LCD_Write_DATA(fch,fcl); + setXY(x - y1, y - x1, x - y1, y - x1); + LCD_Write_DATA(fch,fcl); + } + sbi(P_CS, B_CS); + clrXY(); +} + +void UTFT::fillCircle(int x, int y, int radius) +{ + for(int y1=-radius; y1<=0; y1++) + for(int x1=-radius; x1<=0; x1++) + if(x1*x1+y1*y1 <= radius*radius) + { + drawHLine(x+x1, y+y1, 2*(-x1)); + drawHLine(x+x1, y-y1, 2*(-x1)); + break; + } +} + +void UTFT::clrScr() +{ + long i; + + cbi(P_CS, B_CS); + clrXY(); + if (display_transfer_mode!=1) + sbi(P_RS, B_RS); + if (display_transfer_mode==16) + _fast_fill_16(0,0,((disp_x_size+1)*(disp_y_size+1))); + else if (display_transfer_mode==8) + _fast_fill_8(0,((disp_x_size+1)*(disp_y_size+1))); + else + { + for (i=0; i<((disp_x_size+1)*(disp_y_size+1)); i++) + { + if (display_transfer_mode!=1) + LCD_Writ_Bus(0,0,display_transfer_mode); + else + { + LCD_Writ_Bus(1,0,display_transfer_mode); + LCD_Writ_Bus(1,0,display_transfer_mode); + } + } + } + sbi(P_CS, B_CS); +} + +void UTFT::fillScr(byte r, byte g, byte b) +{ + word color = ((r&248)<<8 | (g&252)<<3 | (b&248)>>3); + fillScr(color); +} + +void UTFT::fillScr(word color) +{ + long i; + char ch, cl; + + ch=byte(color>>8); + cl=byte(color & 0xFF); + + cbi(P_CS, B_CS); + clrXY(); + if (display_transfer_mode!=1) + sbi(P_RS, B_RS); + if (display_transfer_mode==16) + _fast_fill_16(ch,cl,((disp_x_size+1)*(disp_y_size+1))); + else if ((display_transfer_mode==8) and (ch==cl)) + _fast_fill_8(ch,((disp_x_size+1)*(disp_y_size+1))); + else + { + for (i=0; i<((disp_x_size+1)*(disp_y_size+1)); i++) + { + if (display_transfer_mode!=1) + LCD_Writ_Bus(ch,cl,display_transfer_mode); + else + { + LCD_Writ_Bus(1,ch,display_transfer_mode); + LCD_Writ_Bus(1,cl,display_transfer_mode); + } + } + } + sbi(P_CS, B_CS); +} + +void UTFT::setColor(byte r, byte g, byte b) +{ + fch=((r&248)|g>>5); + fcl=((g&28)<<3|b>>3); +} + +void UTFT::setColor(word color) +{ + fch=byte(color>>8); + fcl=byte(color & 0xFF); +} + +word UTFT::getColor() +{ + return (fch<<8) | fcl; +} + +void UTFT::setBackColor(byte r, byte g, byte b) +{ + bch=((r&248)|g>>5); + bcl=((g&28)<<3|b>>3); + _transparent=false; +} + +void UTFT::setBackColor(uint32_t color) +{ + if (color==VGA_TRANSPARENT) + _transparent=true; + else + { + bch=byte(color>>8); + bcl=byte(color & 0xFF); + _transparent=false; + } +} + +word UTFT::getBackColor() +{ + return (bch<<8) | bcl; +} + +void UTFT::setPixel(word color) +{ + LCD_Write_DATA((color>>8),(color&0xFF)); // rrrrrggggggbbbbb +} + +void UTFT::drawPixel(int x, int y) +{ + cbi(P_CS, B_CS); + setXY(x, y, x, y); + setPixel((fch<<8)|fcl); + sbi(P_CS, B_CS); + clrXY(); +} + +void UTFT::drawLine(int x1, int y1, int x2, int y2) +{ + if (y1==y2) + drawHLine(x1, y1, x2-x1); + else if (x1==x2) + drawVLine(x1, y1, y2-y1); + else + { + unsigned int dx = (x2 > x1 ? x2 - x1 : x1 - x2); + short xstep = x2 > x1 ? 1 : -1; + unsigned int dy = (y2 > y1 ? y2 - y1 : y1 - y2); + short ystep = y2 > y1 ? 1 : -1; + int col = x1, row = y1; + + cbi(P_CS, B_CS); + if (dx < dy) + { + int t = - (dy >> 1); + while (true) + { + setXY (col, row, col, row); + LCD_Write_DATA (fch, fcl); + if (row == y2) + return; + row += ystep; + t += dx; + if (t >= 0) + { + col += xstep; + t -= dy; + } + } + } + else + { + int t = - (dx >> 1); + while (true) + { + setXY (col, row, col, row); + LCD_Write_DATA (fch, fcl); + if (col == x2) + return; + col += xstep; + t += dy; + if (t >= 0) + { + row += ystep; + t -= dx; + } + } + } + sbi(P_CS, B_CS); + } + clrXY(); +} + +void UTFT::drawHLine(int x, int y, int l) +{ + if (l<0) + { + l = -l; + x -= l; + } + cbi(P_CS, B_CS); + setXY(x, y, x+l, y); + if (display_transfer_mode == 16) + { + sbi(P_RS, B_RS); + _fast_fill_16(fch,fcl,l); + } + else if ((display_transfer_mode==8) and (fch==fcl)) + { + sbi(P_RS, B_RS); + _fast_fill_8(fch,l); + } + else + { + for (int i=0; i=0; zz--) + { + ch=pgm_read_byte(&cfont.font[temp+zz]); + for(i=0;i<8;i++) + { + if((ch&(1<0) + { + buf[c]=48+(num % 10); + c++; + num=(num-(num % 10))/10; + } + buf[c]=0; + + if (neg) + { + st[0]=45; + } + + if (length>(c+neg)) + { + for (int i=0; i<(length-c-neg); i++) + { + st[i+neg]=filler; + f++; + } + } + + for (int i=0; i5) + dec=5; + + if (num<0) + neg = true; + + _convert_float(st, num, length, dec); + + if (divider != '.') + { + for (int i=0; i>8,col & 0xff); + } + sbi(P_CS, B_CS); + } + else + { + cbi(P_CS, B_CS); + for (ty=0; ty=0; tx--) + { + col=pgm_read_word(&data[(ty*sx)+tx]); + LCD_Write_DATA(col>>8,col & 0xff); + } + } + sbi(P_CS, B_CS); + } + } + else + { + if (orient==PORTRAIT) + { + cbi(P_CS, B_CS); + for (ty=0; ty>8,col & 0xff); + } + } + sbi(P_CS, B_CS); + } + else + { + cbi(P_CS, B_CS); + for (ty=0; ty=0; tx--) + { + col=pgm_read_word(&data[(ty*sx)+tx]); + for (tsx=0; tsx>8,col & 0xff); + } + } + } + sbi(P_CS, B_CS); + } + } + clrXY(); +} + +void UTFT::drawBitmap(int x, int y, int sx, int sy, bitmapdatatype data, int deg, int rox, int roy) +{ + unsigned int col; + int tx, ty, newx, newy; + double radian; + radian=deg*0.0175; + + if (deg==0) + drawBitmap(x, y, sx, sy, data); + else + { + cbi(P_CS, B_CS); + for (ty=0; ty>8,col & 0xff); + } + sbi(P_CS, B_CS); + } + clrXY(); +} + +void UTFT::lcdOff() +{ + cbi(P_CS, B_CS); + switch (display_model) + { + case PCF8833: + LCD_Write_COM(0x28); + break; + case CPLD: + LCD_Write_COM_DATA(0x01,0x0000); + LCD_Write_COM(0x0F); + break; + } + sbi(P_CS, B_CS); +} + +void UTFT::lcdOn() +{ + cbi(P_CS, B_CS); + switch (display_model) + { + case PCF8833: + LCD_Write_COM(0x29); + break; + case CPLD: + LCD_Write_COM_DATA(0x01,0x0010); + LCD_Write_COM(0x0F); + break; + } + sbi(P_CS, B_CS); +} + +void UTFT::setContrast(char c) +{ + cbi(P_CS, B_CS); + switch (display_model) + { + case PCF8833: + if (c>64) c=64; + LCD_Write_COM(0x25); + LCD_Write_DATA(c); + break; + } + sbi(P_CS, B_CS); +} + +int UTFT::getDisplayXSize() +{ + if (orient==PORTRAIT) + return disp_x_size+1; + else + return disp_y_size+1; +} + +int UTFT::getDisplayYSize() +{ + if (orient==PORTRAIT) + return disp_y_size+1; + else + return disp_x_size+1; +} + +void UTFT::setBrightness(byte br) +{ + cbi(P_CS, B_CS); + switch (display_model) + { + case CPLD: + if (br>16) br=16; + LCD_Write_COM_DATA(0x01,br); + LCD_Write_COM(0x0F); + break; + } + sbi(P_CS, B_CS); +} + +void UTFT::setDisplayPage(byte page) +{ + cbi(P_CS, B_CS); + switch (display_model) + { + case CPLD: + if (page>7) page=7; + LCD_Write_COM_DATA(0x04,page); + LCD_Write_COM(0x0F); + break; + } + sbi(P_CS, B_CS); +} + +void UTFT::setWritePage(byte page) +{ + cbi(P_CS, B_CS); + switch (display_model) + { + case CPLD: + if (page>7) page=7; + LCD_Write_COM_DATA(0x05,page); + LCD_Write_COM(0x0F); + break; + } + sbi(P_CS, B_CS); +} diff --git a/libraries/UTFT/UTFT.h b/libraries/UTFT/UTFT.h new file mode 100644 index 0000000..c863311 --- /dev/null +++ b/libraries/UTFT/UTFT.h @@ -0,0 +1,275 @@ +/* + UTFT.h - Arduino/chipKit library support for Color TFT LCD Boards + Copyright (C)2010-2014 Henning Karlsen. All right reserved + + This library is the continuation of my ITDB02_Graph, ITDB02_Graph16 + and RGB_GLCD libraries for Arduino and chipKit. As the number of + supported display modules and controllers started to increase I felt + it was time to make a single, universal library as it will be much + easier to maintain in the future. + + Basic functionality of this library was origianlly based on the + demo-code provided by ITead studio (for the ITDB02 modules) and + NKC Electronics (for the RGB GLCD module/shield). + + This library supports a number of 8bit, 16bit and serial graphic + displays, and will work with both Arduino and chipKit boards. For a + full list of tested display modules and controllers, see the + document UTFT_Supported_display_modules_&_controllers.pdf. + + When using 8bit and 16bit display modules there are some + requirements you must adhere to. These requirements can be found + in the document UTFT_Requirements.pdf. + There are no special requirements when using serial displays. + + You can always find the latest version of the library at + http://electronics.henningkarlsen.com/ + + If you make any modifications or improvements to the code, I would + appreciate that you share the code with me so that I might include + it in the next release. I can be contacted through + http://electronics.henningkarlsen.com/contact.php. + + This library is free software; you can redistribute it and/or + modify it under the terms of the CC BY-NC-SA 3.0 license. + Please see the included documents for further information. + + Commercial use of this library requires you to buy a license that + will allow commercial use. This includes using the library, + modified or not, as a tool to sell products. + + The license applies to all part of the library including the + examples and tools supplied with the library. +*/ + +#ifndef UTFT_h +#define UTFT_h + +#define UTFT_VERSION 278 + +#define LEFT 0 +#define RIGHT 9999 +#define CENTER 9998 + +#define PORTRAIT 0 +#define LANDSCAPE 1 + +#define HX8347A 0 +#define ILI9327 1 +#define SSD1289 2 +#define ILI9325C 3 +#define ILI9325D_8 4 +#define ILI9325D_16 5 +#define HX8340B_8 6 +#define HX8340B_S 7 +#define HX8352A 8 +#define ST7735 9 +#define PCF8833 10 +#define S1D19122 11 +#define SSD1963_480 12 +#define SSD1963_800 13 +#define S6D1121_8 14 +#define S6D1121_16 15 +#define SSD1289LATCHED 16 +#define ILI9320_8 17 +#define ILI9320_16 18 +#define SSD1289_8 19 +#define SSD1963_800ALT 20 +#define ILI9481 21 +#define ILI9325D_16ALT 22 +#define S6D0164 23 +#define ST7735S 24 +#define ILI9341_S5P 25 +#define ILI9341_S4P 26 +#define R61581 27 +#define ILI9486 28 +#define CPLD 29 +#define HX8353C 30 + +#define ITDB32 0 // HX8347-A (16bit) +#define ITDB32WC 1 // ILI9327 (16bit) +#define TFT01_32W 1 // ILI9327 (16bit) +#define ITDB32S 2 // SSD1289 (16bit) +#define TFT01_32 2 // SSD1289 (16bit) +#define CTE32 2 // SSD1289 (16bit) +#define GEEE32 2 // SSD1289 (16bit) +#define ITDB24 3 // ILI9325C (8bit) +#define ITDB24D 4 // ILI9325D (8bit) +#define ITDB24DWOT 4 // ILI9325D (8bit) +#define ITDB28 4 // ILI9325D (8bit) +#define TFT01_24_8 4 // ILI9325D (8bit) +#define DMTFT24104 4 // ILI9325D (8bit) +#define DMTFT28103 4 // ILI9325D (8bit) +#define TFT01_24_16 5 // ILI9325D (16bit) +#define ITDB22 6 // HX8340-B (8bit) +#define GEEE22 6 // HX8340-B (8bit) +#define ITDB22SP 7 // HX8340-B (Serial 4Pin) +#define ITDB32WD 8 // HX8352-A (16bit) +#define TFT01_32WD 8 // HX8352-A (16bit) +#define CTE32W 8 // HX8352-A (16bit) +#define ITDB18SP 9 // ST7735 (Serial 5Pin) +#define LPH9135 10 // PCF8833 (Serial 5Pin) +#define ITDB25H 11 // S1D19122 (16bit) +#define ITDB43 12 // SSD1963 (16bit) 480x272 +#define TFT01_43 12 // SSD1963 (16bit) 480x272 +#define ITDB50 13 // SSD1963 (16bit) 800x480 +#define TFT01_50 13 // SSD1963 (16bit) 800x480 +#define CTE50 13 // SSD1963 (16bit) 800x480 +#define EHOUSE50 13 // SSD1963 (16bit) 800x480 +#define ITDB24E_8 14 // S6D1121 (8bit) +#define TFT01_24R2 14 // S6D1121 (8bit) +#define ITDB24E_16 15 // S6D1121 (16bit) +#define INFINIT32 16 // SSD1289 (Latched 16bit) -- Legacy, will be removed later +#define ELEE32_REVA 16 // SSD1289 (Latched 16bit) +#define GEEE24 17 // ILI9320 (8bit) +#define GEEE28 18 // ILI9320 (16bit) +#define ELEE32_REVB 19 // SSD1289 (8bit) +#define TFT01_70 20 // SSD1963 (16bit) 800x480 Alternative Init +#define CTE70 20 // SSD1963 (16bit) 800x480 Alternative Init +#define EHOUSE70 20 // SSD1963 (16bit) 800x480 Alternative Init +#define CTE32HR 21 // ILI9481 (16bit) +#define CTE28 22 // ILI9325D (16bit) Alternative Init +#define TFT01_28 22 // ILI9325D (16bit) Alternative Init +#define CTE22 23 // S6D0164 (8bit) +#define TFT01_22 23 // S6D0164 (8bit) +#define DMTFT22102 23 // S6D0164 (8bit) +#define TFT01_18SP 24 // ST7735S (Serial 5Pin) +#define TFT01_22SP 25 // ILI9341 (Serial 5Pin) +#define DMTFT28105 25 // ILI9341 (Serial 5Pin) +#define MI0283QT9 26 // ILI9341 (Serial 4Pin) +#define CTE35IPS 27 // R61581 (16bit) +#define CTE40 28 // ILI9486 (16bit) +#define EHOUSE50CPLD 29 // CPLD (16bit) +#define CTE50CPLD 29 // CPLD (16bit) +#define CTE70CPLD 29 // CPLD (16bit) +#define DMTFT18101 30 // HX8353C (Serial 5Pin) + + +#define SERIAL_4PIN 4 +#define SERIAL_5PIN 5 +#define LATCHED_16 17 + +#define NOTINUSE 255 + +//********************************* +// COLORS +//********************************* +// VGA color palette +#define VGA_BLACK 0x0000 +#define VGA_WHITE 0xFFFF +#define VGA_RED 0xF800 +#define VGA_GREEN 0x0400 +#define VGA_BLUE 0x001F +#define VGA_SILVER 0xC618 +#define VGA_GRAY 0x8410 +#define VGA_MAROON 0x8000 +#define VGA_YELLOW 0xFFE0 +#define VGA_OLIVE 0x8400 +#define VGA_LIME 0x07E0 +#define VGA_AQUA 0x07FF +#define VGA_TEAL 0x0410 +#define VGA_NAVY 0x0010 +#define VGA_FUCHSIA 0xF81F +#define VGA_PURPLE 0x8010 +#define VGA_TRANSPARENT 0xFFFFFFFF + +#if defined(__AVR__) + #include "Arduino.h" + #include "hardware/avr/HW_AVR_defines.h" +#elif defined(__PIC32MX__) + #include "WProgram.h" + #include "hardware/pic32/HW_PIC32_defines.h" +#elif defined(__arm__) + #include "Arduino.h" + #include "hardware/arm/HW_ARM_defines.h" +#endif + +struct _current_font +{ + uint8_t* font; + uint8_t x_size; + uint8_t y_size; + uint8_t offset; + uint8_t numchars; +}; + +class UTFT +{ + public: + UTFT(); + UTFT(byte model, int RS, int WR, int CS, int RST, int SER=0); + void InitLCD(byte orientation=LANDSCAPE); + void clrScr(); + void drawPixel(int x, int y); + void drawLine(int x1, int y1, int x2, int y2); + void fillScr(byte r, byte g, byte b); + void fillScr(word color); + void drawRect(int x1, int y1, int x2, int y2); + void drawRoundRect(int x1, int y1, int x2, int y2); + void fillRect(int x1, int y1, int x2, int y2); + void fillRoundRect(int x1, int y1, int x2, int y2); + void drawCircle(int x, int y, int radius); + void fillCircle(int x, int y, int radius); + void setColor(byte r, byte g, byte b); + void setColor(word color); + word getColor(); + void setBackColor(byte r, byte g, byte b); + void setBackColor(uint32_t color); + word getBackColor(); + void print(char *st, int x, int y, int deg=0); + void print(String st, int x, int y, int deg=0); + void printNumI(long num, int x, int y, int length=0, char filler=' '); + void printNumF(double num, byte dec, int x, int y, char divider='.', int length=0, char filler=' '); + void setFont(uint8_t* font); + uint8_t* getFont(); + uint8_t getFontXsize(); + uint8_t getFontYsize(); + void drawBitmap(int x, int y, int sx, int sy, bitmapdatatype data, int scale=1); + void drawBitmap(int x, int y, int sx, int sy, bitmapdatatype data, int deg, int rox, int roy); + void lcdOff(); + void lcdOn(); + void setContrast(char c); + int getDisplayXSize(); + int getDisplayYSize(); + void setBrightness(byte br); + void setDisplayPage(byte page); + void setWritePage(byte page); + +/* + The functions and variables below should not normally be used. + They have been left publicly available for use in add-on libraries + that might need access to the lower level functions of UTFT. + + Please note that these functions and variables are not documented + and I do not provide support on how to use them. +*/ + byte fch, fcl, bch, bcl; + byte orient; + long disp_x_size, disp_y_size; + byte display_model, display_transfer_mode, display_serial_mode; + regtype *P_RS, *P_WR, *P_CS, *P_RST, *P_SDA, *P_SCL, *P_ALE; + regsize B_RS, B_WR, B_CS, B_RST, B_SDA, B_SCL, B_ALE; + byte __p1, __p2, __p3, __p4, __p5; + _current_font cfont; + boolean _transparent; + + void LCD_Writ_Bus(char VH,char VL, byte mode); + void LCD_Write_COM(char VL); + void LCD_Write_DATA(char VH,char VL); + void LCD_Write_DATA(char VL); + void LCD_Write_COM_DATA(char com1,int dat1); + void _hw_special_init(); + void setPixel(word color); + void drawHLine(int x, int y, int l); + void drawVLine(int x, int y, int l); + void printChar(byte c, int x, int y); + void setXY(word x1, word y1, word x2, word y2); + void clrXY(); + void rotateChar(byte c, int x, int y, int pos, int deg); + void _set_direction_registers(byte mode); + void _fast_fill_16(int ch, int cl, long pix); + void _fast_fill_8(int ch, long pix); + void _convert_float(char *buf, double num, int width, byte prec); +}; + +#endif \ No newline at end of file diff --git a/libraries/UTFT/UTFT.pdf b/libraries/UTFT/UTFT.pdf new file mode 100644 index 0000000..dc580fd Binary files /dev/null and b/libraries/UTFT/UTFT.pdf differ diff --git a/libraries/UTFT/UTFT_Requirements.pdf b/libraries/UTFT/UTFT_Requirements.pdf new file mode 100644 index 0000000..c21d73c Binary files /dev/null and b/libraries/UTFT/UTFT_Requirements.pdf differ diff --git a/libraries/UTFT/UTFT_Supported_display_modules_&_controllers.pdf b/libraries/UTFT/UTFT_Supported_display_modules_&_controllers.pdf new file mode 100644 index 0000000..9bb7cac Binary files /dev/null and b/libraries/UTFT/UTFT_Supported_display_modules_&_controllers.pdf differ diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap/UTFT_Bitmap.ino b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap/UTFT_Bitmap.ino new file mode 100644 index 0000000..1f3ef33 --- /dev/null +++ b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap/UTFT_Bitmap.ino @@ -0,0 +1,66 @@ +// UTFT_Bitmap (C)2014 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of the drawBitmap()-function. +// +// This demo was made to work on the 320x240 modules. +// Any other size displays may cause strange behaviour. +// +// This program requires the UTFT library. +// + +#include + +// Declare which fonts we will be using +extern uint8_t SmallFont[]; + +// Set the pins to the correct ones for your development shield +// ------------------------------------------------------------ +// Standard Arduino Mega/Due shield : ,38,39,40,41 +// CTE TFT LCD/SD Shield for Arduino Due : ,25,26,27,28 +// Teensy 3.x TFT Test Board : ,23,22, 3, 4 +// ElecHouse TFT LCD/SD Shield for Arduino Due : ,22,23,31,33 +// +// Remember to change the model parameter to suit your display module! +UTFT myGLCD(ITDB32S,38,39,40,41); + +extern unsigned short info[0x400]; +extern unsigned short icon[0x400]; +extern unsigned short tux[0x400]; + +void setup() +{ + myGLCD.InitLCD(); + myGLCD.setFont(SmallFont); +} + +void loop() +{ + myGLCD.fillScr(255, 255, 255); + myGLCD.setColor(255, 255, 255); + myGLCD.print(" *** A 10 by 7 grid of a 32x32 icon *** ", CENTER, 228); + for (int x=0; x<10; x++) + for (int y=0; y<7; y++) + myGLCD.drawBitmap (x*32, y*32, 32, 32, info); + + delay(5000); + + myGLCD.fillScr(255, 255, 255); + myGLCD.setColor(255, 255, 255); + myGLCD.print(" Two different icons in scale 1 to 4 ", CENTER, 228); + int x=0; + for (int s=0; s<4; s++) + { + x+=(s*32); + myGLCD.drawBitmap (x, 0, 32, 32, tux, s+1); + } + x=0; + for (int s=4; s>0; s--) + { + myGLCD.drawBitmap (x, 224-(s*32), 32, 32, icon, s); + x+=(s*32); + } + + delay(5000); +} + diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap/icon.c b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap/icon.c new file mode 100644 index 0000000..9cb97a1 --- /dev/null +++ b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap/icon.c @@ -0,0 +1,71 @@ +// Generated by : ImageConverter 565 v1.0 +// Generated from: taskmgr.png +// Time generated: 11.10.2010 22:51:23 +// Size : 2 048 Bytes + +const unsigned short icon[0x400] ={ +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7D, 0xCE79, 0xBDD7, 0xAD75, // 0x0010 (16) +0xAD55, 0xAD75, 0xBDF7, 0xD6BA, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0020 (32) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xC638, 0x9492, 0x8C51, 0x9492, 0xA514, 0xA534, // 0x0030 (48) +0xA534, 0xA534, 0x9CF3, 0x8C71, 0x8430, 0x9CD3, 0xD69A, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0040 (64) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xCE59, 0x8410, 0x9492, 0xB5B6, 0xC618, 0xBDD7, 0xAD75, 0xA514, // 0x0050 (80) +0xA514, 0xA4F4, 0xAD55, 0xB5B6, 0xBDD7, 0xAD55, 0x8430, 0x8C71, 0xDEFB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0060 (96) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0x9CD3, 0x8430, 0xBDF7, 0xC618, 0xAD75, 0x94F2, 0x8CF1, 0x84B0, 0x8CD1, // 0x0070 (112) +0x9612, 0x8CB1, 0x7C6F, 0x7C8F, 0x8490, 0xA533, 0xBDF7, 0xB596, 0x7BEF, 0xB596, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0080 (128) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0x8430, 0x9CF3, 0xCE39, 0xA514, 0x94B2, 0x9E93, 0x94F2, 0x8CD1, 0x8CB1, 0x9D12, // 0x0090 (144) +0x9F74, 0x9D52, 0x8450, 0x7C8F, 0x73AE, 0x740E, 0x73CE, 0x9CD3, 0xC638, 0x8C51, 0x9CD3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00A0 (160) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0x8430, 0xA534, 0xBDF7, 0x8CB1, 0x8C31, 0x9DB3, 0xA735, 0x9D13, 0x8CB1, 0x8C71, 0x9D13, // 0x00B0 (176) +0xB756, 0xA5D4, 0x8C71, 0x8490, 0x8390, 0x7C70, 0x73EE, 0x6B4D, 0x8450, 0xBDF7, 0x8C71, 0x9CF3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00C0 (192) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x94B2, 0x9CF3, 0xBDD7, 0x8490, 0x8CF1, 0x9D72, 0xA694, 0xAE94, 0x9DD3, 0xA593, 0xA553, 0x9592, // 0x00D0 (208) +0x9672, 0x75CE, 0x5BAA, 0x64EB, 0x5D8C, 0x5BCA, 0x4B69, 0x634C, 0x748D, 0x7C4F, 0xBE18, 0x8430, 0xB5B6, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00E0 (224) +0xFFFF, 0xFFFF, 0xFFFF, 0xC618, 0x8410, 0xBDF7, 0x8410, 0x83F0, 0x94F2, 0x9613, 0x9D13, 0xAE55, 0x9D12, 0x750E, 0x55CB, 0x4BC8, // 0x00F0 (240) +0x4447, 0x3BC6, 0x4B67, 0x44E8, 0x3CE8, 0x3325, 0x20E2, 0x2B45, 0x43E7, 0x3946, 0x732D, 0xC5F8, 0x7BCF, 0xE71C, 0xFFFF, 0xFFFF, // 0x0100 (256) +0xFFFF, 0xFFFF, 0xF7BE, 0x7BEF, 0xBDB6, 0x9533, 0x8D71, 0x9552, 0x9E73, 0x9DD3, 0x94B2, 0x6D6D, 0x4BA8, 0x44A8, 0x55EA, 0x5D2A, // 0x0110 (272) +0x43E7, 0x4327, 0x46CA, 0x4B87, 0x42C6, 0x4E0A, 0x4D09, 0x4468, 0x4548, 0x3386, 0x2B25, 0x7C6F, 0xAD35, 0x9492, 0xFFFF, 0xFFFF, // 0x0120 (288) +0xFFDF, 0xFFFF, 0xBDD7, 0x8C71, 0xAD75, 0x8CF0, 0x8D71, 0x8D51, 0x9DF3, 0x740E, 0x21C4, 0x33E5, 0x558A, 0x554A, 0x650A, 0x566B, // 0x0130 (304) +0x43E7, 0x21C3, 0x3345, 0x2283, 0x1962, 0x3C87, 0x3386, 0x2163, 0x3345, 0x3346, 0x33A6, 0x32C6, 0x9CB3, 0x7BEF, 0xDEDB, 0xFFFF, // 0x0140 (320) +0xFFFF, 0xFFFF, 0x8430, 0xAD75, 0x8C31, 0x7C0F, 0x7BCF, 0x83F0, 0x636B, 0x0000, 0x0000, 0x4387, 0x462A, 0x4B27, 0x4B88, 0x4E8B, // 0x0150 (336) +0x42E6, 0x0000, 0x0020, 0x0100, 0x0000, 0x1121, 0x0040, 0x0000, 0x0941, 0x0000, 0x0020, 0x00E0, 0x5AAB, 0x94B2, 0x9CD3, 0xFFFF, // 0x0160 (352) +0xFFFF, 0xE71C, 0x8410, 0xB596, 0x7BEF, 0x7C6F, 0x84B0, 0x5B6B, 0x09E1, 0x0901, 0x1161, 0x3C06, 0x3D89, 0x32C5, 0x43E7, 0x470B, // 0x0170 (368) +0x4BC7, 0x0961, 0x11E2, 0x1282, 0x0961, 0x1262, 0x09E2, 0x0961, 0x12A2, 0x0961, 0x09C2, 0x0A01, 0x29E5, 0xA514, 0x7BEF, 0xFFDF, // 0x0180 (384) +0xFFFF, 0xBDD7, 0x9472, 0xA514, 0x6B4D, 0x7C6F, 0x634C, 0x0040, 0x0981, 0x0060, 0x00E0, 0x11E2, 0x10A1, 0x09C1, 0x19E3, 0x2B25, // 0x0190 (400) +0x22A3, 0x0060, 0x0120, 0x09E1, 0x0060, 0x09E1, 0x0120, 0x0060, 0x0A21, 0x0060, 0x0100, 0x01A0, 0x0040, 0x9CD3, 0x7BEF, 0xDEDB, // 0x01A0 (416) +0xFFFF, 0xA514, 0x9CF3, 0xB596, 0x73AE, 0x7C0F, 0x2945, 0x10A2, 0x2184, 0x18C3, 0x1923, 0x2184, 0x18C3, 0x21A4, 0x2964, 0x2905, // 0x01B0 (432) +0x2A25, 0x2104, 0x2965, 0x2A05, 0x2104, 0x2A05, 0x2985, 0x2104, 0x2A25, 0x2104, 0x2164, 0x29C4, 0x3166, 0xB5B6, 0x8410, 0xC618, // 0x01C0 (448) +0xFFFF, 0x9492, 0xA514, 0xDEDB, 0xC618, 0xA514, 0x8C51, 0x94B2, 0x9CB3, 0x9CF3, 0xA514, 0xA534, 0xAD75, 0xAD75, 0xB596, 0xB5D6, // 0x01D0 (464) +0xBDB7, 0xBDF7, 0xBDF7, 0xBDF7, 0xC618, 0xC5F8, 0xC5F8, 0xBDF7, 0xBDD7, 0xBDD7, 0xB5B6, 0xB596, 0xC638, 0xDEFB, 0x8430, 0xB596, // 0x01E0 (480) +0xFFFF, 0x8C51, 0x9CF3, 0xE73C, 0xDEFB, 0xD69A, 0xD6BA, 0xD6BA, 0xDEDB, 0xDEDB, 0xDEFB, 0xDF1B, 0xE71C, 0xE73C, 0xE73C, 0xE73C, // 0x01F0 (496) +0xEF5D, 0xEF5D, 0xEF5D, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xDEFB, 0xE71C, 0x8C51, 0xAD75, // 0x0200 (512) +0xFFFF, 0x8C71, 0x9CD3, 0xDEFB, 0xAD75, 0x9492, 0x9CD3, 0xA4F3, 0xA514, 0xAD55, 0xAD75, 0xB596, 0xBDB6, 0xBDD7, 0xC5F7, 0xC618, // 0x0210 (528) +0xC638, 0xCE59, 0xCE59, 0xCE79, 0xD679, 0xD679, 0xCE79, 0xCE59, 0xCE59, 0xC638, 0xC618, 0xBDF7, 0xCE79, 0xE71C, 0x8C51, 0xB596, // 0x0220 (544) +0xFFFF, 0x9CD3, 0x9492, 0xAD55, 0x2965, 0x2104, 0x2124, 0x2145, 0x1945, 0x2165, 0x2165, 0x2186, 0x2186, 0x29A6, 0x29A6, 0x31C7, // 0x0230 (560) +0x39C7, 0x31E7, 0x31E7, 0x31E7, 0x3208, 0x3208, 0x31E7, 0x31E7, 0x29E7, 0x31C7, 0x39C7, 0x31A6, 0x4A49, 0xBDF7, 0x8C51, 0xBDF7, // 0x0240 (576) +0xFFFF, 0xB5B6, 0x8430, 0x7BEF, 0x0000, 0x0000, 0x0000, 0x2000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3800, 0x2000, // 0x0250 (592) +0x0000, 0x3000, 0x3800, 0x3000, 0x3800, 0x3800, 0x3800, 0x3000, 0x3800, 0x0800, 0x0000, 0x0000, 0x0000, 0xA514, 0x8430, 0xD6BA, // 0x0260 (608) +0xFFFF, 0xDEDB, 0x7BCF, 0x8430, 0x0020, 0x0000, 0x0000, 0x8000, 0xC800, 0xC000, 0xC800, 0xC820, 0xC820, 0xC820, 0xD020, 0x9800, // 0x0270 (624) +0x0000, 0xB820, 0xD020, 0xD020, 0xD020, 0xD020, 0xD020, 0xC820, 0xD020, 0x4800, 0x0000, 0x0000, 0x2144, 0xAD75, 0x8410, 0xF7BE, // 0x0280 (640) +0xFFFF, 0xFFFF, 0x7BEF, 0x8C71, 0x2945, 0x0000, 0x0000, 0x6800, 0xA800, 0xA800, 0xA800, 0xA800, 0xA800, 0xA800, 0xB000, 0x8000, // 0x0290 (656) +0x0000, 0x9800, 0xB000, 0xB000, 0xB000, 0xB000, 0xB000, 0xB000, 0xB000, 0x4000, 0x0000, 0x0000, 0x632C, 0xA534, 0x94B2, 0xFFFF, // 0x02A0 (672) +0xFFDF, 0xFFFF, 0xAD75, 0x73AE, 0x632C, 0x0000, 0x0000, 0x6920, 0xA9E0, 0xA1C0, 0xA9E0, 0xA9E0, 0xA9E0, 0xA9E0, 0xA9E0, 0x7960, // 0x02B0 (688) +0x0000, 0x99C0, 0xB200, 0xA9E0, 0xB200, 0xB200, 0xB1E0, 0xA9E0, 0xB200, 0x40C0, 0x0000, 0x1082, 0xAD75, 0x8410, 0xD69A, 0xFFFF, // 0x02C0 (704) +0xFFFF, 0xFFFF, 0xF79E, 0x630C, 0x8C51, 0x2965, 0x0000, 0x7400, 0xB620, 0xAE00, 0xB620, 0xB640, 0xB640, 0xB620, 0xB660, 0x84A0, // 0x02D0 (720) +0x0000, 0xA5A0, 0xBE60, 0xB660, 0xBE60, 0xBE60, 0xB660, 0xB640, 0xBE80, 0x4260, 0x0000, 0x6B6D, 0xAD75, 0x8430, 0xFFFF, 0xFFFF, // 0x02E0 (736) +0xFFFF, 0xFFDF, 0xFFFF, 0xB5B6, 0x632C, 0x8410, 0x0021, 0x7360, 0xBD40, 0xB520, 0xBD40, 0xBD60, 0xBD60, 0xBD40, 0xC580, 0x8C00, // 0x02F0 (752) +0x0000, 0xACE0, 0xC580, 0xC580, 0xC580, 0xC580, 0xC580, 0xBD60, 0xC5A0, 0x39C0, 0x2126, 0xBDF7, 0x73AE, 0xD6BA, 0xFFFF, 0xFFFF, // 0x0300 (768) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x7BEF, 0x7BEF, 0x630D, 0x4AE1, 0x6D21, 0x6D01, 0x6D21, 0x6D41, 0x6D41, 0x6D41, 0x6D61, 0x53E1, // 0x0310 (784) +0x0000, 0x64C1, 0x7562, 0x6D62, 0x6D62, 0x6D62, 0x6D62, 0x6D42, 0x6D41, 0x4263, 0xA515, 0x8C51, 0xA534, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0320 (800) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79E, 0x6B4D, 0x8410, 0x636E, 0x04A6, 0x05E5, 0x05C5, 0x0585, 0x0585, 0x0586, 0x05A6, 0x0424, // 0x0330 (816) +0x0000, 0x0505, 0x05C6, 0x05A6, 0x05A6, 0x05C7, 0x0606, 0x0606, 0x1CE9, 0xA535, 0x9492, 0x8C71, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0340 (832) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7D, 0x6B4D, 0x83EF, 0x9411, 0x3A47, 0x0403, 0x0584, 0x05A4, 0x0585, 0x0585, 0x0404, // 0x0350 (848) +0x0000, 0x04E5, 0x05A5, 0x05A5, 0x05C5, 0x0584, 0x1405, 0x634B, 0xBD76, 0x8C51, 0x8C51, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0360 (864) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0x8410, 0x6B6D, 0x9CB3, 0x7C6F, 0x3CA9, 0x0BE4, 0x0443, 0x0504, 0x03C2, // 0x0370 (880) +0x0000, 0x0483, 0x0504, 0x0444, 0x1426, 0x552D, 0xA554, 0xB576, 0x73CE, 0x9CF3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0380 (896) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xB5B6, 0x6B4D, 0x7BAF, 0x9432, 0x8BD1, 0x6BCE, 0x4C6B, 0x3C09, // 0x0390 (912) +0x3186, 0x3C8A, 0x5C8C, 0x8430, 0xA493, 0xACD4, 0x8410, 0x7BEF, 0xCE79, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03A0 (928) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0xAD75, 0x7BEF, 0x73AE, 0x83F0, 0x8C11, 0x9431, // 0x03B0 (944) +0x9492, 0x9452, 0x9432, 0x8430, 0x7BEF, 0x8450, 0xBDF7, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03C0 (960) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEFB, 0xBDD7, 0xA534, 0x94D3, // 0x03D0 (976) +0x94B2, 0x9CF3, 0xA554, 0xC618, 0xE73C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03E0 (992) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03F0 (1008) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) +}; diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap/info.c b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap/info.c new file mode 100644 index 0000000..312bee1 --- /dev/null +++ b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap/info.c @@ -0,0 +1,71 @@ +// Generated by : ImageConverter 565 v1.0 +// Generated from: info.png +// Time generated: 11.10.2010 22:27:55 +// Size : 2 048 Bytes + +const unsigned short info[0x400] ={ +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0010 (16) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0020 (32) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF9F, 0xC69D, 0x95BB, 0x7D1A, 0x6CB9, // 0x0030 (48) +0x6499, 0x74F9, 0x8D7A, 0xB63C, 0xE73E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0040 (64) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xAE1C, 0x4C18, 0x2B56, 0x3397, 0x4C38, 0x64B9, 0x751A, // 0x0050 (80) +0x7D3A, 0x6CD9, 0x5458, 0x3BD7, 0x2B56, 0x3BB7, 0x855A, 0xE77E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0060 (96) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xA5FB, 0x2B56, 0x2B77, 0x751A, 0xB67C, 0xD73E, 0xE75E, 0xE77E, 0xE77E, // 0x0070 (112) +0xE77E, 0xE77E, 0xE75E, 0xDF3E, 0xC6DD, 0x8D9B, 0x43D7, 0x1B16, 0x74D9, 0xF7BF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0080 (128) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF9F, 0x4C18, 0x1AF6, 0x855A, 0xCEFE, 0xD71E, 0xCEFD, 0xC6DD, 0xC6BD, 0xC6BD, 0xBEBD, // 0x0090 (144) +0xC6BD, 0xBEBD, 0xC6BD, 0xC6DD, 0xC6DD, 0xD71E, 0xD71E, 0xA61C, 0x33B7, 0x2316, 0xBE7C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00A0 (160) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDF3E, 0x2336, 0x3BD7, 0xBE9D, 0xC6DD, 0xBE9D, 0xBE9D, 0xBE9D, 0xBEBD, 0xBE9D, 0xCEFD, 0xEF9F, // 0x00B0 (176) +0xEF9F, 0xD73E, 0xBE9D, 0xBEBD, 0xBE9D, 0xBE9D, 0xB69D, 0xC6BD, 0xCEDD, 0x6CFA, 0x0295, 0x9DBB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00C0 (192) +0xFFFF, 0xFFFF, 0xFFFF, 0xE75E, 0x1AF6, 0x4C58, 0xBEBD, 0xB67D, 0xAE5C, 0xB67D, 0xB67D, 0xB69D, 0xB67D, 0xBEBD, 0xF7DF, 0xFFFF, // 0x00D0 (208) +0xFFFF, 0xFFFF, 0xCF1E, 0xB67D, 0xB67D, 0xB67D, 0xB67D, 0xAE5C, 0xAE5C, 0xC6BD, 0x857B, 0x0295, 0xA5DB, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00E0 (224) +0xFFFF, 0xFFFF, 0xFFDF, 0x3BB7, 0x33D8, 0xB67D, 0xA63C, 0xA63C, 0xAE5C, 0xAE5D, 0xAE5D, 0xAE7D, 0xA65D, 0xC6DD, 0xFFFF, 0xFFFF, // 0x00F0 (240) +0xFFDF, 0xFFFF, 0xDF5E, 0xA65D, 0xAE7D, 0xAE5D, 0xAE5D, 0xAE5C, 0xA63C, 0xA61C, 0xB67D, 0x753A, 0x0295, 0xCEBC, 0xFFFF, 0xFFFF, // 0x0100 (256) +0xF7DF, 0xFFFF, 0x957A, 0x12F6, 0x9E1C, 0x9E1C, 0x9E1C, 0x9E1C, 0xA63C, 0xA63C, 0xA63D, 0xA63D, 0xA65D, 0x9DFC, 0xDF3E, 0xFFFF, // 0x0110 (272) +0xFFFF, 0xFFDF, 0xA61C, 0xA65D, 0xA65D, 0xA63D, 0xA63C, 0xA63C, 0x9E1C, 0x9E1C, 0x9DFC, 0xAE3C, 0x3C18, 0x3396, 0xFFDF, 0xFFFF, // 0x0120 (288) +0xFFFF, 0xF79F, 0x2336, 0x64DA, 0x9DFC, 0x95DC, 0x95FC, 0x95FC, 0x9E1C, 0x9E1C, 0x9E3D, 0x9E3D, 0x9E3D, 0x9E3D, 0x7D3B, 0xA63C, // 0x0130 (304) +0xB6BD, 0x8DBB, 0x8DFC, 0xA65D, 0x9E3D, 0x9E3D, 0x9E1C, 0x9E1C, 0x95FC, 0x95FC, 0x95DC, 0x95DC, 0x8DBB, 0x0AF6, 0xA5DA, 0xFFFF, // 0x0140 (320) +0xFFFF, 0xA5FB, 0x1337, 0x8DBB, 0x8DBB, 0x8DBC, 0x8DDC, 0x95FC, 0x95FC, 0x961C, 0x961D, 0x963D, 0x9E3D, 0x963D, 0xA67D, 0xB6BD, // 0x0150 (336) +0xB6BD, 0xAE7D, 0x9E3D, 0x9E3D, 0x961D, 0x961D, 0x961C, 0x95FC, 0x95FC, 0x8DDC, 0x8DDC, 0x859B, 0x95DC, 0x3C18, 0x4BD7, 0xFFFF, // 0x0160 (352) +0xFFFF, 0x6499, 0x33F8, 0x8DBB, 0x859B, 0x85BC, 0x85BC, 0x8DDC, 0x8DFC, 0x8DFD, 0x8E1D, 0x961D, 0x961D, 0x9E3D, 0xF7BF, 0xFFFF, // 0x0170 (368) +0xFFFF, 0xFFFF, 0xA67D, 0x8E1D, 0x961D, 0x8E1D, 0x8DFD, 0x8DFC, 0x8DDC, 0x85BC, 0x85BC, 0x859B, 0x859B, 0x5CDA, 0x2336, 0xE71C, // 0x0180 (384) +0xFFFF, 0x43F8, 0x4C79, 0x859B, 0x7D7B, 0x7D9C, 0x85BC, 0x85DC, 0x85DC, 0x8DFD, 0x8DFD, 0x8E1D, 0x8E1D, 0xA67E, 0xFFFF, 0xFFFF, // 0x0190 (400) +0xFFFF, 0xFFFF, 0xBEDE, 0x85FD, 0x8E1D, 0x8DFD, 0x8DFD, 0x85DC, 0x85DC, 0x85BC, 0x7D9C, 0x7D7B, 0x7D7B, 0x753B, 0x1B36, 0xBE5A, // 0x01A0 (416) +0xFFBE, 0x3BF8, 0x3419, 0x6D1B, 0x757B, 0x7D9C, 0x7D9C, 0x7DBC, 0x7DDD, 0x85FD, 0x85FD, 0x861D, 0x861D, 0x9E7E, 0xFFFF, 0xFFFF, // 0x01B0 (432) +0xFFFF, 0xFFFF, 0xB6DE, 0x85FD, 0x8E1D, 0x85FD, 0x85FD, 0x7DDD, 0x7DBC, 0x7D9C, 0x7D9C, 0x757B, 0x6D3B, 0x4C9A, 0x1337, 0xADD9, // 0x01C0 (448) +0xFFBE, 0x4418, 0x23B9, 0x3439, 0x4CBA, 0x653B, 0x759C, 0x7DBD, 0x7DDD, 0x7DFD, 0x861D, 0x861E, 0x861E, 0x9E7E, 0xFFFF, 0xFFFF, // 0x01D0 (464) +0xFFFF, 0xFFFF, 0xB6DE, 0x7E1E, 0x861E, 0x85FD, 0x7DFD, 0x7DDD, 0x7DBD, 0x759C, 0x653B, 0x4CDB, 0x3439, 0x2BF9, 0x1337, 0xA5B9, // 0x01E0 (480) +0xFF9E, 0x4C39, 0x2BF9, 0x345A, 0x3C7A, 0x3C9B, 0x4CFC, 0x5D5C, 0x659D, 0x75DD, 0x7DFE, 0x861E, 0x7E3E, 0x969F, 0xFFFF, 0xFFFF, // 0x01F0 (496) +0xFFFF, 0xFFFF, 0xB6FF, 0x7E1E, 0x863E, 0x7DFE, 0x75DD, 0x6D9D, 0x5D5C, 0x4CFC, 0x3C9B, 0x347A, 0x345A, 0x343A, 0x1B78, 0xA5B9, // 0x0200 (512) +0xF79E, 0x4418, 0x2C3A, 0x3C7A, 0x449B, 0x44DB, 0x4CFC, 0x4D3C, 0x555D, 0x5D7D, 0x65BE, 0x6DFE, 0x6DFF, 0x867F, 0xFFFF, 0xFFFF, // 0x0210 (528) +0xFFFF, 0xFFFF, 0xA6DF, 0x65FF, 0x6DFE, 0x65BE, 0x5D9E, 0x555D, 0x4D3C, 0x4CFC, 0x44DB, 0x44BB, 0x3C7A, 0x345A, 0x1B78, 0xA599, // 0x0220 (544) +0xFFDE, 0x43D8, 0x345A, 0x3C9A, 0x44DB, 0x4CFC, 0x4D3C, 0x555D, 0x5D9D, 0x5DBE, 0x65DE, 0x6DFF, 0x661F, 0x867F, 0xFFFF, 0xFFFF, // 0x0230 (560) +0xFFFF, 0xFFFF, 0xA6DF, 0x65FF, 0x6DFF, 0x65DE, 0x5DBE, 0x5D9D, 0x555D, 0x4D3C, 0x4CFC, 0x44DB, 0x3C7A, 0x3C9B, 0x1B57, 0xADB9, // 0x0240 (576) +0xFFFF, 0x4BD7, 0x2C1A, 0x44DB, 0x44DB, 0x4D1C, 0x555D, 0x5D7D, 0x5DBE, 0x65DE, 0x6E1F, 0x6E3F, 0x765F, 0x96BF, 0xFFFF, 0xFFFF, // 0x0250 (592) +0xFFFF, 0xFFFF, 0xAEFF, 0x6E3F, 0x763F, 0x6E1F, 0x65DE, 0x5DBE, 0x5D7D, 0x555D, 0x4D1C, 0x44DC, 0x3C9B, 0x44DC, 0x1AD5, 0xC639, // 0x0260 (608) +0xFFFF, 0x84D8, 0x1317, 0x5D7D, 0x44DB, 0x553C, 0x557D, 0x5D9E, 0x65DE, 0x65FF, 0x6E3F, 0x7E5F, 0x7E7F, 0x9EDF, 0xFFFF, 0xFFFF, // 0x0270 (624) +0xFFFF, 0xFFFF, 0xB73F, 0x7E7F, 0x7E5F, 0x6E3F, 0x65FF, 0x65DE, 0x5D9E, 0x557D, 0x553C, 0x44DC, 0x4D1C, 0x345B, 0x22B4, 0xE71B, // 0x0280 (640) +0xFFFF, 0xD6BC, 0x0234, 0x4CFC, 0x5D7D, 0x4D3C, 0x5D9D, 0x5DBE, 0x65FF, 0x6E3F, 0x765F, 0x867F, 0x8EBF, 0xA6DF, 0xFFFF, 0xFFFF, // 0x0290 (656) +0xFFFF, 0xFFFF, 0xB71F, 0x8EBF, 0x869F, 0x765F, 0x6E3F, 0x65FF, 0x5DBE, 0x5D7D, 0x553D, 0x4D1C, 0x65BE, 0x0AB7, 0x6C15, 0xFFBE, // 0x02A0 (672) +0xFFFF, 0xFFFF, 0x53B6, 0x0296, 0x75FE, 0x5D9D, 0x557D, 0x65DE, 0x6E1F, 0x763F, 0x7E7F, 0x8EBF, 0x9EFF, 0x96BE, 0xAE3C, 0xE77E, // 0x02B0 (688) +0xEF9E, 0xC69D, 0x967E, 0x9EFF, 0x8EBF, 0x7E7F, 0x763F, 0x6E1F, 0x65DE, 0x5D9E, 0x555D, 0x761E, 0x341A, 0x1294, 0xBE18, 0xFFFF, // 0x02C0 (704) +0xFFFF, 0xFFFF, 0xCE9B, 0x0A13, 0x2378, 0x7E5F, 0x6E1E, 0x5DBE, 0x6E1F, 0x7E5F, 0x869F, 0x96DF, 0x9EFF, 0xAF5F, 0x9E9E, 0x8DFC, // 0x02D0 (720) +0x8E1C, 0x967D, 0xAF3F, 0xA6FF, 0x96DF, 0x869F, 0x7E5F, 0x6E1F, 0x5DBE, 0x65DE, 0x7E5F, 0x4CBB, 0x0AB5, 0x7454, 0xEF5C, 0xFFFF, // 0x02E0 (736) +0xFFFF, 0xFFFF, 0xFFFF, 0x8D17, 0x01D3, 0x23B9, 0x7E3E, 0x8E9F, 0x763F, 0x765F, 0x8E9F, 0x9EDF, 0xA71F, 0xB75F, 0xC7BF, 0xCFDF, // 0x02F0 (752) +0xCFDF, 0xC7BF, 0xB75F, 0xA71F, 0x9EDF, 0x8E9F, 0x765F, 0x6E1F, 0x867F, 0x8E7F, 0x4CBB, 0x1317, 0x4BB4, 0xD679, 0xFFFF, 0xFFFF, // 0x0300 (768) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFBD, 0x7476, 0x0214, 0x1B78, 0x659D, 0x9EDF, 0x9EFF, 0x96DF, 0x9EFF, 0xAF1F, 0xB75F, 0xC79F, 0xD7DF, // 0x0310 (784) +0xD7DF, 0xC79F, 0xB75F, 0xAF1F, 0x9EDF, 0x96DF, 0x96DF, 0x9EFF, 0x7E1E, 0x3C5A, 0x1B77, 0x43B5, 0xBDD6, 0xF7BE, 0xFFFF, 0xFFFF, // 0x0320 (800) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF77D, 0x7CB6, 0x12B4, 0x1337, 0x449B, 0x7DFD, 0xA6FF, 0xB75F, 0xBF7F, 0xC79F, 0xCFBF, 0xD7FF, // 0x0330 (816) +0xD7FF, 0xCFBF, 0xC79F, 0xBF7F, 0xB77F, 0xAF1F, 0x8E5E, 0x551B, 0x3419, 0x2BD7, 0x5415, 0xB5B6, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0340 (832) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79D, 0xA577, 0x3B75, 0x1B36, 0x2BD9, 0x4CBB, 0x759D, 0x965E, 0xAEDF, 0xBF3F, 0xC77F, // 0x0350 (848) +0xC77F, 0xBF3F, 0xB6FF, 0x9E7F, 0x7DDD, 0x5D1C, 0x447A, 0x3C59, 0x4437, 0x7474, 0xC617, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0360 (864) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDE, 0xD699, 0x84D5, 0x43D5, 0x33B7, 0x3418, 0x4C7A, 0x5CFC, 0x753D, 0x857E, // 0x0370 (880) +0x859E, 0x755D, 0x653C, 0x5CFB, 0x4CDA, 0x4CB9, 0x5497, 0x6C95, 0xA555, 0xDEDA, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0380 (896) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79D, 0xCE79, 0x9D56, 0x7495, 0x5C56, 0x4C77, 0x4C97, 0x4CB8, // 0x0390 (912) +0x54D8, 0x5CD8, 0x5CF8, 0x64D7, 0x74D6, 0x8CF5, 0xAD96, 0xD699, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03A0 (928) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFBE, 0xEF1B, 0xD679, 0xBDF7, 0xAD96, 0xA576, // 0x03B0 (944) +0xA576, 0xAD76, 0xB5B6, 0xC5F7, 0xD679, 0xEF3C, 0xFFDE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03C0 (960) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFBE, // 0x03D0 (976) +0xF7BE, 0xF7BE, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03E0 (992) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03F0 (1008) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) +}; diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap/tux.c b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap/tux.c new file mode 100644 index 0000000..69a04a1 --- /dev/null +++ b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap/tux.c @@ -0,0 +1,71 @@ +// Generated by : ImageConverter 565 v1.0 +// Generated from: tux.png +// Time generated: 11.10.2010 22:51:32 +// Size : 2 048 Bytes + +const unsigned short tux[0x400] ={ +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE73C, 0x9CD3, 0x9CF3, 0xA514, // 0x0010 (16) +0x9CF3, 0x8C51, 0xAD75, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0020 (32) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7D, 0x5AEB, 0x7BEF, 0x9CD3, 0x94B2, // 0x0030 (48) +0x94B2, 0x94B2, 0x4228, 0x7BEF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0040 (64) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x9CF3, 0x18E3, 0x630C, 0x4A49, 0x4A69, // 0x0050 (80) +0x4A69, 0x528A, 0x4A49, 0x0000, 0xC638, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0060 (96) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x6B6D, 0x0000, 0x0020, 0x10A2, 0x1082, // 0x0070 (112) +0x0841, 0x0841, 0x0841, 0x0000, 0x630C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0080 (128) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x528A, 0x4228, 0x8410, 0x0000, 0x0861, // 0x0090 (144) +0xAD55, 0xBDD7, 0x10A2, 0x0000, 0x2945, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00A0 (160) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x5ACB, 0x8C71, 0xE75D, 0x2126, 0x528B, // 0x00B0 (176) +0xE75D, 0xDEDB, 0x7BCF, 0x0000, 0x18E3, 0xE73C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00C0 (192) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x6B6D, 0x4A4A, 0x6B2A, 0x8BE7, 0xA48A, // 0x00D0 (208) +0x6B09, 0x4A8A, 0x8431, 0x0000, 0x2104, 0xE73C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00E0 (224) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x6B6E, 0x5204, 0xDE6A, 0xFFF7, 0xFFF8, // 0x00F0 (240) +0xD5AC, 0xBCAA, 0x5A66, 0x0000, 0x1082, 0xDEFB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0100 (256) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x8C10, 0xC540, 0xFFED, 0xFF2C, 0xFEEC, // 0x0110 (272) +0xFECC, 0xFE66, 0x8260, 0x0000, 0x0000, 0xB596, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0120 (288) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x94B3, 0x9C25, 0xFF20, 0xFE40, 0xFDA0, // 0x0130 (304) +0xFCC0, 0xF524, 0x836A, 0x0000, 0x0000, 0x630C, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0140 (320) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x630C, 0x94B4, 0xFF13, 0xFD83, 0xF523, // 0x0150 (336) +0xE5CF, 0xF79E, 0xE71D, 0x0861, 0x0000, 0x0861, 0xDEDB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0160 (352) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xCE59, 0x0841, 0xD69A, 0xFFFF, 0xFF7D, 0xF77D, // 0x0170 (368) +0xFFFF, 0xFFFF, 0xFFFF, 0x73AE, 0x0000, 0x0000, 0x4A69, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0180 (384) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79E, 0x10A2, 0x8410, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, // 0x0190 (400) +0xFFFF, 0xFFDF, 0xFFFF, 0xCE59, 0x0000, 0x0000, 0x0000, 0x9492, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01A0 (416) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x52AA, 0x0020, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01B0 (432) +0xFFDF, 0xFFDF, 0xF7BE, 0xFFDF, 0x3186, 0x0000, 0x0020, 0x0841, 0xCE79, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01C0 (448) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xC638, 0x0000, 0x52AA, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFDF, // 0x01D0 (464) +0xFFDF, 0xF7BE, 0xF79E, 0xFFFF, 0x9CF3, 0x0000, 0x0841, 0x0000, 0x39E7, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01E0 (480) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x5ACB, 0x0000, 0xBDF7, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFDF, 0xFFDF, // 0x01F0 (496) +0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0x3186, 0x0000, 0x0861, 0x0000, 0xAD55, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0200 (512) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE73C, 0x0861, 0x4A49, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, // 0x0210 (528) +0xF7BE, 0xF79E, 0xEF7D, 0xEF5D, 0xFFDF, 0x8410, 0x0000, 0x1082, 0x0000, 0x39E7, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0220 (544) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x94B2, 0x0000, 0xB596, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, // 0x0230 (560) +0xF79E, 0xEF7D, 0xEF7D, 0xE73C, 0xF79E, 0xAD55, 0x0861, 0x10A2, 0x0861, 0x0841, 0xCE59, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0240 (576) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79E, 0x3185, 0x10A2, 0xE71C, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF79E, // 0x0250 (592) +0xEF7D, 0xEF7D, 0xEF5D, 0xE73C, 0xEF5D, 0xBDF7, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x8C71, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0260 (608) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x94B2, 0x0000, 0x39E7, 0xF7BE, 0xFFFF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF79E, 0xEF7D, // 0x0270 (624) +0xEF7D, 0xEF5D, 0xE73C, 0xE71C, 0xE71C, 0xC618, 0x18E3, 0x10A2, 0x10A2, 0x0020, 0x6B4D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0280 (640) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x8C51, 0x38E0, 0x4A27, 0xFFFF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF79E, 0xEF7D, 0xEF7D, // 0x0290 (656) +0xEF5D, 0xE73C, 0xE71C, 0xDEFB, 0xDF1D, 0xBDF8, 0x39C7, 0x5ACB, 0x528A, 0x10A3, 0x738F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02A0 (672) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDD6C, 0xFE2B, 0xBC45, 0xA513, 0xFFFF, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF5D, // 0x02B0 (688) +0xE73C, 0xE71C, 0xDEFB, 0xD6DC, 0xDD8E, 0xB3E4, 0x2124, 0x2965, 0x2945, 0x20C1, 0xB511, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02C0 (704) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF77C, 0xE5CF, 0xF60B, 0xFF9B, 0xFF54, 0x8B02, 0x7BF0, 0xFFDF, 0xF79E, 0xEF5D, 0xEF5D, 0xE73C, // 0x02D0 (720) +0xE71C, 0xDEFB, 0xDEDB, 0xCE7A, 0xED89, 0xDDAD, 0x0842, 0x0000, 0x0000, 0xAC69, 0xDD6B, 0xEFBF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02E0 (736) +0xFFFF, 0xFFFF, 0xFFBE, 0xE5CB, 0xEDC9, 0xFE4B, 0xFF14, 0xFEF3, 0xFF35, 0xFE8D, 0x51C1, 0x634E, 0xE73C, 0xEF5D, 0xE73C, 0xE71C, // 0x02F0 (752) +0xDEFB, 0xDEDB, 0xD6DB, 0xCE59, 0xE58B, 0xFF98, 0xBD4F, 0x8B88, 0xCD90, 0xFFB7, 0xCCE8, 0xE73D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0300 (768) +0xFFFF, 0xFFFF, 0xEF3B, 0xF583, 0xFF30, 0xFF11, 0xFECF, 0xFEEF, 0xFECF, 0xFF30, 0xDD46, 0x2903, 0x6B8E, 0xEF7D, 0xE71C, 0xDEFB, // 0x0310 (784) +0xDEDB, 0xD6BA, 0xD69A, 0xCE59, 0xE5AA, 0xFF11, 0xFF53, 0xFF73, 0xFF33, 0xFF12, 0xFE6C, 0xDDAD, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0320 (800) +0xFFFF, 0xFFFF, 0xF79E, 0xEDC5, 0xFECB, 0xFECC, 0xFECC, 0xFEEC, 0xFECB, 0xFECC, 0xFEEA, 0x9BE5, 0x8432, 0xE73C, 0xDEDB, 0xDEDB, // 0x0330 (816) +0xD6BA, 0xD69A, 0xDEDB, 0xA4F3, 0xD547, 0xFF2E, 0xFECD, 0xFECE, 0xFEEE, 0xFEEE, 0xFF10, 0xFEAB, 0xE5A8, 0xEF7D, 0xFFFF, 0xFFFF, // 0x0340 (832) +0xFFFF, 0xFFFF, 0xF79E, 0xF603, 0xFEA2, 0xFEC7, 0xFEC7, 0xFEA4, 0xFE81, 0xFE61, 0xFEA4, 0xFE43, 0xDE33, 0xE75E, 0xE71C, 0xDEFB, // 0x0350 (848) +0xDEDB, 0xCE58, 0x8C72, 0x5247, 0xEDE4, 0xFF0A, 0xFECA, 0xFEC9, 0xFE84, 0xFE83, 0xFEE7, 0xFEA3, 0xB443, 0xD69B, 0xFFFF, 0xFFFF, // 0x0360 (864) +0xFFFF, 0xFFFF, 0xF75B, 0xFE60, 0xFF00, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEE0, 0xE5C1, 0x9492, 0xA514, 0x9CD3, // 0x0370 (880) +0x8410, 0x630B, 0x4229, 0x6AE8, 0xFE80, 0xFEC1, 0xFEC1, 0xFEA0, 0xFEA0, 0xFEE0, 0xDD80, 0x9BE8, 0xB597, 0xFFDF, 0xFFFF, 0xFFFF, // 0x0380 (896) +0xFFFF, 0xFFFF, 0xF79E, 0xD589, 0xE600, 0xFEA0, 0xFF00, 0xFF40, 0xFF40, 0xFF00, 0xFF00, 0xFF20, 0xFEC0, 0x5267, 0x4229, 0x4A48, // 0x0390 (912) +0x4A49, 0x5289, 0x424A, 0x7B46, 0xFF20, 0xFEE0, 0xFEE0, 0xFF20, 0xFEE0, 0xB4A5, 0x9C92, 0xDEFD, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03A0 (928) +0xFFFF, 0xFFFF, 0xFFFF, 0xE71D, 0xBDB6, 0xB530, 0xBD0B, 0xCD65, 0xEE60, 0xFF40, 0xFFA0, 0xFF80, 0xBD03, 0x8410, 0xA514, 0xA534, // 0x03B0 (944) +0xAD75, 0xB596, 0xA555, 0x9C8F, 0xF6C0, 0xFFA0, 0xFFA0, 0xF6E0, 0xA449, 0xB5B8, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03C0 (960) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7F, 0xD69C, 0xBD95, 0xBD4C, 0xCDC6, 0xB4E8, 0xAD35, 0xF7BF, 0xFFFF, 0xFFFF, // 0x03D0 (976) +0xFFFF, 0xFFFF, 0xFFFF, 0xF7BF, 0xCDD0, 0xCDC6, 0xCDA7, 0xA48D, 0xCE7B, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03E0 (992) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDF1F, 0xB59A, 0xBDDA, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, // 0x03F0 (1008) +0xFFFF, 0xFFDF, 0xFFDF, 0xFFFF, 0xEF7F, 0xB59A, 0xAD59, 0xDF1D, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) +}; diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap_128x128/UTFT_Bitmap_128x128.ino b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap_128x128/UTFT_Bitmap_128x128.ino new file mode 100644 index 0000000..3cc269e --- /dev/null +++ b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap_128x128/UTFT_Bitmap_128x128.ino @@ -0,0 +1,49 @@ +// UTFT_Bitmap_128x128 (C)2013 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of the drawBitmap()-function. +// +// This demo was made to work on the 128x128 modules. +// Any other size displays may cause strange behaviour. +// +// This program requires the UTFT library. +// + +#include + +UTFT myGLCD(LPH9135,6,5,2,3,4); // Remember to change the model parameter to suit your display module! + +extern unsigned short icon1[0x400]; +extern unsigned short icon2[0x400]; +extern unsigned short tux[0x1000]; + +void setup() +{ + myGLCD.InitLCD(PORTRAIT); +} + +void loop() +{ +// Draw a 4 by 4 grid of a 32x32 icon. + myGLCD.fillScr(255, 255, 255); + for (int x=0; x<4; x++) + for (int y=0; y<4; y++) + myGLCD.drawBitmap (x*32, y*32, 32, 32, icon1); + + delay(5000); + +// Draw a 64x64 icon in double size. + myGLCD.fillScr(255, 255, 255); + myGLCD.drawBitmap (0, 0, 64, 64, tux, 2); + + delay(5000); + +// Draw a 2 by 2 grid of a 32x32 icon in double size. + myGLCD.fillScr(255, 255, 255); + for (int x=0; x<2; x++) + for (int y=0; y<2; y++) + myGLCD.drawBitmap (x*64, y*64, 32, 32, icon2, 2); + + delay(5000); +} + diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap_128x128/icon1.c b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap_128x128/icon1.c new file mode 100644 index 0000000..b9c2c97 --- /dev/null +++ b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap_128x128/icon1.c @@ -0,0 +1,72 @@ +// Generated by : ImageConverter 565 v1.0 +// Generated from: exit.png +// Time generated: 14.10.2010 21:53:03 +// Dimensions : 32x32 pixels +// Size : 2 048 Bytes + +const unsigned short icon1[0x400] ={ +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF1C, 0xE618, 0xE638, 0xE638, 0xE638, 0xE659, 0xE659, 0xE659, 0xE659, 0xE659, 0xE679, 0xE679, // 0x0010 (16) +0xE679, 0xE679, 0xE679, 0xE679, 0xEE79, 0xEE9A, 0xEE9A, 0xEE9A, 0xEE9A, 0xEE9A, 0xE638, 0xEEBA, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0020 (32) +0xFFFF, 0xFFFF, 0xFFFF, 0xD555, 0xCCD3, 0xDDB6, 0xDDD7, 0xDDF7, 0xDDF7, 0xDE18, 0xE618, 0xE638, 0xE638, 0xE659, 0xE679, 0xE679, // 0x0030 (48) +0xEE9A, 0xEE9A, 0xEEBA, 0xEEBA, 0xEEBA, 0xEEDB, 0xEEDB, 0xEEFB, 0xEEFB, 0xEEFB, 0xEEFB, 0xE659, 0xD575, 0xF77D, 0xFFFF, 0xFFFF, // 0x0040 (64) +0xFFDF, 0xFFFF, 0xD534, 0xC471, 0xD575, 0xCCF3, 0xCCD3, 0xCCD3, 0xCCF3, 0xCCF3, 0xD4F3, 0xD514, 0xD514, 0xD514, 0xD534, 0xDD55, // 0x0050 (80) +0xDD55, 0xDD55, 0xDD55, 0xDD75, 0xDD75, 0xDD75, 0xDD96, 0xDD96, 0xDD96, 0xDDB6, 0xDDD7, 0xEE79, 0xEEBA, 0xD534, 0xFFBE, 0xFFFF, // 0x0060 (96) +0xFFFF, 0xEEDB, 0xB38E, 0xC4B2, 0xBC30, 0xC451, 0xC471, 0xC471, 0xCC71, 0xCC92, 0xCC92, 0xCC92, 0xCCB2, 0xD4B2, 0xD4B2, 0xCC71, // 0x0070 (112) +0xCC71, 0xD4D3, 0xD4F3, 0xDCF3, 0xDCF3, 0xDD14, 0xDD14, 0xDD14, 0xDD34, 0xDD34, 0xDD34, 0xDD14, 0xE5D7, 0xDD96, 0xDDF7, 0xFFFF, // 0x0080 (128) +0xFFFF, 0xC4F3, 0xAB2C, 0xC430, 0xC410, 0xC430, 0xC430, 0xC430, 0xCC51, 0xCC51, 0xCC51, 0xCC71, 0xCC71, 0xD471, 0xCC71, 0xD5F7, // 0x0090 (144) +0xD5F7, 0xCC92, 0xDCB2, 0xDCD3, 0xDCD3, 0xDCD3, 0xDCD3, 0xDCF3, 0xDCF3, 0xDD14, 0xDD14, 0xDD34, 0xDD14, 0xDD34, 0xC492, 0xFFFF, // 0x00A0 (160) +0xFFFF, 0xB3EF, 0x9A28, 0xC430, 0xBBCF, 0xC3EF, 0xC3EF, 0xC3EF, 0xC410, 0xCC10, 0xCC10, 0xCC30, 0xCC51, 0xCBEF, 0xE638, 0xFFFF, // 0x00B0 (176) +0xFFFF, 0xE659, 0xD430, 0xDC92, 0xDC92, 0xDC92, 0xDCB2, 0xDCB2, 0xDCB2, 0xDCD3, 0xDCD3, 0xDCD3, 0xE514, 0xD410, 0xAB0C, 0xF7FF, // 0x00C0 (192) +0xFFFF, 0xABCF, 0x9165, 0xC3EF, 0xBB8E, 0xBBAE, 0xC3AE, 0xC3CF, 0xC3CF, 0xCBCF, 0xCBEF, 0xCC10, 0xCC10, 0xCBAE, 0xEE9A, 0xFFFF, // 0x00D0 (208) +0xFFFF, 0xF6DB, 0xD410, 0xDC71, 0xDC71, 0xDC71, 0xDC71, 0xDC71, 0xDC71, 0xE492, 0xE492, 0xE492, 0xE4F3, 0xCB2C, 0xA249, 0xF7FF, // 0x00E0 (224) +0xFFFF, 0xABCF, 0x88C3, 0xC3AE, 0xBB4D, 0xBB6D, 0xC36D, 0xC38E, 0xC38E, 0xCBAE, 0xC36D, 0xC34D, 0xCBCF, 0xCB8E, 0xEE59, 0xFFFF, // 0x00F0 (240) +0xFFFF, 0xF6BA, 0xDBCF, 0xD3CF, 0xCBAE, 0xD3CF, 0xE430, 0xE430, 0xE451, 0xE451, 0xE451, 0xE451, 0xECD3, 0xCAAA, 0xA208, 0xF7FF, // 0x0100 (256) +0xFFFF, 0xABCF, 0x8061, 0xBB6D, 0xBB2C, 0xBB2C, 0xC34D, 0xC34D, 0xCB4D, 0xBB0C, 0xC492, 0xCD14, 0xC38E, 0xCB2C, 0xEE59, 0xFFFF, // 0x0110 (272) +0xFFFF, 0xF6BA, 0xD36D, 0xD575, 0xE6DB, 0xDDB6, 0xD3AE, 0xE3EF, 0xE410, 0xE410, 0xE430, 0xE410, 0xECB2, 0xC986, 0xA208, 0xF7FF, // 0x0120 (288) +0xFFFF, 0xB3EF, 0x8041, 0xBB0C, 0xBAEB, 0xBAEB, 0xC30C, 0xC30C, 0xBACB, 0xD5B6, 0xFFFF, 0xFFFF, 0xEE79, 0xCACB, 0xEE59, 0xFFFF, // 0x0130 (304) +0xFFFF, 0xF679, 0xDBEF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEEBA, 0xD3CF, 0xE3AE, 0xE3EF, 0xE3CF, 0xEC10, 0xEB6D, 0xC000, 0xA249, 0xF7FF, // 0x0140 (320) +0xFFFF, 0xB3EF, 0x8020, 0xBACB, 0xBAAA, 0xBAAA, 0xC2EB, 0xBA8A, 0xD596, 0xFFFF, 0xFFDF, 0xFFFF, 0xF73C, 0xCAAA, 0xEE38, 0xFFFF, // 0x0150 (336) +0xFFFF, 0xF679, 0xDB4D, 0xFF7D, 0xFFFF, 0xFFDF, 0xFFFF, 0xEEDB, 0xDB6D, 0xEB8E, 0xEBAE, 0xEB8E, 0xE0A2, 0xC800, 0xAA49, 0xF7FF, // 0x0160 (352) +0xFFFF, 0xB3EF, 0x8000, 0xB28A, 0xBA69, 0xBA8A, 0xBA49, 0xCC30, 0xFFFF, 0xFFDF, 0xFFFF, 0xFF5D, 0xDBCF, 0xCA69, 0xEE18, 0xFFFF, // 0x0170 (368) +0xFFFF, 0xF679, 0xDAAA, 0xE3AE, 0xF6BA, 0xFFFF, 0xFFDF, 0xFFFF, 0xE5D7, 0xE30C, 0xEB8E, 0xE0E3, 0xE000, 0xC800, 0xAA49, 0xF7FF, // 0x0180 (384) +0xFFFF, 0xB3EF, 0x8800, 0xB249, 0xBA49, 0xBA49, 0xBA49, 0xEF1C, 0xFFFF, 0xFFFF, 0xFF7D, 0xD32C, 0xCA69, 0xD249, 0xEDF7, 0xFFFF, // 0x0190 (400) +0xFFFF, 0xF659, 0xDAAA, 0xE2CB, 0xE2EB, 0xFEBA, 0xFFFF, 0xFFDF, 0xFFDF, 0xE3CF, 0xE103, 0xE000, 0xE081, 0xD000, 0xAA69, 0xF7FF, // 0x01A0 (416) +0xFFFF, 0xB3EF, 0x8800, 0xB228, 0xBA08, 0xB9A6, 0xCBAE, 0xFFFF, 0xFFDF, 0xFFFF, 0xDC30, 0xC9E7, 0xD28A, 0xCA08, 0xF618, 0xFFFF, // 0x01B0 (432) +0xFFFF, 0xF679, 0xDA49, 0xE2CB, 0xE28A, 0xEB6D, 0xFFBE, 0xFFDF, 0xFFFF, 0xEC92, 0xE000, 0xE0A2, 0xE0C2, 0xD040, 0xAA89, 0xF7FF, // 0x01C0 (448) +0xFFFF, 0xB3EF, 0x8800, 0xB1E7, 0xB9E7, 0xB165, 0xDD55, 0xFFFF, 0xFFFF, 0xF71C, 0xCA08, 0xCA08, 0xD228, 0xD1E7, 0xE430, 0xFFDF, // 0x01D0 (464) +0xFFDF, 0xEC51, 0xDA08, 0xE28A, 0xE28A, 0xE228, 0xF618, 0xFFFF, 0xFFFF, 0xF679, 0xE081, 0xE0C2, 0xE903, 0xD081, 0xAA89, 0xF7FF, // 0x01E0 (480) +0xFFFF, 0xBBEF, 0x9000, 0xB1A6, 0xB986, 0xB145, 0xEE38, 0xFFFF, 0xFFFF, 0xED96, 0xC165, 0xC9E7, 0xD1E7, 0xD1E7, 0xD1C7, 0xDACB, // 0x01F0 (496) +0xE2EB, 0xD9E7, 0xE228, 0xE228, 0xEA69, 0xE9E7, 0xF40F, 0xFFFF, 0xFFFF, 0xFF5D, 0xE144, 0xE8E2, 0xE943, 0xD8C1, 0xAA8A, 0xF7FF, // 0x0200 (512) +0xFFFF, 0xBC10, 0x9000, 0xB165, 0xB145, 0xB924, 0xEE9A, 0xFFFF, 0xFFFF, 0xE514, 0xC124, 0xC9A6, 0xD1A6, 0xD1A6, 0xD1C7, 0xD9A6, // 0x0210 (528) +0xD9A6, 0xE1E7, 0xE208, 0xE208, 0xE9A6, 0xE041, 0xEA8A, 0xFFFF, 0xFFFF, 0xFF9E, 0xE9C6, 0xE902, 0xE984, 0xD902, 0xAAAA, 0xF7FF, // 0x0220 (544) +0xFFFF, 0xC410, 0x9000, 0xB124, 0xB124, 0xB0C3, 0xEE18, 0xFFFF, 0xFFFF, 0xE575, 0xC0E3, 0xC986, 0xD165, 0xD165, 0xD986, 0xD9A6, // 0x0230 (560) +0xD9A6, 0xE1A6, 0xE165, 0xE082, 0xE020, 0xE000, 0xEB4C, 0xFFFF, 0xFFFF, 0xFF7D, 0xE9A5, 0xE943, 0xE9A5, 0xD923, 0xAAAA, 0xF7FF, // 0x0240 (576) +0xFFFF, 0xC410, 0x9800, 0xB0E3, 0xB0E3, 0xB061, 0xE4F3, 0xFFFF, 0xFFFF, 0xF6FB, 0xC104, 0xC924, 0xD145, 0xD145, 0xD945, 0xD945, // 0x0250 (592) +0xD8E3, 0xD861, 0xD800, 0xE000, 0xE061, 0xE000, 0xED34, 0xFFFF, 0xFFFF, 0xFE9A, 0xE923, 0xE984, 0xE9C5, 0xE163, 0xAAAA, 0xF7FF, // 0x0260 (608) +0xFFFF, 0xC410, 0xA000, 0xB0A2, 0xB0A2, 0xB041, 0xCACB, 0xFFFF, 0xFFDF, 0xFFFF, 0xD34D, 0xC841, 0xD104, 0xD0A2, 0xD061, 0xD000, // 0x0270 (624) +0xD800, 0xD800, 0xE000, 0xE041, 0xE000, 0xD965, 0xFF9E, 0xFFDF, 0xFFFF, 0xF4D2, 0xE8E2, 0xE9A5, 0xE9E5, 0xE183, 0xAAAA, 0xF7FF, // 0x0280 (640) +0xFFFF, 0xCC10, 0xA000, 0xA861, 0xB061, 0xB061, 0xB882, 0xF6DB, 0xFFFF, 0xFFDF, 0xF75D, 0xC124, 0xC800, 0xD000, 0xD000, 0xD800, // 0x0290 (656) +0xD800, 0xE000, 0xE020, 0xE000, 0xD861, 0xF638, 0xFFFF, 0xFFDF, 0xFFDF, 0xEA68, 0xE943, 0xE9C5, 0xEA06, 0xE1A4, 0xB2CA, 0xF7FF, // 0x02A0 (672) +0xFFFF, 0xCC10, 0xA000, 0xA820, 0xB000, 0xB000, 0xB000, 0xCA49, 0xFFFF, 0xFFDF, 0xFFFF, 0xF71C, 0xCA08, 0xC800, 0xD000, 0xD800, // 0x02B0 (688) +0xD800, 0xD800, 0xD800, 0xD944, 0xEE18, 0xFFFF, 0xFFBE, 0xFFFF, 0xF4F2, 0xE902, 0xE9A5, 0xE9C5, 0xEA06, 0xE9A4, 0xB2CA, 0xF7FF, // 0x02C0 (704) +0xFFFF, 0xD410, 0xA800, 0xA800, 0xB000, 0xB000, 0xB800, 0xB800, 0xDC10, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xED96, 0xDAEB, 0xD1A6, // 0x02D0 (720) +0xD965, 0xDA69, 0xECD3, 0xFF9E, 0xFFFF, 0xFFBE, 0xFFFF, 0xFE17, 0xE923, 0xE964, 0xE9A5, 0xE9C5, 0xEA26, 0xE9C4, 0xBACA, 0xF7FF, // 0x02E0 (736) +0xF7FF, 0xD410, 0xA800, 0xA800, 0xB000, 0xB000, 0xB800, 0xB800, 0xB800, 0xE3EF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02F0 (752) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF5B6, 0xE923, 0xE923, 0xE984, 0xE9A5, 0xE9E5, 0xEA26, 0xE9C5, 0xBACA, 0xF7FF, // 0x0300 (768) +0xF7FF, 0xDC10, 0xB000, 0xA800, 0xB000, 0xB000, 0xB800, 0xB800, 0xC000, 0xC000, 0xD228, 0xF638, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0310 (784) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFEFB, 0xF3AE, 0xE0C1, 0xE903, 0xE964, 0xE984, 0xE9A5, 0xE9E5, 0xEA26, 0xE9E5, 0xC2CA, 0xF7DF, // 0x0320 (800) +0xF7FF, 0xDC51, 0xB800, 0xA800, 0xB000, 0xB000, 0xB800, 0xB800, 0xC000, 0xC000, 0xC000, 0xC800, 0xD9E7, 0xEC30, 0xF5D7, 0xFE9A, // 0x0330 (816) +0xFEBA, 0xF618, 0xF4D3, 0xEACB, 0xE0E2, 0xE040, 0xE903, 0xE943, 0xE943, 0xE984, 0xE9A5, 0xE9E5, 0xEA26, 0xEA05, 0xC30C, 0xF7DF, // 0x0340 (832) +0xFFFF, 0xD575, 0xD104, 0xA820, 0xB000, 0xB800, 0xB800, 0xC000, 0xC000, 0xC000, 0xC820, 0xC800, 0xD000, 0xD000, 0xD800, 0xD800, // 0x0350 (848) +0xE000, 0xE000, 0xE000, 0xE000, 0xE0A1, 0xE0E3, 0xE903, 0xE943, 0xE964, 0xE984, 0xE9C5, 0xE9C5, 0xF226, 0xE227, 0xBC10, 0xF7FF, // 0x0360 (864) +0xFFFF, 0xDF3C, 0xCAAA, 0xD186, 0xB082, 0xB000, 0xB800, 0xB800, 0xB800, 0xC000, 0xC000, 0xC800, 0xC800, 0xD000, 0xD000, 0xD800, // 0x0370 (880) +0xD800, 0xE000, 0xE020, 0xE040, 0xE061, 0xE0A1, 0xE0C2, 0xE102, 0xE123, 0xE943, 0xE984, 0xEA26, 0xFB0A, 0xBA08, 0xCE38, 0xFFFF, // 0x0380 (896) +0xFFFF, 0xFFDF, 0xBDD7, 0xCA69, 0xE248, 0xD207, 0xD1C6, 0xD1C6, 0xD9C7, 0xD9C7, 0xE1C7, 0xE1C7, 0xE1C7, 0xE9C7, 0xE9C7, 0xE9C7, // 0x0390 (912) +0xF1C6, 0xF1C7, 0xF1E7, 0xF207, 0xF228, 0xF248, 0xF269, 0xF289, 0xF2A9, 0xF2CA, 0xFB0A, 0xF2EA, 0xC207, 0xACB3, 0xF7BE, 0xFFFF, // 0x03A0 (928) +0xFFFF, 0xFFFF, 0xF7BE, 0xBDF7, 0xAB8E, 0xC2EB, 0xC2EB, 0xC30B, 0xC30B, 0xC30B, 0xC30B, 0xC30B, 0xC30B, 0xC30B, 0xCB0B, 0xCAEB, // 0x03B0 (944) +0xCAEB, 0xCACA, 0xCACA, 0xCAAA, 0xCAAA, 0xCA8A, 0xCA69, 0xC269, 0xC269, 0xC289, 0xBA69, 0xA2CB, 0xAD34, 0xEF7D, 0xFFFF, 0xFFFF, // 0x03C0 (960) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xDF3C, 0xBE39, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, // 0x03D0 (976) +0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xBE38, 0xD71C, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03E0 (992) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03F0 (1008) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) +}; diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap_128x128/icon2.c b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap_128x128/icon2.c new file mode 100644 index 0000000..9b843cc --- /dev/null +++ b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap_128x128/icon2.c @@ -0,0 +1,72 @@ +// Generated by : ImageConverter 565 v1.0 +// Generated from: video.png +// Time generated: 14.10.2010 21:53:17 +// Dimensions : 32x32 pixels +// Size : 2 048 Bytes + +const unsigned short icon2[0x400] ={ +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0010 (16) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0020 (32) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE71C, 0xB5B6, 0x94B2, 0x8C71, // 0x0030 (48) +0x9492, 0xA534, 0xD6BA, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0040 (64) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF5D, 0x9CF3, 0x73AE, 0x6B6D, 0x73AE, 0x7BCF, // 0x0050 (80) +0x7BEF, 0x7BCF, 0x7BEF, 0xA534, 0xEF7D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0060 (96) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xC638, 0x7BCF, 0x6B6D, 0x738E, 0x7BCF, 0x8C71, 0x9492, // 0x0070 (112) +0x9492, 0x9492, 0x9492, 0x8C51, 0x8C71, 0xDEDB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0080 (128) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xB596, 0x738E, 0x738E, 0x73AE, 0x6B4D, 0x8410, 0x9CF3, 0x9CF3, // 0x0090 (144) +0x9CF3, 0x9CF3, 0x9CF3, 0x9CF3, 0x94B2, 0x7BEF, 0xDEDB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00A0 (160) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xB596, 0x738E, 0x7BEF, 0x8410, 0x632C, 0x4A69, 0x9492, 0xAD75, 0xAD55, // 0x00B0 (176) +0xAD55, 0xAD55, 0xAD55, 0xA534, 0xAD55, 0x9492, 0x8430, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00C0 (192) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xBDF7, 0x7BCF, 0x8430, 0x7BCF, 0x6B4D, 0x528A, 0x6B6D, 0xB5B6, 0xB5B6, 0xB5B6, // 0x00D0 (208) +0xB5B6, 0xB596, 0xB596, 0xAD75, 0xAD75, 0xAD55, 0x8410, 0xB5B6, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00E0 (224) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEDB, 0x7BEF, 0x9CD3, 0xA514, 0x5AEB, 0x630C, 0x6B4D, 0x9492, 0xC638, 0xC618, 0xC618, // 0x00F0 (240) +0xBDF7, 0xBDF7, 0xC618, 0xB5B6, 0xB5B6, 0xB596, 0x9492, 0x8C51, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0100 (256) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0x8C71, 0x94B2, 0xAD55, 0xB5B6, 0x738E, 0x6B4D, 0x632C, 0xB596, 0xD69A, 0xCE59, 0xCE59, // 0x0110 (272) +0xCE79, 0xCE59, 0x6B6D, 0x9492, 0xB5B6, 0xBDF7, 0x9CF3, 0x8430, 0xD69A, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0120 (288) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xB5B6, 0x8C51, 0xAD55, 0xB5B6, 0xCE79, 0x8C51, 0x630C, 0x8C51, 0xCE79, 0xD6BA, 0xD69A, 0xDEDB, // 0x0130 (304) +0xBDD7, 0x8C51, 0x4228, 0x2965, 0xAD55, 0xC638, 0xA534, 0x8430, 0xB5B6, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0140 (320) +0xFFFF, 0xFFFF, 0xFFFF, 0xEF5D, 0x8C51, 0xA514, 0xB5B6, 0xC618, 0xD6BA, 0xB5B6, 0xB596, 0xE71C, 0xDEFB, 0xDEFB, 0xE71C, 0xAD55, // 0x0150 (336) +0x738E, 0x7BEF, 0x5AEB, 0x2945, 0xC638, 0xCE59, 0xA534, 0x9492, 0xA534, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0160 (352) +0xFFFF, 0xFFFF, 0xFFFF, 0xB596, 0x94B2, 0xB5B6, 0xC618, 0xCE79, 0xD6BA, 0xE73C, 0xEF7D, 0xE73C, 0xEF5D, 0xE73C, 0x9CF3, 0x738E, // 0x0170 (368) +0x7BCF, 0x8430, 0x6B6D, 0x2965, 0xB596, 0xD69A, 0xAD55, 0x94B2, 0x9CD3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0180 (384) +0xFFFF, 0xFFFF, 0xF79E, 0x9492, 0x9CF3, 0xB5B6, 0xD69A, 0xDEFB, 0xE71C, 0xE73C, 0x6B6D, 0x528A, 0xDEDB, 0xEF5D, 0x7BEF, 0x8430, // 0x0190 (400) +0x7BEF, 0x8C51, 0x7BCF, 0x2104, 0xB596, 0xD6BA, 0xAD55, 0x9CD3, 0x9CF3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE73C, 0xE6FC, // 0x01A0 (416) +0xFFDF, 0xFFFF, 0xCE59, 0x9492, 0x9492, 0x6B4D, 0x7BCF, 0xBDD7, 0xF7BE, 0xA514, 0x4A49, 0x528A, 0xC638, 0xEF7D, 0x7BEF, 0x7BEF, // 0x01B0 (432) +0x7BEF, 0x8430, 0x5AEB, 0x10A2, 0xC618, 0xD69A, 0xAD55, 0x94B2, 0xA514, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xCE5A, 0x8BF2, // 0x01C0 (448) +0xFFFF, 0xFFFF, 0xAD55, 0x94B2, 0x8C51, 0x5AEB, 0x632C, 0xBDD7, 0xE73C, 0x630C, 0x632C, 0xBDF7, 0xFFDF, 0xEF5D, 0xBDD7, 0xB5B6, // 0x01D0 (464) +0xAD75, 0xAD75, 0x8C51, 0x738E, 0xD69A, 0xCE59, 0xB596, 0x8C51, 0xB5B6, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xCE39, 0x7350, // 0x01E0 (480) +0xFFFF, 0xF79E, 0x94B2, 0x94B2, 0x7BCF, 0x5AEB, 0x738E, 0xD6BA, 0xD69A, 0x2104, 0x6B6D, 0xF79E, 0xF79E, 0xF79E, 0xF7BE, 0xF79E, // 0x01F0 (496) +0xEF7D, 0xEF5D, 0xE73C, 0xE73C, 0xDEFB, 0xBDF7, 0xBDF7, 0x7BEF, 0xD69A, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xAD36, 0x7350, // 0x0200 (512) +0xFFFF, 0xDEDB, 0x8C51, 0x94B2, 0x738E, 0x632C, 0x73AE, 0xCE79, 0xF7BE, 0x7BEF, 0xA514, 0xF7BE, 0xF79E, 0xEF7D, 0xEF7D, 0xEF5D, // 0x0210 (528) +0xE73C, 0xE71C, 0xDEFB, 0xDEDB, 0xDEDB, 0xBDD7, 0xBDF7, 0x73AE, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0x9C75, 0x736F, // 0x0220 (544) +0xFFFF, 0xCE59, 0x8430, 0x94B2, 0x6B4D, 0x6B4D, 0xB596, 0xE73C, 0xEF7D, 0xFFFF, 0xFFFF, 0xF7BE, 0xF79E, 0xEF7D, 0xEF7D, 0xEF5D, // 0x0230 (560) +0xE73C, 0xE73C, 0xDEFB, 0xDEFB, 0xD6BA, 0xC618, 0xAD55, 0x8C71, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEDB, 0x6AEF, 0x9492, // 0x0240 (576) +0xFFFF, 0xBDF7, 0x8430, 0x8C71, 0x6B6D, 0xB596, 0xE71C, 0xE73C, 0xEF5D, 0xE73C, 0xBDF7, 0xCE59, 0xF7BE, 0xEF7D, 0xEF7D, 0xEF5D, // 0x0250 (592) +0xE73C, 0xE71C, 0xDEFB, 0xDEFB, 0xC638, 0xD69A, 0x8410, 0xC618, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0x9474, 0x6B0E, 0xCE59, // 0x0260 (608) +0xFFFF, 0xB5B6, 0x8410, 0x9492, 0xBDD7, 0xD6BA, 0xD6BA, 0xE71C, 0xE73C, 0x8C71, 0x6B4D, 0xA514, 0xF7BE, 0xEF5D, 0xEF5D, 0xE73C, // 0x0270 (624) +0xE73C, 0xE71C, 0xDEFB, 0xDEDB, 0xCE59, 0xC618, 0x7BCF, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xC5F9, 0x7B51, 0x7BEF, 0xFFFF, // 0x0280 (640) +0xFFFF, 0xB596, 0x8C71, 0xAD75, 0xBDF7, 0xCE59, 0xD69A, 0xE71C, 0xCE79, 0x8410, 0x8410, 0x9CD3, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, // 0x0290 (656) +0xE71C, 0xDEFB, 0xDEFB, 0xCE59, 0xDEDB, 0x8C71, 0xAD75, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEBB, 0x83B2, 0x630C, 0xE73C, 0xFFFF, // 0x02A0 (672) +0xFFFF, 0xB5B6, 0x9492, 0xAD55, 0xBDD7, 0xC638, 0xCE79, 0xDEFB, 0xB596, 0x73AE, 0x8410, 0x8410, 0xDEDB, 0xE73C, 0xE71C, 0xE71C, // 0x02B0 (688) +0xDEFB, 0xDEFB, 0xD6BA, 0xCE59, 0xC618, 0x738E, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEDC, 0x8C14, 0x5ACC, 0xC658, 0xFFFF, 0xFFFF, // 0x02C0 (704) +0xFFFF, 0xC638, 0x8C51, 0xA534, 0xB5B6, 0xBDF7, 0xCE59, 0xD6BA, 0x94B2, 0x738E, 0x8410, 0x8430, 0xCE59, 0xE73C, 0xDEFB, 0xDEFB, // 0x02D0 (720) +0xDEDB, 0xDEFB, 0xBDF7, 0xDEDB, 0x73AE, 0xC618, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEDC, 0x8BD2, 0x5ACC, 0xBDD6, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02E0 (736) +0xFFFF, 0xDEDB, 0x8C51, 0xA514, 0xAD75, 0xBDD7, 0xC638, 0xC618, 0x73AE, 0x7BCF, 0x8410, 0x5ACB, 0x8C51, 0xE73C, 0xDEDB, 0xD6BA, // 0x02F0 (752) +0xDEFB, 0xBDD7, 0xD69A, 0x8C71, 0x8C51, 0xFFFF, 0xFFFF, 0xFFDE, 0xCE5A, 0x7B71, 0x62ED, 0xBDF7, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0300 (768) +0xFFFF, 0xF7BE, 0x94B2, 0x94B2, 0xA534, 0xB596, 0xBDF7, 0xB596, 0x6B6D, 0x4208, 0x2945, 0x18C3, 0x6B6D, 0xDEFB, 0xD69A, 0xDEDB, // 0x0310 (784) +0xB5B6, 0xC618, 0x9CF3, 0x6B4D, 0xFFDE, 0xFFFF, 0xEF5D, 0xAD37, 0x62EE, 0x6B4D, 0xCE79, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0320 (800) +0xFFDF, 0xFFFF, 0xBDF7, 0x8C51, 0xA514, 0xAD55, 0xB596, 0xBDD7, 0xA514, 0x738E, 0xA514, 0xB5B6, 0xCE59, 0xD69A, 0xDEDB, 0xB596, // 0x0330 (816) +0xBDF7, 0xA534, 0x6B4C, 0xEF5D, 0xF79E, 0xBDB8, 0x7370, 0x5AAC, 0x8C71, 0xEF7D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0340 (832) +0xFFFF, 0xFFFF, 0xF79E, 0x94B2, 0x94B2, 0xA534, 0xAD55, 0xB5B6, 0xA534, 0xBDD7, 0xD69A, 0xCE59, 0xCE79, 0xCE59, 0xA534, 0x8430, // 0x0350 (848) +0x738E, 0x3186, 0x7BB0, 0x8C33, 0x7370, 0x62ED, 0x8410, 0xCE59, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0360 (864) +0xFFFF, 0xFFFF, 0xFFFF, 0xDEFB, 0x8C71, 0x9CD3, 0xAD55, 0xB596, 0xBDD7, 0xBDD7, 0xBDF7, 0xC618, 0xB5B6, 0xA534, 0xA534, 0x632C, // 0x0370 (880) +0x6B6D, 0xB5B6, 0xAD76, 0xAD76, 0xBE17, 0xE71B, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0380 (896) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEFB, 0x94B2, 0x8C51, 0x94B2, 0xA534, 0xAD55, 0xAD55, 0x9CD3, 0x8C71, 0x73AE, 0x632C, 0xA534, // 0x0390 (912) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03A0 (928) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0xCE59, 0xA514, 0x8430, 0x7BCF, 0x738E, 0x73AE, 0x8410, 0xA534, 0xEF7D, 0xFFFF, // 0x03B0 (944) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03C0 (960) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0xE73C, 0xE71C, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03D0 (976) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03E0 (992) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, // 0x03F0 (1008) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) +}; diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap_128x128/tux.c b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap_128x128/tux.c new file mode 100644 index 0000000..7fefd80 --- /dev/null +++ b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap_128x128/tux.c @@ -0,0 +1,264 @@ +// Generated by : ImageConverter 565 v1.0 +// Generated from: tux_64x64.png +// Time generated: 14.10.2010 21:56:38 +// Dimensions : 64x64 pixels +// Size : 8 192 Bytes + +const unsigned short tux[0x1000] ={ +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0010 (16) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xCE79, 0x9CF3, 0x7BCF, 0x738E, 0x738E, // 0x0020 (32) +0x6B6D, 0x94B2, 0xCE79, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0030 (48) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0040 (64) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0050 (80) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xCE79, 0x6B4D, 0x5ACB, 0x8410, 0x9CF3, 0x9CF3, 0x9CF3, // 0x0060 (96) +0x9CD3, 0x73AE, 0x4208, 0x5ACB, 0xCE79, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0070 (112) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0080 (128) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0090 (144) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xA514, 0x3186, 0x8C51, 0xBDF7, 0xC618, 0xBDF7, 0xBDF7, 0xBDF7, // 0x00A0 (160) +0xBDF7, 0xC618, 0xBDD7, 0x738E, 0x18C3, 0x8C51, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00B0 (176) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00C0 (192) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00D0 (208) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xBDD7, 0x10A2, 0x8C71, 0x9CF3, 0x8C71, 0x8C71, 0x8C71, 0x8C71, 0x8C71, // 0x00E0 (224) +0x8C71, 0x8C51, 0x8C51, 0x9CF3, 0x73AE, 0x0000, 0x7BEF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00F0 (240) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0100 (256) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0110 (272) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0x2945, 0x31A6, 0x7BCF, 0x6B4D, 0x6B6D, 0x6B6D, 0x6B6D, 0x6B6D, 0x6B6D, // 0x0120 (288) +0x6B6D, 0x6B6D, 0x6B6D, 0x6B4D, 0x73AE, 0x2124, 0x0000, 0xAD55, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0130 (304) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0140 (320) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0150 (336) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xC638, 0x0000, 0x31A6, 0x52AA, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, // 0x0160 (352) +0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x528A, 0x2104, 0x0000, 0x2965, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0170 (368) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0180 (384) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0190 (400) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x8C71, 0x0000, 0x1082, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, // 0x01A0 (416) +0x3186, 0x3186, 0x3186, 0x3186, 0x2965, 0x0020, 0x0000, 0x0000, 0x9CF3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01B0 (432) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01C0 (448) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01D0 (464) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x630C, 0x0000, 0x0000, 0x0861, 0x18C3, 0x10A2, 0x10A2, 0x10A2, 0x10A2, 0x18C3, // 0x01E0 (480) +0x1082, 0x0841, 0x1082, 0x10A2, 0x0020, 0x0000, 0x0000, 0x0000, 0x528A, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01F0 (496) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0200 (512) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0210 (528) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x4A49, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0220 (544) +0x0861, 0x3186, 0x18C3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2104, 0xD6BA, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0230 (560) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0240 (576) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0250 (592) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x39C7, 0x0000, 0x3186, 0xAD75, 0x8C51, 0x0841, 0x0000, 0x0000, 0x0000, 0x4208, // 0x0260 (608) +0xD6BA, 0xFFDF, 0xE71C, 0x630C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0xAD75, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0270 (624) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0280 (640) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0290 (656) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x39C7, 0x0000, 0xCE59, 0xFFFF, 0xFFFF, 0x94B2, 0x0000, 0x0000, 0x10A2, 0xE73C, // 0x02A0 (672) +0xFFFF, 0xFFFF, 0xFFFF, 0xEF7D, 0x2124, 0x0000, 0x0000, 0x0000, 0x0000, 0x94B2, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02B0 (688) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02C0 (704) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02D0 (720) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x2965, 0x18E3, 0xDEDB, 0x7BCF, 0xAD75, 0xEF5D, 0x2944, 0x0000, 0x5ACA, 0xFFFF, // 0x02E0 (736) +0xAD55, 0x94B2, 0xAD55, 0xF7BE, 0x8410, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C51, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02F0 (752) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0300 (768) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0310 (784) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x39E7, 0x2945, 0xA514, 0x9CF3, 0x8C71, 0xD6BB, 0x39C9, 0x0000, 0x632E, 0xF7DF, // 0x0320 (800) +0x7BEF, 0xAD54, 0x7BEF, 0xBDF7, 0xB596, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C71, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0330 (816) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0340 (832) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0350 (848) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x4A49, 0x18C3, 0x9492, 0x39E7, 0x3187, 0xA48F, 0x8323, 0x5A00, 0x93A6, 0xCDD5, // 0x0360 (864) +0x4209, 0x4249, 0x2965, 0x9CD2, 0xB575, 0x0000, 0x0000, 0x0000, 0x0000, 0x9492, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0370 (880) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0380 (896) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0390 (912) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x5ACB, 0x0000, 0x9D14, 0x2905, 0x6A40, 0xE643, 0xFFAE, 0xFFF3, 0xFF70, 0xDD86, // 0x03A0 (928) +0x7240, 0x1840, 0x18C3, 0xC65A, 0x73CF, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C51, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03B0 (944) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03C0 (960) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03D0 (976) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x738E, 0x0000, 0x5A6A, 0xD566, 0xFF66, 0xFFF8, 0xFFFD, 0xFFDC, 0xFFFD, 0xFFFA, // 0x03E0 (992) +0xFF0E, 0xE566, 0xC464, 0xC4CC, 0x2103, 0x0000, 0x0000, 0x0000, 0x0000, 0x6B6D, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03F0 (1008) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0410 (1040) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x7BEF, 0x0800, 0xB440, 0xFFC6, 0xFFF3, 0xFFB4, 0xFFB2, 0xFF92, 0xFF72, 0xFF53, // 0x0420 (1056) +0xFF55, 0xFF75, 0xFEF0, 0xF542, 0x8240, 0x0000, 0x0000, 0x0000, 0x0000, 0x4228, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0430 (1072) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0440 (1088) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0450 (1104) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x8432, 0x4140, 0xFFE2, 0xFFEB, 0xFFAC, 0xFF8B, 0xFF4C, 0xFF2C, 0xFEEC, 0xFECB, // 0x0460 (1120) +0xFE6A, 0xFE08, 0xFDA7, 0xFDC3, 0xA320, 0x0000, 0x0000, 0x0000, 0x0000, 0x18E3, 0xD69A, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0470 (1136) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0480 (1152) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0490 (1168) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x9D14, 0x28A0, 0xF6E0, 0xFFE1, 0xFF43, 0xFF04, 0xFEC4, 0xFE84, 0xFE23, 0xFDE1, // 0x04A0 (1184) +0xFD60, 0xFD20, 0xFD20, 0xFD20, 0x7241, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9CF3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x04B0 (1200) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x04C0 (1216) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x04D0 (1232) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xB5B6, 0x0000, 0xC4A9, 0xFEC0, 0xFF00, 0xFEA0, 0xFE40, 0xFE00, 0xFDA0, 0xFD60, // 0x04E0 (1248) +0xFD40, 0xFD20, 0xEC80, 0xDCC7, 0x8C0F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x52AA, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x04F0 (1264) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0500 (1280) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0510 (1296) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xAD75, 0x0000, 0xD69B, 0xF631, 0xF5C0, 0xFE80, 0xFE00, 0xFDC0, 0xFD60, 0xFD40, // 0x0520 (1312) +0xFCC0, 0xDC86, 0xCD93, 0xE73D, 0xE71C, 0x0861, 0x0000, 0x0000, 0x0000, 0x0000, 0x0861, 0xC618, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0530 (1328) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0540 (1344) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0550 (1360) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x632C, 0x0000, 0xD6BA, 0xFFFF, 0xF5F1, 0xFD40, 0xFD80, 0xFD20, 0xFCE0, 0xECA3, // 0x0560 (1376) +0xDD6F, 0xE6FC, 0xFFFF, 0xFFFF, 0xFFFF, 0x632C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5ACB, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0570 (1392) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0580 (1408) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0590 (1424) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xDEDB, 0x0861, 0x0000, 0xD69A, 0xFFFF, 0xFFFF, 0xFED8, 0xF631, 0xF610, 0xE5F2, 0xE6B9, // 0x05A0 (1440) +0xF7BF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xE71C, 0x10A2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0xB5B6, 0xFFFF, 0xFFFF, 0xFFFF, // 0x05B0 (1456) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x05C0 (1472) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x05D0 (1488) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0x39E7, 0x0000, 0x4228, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7FF, 0xF7DF, 0xFFFF, // 0x05E0 (1504) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x73AE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3186, 0xEF7D, 0xFFFF, 0xFFFF, // 0x05F0 (1520) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0600 (1536) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0610 (1552) +0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x738E, 0x0000, 0x18C3, 0xDEFB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0620 (1568) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFFF, 0xCE59, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6B4D, 0xFFFF, 0xFFFF, // 0x0630 (1584) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0640 (1600) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0650 (1616) +0xFFFF, 0xFFDF, 0xFFFF, 0xA514, 0x0000, 0x0000, 0x9CD3, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0660 (1632) +0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0x2965, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xAD55, 0xFFFF, // 0x0670 (1648) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0680 (1664) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0690 (1680) +0xFFDF, 0xFFFF, 0xD69A, 0x0861, 0x0000, 0x2945, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x06A0 (1696) +0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xFFFF, 0x7BCF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18C3, 0xD6BA, // 0x06B0 (1712) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x06C0 (1728) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x06D0 (1744) +0xFFFF, 0xFFDF, 0x39C7, 0x0000, 0x0000, 0x8430, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x06E0 (1760) +0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xFFFF, 0xCE79, 0x0841, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4228, // 0x06F0 (1776) +0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0700 (1792) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, // 0x0710 (1808) +0xFFFF, 0x94B2, 0x0000, 0x0020, 0x0020, 0xCE79, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, // 0x0720 (1824) +0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xFFDF, 0x4A69, 0x0000, 0x0841, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, // 0x0730 (1840) +0x8C71, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0740 (1856) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0750 (1872) +0xEF7D, 0x2104, 0x0020, 0x0000, 0x3186, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, // 0x0760 (1888) +0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xFFFF, 0xB5B6, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0000, // 0x0770 (1904) +0x10A2, 0xD6BA, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0780 (1920) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, // 0x0790 (1936) +0x8C71, 0x0000, 0x0861, 0x0000, 0x7BCF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, // 0x07A0 (1952) +0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xFFDF, 0x528A, 0x0000, 0x0841, 0x0020, 0x0020, 0x0020, 0x0020, // 0x07B0 (1968) +0x0000, 0x630C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x07C0 (1984) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, // 0x07D0 (2000) +0x3186, 0x0000, 0x0841, 0x10A2, 0xE71C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, // 0x07E0 (2016) +0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xF79E, 0xEF5D, 0xF7BE, 0xBDD7, 0x0841, 0x0861, 0x0841, 0x0841, 0x0841, 0x0020, // 0x07F0 (2032) +0x0020, 0x1082, 0xC638, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0800 (2048) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xBDD7, // 0x0810 (2064) +0x0020, 0x1082, 0x0000, 0x7BEF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, // 0x0820 (2080) +0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF7D, 0x4208, 0x0020, 0x0861, 0x0861, 0x0841, 0x0841, // 0x0830 (2096) +0x0841, 0x0000, 0x630C, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0840 (2112) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x6B4D, // 0x0850 (2128) +0x0000, 0x0861, 0x2104, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, // 0x0860 (2144) +0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xE73C, 0xF7BE, 0x8430, 0x0000, 0x1082, 0x0861, 0x0861, 0x0861, // 0x0870 (2160) +0x0861, 0x0020, 0x18C3, 0xCE79, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0880 (2176) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF5D, 0x2124, // 0x0890 (2192) +0x0861, 0x0020, 0x8410, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, // 0x08A0 (2208) +0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xEF7D, 0xB5B6, 0x0861, 0x1082, 0x1082, 0x0861, 0x0861, // 0x08B0 (2224) +0x0861, 0x0861, 0x0000, 0x8430, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x08C0 (2240) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xA514, 0x0020, // 0x08D0 (2256) +0x10A2, 0x1082, 0xD69A, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, // 0x08E0 (2272) +0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xEF5D, 0xCE79, 0x2124, 0x1082, 0x10A2, 0x1082, 0x1082, // 0x08F0 (2288) +0x0861, 0x1082, 0x0000, 0x4208, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0900 (2304) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0x4208, 0x0861, // 0x0910 (2320) +0x1082, 0x31A6, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, // 0x0920 (2336) +0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEDB, 0x39C7, 0x1082, 0x10A2, 0x10A2, 0x1082, // 0x0930 (2352) +0x1082, 0x1082, 0x0841, 0x18C3, 0xC618, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0940 (2368) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xA534, 0x0841, 0x18C3, // 0x0950 (2384) +0x0841, 0x630C, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, // 0x0960 (2400) +0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xDEFB, 0xE73C, 0x4A49, 0x0861, 0x18C3, 0x10A2, 0x10A2, // 0x0970 (2416) +0x10A2, 0x1082, 0x1082, 0x0841, 0x9CD3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0980 (2432) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7D, 0x3186, 0x1082, 0x18E3, // 0x0990 (2448) +0x0861, 0x94B2, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, // 0x09A0 (2464) +0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEDB, 0xE73C, 0x4A69, 0x1082, 0x18E3, 0x18C3, 0x10A2, // 0x09B0 (2480) +0x10A2, 0x10A2, 0x10A2, 0x0020, 0x73AE, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x09C0 (2496) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x94B2, 0x0841, 0x18E3, 0x18E3, // 0x09D0 (2512) +0x0861, 0xAD75, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, // 0x09E0 (2528) +0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEFB, 0xDEDB, 0xE73C, 0x52AA, 0x10A2, 0x2104, 0x18E3, 0x18C3, // 0x09F0 (2544) +0x18C3, 0x18C3, 0x10A2, 0x0841, 0x630C, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0A00 (2560) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x632C, 0x0861, 0x18E4, 0x18E4, // 0x0A10 (2576) +0x1082, 0xC638, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, // 0x0A20 (2592) +0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xD6BA, 0xE71C, 0x6B4D, 0x10A2, 0x18C3, 0x18C3, 0x10A2, // 0x0A30 (2608) +0x10A2, 0x10A2, 0x18C3, 0x0861, 0x5AEB, 0xE73C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0A40 (2624) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x8410, 0x0862, 0x3143, 0x2924, // 0x0A50 (2640) +0x0882, 0xBDD7, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, // 0x0A60 (2656) +0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEDB, 0xE73C, 0x630C, 0x2103, 0x4A69, 0x632C, 0x6B4D, // 0x0A70 (2672) +0x528A, 0x2965, 0x18C3, 0x1081, 0x738E, 0xE73C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0A80 (2688) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xB596, 0x7A40, 0xECA0, 0xCC00, // 0x0A90 (2704) +0x3941, 0xA535, 0xFFFF, 0xF7BE, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, // 0x0AA0 (2720) +0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEFB, 0xD6DB, 0xCE38, 0xC618, 0x4A48, 0x4A49, 0x6B6D, 0x6B4D, 0x6B4D, // 0x0AB0 (2736) +0x6B4D, 0x630C, 0x3186, 0x18E4, 0x9492, 0xEF7D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0AC0 (2752) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xC488, 0xFD41, 0xFE6D, 0xFE6A, // 0x0AD0 (2768) +0xDC60, 0x5A25, 0xB5D8, 0xFFFF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, // 0x0AE0 (2784) +0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xD6BB, 0xBCAB, 0xD462, 0xD462, 0x49E4, 0x10C3, 0x18C3, 0x18C3, 0x18C3, // 0x0AF0 (2800) +0x18C3, 0x18E3, 0x10A3, 0x49C4, 0xB575, 0xF7BF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0B00 (2816) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xCD70, 0xECA0, 0xFF14, 0xFF9B, 0xFF7B, // 0x0B10 (2832) +0xFECF, 0xC3A0, 0x3143, 0x9CF3, 0xFFFF, 0xF7BE, 0xF79E, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, // 0x0B20 (2848) +0xE73C, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEFB, 0xC617, 0xDC60, 0xFD60, 0xFD20, 0x3120, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0B30 (2864) +0x0000, 0x0000, 0x3900, 0xE460, 0xB46A, 0xEF9F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0B40 (2880) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xD5F4, 0xDC20, 0xFE8E, 0xFF59, 0xFF36, 0xFF36, // 0x0B50 (2896) +0xFF59, 0xFE6B, 0xA300, 0x18E4, 0x8410, 0xFFBE, 0xF7BE, 0xEF7D, 0xF79E, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, // 0x0B60 (2912) +0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEBA, 0xDEFB, 0xC5B5, 0xE4A1, 0xFEF2, 0xF716, 0x3164, 0x18E4, 0x2103, 0x1082, 0x1082, // 0x0B70 (2928) +0x0021, 0x1061, 0xD5D0, 0xFE27, 0xB3E3, 0xCE9B, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0B80 (2944) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF77D, 0xE697, 0xDDAF, 0xD4C8, 0xE480, 0xFE29, 0xFF36, 0xFF15, 0xFF35, 0xFF15, // 0x0B90 (2960) +0xFF15, 0xFF36, 0xFDA5, 0x6A42, 0x1905, 0x6B4C, 0xE73C, 0xFFDF, 0xEF5D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, // 0x0BA0 (2976) +0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEDB, 0xD6BA, 0xDEDB, 0xBDB5, 0xE4C3, 0xFF56, 0xFFDB, 0xAD10, 0x10A2, 0x10C3, 0x18E4, 0x1082, // 0x0BB0 (2992) +0x2922, 0xC5B1, 0xFFDC, 0xFED1, 0xB3A2, 0xBE19, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0BC0 (3008) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE6B8, 0xD484, 0xE4C0, 0xF584, 0xFE28, 0xFECF, 0xFF14, 0xFF13, 0xFF13, 0xFF13, 0xFF13, // 0x0BD0 (3024) +0xFF13, 0xFF14, 0xFEF0, 0xDC80, 0x41C5, 0x2945, 0x5269, 0xCE59, 0xF7BE, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, // 0x0BE0 (3040) +0xDEFB, 0xDEFB, 0xDEDB, 0xDEDB, 0xD6BA, 0xD69A, 0xD6DB, 0xBD95, 0xE4E2, 0xFF33, 0xFF36, 0xFF97, 0xDDF1, 0x8B66, 0x7AE4, 0x9BC7, // 0x0BF0 (3056) +0xEEB2, 0xFF97, 0xFF37, 0xFEF0, 0xC3E0, 0xB5B7, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0C00 (3072) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xD52B, 0xFD60, 0xFECD, 0xFF33, 0xFF13, 0xFF12, 0xFEF1, 0xFEF1, 0xFEF1, 0xFEF1, 0xFEF1, // 0x0C10 (3088) +0xFEF1, 0xFEF1, 0xFF12, 0xFE69, 0x9B41, 0x31A8, 0x31A6, 0x39E7, 0xB5B6, 0xF79E, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEFB, // 0x0C20 (3104) +0xDEFB, 0xDEDB, 0xDEDB, 0xD6BA, 0xD6BA, 0xD699, 0xD6BA, 0xBD94, 0xE502, 0xFF12, 0xFF15, 0xFEF4, 0xFF55, 0xFF95, 0xFF54, 0xFF95, // 0x0C30 (3120) +0xFF35, 0xFEF4, 0xFF14, 0xFF14, 0xF5A4, 0xB426, 0xE75E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0C40 (3136) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xD54C, 0xFDA0, 0xFECE, 0xFEF0, 0xFECF, 0xFEEF, 0xFEEF, 0xFEF0, 0xFEEF, 0xFEF0, 0xFEF0, // 0x0C50 (3152) +0xFEF0, 0xFEEF, 0xFEF0, 0xFEEF, 0xF582, 0x6244, 0x39E8, 0x39C6, 0x528A, 0xE71C, 0xE73C, 0xE71C, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, // 0x0C60 (3168) +0xDEDB, 0xDEDB, 0xD6BA, 0xD6BA, 0xD69A, 0xCE79, 0xCE9A, 0xBD94, 0xE522, 0xFF10, 0xFEF2, 0xFEF2, 0xFEF2, 0xFEF2, 0xFEF2, 0xFEF2, // 0x0C70 (3184) +0xFEF2, 0xFF12, 0xFEF2, 0xFEF2, 0xFF12, 0xED85, 0xBC68, 0xE73D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0C80 (3200) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xD5B0, 0xF580, 0xFECB, 0xFEEE, 0xFECD, 0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, // 0x0C90 (3216) +0xFEEE, 0xFEEE, 0xFECD, 0xFECE, 0xFECA, 0xCC60, 0x41C7, 0x39C7, 0x4228, 0xCE79, 0xEF5D, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, // 0x0CA0 (3232) +0xDEDB, 0xD6BA, 0xD6BA, 0xD69A, 0xCE79, 0xCE59, 0xCE9A, 0xBD73, 0xED42, 0xFF0F, 0xFEF0, 0xFEF0, 0xFEF0, 0xFEF0, 0xFEF0, 0xFEF0, // 0x0CB0 (3248) +0xFEF0, 0xFEF0, 0xFEF0, 0xFEF0, 0xFEF0, 0xFF31, 0xF628, 0xC4A7, 0xDE57, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0CC0 (3264) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDE13, 0xF560, 0xFEC9, 0xFECD, 0xFECC, 0xFECC, 0xFECC, 0xFECC, 0xFECC, 0xFECC, 0xFECC, // 0x0CD0 (3280) +0xFEEC, 0xFEEC, 0xFECC, 0xFECC, 0xFEED, 0xFE44, 0x9323, 0x52CC, 0x73AE, 0xD69A, 0xE73C, 0xDEFB, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEDB, // 0x0CE0 (3296) +0xD6BA, 0xD6BA, 0xD69A, 0xCE79, 0xCE59, 0xD69A, 0xB5D8, 0x7B28, 0xF5A2, 0xFF0F, 0xFECE, 0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, // 0x0CF0 (3312) +0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, 0xFECD, 0xFF10, 0xFEA9, 0xCC60, 0xD615, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0D00 (3328) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDE55, 0xED80, 0xFEA4, 0xFECA, 0xFECA, 0xFECA, 0xFECA, 0xFECA, 0xFECA, 0xFECA, 0xFEC9, // 0x0D10 (3344) +0xFEA7, 0xFEA6, 0xFEA8, 0xFEC9, 0xFECB, 0xFEEA, 0xEDA2, 0xB4F0, 0xCE9A, 0xDEFB, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEDB, 0xD6BA, // 0x0D20 (3360) +0xD6BA, 0xD69A, 0xCE79, 0xCE79, 0xD6BA, 0xB596, 0x4A8B, 0x72A4, 0xFE45, 0xFEEC, 0xFECC, 0xFEEC, 0xFEEC, 0xFEEC, 0xFEEC, 0xFEEC, // 0x0D30 (3376) +0xFEEC, 0xFECB, 0xFECB, 0xFEEC, 0xFEEC, 0xFEEC, 0xFECC, 0xFEA5, 0xFDE0, 0xAC8B, 0xE75E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0D40 (3392) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE632, 0xF5E0, 0xFE80, 0xFE82, 0xFEC7, 0xFEC8, 0xFEC8, 0xFEC8, 0xFEC7, 0xFEA4, 0xFE61, // 0x0D50 (3408) +0xFE60, 0xFE60, 0xFE60, 0xFE61, 0xFE83, 0xFEA6, 0xFEA3, 0xDD22, 0xD658, 0xE75D, 0xDEDB, 0xDEDB, 0xDEDB, 0xD6BA, 0xD6BA, 0xD69A, // 0x0D60 (3424) +0xD69A, 0xD69A, 0xD6BA, 0xCE59, 0x9492, 0x5289, 0x39E9, 0x9B84, 0xFEA3, 0xFEEB, 0xFEEA, 0xFEEA, 0xFEEA, 0xFEEA, 0xFEEA, 0xFEC8, // 0x0D70 (3440) +0xFE84, 0xFE61, 0xFE61, 0xFEA5, 0xFEC9, 0xFEA7, 0xFEA2, 0xFE80, 0xBC41, 0x8C0F, 0xE71C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0D80 (3456) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDDCE, 0xFE40, 0xFEA0, 0xFE80, 0xFE80, 0xFEA2, 0xFEA2, 0xFEA2, 0xFEA0, 0xFE80, 0xFE80, // 0x0D90 (3472) +0xFEA0, 0xFEA0, 0xFEA0, 0xFE80, 0xFE80, 0xFE80, 0xFE80, 0xFE80, 0xCCE5, 0xD69A, 0xE73C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEDB, // 0x0DA0 (3488) +0xD69A, 0xBDF7, 0x9CD3, 0x630C, 0x4228, 0x4A69, 0x422A, 0xB423, 0xFEC0, 0xFEA5, 0xFEE7, 0xFEC7, 0xFEC7, 0xFEC6, 0xFEA3, 0xFE80, // 0x0DB0 (3504) +0xFE80, 0xFE80, 0xFE80, 0xFE60, 0xFEA0, 0xFEC0, 0xEDC0, 0xA3A4, 0x732C, 0xAD96, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0DC0 (3520) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE5A8, 0xFEC0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0DD0 (3536) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEE0, 0xF640, 0x93A8, 0x8C72, 0xA534, 0xAD75, 0xA534, 0x9CF3, 0x8C51, // 0x0DE0 (3552) +0x738E, 0x5ACB, 0x4A49, 0x4A69, 0x528A, 0x4A8A, 0x5249, 0xD502, 0xFEE0, 0xFEA0, 0xFEC0, 0xFEC1, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, // 0x0DF0 (3568) +0xFEA0, 0xFEA0, 0xFEA0, 0xFEE0, 0xFE60, 0xC482, 0x7B09, 0x7BD0, 0xB5B7, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0E00 (3584) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDD8A, 0xFEC0, 0xFF20, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, // 0x0E10 (3600) +0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEC0, 0xFF20, 0xAC02, 0x4209, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, // 0x0E20 (3616) +0x528A, 0x528A, 0x52AA, 0x52AA, 0x528A, 0x4A8A, 0x5A69, 0xE5C1, 0xFF00, 0xFEC0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, // 0x0E30 (3632) +0xFEC0, 0xFEE0, 0xFF00, 0xE561, 0x9367, 0x736E, 0x9D14, 0xD6BA, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0E40 (3648) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xD617, 0xCCC5, 0xF620, 0xFEE0, 0xFF40, 0xFF40, 0xFF40, 0xFF20, 0xFF00, 0xFF00, 0xFF00, // 0x0E50 (3664) +0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFF40, 0xB483, 0x4A8B, 0x5ACA, 0x5ACB, 0x5ACB, 0x5ACB, 0x5ACB, // 0x0E60 (3680) +0x5ACB, 0x52AA, 0x52AA, 0x52AA, 0x52AA, 0x4A8A, 0x6289, 0xEE20, 0xFF20, 0xFEE0, 0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFEE0, // 0x0E70 (3696) +0xFF20, 0xFEC0, 0xBC64, 0x732B, 0x8C72, 0xCE58, 0xEF7D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0E80 (3712) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7E, 0xB576, 0x93EE, 0xA408, 0xC4A5, 0xDD63, 0xF641, 0xFEC0, 0xFF40, 0xFF80, 0xFF60, // 0x0E90 (3728) +0xFF40, 0xFF20, 0xFF20, 0xFF40, 0xFF40, 0xFF40, 0xFF20, 0xFF20, 0xFF80, 0xAC03, 0x4A6B, 0x5ACA, 0x5ACB, 0x5ACB, 0x5AEB, 0x5AEB, // 0x0EA0 (3744) +0x5AEB, 0x630C, 0x630C, 0x630C, 0x5AEB, 0x52CB, 0x5A69, 0xE5E1, 0xFF60, 0xFF20, 0xFF20, 0xFF20, 0xFF20, 0xFF20, 0xFF20, 0xFF60, // 0x0EB0 (3760) +0xF640, 0xA3A7, 0x738F, 0xAD96, 0xE71C, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0EC0 (3776) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79E, 0xD6DB, 0xB5B8, 0x9CD4, 0x9431, 0x93EE, 0x9C0A, 0xB467, 0xD544, 0xF660, // 0x0ED0 (3792) +0xFF60, 0xFFA0, 0xFF80, 0xFF60, 0xFF40, 0xFF40, 0xFF60, 0xFFA0, 0xD521, 0x730A, 0x73CF, 0x8C71, 0x9CD3, 0x9CF3, 0xA514, 0xA534, // 0x0EE0 (3808) +0xAD55, 0xB596, 0xB5B6, 0xB596, 0xAD55, 0x9CF3, 0x83F0, 0xCD04, 0xFFA0, 0xFF40, 0xFF40, 0xFF40, 0xFF40, 0xFF40, 0xFFA0, 0xF621, // 0x0EF0 (3824) +0x8B49, 0x8431, 0xCE58, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F00 (3840) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xF79E, 0xE73C, 0xD6BB, 0xBE19, 0xA556, 0x9472, 0x9C0D, // 0x0F10 (3856) +0xB447, 0xDD82, 0xFEE0, 0xFFA0, 0xFFC0, 0xFFC0, 0xFF80, 0xC4C2, 0x730C, 0x9CF4, 0xD69A, 0xEF5D, 0xEF7D, 0xF79E, 0xF79E, 0xF7BE, // 0x0F20 (3872) +0xF7BE, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xEF7D, 0xDF1C, 0xC530, 0xF620, 0xFFC0, 0xFFC0, 0xFFC0, 0xFFC0, 0xFF80, 0xE5A2, 0x834A, // 0x0F30 (3888) +0x8C93, 0xDEDA, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F40 (3904) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDE, 0xEF7D, 0xD6BB, // 0x0F50 (3920) +0xAD77, 0x9452, 0x9BEB, 0xB466, 0xC524, 0xC543, 0xA3E5, 0x734D, 0xAD76, 0xEF5C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F60 (3936) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDF1C, 0xACB0, 0xBCA6, 0xD544, 0xCD64, 0xCD05, 0xAC07, 0x7B6D, 0x9CF4, // 0x0F70 (3952) +0xE6FB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F80 (3968) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F90 (3984) +0xFFDE, 0xE75D, 0xC65A, 0xA536, 0x9493, 0x8C53, 0x94B4, 0xBE18, 0xEF7D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0FA0 (4000) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xDEFC, 0xAD57, 0x9493, 0x8C73, 0x8C73, 0x94D4, 0xBE18, 0xEF5D, // 0x0FB0 (4016) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0FC0 (4032) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0FD0 (4048) +0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0xEF5C, 0xE73C, 0xEF5C, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0FE0 (4064) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0xEF5C, 0xE73C, 0xEF5C, 0xEF7D, 0xFFDE, 0xFFFF, // 0x0FF0 (4080) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x1000 (4096) +}; diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_CPLD_PageSwitching/UTFT_CPLD_PageSwitching.ino b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_CPLD_PageSwitching/UTFT_CPLD_PageSwitching.ino new file mode 100644 index 0000000..8cee78e --- /dev/null +++ b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_CPLD_PageSwitching/UTFT_CPLD_PageSwitching.ino @@ -0,0 +1,93 @@ +// UTFT_CPLD_PageSwitching (C)2014 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of page switching on CPLD-based display modules.. +// +// This demo was made for modules with a screen resolution +// of 800x480 pixels. +// +// This program requires the UTFT library. +// +// NOTE: The display will be black for a short while during the start +// + +#include + +// Declare which fonts we will be using +extern uint8_t BigFont[]; +extern uint8_t SevenSegNumFont[]; + +// Set the pins to the correct ones for your development shield +// ------------------------------------------------------------ +// Standard Arduino Mega/Due shield : ,38,39,40,41 +// CTE TFT LCD/SD Shield for Arduino Due : ,25,26,27,28 +// Teensy 3.x TFT Test Board : ,23,22, 3, 4 +// ElecHouse TFT LCD/SD Shield for Arduino Due : ,22,23,31,33 +// +// Remember to change the model parameter to suit your display module! +UTFT myGLCD(EHOUSE50CPLD,22,23,31,33); + +void setup() +{ + myGLCD.InitLCD(); +} + +void loop() +{ + myGLCD.setBackColor(VGA_TRANSPARENT); + + myGLCD.setBrightness(0); + for (byte pg=0; pg<8; pg++) + { + myGLCD.setWritePage(pg); + myGLCD.clrScr(); + for (int ln=0; ln<480; ln+=2) + { + switch (pg) + { + case 0: + myGLCD.setColor(ln/2, 0, 0); + break; + case 1: + myGLCD.setColor(0, ln/2, 0); + break; + case 2: + myGLCD.setColor(0, 0, ln/2); + break; + case 3: + myGLCD.setColor(ln/4, ln/2, 0); + break; + case 4: + myGLCD.setColor(0, ln/2, ln/2); + break; + case 5: + myGLCD.setColor(ln/2, 0, ln/2); + break; + case 6: + myGLCD.setColor(ln/2, ln/2, 0); + break; + case 7: + myGLCD.setColor(0, ln/2, ln/4); + break; + } + myGLCD.drawLine(0, ln, 799, ln); + myGLCD.drawLine(0, ln+1, 799, ln+1); + } + myGLCD.setColor(VGA_WHITE); + myGLCD.setFont(BigFont); + myGLCD.print("This is page:", CENTER, 200); + myGLCD.setFont(SevenSegNumFont); + myGLCD.printNumI(pg, CENTER, 240); + } + myGLCD.setBrightness(16); + + while(1) + { + for (byte pg=0; pg<8; pg++) + { + myGLCD.setDisplayPage(pg); + delay(500); + } + } +} + diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_128x128_Serial/UTFT_Demo_128x128_Serial.ino b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_128x128_Serial/UTFT_Demo_128x128_Serial.ino new file mode 100644 index 0000000..de371d9 --- /dev/null +++ b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_128x128_Serial/UTFT_Demo_128x128_Serial.ino @@ -0,0 +1,335 @@ +// UTFT_Demo_128x128_Serial (C)2013 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of how to use most of the functions +// of the library with a supported display modules. +// +// This demo was made to work on the 128x128 modules. +// Any other size displays may cause strange behaviour. +// +// This program requires the UTFT library. +// + +#include + +// Declare which fonts we will be using +extern uint8_t SmallFont[]; + +// Declare an instance of the class +UTFT myGLCD(LPH9135,6,5,2,3,4); // Remember to change the model parameter to suit your display module! + +void setup() +{ + randomSeed(analogRead(0)); + +// Setup the LCD + myGLCD.InitLCD(PORTRAIT); + myGLCD.setFont(SmallFont); +} + +void loop() +{ + byte buf[126]; + int x, x2; + int y, y2; + int r; + +// Clear the screen and draw the frame + myGLCD.clrScr(); + myGLCD.setContrast(64); + + myGLCD.setColor(255, 0, 0); + myGLCD.fillRect(0,0,127,12); + myGLCD.setColor(64, 64, 64); + myGLCD.fillRect(0,117,127,127); + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255,0,0); + myGLCD.print("Universal TFT", CENTER, 0); + myGLCD.setBackColor(64,64,64); + myGLCD.setColor(255,255,0); + myGLCD.print("H.Karlsen", LEFT, 116); + myGLCD.print("(C)2013", RIGHT, 116); + myGLCD.setColor(0,255,0); + myGLCD.drawRect(0,13,127,116); + +// Draw crosshairs + myGLCD.setColor(0,0,255); + myGLCD.drawLine(63,14,63,115); + myGLCD.drawLine(1,63,126,63); + for (int i=3; i<128; i+=10) + myGLCD.drawLine(i, 61, i, 65); + for (int i=14; i<118; i+=10) + myGLCD.drawLine(61, i, 65, i); + +// Draw sin-, cos- and tan-lines + myGLCD.setColor(0,255,255); + myGLCD.setBackColor(0,0,0); + myGLCD.print("Sin", 2, 14); + for (int i=1; i<126; i++) + { + myGLCD.drawPixel(i,63+(sin(((i*2.85)*3.14)/180)*45)); + } + + myGLCD.setColor(255,0,0); + myGLCD.print("Cos", 2, 26); + for (int i=1; i<126; i++) + { + myGLCD.drawPixel(i,63+(cos(((i*2.85)*3.14)/180)*45)); + } + + myGLCD.setColor(255,255,0); + myGLCD.print("Tan", 2, 38); + for (int i=1; i<126; i++) + { + myGLCD.drawPixel(i,63+(tan(((i*2.85)*3.14)/180))); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,126,115); + myGLCD.setColor(0,0,255); + myGLCD.drawLine(63,14,63,115); + myGLCD.drawLine(1,63,126,63); + +// Draw a moving sinewave + x=1; + for (int i=1; i<3654; i++) + { + x++; + if (x==127) + x=1; + if (i>127) + { + if ((x==63)||(buf[x-1]==63)) + myGLCD.setColor(0,0,255); + else + myGLCD.setColor(0,0,0); + myGLCD.drawPixel(x,buf[x-1]); + } + myGLCD.setColor(0,255,255); + y=63+(sin(((i*1.3)*3.14)/180)*45); + myGLCD.drawPixel(x,y); + buf[x-1]=y; + delay(1); + } + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,126,115); + +// Draw some filled rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRect(10+(i*10),10+(i*10), 60+(i*10), 60+(i*10)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,126,115); + +// Draw some filled, rounded rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRoundRect(70-(i*10),10+(i*10), 120-(i*10), 60+(i*10)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,126,115); + +// Draw some filled circles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillCircle(30+(i*10),35+(i*10), 25); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,126,115); + + // Draw some lines in a pattern + myGLCD.setColor (255,0,0); + for (int i=11; i<115; i+=3) + { + myGLCD.drawLine(1, i, i-10, 115); + } + myGLCD.setColor (255,0,0); + for (int i=112; i>14; i-=3) + { + myGLCD.drawLine(126, i, i+14, 14); + } + myGLCD.setColor (0,255,255); + for (int i=115; i>14; i-=3) + { + myGLCD.drawLine(1, i, 116-i, 14); + } + myGLCD.setColor (0,255,255); + for (int i=14; i<115; i+=3) + { + myGLCD.drawLine(126, i, 140-i, 115); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,126,115); + +// Draw some random circles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=22+random(85); + y=35+random(59); + r=random(20); + myGLCD.drawCircle(x, y, r); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,126,115); + +// Draw some random rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(124); + y=15+random(101); + x2=2+random(124); + y2=15+random(101); + myGLCD.drawRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,126,115); + +// Draw some random rounded rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(124); + y=15+random(101); + x2=2+random(124); + y2=15+random(101); + myGLCD.drawRoundRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,126,115); + +// Draw some random lines + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(124); + y=15+random(101); + x2=2+random(124); + y2=15+random(101); + myGLCD.drawLine(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,126,115); + +// Draw some random pixels + for (int i=0; i<5000; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + myGLCD.drawPixel(2+random(124), 15+random(101)); + } + + delay (2000); + +// Set up the "Finished"-screen + myGLCD.setContrast(0); + myGLCD.fillScr(0,0,255); + myGLCD.setColor(255,0,0); + myGLCD.fillRoundRect(2, 40, 125, 88); + + myGLCD.setColor(255,255,255); + myGLCD.setBackColor(255,0,0); + myGLCD.print("That's it!", CENTER, 46); + myGLCD.print("Restarting in a", CENTER, 66); + myGLCD.print("few seconds...", CENTER, 76); + + myGLCD.setColor(0,0,0); + myGLCD.setBackColor(0,0,255); + myGLCD.print("Runtime: (msecs)", CENTER, 108); + myGLCD.printNumI(millis(), CENTER, 118); + + myGLCD.setContrast(64); + + delay (10000); + +// Fade screen to black + for (int i=64; i>0; i--) + { + myGLCD.setContrast(i); + delay(100); + } +} + + diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_160x128_Serial/UTFT_Demo_160x128_Serial.ino b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_160x128_Serial/UTFT_Demo_160x128_Serial.ino new file mode 100644 index 0000000..5ff7106 --- /dev/null +++ b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_160x128_Serial/UTFT_Demo_160x128_Serial.ino @@ -0,0 +1,328 @@ +// UTFT_Demo_160x128_Serial (C)2014 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of how to use most of the functions +// of the library with a supported display modules. +// +// This demo was made for modules with a screen resolution +// of 160x128 pixels. +// +// This program requires the UTFT library. +// + +#include + +// Declare which fonts we will be using +extern uint8_t SmallFont[]; + +// Usage: myGLCD(, SDA, SCL, CS, RST[, RS]); +// +// When using the DM-TFT18-101 and shield from DisplayModule you should use the following: +// UTFT myGLCD(DMTFT18101,2,3,4,6,5); +// +UTFT myGLCD(ITDB18SP,19,18,0,16,17); // Remember to change the model parameter to suit your display module! + +void setup() +{ + randomSeed(analogRead(0)); + +// Setup the LCD + myGLCD.InitLCD(); + myGLCD.setFont(SmallFont); +} + +void loop() +{ + int buf[158]; + int x, x2; + int y, y2; + int r; + +// Clear the screen and draw the frame + myGLCD.clrScr(); + + myGLCD.setColor(255, 0, 0); + myGLCD.fillRect(0, 0, 159, 13); + myGLCD.setColor(64, 64, 64); + myGLCD.fillRect(0, 114, 159, 127); + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("Universal TFT Lib.", CENTER, 1); + myGLCD.setBackColor(64, 64, 64); + myGLCD.setColor(255,255,0); + myGLCD.print("H.Karlsen", LEFT, 114); + myGLCD.print("(C)2014", RIGHT, 114); + + myGLCD.setColor(0, 0, 255); + myGLCD.drawRect(0, 13, 159, 113); + +// Draw crosshairs + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(79, 14, 79, 113); + myGLCD.drawLine(1, 63, 158, 63); + + for (int i=9; i<150; i+=10) + myGLCD.drawLine(i, 61, i, 65); + for (int i=19; i<110; i+=10) + myGLCD.drawLine(77, i, 81, i); + +// Draw sin-, cos- and tan-lines + myGLCD.setColor(0,255,255); + myGLCD.print("Sin", 5, 15); + for (int i=1; i<158; i++) + { + myGLCD.drawPixel(i,63+(sin(((i*2.27)*3.14)/180)*40)); + } + + myGLCD.setColor(255,0,0); + myGLCD.print("Cos", 5, 27); + for (int i=1; i<158; i++) + { + myGLCD.drawPixel(i,63+(cos(((i*2.27)*3.14)/180)*40)); + } + + myGLCD.setColor(255,255,0); + myGLCD.print("Tan", 5, 39); + for (int i=1; i<158; i++) + { + myGLCD.drawPixel(i,63+(tan(((i*2.27)*3.14)/180))); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,158,113); + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(79, 14, 79, 113); + myGLCD.drawLine(1, 63, 158, 63); + +// Draw a moving sinewave + x=1; + for (int i=1; i<(158*20); i++) + { + x++; + if (x==159) + x=1; + if (i>159) + { + if ((x==79)||(buf[x-1]==63)) + myGLCD.setColor(0,0,255); + else + myGLCD.setColor(0,0,0); + myGLCD.drawPixel(x,buf[x-1]); + } + myGLCD.setColor(0,255,255); + y=63+(sin(((i*2.5)*3.14)/180)*(40-(i / 100))); + myGLCD.drawPixel(x,y); + buf[x-1]=y; + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,158,113); + +// Draw some filled rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRect(39+(i*10), 23+(i*10), 59+(i*10), 43+(i*10)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,158,113); + +// Draw some filled, rounded rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRoundRect(99-(i*10), 23+(i*10), 119-(i*10), 43+(i*10)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,158,113); + +// Draw some filled circles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillCircle(49+(i*10),33+(i*10), 15); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,158,113); + +// Draw some lines in a pattern + myGLCD.setColor (255,0,0); + for (int i=14; i<113; i+=5) + { + myGLCD.drawLine(1, i, (i*1.44)-10, 112); + } + myGLCD.setColor (255,0,0); + for (int i=112; i>15; i-=5) + { + myGLCD.drawLine(158, i, (i*1.44)-12, 14); + } + myGLCD.setColor (0,255,255); + for (int i=112; i>15; i-=5) + { + myGLCD.drawLine(1, i, 172-(i*1.44), 14); + } + myGLCD.setColor (0,255,255); + for (int i=15; i<112; i+=5) + { + myGLCD.drawLine(158, i, 171-(i*1.44), 112); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,158,113); + +// Draw some random circles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=22+random(116); + y=35+random(57); + r=random(20); + myGLCD.drawCircle(x, y, r); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,158,113); + +// Draw some random rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(156); + y=16+random(95); + x2=2+random(156); + y2=16+random(95); + myGLCD.drawRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,158,113); + +// Draw some random rounded rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(156); + y=16+random(95); + x2=2+random(156); + y2=16+random(95); + myGLCD.drawRoundRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,158,113); + + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(156); + y=16+random(95); + x2=2+random(156); + y2=16+random(95); + myGLCD.drawLine(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,158,113); + + for (int i=0; i<5000; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + myGLCD.drawPixel(2+random(156), 16+random(95)); + } + + delay(2000); + + myGLCD.fillScr(0, 0, 255); + myGLCD.setColor(255, 0, 0); + myGLCD.fillRoundRect(10, 17, 149, 72); + + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("That's it!", CENTER, 20); + myGLCD.print("Restarting in a", CENTER, 45); + myGLCD.print("few seconds...", CENTER, 57); + + myGLCD.setColor(0, 255, 0); + myGLCD.setBackColor(0, 0, 255); + myGLCD.print("Runtime: (msecs)", CENTER, 103); + myGLCD.printNumI(millis(), CENTER, 115); + + delay (10000); +} + diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_220x176/UTFT_Demo_220x176.ino b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_220x176/UTFT_Demo_220x176.ino new file mode 100644 index 0000000..b6b3ab2 --- /dev/null +++ b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_220x176/UTFT_Demo_220x176.ino @@ -0,0 +1,330 @@ +// UTFT_Demo_220x176 (C)2014 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of how to use most of the functions +// of the library with a supported display modules. +// +// This demo was made for modules with a screen resolution +// of 220x176 pixels. +// +// This program requires the UTFT library. +// + +#include + +// Declare which fonts we will be using +extern uint8_t SmallFont[]; + +// Set the pins to the correct ones for your development shield +// ------------------------------------------------------------ +// Standard Arduino Mega/Due shield : ,38,39,40,41 +// CTE TFT LCD/SD Shield for Arduino Due : ,25,26,27,28 +// Teensy 3.x TFT Test Board : ,23,22, 3, 4 +// ElecHouse TFT LCD/SD Shield for Arduino Due : ,22,23,31,33 +// +// Remember to change the model parameter to suit your display module! +UTFT myGLCD(ITDB22,38,39,40,41); + +void setup() +{ + randomSeed(analogRead(0)); + +// Setup the LCD + myGLCD.InitLCD(); + myGLCD.setFont(SmallFont); +} + +void loop() +{ + int buf[218]; + int x, x2; + int y, y2; + int r; + +// Clear the screen and draw the frame + myGLCD.clrScr(); + + myGLCD.setColor(255, 0, 0); + myGLCD.fillRect(0, 0, 219, 13); + myGLCD.setColor(64, 64, 64); + myGLCD.fillRect(0, 162, 219, 175); + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("** Universal TFT Library **", CENTER, 1); + myGLCD.setBackColor(64, 64, 64); + myGLCD.setColor(255,255,0); + myGLCD.print("> elec.henningkarlsen.com <", CENTER, 163); + + myGLCD.setColor(0, 0, 255); + myGLCD.drawRect(0, 14, 219, 161); + +// Draw crosshairs + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(109, 15, 109, 160); + myGLCD.drawLine(1, 88, 218, 88); + + for (int i=9; i<210; i+=10) + myGLCD.drawLine(i, 86, i, 90); + for (int i=19; i<155; i+=10) + myGLCD.drawLine(107, i, 111, i); + +// Draw sin-, cos- and tan-lines + myGLCD.setColor(0,255,255); + myGLCD.print("Sin", 5, 15); + for (int i=1; i<218; i++) + { + myGLCD.drawPixel(i,88+(sin(((i*1.65)*3.14)/180)*70)); + } + + myGLCD.setColor(255,0,0); + myGLCD.print("Cos", 5, 27); + for (int i=1; i<218; i++) + { + myGLCD.drawPixel(i,88+(cos(((i*1.65)*3.14)/180)*70)); + } + + myGLCD.setColor(255,255,0); + myGLCD.print("Tan", 5, 39); + for (int i=1; i<218; i++) + { + myGLCD.drawPixel(i,88+(tan(((i*1.65)*3.14)/180))); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(109, 15, 109, 160); + myGLCD.drawLine(1, 88, 218, 88); + +// Draw a moving sinewave + x=1; + for (int i=1; i<(218*20); i++) + { + x++; + if (x==219) + x=1; + if (i>219) + { + if ((x==109)||(buf[x-1]==88)) + myGLCD.setColor(0,0,255); + else + myGLCD.setColor(0,0,0); + myGLCD.drawPixel(x,buf[x-1]); + } + myGLCD.setColor(0,255,255); + y=88+(sin(((i*1.6)*3.14)/180)*(65-(i / 100))); + myGLCD.drawPixel(x,y); + buf[x-1]=y; + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + +// Draw some filled rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRect(44+(i*15), 23+(i*15), 88+(i*15), 63+(i*15)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + +// Draw some filled, rounded rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRoundRect(132-(i*15), 23+(i*15), 172-(i*15), 63+(i*15)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + +// Draw some filled circles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillCircle(64+(i*15),43+(i*15), 20); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + +// Draw some lines in a pattern + myGLCD.setColor (255,0,0); + for (int i=15; i<160; i+=5) + { + myGLCD.drawLine(1, i, (i*1.44)-10, 160); + } + myGLCD.setColor (255,0,0); + for (int i=160; i>15; i-=5) + { + myGLCD.drawLine(218, i, (i*1.44)-12, 15); + } + myGLCD.setColor (0,255,255); + for (int i=160; i>15; i-=5) + { + myGLCD.drawLine(1, i, 232-(i*1.44), 15); + } + myGLCD.setColor (0,255,255); + for (int i=15; i<160; i+=5) + { + myGLCD.drawLine(218, i, 231-(i*1.44), 160); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + +// Draw some random circles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=22+random(176); + y=35+random(105); + r=random(20); + myGLCD.drawCircle(x, y, r); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + +// Draw some random rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(216); + y=16+random(143); + x2=2+random(216); + y2=16+random(143); + myGLCD.drawRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + +// Draw some random rounded rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(216); + y=16+random(143); + x2=2+random(216); + y2=16+random(143); + myGLCD.drawRoundRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(216); + y=16+random(143); + x2=2+random(216); + y2=16+random(143); + myGLCD.drawLine(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + + for (int i=0; i<10000; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + myGLCD.drawPixel(2+random(216), 16+random(143)); + } + + delay(2000); + + myGLCD.fillScr(0, 0, 255); + myGLCD.setColor(255, 0, 0); + myGLCD.fillRoundRect(40, 57, 179, 119); + + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("That's it!", CENTER, 62); + myGLCD.print("Restarting in a", CENTER, 88); + myGLCD.print("few seconds...", CENTER, 101); + + myGLCD.setColor(0, 255, 0); + myGLCD.setBackColor(0, 0, 255); + myGLCD.print("Runtime: (msecs)", CENTER, 146); + myGLCD.printNumI(millis(), CENTER, 161); + + delay (10000); +} + diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_220x176_Serial/UTFT_Demo_220x176_Serial.ino b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_220x176_Serial/UTFT_Demo_220x176_Serial.ino new file mode 100644 index 0000000..7ed75ac --- /dev/null +++ b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_220x176_Serial/UTFT_Demo_220x176_Serial.ino @@ -0,0 +1,323 @@ +// UTFT_Demo_220x176_Serial (C)2014 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of how to use most of the functions +// of the library with a supported display modules. +// +// This demo was made for serial modules with a screen resolution +// of 220x176 pixels. +// +// This program requires the UTFT library. +// + +#include + +// Declare which fonts we will be using +extern uint8_t SmallFont[]; + +// Usage: myGLCD(, SDA, SCL, CS, RST[, RS]); +UTFT myGLCD(ITDB22SP,19,18,0,16); // Remember to change the model parameter to suit your display module! + +void setup() +{ + randomSeed(analogRead(0)); + +// Setup the LCD + myGLCD.InitLCD(); + myGLCD.setFont(SmallFont); +} + +void loop() +{ + int buf[218]; + int x, x2; + int y, y2; + int r; + +// Clear the screen and draw the frame + myGLCD.clrScr(); + + myGLCD.setColor(255, 0, 0); + myGLCD.fillRect(0, 0, 219, 13); + myGLCD.setColor(64, 64, 64); + myGLCD.fillRect(0, 162, 219, 175); + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("** Universal TFT Library **", CENTER, 1); + myGLCD.setBackColor(64, 64, 64); + myGLCD.setColor(255,255,0); + myGLCD.print("> elec.henningkarlsen.com <", CENTER, 163); + + myGLCD.setColor(0, 0, 255); + myGLCD.drawRect(0, 14, 219, 161); + +// Draw crosshairs + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(109, 15, 109, 160); + myGLCD.drawLine(1, 88, 218, 88); + + for (int i=9; i<210; i+=10) + myGLCD.drawLine(i, 86, i, 90); + for (int i=19; i<155; i+=10) + myGLCD.drawLine(107, i, 111, i); + +// Draw sin-, cos- and tan-lines + myGLCD.setColor(0,255,255); + myGLCD.print("Sin", 5, 15); + for (int i=1; i<218; i++) + { + myGLCD.drawPixel(i,88+(sin(((i*1.65)*3.14)/180)*70)); + } + + myGLCD.setColor(255,0,0); + myGLCD.print("Cos", 5, 27); + for (int i=1; i<218; i++) + { + myGLCD.drawPixel(i,88+(cos(((i*1.65)*3.14)/180)*70)); + } + + myGLCD.setColor(255,255,0); + myGLCD.print("Tan", 5, 39); + for (int i=1; i<218; i++) + { + myGLCD.drawPixel(i,88+(tan(((i*1.65)*3.14)/180))); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(109, 15, 109, 160); + myGLCD.drawLine(1, 88, 218, 88); + +// Draw a moving sinewave + x=1; + for (int i=1; i<(218*20); i++) + { + x++; + if (x==219) + x=1; + if (i>219) + { + if ((x==109)||(buf[x-1]==88)) + myGLCD.setColor(0,0,255); + else + myGLCD.setColor(0,0,0); + myGLCD.drawPixel(x,buf[x-1]); + } + myGLCD.setColor(0,255,255); + y=88+(sin(((i*1.6)*3.14)/180)*(65-(i / 100))); + myGLCD.drawPixel(x,y); + buf[x-1]=y; + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + +// Draw some filled rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRect(44+(i*15), 23+(i*15), 88+(i*15), 63+(i*15)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + +// Draw some filled, rounded rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRoundRect(132-(i*15), 23+(i*15), 172-(i*15), 63+(i*15)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + +// Draw some filled circles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillCircle(64+(i*15),43+(i*15), 20); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + +// Draw some lines in a pattern + myGLCD.setColor (255,0,0); + for (int i=15; i<160; i+=5) + { + myGLCD.drawLine(1, i, (i*1.44)-10, 160); + } + myGLCD.setColor (255,0,0); + for (int i=160; i>15; i-=5) + { + myGLCD.drawLine(218, i, (i*1.44)-12, 15); + } + myGLCD.setColor (0,255,255); + for (int i=160; i>15; i-=5) + { + myGLCD.drawLine(1, i, 232-(i*1.44), 15); + } + myGLCD.setColor (0,255,255); + for (int i=15; i<160; i+=5) + { + myGLCD.drawLine(218, i, 231-(i*1.44), 160); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,161); + +// Draw some random circles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=22+random(176); + y=35+random(105); + r=random(20); + myGLCD.drawCircle(x, y, r); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + +// Draw some random rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(216); + y=16+random(143); + x2=2+random(216); + y2=16+random(143); + myGLCD.drawRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + +// Draw some random rounded rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(216); + y=16+random(143); + x2=2+random(216); + y2=16+random(143); + myGLCD.drawRoundRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(216); + y=16+random(143); + x2=2+random(216); + y2=16+random(143); + myGLCD.drawLine(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + + for (int i=0; i<10000; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + myGLCD.drawPixel(2+random(216), 16+random(143)); + } + + delay(2000); + + myGLCD.fillScr(0, 0, 255); + myGLCD.setColor(255, 0, 0); + myGLCD.fillRoundRect(40, 57, 179, 119); + + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("That's it!", CENTER, 62); + myGLCD.print("Restarting in a", CENTER, 88); + myGLCD.print("few seconds...", CENTER, 101); + + myGLCD.setColor(0, 255, 0); + myGLCD.setBackColor(0, 0, 255); + myGLCD.print("Runtime: (msecs)", CENTER, 146); + myGLCD.printNumI(millis(), CENTER, 161); + + delay (10000); +} + diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_320x240/UTFT_Demo_320x240.ino b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_320x240/UTFT_Demo_320x240.ino new file mode 100644 index 0000000..ce458f3 --- /dev/null +++ b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_320x240/UTFT_Demo_320x240.ino @@ -0,0 +1,329 @@ +// UTFT_Demo_320x240 (C)2014 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of how to use most of the functions +// of the library with a supported display modules. +// +// This demo was made for modules with a screen resolution +// of 320x240 pixels. +// +// This program requires the UTFT library. +// + +#include + +// Declare which fonts we will be using +extern uint8_t SmallFont[]; + +// Set the pins to the correct ones for your development shield +// ------------------------------------------------------------ +// Standard Arduino Mega/Due shield : ,38,39,40,41 +// CTE TFT LCD/SD Shield for Arduino Due : ,25,26,27,28 +// Teensy 3.x TFT Test Board : ,23,22, 3, 4 +// ElecHouse TFT LCD/SD Shield for Arduino Due : ,22,23,31,33 +// +// Remember to change the model parameter to suit your display module! +UTFT myGLCD(ITDB32S,38,39,40,41); + +void setup() +{ + randomSeed(analogRead(0)); + +// Setup the LCD + myGLCD.InitLCD(); + myGLCD.setFont(SmallFont); +} + +void loop() +{ + int buf[318]; + int x, x2; + int y, y2; + int r; + +// Clear the screen and draw the frame + myGLCD.clrScr(); + + myGLCD.setColor(255, 0, 0); + myGLCD.fillRect(0, 0, 319, 13); + myGLCD.setColor(64, 64, 64); + myGLCD.fillRect(0, 226, 319, 239); + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("* Universal Color TFT Display Library *", CENTER, 1); + myGLCD.setBackColor(64, 64, 64); + myGLCD.setColor(255,255,0); + myGLCD.print("", CENTER, 227); + + myGLCD.setColor(0, 0, 255); + myGLCD.drawRect(0, 14, 319, 225); + +// Draw crosshairs + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(159, 15, 159, 224); + myGLCD.drawLine(1, 119, 318, 119); + for (int i=9; i<310; i+=10) + myGLCD.drawLine(i, 117, i, 121); + for (int i=19; i<220; i+=10) + myGLCD.drawLine(157, i, 161, i); + +// Draw sin-, cos- and tan-lines + myGLCD.setColor(0,255,255); + myGLCD.print("Sin", 5, 15); + for (int i=1; i<318; i++) + { + myGLCD.drawPixel(i,119+(sin(((i*1.13)*3.14)/180)*95)); + } + + myGLCD.setColor(255,0,0); + myGLCD.print("Cos", 5, 27); + for (int i=1; i<318; i++) + { + myGLCD.drawPixel(i,119+(cos(((i*1.13)*3.14)/180)*95)); + } + + myGLCD.setColor(255,255,0); + myGLCD.print("Tan", 5, 39); + for (int i=1; i<318; i++) + { + myGLCD.drawPixel(i,119+(tan(((i*1.13)*3.14)/180))); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(159, 15, 159, 224); + myGLCD.drawLine(1, 119, 318, 119); + +// Draw a moving sinewave + x=1; + for (int i=1; i<(318*20); i++) + { + x++; + if (x==319) + x=1; + if (i>319) + { + if ((x==159)||(buf[x-1]==119)) + myGLCD.setColor(0,0,255); + else + myGLCD.setColor(0,0,0); + myGLCD.drawPixel(x,buf[x-1]); + } + myGLCD.setColor(0,255,255); + y=119+(sin(((i*1.1)*3.14)/180)*(90-(i / 100))); + myGLCD.drawPixel(x,y); + buf[x-1]=y; + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some filled rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRect(70+(i*20), 30+(i*20), 130+(i*20), 90+(i*20)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some filled, rounded rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRoundRect(190-(i*20), 30+(i*20), 250-(i*20), 90+(i*20)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some filled circles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillCircle(100+(i*20),60+(i*20), 30); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some lines in a pattern + myGLCD.setColor (255,0,0); + for (int i=15; i<224; i+=5) + { + myGLCD.drawLine(1, i, (i*1.44)-10, 224); + } + myGLCD.setColor (255,0,0); + for (int i=224; i>15; i-=5) + { + myGLCD.drawLine(318, i, (i*1.44)-11, 15); + } + myGLCD.setColor (0,255,255); + for (int i=224; i>15; i-=5) + { + myGLCD.drawLine(1, i, 331-(i*1.44), 15); + } + myGLCD.setColor (0,255,255); + for (int i=15; i<224; i+=5) + { + myGLCD.drawLine(318, i, 330-(i*1.44), 224); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some random circles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=32+random(256); + y=45+random(146); + r=random(30); + myGLCD.drawCircle(x, y, r); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some random rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(316); + y=16+random(207); + x2=2+random(316); + y2=16+random(207); + myGLCD.drawRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some random rounded rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(316); + y=16+random(207); + x2=2+random(316); + y2=16+random(207); + myGLCD.drawRoundRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(316); + y=16+random(209); + x2=2+random(316); + y2=16+random(209); + myGLCD.drawLine(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + + for (int i=0; i<10000; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + myGLCD.drawPixel(2+random(316), 16+random(209)); + } + + delay(2000); + + myGLCD.fillScr(0, 0, 255); + myGLCD.setColor(255, 0, 0); + myGLCD.fillRoundRect(80, 70, 239, 169); + + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("That's it!", CENTER, 93); + myGLCD.print("Restarting in a", CENTER, 119); + myGLCD.print("few seconds...", CENTER, 132); + + myGLCD.setColor(0, 255, 0); + myGLCD.setBackColor(0, 0, 255); + myGLCD.print("Runtime: (msecs)", CENTER, 210); + myGLCD.printNumI(millis(), CENTER, 225); + + delay (10000); +} + diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_320x240_Serial/UTFT_Demo_320x240_Serial.ino b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_320x240_Serial/UTFT_Demo_320x240_Serial.ino new file mode 100644 index 0000000..19da792 --- /dev/null +++ b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_320x240_Serial/UTFT_Demo_320x240_Serial.ino @@ -0,0 +1,343 @@ +// UTFT_Demo_320x240_Serial (C)2014 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of how to use most of the functions +// of the library with a supported display modules. +// +// This demo was made for modules with a screen resolution +// of 320x240 pixels. +// +// This program requires the UTFT library. +// +// ******************************************************************** +// * IMPORTANT: Read the comments in the setup() function when * +// * using the DisplayModule DM-TFT28-105. * +// ******************************************************************** +// + +#include + +// Declare which fonts we will be using +extern uint8_t SmallFont[]; + +// Usage: myGLCD(, SDA, SCL, CS, RST[, RS]); +//UTFT myGLCD(TFT01_22SP,9,8,12,11,10); // ElecFreaks TFT01-2.2SP +UTFT myGLCD(DMTFT28105,MOSI,SCK,10,NOTINUSE,9); // DisplayModule DM-TFT28-105 + +void setup() +{ +// DisplayModule +// ------------- +// The following 4 lines are needed for the DM-TFT28-105 display +// module to set the SS/CS pins for the other devices connected +// to the Arduino SPI pins. If you are using any other display +// module these lines should be commented out. +// ------------------------------------------------------------- + pinMode(10,OUTPUT); digitalWrite(10,HIGH); // TFT SS/CE + pinMode(8, OUTPUT); digitalWrite(8, HIGH); // SD card SS/CE + pinMode(6, OUTPUT); digitalWrite(6, HIGH); // Flash chip SS/CE + pinMode(4, OUTPUT); digitalWrite(4, HIGH); // Touch controller SS/CE +// ------------------------------------------------------------- + + +// Just get some random numbers + randomSeed(analogRead(0)); + +// Setup the LCD + myGLCD.InitLCD(); + myGLCD.setFont(SmallFont); +} + +void loop() +{ + int buf[318]; + int x, x2; + int y, y2; + int r; + +// Clear the screen and draw the frame + myGLCD.clrScr(); + + myGLCD.setColor(255, 0, 0); + myGLCD.fillRect(0, 0, 319, 13); + myGLCD.setColor(64, 64, 64); + myGLCD.fillRect(0, 226, 319, 239); + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("* Universal Color TFT Display Library *", CENTER, 1); + myGLCD.setBackColor(64, 64, 64); + myGLCD.setColor(255,255,0); + myGLCD.print("", CENTER, 227); + + myGLCD.setColor(0, 0, 255); + myGLCD.drawRect(0, 14, 319, 225); + +// Draw crosshairs + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(159, 15, 159, 224); + myGLCD.drawLine(1, 119, 318, 119); + for (int i=9; i<310; i+=10) + myGLCD.drawLine(i, 117, i, 121); + for (int i=19; i<220; i+=10) + myGLCD.drawLine(157, i, 161, i); + +// Draw sin-, cos- and tan-lines + myGLCD.setColor(0,255,255); + myGLCD.print("Sin", 5, 15); + for (int i=1; i<318; i++) + { + myGLCD.drawPixel(i,119+(sin(((i*1.13)*3.14)/180)*95)); + } + + myGLCD.setColor(255,0,0); + myGLCD.print("Cos", 5, 27); + for (int i=1; i<318; i++) + { + myGLCD.drawPixel(i,119+(cos(((i*1.13)*3.14)/180)*95)); + } + + myGLCD.setColor(255,255,0); + myGLCD.print("Tan", 5, 39); + for (int i=1; i<318; i++) + { + myGLCD.drawPixel(i,119+(tan(((i*1.13)*3.14)/180))); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(159, 15, 159, 224); + myGLCD.drawLine(1, 119, 318, 119); + +// Draw a moving sinewave + x=1; + for (int i=1; i<(318*20); i++) + { + x++; + if (x==319) + x=1; + if (i>319) + { + if ((x==159)||(buf[x-1]==119)) + myGLCD.setColor(0,0,255); + else + myGLCD.setColor(0,0,0); + myGLCD.drawPixel(x,buf[x-1]); + } + myGLCD.setColor(0,255,255); + y=119+(sin(((i*1.1)*3.14)/180)*(90-(i / 100))); + myGLCD.drawPixel(x,y); + buf[x-1]=y; + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some filled rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRect(70+(i*20), 30+(i*20), 130+(i*20), 90+(i*20)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some filled, rounded rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRoundRect(190-(i*20), 30+(i*20), 250-(i*20), 90+(i*20)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some filled circles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillCircle(100+(i*20),60+(i*20), 30); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some lines in a pattern + myGLCD.setColor (255,0,0); + for (int i=15; i<224; i+=5) + { + myGLCD.drawLine(1, i, (i*1.44)-10, 224); + } + myGLCD.setColor (255,0,0); + for (int i=224; i>15; i-=5) + { + myGLCD.drawLine(318, i, (i*1.44)-11, 15); + } + myGLCD.setColor (0,255,255); + for (int i=224; i>15; i-=5) + { + myGLCD.drawLine(1, i, 331-(i*1.44), 15); + } + myGLCD.setColor (0,255,255); + for (int i=15; i<224; i+=5) + { + myGLCD.drawLine(318, i, 330-(i*1.44), 224); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some random circles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=32+random(256); + y=45+random(146); + r=random(30); + myGLCD.drawCircle(x, y, r); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some random rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(316); + y=16+random(207); + x2=2+random(316); + y2=16+random(207); + myGLCD.drawRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some random rounded rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(316); + y=16+random(207); + x2=2+random(316); + y2=16+random(207); + myGLCD.drawRoundRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(316); + y=16+random(209); + x2=2+random(316); + y2=16+random(209); + myGLCD.drawLine(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + + for (int i=0; i<10000; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + myGLCD.drawPixel(2+random(316), 16+random(209)); + } + + delay(2000); + + myGLCD.fillScr(0, 0, 255); + myGLCD.setColor(255, 0, 0); + myGLCD.fillRoundRect(80, 70, 239, 169); + + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("That's it!", CENTER, 93); + myGLCD.print("Restarting in a", CENTER, 119); + myGLCD.print("few seconds...", CENTER, 132); + + myGLCD.setColor(0, 255, 0); + myGLCD.setBackColor(0, 0, 255); + myGLCD.print("Runtime: (msecs)", CENTER, 210); + myGLCD.printNumI(millis(), CENTER, 225); + + delay (10000); +} + diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_400x240/UTFT_Demo_400x240.ino b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_400x240/UTFT_Demo_400x240.ino new file mode 100644 index 0000000..078902c --- /dev/null +++ b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_400x240/UTFT_Demo_400x240.ino @@ -0,0 +1,331 @@ +// UTFT_Demo_400x240 (C)2014 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of how to use most of the functions +// of the library with a supported display modules. +// +// This demo was made for modules with a screen resolution +// of 400x240 pixels. +// +// This program requires the UTFT library. +// + +#include + +// Declare which fonts we will be using +extern uint8_t SmallFont[]; + +// Set the pins to the correct ones for your development shield +// ------------------------------------------------------------ +// Standard Arduino Mega/Due shield : ,38,39,40,41 +// CTE TFT LCD/SD Shield for Arduino Due : ,25,26,27,28 +// Teensy 3.x TFT Test Board : ,23,22, 3, 4 +// ElecHouse TFT LCD/SD Shield for Arduino Due : ,22,23,31,33 +// +// Remember to change the model parameter to suit your display module! +UTFT myGLCD(ITDB32WD,38,39,40,41); + +void setup() +{ + randomSeed(analogRead(0)); + +// Setup the LCD + myGLCD.InitLCD(); + myGLCD.setFont(SmallFont); +} + +void loop() +{ + int buf[398]; + int x, x2; + int y, y2; + int r; + +// Clear the screen and draw the frame + myGLCD.clrScr(); + + myGLCD.setColor(255, 0, 0); + myGLCD.fillRect(0, 0, 399, 13); + myGLCD.setColor(64, 64, 64); + myGLCD.fillRect(0, 226, 399, 239); + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("*** Universal Color TFT Display Library ***", CENTER, 1); + myGLCD.setBackColor(64, 64, 64); + myGLCD.setColor(255,255,0); + myGLCD.print("< http://electronics.henningkarlsen.com >", CENTER, 227); + + myGLCD.setColor(0, 0, 255); + myGLCD.drawRect(0, 14, 399, 225); + +// Draw crosshairs + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(199, 15, 199, 224); + myGLCD.drawLine(1, 119, 398, 119); + for (int i=9; i<390; i+=10) + myGLCD.drawLine(i, 117, i, 121); + for (int i=19; i<220; i+=10) + myGLCD.drawLine(197, i, 201, i); + +// Draw sin-, cos- and tan-lines + myGLCD.setColor(0,255,255); + myGLCD.print("Sin", 5, 15); + for (int i=1; i<398; i++) + { + myGLCD.drawPixel(i,119+(sin(((i*0.9)*3.14)/180)*95)); + } + + myGLCD.setColor(255,0,0); + myGLCD.print("Cos", 5, 27); + for (int i=1; i<398; i++) + { + myGLCD.drawPixel(i,119+(cos(((i*0.9)*3.14)/180)*95)); + } + + myGLCD.setColor(255,255,0); + myGLCD.print("Tan", 5, 39); + for (int i=1; i<398; i++) + { + y=119+(tan(((i*0.9)*3.14)/180)); + if ((y>15) && (y<224)) + myGLCD.drawPixel(i,y); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,398,224); + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(199, 15, 199, 224); + myGLCD.drawLine(1, 119, 398, 119); + +// Draw a moving sinewave + x=1; + for (int i=1; i<(398*20); i++) + { + x++; + if (x==399) + x=1; + if (i>399) + { + if ((x==199)||(buf[x-1]==119)) + myGLCD.setColor(0,0,255); + else + myGLCD.setColor(0,0,0); + myGLCD.drawPixel(x,buf[x-1]); + } + myGLCD.setColor(0,255,255); + y=119+(sin(((i)*3.14)/180)*(90-(i / 100))); + myGLCD.drawPixel(x,y); + buf[x-1]=y; + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,398,224); + +// Draw some filled rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRect(110+(i*20), 30+(i*20), 170+(i*20), 90+(i*20)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,398,224); + +// Draw some filled, rounded rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRoundRect(230-(i*20), 30+(i*20), 290-(i*20), 90+(i*20)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,398,224); + +// Draw some filled circles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillCircle(110+(i*30),60+(i*20), 30); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,398,224); + +// Draw some lines in a pattern + myGLCD.setColor (255,0,0); + for (int i=15; i<224; i+=5) + { + myGLCD.drawLine(1, i, (i*1.77)-10, 224); + } + myGLCD.setColor (255,0,0); + for (int i=224; i>15; i-=5) + { + myGLCD.drawLine(398, i, (i*1.77)-11, 15); + } + myGLCD.setColor (0,255,255); + for (int i=224; i>15; i-=5) + { + myGLCD.drawLine(1, i, 411-(i*1.77), 15); + } + myGLCD.setColor (0,255,255); + for (int i=15; i<224; i+=5) + { + myGLCD.drawLine(398, i, 410-(i*1.77), 224); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,398,224); + +// Draw some random circles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=32+random(336); + y=45+random(146); + r=random(30); + myGLCD.drawCircle(x, y, r); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,398,224); + +// Draw some random rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(396); + y=16+random(207); + x2=2+random(396); + y2=16+random(207); + myGLCD.drawRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,398,224); + +// Draw some random rounded rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(396); + y=16+random(207); + x2=2+random(396); + y2=16+random(207); + myGLCD.drawRoundRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,398,224); + + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(396); + y=16+random(209); + x2=2+random(396); + y2=16+random(209); + myGLCD.drawLine(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,398,224); + + for (int i=0; i<10000; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + myGLCD.drawPixel(2+random(396), 16+random(209)); + } + + delay(2000); + + myGLCD.fillScr(0, 0, 255); + myGLCD.setColor(255, 0, 0); + myGLCD.fillRoundRect(120, 70, 279, 169); + + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("That's it!", CENTER, 93); + myGLCD.print("Restarting in a", CENTER, 119); + myGLCD.print("few seconds...", CENTER, 132); + + myGLCD.setColor(0, 255, 0); + myGLCD.setBackColor(0, 0, 255); + myGLCD.print("Runtime: (msecs)", CENTER, 210); + myGLCD.printNumI(millis(), CENTER, 225); + + delay (10000); +} + diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_480x272/UTFT_Demo_480x272.ino b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_480x272/UTFT_Demo_480x272.ino new file mode 100644 index 0000000..41c1973 --- /dev/null +++ b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_480x272/UTFT_Demo_480x272.ino @@ -0,0 +1,328 @@ +// UTFT_Demo_480x272 (C)2014 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of how to use most of the functions +// of the library with a supported display modules. +// +// This demo was made for modules with a screen resolution +// of 480x272 pixels. +// +// This program requires the UTFT library. +// + +#include + +// Declare which fonts we will be using +extern uint8_t SmallFont[]; + +// Set the pins to the correct ones for your development shield +// ------------------------------------------------------------ +// Standard Arduino Mega/Due shield : ,38,39,40,41 +// CTE TFT LCD/SD Shield for Arduino Due : ,25,26,27,28 +// Teensy 3.x TFT Test Board : ,23,22, 3, 4 +// ElecHouse TFT LCD/SD Shield for Arduino Due : ,22,23,31,33 +// +// Remember to change the model parameter to suit your display module! +UTFT myGLCD(ITDB43,38,39,40,41); + +void setup() +{ + randomSeed(analogRead(0)); + +// Setup the LCD + myGLCD.InitLCD(); + myGLCD.setFont(SmallFont); +} + +void loop() +{ + int buf[478]; + int x, x2; + int y, y2; + int r; + +// Clear the screen and draw the frame + myGLCD.clrScr(); + + myGLCD.setColor(255, 0, 0); + myGLCD.fillRect(0, 0, 479, 13); + myGLCD.setColor(64, 64, 64); + myGLCD.fillRect(0, 258, 479, 271); + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("* Universal Color TFT Display Library *", CENTER, 1); + myGLCD.setBackColor(64, 64, 64); + myGLCD.setColor(255,255,0); + myGLCD.print("", CENTER, 259); + + myGLCD.setColor(0, 0, 255); + myGLCD.drawRect(0, 14, 479, 257); + +// Draw crosshairs + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(239, 15, 239, 256); + myGLCD.drawLine(1, 135, 478, 135); + for (int i=9; i<470; i+=10) + myGLCD.drawLine(i, 133, i, 138); + for (int i=15; i<256; i+=10) + myGLCD.drawLine(237, i, 241, i); + +// Draw sin-, cos- and tan-lines + myGLCD.setColor(0,255,255); + myGLCD.print("Sin", 5, 15); + for (int i=1; i<478; i++) + { + myGLCD.drawPixel(i,135+(sin(((i*1.13)*3.14)/180)*95)); + } + + myGLCD.setColor(255,0,0); + myGLCD.print("Cos", 5, 27); + for (int i=1; i<478; i++) + { + myGLCD.drawPixel(i,135+(cos(((i*1.13)*3.14)/180)*95)); + } + + myGLCD.setColor(255,255,0); + myGLCD.print("Tan", 5, 39); + for (int i=1; i<478; i++) + { + myGLCD.drawPixel(i,135+(tan(((i*1.13)*3.14)/180))); + } + + delay(2000); + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,256); + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(239, 15, 239, 256); + myGLCD.drawLine(1, 135, 478, 135); + +// Draw a moving sinewave + x=1; + for (int i=1; i<(478*20); i++) + { + x++; + if (x==479) + x=1; + if (i>479) + { + if ((x==239)||(buf[x-1]==135)) + myGLCD.setColor(0,0,255); + else + myGLCD.setColor(0,0,0); + myGLCD.drawPixel(x,buf[x-1]); + } + myGLCD.setColor(0,255,255); + y=135+(sin(((i*1.65)*3.14)/180)*(90-(i / 100))); + myGLCD.drawPixel(x,y); + buf[x-1]=y; + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,256); + +// Draw some filled rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRect(150+(i*20), 46+(i*20), 210+(i*20), 106+(i*20)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,256); + +// Draw some filled, rounded rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRoundRect(330-(i*20), 46+(i*20), 270-(i*20), 106+(i*20)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,256); + +// Draw some filled circles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillCircle(180+(i*20),75+(i*20), 30); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,256); + +// Draw some lines in a pattern + myGLCD.setColor (255,0,0); + for (int i=15; i<256; i+=5) + { + myGLCD.drawLine(1, i, (i*1.88)-10, 256); + } + myGLCD.setColor (255,0,0); + for (int i=256; i>15; i-=5) + { + myGLCD.drawLine(478, i, (i*1.88)-11, 15); + } + myGLCD.setColor (0,255,255); + for (int i=256; i>15; i-=5) + { + myGLCD.drawLine(1, i, 491-(i*1.88), 15); + } + myGLCD.setColor (0,255,255); + for (int i=15; i<256; i+=5) + { + myGLCD.drawLine(478, i, 490-(i*1.88), 256); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,256); + +// Draw some random circles + for (int i=0; i<150; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=32+random(416); + y=45+random(178); + r=random(30); + myGLCD.drawCircle(x, y, r); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,256); + +// Draw some random rectangles + for (int i=0; i<150; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(476); + y=16+random(239); + x2=2+random(476); + y2=16+random(239); + myGLCD.drawRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,256); + +// Draw some random rounded rectangles + for (int i=0; i<150; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(476); + y=16+random(239); + x2=2+random(476); + y2=16+random(239); + myGLCD.drawRoundRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,256); + + for (int i=0; i<150; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(476); + y=16+random(239); + x2=2+random(476); + y2=16+random(239); + myGLCD.drawLine(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,256); + + for (int i=0; i<10000; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + myGLCD.drawPixel(2+random(476), 16+random(239)); + } + + delay(2000); + + myGLCD.fillScr(0, 0, 255); + myGLCD.setColor(255, 0, 0); + myGLCD.fillRoundRect(160, 70, 319, 169); + + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("That's it!", CENTER, 93); + myGLCD.print("Restarting in a", CENTER, 119); + myGLCD.print("few seconds...", CENTER, 132); + + myGLCD.setColor(0, 255, 0); + myGLCD.setBackColor(0, 0, 255); + myGLCD.print("Runtime: (msecs)", CENTER, 243); + myGLCD.printNumI(millis(), CENTER, 258); + + delay (10000); +} + diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_480x320/UTFT_Demo_480x320.ino b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_480x320/UTFT_Demo_480x320.ino new file mode 100644 index 0000000..6746a93 --- /dev/null +++ b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_480x320/UTFT_Demo_480x320.ino @@ -0,0 +1,329 @@ +// UTFT_Demo_480x320 (C)2014 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of how to use most of the functions +// of the library with a supported display modules. +// +// This demo was made for modules with a screen resolution +// of 480x320 pixels. +// +// This program requires the UTFT library. +// + +#include + +// Declare which fonts we will be using +extern uint8_t SmallFont[]; + +// Set the pins to the correct ones for your development shield +// ------------------------------------------------------------ +// Standard Arduino Mega/Due shield : ,38,39,40,41 +// CTE TFT LCD/SD Shield for Arduino Due : ,25,26,27,28 +// Teensy 3.x TFT Test Board : ,23,22, 3, 4 +// ElecHouse TFT LCD/SD Shield for Arduino Due : ,22,23,31,33 +// +// Remember to change the model parameter to suit your display module! +UTFT myGLCD(CTE32HR,25,26,27,28); + +void setup() +{ + randomSeed(analogRead(0)); + +// Setup the LCD + myGLCD.InitLCD(); + myGLCD.setFont(SmallFont); +} + +void loop() +{ + int buf[478]; + int x, x2; + int y, y2; + int r; + +// Clear the screen and draw the frame + myGLCD.clrScr(); + + myGLCD.setColor(255, 0, 0); + myGLCD.fillRect(0, 0, 479, 13); + myGLCD.setColor(64, 64, 64); + myGLCD.fillRect(0, 306, 479, 319); + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("* Universal Color TFT Display Library *", CENTER, 1); + myGLCD.setBackColor(64, 64, 64); + myGLCD.setColor(255,255,0); + myGLCD.print("", CENTER, 307); + + myGLCD.setColor(0, 0, 255); + myGLCD.drawRect(0, 14, 479, 305); + +// Draw crosshairs + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(239, 15, 239, 304); + myGLCD.drawLine(1, 159, 478, 159); + for (int i=9; i<470; i+=10) + myGLCD.drawLine(i, 157, i, 161); + for (int i=19; i<220; i+=10) + myGLCD.drawLine(237, i, 241, i); + +// Draw sin-, cos- and tan-lines + myGLCD.setColor(0,255,255); + myGLCD.print("Sin", 5, 15); + for (int i=1; i<478; i++) + { + myGLCD.drawPixel(i,159+(sin(((i*1.13)*3.14)/180)*95)); + } + + myGLCD.setColor(255,0,0); + myGLCD.print("Cos", 5, 27); + for (int i=1; i<478; i++) + { + myGLCD.drawPixel(i,159+(cos(((i*1.13)*3.14)/180)*95)); + } + + myGLCD.setColor(255,255,0); + myGLCD.print("Tan", 5, 39); + for (int i=1; i<478; i++) + { + myGLCD.drawPixel(i,159+(tan(((i*1.13)*3.14)/180))); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,304); + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(239, 15, 239, 304); + myGLCD.drawLine(1, 159, 478, 159); + +// Draw a moving sinewave + x=1; + for (int i=1; i<(478*15); i++) + { + x++; + if (x==479) + x=1; + if (i>479) + { + if ((x==239)||(buf[x-1]==159)) + myGLCD.setColor(0,0,255); + else + myGLCD.setColor(0,0,0); + myGLCD.drawPixel(x,buf[x-1]); + } + myGLCD.setColor(0,255,255); + y=159+(sin(((i*0.7)*3.14)/180)*(90-(i / 100))); + myGLCD.drawPixel(x,y); + buf[x-1]=y; + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,304); + +// Draw some filled rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRect(150+(i*20), 70+(i*20), 210+(i*20), 130+(i*20)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,304); + +// Draw some filled, rounded rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRoundRect(270-(i*20), 70+(i*20), 330-(i*20), 130+(i*20)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,304); + +// Draw some filled circles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillCircle(180+(i*20),100+(i*20), 30); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,304); + +// Draw some lines in a pattern + myGLCD.setColor (255,0,0); + for (int i=15; i<304; i+=5) + { + myGLCD.drawLine(1, i, (i*1.6)-10, 304); + } + myGLCD.setColor (255,0,0); + for (int i=304; i>15; i-=5) + { + myGLCD.drawLine(478, i, (i*1.6)-11, 15); + } + myGLCD.setColor (0,255,255); + for (int i=304; i>15; i-=5) + { + myGLCD.drawLine(1, i, 491-(i*1.6), 15); + } + myGLCD.setColor (0,255,255); + for (int i=15; i<304; i+=5) + { + myGLCD.drawLine(478, i, 490-(i*1.6), 304); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,304); + +// Draw some random circles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=32+random(416); + y=45+random(226); + r=random(30); + myGLCD.drawCircle(x, y, r); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,304); + +// Draw some random rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(476); + y=16+random(289); + x2=2+random(476); + y2=16+random(289); + myGLCD.drawRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,304); + +// Draw some random rounded rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(476); + y=16+random(289); + x2=2+random(476); + y2=16+random(289); + myGLCD.drawRoundRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,304); + + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(476); + y=16+random(289); + x2=2+random(476); + y2=16+random(289); + myGLCD.drawLine(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,304); + + for (int i=0; i<10000; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + myGLCD.drawPixel(2+random(476), 16+random(289)); + } + + delay(2000); + + myGLCD.fillScr(0, 0, 255); + myGLCD.setColor(255, 0, 0); + myGLCD.fillRoundRect(160, 70, 319, 169); + + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("That's it!", CENTER, 93); + myGLCD.print("Restarting in a", CENTER, 119); + myGLCD.print("few seconds...", CENTER, 132); + + myGLCD.setColor(0, 255, 0); + myGLCD.setBackColor(0, 0, 255); + myGLCD.print("Runtime: (msecs)", CENTER, 290); + myGLCD.printNumI(millis(), CENTER, 305); + + delay (10000); +} + diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_800x480/UTFT_Demo_800x480.ino b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_800x480/UTFT_Demo_800x480.ino new file mode 100644 index 0000000..293bc00 --- /dev/null +++ b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_800x480/UTFT_Demo_800x480.ino @@ -0,0 +1,288 @@ +// UTFT_Demo_800x480 (C)2014 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of how to use most of the functions +// of the library with a supported display modules. +// +// This demo was made for modules with a screen resolution +// of 800x480 pixels. +// +// This program requires the UTFT library. +// + +#include + +// Declare which fonts we will be using +extern uint8_t SmallFont[]; + +// Set the pins to the correct ones for your development shield +// ------------------------------------------------------------ +// Standard Arduino Mega/Due shield : ,38,39,40,41 +// CTE TFT LCD/SD Shield for Arduino Due : ,25,26,27,28 +// Teensy 3.x TFT Test Board : ,23,22, 3, 4 +// ElecHouse TFT LCD/SD Shield for Arduino Due : ,22,23,31,33 +// +// Remember to change the model parameter to suit your display module! +UTFT myGLCD(ITDB50,38,39,40,41); + +void setup() +{ + randomSeed(analogRead(0)); + +// Setup the LCD + myGLCD.InitLCD(); + myGLCD.setFont(SmallFont); +} + +void loop() +{ + int buf[798]; + int x, x2; + int y, y2; + int r; + +// Clear the screen and draw the frame + myGLCD.clrScr(); + + myGLCD.setColor(255, 0, 0); + myGLCD.fillRect(0, 0, 799, 13); + myGLCD.setColor(64, 64, 64); + myGLCD.fillRect(0, 466, 799, 479); + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("* Universal Color TFT Display Library *", CENTER, 1); + myGLCD.setBackColor(64, 64, 64); + myGLCD.setColor(255,255,0); + myGLCD.print("", CENTER, 467); + + myGLCD.setColor(0, 0, 255); + myGLCD.drawRect(0, 14, 799, 465); + +// Draw crosshairs + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(399, 15, 399, 464); + myGLCD.drawLine(1, 239, 798, 239); + for (int i=9; i<790; i+=10) + myGLCD.drawLine(i, 237, i, 242); + for (int i=19; i<470; i+=10) + myGLCD.drawLine(397, i, 402, i); + +// Draw sin-, cos- and tan-lines + myGLCD.setColor(0,255,255); + myGLCD.print("Sin", 5, 15); + for (int i=1; i<798; i++) + { + myGLCD.drawPixel(i,239+(sin(((i*1.13)*3.14)/180)*200)); + } + + myGLCD.setColor(255,0,0); + myGLCD.print("Cos", 5, 27); + for (int i=1; i<798; i++) + { + myGLCD.drawPixel(i,239+(cos(((i*1.13)*3.14)/180)*200)); + } + + myGLCD.setColor(255,255,0); + myGLCD.print("Tan", 5, 39); + for (int i=1; i<798; i++) + { + myGLCD.drawPixel(i,239+(tan(((i*0.9)*3.14)/180))); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,798,464); + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(399, 15, 399, 464); + myGLCD.drawLine(1, 239, 798, 239); + +// Draw a moving sinewave + x=1; + for (int i=1; i<(798*20); i++) + { + x++; + if (x==799) + x=1; + if (i>799) + { + if ((x==399)||(buf[x-1]==239)) + myGLCD.setColor(0,0,255); + else + myGLCD.setColor(0,0,0); + myGLCD.drawPixel(x,buf[x-1]); + } + myGLCD.setColor(0,255,255); + y=239+(sin(((i*1.65)*3.14)/180)*(200-(i / 100))); + myGLCD.drawPixel(x,y); + buf[x-1]=y; + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,798,464); + +// Draw some random filled rectangles + for (int i=0; i<50; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(746); + y=16+random(397); + x2=x+50; + y2=y+50; + myGLCD.fillRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,798,464); + +// Draw some random filled, rounded rectangles + for (int i=0; i<50; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(746); + y=16+random(397); + x2=x+50; + y2=y+50; + myGLCD.fillRoundRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,798,464); + +// Draw some random filled circles + for (int i=0; i<50; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=27+random(746); + y=41+random(397); + myGLCD.fillCircle(x, y, 25); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,798,464); + +// Draw some lines in a pattern + myGLCD.setColor (255,0,0); + for (int i=15; i<463; i+=5) + { + myGLCD.drawLine(1, i, (i*1.66)-10, 463); + } + myGLCD.setColor (255,0,0); + for (int i=463; i>15; i-=5) + { + myGLCD.drawLine(798, i, (i*1.66)+30, 15); + } + myGLCD.setColor (0,255,255); + for (int i=463; i>15; i-=5) + { + myGLCD.drawLine(1, i, 770-(i*1.66), 15); + } + myGLCD.setColor (0,255,255); + for (int i=15; i<463; i+=5) + { + myGLCD.drawLine(798, i, 810-(i*1.66), 463); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,798,464); + +// Draw some random circles + for (int i=0; i<250; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=32+random(736); + y=45+random(386); + r=random(30); + myGLCD.drawCircle(x, y, r); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,798,464); + +// Draw some random rectangles + for (int i=0; i<250; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(796); + y=16+random(447); + x2=2+random(796); + y2=16+random(447); + myGLCD.drawRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,798,464); + +// Draw some random rounded rectangles + for (int i=0; i<250; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(796); + y=16+random(447); + x2=2+random(796); + y2=16+random(447); + myGLCD.drawRoundRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,798,464); + + for (int i=0; i<250; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(796); + y=16+random(447); + x2=2+random(796); + y2=16+random(447); + myGLCD.drawLine(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,798,464); + + for (int i=0; i<10000; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + myGLCD.drawPixel(2+random(796), 16+random(447)); + } + + delay(2000); + + myGLCD.fillScr(0, 0, 255); + myGLCD.setColor(255, 0, 0); + myGLCD.fillRoundRect(320, 190, 479, 289); + + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("That's it!", CENTER, 213); + myGLCD.print("Restarting in a", CENTER, 239); + myGLCD.print("few seconds...", CENTER, 252); + + myGLCD.setColor(0, 255, 0); + myGLCD.setBackColor(0, 0, 255); + myGLCD.print("Runtime: (msecs)", CENTER, 450); + myGLCD.printNumI(millis(), CENTER, 465); + + delay (10000); +} + diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Rotate_Bitmap/UTFT_Rotate_Bitmap.ino b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Rotate_Bitmap/UTFT_Rotate_Bitmap.ino new file mode 100644 index 0000000..9f2a83f --- /dev/null +++ b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Rotate_Bitmap/UTFT_Rotate_Bitmap.ino @@ -0,0 +1,37 @@ +// UTFT_Rotate_Bitmap (C)2014 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of the drawBitmap()-function. +// +// This program requires the UTFT library. +// + +#include + +// Set the pins to the correct ones for your development shield +// ------------------------------------------------------------ +// Standard Arduino Mega/Due shield : ,38,39,40,41 +// CTE TFT LCD/SD Shield for Arduino Due : ,25,26,27,28 +// Teensy 3.x TFT Test Board : ,23,22, 3, 4 +// ElecHouse TFT LCD/SD Shield for Arduino Due : ,22,23,31,33 +// +// Remember to change the model parameter to suit your display module! +UTFT myGLCD(ITDB32S,38,39,40,41); + +extern unsigned short biohazard[0x1000]; + +void setup() +{ + myGLCD.InitLCD(LANDSCAPE); + myGLCD.fillScr(255, 255, 255); + myGLCD.setColor(0, 0, 0); +} + +void loop() +{ + for (int i=0; i<360; i+=5) + { + myGLCD.drawBitmap (10, 10, 64, 64, biohazard, i, 32, 32); + } +} + diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Rotate_Bitmap/biohazard.c b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Rotate_Bitmap/biohazard.c new file mode 100644 index 0000000..ca1348d --- /dev/null +++ b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Rotate_Bitmap/biohazard.c @@ -0,0 +1,264 @@ +// Generated by : ImageConverter 565 v1.0 +// Generated from: biohazard1_L.png +// Time generated: 12.06.2011 00:23:59 +// Dimensions : 64x64 pixels +// Size : 8 192 Bytes + +const unsigned short biohazard[0x1000] ={ +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0010 (16) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7D, 0xC638, 0x9492, 0x6B4D, 0x4228, 0x2945, 0x2124, 0x18C3, 0x1082, // 0x0020 (32) +0x1082, 0x10A2, 0x18C3, 0x2124, 0x2965, 0x4A49, 0x6B6D, 0x9CD3, 0xCE79, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0030 (48) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0040 (64) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0050 (80) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0xBDD7, 0x6B6D, 0x2965, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0060 (96) +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0x31A6, 0x73AE, 0xC618, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0070 (112) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0080 (128) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0090 (144) +0xFFFF, 0xFFFF, 0xE73C, 0x8C71, 0x3186, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0020, 0x0020, 0x0000, 0x0000, // 0x00A0 (160) +0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x4207, 0x9CF3, 0xF79E, 0xFFFF, // 0x00B0 (176) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00C0 (192) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00D0 (208) +0xEF7D, 0x8C51, 0x2104, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x00E0 (224) +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x2965, 0x9CD3, // 0x00F0 (240) +0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0100 (256) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xAD75, // 0x0110 (272) +0x2965, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0020, 0x2901, 0x5241, 0x7B41, 0x9C02, 0xACA2, 0xBD02, // 0x0120 (288) +0xC521, 0xBD02, 0xACA2, 0x9C22, 0x7B41, 0x5241, 0x2901, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0130 (304) +0x39E7, 0xC618, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0140 (320) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xEF5D, 0x630C, 0x0000, // 0x0150 (336) +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x41C1, 0x93E1, 0xD5A1, 0xFEA1, 0xFF01, 0xFF20, 0xFF20, 0xFF20, 0xFF00, // 0x0160 (352) +0xFF00, 0xFF00, 0xFF20, 0xFF20, 0xFF20, 0xFF01, 0xFEA1, 0xD5A1, 0x93E1, 0x49E1, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0170 (368) +0x0000, 0x0841, 0x7BEF, 0xF7BE, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0180 (384) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xC638, 0x2965, 0x0000, 0x0000, // 0x0190 (400) +0x0000, 0x0000, 0x0000, 0x0000, 0x18A0, 0x7B41, 0xD5A1, 0xFF01, 0xFF20, 0xFEE0, 0xFEC0, 0xFEA0, 0xF680, 0xF680, 0xFEA0, 0xFEA0, // 0x01A0 (416) +0xFEA0, 0xFEA0, 0xFEA0, 0xF680, 0xF680, 0xFEA0, 0xFEC0, 0xFF00, 0xFF20, 0xFF01, 0xD5A1, 0x7B41, 0x1880, 0x0000, 0x0000, 0x0000, // 0x01B0 (432) +0x0000, 0x0000, 0x0000, 0x4208, 0xDEDB, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01C0 (448) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xAD55, 0x1082, 0x0000, 0x0000, 0x0000, // 0x01D0 (464) +0x0000, 0x0000, 0x0840, 0x7B62, 0xEE41, 0xFF21, 0xFEE0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFF20, 0xFF20, 0xFEA1, 0xFEC0, // 0x01E0 (480) +0xFEC0, 0xFEC0, 0xFEA1, 0xFF00, 0xFF20, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEE0, 0xFF21, 0xEE41, 0x7B62, 0x0840, 0x0000, // 0x01F0 (496) +0x0000, 0x0000, 0x0000, 0x0000, 0x18E3, 0xC618, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0200 (512) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x94B2, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0210 (528) +0x0000, 0x5201, 0xDDE1, 0xFF21, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFF40, 0xF6A1, 0xB4C1, 0x7322, 0xA441, 0xFEE0, // 0x0220 (544) +0xFEA0, 0xFEE0, 0xA461, 0x7322, 0xACA1, 0xF681, 0xFF40, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFF21, 0xDDE2, 0x4A01, // 0x0230 (560) +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1082, 0xB596, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0240 (576) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x9492, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0820, // 0x0250 (592) +0x9402, 0xFF01, 0xFEE0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEE0, 0xFF01, 0x9401, 0x3961, 0x7341, 0xCD81, 0xF680, 0xFEC0, // 0x0260 (608) +0xFEA0, 0xFEC0, 0xF681, 0xCD81, 0x7B61, 0x3961, 0x8BE1, 0xFEE1, 0xFEE0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEE0, 0xFF01, // 0x0270 (624) +0x9402, 0x0820, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0xB596, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0280 (640) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xA534, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x20C0, 0xCD61, // 0x0290 (656) +0xFF40, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFF01, 0xE621, 0x39A1, 0x20E1, 0xCD81, 0xFF40, 0xFEE0, 0xFEC0, 0xFEC0, // 0x02A0 (672) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEE0, 0xFF41, 0xCDC1, 0x2901, 0x3961, 0xDE01, 0xFF00, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEA0, // 0x02B0 (688) +0xFF21, 0xC561, 0x18A1, 0x0000, 0x0000, 0x0000, 0x0000, 0x1082, 0xC618, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02C0 (704) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xC618, 0x0861, 0x0000, 0x0000, 0x0000, 0x0000, 0x3121, 0xDE01, 0xFF00, // 0x02D0 (720) +0xFE80, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF01, 0xD5A2, 0x18A0, 0x20E0, 0xF682, 0xFF01, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, // 0x02E0 (736) +0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFF00, 0xF6A1, 0x2920, 0x1080, 0xCDA2, 0xFF01, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x02F0 (752) +0xFE80, 0xFF00, 0xDE01, 0x2921, 0x0000, 0x0000, 0x0000, 0x0000, 0x18E3, 0xDEDB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0300 (768) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE73C, 0x2124, 0x0000, 0x0000, 0x0000, 0x0000, 0x2921, 0xEE41, 0xFF00, 0xFEA0, // 0x0310 (784) +0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEE0, 0xDE02, 0x18A1, 0x0840, 0xDDE1, 0xFF00, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEC0, // 0x0320 (800) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEE0, 0xE621, 0x0860, 0x1880, 0xD5E2, 0xFEE0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0330 (816) +0xFEA0, 0xFEA0, 0xFF00, 0xE641, 0x2921, 0x0000, 0x0000, 0x0000, 0x0000, 0x4208, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0340 (832) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x5ACB, 0x0000, 0x0000, 0x0000, 0x0000, 0x18C0, 0xDE21, 0xFF00, 0xFEA0, 0xFEC0, // 0x0350 (848) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC1, 0x39A1, 0x0000, 0x8382, 0xFF21, 0xFE80, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0360 (864) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFE80, 0xFF20, 0x8BC1, 0x0000, 0x3161, 0xF6A1, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0370 (880) +0xFEC0, 0xFEC0, 0xFEA0, 0xFF00, 0xDE01, 0x18A0, 0x0000, 0x0000, 0x0000, 0x0000, 0x7BCF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0380 (896) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xA534, 0x0000, 0x0000, 0x0000, 0x0000, 0x0820, 0xCD61, 0xFF00, 0xFEA0, 0xFEC0, 0xFEC0, // 0x0390 (912) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF21, 0x93E1, 0x0000, 0x1060, 0xDE01, 0xFEE0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x03A0 (928) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEE0, 0xE621, 0x1080, 0x0000, 0x8BA1, 0xFF20, 0xFEA0, 0xFEC0, 0xFEC0, // 0x03B0 (944) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF00, 0xCD61, 0x0820, 0x0000, 0x0000, 0x0000, 0x0021, 0xBDF7, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03C0 (960) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF5D, 0x2104, 0x0000, 0x0000, 0x0000, 0x0000, 0x9402, 0xFF41, 0xFE80, 0xFEA0, 0xFEC0, 0xFEC0, // 0x03D0 (976) +0xFEC0, 0xFEC0, 0xFEA0, 0xFEC0, 0xF681, 0x20E0, 0x0000, 0x41A1, 0xFEE1, 0xFEA0, 0xFEA1, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x03E0 (992) +0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFF01, 0x49E1, 0x0000, 0x18A1, 0xEE41, 0xFEC0, 0xFEA0, 0xFEC0, // 0x03F0 (1008) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFE80, 0xFF41, 0x9402, 0x0000, 0x0000, 0x0000, 0x0000, 0x39C7, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x7BCF, 0x0000, 0x0000, 0x0000, 0x0000, 0x4A01, 0xFF01, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0410 (1040) +0xFEC0, 0xFEC0, 0xFEA0, 0xFF20, 0xA461, 0x0000, 0x0000, 0x6AC1, 0xFF21, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, // 0x0420 (1056) +0xFEE0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFE80, 0xFF20, 0x7300, 0x0000, 0x0000, 0x9C21, 0xFF20, 0xFEA0, 0xFEC0, // 0x0430 (1072) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFF01, 0x49E1, 0x0000, 0x0000, 0x0000, 0x0000, 0x9CD3, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0440 (1088) +0xFFFF, 0xFFFF, 0xFFFF, 0xDEFB, 0x10A2, 0x0000, 0x0000, 0x0000, 0x0840, 0xDDE1, 0xFEE0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0450 (1104) +0xFEA0, 0xFEA0, 0xFEA0, 0xFF20, 0x6261, 0x0000, 0x0000, 0x7300, 0xFF21, 0xF6A0, 0xFEA0, 0xFEE0, 0xFF20, 0xFF00, 0xFEA1, 0xEE42, // 0x0460 (1120) +0xE602, 0xEE42, 0xFEA1, 0xFF00, 0xFF20, 0xFEE0, 0xFEA0, 0xF681, 0xFF40, 0x8360, 0x0000, 0x0000, 0x5241, 0xFF01, 0xFEA0, 0xFEA0, // 0x0470 (1136) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF00, 0xDDC1, 0x0840, 0x0000, 0x0000, 0x0000, 0x2945, 0xEF7D, 0xFFFF, 0xFFFF, // 0x0480 (1152) +0xFFFF, 0xFFDF, 0xFFFF, 0x7BEF, 0x0000, 0x0000, 0x0000, 0x0000, 0x7B42, 0xFF21, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0490 (1168) +0xFEC0, 0xFEA0, 0xFEC0, 0xFEA0, 0x2900, 0x0000, 0x0000, 0x6AE0, 0xFF21, 0xFEC0, 0xFF01, 0xDE01, 0x9C01, 0x5241, 0x2921, 0x18A1, // 0x04A0 (1184) +0x1061, 0x1881, 0x2921, 0x5241, 0x9C02, 0xDDE1, 0xFF21, 0xFEC0, 0xFF20, 0x7321, 0x0000, 0x0000, 0x20E0, 0xF681, 0xFEC0, 0xFEA0, // 0x04B0 (1200) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF21, 0x7B41, 0x0000, 0x0000, 0x0000, 0x0000, 0x9CD3, 0xFFFF, 0xFFDF, // 0x04C0 (1216) +0xFFDF, 0xFFFF, 0xEF7D, 0x2104, 0x0000, 0x0000, 0x0000, 0x1080, 0xEE41, 0xFEE0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x04D0 (1232) +0xFEC0, 0xFEA0, 0xFEC0, 0xEE21, 0x1060, 0x0000, 0x0000, 0x41C1, 0xFF21, 0xDDE1, 0x6AC1, 0x0860, 0x0000, 0x0000, 0x0000, 0x0000, // 0x04E0 (1248) +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0860, 0x62C1, 0xDDC1, 0xFF41, 0x49E1, 0x0000, 0x0000, 0x0840, 0xE601, 0xFEE0, 0xFEA0, // 0x04F0 (1264) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEC0, 0xEE41, 0x1080, 0x0000, 0x0000, 0x0000, 0x39C7, 0xF7BE, 0xFFFF, // 0x0500 (1280) +0xFFDF, 0xFFFF, 0xA534, 0x0000, 0x0000, 0x0000, 0x0000, 0x7B21, 0xFF21, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0510 (1296) +0xFEA0, 0xFEA0, 0xFEE0, 0xE602, 0x0841, 0x0000, 0x0000, 0x1080, 0xACC2, 0x1060, 0x0000, 0x0000, 0x0000, 0x0020, 0x2920, 0x4A01, // 0x0520 (1312) +0x5241, 0x4A01, 0x3140, 0x0821, 0x0000, 0x0000, 0x0000, 0x0860, 0xACA2, 0x18A0, 0x0000, 0x0000, 0x0820, 0xDDE2, 0xFEE0, 0xFEA0, // 0x0530 (1328) +0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFE80, 0xFF21, 0x7321, 0x0000, 0x0000, 0x0000, 0x0020, 0xC618, 0xFFFF, // 0x0540 (1344) +0xFFFF, 0xFFFF, 0x52AA, 0x0000, 0x0020, 0x0000, 0x0820, 0xDDA1, 0xFEE0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0550 (1360) +0xFEC0, 0xFEA0, 0xFEE0, 0xE621, 0x1060, 0x0000, 0x0000, 0x0000, 0x6AE2, 0x20C1, 0x0000, 0x20E1, 0x8BA2, 0xD5A1, 0xFEA1, 0xFF00, // 0x0560 (1376) +0xFF01, 0xFF00, 0xFEC1, 0xD5C1, 0x8BC2, 0x2901, 0x0000, 0x18A1, 0x7302, 0x0000, 0x0000, 0x0000, 0x0840, 0xDE01, 0xFEE0, 0xFEA0, // 0x0570 (1392) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEE0, 0xD5A1, 0x0020, 0x0000, 0x0000, 0x0000, 0x738E, 0xFFFF, // 0x0580 (1408) +0xFFFF, 0xE71C, 0x18C3, 0x0000, 0x0020, 0x0000, 0x49C1, 0xFF01, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0590 (1424) +0xFEA0, 0xFEA0, 0xFEC0, 0xF661, 0x18A0, 0x0000, 0x0000, 0x0000, 0x2101, 0x8363, 0x7321, 0xEE81, 0xFF21, 0xFEE0, 0xFEC0, 0xFEA0, // 0x05A0 (1440) +0xFEA0, 0xFEA0, 0xFEC0, 0xFEE0, 0xFF20, 0xF681, 0x7B41, 0x8362, 0x2921, 0x0000, 0x0000, 0x0000, 0x1080, 0xEE41, 0xFEC0, 0xFEA0, // 0x05B0 (1456) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFF01, 0x41C1, 0x0000, 0x0020, 0x0000, 0x3186, 0xF79E, // 0x05C0 (1472) +0xFFFF, 0xAD75, 0x0000, 0x0000, 0x0020, 0x0000, 0x93E1, 0xFF20, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEC0, // 0x05D0 (1488) +0xFEC0, 0xFEA0, 0xFEA0, 0xFF41, 0x5221, 0x0000, 0x0000, 0x0000, 0x0000, 0x41C1, 0xFF01, 0xFF00, 0xF660, 0xFEA0, 0xFEA0, 0xFEC0, // 0x05E0 (1504) +0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xF660, 0xFF00, 0xFF22, 0x49E1, 0x0000, 0x0000, 0x0000, 0x0000, 0x49E1, 0xFF40, 0xFEA0, 0xFEA0, // 0x05F0 (1520) +0xFEA1, 0xFEC0, 0xFEA1, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF20, 0x93E1, 0x0000, 0x0020, 0x0000, 0x0020, 0xC638, // 0x0600 (1536) +0xFFFF, 0x73AE, 0x0000, 0x0000, 0x0000, 0x0020, 0xD5A1, 0xFF00, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA1, 0xFEA0, // 0x0610 (1552) +0xFEA1, 0xFF20, 0xFEC1, 0xD5C1, 0x5220, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0x3981, 0xE622, 0xFF20, 0xFEC0, 0xFEA0, 0xFEA0, // 0x0620 (1568) +0xFEC0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFF21, 0xE621, 0x41C1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x49E0, 0xCDA2, 0xFEA1, 0xFF20, // 0x0630 (1584) +0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF00, 0xD5A1, 0x0020, 0x0000, 0x0000, 0x0000, 0x9492, // 0x0640 (1600) +0xFFFF, 0x4A49, 0x0000, 0x0020, 0x0000, 0x2901, 0xFEA1, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEE0, // 0x0650 (1616) +0xFEE1, 0xA461, 0x3981, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1881, 0x93E1, 0xE622, 0xFF01, 0xFF00, // 0x0660 (1632) +0xFEA0, 0xFF00, 0xFF21, 0xEE41, 0x9401, 0x18A1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3141, 0x9C21, // 0x0670 (1648) +0xFEC1, 0xFEE0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEC0, 0xFEA1, 0x2901, 0x0000, 0x0020, 0x0000, 0x632C, // 0x0680 (1664) +0xE71C, 0x2124, 0x0000, 0x0020, 0x0000, 0x5241, 0xFF01, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFF00, 0xD5C1, // 0x0690 (1680) +0x41C1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1081, 0x4A01, 0xAC81, // 0x06A0 (1696) +0xFF21, 0xB4C1, 0x5221, 0x1081, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x06B0 (1712) +0x3981, 0xCD81, 0xFF21, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF01, 0x5221, 0x0000, 0x0020, 0x0000, 0x4228, // 0x06C0 (1728) +0xBDF7, 0x18C3, 0x0000, 0x0020, 0x0000, 0x7B41, 0xFF20, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFF20, 0xBD02, 0x1060, // 0x06D0 (1744) +0x0000, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5201, // 0x06E0 (1760) +0xFFC0, 0x5A41, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, // 0x06F0 (1776) +0x0000, 0x0840, 0xACA1, 0xFF21, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF20, 0x7B41, 0x0000, 0x0020, 0x0000, 0x2945, // 0x0700 (1792) +0x94B2, 0x0861, 0x0000, 0x0000, 0x0000, 0x9C02, 0xFF20, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF00, 0xBD22, 0x0820, 0x0000, // 0x0710 (1808) +0x0820, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1881, 0xAC81, // 0x0720 (1824) +0xFF20, 0xB4A1, 0x18A1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0730 (1840) +0x0020, 0x0000, 0x0000, 0xB4C2, 0xFF00, 0xFE80, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF20, 0x9C02, 0x0000, 0x0020, 0x0000, 0x2104, // 0x0740 (1856) +0x73AE, 0x0841, 0x0000, 0x0000, 0x0000, 0xACA2, 0xFF20, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEE0, 0xE622, 0x18A1, 0x0000, 0x0000, // 0x0750 (1872) +0x0000, 0x1080, 0x5221, 0x6B03, 0x6AE2, 0x6AE3, 0x4A01, 0x1080, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1061, 0xCD82, 0xFF20, // 0x0760 (1888) +0xFE80, 0xFF20, 0xD5C2, 0x1881, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1080, 0x5241, 0x6AE3, 0x6AE2, 0x6AE3, 0x5A62, 0x18C0, // 0x0770 (1904) +0x0000, 0x0000, 0x0000, 0x1060, 0xDDE2, 0xFEE0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFF20, 0xACA2, 0x0000, 0x0000, 0x0000, 0x10A2, // 0x0780 (1920) +0x52AA, 0x0000, 0x0000, 0x0000, 0x0000, 0xBD02, 0xFF00, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF01, 0x5A61, 0x0000, 0x0000, 0x18A0, // 0x0790 (1936) +0x9401, 0xEE61, 0xFEE2, 0x49E2, 0x18A1, 0x62A1, 0xFF41, 0xE621, 0x8BC2, 0x1880, 0x0000, 0x0820, 0x0000, 0x7B21, 0xFF40, 0xFE80, // 0x07A0 (1952) +0xFEC0, 0xFE80, 0xFF40, 0x8381, 0x0000, 0x0820, 0x0000, 0x1080, 0x8BE2, 0xEE41, 0xFF41, 0x62A2, 0x10A1, 0x3982, 0xFEC2, 0xF6A1, // 0x07B0 (1968) +0xA462, 0x2101, 0x0000, 0x0000, 0x49E1, 0xFF01, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF00, 0xBD02, 0x0000, 0x0000, 0x0000, 0x1082, // 0x07C0 (1984) +0x528A, 0x0000, 0x0000, 0x0000, 0x0000, 0xC521, 0xFF00, 0xFEA0, 0xFEC0, 0xFEA0, 0xFF00, 0xCD41, 0x0000, 0x0000, 0x49C1, 0xE642, // 0x07D0 (2000) +0xFF21, 0xFEE0, 0xEE42, 0x1081, 0x0000, 0x41A0, 0xFEE0, 0xFEC0, 0xFF40, 0xE621, 0x41A1, 0x0000, 0x0000, 0x93E1, 0xFF20, 0xFEA0, // 0x07E0 (2016) +0xFEA0, 0xFEA0, 0xFF20, 0x9C22, 0x0000, 0x0000, 0x3981, 0xDE01, 0xFF21, 0xFEC0, 0xFEE1, 0x49E1, 0x0000, 0x0840, 0xE602, 0xFEC0, // 0x07F0 (2032) +0xFF20, 0xEE81, 0x5A61, 0x0000, 0x0000, 0xBCE1, 0xFF00, 0xFEA0, 0xFEC0, 0xFEA0, 0xFF00, 0xC521, 0x0000, 0x0000, 0x0000, 0x1082, // 0x0800 (2048) +0x52AA, 0x0000, 0x0000, 0x0000, 0x0000, 0xBD02, 0xFF00, 0xFEA0, 0xFEA0, 0xFEA0, 0xFF20, 0x6AC1, 0x0000, 0x49E1, 0xFEE2, 0xFEE0, // 0x0810 (2064) +0xFE80, 0xFEC0, 0xF682, 0x20E1, 0x0000, 0x39A0, 0xFEE0, 0xFEA0, 0xFE80, 0xFEE0, 0xF6A2, 0x41A1, 0x3961, 0xDDC1, 0xFF00, 0xFE80, // 0x0820 (2080) +0xFEA0, 0xFEA0, 0xFF00, 0xE601, 0x41C1, 0x3981, 0xF682, 0xFF00, 0xFE80, 0xFEA0, 0xFF00, 0x41C1, 0x0000, 0x20C1, 0xF661, 0xFEC0, // 0x0830 (2096) +0xF6A0, 0xFEC0, 0xFF01, 0x6261, 0x0000, 0x5A41, 0xFF01, 0xFEA0, 0xFEC0, 0xFEA0, 0xFF00, 0xBD02, 0x0000, 0x0000, 0x0000, 0x1082, // 0x0840 (2112) +0x738E, 0x0841, 0x0000, 0x0000, 0x0000, 0xACA2, 0xFF20, 0xFEA0, 0xFEA0, 0xFEC0, 0xF681, 0x18A0, 0x1080, 0xEE41, 0xFEE0, 0xFEA0, // 0x0850 (2128) +0xFEC0, 0xFEA0, 0xFEE1, 0x3980, 0x0000, 0x20C0, 0xF662, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEE0, 0xF681, 0xFEE1, 0xFF01, 0xDDC1, 0xFF21, // 0x0860 (2144) +0xFF20, 0xFF21, 0xDDC1, 0xFEC1, 0xFF01, 0xF661, 0xFEE0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEA1, 0x2900, 0x0000, 0x3140, 0xFEA1, 0xFEA0, // 0x0870 (2160) +0xFEA0, 0xFEA0, 0xFEC0, 0xF6A1, 0x2101, 0x0840, 0xEE41, 0xFEE0, 0xFEA0, 0xFEA0, 0xFF20, 0xAC82, 0x0000, 0x0000, 0x0000, 0x10A2, // 0x0880 (2176) +0x9492, 0x0861, 0x0000, 0x0000, 0x0000, 0x9C02, 0xFF20, 0xFEA0, 0xFEA0, 0xFF00, 0xD582, 0x0000, 0x93C1, 0xFF40, 0xFE80, 0xFEC0, // 0x0890 (2192) +0xFEC0, 0xFEA0, 0xFF21, 0x6AC1, 0x0000, 0x0000, 0xCD41, 0xFF00, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEE0, 0xDDE1, 0x41A1, 0x0860, 0x6AC1, // 0x08A0 (2208) +0x93E1, 0x6AE1, 0x0841, 0x3161, 0xD5C1, 0xFEE0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFF00, 0xCD61, 0x0000, 0x0000, 0x5A81, 0xFF21, 0xFEA0, // 0x08B0 (2224) +0xFEC0, 0xFEC0, 0xFEA0, 0xFF20, 0xAC81, 0x0000, 0xC521, 0xFF00, 0xFEA0, 0xFEA0, 0xFF20, 0x9C02, 0x0000, 0x0020, 0x0000, 0x2104, // 0x08C0 (2240) +0xB5B6, 0x10A2, 0x0000, 0x0020, 0x0000, 0x7B41, 0xFF20, 0xFEA0, 0xFEA0, 0xFF20, 0xAC80, 0x0820, 0xEE41, 0xFEC0, 0xFEA0, 0xFEC0, // 0x08D0 (2256) +0xFEC0, 0xFEA0, 0xFF00, 0xAC81, 0x0000, 0x0000, 0x7301, 0xFF20, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEE0, 0xD5C1, 0x0000, 0x0000, 0x0000, // 0x08E0 (2272) +0x0000, 0x0000, 0x0000, 0x0000, 0xD561, 0xFEE0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFF41, 0x7B42, 0x0000, 0x0000, 0xA442, 0xFF21, 0xFEA0, // 0x08F0 (2288) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA1, 0x1080, 0x9C00, 0xFF40, 0xFEA0, 0xFEA0, 0xFF20, 0x7B41, 0x0000, 0x0020, 0x0000, 0x2124, // 0x0900 (2304) +0xDEFB, 0x2104, 0x0000, 0x0020, 0x0000, 0x5221, 0xFF01, 0xFEA0, 0xFEA0, 0xFF40, 0x93C0, 0x3961, 0xFF21, 0xFEA0, 0xFEC0, 0xFEC0, // 0x0910 (2320) +0xFEC0, 0xFEA0, 0xFEC0, 0xEE61, 0x1881, 0x0000, 0x1080, 0xEE21, 0xFEE0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFF01, 0x41C1, 0x0000, 0x0020, // 0x0920 (2336) +0x0000, 0x0020, 0x0000, 0x3961, 0xFEE1, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEC0, 0xEE61, 0x18A1, 0x0000, 0x1060, 0xE621, 0xFEC0, 0xFEA0, // 0x0930 (2352) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF21, 0x4A01, 0x8361, 0xFF40, 0xFEA0, 0xFEA0, 0xFF01, 0x5221, 0x0000, 0x0020, 0x0000, 0x4208, // 0x0940 (2368) +0xFFDF, 0x4208, 0x0000, 0x0000, 0x0000, 0x2901, 0xFEA1, 0xFEC0, 0xFEA0, 0xFF40, 0x93C0, 0x5A60, 0xFF41, 0xFEA0, 0xFEC0, 0xFEC0, // 0x0950 (2384) +0xFEA0, 0xFEC0, 0xFEA0, 0xFF21, 0x7B41, 0x0000, 0x0000, 0x6281, 0xFF21, 0xFEA0, 0xFEA0, 0xFEA0, 0xFF21, 0x62A1, 0x0000, 0x0000, // 0x0960 (2400) +0x0000, 0x0000, 0x0000, 0x5A41, 0xFF01, 0xFEA0, 0xFEA0, 0xF680, 0xFF41, 0x6AC1, 0x0000, 0x0000, 0x7301, 0xFF21, 0xFEA0, 0xFEA0, // 0x0970 (2416) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF40, 0x6AE1, 0x8361, 0xFF40, 0xFEA0, 0xFEC0, 0xFEA1, 0x2901, 0x0000, 0x0020, 0x0000, 0x630C, // 0x0980 (2432) +0xFFFF, 0x6B6D, 0x0000, 0x0020, 0x0000, 0x0020, 0xD5A1, 0xFF00, 0xFEA0, 0xFF20, 0xA461, 0x6AC0, 0xFF40, 0xFEA0, 0xFEC0, 0xFEC0, // 0x0990 (2448) +0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xEE61, 0x18C0, 0x0000, 0x0000, 0x93E2, 0xFF41, 0xFEA0, 0xFE80, 0xFF20, 0x6AE1, 0x0000, 0x0000, // 0x09A0 (2464) +0x0000, 0x0000, 0x0000, 0x62A1, 0xFF21, 0xFE80, 0xFEA0, 0xFF40, 0x9C22, 0x0000, 0x0000, 0x1881, 0xE641, 0xFEC0, 0xFEC0, 0xFEC0, // 0x09B0 (2480) +0xFEA0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF40, 0x7B61, 0x9C00, 0xFF40, 0xFE80, 0xFF00, 0xD581, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C51, // 0x09C0 (2496) +0xFFFF, 0xA534, 0x0000, 0x0000, 0x0000, 0x0000, 0x93E1, 0xFF20, 0xFE80, 0xFF00, 0xC541, 0x72E1, 0xFF20, 0xFEA0, 0xFEC0, 0xFEC0, // 0x09D0 (2512) +0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFF00, 0xB4C1, 0x0000, 0x0020, 0x0000, 0x93E1, 0xFF21, 0xFEC0, 0xFF01, 0x5A81, 0x0000, 0x0000, // 0x09E0 (2528) +0x0000, 0x0000, 0x0000, 0x5222, 0xFF01, 0xFEC0, 0xFF21, 0x9C01, 0x0000, 0x0020, 0x0000, 0xAC81, 0xFF01, 0xFEA0, 0xFEA0, 0xFEC0, // 0x09F0 (2544) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF20, 0x7B40, 0xBD01, 0xFF20, 0xF680, 0xFF20, 0x93C1, 0x0000, 0x0020, 0x0000, 0x0000, 0xBDF7, // 0x0A00 (2560) +0xFFFF, 0xDEDB, 0x1082, 0x0000, 0x0000, 0x0000, 0x41C1, 0xFF01, 0xFEA0, 0xFEC0, 0xF660, 0x6AC2, 0xF6A1, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0A10 (2576) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF21, 0x8BA1, 0x0000, 0x0000, 0x0000, 0x6281, 0xDE21, 0xFF01, 0x3161, 0x0000, 0x0000, // 0x0A20 (2592) +0x0000, 0x0000, 0x0000, 0x2921, 0xFEE1, 0xE641, 0x62A1, 0x0000, 0x0000, 0x0000, 0x8381, 0xFF21, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0A30 (2608) +0xFEC0, 0xFEC0, 0xFEA0, 0xFEC0, 0xFEC1, 0x6AC2, 0xE621, 0xFEE0, 0xFEA0, 0xFF01, 0x41C1, 0x0000, 0x0020, 0x0000, 0x2124, 0xEF5D, // 0x0A40 (2624) +0xFFFF, 0xFFFF, 0x4A49, 0x0000, 0x0000, 0x0000, 0x0020, 0xD5A1, 0xFEE0, 0xFEA0, 0xFEC0, 0xCD41, 0xF660, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0A50 (2640) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFF21, 0x8BC1, 0x0000, 0x0000, 0x0000, 0x1060, 0xA442, 0x0860, 0x0000, 0x0000, // 0x0A60 (2656) +0x0000, 0x0000, 0x0000, 0x0820, 0xA442, 0x18A0, 0x0000, 0x0000, 0x0000, 0x8381, 0xFF21, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0A70 (2672) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFE80, 0xCD62, 0xFEC0, 0xFEA1, 0xFEE0, 0xD5A1, 0x0020, 0x0000, 0x0000, 0x0000, 0x630C, 0xFFFF, // 0x0A80 (2688) +0xFFDF, 0xFFFF, 0x94B2, 0x0000, 0x0000, 0x0000, 0x0000, 0x7321, 0xFF21, 0xFEA0, 0xFEA0, 0xFEE0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEC0, // 0x0A90 (2704) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFF21, 0xB4C1, 0x20E1, 0x0000, 0x3161, 0x62A2, 0x0000, 0x0000, 0x0000, // 0x0AA0 (2720) +0x0000, 0x0000, 0x0000, 0x0000, 0x5A82, 0x39A1, 0x0000, 0x20C1, 0xAC82, 0xFF21, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0AB0 (2736) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEC0, 0xFEE0, 0xFEA0, 0xFEA0, 0xFF21, 0x7321, 0x0000, 0x0000, 0x0000, 0x0000, 0xB596, 0xFFFF, // 0x0AC0 (2752) +0xFFDF, 0xFFFF, 0xE73C, 0x18C3, 0x0000, 0x0000, 0x0000, 0x1080, 0xEE41, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA1, 0xFF00, 0xFEE0, 0xFEA0, // 0x0AD0 (2768) +0xFEC0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFF00, 0xEE41, 0x83C1, 0x8BA3, 0x1081, 0x0000, 0x0000, 0x0000, // 0x0AE0 (2784) +0x0000, 0x0000, 0x0000, 0x0000, 0x1060, 0x8383, 0x83A1, 0xEE41, 0xFF00, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, // 0x0AF0 (2800) +0xFEC0, 0xFEA0, 0xFEC0, 0xFF00, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xEE21, 0x1080, 0x0000, 0x0000, 0x0000, 0x2945, 0xEF7D, 0xFFFF, // 0x0B00 (2816) +0xFFFF, 0xFFFF, 0xFFFF, 0x6B4D, 0x0000, 0x0000, 0x0000, 0x0000, 0x7B41, 0xFF21, 0xFEA0, 0xFEA0, 0xFF00, 0xB482, 0xD5C1, 0xFF20, // 0x0B10 (2832) +0xFE80, 0xFEA0, 0xFEA0, 0xFEA1, 0xFEA0, 0xFEC0, 0xFEA1, 0xFEA0, 0xF680, 0xFF20, 0xF6A2, 0x3121, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0B20 (2848) +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20E1, 0xEE62, 0xFF40, 0xF680, 0xFEA0, 0xFEA1, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, // 0x0B30 (2864) +0xF681, 0xFF20, 0xE601, 0xAC62, 0xFF00, 0xFEA0, 0xFE80, 0xFF21, 0x7B41, 0x0000, 0x0000, 0x0000, 0x0000, 0x8410, 0xFFFF, 0xFFFF, // 0x0B40 (2880) +0xFFFF, 0xFFDF, 0xFFFF, 0xD69A, 0x0841, 0x0000, 0x0000, 0x0000, 0x0840, 0xDDC1, 0xFEE0, 0xFEA0, 0xFEE1, 0xD5A1, 0x5221, 0xBD21, // 0x0B50 (2896) +0xFF41, 0xFF00, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA1, 0xFEC0, 0xFF00, 0xFF21, 0xCD61, 0x20E1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, // 0x0B60 (2912) +0x7322, 0x0840, 0x0000, 0x0000, 0x0000, 0x0000, 0x18A1, 0xBD22, 0xFF21, 0xFF00, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEE0, // 0x0B70 (2928) +0xFF40, 0xC561, 0x5221, 0xCD81, 0xFEE0, 0xFE81, 0xFEE0, 0xDDC1, 0x0840, 0x0000, 0x0000, 0x0000, 0x18E3, 0xE71C, 0xFFFF, 0xFFFF, // 0x0B80 (2944) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x632C, 0x0000, 0x0000, 0x0000, 0x0000, 0x49E1, 0xFF01, 0xFEA0, 0xFEA0, 0xFF00, 0xDE01, 0x4181, // 0x0B90 (2960) +0x5A81, 0xD581, 0xFEE1, 0xFF20, 0xFF20, 0xFF01, 0xFEC1, 0xD582, 0x6AE1, 0x0020, 0x0000, 0x0020, 0x0000, 0x0000, 0x1060, 0xACA2, // 0x0BA0 (2976) +0xFF61, 0xBD21, 0x18A1, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, 0x62A2, 0xCD62, 0xFEA1, 0xFF01, 0xFF20, 0xFF20, 0xFEE1, 0xD5C1, // 0x0BB0 (2992) +0x62C1, 0x3981, 0xD5C1, 0xFF21, 0xFEA0, 0xFEA0, 0xFF01, 0x49E1, 0x0000, 0x0000, 0x0000, 0x0000, 0x7BEF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0BC0 (3008) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEDB, 0x1082, 0x0000, 0x0000, 0x0000, 0x0000, 0x93E2, 0xFF40, 0xFE80, 0xFE80, 0xFEE0, 0xFEC1, // 0x0BD0 (3024) +0x6B01, 0x1061, 0x18C1, 0x4A00, 0x5AA0, 0x5240, 0x3141, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4A01, 0xDDC1, 0xFF20, // 0x0BE0 (3040) +0xFE80, 0xFF00, 0xE602, 0x5A41, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2921, 0x5220, 0x5AA0, 0x4A00, 0x20E1, 0x1060, // 0x0BF0 (3056) +0x6AE1, 0xF6A1, 0xFEE0, 0xFEA1, 0xFEA0, 0xFF41, 0x93E1, 0x0000, 0x0000, 0x0000, 0x0000, 0x2124, 0xE71C, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0C00 (3072) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x8C71, 0x0000, 0x0000, 0x0000, 0x0000, 0x0820, 0xCD61, 0xFF00, 0xFEA0, 0xFEA0, 0xFEC0, // 0x0C10 (3088) +0xFF41, 0xDDE1, 0x6B01, 0x18C1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18A0, 0x5A61, 0xBCE2, 0xFF01, 0xFEE0, 0xFEA0, // 0x0C20 (3104) +0xFEC0, 0xFEA0, 0xFEE0, 0xFF01, 0xC541, 0x6281, 0x20C1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18C1, 0x6AE1, 0xDDC1, // 0x0C30 (3120) +0xFF41, 0xFEC0, 0xFEA0, 0xFEA0, 0xFF01, 0xC541, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0xA514, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0C40 (3136) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0x4208, 0x0000, 0x0000, 0x0000, 0x0000, 0x18A1, 0xDE01, 0xFF00, 0xFE80, 0xFEC0, // 0x0C50 (3152) +0xFEA0, 0xFEE0, 0xFF20, 0xFEC1, 0xD5A2, 0xAC82, 0x9401, 0x93E1, 0x9C42, 0xC522, 0xEE41, 0xFF01, 0xFF00, 0xFEA0, 0xFEA0, 0xFEC0, // 0x0C60 (3168) +0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFF00, 0xFF21, 0xF661, 0xC542, 0xA462, 0x93E1, 0x9C01, 0xB4A2, 0xD5A1, 0xFEC1, 0xFF20, 0xFEE0, // 0x0C70 (3184) +0xFEA0, 0xFEC0, 0xFE80, 0xFF00, 0xDE01, 0x18A1, 0x0000, 0x0000, 0x0000, 0x0000, 0x52AA, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0C80 (3200) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xD6BA, 0x10A2, 0x0000, 0x0000, 0x0000, 0x0000, 0x2921, 0xE641, 0xFF00, 0xFE80, // 0x0C90 (3216) +0xFEC0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFF00, 0xFF20, 0xFF20, 0xFF20, 0xFF20, 0xFF00, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0CA0 (3232) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFF00, 0xFF20, 0xFF20, 0xFF20, 0xFF20, 0xFF00, 0xFEC0, 0xFEA0, 0xFEA0, // 0x0CB0 (3248) +0xFEA0, 0xFE80, 0xFF00, 0xE641, 0x2901, 0x0000, 0x0000, 0x0000, 0x0000, 0x2124, 0xE71C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0CC0 (3264) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xAD55, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2901, 0xDE01, 0xFF00, // 0x0CD0 (3280) +0xFE80, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0CE0 (3296) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEA0, // 0x0CF0 (3312) +0xFE80, 0xFF00, 0xDE01, 0x2900, 0x0000, 0x0000, 0x0000, 0x0000, 0x0861, 0xBDD7, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0D00 (3328) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x8430, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18A1, 0xC561, // 0x0D10 (3344) +0xFF21, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0D20 (3360) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, // 0x0D30 (3376) +0xFF41, 0xC561, 0x18A1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9CD3, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0D40 (3392) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x73AE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0820, // 0x0D50 (3408) +0x9402, 0xFF01, 0xFEE0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0D60 (3424) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEE0, 0xFF01, // 0x0D70 (3440) +0x9402, 0x0820, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C51, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0D80 (3456) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x73AE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0D90 (3472) +0x0000, 0x4A01, 0xDDC1, 0xFF41, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0DA0 (3488) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFF21, 0xD5C1, 0x4A01, // 0x0DB0 (3504) +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C51, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0DC0 (3520) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x8430, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0DD0 (3536) +0x0000, 0x0000, 0x0840, 0x7B61, 0xE641, 0xFF21, 0xFEE0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0DE0 (3552) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEE0, 0xFF21, 0xE621, 0x7B42, 0x0840, 0x0000, // 0x0DF0 (3568) +0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0x9492, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0E00 (3584) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xAD55, 0x10A2, 0x0000, 0x0000, // 0x0E10 (3600) +0x0000, 0x0000, 0x0000, 0x0000, 0x1880, 0x7B21, 0xD5A1, 0xFF01, 0xFF20, 0xFF00, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, // 0x0E20 (3616) +0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFF00, 0xFF20, 0xFF01, 0xD5A1, 0x7321, 0x1880, 0x0000, 0x0000, 0x0000, // 0x0E30 (3632) +0x0000, 0x0000, 0x0000, 0x18E3, 0xAD75, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0E40 (3648) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xD69A, 0x4228, 0x0000, // 0x0E50 (3664) +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x41C1, 0x93E1, 0xD5A1, 0xFEA1, 0xFF01, 0xFF20, 0xFF20, 0xFF20, 0xFF00, // 0x0E60 (3680) +0xFF00, 0xFF00, 0xFF20, 0xFF20, 0xFF20, 0xFF01, 0xFEA1, 0xD5A1, 0x93E1, 0x41C1, 0x0020, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, // 0x0E70 (3696) +0x0000, 0x0000, 0x528A, 0xD6BA, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0E80 (3712) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFDF, 0x8C71, // 0x0E90 (3728) +0x10A2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2901, 0x5221, 0x7B41, 0x9402, 0xAC82, 0xBCE2, // 0x0EA0 (3744) +0xC521, 0xBCE2, 0xAC82, 0x9401, 0x7B41, 0x5221, 0x2901, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0EB0 (3760) +0x18E3, 0x94B2, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0EC0 (3776) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0ED0 (3792) +0xD6BA, 0x632C, 0x0841, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0EE0 (3808) +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x10A2, 0x738E, // 0x0EF0 (3824) +0xDEFB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F00 (3840) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F10 (3856) +0xFFFF, 0xFFFF, 0xCE79, 0x6B4D, 0x18C3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0000, 0x0000, // 0x0F20 (3872) +0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2104, 0x738E, 0xD69A, 0xFFFF, // 0x0F30 (3888) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F40 (3904) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F50 (3920) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE71C, 0x94B2, 0x4A49, 0x1082, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0F60 (3936) +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18C3, 0x4A69, 0x9CD3, 0xE73C, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F70 (3952) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F80 (3968) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F90 (3984) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEDB, 0xA534, 0x6B6D, 0x4208, 0x2104, 0x18C3, 0x0861, 0x0841, 0x0000, // 0x0FA0 (4000) +0x0000, 0x0000, 0x0841, 0x0861, 0x18C3, 0x2124, 0x4228, 0x6B6D, 0xA534, 0xDEDB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0FB0 (4016) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0FC0 (4032) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0FD0 (4048) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEDB, 0xB5B6, 0x9492, 0x6B6D, 0x4A49, // 0x0FE0 (4064) +0x4228, 0x4A49, 0x6B6D, 0x8C51, 0xAD75, 0xDEDB, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0FF0 (4080) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x1000 (4096) +}; diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Textrotation_Demo/UTFT_Textrotation_Demo.ino b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Textrotation_Demo/UTFT_Textrotation_Demo.ino new file mode 100644 index 0000000..3e25649 --- /dev/null +++ b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Textrotation_Demo/UTFT_Textrotation_Demo.ino @@ -0,0 +1,52 @@ +// UTFT_Textrotation_Demo (C)2014 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of the textrotation-functions. +// +// This demo was made for modules with a screen resolution +// of 320x240 pixels. +// +// This program requires the UTFT library. +// + +#include + +// Declare which fonts we will be using +extern uint8_t BigFont[]; +extern uint8_t SevenSegNumFont[]; + +// Set the pins to the correct ones for your development shield +// ------------------------------------------------------------ +// Standard Arduino Mega/Due shield : ,38,39,40,41 +// CTE TFT LCD/SD Shield for Arduino Due : ,25,26,27,28 +// Teensy 3.x TFT Test Board : ,23,22, 3, 4 +// ElecHouse TFT LCD/SD Shield for Arduino Due : ,22,23,31,33 +// +// Remember to change the model parameter to suit your display module! +UTFT myGLCD(ITDB32S,38,39,40,41); + +void setup() +{ + myGLCD.InitLCD(); + myGLCD.clrScr(); + myGLCD.setFont(BigFont); +} + +void loop() +{ + myGLCD.print("Text rotation", 0, 0); + myGLCD.setColor(0, 0, 255); + myGLCD.print("0 degrees", 0, 16, 0); + myGLCD.print("90 degrees", 319, 0, 90); + myGLCD.print("180 degrees", 319, 239, 180); + myGLCD.print("270 degrees", 0, 239, 270); + + myGLCD.setFont(SevenSegNumFont); + myGLCD.setColor(0, 255, 0); + myGLCD.print("45", 90, 100, 45); + myGLCD.print("90", 200, 50, 90); + myGLCD.print("180", 300, 200, 180); + + while (true) {}; +} + diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_ViewFont/UTFT_ViewFont.ino b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_ViewFont/UTFT_ViewFont.ino new file mode 100644 index 0000000..7a99d20 --- /dev/null +++ b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_ViewFont/UTFT_ViewFont.ino @@ -0,0 +1,59 @@ +// UTFT_ViewFont (C)2014 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of the included fonts. +// +// This demo was made for modules with a screen resolution +// of 320x240 pixels. +// +// This program requires the UTFT library. +// + +#include + +// Declare which fonts we will be using +extern uint8_t SmallFont[]; +extern uint8_t BigFont[]; +extern uint8_t SevenSegNumFont[]; + +// Set the pins to the correct ones for your development shield +// ------------------------------------------------------------ +// Standard Arduino Mega/Due shield : ,38,39,40,41 +// CTE TFT LCD/SD Shield for Arduino Due : ,25,26,27,28 +// Teensy 3.x TFT Test Board : ,23,22, 3, 4 +// ElecHouse TFT LCD/SD Shield for Arduino Due : ,22,23,31,33 +// +// Remember to change the model parameter to suit your display module! +UTFT myGLCD(ITDB32S,38,39,40,41); + +void setup() +{ + myGLCD.InitLCD(); + + myGLCD.clrScr(); +} + +void loop() +{ + myGLCD.setColor(0, 255, 0); + myGLCD.setBackColor(0, 0, 0); + + myGLCD.setFont(BigFont); + myGLCD.print(" !\"#$%&'()*+,-./", CENTER, 0); + myGLCD.print("0123456789:;<=>?", CENTER, 16); + myGLCD.print("@ABCDEFGHIJKLMNO", CENTER, 32); + myGLCD.print("PQRSTUVWXYZ[\\]^_", CENTER, 48); + myGLCD.print("`abcdefghijklmno", CENTER, 64); + myGLCD.print("pqrstuvwxyz{|}~ ", CENTER, 80); + + myGLCD.setFont(SmallFont); + myGLCD.print(" !\"#$%&'()*+,-./0123456789:;<=>?", CENTER, 120); + myGLCD.print("@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_", CENTER, 132); + myGLCD.print("`abcdefghijklmnopqrstuvwxyz{|}~ ", CENTER, 144); + + myGLCD.setFont(SevenSegNumFont); + myGLCD.print("0123456789", CENTER, 190); + + while(1) {}; +} + diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap/UTFT_Bitmap.ino b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap/UTFT_Bitmap.ino new file mode 100644 index 0000000..3eefe88 --- /dev/null +++ b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap/UTFT_Bitmap.ino @@ -0,0 +1,71 @@ +// UTFT_Bitmap (C)2014 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of the drawBitmap()-function. +// +// This demo was made to work on the 320x240 modules. +// Any other size displays may cause strange behaviour. +// +// This program requires the UTFT library. +// + +#include +#include + +// Declare which fonts we will be using +extern uint8_t SmallFont[]; + +// Set the pins to the correct ones for your development shield +// ------------------------------------------------------------ +// Arduino Uno / 2009: +// ------------------- +// Standard Arduino Uno/2009 shield : ,A5,A4,A3,A2 +// DisplayModule Arduino Uno TFT shield : ,A5,A4,A3,A2 +// +// Arduino Mega: +// ------------------- +// Standard Arduino Mega/Due shield : ,38,39,40,41 +// CTE TFT LCD/SD Shield for Arduino Mega : ,38,39,40,41 +// +// Remember to change the model parameter to suit your display module! +UTFT myGLCD(ITDB32S,38,39,40,41); + +extern unsigned int info[0x400]; +extern unsigned int icon[0x400]; +extern unsigned int tux[0x400]; + +void setup() +{ + myGLCD.InitLCD(); + myGLCD.setFont(SmallFont); +} + +void loop() +{ + myGLCD.fillScr(255, 255, 255); + myGLCD.setColor(255, 255, 255); + myGLCD.print(" *** A 10 by 7 grid of a 32x32 icon *** ", CENTER, 228); + for (int x=0; x<10; x++) + for (int y=0; y<7; y++) + myGLCD.drawBitmap (x*32, y*32, 32, 32, info); + + delay(5000); + + myGLCD.fillScr(255, 255, 255); + myGLCD.setColor(255, 255, 255); + myGLCD.print(" Two different icons in scale 1 to 4 ", CENTER, 228); + int x=0; + for (int s=0; s<4; s++) + { + x+=(s*32); + myGLCD.drawBitmap (x, 0, 32, 32, tux, s+1); + } + x=0; + for (int s=4; s>0; s--) + { + myGLCD.drawBitmap (x, 224-(s*32), 32, 32, icon, s); + x+=(s*32); + } + + delay(5000); +} diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap/icon.c b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap/icon.c new file mode 100644 index 0000000..374dd09 --- /dev/null +++ b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap/icon.c @@ -0,0 +1,73 @@ +// Generated by : ImageConverter 565 v1.0 +// Generated from: taskmgr.png +// Time generated: 11.10.2010 22:51:23 +// Size : 2 048 Bytes + +#include + +const unsigned short icon[0x400] PROGMEM ={ +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7D, 0xCE79, 0xBDD7, 0xAD75, // 0x0010 (16) +0xAD55, 0xAD75, 0xBDF7, 0xD6BA, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0020 (32) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xC638, 0x9492, 0x8C51, 0x9492, 0xA514, 0xA534, // 0x0030 (48) +0xA534, 0xA534, 0x9CF3, 0x8C71, 0x8430, 0x9CD3, 0xD69A, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0040 (64) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xCE59, 0x8410, 0x9492, 0xB5B6, 0xC618, 0xBDD7, 0xAD75, 0xA514, // 0x0050 (80) +0xA514, 0xA4F4, 0xAD55, 0xB5B6, 0xBDD7, 0xAD55, 0x8430, 0x8C71, 0xDEFB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0060 (96) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0x9CD3, 0x8430, 0xBDF7, 0xC618, 0xAD75, 0x94F2, 0x8CF1, 0x84B0, 0x8CD1, // 0x0070 (112) +0x9612, 0x8CB1, 0x7C6F, 0x7C8F, 0x8490, 0xA533, 0xBDF7, 0xB596, 0x7BEF, 0xB596, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0080 (128) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0x8430, 0x9CF3, 0xCE39, 0xA514, 0x94B2, 0x9E93, 0x94F2, 0x8CD1, 0x8CB1, 0x9D12, // 0x0090 (144) +0x9F74, 0x9D52, 0x8450, 0x7C8F, 0x73AE, 0x740E, 0x73CE, 0x9CD3, 0xC638, 0x8C51, 0x9CD3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00A0 (160) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0x8430, 0xA534, 0xBDF7, 0x8CB1, 0x8C31, 0x9DB3, 0xA735, 0x9D13, 0x8CB1, 0x8C71, 0x9D13, // 0x00B0 (176) +0xB756, 0xA5D4, 0x8C71, 0x8490, 0x8390, 0x7C70, 0x73EE, 0x6B4D, 0x8450, 0xBDF7, 0x8C71, 0x9CF3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00C0 (192) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x94B2, 0x9CF3, 0xBDD7, 0x8490, 0x8CF1, 0x9D72, 0xA694, 0xAE94, 0x9DD3, 0xA593, 0xA553, 0x9592, // 0x00D0 (208) +0x9672, 0x75CE, 0x5BAA, 0x64EB, 0x5D8C, 0x5BCA, 0x4B69, 0x634C, 0x748D, 0x7C4F, 0xBE18, 0x8430, 0xB5B6, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00E0 (224) +0xFFFF, 0xFFFF, 0xFFFF, 0xC618, 0x8410, 0xBDF7, 0x8410, 0x83F0, 0x94F2, 0x9613, 0x9D13, 0xAE55, 0x9D12, 0x750E, 0x55CB, 0x4BC8, // 0x00F0 (240) +0x4447, 0x3BC6, 0x4B67, 0x44E8, 0x3CE8, 0x3325, 0x20E2, 0x2B45, 0x43E7, 0x3946, 0x732D, 0xC5F8, 0x7BCF, 0xE71C, 0xFFFF, 0xFFFF, // 0x0100 (256) +0xFFFF, 0xFFFF, 0xF7BE, 0x7BEF, 0xBDB6, 0x9533, 0x8D71, 0x9552, 0x9E73, 0x9DD3, 0x94B2, 0x6D6D, 0x4BA8, 0x44A8, 0x55EA, 0x5D2A, // 0x0110 (272) +0x43E7, 0x4327, 0x46CA, 0x4B87, 0x42C6, 0x4E0A, 0x4D09, 0x4468, 0x4548, 0x3386, 0x2B25, 0x7C6F, 0xAD35, 0x9492, 0xFFFF, 0xFFFF, // 0x0120 (288) +0xFFDF, 0xFFFF, 0xBDD7, 0x8C71, 0xAD75, 0x8CF0, 0x8D71, 0x8D51, 0x9DF3, 0x740E, 0x21C4, 0x33E5, 0x558A, 0x554A, 0x650A, 0x566B, // 0x0130 (304) +0x43E7, 0x21C3, 0x3345, 0x2283, 0x1962, 0x3C87, 0x3386, 0x2163, 0x3345, 0x3346, 0x33A6, 0x32C6, 0x9CB3, 0x7BEF, 0xDEDB, 0xFFFF, // 0x0140 (320) +0xFFFF, 0xFFFF, 0x8430, 0xAD75, 0x8C31, 0x7C0F, 0x7BCF, 0x83F0, 0x636B, 0x0000, 0x0000, 0x4387, 0x462A, 0x4B27, 0x4B88, 0x4E8B, // 0x0150 (336) +0x42E6, 0x0000, 0x0020, 0x0100, 0x0000, 0x1121, 0x0040, 0x0000, 0x0941, 0x0000, 0x0020, 0x00E0, 0x5AAB, 0x94B2, 0x9CD3, 0xFFFF, // 0x0160 (352) +0xFFFF, 0xE71C, 0x8410, 0xB596, 0x7BEF, 0x7C6F, 0x84B0, 0x5B6B, 0x09E1, 0x0901, 0x1161, 0x3C06, 0x3D89, 0x32C5, 0x43E7, 0x470B, // 0x0170 (368) +0x4BC7, 0x0961, 0x11E2, 0x1282, 0x0961, 0x1262, 0x09E2, 0x0961, 0x12A2, 0x0961, 0x09C2, 0x0A01, 0x29E5, 0xA514, 0x7BEF, 0xFFDF, // 0x0180 (384) +0xFFFF, 0xBDD7, 0x9472, 0xA514, 0x6B4D, 0x7C6F, 0x634C, 0x0040, 0x0981, 0x0060, 0x00E0, 0x11E2, 0x10A1, 0x09C1, 0x19E3, 0x2B25, // 0x0190 (400) +0x22A3, 0x0060, 0x0120, 0x09E1, 0x0060, 0x09E1, 0x0120, 0x0060, 0x0A21, 0x0060, 0x0100, 0x01A0, 0x0040, 0x9CD3, 0x7BEF, 0xDEDB, // 0x01A0 (416) +0xFFFF, 0xA514, 0x9CF3, 0xB596, 0x73AE, 0x7C0F, 0x2945, 0x10A2, 0x2184, 0x18C3, 0x1923, 0x2184, 0x18C3, 0x21A4, 0x2964, 0x2905, // 0x01B0 (432) +0x2A25, 0x2104, 0x2965, 0x2A05, 0x2104, 0x2A05, 0x2985, 0x2104, 0x2A25, 0x2104, 0x2164, 0x29C4, 0x3166, 0xB5B6, 0x8410, 0xC618, // 0x01C0 (448) +0xFFFF, 0x9492, 0xA514, 0xDEDB, 0xC618, 0xA514, 0x8C51, 0x94B2, 0x9CB3, 0x9CF3, 0xA514, 0xA534, 0xAD75, 0xAD75, 0xB596, 0xB5D6, // 0x01D0 (464) +0xBDB7, 0xBDF7, 0xBDF7, 0xBDF7, 0xC618, 0xC5F8, 0xC5F8, 0xBDF7, 0xBDD7, 0xBDD7, 0xB5B6, 0xB596, 0xC638, 0xDEFB, 0x8430, 0xB596, // 0x01E0 (480) +0xFFFF, 0x8C51, 0x9CF3, 0xE73C, 0xDEFB, 0xD69A, 0xD6BA, 0xD6BA, 0xDEDB, 0xDEDB, 0xDEFB, 0xDF1B, 0xE71C, 0xE73C, 0xE73C, 0xE73C, // 0x01F0 (496) +0xEF5D, 0xEF5D, 0xEF5D, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xDEFB, 0xE71C, 0x8C51, 0xAD75, // 0x0200 (512) +0xFFFF, 0x8C71, 0x9CD3, 0xDEFB, 0xAD75, 0x9492, 0x9CD3, 0xA4F3, 0xA514, 0xAD55, 0xAD75, 0xB596, 0xBDB6, 0xBDD7, 0xC5F7, 0xC618, // 0x0210 (528) +0xC638, 0xCE59, 0xCE59, 0xCE79, 0xD679, 0xD679, 0xCE79, 0xCE59, 0xCE59, 0xC638, 0xC618, 0xBDF7, 0xCE79, 0xE71C, 0x8C51, 0xB596, // 0x0220 (544) +0xFFFF, 0x9CD3, 0x9492, 0xAD55, 0x2965, 0x2104, 0x2124, 0x2145, 0x1945, 0x2165, 0x2165, 0x2186, 0x2186, 0x29A6, 0x29A6, 0x31C7, // 0x0230 (560) +0x39C7, 0x31E7, 0x31E7, 0x31E7, 0x3208, 0x3208, 0x31E7, 0x31E7, 0x29E7, 0x31C7, 0x39C7, 0x31A6, 0x4A49, 0xBDF7, 0x8C51, 0xBDF7, // 0x0240 (576) +0xFFFF, 0xB5B6, 0x8430, 0x7BEF, 0x0000, 0x0000, 0x0000, 0x2000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3800, 0x2000, // 0x0250 (592) +0x0000, 0x3000, 0x3800, 0x3000, 0x3800, 0x3800, 0x3800, 0x3000, 0x3800, 0x0800, 0x0000, 0x0000, 0x0000, 0xA514, 0x8430, 0xD6BA, // 0x0260 (608) +0xFFFF, 0xDEDB, 0x7BCF, 0x8430, 0x0020, 0x0000, 0x0000, 0x8000, 0xC800, 0xC000, 0xC800, 0xC820, 0xC820, 0xC820, 0xD020, 0x9800, // 0x0270 (624) +0x0000, 0xB820, 0xD020, 0xD020, 0xD020, 0xD020, 0xD020, 0xC820, 0xD020, 0x4800, 0x0000, 0x0000, 0x2144, 0xAD75, 0x8410, 0xF7BE, // 0x0280 (640) +0xFFFF, 0xFFFF, 0x7BEF, 0x8C71, 0x2945, 0x0000, 0x0000, 0x6800, 0xA800, 0xA800, 0xA800, 0xA800, 0xA800, 0xA800, 0xB000, 0x8000, // 0x0290 (656) +0x0000, 0x9800, 0xB000, 0xB000, 0xB000, 0xB000, 0xB000, 0xB000, 0xB000, 0x4000, 0x0000, 0x0000, 0x632C, 0xA534, 0x94B2, 0xFFFF, // 0x02A0 (672) +0xFFDF, 0xFFFF, 0xAD75, 0x73AE, 0x632C, 0x0000, 0x0000, 0x6920, 0xA9E0, 0xA1C0, 0xA9E0, 0xA9E0, 0xA9E0, 0xA9E0, 0xA9E0, 0x7960, // 0x02B0 (688) +0x0000, 0x99C0, 0xB200, 0xA9E0, 0xB200, 0xB200, 0xB1E0, 0xA9E0, 0xB200, 0x40C0, 0x0000, 0x1082, 0xAD75, 0x8410, 0xD69A, 0xFFFF, // 0x02C0 (704) +0xFFFF, 0xFFFF, 0xF79E, 0x630C, 0x8C51, 0x2965, 0x0000, 0x7400, 0xB620, 0xAE00, 0xB620, 0xB640, 0xB640, 0xB620, 0xB660, 0x84A0, // 0x02D0 (720) +0x0000, 0xA5A0, 0xBE60, 0xB660, 0xBE60, 0xBE60, 0xB660, 0xB640, 0xBE80, 0x4260, 0x0000, 0x6B6D, 0xAD75, 0x8430, 0xFFFF, 0xFFFF, // 0x02E0 (736) +0xFFFF, 0xFFDF, 0xFFFF, 0xB5B6, 0x632C, 0x8410, 0x0021, 0x7360, 0xBD40, 0xB520, 0xBD40, 0xBD60, 0xBD60, 0xBD40, 0xC580, 0x8C00, // 0x02F0 (752) +0x0000, 0xACE0, 0xC580, 0xC580, 0xC580, 0xC580, 0xC580, 0xBD60, 0xC5A0, 0x39C0, 0x2126, 0xBDF7, 0x73AE, 0xD6BA, 0xFFFF, 0xFFFF, // 0x0300 (768) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x7BEF, 0x7BEF, 0x630D, 0x4AE1, 0x6D21, 0x6D01, 0x6D21, 0x6D41, 0x6D41, 0x6D41, 0x6D61, 0x53E1, // 0x0310 (784) +0x0000, 0x64C1, 0x7562, 0x6D62, 0x6D62, 0x6D62, 0x6D62, 0x6D42, 0x6D41, 0x4263, 0xA515, 0x8C51, 0xA534, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0320 (800) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79E, 0x6B4D, 0x8410, 0x636E, 0x04A6, 0x05E5, 0x05C5, 0x0585, 0x0585, 0x0586, 0x05A6, 0x0424, // 0x0330 (816) +0x0000, 0x0505, 0x05C6, 0x05A6, 0x05A6, 0x05C7, 0x0606, 0x0606, 0x1CE9, 0xA535, 0x9492, 0x8C71, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0340 (832) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7D, 0x6B4D, 0x83EF, 0x9411, 0x3A47, 0x0403, 0x0584, 0x05A4, 0x0585, 0x0585, 0x0404, // 0x0350 (848) +0x0000, 0x04E5, 0x05A5, 0x05A5, 0x05C5, 0x0584, 0x1405, 0x634B, 0xBD76, 0x8C51, 0x8C51, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0360 (864) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0x8410, 0x6B6D, 0x9CB3, 0x7C6F, 0x3CA9, 0x0BE4, 0x0443, 0x0504, 0x03C2, // 0x0370 (880) +0x0000, 0x0483, 0x0504, 0x0444, 0x1426, 0x552D, 0xA554, 0xB576, 0x73CE, 0x9CF3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0380 (896) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xB5B6, 0x6B4D, 0x7BAF, 0x9432, 0x8BD1, 0x6BCE, 0x4C6B, 0x3C09, // 0x0390 (912) +0x3186, 0x3C8A, 0x5C8C, 0x8430, 0xA493, 0xACD4, 0x8410, 0x7BEF, 0xCE79, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03A0 (928) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0xAD75, 0x7BEF, 0x73AE, 0x83F0, 0x8C11, 0x9431, // 0x03B0 (944) +0x9492, 0x9452, 0x9432, 0x8430, 0x7BEF, 0x8450, 0xBDF7, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03C0 (960) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEFB, 0xBDD7, 0xA534, 0x94D3, // 0x03D0 (976) +0x94B2, 0x9CF3, 0xA554, 0xC618, 0xE73C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03E0 (992) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03F0 (1008) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) +}; diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap/info.c b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap/info.c new file mode 100644 index 0000000..a0a04ee --- /dev/null +++ b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap/info.c @@ -0,0 +1,73 @@ +// Generated by : ImageConverter 565 v1.0 +// Generated from: info.png +// Time generated: 11.10.2010 22:27:55 +// Size : 2 048 Bytes + +#include + +const unsigned short info[0x400] PROGMEM ={ +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0010 (16) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0020 (32) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF9F, 0xC69D, 0x95BB, 0x7D1A, 0x6CB9, // 0x0030 (48) +0x6499, 0x74F9, 0x8D7A, 0xB63C, 0xE73E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0040 (64) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xAE1C, 0x4C18, 0x2B56, 0x3397, 0x4C38, 0x64B9, 0x751A, // 0x0050 (80) +0x7D3A, 0x6CD9, 0x5458, 0x3BD7, 0x2B56, 0x3BB7, 0x855A, 0xE77E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0060 (96) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xA5FB, 0x2B56, 0x2B77, 0x751A, 0xB67C, 0xD73E, 0xE75E, 0xE77E, 0xE77E, // 0x0070 (112) +0xE77E, 0xE77E, 0xE75E, 0xDF3E, 0xC6DD, 0x8D9B, 0x43D7, 0x1B16, 0x74D9, 0xF7BF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0080 (128) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF9F, 0x4C18, 0x1AF6, 0x855A, 0xCEFE, 0xD71E, 0xCEFD, 0xC6DD, 0xC6BD, 0xC6BD, 0xBEBD, // 0x0090 (144) +0xC6BD, 0xBEBD, 0xC6BD, 0xC6DD, 0xC6DD, 0xD71E, 0xD71E, 0xA61C, 0x33B7, 0x2316, 0xBE7C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00A0 (160) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDF3E, 0x2336, 0x3BD7, 0xBE9D, 0xC6DD, 0xBE9D, 0xBE9D, 0xBE9D, 0xBEBD, 0xBE9D, 0xCEFD, 0xEF9F, // 0x00B0 (176) +0xEF9F, 0xD73E, 0xBE9D, 0xBEBD, 0xBE9D, 0xBE9D, 0xB69D, 0xC6BD, 0xCEDD, 0x6CFA, 0x0295, 0x9DBB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00C0 (192) +0xFFFF, 0xFFFF, 0xFFFF, 0xE75E, 0x1AF6, 0x4C58, 0xBEBD, 0xB67D, 0xAE5C, 0xB67D, 0xB67D, 0xB69D, 0xB67D, 0xBEBD, 0xF7DF, 0xFFFF, // 0x00D0 (208) +0xFFFF, 0xFFFF, 0xCF1E, 0xB67D, 0xB67D, 0xB67D, 0xB67D, 0xAE5C, 0xAE5C, 0xC6BD, 0x857B, 0x0295, 0xA5DB, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00E0 (224) +0xFFFF, 0xFFFF, 0xFFDF, 0x3BB7, 0x33D8, 0xB67D, 0xA63C, 0xA63C, 0xAE5C, 0xAE5D, 0xAE5D, 0xAE7D, 0xA65D, 0xC6DD, 0xFFFF, 0xFFFF, // 0x00F0 (240) +0xFFDF, 0xFFFF, 0xDF5E, 0xA65D, 0xAE7D, 0xAE5D, 0xAE5D, 0xAE5C, 0xA63C, 0xA61C, 0xB67D, 0x753A, 0x0295, 0xCEBC, 0xFFFF, 0xFFFF, // 0x0100 (256) +0xF7DF, 0xFFFF, 0x957A, 0x12F6, 0x9E1C, 0x9E1C, 0x9E1C, 0x9E1C, 0xA63C, 0xA63C, 0xA63D, 0xA63D, 0xA65D, 0x9DFC, 0xDF3E, 0xFFFF, // 0x0110 (272) +0xFFFF, 0xFFDF, 0xA61C, 0xA65D, 0xA65D, 0xA63D, 0xA63C, 0xA63C, 0x9E1C, 0x9E1C, 0x9DFC, 0xAE3C, 0x3C18, 0x3396, 0xFFDF, 0xFFFF, // 0x0120 (288) +0xFFFF, 0xF79F, 0x2336, 0x64DA, 0x9DFC, 0x95DC, 0x95FC, 0x95FC, 0x9E1C, 0x9E1C, 0x9E3D, 0x9E3D, 0x9E3D, 0x9E3D, 0x7D3B, 0xA63C, // 0x0130 (304) +0xB6BD, 0x8DBB, 0x8DFC, 0xA65D, 0x9E3D, 0x9E3D, 0x9E1C, 0x9E1C, 0x95FC, 0x95FC, 0x95DC, 0x95DC, 0x8DBB, 0x0AF6, 0xA5DA, 0xFFFF, // 0x0140 (320) +0xFFFF, 0xA5FB, 0x1337, 0x8DBB, 0x8DBB, 0x8DBC, 0x8DDC, 0x95FC, 0x95FC, 0x961C, 0x961D, 0x963D, 0x9E3D, 0x963D, 0xA67D, 0xB6BD, // 0x0150 (336) +0xB6BD, 0xAE7D, 0x9E3D, 0x9E3D, 0x961D, 0x961D, 0x961C, 0x95FC, 0x95FC, 0x8DDC, 0x8DDC, 0x859B, 0x95DC, 0x3C18, 0x4BD7, 0xFFFF, // 0x0160 (352) +0xFFFF, 0x6499, 0x33F8, 0x8DBB, 0x859B, 0x85BC, 0x85BC, 0x8DDC, 0x8DFC, 0x8DFD, 0x8E1D, 0x961D, 0x961D, 0x9E3D, 0xF7BF, 0xFFFF, // 0x0170 (368) +0xFFFF, 0xFFFF, 0xA67D, 0x8E1D, 0x961D, 0x8E1D, 0x8DFD, 0x8DFC, 0x8DDC, 0x85BC, 0x85BC, 0x859B, 0x859B, 0x5CDA, 0x2336, 0xE71C, // 0x0180 (384) +0xFFFF, 0x43F8, 0x4C79, 0x859B, 0x7D7B, 0x7D9C, 0x85BC, 0x85DC, 0x85DC, 0x8DFD, 0x8DFD, 0x8E1D, 0x8E1D, 0xA67E, 0xFFFF, 0xFFFF, // 0x0190 (400) +0xFFFF, 0xFFFF, 0xBEDE, 0x85FD, 0x8E1D, 0x8DFD, 0x8DFD, 0x85DC, 0x85DC, 0x85BC, 0x7D9C, 0x7D7B, 0x7D7B, 0x753B, 0x1B36, 0xBE5A, // 0x01A0 (416) +0xFFBE, 0x3BF8, 0x3419, 0x6D1B, 0x757B, 0x7D9C, 0x7D9C, 0x7DBC, 0x7DDD, 0x85FD, 0x85FD, 0x861D, 0x861D, 0x9E7E, 0xFFFF, 0xFFFF, // 0x01B0 (432) +0xFFFF, 0xFFFF, 0xB6DE, 0x85FD, 0x8E1D, 0x85FD, 0x85FD, 0x7DDD, 0x7DBC, 0x7D9C, 0x7D9C, 0x757B, 0x6D3B, 0x4C9A, 0x1337, 0xADD9, // 0x01C0 (448) +0xFFBE, 0x4418, 0x23B9, 0x3439, 0x4CBA, 0x653B, 0x759C, 0x7DBD, 0x7DDD, 0x7DFD, 0x861D, 0x861E, 0x861E, 0x9E7E, 0xFFFF, 0xFFFF, // 0x01D0 (464) +0xFFFF, 0xFFFF, 0xB6DE, 0x7E1E, 0x861E, 0x85FD, 0x7DFD, 0x7DDD, 0x7DBD, 0x759C, 0x653B, 0x4CDB, 0x3439, 0x2BF9, 0x1337, 0xA5B9, // 0x01E0 (480) +0xFF9E, 0x4C39, 0x2BF9, 0x345A, 0x3C7A, 0x3C9B, 0x4CFC, 0x5D5C, 0x659D, 0x75DD, 0x7DFE, 0x861E, 0x7E3E, 0x969F, 0xFFFF, 0xFFFF, // 0x01F0 (496) +0xFFFF, 0xFFFF, 0xB6FF, 0x7E1E, 0x863E, 0x7DFE, 0x75DD, 0x6D9D, 0x5D5C, 0x4CFC, 0x3C9B, 0x347A, 0x345A, 0x343A, 0x1B78, 0xA5B9, // 0x0200 (512) +0xF79E, 0x4418, 0x2C3A, 0x3C7A, 0x449B, 0x44DB, 0x4CFC, 0x4D3C, 0x555D, 0x5D7D, 0x65BE, 0x6DFE, 0x6DFF, 0x867F, 0xFFFF, 0xFFFF, // 0x0210 (528) +0xFFFF, 0xFFFF, 0xA6DF, 0x65FF, 0x6DFE, 0x65BE, 0x5D9E, 0x555D, 0x4D3C, 0x4CFC, 0x44DB, 0x44BB, 0x3C7A, 0x345A, 0x1B78, 0xA599, // 0x0220 (544) +0xFFDE, 0x43D8, 0x345A, 0x3C9A, 0x44DB, 0x4CFC, 0x4D3C, 0x555D, 0x5D9D, 0x5DBE, 0x65DE, 0x6DFF, 0x661F, 0x867F, 0xFFFF, 0xFFFF, // 0x0230 (560) +0xFFFF, 0xFFFF, 0xA6DF, 0x65FF, 0x6DFF, 0x65DE, 0x5DBE, 0x5D9D, 0x555D, 0x4D3C, 0x4CFC, 0x44DB, 0x3C7A, 0x3C9B, 0x1B57, 0xADB9, // 0x0240 (576) +0xFFFF, 0x4BD7, 0x2C1A, 0x44DB, 0x44DB, 0x4D1C, 0x555D, 0x5D7D, 0x5DBE, 0x65DE, 0x6E1F, 0x6E3F, 0x765F, 0x96BF, 0xFFFF, 0xFFFF, // 0x0250 (592) +0xFFFF, 0xFFFF, 0xAEFF, 0x6E3F, 0x763F, 0x6E1F, 0x65DE, 0x5DBE, 0x5D7D, 0x555D, 0x4D1C, 0x44DC, 0x3C9B, 0x44DC, 0x1AD5, 0xC639, // 0x0260 (608) +0xFFFF, 0x84D8, 0x1317, 0x5D7D, 0x44DB, 0x553C, 0x557D, 0x5D9E, 0x65DE, 0x65FF, 0x6E3F, 0x7E5F, 0x7E7F, 0x9EDF, 0xFFFF, 0xFFFF, // 0x0270 (624) +0xFFFF, 0xFFFF, 0xB73F, 0x7E7F, 0x7E5F, 0x6E3F, 0x65FF, 0x65DE, 0x5D9E, 0x557D, 0x553C, 0x44DC, 0x4D1C, 0x345B, 0x22B4, 0xE71B, // 0x0280 (640) +0xFFFF, 0xD6BC, 0x0234, 0x4CFC, 0x5D7D, 0x4D3C, 0x5D9D, 0x5DBE, 0x65FF, 0x6E3F, 0x765F, 0x867F, 0x8EBF, 0xA6DF, 0xFFFF, 0xFFFF, // 0x0290 (656) +0xFFFF, 0xFFFF, 0xB71F, 0x8EBF, 0x869F, 0x765F, 0x6E3F, 0x65FF, 0x5DBE, 0x5D7D, 0x553D, 0x4D1C, 0x65BE, 0x0AB7, 0x6C15, 0xFFBE, // 0x02A0 (672) +0xFFFF, 0xFFFF, 0x53B6, 0x0296, 0x75FE, 0x5D9D, 0x557D, 0x65DE, 0x6E1F, 0x763F, 0x7E7F, 0x8EBF, 0x9EFF, 0x96BE, 0xAE3C, 0xE77E, // 0x02B0 (688) +0xEF9E, 0xC69D, 0x967E, 0x9EFF, 0x8EBF, 0x7E7F, 0x763F, 0x6E1F, 0x65DE, 0x5D9E, 0x555D, 0x761E, 0x341A, 0x1294, 0xBE18, 0xFFFF, // 0x02C0 (704) +0xFFFF, 0xFFFF, 0xCE9B, 0x0A13, 0x2378, 0x7E5F, 0x6E1E, 0x5DBE, 0x6E1F, 0x7E5F, 0x869F, 0x96DF, 0x9EFF, 0xAF5F, 0x9E9E, 0x8DFC, // 0x02D0 (720) +0x8E1C, 0x967D, 0xAF3F, 0xA6FF, 0x96DF, 0x869F, 0x7E5F, 0x6E1F, 0x5DBE, 0x65DE, 0x7E5F, 0x4CBB, 0x0AB5, 0x7454, 0xEF5C, 0xFFFF, // 0x02E0 (736) +0xFFFF, 0xFFFF, 0xFFFF, 0x8D17, 0x01D3, 0x23B9, 0x7E3E, 0x8E9F, 0x763F, 0x765F, 0x8E9F, 0x9EDF, 0xA71F, 0xB75F, 0xC7BF, 0xCFDF, // 0x02F0 (752) +0xCFDF, 0xC7BF, 0xB75F, 0xA71F, 0x9EDF, 0x8E9F, 0x765F, 0x6E1F, 0x867F, 0x8E7F, 0x4CBB, 0x1317, 0x4BB4, 0xD679, 0xFFFF, 0xFFFF, // 0x0300 (768) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFBD, 0x7476, 0x0214, 0x1B78, 0x659D, 0x9EDF, 0x9EFF, 0x96DF, 0x9EFF, 0xAF1F, 0xB75F, 0xC79F, 0xD7DF, // 0x0310 (784) +0xD7DF, 0xC79F, 0xB75F, 0xAF1F, 0x9EDF, 0x96DF, 0x96DF, 0x9EFF, 0x7E1E, 0x3C5A, 0x1B77, 0x43B5, 0xBDD6, 0xF7BE, 0xFFFF, 0xFFFF, // 0x0320 (800) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF77D, 0x7CB6, 0x12B4, 0x1337, 0x449B, 0x7DFD, 0xA6FF, 0xB75F, 0xBF7F, 0xC79F, 0xCFBF, 0xD7FF, // 0x0330 (816) +0xD7FF, 0xCFBF, 0xC79F, 0xBF7F, 0xB77F, 0xAF1F, 0x8E5E, 0x551B, 0x3419, 0x2BD7, 0x5415, 0xB5B6, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0340 (832) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79D, 0xA577, 0x3B75, 0x1B36, 0x2BD9, 0x4CBB, 0x759D, 0x965E, 0xAEDF, 0xBF3F, 0xC77F, // 0x0350 (848) +0xC77F, 0xBF3F, 0xB6FF, 0x9E7F, 0x7DDD, 0x5D1C, 0x447A, 0x3C59, 0x4437, 0x7474, 0xC617, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0360 (864) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDE, 0xD699, 0x84D5, 0x43D5, 0x33B7, 0x3418, 0x4C7A, 0x5CFC, 0x753D, 0x857E, // 0x0370 (880) +0x859E, 0x755D, 0x653C, 0x5CFB, 0x4CDA, 0x4CB9, 0x5497, 0x6C95, 0xA555, 0xDEDA, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0380 (896) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79D, 0xCE79, 0x9D56, 0x7495, 0x5C56, 0x4C77, 0x4C97, 0x4CB8, // 0x0390 (912) +0x54D8, 0x5CD8, 0x5CF8, 0x64D7, 0x74D6, 0x8CF5, 0xAD96, 0xD699, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03A0 (928) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFBE, 0xEF1B, 0xD679, 0xBDF7, 0xAD96, 0xA576, // 0x03B0 (944) +0xA576, 0xAD76, 0xB5B6, 0xC5F7, 0xD679, 0xEF3C, 0xFFDE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03C0 (960) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFBE, // 0x03D0 (976) +0xF7BE, 0xF7BE, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03E0 (992) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03F0 (1008) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) +}; diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap/tux.c b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap/tux.c new file mode 100644 index 0000000..3babe53 --- /dev/null +++ b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap/tux.c @@ -0,0 +1,73 @@ +// Generated by : ImageConverter 565 v1.0 +// Generated from: tux.png +// Time generated: 11.10.2010 22:51:32 +// Size : 2 048 Bytes + +#include + +const unsigned short tux[0x400] PROGMEM ={ +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE73C, 0x9CD3, 0x9CF3, 0xA514, // 0x0010 (16) +0x9CF3, 0x8C51, 0xAD75, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0020 (32) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7D, 0x5AEB, 0x7BEF, 0x9CD3, 0x94B2, // 0x0030 (48) +0x94B2, 0x94B2, 0x4228, 0x7BEF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0040 (64) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x9CF3, 0x18E3, 0x630C, 0x4A49, 0x4A69, // 0x0050 (80) +0x4A69, 0x528A, 0x4A49, 0x0000, 0xC638, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0060 (96) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x6B6D, 0x0000, 0x0020, 0x10A2, 0x1082, // 0x0070 (112) +0x0841, 0x0841, 0x0841, 0x0000, 0x630C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0080 (128) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x528A, 0x4228, 0x8410, 0x0000, 0x0861, // 0x0090 (144) +0xAD55, 0xBDD7, 0x10A2, 0x0000, 0x2945, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00A0 (160) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x5ACB, 0x8C71, 0xE75D, 0x2126, 0x528B, // 0x00B0 (176) +0xE75D, 0xDEDB, 0x7BCF, 0x0000, 0x18E3, 0xE73C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00C0 (192) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x6B6D, 0x4A4A, 0x6B2A, 0x8BE7, 0xA48A, // 0x00D0 (208) +0x6B09, 0x4A8A, 0x8431, 0x0000, 0x2104, 0xE73C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00E0 (224) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x6B6E, 0x5204, 0xDE6A, 0xFFF7, 0xFFF8, // 0x00F0 (240) +0xD5AC, 0xBCAA, 0x5A66, 0x0000, 0x1082, 0xDEFB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0100 (256) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x8C10, 0xC540, 0xFFED, 0xFF2C, 0xFEEC, // 0x0110 (272) +0xFECC, 0xFE66, 0x8260, 0x0000, 0x0000, 0xB596, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0120 (288) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x94B3, 0x9C25, 0xFF20, 0xFE40, 0xFDA0, // 0x0130 (304) +0xFCC0, 0xF524, 0x836A, 0x0000, 0x0000, 0x630C, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0140 (320) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x630C, 0x94B4, 0xFF13, 0xFD83, 0xF523, // 0x0150 (336) +0xE5CF, 0xF79E, 0xE71D, 0x0861, 0x0000, 0x0861, 0xDEDB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0160 (352) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xCE59, 0x0841, 0xD69A, 0xFFFF, 0xFF7D, 0xF77D, // 0x0170 (368) +0xFFFF, 0xFFFF, 0xFFFF, 0x73AE, 0x0000, 0x0000, 0x4A69, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0180 (384) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79E, 0x10A2, 0x8410, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, // 0x0190 (400) +0xFFFF, 0xFFDF, 0xFFFF, 0xCE59, 0x0000, 0x0000, 0x0000, 0x9492, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01A0 (416) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x52AA, 0x0020, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01B0 (432) +0xFFDF, 0xFFDF, 0xF7BE, 0xFFDF, 0x3186, 0x0000, 0x0020, 0x0841, 0xCE79, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01C0 (448) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xC638, 0x0000, 0x52AA, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFDF, // 0x01D0 (464) +0xFFDF, 0xF7BE, 0xF79E, 0xFFFF, 0x9CF3, 0x0000, 0x0841, 0x0000, 0x39E7, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01E0 (480) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x5ACB, 0x0000, 0xBDF7, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFDF, 0xFFDF, // 0x01F0 (496) +0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0x3186, 0x0000, 0x0861, 0x0000, 0xAD55, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0200 (512) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE73C, 0x0861, 0x4A49, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, // 0x0210 (528) +0xF7BE, 0xF79E, 0xEF7D, 0xEF5D, 0xFFDF, 0x8410, 0x0000, 0x1082, 0x0000, 0x39E7, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0220 (544) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x94B2, 0x0000, 0xB596, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, // 0x0230 (560) +0xF79E, 0xEF7D, 0xEF7D, 0xE73C, 0xF79E, 0xAD55, 0x0861, 0x10A2, 0x0861, 0x0841, 0xCE59, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0240 (576) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79E, 0x3185, 0x10A2, 0xE71C, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF79E, // 0x0250 (592) +0xEF7D, 0xEF7D, 0xEF5D, 0xE73C, 0xEF5D, 0xBDF7, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x8C71, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0260 (608) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x94B2, 0x0000, 0x39E7, 0xF7BE, 0xFFFF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF79E, 0xEF7D, // 0x0270 (624) +0xEF7D, 0xEF5D, 0xE73C, 0xE71C, 0xE71C, 0xC618, 0x18E3, 0x10A2, 0x10A2, 0x0020, 0x6B4D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0280 (640) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x8C51, 0x38E0, 0x4A27, 0xFFFF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF79E, 0xEF7D, 0xEF7D, // 0x0290 (656) +0xEF5D, 0xE73C, 0xE71C, 0xDEFB, 0xDF1D, 0xBDF8, 0x39C7, 0x5ACB, 0x528A, 0x10A3, 0x738F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02A0 (672) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDD6C, 0xFE2B, 0xBC45, 0xA513, 0xFFFF, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF5D, // 0x02B0 (688) +0xE73C, 0xE71C, 0xDEFB, 0xD6DC, 0xDD8E, 0xB3E4, 0x2124, 0x2965, 0x2945, 0x20C1, 0xB511, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02C0 (704) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF77C, 0xE5CF, 0xF60B, 0xFF9B, 0xFF54, 0x8B02, 0x7BF0, 0xFFDF, 0xF79E, 0xEF5D, 0xEF5D, 0xE73C, // 0x02D0 (720) +0xE71C, 0xDEFB, 0xDEDB, 0xCE7A, 0xED89, 0xDDAD, 0x0842, 0x0000, 0x0000, 0xAC69, 0xDD6B, 0xEFBF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02E0 (736) +0xFFFF, 0xFFFF, 0xFFBE, 0xE5CB, 0xEDC9, 0xFE4B, 0xFF14, 0xFEF3, 0xFF35, 0xFE8D, 0x51C1, 0x634E, 0xE73C, 0xEF5D, 0xE73C, 0xE71C, // 0x02F0 (752) +0xDEFB, 0xDEDB, 0xD6DB, 0xCE59, 0xE58B, 0xFF98, 0xBD4F, 0x8B88, 0xCD90, 0xFFB7, 0xCCE8, 0xE73D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0300 (768) +0xFFFF, 0xFFFF, 0xEF3B, 0xF583, 0xFF30, 0xFF11, 0xFECF, 0xFEEF, 0xFECF, 0xFF30, 0xDD46, 0x2903, 0x6B8E, 0xEF7D, 0xE71C, 0xDEFB, // 0x0310 (784) +0xDEDB, 0xD6BA, 0xD69A, 0xCE59, 0xE5AA, 0xFF11, 0xFF53, 0xFF73, 0xFF33, 0xFF12, 0xFE6C, 0xDDAD, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0320 (800) +0xFFFF, 0xFFFF, 0xF79E, 0xEDC5, 0xFECB, 0xFECC, 0xFECC, 0xFEEC, 0xFECB, 0xFECC, 0xFEEA, 0x9BE5, 0x8432, 0xE73C, 0xDEDB, 0xDEDB, // 0x0330 (816) +0xD6BA, 0xD69A, 0xDEDB, 0xA4F3, 0xD547, 0xFF2E, 0xFECD, 0xFECE, 0xFEEE, 0xFEEE, 0xFF10, 0xFEAB, 0xE5A8, 0xEF7D, 0xFFFF, 0xFFFF, // 0x0340 (832) +0xFFFF, 0xFFFF, 0xF79E, 0xF603, 0xFEA2, 0xFEC7, 0xFEC7, 0xFEA4, 0xFE81, 0xFE61, 0xFEA4, 0xFE43, 0xDE33, 0xE75E, 0xE71C, 0xDEFB, // 0x0350 (848) +0xDEDB, 0xCE58, 0x8C72, 0x5247, 0xEDE4, 0xFF0A, 0xFECA, 0xFEC9, 0xFE84, 0xFE83, 0xFEE7, 0xFEA3, 0xB443, 0xD69B, 0xFFFF, 0xFFFF, // 0x0360 (864) +0xFFFF, 0xFFFF, 0xF75B, 0xFE60, 0xFF00, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEE0, 0xE5C1, 0x9492, 0xA514, 0x9CD3, // 0x0370 (880) +0x8410, 0x630B, 0x4229, 0x6AE8, 0xFE80, 0xFEC1, 0xFEC1, 0xFEA0, 0xFEA0, 0xFEE0, 0xDD80, 0x9BE8, 0xB597, 0xFFDF, 0xFFFF, 0xFFFF, // 0x0380 (896) +0xFFFF, 0xFFFF, 0xF79E, 0xD589, 0xE600, 0xFEA0, 0xFF00, 0xFF40, 0xFF40, 0xFF00, 0xFF00, 0xFF20, 0xFEC0, 0x5267, 0x4229, 0x4A48, // 0x0390 (912) +0x4A49, 0x5289, 0x424A, 0x7B46, 0xFF20, 0xFEE0, 0xFEE0, 0xFF20, 0xFEE0, 0xB4A5, 0x9C92, 0xDEFD, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03A0 (928) +0xFFFF, 0xFFFF, 0xFFFF, 0xE71D, 0xBDB6, 0xB530, 0xBD0B, 0xCD65, 0xEE60, 0xFF40, 0xFFA0, 0xFF80, 0xBD03, 0x8410, 0xA514, 0xA534, // 0x03B0 (944) +0xAD75, 0xB596, 0xA555, 0x9C8F, 0xF6C0, 0xFFA0, 0xFFA0, 0xF6E0, 0xA449, 0xB5B8, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03C0 (960) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7F, 0xD69C, 0xBD95, 0xBD4C, 0xCDC6, 0xB4E8, 0xAD35, 0xF7BF, 0xFFFF, 0xFFFF, // 0x03D0 (976) +0xFFFF, 0xFFFF, 0xFFFF, 0xF7BF, 0xCDD0, 0xCDC6, 0xCDA7, 0xA48D, 0xCE7B, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03E0 (992) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDF1F, 0xB59A, 0xBDDA, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, // 0x03F0 (1008) +0xFFFF, 0xFFDF, 0xFFDF, 0xFFFF, 0xEF7F, 0xB59A, 0xAD59, 0xDF1D, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) +}; diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap_128x128/UTFT_Bitmap_128x128.ino b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap_128x128/UTFT_Bitmap_128x128.ino new file mode 100644 index 0000000..1d10e99 --- /dev/null +++ b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap_128x128/UTFT_Bitmap_128x128.ino @@ -0,0 +1,50 @@ +// UTFT_Bitmap_128x128 (C)2012 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of the drawBitmap()-function. +// +// This demo was made to work on the 128x128 modules. +// Any other size displays may cause strange behaviour. +// +// This program requires the UTFT library. +// + +#include +#include + +UTFT myGLCD(LPH9135,6,5,2,3,4); // Remember to change the model parameter to suit your display module! + +extern unsigned int icon1[0x400]; +extern unsigned int icon2[0x400]; +extern unsigned int tux[0x1000]; + +void setup() +{ + myGLCD.InitLCD(PORTRAIT); +} + +void loop() +{ +// Draw a 4 by 4 grid of a 32x32 icon. + myGLCD.fillScr(255, 255, 255); + for (int x=0; x<4; x++) + for (int y=0; y<4; y++) + myGLCD.drawBitmap (x*32, y*32, 32, 32, icon1); + + delay(5000); + +// Draw a 64x64 icon in double size. + myGLCD.fillScr(255, 255, 255); + myGLCD.drawBitmap (0, 0, 64, 64, tux, 2); + + delay(5000); + +// Draw a 2 by 2 grid of a 32x32 icon in double size. + myGLCD.fillScr(255, 255, 255); + for (int x=0; x<2; x++) + for (int y=0; y<2; y++) + myGLCD.drawBitmap (x*64, y*64, 32, 32, icon2, 2); + + delay(5000); +} + diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap_128x128/icon1.c b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap_128x128/icon1.c new file mode 100644 index 0000000..e9da278 --- /dev/null +++ b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap_128x128/icon1.c @@ -0,0 +1,74 @@ +// Generated by : ImageConverter 565 v1.0 +// Generated from: exit.png +// Time generated: 14.10.2010 21:53:03 +// Dimensions : 32x32 pixels +// Size : 2 048 Bytes + +#include + +const unsigned short icon1[0x400] PROGMEM ={ +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF1C, 0xE618, 0xE638, 0xE638, 0xE638, 0xE659, 0xE659, 0xE659, 0xE659, 0xE659, 0xE679, 0xE679, // 0x0010 (16) +0xE679, 0xE679, 0xE679, 0xE679, 0xEE79, 0xEE9A, 0xEE9A, 0xEE9A, 0xEE9A, 0xEE9A, 0xE638, 0xEEBA, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0020 (32) +0xFFFF, 0xFFFF, 0xFFFF, 0xD555, 0xCCD3, 0xDDB6, 0xDDD7, 0xDDF7, 0xDDF7, 0xDE18, 0xE618, 0xE638, 0xE638, 0xE659, 0xE679, 0xE679, // 0x0030 (48) +0xEE9A, 0xEE9A, 0xEEBA, 0xEEBA, 0xEEBA, 0xEEDB, 0xEEDB, 0xEEFB, 0xEEFB, 0xEEFB, 0xEEFB, 0xE659, 0xD575, 0xF77D, 0xFFFF, 0xFFFF, // 0x0040 (64) +0xFFDF, 0xFFFF, 0xD534, 0xC471, 0xD575, 0xCCF3, 0xCCD3, 0xCCD3, 0xCCF3, 0xCCF3, 0xD4F3, 0xD514, 0xD514, 0xD514, 0xD534, 0xDD55, // 0x0050 (80) +0xDD55, 0xDD55, 0xDD55, 0xDD75, 0xDD75, 0xDD75, 0xDD96, 0xDD96, 0xDD96, 0xDDB6, 0xDDD7, 0xEE79, 0xEEBA, 0xD534, 0xFFBE, 0xFFFF, // 0x0060 (96) +0xFFFF, 0xEEDB, 0xB38E, 0xC4B2, 0xBC30, 0xC451, 0xC471, 0xC471, 0xCC71, 0xCC92, 0xCC92, 0xCC92, 0xCCB2, 0xD4B2, 0xD4B2, 0xCC71, // 0x0070 (112) +0xCC71, 0xD4D3, 0xD4F3, 0xDCF3, 0xDCF3, 0xDD14, 0xDD14, 0xDD14, 0xDD34, 0xDD34, 0xDD34, 0xDD14, 0xE5D7, 0xDD96, 0xDDF7, 0xFFFF, // 0x0080 (128) +0xFFFF, 0xC4F3, 0xAB2C, 0xC430, 0xC410, 0xC430, 0xC430, 0xC430, 0xCC51, 0xCC51, 0xCC51, 0xCC71, 0xCC71, 0xD471, 0xCC71, 0xD5F7, // 0x0090 (144) +0xD5F7, 0xCC92, 0xDCB2, 0xDCD3, 0xDCD3, 0xDCD3, 0xDCD3, 0xDCF3, 0xDCF3, 0xDD14, 0xDD14, 0xDD34, 0xDD14, 0xDD34, 0xC492, 0xFFFF, // 0x00A0 (160) +0xFFFF, 0xB3EF, 0x9A28, 0xC430, 0xBBCF, 0xC3EF, 0xC3EF, 0xC3EF, 0xC410, 0xCC10, 0xCC10, 0xCC30, 0xCC51, 0xCBEF, 0xE638, 0xFFFF, // 0x00B0 (176) +0xFFFF, 0xE659, 0xD430, 0xDC92, 0xDC92, 0xDC92, 0xDCB2, 0xDCB2, 0xDCB2, 0xDCD3, 0xDCD3, 0xDCD3, 0xE514, 0xD410, 0xAB0C, 0xF7FF, // 0x00C0 (192) +0xFFFF, 0xABCF, 0x9165, 0xC3EF, 0xBB8E, 0xBBAE, 0xC3AE, 0xC3CF, 0xC3CF, 0xCBCF, 0xCBEF, 0xCC10, 0xCC10, 0xCBAE, 0xEE9A, 0xFFFF, // 0x00D0 (208) +0xFFFF, 0xF6DB, 0xD410, 0xDC71, 0xDC71, 0xDC71, 0xDC71, 0xDC71, 0xDC71, 0xE492, 0xE492, 0xE492, 0xE4F3, 0xCB2C, 0xA249, 0xF7FF, // 0x00E0 (224) +0xFFFF, 0xABCF, 0x88C3, 0xC3AE, 0xBB4D, 0xBB6D, 0xC36D, 0xC38E, 0xC38E, 0xCBAE, 0xC36D, 0xC34D, 0xCBCF, 0xCB8E, 0xEE59, 0xFFFF, // 0x00F0 (240) +0xFFFF, 0xF6BA, 0xDBCF, 0xD3CF, 0xCBAE, 0xD3CF, 0xE430, 0xE430, 0xE451, 0xE451, 0xE451, 0xE451, 0xECD3, 0xCAAA, 0xA208, 0xF7FF, // 0x0100 (256) +0xFFFF, 0xABCF, 0x8061, 0xBB6D, 0xBB2C, 0xBB2C, 0xC34D, 0xC34D, 0xCB4D, 0xBB0C, 0xC492, 0xCD14, 0xC38E, 0xCB2C, 0xEE59, 0xFFFF, // 0x0110 (272) +0xFFFF, 0xF6BA, 0xD36D, 0xD575, 0xE6DB, 0xDDB6, 0xD3AE, 0xE3EF, 0xE410, 0xE410, 0xE430, 0xE410, 0xECB2, 0xC986, 0xA208, 0xF7FF, // 0x0120 (288) +0xFFFF, 0xB3EF, 0x8041, 0xBB0C, 0xBAEB, 0xBAEB, 0xC30C, 0xC30C, 0xBACB, 0xD5B6, 0xFFFF, 0xFFFF, 0xEE79, 0xCACB, 0xEE59, 0xFFFF, // 0x0130 (304) +0xFFFF, 0xF679, 0xDBEF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEEBA, 0xD3CF, 0xE3AE, 0xE3EF, 0xE3CF, 0xEC10, 0xEB6D, 0xC000, 0xA249, 0xF7FF, // 0x0140 (320) +0xFFFF, 0xB3EF, 0x8020, 0xBACB, 0xBAAA, 0xBAAA, 0xC2EB, 0xBA8A, 0xD596, 0xFFFF, 0xFFDF, 0xFFFF, 0xF73C, 0xCAAA, 0xEE38, 0xFFFF, // 0x0150 (336) +0xFFFF, 0xF679, 0xDB4D, 0xFF7D, 0xFFFF, 0xFFDF, 0xFFFF, 0xEEDB, 0xDB6D, 0xEB8E, 0xEBAE, 0xEB8E, 0xE0A2, 0xC800, 0xAA49, 0xF7FF, // 0x0160 (352) +0xFFFF, 0xB3EF, 0x8000, 0xB28A, 0xBA69, 0xBA8A, 0xBA49, 0xCC30, 0xFFFF, 0xFFDF, 0xFFFF, 0xFF5D, 0xDBCF, 0xCA69, 0xEE18, 0xFFFF, // 0x0170 (368) +0xFFFF, 0xF679, 0xDAAA, 0xE3AE, 0xF6BA, 0xFFFF, 0xFFDF, 0xFFFF, 0xE5D7, 0xE30C, 0xEB8E, 0xE0E3, 0xE000, 0xC800, 0xAA49, 0xF7FF, // 0x0180 (384) +0xFFFF, 0xB3EF, 0x8800, 0xB249, 0xBA49, 0xBA49, 0xBA49, 0xEF1C, 0xFFFF, 0xFFFF, 0xFF7D, 0xD32C, 0xCA69, 0xD249, 0xEDF7, 0xFFFF, // 0x0190 (400) +0xFFFF, 0xF659, 0xDAAA, 0xE2CB, 0xE2EB, 0xFEBA, 0xFFFF, 0xFFDF, 0xFFDF, 0xE3CF, 0xE103, 0xE000, 0xE081, 0xD000, 0xAA69, 0xF7FF, // 0x01A0 (416) +0xFFFF, 0xB3EF, 0x8800, 0xB228, 0xBA08, 0xB9A6, 0xCBAE, 0xFFFF, 0xFFDF, 0xFFFF, 0xDC30, 0xC9E7, 0xD28A, 0xCA08, 0xF618, 0xFFFF, // 0x01B0 (432) +0xFFFF, 0xF679, 0xDA49, 0xE2CB, 0xE28A, 0xEB6D, 0xFFBE, 0xFFDF, 0xFFFF, 0xEC92, 0xE000, 0xE0A2, 0xE0C2, 0xD040, 0xAA89, 0xF7FF, // 0x01C0 (448) +0xFFFF, 0xB3EF, 0x8800, 0xB1E7, 0xB9E7, 0xB165, 0xDD55, 0xFFFF, 0xFFFF, 0xF71C, 0xCA08, 0xCA08, 0xD228, 0xD1E7, 0xE430, 0xFFDF, // 0x01D0 (464) +0xFFDF, 0xEC51, 0xDA08, 0xE28A, 0xE28A, 0xE228, 0xF618, 0xFFFF, 0xFFFF, 0xF679, 0xE081, 0xE0C2, 0xE903, 0xD081, 0xAA89, 0xF7FF, // 0x01E0 (480) +0xFFFF, 0xBBEF, 0x9000, 0xB1A6, 0xB986, 0xB145, 0xEE38, 0xFFFF, 0xFFFF, 0xED96, 0xC165, 0xC9E7, 0xD1E7, 0xD1E7, 0xD1C7, 0xDACB, // 0x01F0 (496) +0xE2EB, 0xD9E7, 0xE228, 0xE228, 0xEA69, 0xE9E7, 0xF40F, 0xFFFF, 0xFFFF, 0xFF5D, 0xE144, 0xE8E2, 0xE943, 0xD8C1, 0xAA8A, 0xF7FF, // 0x0200 (512) +0xFFFF, 0xBC10, 0x9000, 0xB165, 0xB145, 0xB924, 0xEE9A, 0xFFFF, 0xFFFF, 0xE514, 0xC124, 0xC9A6, 0xD1A6, 0xD1A6, 0xD1C7, 0xD9A6, // 0x0210 (528) +0xD9A6, 0xE1E7, 0xE208, 0xE208, 0xE9A6, 0xE041, 0xEA8A, 0xFFFF, 0xFFFF, 0xFF9E, 0xE9C6, 0xE902, 0xE984, 0xD902, 0xAAAA, 0xF7FF, // 0x0220 (544) +0xFFFF, 0xC410, 0x9000, 0xB124, 0xB124, 0xB0C3, 0xEE18, 0xFFFF, 0xFFFF, 0xE575, 0xC0E3, 0xC986, 0xD165, 0xD165, 0xD986, 0xD9A6, // 0x0230 (560) +0xD9A6, 0xE1A6, 0xE165, 0xE082, 0xE020, 0xE000, 0xEB4C, 0xFFFF, 0xFFFF, 0xFF7D, 0xE9A5, 0xE943, 0xE9A5, 0xD923, 0xAAAA, 0xF7FF, // 0x0240 (576) +0xFFFF, 0xC410, 0x9800, 0xB0E3, 0xB0E3, 0xB061, 0xE4F3, 0xFFFF, 0xFFFF, 0xF6FB, 0xC104, 0xC924, 0xD145, 0xD145, 0xD945, 0xD945, // 0x0250 (592) +0xD8E3, 0xD861, 0xD800, 0xE000, 0xE061, 0xE000, 0xED34, 0xFFFF, 0xFFFF, 0xFE9A, 0xE923, 0xE984, 0xE9C5, 0xE163, 0xAAAA, 0xF7FF, // 0x0260 (608) +0xFFFF, 0xC410, 0xA000, 0xB0A2, 0xB0A2, 0xB041, 0xCACB, 0xFFFF, 0xFFDF, 0xFFFF, 0xD34D, 0xC841, 0xD104, 0xD0A2, 0xD061, 0xD000, // 0x0270 (624) +0xD800, 0xD800, 0xE000, 0xE041, 0xE000, 0xD965, 0xFF9E, 0xFFDF, 0xFFFF, 0xF4D2, 0xE8E2, 0xE9A5, 0xE9E5, 0xE183, 0xAAAA, 0xF7FF, // 0x0280 (640) +0xFFFF, 0xCC10, 0xA000, 0xA861, 0xB061, 0xB061, 0xB882, 0xF6DB, 0xFFFF, 0xFFDF, 0xF75D, 0xC124, 0xC800, 0xD000, 0xD000, 0xD800, // 0x0290 (656) +0xD800, 0xE000, 0xE020, 0xE000, 0xD861, 0xF638, 0xFFFF, 0xFFDF, 0xFFDF, 0xEA68, 0xE943, 0xE9C5, 0xEA06, 0xE1A4, 0xB2CA, 0xF7FF, // 0x02A0 (672) +0xFFFF, 0xCC10, 0xA000, 0xA820, 0xB000, 0xB000, 0xB000, 0xCA49, 0xFFFF, 0xFFDF, 0xFFFF, 0xF71C, 0xCA08, 0xC800, 0xD000, 0xD800, // 0x02B0 (688) +0xD800, 0xD800, 0xD800, 0xD944, 0xEE18, 0xFFFF, 0xFFBE, 0xFFFF, 0xF4F2, 0xE902, 0xE9A5, 0xE9C5, 0xEA06, 0xE9A4, 0xB2CA, 0xF7FF, // 0x02C0 (704) +0xFFFF, 0xD410, 0xA800, 0xA800, 0xB000, 0xB000, 0xB800, 0xB800, 0xDC10, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xED96, 0xDAEB, 0xD1A6, // 0x02D0 (720) +0xD965, 0xDA69, 0xECD3, 0xFF9E, 0xFFFF, 0xFFBE, 0xFFFF, 0xFE17, 0xE923, 0xE964, 0xE9A5, 0xE9C5, 0xEA26, 0xE9C4, 0xBACA, 0xF7FF, // 0x02E0 (736) +0xF7FF, 0xD410, 0xA800, 0xA800, 0xB000, 0xB000, 0xB800, 0xB800, 0xB800, 0xE3EF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02F0 (752) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF5B6, 0xE923, 0xE923, 0xE984, 0xE9A5, 0xE9E5, 0xEA26, 0xE9C5, 0xBACA, 0xF7FF, // 0x0300 (768) +0xF7FF, 0xDC10, 0xB000, 0xA800, 0xB000, 0xB000, 0xB800, 0xB800, 0xC000, 0xC000, 0xD228, 0xF638, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0310 (784) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFEFB, 0xF3AE, 0xE0C1, 0xE903, 0xE964, 0xE984, 0xE9A5, 0xE9E5, 0xEA26, 0xE9E5, 0xC2CA, 0xF7DF, // 0x0320 (800) +0xF7FF, 0xDC51, 0xB800, 0xA800, 0xB000, 0xB000, 0xB800, 0xB800, 0xC000, 0xC000, 0xC000, 0xC800, 0xD9E7, 0xEC30, 0xF5D7, 0xFE9A, // 0x0330 (816) +0xFEBA, 0xF618, 0xF4D3, 0xEACB, 0xE0E2, 0xE040, 0xE903, 0xE943, 0xE943, 0xE984, 0xE9A5, 0xE9E5, 0xEA26, 0xEA05, 0xC30C, 0xF7DF, // 0x0340 (832) +0xFFFF, 0xD575, 0xD104, 0xA820, 0xB000, 0xB800, 0xB800, 0xC000, 0xC000, 0xC000, 0xC820, 0xC800, 0xD000, 0xD000, 0xD800, 0xD800, // 0x0350 (848) +0xE000, 0xE000, 0xE000, 0xE000, 0xE0A1, 0xE0E3, 0xE903, 0xE943, 0xE964, 0xE984, 0xE9C5, 0xE9C5, 0xF226, 0xE227, 0xBC10, 0xF7FF, // 0x0360 (864) +0xFFFF, 0xDF3C, 0xCAAA, 0xD186, 0xB082, 0xB000, 0xB800, 0xB800, 0xB800, 0xC000, 0xC000, 0xC800, 0xC800, 0xD000, 0xD000, 0xD800, // 0x0370 (880) +0xD800, 0xE000, 0xE020, 0xE040, 0xE061, 0xE0A1, 0xE0C2, 0xE102, 0xE123, 0xE943, 0xE984, 0xEA26, 0xFB0A, 0xBA08, 0xCE38, 0xFFFF, // 0x0380 (896) +0xFFFF, 0xFFDF, 0xBDD7, 0xCA69, 0xE248, 0xD207, 0xD1C6, 0xD1C6, 0xD9C7, 0xD9C7, 0xE1C7, 0xE1C7, 0xE1C7, 0xE9C7, 0xE9C7, 0xE9C7, // 0x0390 (912) +0xF1C6, 0xF1C7, 0xF1E7, 0xF207, 0xF228, 0xF248, 0xF269, 0xF289, 0xF2A9, 0xF2CA, 0xFB0A, 0xF2EA, 0xC207, 0xACB3, 0xF7BE, 0xFFFF, // 0x03A0 (928) +0xFFFF, 0xFFFF, 0xF7BE, 0xBDF7, 0xAB8E, 0xC2EB, 0xC2EB, 0xC30B, 0xC30B, 0xC30B, 0xC30B, 0xC30B, 0xC30B, 0xC30B, 0xCB0B, 0xCAEB, // 0x03B0 (944) +0xCAEB, 0xCACA, 0xCACA, 0xCAAA, 0xCAAA, 0xCA8A, 0xCA69, 0xC269, 0xC269, 0xC289, 0xBA69, 0xA2CB, 0xAD34, 0xEF7D, 0xFFFF, 0xFFFF, // 0x03C0 (960) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xDF3C, 0xBE39, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, // 0x03D0 (976) +0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xBE38, 0xD71C, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03E0 (992) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03F0 (1008) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) +}; diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap_128x128/icon2.c b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap_128x128/icon2.c new file mode 100644 index 0000000..3bcc564 --- /dev/null +++ b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap_128x128/icon2.c @@ -0,0 +1,74 @@ +// Generated by : ImageConverter 565 v1.0 +// Generated from: video.png +// Time generated: 14.10.2010 21:53:17 +// Dimensions : 32x32 pixels +// Size : 2 048 Bytes + +#include + +const unsigned short icon2[0x400] PROGMEM ={ +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0010 (16) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0020 (32) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE71C, 0xB5B6, 0x94B2, 0x8C71, // 0x0030 (48) +0x9492, 0xA534, 0xD6BA, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0040 (64) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF5D, 0x9CF3, 0x73AE, 0x6B6D, 0x73AE, 0x7BCF, // 0x0050 (80) +0x7BEF, 0x7BCF, 0x7BEF, 0xA534, 0xEF7D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0060 (96) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xC638, 0x7BCF, 0x6B6D, 0x738E, 0x7BCF, 0x8C71, 0x9492, // 0x0070 (112) +0x9492, 0x9492, 0x9492, 0x8C51, 0x8C71, 0xDEDB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0080 (128) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xB596, 0x738E, 0x738E, 0x73AE, 0x6B4D, 0x8410, 0x9CF3, 0x9CF3, // 0x0090 (144) +0x9CF3, 0x9CF3, 0x9CF3, 0x9CF3, 0x94B2, 0x7BEF, 0xDEDB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00A0 (160) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xB596, 0x738E, 0x7BEF, 0x8410, 0x632C, 0x4A69, 0x9492, 0xAD75, 0xAD55, // 0x00B0 (176) +0xAD55, 0xAD55, 0xAD55, 0xA534, 0xAD55, 0x9492, 0x8430, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00C0 (192) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xBDF7, 0x7BCF, 0x8430, 0x7BCF, 0x6B4D, 0x528A, 0x6B6D, 0xB5B6, 0xB5B6, 0xB5B6, // 0x00D0 (208) +0xB5B6, 0xB596, 0xB596, 0xAD75, 0xAD75, 0xAD55, 0x8410, 0xB5B6, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00E0 (224) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEDB, 0x7BEF, 0x9CD3, 0xA514, 0x5AEB, 0x630C, 0x6B4D, 0x9492, 0xC638, 0xC618, 0xC618, // 0x00F0 (240) +0xBDF7, 0xBDF7, 0xC618, 0xB5B6, 0xB5B6, 0xB596, 0x9492, 0x8C51, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0100 (256) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0x8C71, 0x94B2, 0xAD55, 0xB5B6, 0x738E, 0x6B4D, 0x632C, 0xB596, 0xD69A, 0xCE59, 0xCE59, // 0x0110 (272) +0xCE79, 0xCE59, 0x6B6D, 0x9492, 0xB5B6, 0xBDF7, 0x9CF3, 0x8430, 0xD69A, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0120 (288) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xB5B6, 0x8C51, 0xAD55, 0xB5B6, 0xCE79, 0x8C51, 0x630C, 0x8C51, 0xCE79, 0xD6BA, 0xD69A, 0xDEDB, // 0x0130 (304) +0xBDD7, 0x8C51, 0x4228, 0x2965, 0xAD55, 0xC638, 0xA534, 0x8430, 0xB5B6, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0140 (320) +0xFFFF, 0xFFFF, 0xFFFF, 0xEF5D, 0x8C51, 0xA514, 0xB5B6, 0xC618, 0xD6BA, 0xB5B6, 0xB596, 0xE71C, 0xDEFB, 0xDEFB, 0xE71C, 0xAD55, // 0x0150 (336) +0x738E, 0x7BEF, 0x5AEB, 0x2945, 0xC638, 0xCE59, 0xA534, 0x9492, 0xA534, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0160 (352) +0xFFFF, 0xFFFF, 0xFFFF, 0xB596, 0x94B2, 0xB5B6, 0xC618, 0xCE79, 0xD6BA, 0xE73C, 0xEF7D, 0xE73C, 0xEF5D, 0xE73C, 0x9CF3, 0x738E, // 0x0170 (368) +0x7BCF, 0x8430, 0x6B6D, 0x2965, 0xB596, 0xD69A, 0xAD55, 0x94B2, 0x9CD3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0180 (384) +0xFFFF, 0xFFFF, 0xF79E, 0x9492, 0x9CF3, 0xB5B6, 0xD69A, 0xDEFB, 0xE71C, 0xE73C, 0x6B6D, 0x528A, 0xDEDB, 0xEF5D, 0x7BEF, 0x8430, // 0x0190 (400) +0x7BEF, 0x8C51, 0x7BCF, 0x2104, 0xB596, 0xD6BA, 0xAD55, 0x9CD3, 0x9CF3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE73C, 0xE6FC, // 0x01A0 (416) +0xFFDF, 0xFFFF, 0xCE59, 0x9492, 0x9492, 0x6B4D, 0x7BCF, 0xBDD7, 0xF7BE, 0xA514, 0x4A49, 0x528A, 0xC638, 0xEF7D, 0x7BEF, 0x7BEF, // 0x01B0 (432) +0x7BEF, 0x8430, 0x5AEB, 0x10A2, 0xC618, 0xD69A, 0xAD55, 0x94B2, 0xA514, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xCE5A, 0x8BF2, // 0x01C0 (448) +0xFFFF, 0xFFFF, 0xAD55, 0x94B2, 0x8C51, 0x5AEB, 0x632C, 0xBDD7, 0xE73C, 0x630C, 0x632C, 0xBDF7, 0xFFDF, 0xEF5D, 0xBDD7, 0xB5B6, // 0x01D0 (464) +0xAD75, 0xAD75, 0x8C51, 0x738E, 0xD69A, 0xCE59, 0xB596, 0x8C51, 0xB5B6, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xCE39, 0x7350, // 0x01E0 (480) +0xFFFF, 0xF79E, 0x94B2, 0x94B2, 0x7BCF, 0x5AEB, 0x738E, 0xD6BA, 0xD69A, 0x2104, 0x6B6D, 0xF79E, 0xF79E, 0xF79E, 0xF7BE, 0xF79E, // 0x01F0 (496) +0xEF7D, 0xEF5D, 0xE73C, 0xE73C, 0xDEFB, 0xBDF7, 0xBDF7, 0x7BEF, 0xD69A, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xAD36, 0x7350, // 0x0200 (512) +0xFFFF, 0xDEDB, 0x8C51, 0x94B2, 0x738E, 0x632C, 0x73AE, 0xCE79, 0xF7BE, 0x7BEF, 0xA514, 0xF7BE, 0xF79E, 0xEF7D, 0xEF7D, 0xEF5D, // 0x0210 (528) +0xE73C, 0xE71C, 0xDEFB, 0xDEDB, 0xDEDB, 0xBDD7, 0xBDF7, 0x73AE, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0x9C75, 0x736F, // 0x0220 (544) +0xFFFF, 0xCE59, 0x8430, 0x94B2, 0x6B4D, 0x6B4D, 0xB596, 0xE73C, 0xEF7D, 0xFFFF, 0xFFFF, 0xF7BE, 0xF79E, 0xEF7D, 0xEF7D, 0xEF5D, // 0x0230 (560) +0xE73C, 0xE73C, 0xDEFB, 0xDEFB, 0xD6BA, 0xC618, 0xAD55, 0x8C71, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEDB, 0x6AEF, 0x9492, // 0x0240 (576) +0xFFFF, 0xBDF7, 0x8430, 0x8C71, 0x6B6D, 0xB596, 0xE71C, 0xE73C, 0xEF5D, 0xE73C, 0xBDF7, 0xCE59, 0xF7BE, 0xEF7D, 0xEF7D, 0xEF5D, // 0x0250 (592) +0xE73C, 0xE71C, 0xDEFB, 0xDEFB, 0xC638, 0xD69A, 0x8410, 0xC618, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0x9474, 0x6B0E, 0xCE59, // 0x0260 (608) +0xFFFF, 0xB5B6, 0x8410, 0x9492, 0xBDD7, 0xD6BA, 0xD6BA, 0xE71C, 0xE73C, 0x8C71, 0x6B4D, 0xA514, 0xF7BE, 0xEF5D, 0xEF5D, 0xE73C, // 0x0270 (624) +0xE73C, 0xE71C, 0xDEFB, 0xDEDB, 0xCE59, 0xC618, 0x7BCF, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xC5F9, 0x7B51, 0x7BEF, 0xFFFF, // 0x0280 (640) +0xFFFF, 0xB596, 0x8C71, 0xAD75, 0xBDF7, 0xCE59, 0xD69A, 0xE71C, 0xCE79, 0x8410, 0x8410, 0x9CD3, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, // 0x0290 (656) +0xE71C, 0xDEFB, 0xDEFB, 0xCE59, 0xDEDB, 0x8C71, 0xAD75, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEBB, 0x83B2, 0x630C, 0xE73C, 0xFFFF, // 0x02A0 (672) +0xFFFF, 0xB5B6, 0x9492, 0xAD55, 0xBDD7, 0xC638, 0xCE79, 0xDEFB, 0xB596, 0x73AE, 0x8410, 0x8410, 0xDEDB, 0xE73C, 0xE71C, 0xE71C, // 0x02B0 (688) +0xDEFB, 0xDEFB, 0xD6BA, 0xCE59, 0xC618, 0x738E, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEDC, 0x8C14, 0x5ACC, 0xC658, 0xFFFF, 0xFFFF, // 0x02C0 (704) +0xFFFF, 0xC638, 0x8C51, 0xA534, 0xB5B6, 0xBDF7, 0xCE59, 0xD6BA, 0x94B2, 0x738E, 0x8410, 0x8430, 0xCE59, 0xE73C, 0xDEFB, 0xDEFB, // 0x02D0 (720) +0xDEDB, 0xDEFB, 0xBDF7, 0xDEDB, 0x73AE, 0xC618, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEDC, 0x8BD2, 0x5ACC, 0xBDD6, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02E0 (736) +0xFFFF, 0xDEDB, 0x8C51, 0xA514, 0xAD75, 0xBDD7, 0xC638, 0xC618, 0x73AE, 0x7BCF, 0x8410, 0x5ACB, 0x8C51, 0xE73C, 0xDEDB, 0xD6BA, // 0x02F0 (752) +0xDEFB, 0xBDD7, 0xD69A, 0x8C71, 0x8C51, 0xFFFF, 0xFFFF, 0xFFDE, 0xCE5A, 0x7B71, 0x62ED, 0xBDF7, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0300 (768) +0xFFFF, 0xF7BE, 0x94B2, 0x94B2, 0xA534, 0xB596, 0xBDF7, 0xB596, 0x6B6D, 0x4208, 0x2945, 0x18C3, 0x6B6D, 0xDEFB, 0xD69A, 0xDEDB, // 0x0310 (784) +0xB5B6, 0xC618, 0x9CF3, 0x6B4D, 0xFFDE, 0xFFFF, 0xEF5D, 0xAD37, 0x62EE, 0x6B4D, 0xCE79, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0320 (800) +0xFFDF, 0xFFFF, 0xBDF7, 0x8C51, 0xA514, 0xAD55, 0xB596, 0xBDD7, 0xA514, 0x738E, 0xA514, 0xB5B6, 0xCE59, 0xD69A, 0xDEDB, 0xB596, // 0x0330 (816) +0xBDF7, 0xA534, 0x6B4C, 0xEF5D, 0xF79E, 0xBDB8, 0x7370, 0x5AAC, 0x8C71, 0xEF7D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0340 (832) +0xFFFF, 0xFFFF, 0xF79E, 0x94B2, 0x94B2, 0xA534, 0xAD55, 0xB5B6, 0xA534, 0xBDD7, 0xD69A, 0xCE59, 0xCE79, 0xCE59, 0xA534, 0x8430, // 0x0350 (848) +0x738E, 0x3186, 0x7BB0, 0x8C33, 0x7370, 0x62ED, 0x8410, 0xCE59, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0360 (864) +0xFFFF, 0xFFFF, 0xFFFF, 0xDEFB, 0x8C71, 0x9CD3, 0xAD55, 0xB596, 0xBDD7, 0xBDD7, 0xBDF7, 0xC618, 0xB5B6, 0xA534, 0xA534, 0x632C, // 0x0370 (880) +0x6B6D, 0xB5B6, 0xAD76, 0xAD76, 0xBE17, 0xE71B, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0380 (896) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEFB, 0x94B2, 0x8C51, 0x94B2, 0xA534, 0xAD55, 0xAD55, 0x9CD3, 0x8C71, 0x73AE, 0x632C, 0xA534, // 0x0390 (912) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03A0 (928) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0xCE59, 0xA514, 0x8430, 0x7BCF, 0x738E, 0x73AE, 0x8410, 0xA534, 0xEF7D, 0xFFFF, // 0x03B0 (944) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03C0 (960) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0xE73C, 0xE71C, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03D0 (976) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03E0 (992) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, // 0x03F0 (1008) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) +}; diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap_128x128/tux.c b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap_128x128/tux.c new file mode 100644 index 0000000..6c2e1e4 --- /dev/null +++ b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap_128x128/tux.c @@ -0,0 +1,266 @@ +// Generated by : ImageConverter 565 v1.0 +// Generated from: tux_64x64.png +// Time generated: 14.10.2010 21:56:38 +// Dimensions : 64x64 pixels +// Size : 8 192 Bytes + +#include + +const unsigned short tux[0x1000] PROGMEM ={ +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0010 (16) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xCE79, 0x9CF3, 0x7BCF, 0x738E, 0x738E, // 0x0020 (32) +0x6B6D, 0x94B2, 0xCE79, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0030 (48) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0040 (64) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0050 (80) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xCE79, 0x6B4D, 0x5ACB, 0x8410, 0x9CF3, 0x9CF3, 0x9CF3, // 0x0060 (96) +0x9CD3, 0x73AE, 0x4208, 0x5ACB, 0xCE79, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0070 (112) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0080 (128) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0090 (144) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xA514, 0x3186, 0x8C51, 0xBDF7, 0xC618, 0xBDF7, 0xBDF7, 0xBDF7, // 0x00A0 (160) +0xBDF7, 0xC618, 0xBDD7, 0x738E, 0x18C3, 0x8C51, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00B0 (176) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00C0 (192) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00D0 (208) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xBDD7, 0x10A2, 0x8C71, 0x9CF3, 0x8C71, 0x8C71, 0x8C71, 0x8C71, 0x8C71, // 0x00E0 (224) +0x8C71, 0x8C51, 0x8C51, 0x9CF3, 0x73AE, 0x0000, 0x7BEF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00F0 (240) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0100 (256) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0110 (272) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0x2945, 0x31A6, 0x7BCF, 0x6B4D, 0x6B6D, 0x6B6D, 0x6B6D, 0x6B6D, 0x6B6D, // 0x0120 (288) +0x6B6D, 0x6B6D, 0x6B6D, 0x6B4D, 0x73AE, 0x2124, 0x0000, 0xAD55, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0130 (304) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0140 (320) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0150 (336) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xC638, 0x0000, 0x31A6, 0x52AA, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, // 0x0160 (352) +0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x528A, 0x2104, 0x0000, 0x2965, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0170 (368) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0180 (384) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0190 (400) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x8C71, 0x0000, 0x1082, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, // 0x01A0 (416) +0x3186, 0x3186, 0x3186, 0x3186, 0x2965, 0x0020, 0x0000, 0x0000, 0x9CF3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01B0 (432) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01C0 (448) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01D0 (464) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x630C, 0x0000, 0x0000, 0x0861, 0x18C3, 0x10A2, 0x10A2, 0x10A2, 0x10A2, 0x18C3, // 0x01E0 (480) +0x1082, 0x0841, 0x1082, 0x10A2, 0x0020, 0x0000, 0x0000, 0x0000, 0x528A, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01F0 (496) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0200 (512) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0210 (528) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x4A49, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0220 (544) +0x0861, 0x3186, 0x18C3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2104, 0xD6BA, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0230 (560) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0240 (576) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0250 (592) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x39C7, 0x0000, 0x3186, 0xAD75, 0x8C51, 0x0841, 0x0000, 0x0000, 0x0000, 0x4208, // 0x0260 (608) +0xD6BA, 0xFFDF, 0xE71C, 0x630C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0xAD75, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0270 (624) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0280 (640) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0290 (656) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x39C7, 0x0000, 0xCE59, 0xFFFF, 0xFFFF, 0x94B2, 0x0000, 0x0000, 0x10A2, 0xE73C, // 0x02A0 (672) +0xFFFF, 0xFFFF, 0xFFFF, 0xEF7D, 0x2124, 0x0000, 0x0000, 0x0000, 0x0000, 0x94B2, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02B0 (688) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02C0 (704) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02D0 (720) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x2965, 0x18E3, 0xDEDB, 0x7BCF, 0xAD75, 0xEF5D, 0x2944, 0x0000, 0x5ACA, 0xFFFF, // 0x02E0 (736) +0xAD55, 0x94B2, 0xAD55, 0xF7BE, 0x8410, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C51, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02F0 (752) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0300 (768) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0310 (784) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x39E7, 0x2945, 0xA514, 0x9CF3, 0x8C71, 0xD6BB, 0x39C9, 0x0000, 0x632E, 0xF7DF, // 0x0320 (800) +0x7BEF, 0xAD54, 0x7BEF, 0xBDF7, 0xB596, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C71, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0330 (816) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0340 (832) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0350 (848) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x4A49, 0x18C3, 0x9492, 0x39E7, 0x3187, 0xA48F, 0x8323, 0x5A00, 0x93A6, 0xCDD5, // 0x0360 (864) +0x4209, 0x4249, 0x2965, 0x9CD2, 0xB575, 0x0000, 0x0000, 0x0000, 0x0000, 0x9492, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0370 (880) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0380 (896) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0390 (912) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x5ACB, 0x0000, 0x9D14, 0x2905, 0x6A40, 0xE643, 0xFFAE, 0xFFF3, 0xFF70, 0xDD86, // 0x03A0 (928) +0x7240, 0x1840, 0x18C3, 0xC65A, 0x73CF, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C51, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03B0 (944) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03C0 (960) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03D0 (976) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x738E, 0x0000, 0x5A6A, 0xD566, 0xFF66, 0xFFF8, 0xFFFD, 0xFFDC, 0xFFFD, 0xFFFA, // 0x03E0 (992) +0xFF0E, 0xE566, 0xC464, 0xC4CC, 0x2103, 0x0000, 0x0000, 0x0000, 0x0000, 0x6B6D, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03F0 (1008) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0410 (1040) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x7BEF, 0x0800, 0xB440, 0xFFC6, 0xFFF3, 0xFFB4, 0xFFB2, 0xFF92, 0xFF72, 0xFF53, // 0x0420 (1056) +0xFF55, 0xFF75, 0xFEF0, 0xF542, 0x8240, 0x0000, 0x0000, 0x0000, 0x0000, 0x4228, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0430 (1072) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0440 (1088) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0450 (1104) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x8432, 0x4140, 0xFFE2, 0xFFEB, 0xFFAC, 0xFF8B, 0xFF4C, 0xFF2C, 0xFEEC, 0xFECB, // 0x0460 (1120) +0xFE6A, 0xFE08, 0xFDA7, 0xFDC3, 0xA320, 0x0000, 0x0000, 0x0000, 0x0000, 0x18E3, 0xD69A, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0470 (1136) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0480 (1152) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0490 (1168) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x9D14, 0x28A0, 0xF6E0, 0xFFE1, 0xFF43, 0xFF04, 0xFEC4, 0xFE84, 0xFE23, 0xFDE1, // 0x04A0 (1184) +0xFD60, 0xFD20, 0xFD20, 0xFD20, 0x7241, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9CF3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x04B0 (1200) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x04C0 (1216) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x04D0 (1232) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xB5B6, 0x0000, 0xC4A9, 0xFEC0, 0xFF00, 0xFEA0, 0xFE40, 0xFE00, 0xFDA0, 0xFD60, // 0x04E0 (1248) +0xFD40, 0xFD20, 0xEC80, 0xDCC7, 0x8C0F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x52AA, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x04F0 (1264) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0500 (1280) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0510 (1296) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xAD75, 0x0000, 0xD69B, 0xF631, 0xF5C0, 0xFE80, 0xFE00, 0xFDC0, 0xFD60, 0xFD40, // 0x0520 (1312) +0xFCC0, 0xDC86, 0xCD93, 0xE73D, 0xE71C, 0x0861, 0x0000, 0x0000, 0x0000, 0x0000, 0x0861, 0xC618, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0530 (1328) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0540 (1344) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0550 (1360) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x632C, 0x0000, 0xD6BA, 0xFFFF, 0xF5F1, 0xFD40, 0xFD80, 0xFD20, 0xFCE0, 0xECA3, // 0x0560 (1376) +0xDD6F, 0xE6FC, 0xFFFF, 0xFFFF, 0xFFFF, 0x632C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5ACB, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0570 (1392) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0580 (1408) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0590 (1424) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xDEDB, 0x0861, 0x0000, 0xD69A, 0xFFFF, 0xFFFF, 0xFED8, 0xF631, 0xF610, 0xE5F2, 0xE6B9, // 0x05A0 (1440) +0xF7BF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xE71C, 0x10A2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0xB5B6, 0xFFFF, 0xFFFF, 0xFFFF, // 0x05B0 (1456) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x05C0 (1472) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x05D0 (1488) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0x39E7, 0x0000, 0x4228, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7FF, 0xF7DF, 0xFFFF, // 0x05E0 (1504) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x73AE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3186, 0xEF7D, 0xFFFF, 0xFFFF, // 0x05F0 (1520) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0600 (1536) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0610 (1552) +0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x738E, 0x0000, 0x18C3, 0xDEFB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0620 (1568) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFFF, 0xCE59, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6B4D, 0xFFFF, 0xFFFF, // 0x0630 (1584) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0640 (1600) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0650 (1616) +0xFFFF, 0xFFDF, 0xFFFF, 0xA514, 0x0000, 0x0000, 0x9CD3, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0660 (1632) +0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0x2965, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xAD55, 0xFFFF, // 0x0670 (1648) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0680 (1664) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0690 (1680) +0xFFDF, 0xFFFF, 0xD69A, 0x0861, 0x0000, 0x2945, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x06A0 (1696) +0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xFFFF, 0x7BCF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18C3, 0xD6BA, // 0x06B0 (1712) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x06C0 (1728) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x06D0 (1744) +0xFFFF, 0xFFDF, 0x39C7, 0x0000, 0x0000, 0x8430, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x06E0 (1760) +0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xFFFF, 0xCE79, 0x0841, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4228, // 0x06F0 (1776) +0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0700 (1792) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, // 0x0710 (1808) +0xFFFF, 0x94B2, 0x0000, 0x0020, 0x0020, 0xCE79, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, // 0x0720 (1824) +0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xFFDF, 0x4A69, 0x0000, 0x0841, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, // 0x0730 (1840) +0x8C71, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0740 (1856) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0750 (1872) +0xEF7D, 0x2104, 0x0020, 0x0000, 0x3186, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, // 0x0760 (1888) +0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xFFFF, 0xB5B6, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0000, // 0x0770 (1904) +0x10A2, 0xD6BA, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0780 (1920) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, // 0x0790 (1936) +0x8C71, 0x0000, 0x0861, 0x0000, 0x7BCF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, // 0x07A0 (1952) +0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xFFDF, 0x528A, 0x0000, 0x0841, 0x0020, 0x0020, 0x0020, 0x0020, // 0x07B0 (1968) +0x0000, 0x630C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x07C0 (1984) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, // 0x07D0 (2000) +0x3186, 0x0000, 0x0841, 0x10A2, 0xE71C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, // 0x07E0 (2016) +0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xF79E, 0xEF5D, 0xF7BE, 0xBDD7, 0x0841, 0x0861, 0x0841, 0x0841, 0x0841, 0x0020, // 0x07F0 (2032) +0x0020, 0x1082, 0xC638, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0800 (2048) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xBDD7, // 0x0810 (2064) +0x0020, 0x1082, 0x0000, 0x7BEF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, // 0x0820 (2080) +0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF7D, 0x4208, 0x0020, 0x0861, 0x0861, 0x0841, 0x0841, // 0x0830 (2096) +0x0841, 0x0000, 0x630C, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0840 (2112) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x6B4D, // 0x0850 (2128) +0x0000, 0x0861, 0x2104, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, // 0x0860 (2144) +0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xE73C, 0xF7BE, 0x8430, 0x0000, 0x1082, 0x0861, 0x0861, 0x0861, // 0x0870 (2160) +0x0861, 0x0020, 0x18C3, 0xCE79, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0880 (2176) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF5D, 0x2124, // 0x0890 (2192) +0x0861, 0x0020, 0x8410, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, // 0x08A0 (2208) +0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xEF7D, 0xB5B6, 0x0861, 0x1082, 0x1082, 0x0861, 0x0861, // 0x08B0 (2224) +0x0861, 0x0861, 0x0000, 0x8430, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x08C0 (2240) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xA514, 0x0020, // 0x08D0 (2256) +0x10A2, 0x1082, 0xD69A, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, // 0x08E0 (2272) +0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xEF5D, 0xCE79, 0x2124, 0x1082, 0x10A2, 0x1082, 0x1082, // 0x08F0 (2288) +0x0861, 0x1082, 0x0000, 0x4208, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0900 (2304) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0x4208, 0x0861, // 0x0910 (2320) +0x1082, 0x31A6, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, // 0x0920 (2336) +0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEDB, 0x39C7, 0x1082, 0x10A2, 0x10A2, 0x1082, // 0x0930 (2352) +0x1082, 0x1082, 0x0841, 0x18C3, 0xC618, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0940 (2368) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xA534, 0x0841, 0x18C3, // 0x0950 (2384) +0x0841, 0x630C, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, // 0x0960 (2400) +0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xDEFB, 0xE73C, 0x4A49, 0x0861, 0x18C3, 0x10A2, 0x10A2, // 0x0970 (2416) +0x10A2, 0x1082, 0x1082, 0x0841, 0x9CD3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0980 (2432) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7D, 0x3186, 0x1082, 0x18E3, // 0x0990 (2448) +0x0861, 0x94B2, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, // 0x09A0 (2464) +0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEDB, 0xE73C, 0x4A69, 0x1082, 0x18E3, 0x18C3, 0x10A2, // 0x09B0 (2480) +0x10A2, 0x10A2, 0x10A2, 0x0020, 0x73AE, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x09C0 (2496) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x94B2, 0x0841, 0x18E3, 0x18E3, // 0x09D0 (2512) +0x0861, 0xAD75, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, // 0x09E0 (2528) +0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEFB, 0xDEDB, 0xE73C, 0x52AA, 0x10A2, 0x2104, 0x18E3, 0x18C3, // 0x09F0 (2544) +0x18C3, 0x18C3, 0x10A2, 0x0841, 0x630C, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0A00 (2560) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x632C, 0x0861, 0x18E4, 0x18E4, // 0x0A10 (2576) +0x1082, 0xC638, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, // 0x0A20 (2592) +0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xD6BA, 0xE71C, 0x6B4D, 0x10A2, 0x18C3, 0x18C3, 0x10A2, // 0x0A30 (2608) +0x10A2, 0x10A2, 0x18C3, 0x0861, 0x5AEB, 0xE73C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0A40 (2624) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x8410, 0x0862, 0x3143, 0x2924, // 0x0A50 (2640) +0x0882, 0xBDD7, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, // 0x0A60 (2656) +0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEDB, 0xE73C, 0x630C, 0x2103, 0x4A69, 0x632C, 0x6B4D, // 0x0A70 (2672) +0x528A, 0x2965, 0x18C3, 0x1081, 0x738E, 0xE73C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0A80 (2688) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xB596, 0x7A40, 0xECA0, 0xCC00, // 0x0A90 (2704) +0x3941, 0xA535, 0xFFFF, 0xF7BE, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, // 0x0AA0 (2720) +0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEFB, 0xD6DB, 0xCE38, 0xC618, 0x4A48, 0x4A49, 0x6B6D, 0x6B4D, 0x6B4D, // 0x0AB0 (2736) +0x6B4D, 0x630C, 0x3186, 0x18E4, 0x9492, 0xEF7D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0AC0 (2752) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xC488, 0xFD41, 0xFE6D, 0xFE6A, // 0x0AD0 (2768) +0xDC60, 0x5A25, 0xB5D8, 0xFFFF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, // 0x0AE0 (2784) +0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xD6BB, 0xBCAB, 0xD462, 0xD462, 0x49E4, 0x10C3, 0x18C3, 0x18C3, 0x18C3, // 0x0AF0 (2800) +0x18C3, 0x18E3, 0x10A3, 0x49C4, 0xB575, 0xF7BF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0B00 (2816) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xCD70, 0xECA0, 0xFF14, 0xFF9B, 0xFF7B, // 0x0B10 (2832) +0xFECF, 0xC3A0, 0x3143, 0x9CF3, 0xFFFF, 0xF7BE, 0xF79E, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, // 0x0B20 (2848) +0xE73C, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEFB, 0xC617, 0xDC60, 0xFD60, 0xFD20, 0x3120, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0B30 (2864) +0x0000, 0x0000, 0x3900, 0xE460, 0xB46A, 0xEF9F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0B40 (2880) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xD5F4, 0xDC20, 0xFE8E, 0xFF59, 0xFF36, 0xFF36, // 0x0B50 (2896) +0xFF59, 0xFE6B, 0xA300, 0x18E4, 0x8410, 0xFFBE, 0xF7BE, 0xEF7D, 0xF79E, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, // 0x0B60 (2912) +0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEBA, 0xDEFB, 0xC5B5, 0xE4A1, 0xFEF2, 0xF716, 0x3164, 0x18E4, 0x2103, 0x1082, 0x1082, // 0x0B70 (2928) +0x0021, 0x1061, 0xD5D0, 0xFE27, 0xB3E3, 0xCE9B, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0B80 (2944) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF77D, 0xE697, 0xDDAF, 0xD4C8, 0xE480, 0xFE29, 0xFF36, 0xFF15, 0xFF35, 0xFF15, // 0x0B90 (2960) +0xFF15, 0xFF36, 0xFDA5, 0x6A42, 0x1905, 0x6B4C, 0xE73C, 0xFFDF, 0xEF5D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, // 0x0BA0 (2976) +0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEDB, 0xD6BA, 0xDEDB, 0xBDB5, 0xE4C3, 0xFF56, 0xFFDB, 0xAD10, 0x10A2, 0x10C3, 0x18E4, 0x1082, // 0x0BB0 (2992) +0x2922, 0xC5B1, 0xFFDC, 0xFED1, 0xB3A2, 0xBE19, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0BC0 (3008) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE6B8, 0xD484, 0xE4C0, 0xF584, 0xFE28, 0xFECF, 0xFF14, 0xFF13, 0xFF13, 0xFF13, 0xFF13, // 0x0BD0 (3024) +0xFF13, 0xFF14, 0xFEF0, 0xDC80, 0x41C5, 0x2945, 0x5269, 0xCE59, 0xF7BE, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, // 0x0BE0 (3040) +0xDEFB, 0xDEFB, 0xDEDB, 0xDEDB, 0xD6BA, 0xD69A, 0xD6DB, 0xBD95, 0xE4E2, 0xFF33, 0xFF36, 0xFF97, 0xDDF1, 0x8B66, 0x7AE4, 0x9BC7, // 0x0BF0 (3056) +0xEEB2, 0xFF97, 0xFF37, 0xFEF0, 0xC3E0, 0xB5B7, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0C00 (3072) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xD52B, 0xFD60, 0xFECD, 0xFF33, 0xFF13, 0xFF12, 0xFEF1, 0xFEF1, 0xFEF1, 0xFEF1, 0xFEF1, // 0x0C10 (3088) +0xFEF1, 0xFEF1, 0xFF12, 0xFE69, 0x9B41, 0x31A8, 0x31A6, 0x39E7, 0xB5B6, 0xF79E, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEFB, // 0x0C20 (3104) +0xDEFB, 0xDEDB, 0xDEDB, 0xD6BA, 0xD6BA, 0xD699, 0xD6BA, 0xBD94, 0xE502, 0xFF12, 0xFF15, 0xFEF4, 0xFF55, 0xFF95, 0xFF54, 0xFF95, // 0x0C30 (3120) +0xFF35, 0xFEF4, 0xFF14, 0xFF14, 0xF5A4, 0xB426, 0xE75E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0C40 (3136) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xD54C, 0xFDA0, 0xFECE, 0xFEF0, 0xFECF, 0xFEEF, 0xFEEF, 0xFEF0, 0xFEEF, 0xFEF0, 0xFEF0, // 0x0C50 (3152) +0xFEF0, 0xFEEF, 0xFEF0, 0xFEEF, 0xF582, 0x6244, 0x39E8, 0x39C6, 0x528A, 0xE71C, 0xE73C, 0xE71C, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, // 0x0C60 (3168) +0xDEDB, 0xDEDB, 0xD6BA, 0xD6BA, 0xD69A, 0xCE79, 0xCE9A, 0xBD94, 0xE522, 0xFF10, 0xFEF2, 0xFEF2, 0xFEF2, 0xFEF2, 0xFEF2, 0xFEF2, // 0x0C70 (3184) +0xFEF2, 0xFF12, 0xFEF2, 0xFEF2, 0xFF12, 0xED85, 0xBC68, 0xE73D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0C80 (3200) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xD5B0, 0xF580, 0xFECB, 0xFEEE, 0xFECD, 0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, // 0x0C90 (3216) +0xFEEE, 0xFEEE, 0xFECD, 0xFECE, 0xFECA, 0xCC60, 0x41C7, 0x39C7, 0x4228, 0xCE79, 0xEF5D, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, // 0x0CA0 (3232) +0xDEDB, 0xD6BA, 0xD6BA, 0xD69A, 0xCE79, 0xCE59, 0xCE9A, 0xBD73, 0xED42, 0xFF0F, 0xFEF0, 0xFEF0, 0xFEF0, 0xFEF0, 0xFEF0, 0xFEF0, // 0x0CB0 (3248) +0xFEF0, 0xFEF0, 0xFEF0, 0xFEF0, 0xFEF0, 0xFF31, 0xF628, 0xC4A7, 0xDE57, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0CC0 (3264) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDE13, 0xF560, 0xFEC9, 0xFECD, 0xFECC, 0xFECC, 0xFECC, 0xFECC, 0xFECC, 0xFECC, 0xFECC, // 0x0CD0 (3280) +0xFEEC, 0xFEEC, 0xFECC, 0xFECC, 0xFEED, 0xFE44, 0x9323, 0x52CC, 0x73AE, 0xD69A, 0xE73C, 0xDEFB, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEDB, // 0x0CE0 (3296) +0xD6BA, 0xD6BA, 0xD69A, 0xCE79, 0xCE59, 0xD69A, 0xB5D8, 0x7B28, 0xF5A2, 0xFF0F, 0xFECE, 0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, // 0x0CF0 (3312) +0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, 0xFECD, 0xFF10, 0xFEA9, 0xCC60, 0xD615, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0D00 (3328) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDE55, 0xED80, 0xFEA4, 0xFECA, 0xFECA, 0xFECA, 0xFECA, 0xFECA, 0xFECA, 0xFECA, 0xFEC9, // 0x0D10 (3344) +0xFEA7, 0xFEA6, 0xFEA8, 0xFEC9, 0xFECB, 0xFEEA, 0xEDA2, 0xB4F0, 0xCE9A, 0xDEFB, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEDB, 0xD6BA, // 0x0D20 (3360) +0xD6BA, 0xD69A, 0xCE79, 0xCE79, 0xD6BA, 0xB596, 0x4A8B, 0x72A4, 0xFE45, 0xFEEC, 0xFECC, 0xFEEC, 0xFEEC, 0xFEEC, 0xFEEC, 0xFEEC, // 0x0D30 (3376) +0xFEEC, 0xFECB, 0xFECB, 0xFEEC, 0xFEEC, 0xFEEC, 0xFECC, 0xFEA5, 0xFDE0, 0xAC8B, 0xE75E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0D40 (3392) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE632, 0xF5E0, 0xFE80, 0xFE82, 0xFEC7, 0xFEC8, 0xFEC8, 0xFEC8, 0xFEC7, 0xFEA4, 0xFE61, // 0x0D50 (3408) +0xFE60, 0xFE60, 0xFE60, 0xFE61, 0xFE83, 0xFEA6, 0xFEA3, 0xDD22, 0xD658, 0xE75D, 0xDEDB, 0xDEDB, 0xDEDB, 0xD6BA, 0xD6BA, 0xD69A, // 0x0D60 (3424) +0xD69A, 0xD69A, 0xD6BA, 0xCE59, 0x9492, 0x5289, 0x39E9, 0x9B84, 0xFEA3, 0xFEEB, 0xFEEA, 0xFEEA, 0xFEEA, 0xFEEA, 0xFEEA, 0xFEC8, // 0x0D70 (3440) +0xFE84, 0xFE61, 0xFE61, 0xFEA5, 0xFEC9, 0xFEA7, 0xFEA2, 0xFE80, 0xBC41, 0x8C0F, 0xE71C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0D80 (3456) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDDCE, 0xFE40, 0xFEA0, 0xFE80, 0xFE80, 0xFEA2, 0xFEA2, 0xFEA2, 0xFEA0, 0xFE80, 0xFE80, // 0x0D90 (3472) +0xFEA0, 0xFEA0, 0xFEA0, 0xFE80, 0xFE80, 0xFE80, 0xFE80, 0xFE80, 0xCCE5, 0xD69A, 0xE73C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEDB, // 0x0DA0 (3488) +0xD69A, 0xBDF7, 0x9CD3, 0x630C, 0x4228, 0x4A69, 0x422A, 0xB423, 0xFEC0, 0xFEA5, 0xFEE7, 0xFEC7, 0xFEC7, 0xFEC6, 0xFEA3, 0xFE80, // 0x0DB0 (3504) +0xFE80, 0xFE80, 0xFE80, 0xFE60, 0xFEA0, 0xFEC0, 0xEDC0, 0xA3A4, 0x732C, 0xAD96, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0DC0 (3520) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE5A8, 0xFEC0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0DD0 (3536) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEE0, 0xF640, 0x93A8, 0x8C72, 0xA534, 0xAD75, 0xA534, 0x9CF3, 0x8C51, // 0x0DE0 (3552) +0x738E, 0x5ACB, 0x4A49, 0x4A69, 0x528A, 0x4A8A, 0x5249, 0xD502, 0xFEE0, 0xFEA0, 0xFEC0, 0xFEC1, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, // 0x0DF0 (3568) +0xFEA0, 0xFEA0, 0xFEA0, 0xFEE0, 0xFE60, 0xC482, 0x7B09, 0x7BD0, 0xB5B7, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0E00 (3584) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDD8A, 0xFEC0, 0xFF20, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, // 0x0E10 (3600) +0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEC0, 0xFF20, 0xAC02, 0x4209, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, // 0x0E20 (3616) +0x528A, 0x528A, 0x52AA, 0x52AA, 0x528A, 0x4A8A, 0x5A69, 0xE5C1, 0xFF00, 0xFEC0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, // 0x0E30 (3632) +0xFEC0, 0xFEE0, 0xFF00, 0xE561, 0x9367, 0x736E, 0x9D14, 0xD6BA, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0E40 (3648) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xD617, 0xCCC5, 0xF620, 0xFEE0, 0xFF40, 0xFF40, 0xFF40, 0xFF20, 0xFF00, 0xFF00, 0xFF00, // 0x0E50 (3664) +0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFF40, 0xB483, 0x4A8B, 0x5ACA, 0x5ACB, 0x5ACB, 0x5ACB, 0x5ACB, // 0x0E60 (3680) +0x5ACB, 0x52AA, 0x52AA, 0x52AA, 0x52AA, 0x4A8A, 0x6289, 0xEE20, 0xFF20, 0xFEE0, 0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFEE0, // 0x0E70 (3696) +0xFF20, 0xFEC0, 0xBC64, 0x732B, 0x8C72, 0xCE58, 0xEF7D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0E80 (3712) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7E, 0xB576, 0x93EE, 0xA408, 0xC4A5, 0xDD63, 0xF641, 0xFEC0, 0xFF40, 0xFF80, 0xFF60, // 0x0E90 (3728) +0xFF40, 0xFF20, 0xFF20, 0xFF40, 0xFF40, 0xFF40, 0xFF20, 0xFF20, 0xFF80, 0xAC03, 0x4A6B, 0x5ACA, 0x5ACB, 0x5ACB, 0x5AEB, 0x5AEB, // 0x0EA0 (3744) +0x5AEB, 0x630C, 0x630C, 0x630C, 0x5AEB, 0x52CB, 0x5A69, 0xE5E1, 0xFF60, 0xFF20, 0xFF20, 0xFF20, 0xFF20, 0xFF20, 0xFF20, 0xFF60, // 0x0EB0 (3760) +0xF640, 0xA3A7, 0x738F, 0xAD96, 0xE71C, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0EC0 (3776) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79E, 0xD6DB, 0xB5B8, 0x9CD4, 0x9431, 0x93EE, 0x9C0A, 0xB467, 0xD544, 0xF660, // 0x0ED0 (3792) +0xFF60, 0xFFA0, 0xFF80, 0xFF60, 0xFF40, 0xFF40, 0xFF60, 0xFFA0, 0xD521, 0x730A, 0x73CF, 0x8C71, 0x9CD3, 0x9CF3, 0xA514, 0xA534, // 0x0EE0 (3808) +0xAD55, 0xB596, 0xB5B6, 0xB596, 0xAD55, 0x9CF3, 0x83F0, 0xCD04, 0xFFA0, 0xFF40, 0xFF40, 0xFF40, 0xFF40, 0xFF40, 0xFFA0, 0xF621, // 0x0EF0 (3824) +0x8B49, 0x8431, 0xCE58, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F00 (3840) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xF79E, 0xE73C, 0xD6BB, 0xBE19, 0xA556, 0x9472, 0x9C0D, // 0x0F10 (3856) +0xB447, 0xDD82, 0xFEE0, 0xFFA0, 0xFFC0, 0xFFC0, 0xFF80, 0xC4C2, 0x730C, 0x9CF4, 0xD69A, 0xEF5D, 0xEF7D, 0xF79E, 0xF79E, 0xF7BE, // 0x0F20 (3872) +0xF7BE, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xEF7D, 0xDF1C, 0xC530, 0xF620, 0xFFC0, 0xFFC0, 0xFFC0, 0xFFC0, 0xFF80, 0xE5A2, 0x834A, // 0x0F30 (3888) +0x8C93, 0xDEDA, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F40 (3904) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDE, 0xEF7D, 0xD6BB, // 0x0F50 (3920) +0xAD77, 0x9452, 0x9BEB, 0xB466, 0xC524, 0xC543, 0xA3E5, 0x734D, 0xAD76, 0xEF5C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F60 (3936) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDF1C, 0xACB0, 0xBCA6, 0xD544, 0xCD64, 0xCD05, 0xAC07, 0x7B6D, 0x9CF4, // 0x0F70 (3952) +0xE6FB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F80 (3968) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F90 (3984) +0xFFDE, 0xE75D, 0xC65A, 0xA536, 0x9493, 0x8C53, 0x94B4, 0xBE18, 0xEF7D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0FA0 (4000) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xDEFC, 0xAD57, 0x9493, 0x8C73, 0x8C73, 0x94D4, 0xBE18, 0xEF5D, // 0x0FB0 (4016) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0FC0 (4032) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0FD0 (4048) +0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0xEF5C, 0xE73C, 0xEF5C, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0FE0 (4064) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0xEF5C, 0xE73C, 0xEF5C, 0xEF7D, 0xFFDE, 0xFFFF, // 0x0FF0 (4080) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x1000 (4096) +}; diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_CPLD_PageSwitching/UTFT_CPLD_PageSwitching.ino b/libraries/UTFT/examples/Arduino (AVR)/UTFT_CPLD_PageSwitching/UTFT_CPLD_PageSwitching.ino new file mode 100644 index 0000000..b3967a8 --- /dev/null +++ b/libraries/UTFT/examples/Arduino (AVR)/UTFT_CPLD_PageSwitching/UTFT_CPLD_PageSwitching.ino @@ -0,0 +1,93 @@ +// UTFT_CPLD_PageSwitching (C)2014 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of page switching on CPLD-based display modules.. +// +// This demo was made for modules with a screen resolution +// of 800x480 pixels. +// +// This program requires the UTFT library. +// +// NOTE: The display will be black for 10-15 seconds during the start +// + +#include + +// Declare which fonts we will be using +extern uint8_t BigFont[]; +extern uint8_t SevenSegNumFont[]; + +// Set the pins to the correct ones for your development shield +// ------------------------------------------------------------ +// Arduino Mega: +// ------------------- +// Standard Arduino Mega/Due shield : ,38,39,40,41 +// CTE TFT LCD/SD Shield for Arduino Mega : ,38,39,40,41 +// +// Remember to change the model parameter to suit your display module! +UTFT myGLCD(CPLD,38,39,40,41); + +void setup() +{ + myGLCD.InitLCD(); +} + +void loop() +{ + myGLCD.setBackColor(VGA_TRANSPARENT); + + myGLCD.setBrightness(0); + for (byte pg=0; pg<8; pg++) + { + myGLCD.setWritePage(pg); + myGLCD.clrScr(); + for (int ln=0; ln<480; ln+=2) + { + switch (pg) + { + case 0: + myGLCD.setColor(ln/2, 0, 0); + break; + case 1: + myGLCD.setColor(0, ln/2, 0); + break; + case 2: + myGLCD.setColor(0, 0, ln/2); + break; + case 3: + myGLCD.setColor(ln/4, ln/2, 0); + break; + case 4: + myGLCD.setColor(0, ln/2, ln/2); + break; + case 5: + myGLCD.setColor(ln/2, 0, ln/2); + break; + case 6: + myGLCD.setColor(ln/2, ln/2, 0); + break; + case 7: + myGLCD.setColor(0, ln/2, ln/4); + break; + } + myGLCD.drawLine(0, ln, 799, ln); + myGLCD.drawLine(0, ln+1, 799, ln+1); + } + myGLCD.setColor(VGA_WHITE); + myGLCD.setFont(BigFont); + myGLCD.print("This is page:", CENTER, 200); + myGLCD.setFont(SevenSegNumFont); + myGLCD.printNumI(pg, CENTER, 240); + } + myGLCD.setBrightness(16); + + while(1) + { + for (byte pg=0; pg<8; pg++) + { + myGLCD.setDisplayPage(pg); + delay(500); + } + } +} + diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_128x128_Serial/UTFT_Demo_128x128_Serial.ino b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_128x128_Serial/UTFT_Demo_128x128_Serial.ino new file mode 100644 index 0000000..45a97e6 --- /dev/null +++ b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_128x128_Serial/UTFT_Demo_128x128_Serial.ino @@ -0,0 +1,335 @@ +// UTFT_Demo_128x128_Serial (C)2012 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of how to use most of the functions +// of the library with a supported display modules. +// +// This demo was made to work on the 128x128 modules. +// Any other size displays may cause strange behaviour. +// +// This program requires the UTFT library. +// + +#include + +// Declare which fonts we will be using +extern uint8_t SmallFont[]; + +// Declare an instance of the class +UTFT myGLCD(LPH9135,6,5,2,3,4); // Remember to change the model parameter to suit your display module! + +void setup() +{ + randomSeed(analogRead(0)); + +// Setup the LCD + myGLCD.InitLCD(PORTRAIT); + myGLCD.setFont(SmallFont); +} + +void loop() +{ + byte buf[126]; + int x, x2; + int y, y2; + int r; + +// Clear the screen and draw the frame + myGLCD.clrScr(); + myGLCD.setContrast(64); + + myGLCD.setColor(255, 0, 0); + myGLCD.fillRect(0,0,127,12); + myGLCD.setColor(64, 64, 64); + myGLCD.fillRect(0,117,127,127); + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255,0,0); + myGLCD.print("Universal TFT", CENTER, 0); + myGLCD.setBackColor(64,64,64); + myGLCD.setColor(255,255,0); + myGLCD.print("H.Karlsen", LEFT, 116); + myGLCD.print("(C)2012", RIGHT, 116); + myGLCD.setColor(0,255,0); + myGLCD.drawRect(0,13,127,116); + +// Draw crosshairs + myGLCD.setColor(0,0,255); + myGLCD.drawLine(63,14,63,115); + myGLCD.drawLine(1,63,126,63); + for (int i=3; i<128; i+=10) + myGLCD.drawLine(i, 61, i, 65); + for (int i=14; i<118; i+=10) + myGLCD.drawLine(61, i, 65, i); + +// Draw sin-, cos- and tan-lines + myGLCD.setColor(0,255,255); + myGLCD.setBackColor(0,0,0); + myGLCD.print("Sin", 2, 14); + for (int i=1; i<126; i++) + { + myGLCD.drawPixel(i,63+(sin(((i*2.85)*3.14)/180)*45)); + } + + myGLCD.setColor(255,0,0); + myGLCD.print("Cos", 2, 26); + for (int i=1; i<126; i++) + { + myGLCD.drawPixel(i,63+(cos(((i*2.85)*3.14)/180)*45)); + } + + myGLCD.setColor(255,255,0); + myGLCD.print("Tan", 2, 38); + for (int i=1; i<126; i++) + { + myGLCD.drawPixel(i,63+(tan(((i*2.85)*3.14)/180))); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,126,115); + myGLCD.setColor(0,0,255); + myGLCD.drawLine(63,14,63,115); + myGLCD.drawLine(1,63,126,63); + +// Draw a moving sinewave + x=1; + for (int i=1; i<3654; i++) + { + x++; + if (x==127) + x=1; + if (i>127) + { + if ((x==63)||(buf[x-1]==63)) + myGLCD.setColor(0,0,255); + else + myGLCD.setColor(0,0,0); + myGLCD.drawPixel(x,buf[x-1]); + } + myGLCD.setColor(0,255,255); + y=63+(sin(((i*1.3)*3.14)/180)*45); + myGLCD.drawPixel(x,y); + buf[x-1]=y; +// delay(3); + } + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,126,115); + +// Draw some filled rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRect(10+(i*10),10+(i*10), 60+(i*10), 60+(i*10)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,126,115); + +// Draw some filled, rounded rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRoundRect(70-(i*10),10+(i*10), 120-(i*10), 60+(i*10)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,126,115); + +// Draw some filled circles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillCircle(30+(i*10),35+(i*10), 25); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,126,115); + + // Draw some lines in a pattern + myGLCD.setColor (255,0,0); + for (int i=11; i<115; i+=3) + { + myGLCD.drawLine(1, i, i-10, 115); + } + myGLCD.setColor (255,0,0); + for (int i=112; i>14; i-=3) + { + myGLCD.drawLine(126, i, i+14, 14); + } + myGLCD.setColor (0,255,255); + for (int i=115; i>14; i-=3) + { + myGLCD.drawLine(1, i, 116-i, 14); + } + myGLCD.setColor (0,255,255); + for (int i=14; i<115; i+=3) + { + myGLCD.drawLine(126, i, 140-i, 115); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,126,115); + +// Draw some random circles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=22+random(85); + y=35+random(59); + r=random(20); + myGLCD.drawCircle(x, y, r); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,126,115); + +// Draw some random rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(124); + y=15+random(101); + x2=2+random(124); + y2=15+random(101); + myGLCD.drawRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,126,115); + +// Draw some random rounded rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(124); + y=15+random(101); + x2=2+random(124); + y2=15+random(101); + myGLCD.drawRoundRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,126,115); + +// Draw some random lines + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(124); + y=15+random(101); + x2=2+random(124); + y2=15+random(101); + myGLCD.drawLine(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,126,115); + +// Draw some random pixels + for (int i=0; i<5000; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + myGLCD.drawPixel(2+random(124), 15+random(101)); + } + + delay (2000); + +// Set up the "Finished"-screen + myGLCD.setContrast(0); + myGLCD.fillScr(0,0,255); + myGLCD.setColor(255,0,0); + myGLCD.fillRoundRect(2, 40, 125, 88); + + myGLCD.setColor(255,255,255); + myGLCD.setBackColor(255,0,0); + myGLCD.print("That's it!", CENTER, 46); + myGLCD.print("Restarting in a", CENTER, 66); + myGLCD.print("few seconds...", CENTER, 76); + + myGLCD.setColor(0,0,0); + myGLCD.setBackColor(0,0,255); + myGLCD.print("Runtime: (msecs)", CENTER, 108); + myGLCD.printNumI(millis(), CENTER, 118); + + myGLCD.setContrast(64); + + delay (10000); + +// Fade screen to black + for (int i=64; i>0; i--) + { + myGLCD.setContrast(i); + delay(100); + } +} + + diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_160x128_Serial/UTFT_Demo_160x128_Serial.ino b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_160x128_Serial/UTFT_Demo_160x128_Serial.ino new file mode 100644 index 0000000..365b716 --- /dev/null +++ b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_160x128_Serial/UTFT_Demo_160x128_Serial.ino @@ -0,0 +1,328 @@ +// UTFT_Demo_160x128_Serial (C)2014 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of how to use most of the functions +// of the library with a supported display modules. +// +// This demo was made for modules with a screen resolution +// of 160x128 pixels. +// +// This program requires the UTFT library. +// + +#include + +// Declare which fonts we will be using +extern uint8_t SmallFont[]; + +// Usage: myGLCD(, SDA, SCL, CS, RST[, RS]); +// +// When using the DM-TFT18-101 and shield from DisplayModule you should use the following: +// UTFT myGLCD(DMTFT18101,2,3,4,6,5); +// +UTFT myGLCD(ITDB18SP,11,10,9,12,8); // Remember to change the model parameter to suit your display module! + +void setup() +{ + randomSeed(analogRead(0)); + +// Setup the LCD + myGLCD.InitLCD(); + myGLCD.setFont(SmallFont); +} + +void loop() +{ + int buf[158]; + int x, x2; + int y, y2; + int r; + +// Clear the screen and draw the frame + myGLCD.clrScr(); + + myGLCD.setColor(255, 0, 0); + myGLCD.fillRect(0, 0, 159, 13); + myGLCD.setColor(64, 64, 64); + myGLCD.fillRect(0, 114, 159, 127); + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("Universal TFT Lib.", CENTER, 1); + myGLCD.setBackColor(64, 64, 64); + myGLCD.setColor(255,255,0); + myGLCD.print("H.Karlsen", LEFT, 114); + myGLCD.print("(C)2014", RIGHT, 114); + + myGLCD.setColor(0, 0, 255); + myGLCD.drawRect(0, 13, 159, 113); + +// Draw crosshairs + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(79, 14, 79, 113); + myGLCD.drawLine(1, 63, 158, 63); + + for (int i=9; i<150; i+=10) + myGLCD.drawLine(i, 61, i, 65); + for (int i=19; i<110; i+=10) + myGLCD.drawLine(77, i, 81, i); + +// Draw sin-, cos- and tan-lines + myGLCD.setColor(0,255,255); + myGLCD.print("Sin", 5, 15); + for (int i=1; i<158; i++) + { + myGLCD.drawPixel(i,63+(sin(((i*2.27)*3.14)/180)*40)); + } + + myGLCD.setColor(255,0,0); + myGLCD.print("Cos", 5, 27); + for (int i=1; i<158; i++) + { + myGLCD.drawPixel(i,63+(cos(((i*2.27)*3.14)/180)*40)); + } + + myGLCD.setColor(255,255,0); + myGLCD.print("Tan", 5, 39); + for (int i=1; i<158; i++) + { + myGLCD.drawPixel(i,63+(tan(((i*2.27)*3.14)/180))); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,158,113); + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(79, 14, 79, 113); + myGLCD.drawLine(1, 63, 158, 63); + +// Draw a moving sinewave + x=1; + for (int i=1; i<(158*20); i++) + { + x++; + if (x==159) + x=1; + if (i>159) + { + if ((x==79)||(buf[x-1]==63)) + myGLCD.setColor(0,0,255); + else + myGLCD.setColor(0,0,0); + myGLCD.drawPixel(x,buf[x-1]); + } + myGLCD.setColor(0,255,255); + y=63+(sin(((i*2.5)*3.14)/180)*(40-(i / 100))); + myGLCD.drawPixel(x,y); + buf[x-1]=y; + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,158,113); + +// Draw some filled rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRect(39+(i*10), 23+(i*10), 59+(i*10), 43+(i*10)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,158,113); + +// Draw some filled, rounded rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRoundRect(99-(i*10), 23+(i*10), 119-(i*10), 43+(i*10)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,158,113); + +// Draw some filled circles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillCircle(49+(i*10),33+(i*10), 15); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,158,113); + +// Draw some lines in a pattern + myGLCD.setColor (255,0,0); + for (int i=14; i<113; i+=5) + { + myGLCD.drawLine(1, i, (i*1.44)-10, 112); + } + myGLCD.setColor (255,0,0); + for (int i=112; i>15; i-=5) + { + myGLCD.drawLine(158, i, (i*1.44)-12, 14); + } + myGLCD.setColor (0,255,255); + for (int i=112; i>15; i-=5) + { + myGLCD.drawLine(1, i, 172-(i*1.44), 14); + } + myGLCD.setColor (0,255,255); + for (int i=15; i<112; i+=5) + { + myGLCD.drawLine(158, i, 171-(i*1.44), 112); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,158,113); + +// Draw some random circles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=22+random(116); + y=35+random(57); + r=random(20); + myGLCD.drawCircle(x, y, r); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,158,113); + +// Draw some random rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(156); + y=16+random(95); + x2=2+random(156); + y2=16+random(95); + myGLCD.drawRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,158,113); + +// Draw some random rounded rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(156); + y=16+random(95); + x2=2+random(156); + y2=16+random(95); + myGLCD.drawRoundRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,158,113); + + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(156); + y=16+random(95); + x2=2+random(156); + y2=16+random(95); + myGLCD.drawLine(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,158,113); + + for (int i=0; i<5000; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + myGLCD.drawPixel(2+random(156), 16+random(95)); + } + + delay(2000); + + myGLCD.fillScr(0, 0, 255); + myGLCD.setColor(255, 0, 0); + myGLCD.fillRoundRect(10, 17, 149, 72); + + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("That's it!", CENTER, 20); + myGLCD.print("Restarting in a", CENTER, 45); + myGLCD.print("few seconds...", CENTER, 57); + + myGLCD.setColor(0, 255, 0); + myGLCD.setBackColor(0, 0, 255); + myGLCD.print("Runtime: (msecs)", CENTER, 103); + myGLCD.printNumI(millis(), CENTER, 115); + + delay (10000); +} + diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_220x176/UTFT_Demo_220x176.ino b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_220x176/UTFT_Demo_220x176.ino new file mode 100644 index 0000000..50e9c32 --- /dev/null +++ b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_220x176/UTFT_Demo_220x176.ino @@ -0,0 +1,335 @@ +// UTFT_Demo_220x176 (C)2014 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of how to use most of the functions +// of the library with a supported display modules. +// +// This demo was made for modules with a screen resolution +// of 220x176 pixels. +// +// This program requires the UTFT library. +// + +#include + +// Declare which fonts we will be using +extern uint8_t SmallFont[]; + +// Set the pins to the correct ones for your development shield +// ------------------------------------------------------------ +// Arduino Uno / 2009: +// ------------------- +// Standard Arduino Uno/2009 shield : ,A5,A4,A3,A2 +// DisplayModule Arduino Uno TFT shield : ,A5,A4,A3,A2 +// +// Arduino Mega: +// ------------------- +// Standard Arduino Mega/Due shield : ,38,39,40,41 +// CTE TFT LCD/SD Shield for Arduino Mega : ,38,39,40,41 +// +// Remember to change the model parameter to suit your display module! +UTFT myGLCD(ITDB22,A5,A4,A3,A2); + +void setup() +{ + randomSeed(analogRead(0)); + +// Setup the LCD + myGLCD.InitLCD(); + myGLCD.setFont(SmallFont); +} + +void loop() +{ + int buf[218]; + int x, x2; + int y, y2; + int r; + +// Clear the screen and draw the frame + myGLCD.clrScr(); + + myGLCD.setColor(255, 0, 0); + myGLCD.fillRect(0, 0, 219, 13); + myGLCD.setColor(64, 64, 64); + myGLCD.fillRect(0, 162, 219, 175); + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("** Universal TFT Library **", CENTER, 1); + myGLCD.setBackColor(64, 64, 64); + myGLCD.setColor(255,255,0); + myGLCD.print("> elec.henningkarlsen.com <", CENTER, 163); + + myGLCD.setColor(0, 0, 255); + myGLCD.drawRect(0, 14, 219, 161); + +// Draw crosshairs + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(109, 15, 109, 160); + myGLCD.drawLine(1, 88, 218, 88); + + for (int i=9; i<210; i+=10) + myGLCD.drawLine(i, 86, i, 90); + for (int i=19; i<155; i+=10) + myGLCD.drawLine(107, i, 111, i); + +// Draw sin-, cos- and tan-lines + myGLCD.setColor(0,255,255); + myGLCD.print("Sin", 5, 15); + for (int i=1; i<218; i++) + { + myGLCD.drawPixel(i,88+(sin(((i*1.65)*3.14)/180)*70)); + } + + myGLCD.setColor(255,0,0); + myGLCD.print("Cos", 5, 27); + for (int i=1; i<218; i++) + { + myGLCD.drawPixel(i,88+(cos(((i*1.65)*3.14)/180)*70)); + } + + myGLCD.setColor(255,255,0); + myGLCD.print("Tan", 5, 39); + for (int i=1; i<218; i++) + { + myGLCD.drawPixel(i,88+(tan(((i*1.65)*3.14)/180))); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(109, 15, 109, 160); + myGLCD.drawLine(1, 88, 218, 88); + +// Draw a moving sinewave + x=1; + for (int i=1; i<(218*20); i++) + { + x++; + if (x==219) + x=1; + if (i>219) + { + if ((x==109)||(buf[x-1]==88)) + myGLCD.setColor(0,0,255); + else + myGLCD.setColor(0,0,0); + myGLCD.drawPixel(x,buf[x-1]); + } + myGLCD.setColor(0,255,255); + y=88+(sin(((i*1.6)*3.14)/180)*(65-(i / 100))); + myGLCD.drawPixel(x,y); + buf[x-1]=y; + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + +// Draw some filled rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRect(44+(i*15), 23+(i*15), 88+(i*15), 63+(i*15)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + +// Draw some filled, rounded rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRoundRect(132-(i*15), 23+(i*15), 172-(i*15), 63+(i*15)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + +// Draw some filled circles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillCircle(64+(i*15),43+(i*15), 20); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + +// Draw some lines in a pattern + myGLCD.setColor (255,0,0); + for (int i=15; i<160; i+=5) + { + myGLCD.drawLine(1, i, (i*1.44)-10, 160); + } + myGLCD.setColor (255,0,0); + for (int i=160; i>15; i-=5) + { + myGLCD.drawLine(218, i, (i*1.44)-12, 15); + } + myGLCD.setColor (0,255,255); + for (int i=160; i>15; i-=5) + { + myGLCD.drawLine(1, i, 232-(i*1.44), 15); + } + myGLCD.setColor (0,255,255); + for (int i=15; i<160; i+=5) + { + myGLCD.drawLine(218, i, 231-(i*1.44), 160); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + +// Draw some random circles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=22+random(176); + y=35+random(105); + r=random(20); + myGLCD.drawCircle(x, y, r); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + +// Draw some random rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(216); + y=16+random(143); + x2=2+random(216); + y2=16+random(143); + myGLCD.drawRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + +// Draw some random rounded rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(216); + y=16+random(143); + x2=2+random(216); + y2=16+random(143); + myGLCD.drawRoundRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(216); + y=16+random(143); + x2=2+random(216); + y2=16+random(143); + myGLCD.drawLine(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + + for (int i=0; i<10000; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + myGLCD.drawPixel(2+random(216), 16+random(143)); + } + + delay(2000); + + myGLCD.fillScr(0, 0, 255); + myGLCD.setColor(255, 0, 0); + myGLCD.fillRoundRect(40, 57, 179, 119); + + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("That's it!", CENTER, 62); + myGLCD.print("Restarting in a", CENTER, 88); + myGLCD.print("few seconds...", CENTER, 101); + + myGLCD.setColor(0, 255, 0); + myGLCD.setBackColor(0, 0, 255); + myGLCD.print("Runtime: (msecs)", CENTER, 146); + myGLCD.printNumI(millis(), CENTER, 161); + + delay (10000); +} + diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_220x176_Serial/UTFT_Demo_220x176_Serial.ino b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_220x176_Serial/UTFT_Demo_220x176_Serial.ino new file mode 100644 index 0000000..ec66344 --- /dev/null +++ b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_220x176_Serial/UTFT_Demo_220x176_Serial.ino @@ -0,0 +1,322 @@ +// UTFT_Demo_220x176_Serial (C)2012 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of how to use most of the functions +// of the library with a supported display modules. +// +// This demo was made for serial modules with a screen resolution +// of 220x176 pixels. +// +// This program requires the UTFT library. +// + +#include + +// Declare which fonts we will be using +extern uint8_t SmallFont[]; + +UTFT myGLCD(ITDB22SP,11,10,9,12); // Remember to change the model parameter to suit your display module! + +void setup() +{ + randomSeed(analogRead(0)); + +// Setup the LCD + myGLCD.InitLCD(); + myGLCD.setFont(SmallFont); +} + +void loop() +{ + int buf[218]; + int x, x2; + int y, y2; + int r; + +// Clear the screen and draw the frame + myGLCD.clrScr(); + + myGLCD.setColor(255, 0, 0); + myGLCD.fillRect(0, 0, 219, 13); + myGLCD.setColor(64, 64, 64); + myGLCD.fillRect(0, 162, 219, 175); + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("** Universal TFT Library **", CENTER, 1); + myGLCD.setBackColor(64, 64, 64); + myGLCD.setColor(255,255,0); + myGLCD.print("> elec.henningkarlsen.com <", CENTER, 163); + + myGLCD.setColor(0, 0, 255); + myGLCD.drawRect(0, 14, 219, 161); + +// Draw crosshairs + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(109, 15, 109, 160); + myGLCD.drawLine(1, 88, 218, 88); + + for (int i=9; i<210; i+=10) + myGLCD.drawLine(i, 86, i, 90); + for (int i=19; i<155; i+=10) + myGLCD.drawLine(107, i, 111, i); + +// Draw sin-, cos- and tan-lines + myGLCD.setColor(0,255,255); + myGLCD.print("Sin", 5, 15); + for (int i=1; i<218; i++) + { + myGLCD.drawPixel(i,88+(sin(((i*1.65)*3.14)/180)*70)); + } + + myGLCD.setColor(255,0,0); + myGLCD.print("Cos", 5, 27); + for (int i=1; i<218; i++) + { + myGLCD.drawPixel(i,88+(cos(((i*1.65)*3.14)/180)*70)); + } + + myGLCD.setColor(255,255,0); + myGLCD.print("Tan", 5, 39); + for (int i=1; i<218; i++) + { + myGLCD.drawPixel(i,88+(tan(((i*1.65)*3.14)/180))); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(109, 15, 109, 160); + myGLCD.drawLine(1, 88, 218, 88); + +// Draw a moving sinewave + x=1; + for (int i=1; i<(218*20); i++) + { + x++; + if (x==219) + x=1; + if (i>219) + { + if ((x==109)||(buf[x-1]==88)) + myGLCD.setColor(0,0,255); + else + myGLCD.setColor(0,0,0); + myGLCD.drawPixel(x,buf[x-1]); + } + myGLCD.setColor(0,255,255); + y=88+(sin(((i*1.6)*3.14)/180)*(65-(i / 100))); + myGLCD.drawPixel(x,y); + buf[x-1]=y; + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + +// Draw some filled rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRect(44+(i*15), 23+(i*15), 88+(i*15), 63+(i*15)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + +// Draw some filled, rounded rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRoundRect(132-(i*15), 23+(i*15), 172-(i*15), 63+(i*15)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + +// Draw some filled circles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillCircle(64+(i*15),43+(i*15), 20); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + +// Draw some lines in a pattern + myGLCD.setColor (255,0,0); + for (int i=15; i<160; i+=5) + { + myGLCD.drawLine(1, i, (i*1.44)-10, 160); + } + myGLCD.setColor (255,0,0); + for (int i=160; i>15; i-=5) + { + myGLCD.drawLine(218, i, (i*1.44)-12, 15); + } + myGLCD.setColor (0,255,255); + for (int i=160; i>15; i-=5) + { + myGLCD.drawLine(1, i, 232-(i*1.44), 15); + } + myGLCD.setColor (0,255,255); + for (int i=15; i<160; i+=5) + { + myGLCD.drawLine(218, i, 231-(i*1.44), 160); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,161); + +// Draw some random circles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=22+random(176); + y=35+random(105); + r=random(20); + myGLCD.drawCircle(x, y, r); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + +// Draw some random rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(216); + y=16+random(143); + x2=2+random(216); + y2=16+random(143); + myGLCD.drawRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + +// Draw some random rounded rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(216); + y=16+random(143); + x2=2+random(216); + y2=16+random(143); + myGLCD.drawRoundRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(216); + y=16+random(143); + x2=2+random(216); + y2=16+random(143); + myGLCD.drawLine(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + + for (int i=0; i<10000; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + myGLCD.drawPixel(2+random(216), 16+random(143)); + } + + delay(2000); + + myGLCD.fillScr(0, 0, 255); + myGLCD.setColor(255, 0, 0); + myGLCD.fillRoundRect(40, 57, 179, 119); + + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("That's it!", CENTER, 62); + myGLCD.print("Restarting in a", CENTER, 88); + myGLCD.print("few seconds...", CENTER, 101); + + myGLCD.setColor(0, 255, 0); + myGLCD.setBackColor(0, 0, 255); + myGLCD.print("Runtime: (msecs)", CENTER, 146); + myGLCD.printNumI(millis(), CENTER, 161); + + delay (10000); +} + diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_320x240/UTFT_Demo_320x240.ino b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_320x240/UTFT_Demo_320x240.ino new file mode 100644 index 0000000..1e51058 --- /dev/null +++ b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_320x240/UTFT_Demo_320x240.ino @@ -0,0 +1,334 @@ +// UTFT_Demo_320x240 (C)2014 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of how to use most of the functions +// of the library with a supported display modules. +// +// This demo was made for modules with a screen resolution +// of 320x240 pixels. +// +// This program requires the UTFT library. +// + +#include + +// Declare which fonts we will be using +extern uint8_t SmallFont[]; + +// Set the pins to the correct ones for your development shield +// ------------------------------------------------------------ +// Arduino Uno / 2009: +// ------------------- +// Standard Arduino Uno/2009 shield : ,A5,A4,A3,A2 +// DisplayModule Arduino Uno TFT shield : ,A5,A4,A3,A2 +// +// Arduino Mega: +// ------------------- +// Standard Arduino Mega/Due shield : ,38,39,40,41 +// CTE TFT LCD/SD Shield for Arduino Mega : ,38,39,40,41 +// +// Remember to change the model parameter to suit your display module! +UTFT myGLCD(ITDB32S,38,39,40,41); + +void setup() +{ + randomSeed(analogRead(0)); + +// Setup the LCD + myGLCD.InitLCD(); + myGLCD.setFont(SmallFont); +} + +void loop() +{ + int buf[318]; + int x, x2; + int y, y2; + int r; + +// Clear the screen and draw the frame + myGLCD.clrScr(); + + myGLCD.setColor(255, 0, 0); + myGLCD.fillRect(0, 0, 319, 13); + myGLCD.setColor(64, 64, 64); + myGLCD.fillRect(0, 226, 319, 239); + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("* Universal Color TFT Display Library *", CENTER, 1); + myGLCD.setBackColor(64, 64, 64); + myGLCD.setColor(255,255,0); + myGLCD.print("", CENTER, 227); + + myGLCD.setColor(0, 0, 255); + myGLCD.drawRect(0, 14, 319, 225); + +// Draw crosshairs + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(159, 15, 159, 224); + myGLCD.drawLine(1, 119, 318, 119); + for (int i=9; i<310; i+=10) + myGLCD.drawLine(i, 117, i, 121); + for (int i=19; i<220; i+=10) + myGLCD.drawLine(157, i, 161, i); + +// Draw sin-, cos- and tan-lines + myGLCD.setColor(0,255,255); + myGLCD.print("Sin", 5, 15); + for (int i=1; i<318; i++) + { + myGLCD.drawPixel(i,119+(sin(((i*1.13)*3.14)/180)*95)); + } + + myGLCD.setColor(255,0,0); + myGLCD.print("Cos", 5, 27); + for (int i=1; i<318; i++) + { + myGLCD.drawPixel(i,119+(cos(((i*1.13)*3.14)/180)*95)); + } + + myGLCD.setColor(255,255,0); + myGLCD.print("Tan", 5, 39); + for (int i=1; i<318; i++) + { + myGLCD.drawPixel(i,119+(tan(((i*1.13)*3.14)/180))); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(159, 15, 159, 224); + myGLCD.drawLine(1, 119, 318, 119); + +// Draw a moving sinewave + x=1; + for (int i=1; i<(318*20); i++) + { + x++; + if (x==319) + x=1; + if (i>319) + { + if ((x==159)||(buf[x-1]==119)) + myGLCD.setColor(0,0,255); + else + myGLCD.setColor(0,0,0); + myGLCD.drawPixel(x,buf[x-1]); + } + myGLCD.setColor(0,255,255); + y=119+(sin(((i*1.1)*3.14)/180)*(90-(i / 100))); + myGLCD.drawPixel(x,y); + buf[x-1]=y; + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some filled rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRect(70+(i*20), 30+(i*20), 130+(i*20), 90+(i*20)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some filled, rounded rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRoundRect(190-(i*20), 30+(i*20), 250-(i*20), 90+(i*20)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some filled circles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillCircle(100+(i*20),60+(i*20), 30); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some lines in a pattern + myGLCD.setColor (255,0,0); + for (int i=15; i<224; i+=5) + { + myGLCD.drawLine(1, i, (i*1.44)-10, 224); + } + myGLCD.setColor (255,0,0); + for (int i=224; i>15; i-=5) + { + myGLCD.drawLine(318, i, (i*1.44)-11, 15); + } + myGLCD.setColor (0,255,255); + for (int i=224; i>15; i-=5) + { + myGLCD.drawLine(1, i, 331-(i*1.44), 15); + } + myGLCD.setColor (0,255,255); + for (int i=15; i<224; i+=5) + { + myGLCD.drawLine(318, i, 330-(i*1.44), 224); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some random circles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=32+random(256); + y=45+random(146); + r=random(30); + myGLCD.drawCircle(x, y, r); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some random rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(316); + y=16+random(207); + x2=2+random(316); + y2=16+random(207); + myGLCD.drawRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some random rounded rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(316); + y=16+random(207); + x2=2+random(316); + y2=16+random(207); + myGLCD.drawRoundRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(316); + y=16+random(209); + x2=2+random(316); + y2=16+random(209); + myGLCD.drawLine(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + + for (int i=0; i<10000; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + myGLCD.drawPixel(2+random(316), 16+random(209)); + } + + delay(2000); + + myGLCD.fillScr(0, 0, 255); + myGLCD.setColor(255, 0, 0); + myGLCD.fillRoundRect(80, 70, 239, 169); + + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("That's it!", CENTER, 93); + myGLCD.print("Restarting in a", CENTER, 119); + myGLCD.print("few seconds...", CENTER, 132); + + myGLCD.setColor(0, 255, 0); + myGLCD.setBackColor(0, 0, 255); + myGLCD.print("Runtime: (msecs)", CENTER, 210); + myGLCD.printNumI(millis(), CENTER, 225); + + delay (10000); +} + diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_320x240_Serial/UTFT_Demo_320x240_Serial.ino b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_320x240_Serial/UTFT_Demo_320x240_Serial.ino new file mode 100644 index 0000000..a741524 --- /dev/null +++ b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_320x240_Serial/UTFT_Demo_320x240_Serial.ino @@ -0,0 +1,354 @@ +// UTFT_Demo_320x240_Serial (C)2014 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of how to use most of the functions +// of the library with a supported display modules. +// +// This demo was made for serial modules with a screen +// resolution of 320x240 pixels. +// +// This program requires the UTFT library. +// +// ******************************************************************** +// * IMPORTANT: Read the comments in the setup() function when * +// * using the Watterott MI0283QT9 or the DisplayModule DM-TFT28-105. * +// ******************************************************************** +// + +#include + +// Declare which fonts we will be using +extern uint8_t SmallFont[]; + +// Uncomment the line for your display: +//UTFT myGLCD(TFT01_22SP,9,8,12,11,10); // ElecFreaks TFT01-2.2SP +//UTFT myGLCD(MI0283QT9,11,13,7,8); // Watterott MI0283QT9 +UTFT myGLCD(DMTFT28105,MOSI,SCK,10,NOTINUSE,9); // DisplayModule DM-TFT28-105 (Works with both Arduino Uno and Arduino Mega) + +void setup() +{ +// Watterott +// --------- +// The following two lines are needed for the MI0283QT9 display +// module to enable the backlight. If you are using any other +// display module these lines should be commented out. +// ------------------------------------------------------------- +// pinMode(9, OUTPUT); +// digitalWrite(9, HIGH); +// ------------------------------------------------------------- + +// DisplayModule +// ------------- +// The following 4 lines are needed for the DM-TFT28-105 display +// module to set the SS/CS pins for the other devices connected +// to the Arduino SPI pins. If you are using any other display +// module these lines should be commented out. +// ------------------------------------------------------------- + pinMode(10,OUTPUT); digitalWrite(10,HIGH); // TFT SS/CE + pinMode(8, OUTPUT); digitalWrite(8, HIGH); // SD card SS/CE + pinMode(6, OUTPUT); digitalWrite(6, HIGH); // Flash chip SS/CE + pinMode(4, OUTPUT); digitalWrite(4, HIGH); // Touch controller SS/CE +// ------------------------------------------------------------- + + +// Just get some random numbers + randomSeed(analogRead(0)); + +// Setup the LCD + myGLCD.InitLCD(); + myGLCD.setFont(SmallFont); + +} + +void loop() +{ + int buf[318]; + int x, x2; + int y, y2; + int r; + +// Clear the screen and draw the frame + myGLCD.clrScr(); + + myGLCD.setColor(255, 0, 0); + myGLCD.fillRect(0, 0, 319, 13); + myGLCD.setColor(64, 64, 64); + myGLCD.fillRect(0, 226, 319, 239); + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("* Universal Color TFT Display Library *", CENTER, 1); + myGLCD.setBackColor(64, 64, 64); + myGLCD.setColor(255,255,0); + myGLCD.print("", CENTER, 227); + + myGLCD.setColor(0, 0, 255); + myGLCD.drawRect(0, 14, 319, 225); + +// Draw crosshairs + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(159, 15, 159, 224); + myGLCD.drawLine(1, 119, 318, 119); + for (int i=9; i<310; i+=10) + myGLCD.drawLine(i, 117, i, 121); + for (int i=19; i<220; i+=10) + myGLCD.drawLine(157, i, 161, i); + +// Draw sin-, cos- and tan-lines + myGLCD.setColor(0,255,255); + myGLCD.print("Sin", 5, 15); + for (int i=1; i<318; i++) + { + myGLCD.drawPixel(i,119+(sin(((i*1.13)*3.14)/180)*95)); + } + + myGLCD.setColor(255,0,0); + myGLCD.print("Cos", 5, 27); + for (int i=1; i<318; i++) + { + myGLCD.drawPixel(i,119+(cos(((i*1.13)*3.14)/180)*95)); + } + + myGLCD.setColor(255,255,0); + myGLCD.print("Tan", 5, 39); + for (int i=1; i<318; i++) + { + myGLCD.drawPixel(i,119+(tan(((i*1.13)*3.14)/180))); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(159, 15, 159, 224); + myGLCD.drawLine(1, 119, 318, 119); + +// Draw a moving sinewave + x=1; + for (int i=1; i<(318*20); i++) + { + x++; + if (x==319) + x=1; + if (i>319) + { + if ((x==159)||(buf[x-1]==119)) + myGLCD.setColor(0,0,255); + else + myGLCD.setColor(0,0,0); + myGLCD.drawPixel(x,buf[x-1]); + } + myGLCD.setColor(0,255,255); + y=119+(sin(((i*1.1)*3.14)/180)*(90-(i / 100))); + myGLCD.drawPixel(x,y); + buf[x-1]=y; + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some filled rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRect(70+(i*20), 30+(i*20), 130+(i*20), 90+(i*20)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some filled, rounded rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRoundRect(190-(i*20), 30+(i*20), 250-(i*20), 90+(i*20)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some filled circles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillCircle(100+(i*20),60+(i*20), 30); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some lines in a pattern + myGLCD.setColor (255,0,0); + for (int i=15; i<224; i+=5) + { + myGLCD.drawLine(1, i, (i*1.44)-10, 224); + } + myGLCD.setColor (255,0,0); + for (int i=224; i>15; i-=5) + { + myGLCD.drawLine(318, i, (i*1.44)-11, 15); + } + myGLCD.setColor (0,255,255); + for (int i=224; i>15; i-=5) + { + myGLCD.drawLine(1, i, 331-(i*1.44), 15); + } + myGLCD.setColor (0,255,255); + for (int i=15; i<224; i+=5) + { + myGLCD.drawLine(318, i, 330-(i*1.44), 224); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some random circles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=32+random(256); + y=45+random(146); + r=random(30); + myGLCD.drawCircle(x, y, r); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some random rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(316); + y=16+random(207); + x2=2+random(316); + y2=16+random(207); + myGLCD.drawRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some random rounded rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(316); + y=16+random(207); + x2=2+random(316); + y2=16+random(207); + myGLCD.drawRoundRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(316); + y=16+random(209); + x2=2+random(316); + y2=16+random(209); + myGLCD.drawLine(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + + for (int i=0; i<10000; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + myGLCD.drawPixel(2+random(316), 16+random(209)); + } + + delay(2000); + + myGLCD.fillScr(0, 0, 255); + myGLCD.setColor(255, 0, 0); + myGLCD.fillRoundRect(80, 70, 239, 169); + + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("That's it!", CENTER, 93); + myGLCD.print("Restarting in a", CENTER, 119); + myGLCD.print("few seconds...", CENTER, 132); + + myGLCD.setColor(0, 255, 0); + myGLCD.setBackColor(0, 0, 255); + myGLCD.print("Runtime: (msecs)", CENTER, 210); + myGLCD.printNumI(millis(), CENTER, 225); + + delay (10000); +} \ No newline at end of file diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_400x240/UTFT_Demo_400x240.ino b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_400x240/UTFT_Demo_400x240.ino new file mode 100644 index 0000000..93538ce --- /dev/null +++ b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_400x240/UTFT_Demo_400x240.ino @@ -0,0 +1,336 @@ +// UTFT_Demo_400x240 (C)2014 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of how to use most of the functions +// of the library with a supported display modules. +// +// This demo was made for modules with a screen resolution +// of 400x240 pixels. +// +// This program requires the UTFT library. +// + +#include + +// Declare which fonts we will be using +extern uint8_t SmallFont[]; + +// Set the pins to the correct ones for your development shield +// ------------------------------------------------------------ +// Arduino Uno / 2009: +// ------------------- +// Standard Arduino Uno/2009 shield : ,A5,A4,A3,A2 +// DisplayModule Arduino Uno TFT shield : ,A5,A4,A3,A2 +// +// Arduino Mega: +// ------------------- +// Standard Arduino Mega/Due shield : ,38,39,40,41 +// CTE TFT LCD/SD Shield for Arduino Mega : ,38,39,40,41 +// +// Remember to change the model parameter to suit your display module! +UTFT myGLCD(ITDB32WD,38,39,40,41); + +void setup() +{ + randomSeed(analogRead(0)); + +// Setup the LCD + myGLCD.InitLCD(); + myGLCD.setFont(SmallFont); +} + +void loop() +{ + int buf[398]; + int x, x2; + int y, y2; + int r; + +// Clear the screen and draw the frame + myGLCD.clrScr(); + + myGLCD.setColor(255, 0, 0); + myGLCD.fillRect(0, 0, 399, 13); + myGLCD.setColor(64, 64, 64); + myGLCD.fillRect(0, 226, 399, 239); + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("*** Universal Color TFT Display Library ***", CENTER, 1); + myGLCD.setBackColor(64, 64, 64); + myGLCD.setColor(255,255,0); + myGLCD.print("< http://electronics.henningkarlsen.com >", CENTER, 227); + + myGLCD.setColor(0, 0, 255); + myGLCD.drawRect(0, 14, 399, 225); + +// Draw crosshairs + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(199, 15, 199, 224); + myGLCD.drawLine(1, 119, 398, 119); + for (int i=9; i<390; i+=10) + myGLCD.drawLine(i, 117, i, 121); + for (int i=19; i<220; i+=10) + myGLCD.drawLine(197, i, 201, i); + +// Draw sin-, cos- and tan-lines + myGLCD.setColor(0,255,255); + myGLCD.print("Sin", 5, 15); + for (int i=1; i<398; i++) + { + myGLCD.drawPixel(i,119+(sin(((i*0.9)*3.14)/180)*95)); + } + + myGLCD.setColor(255,0,0); + myGLCD.print("Cos", 5, 27); + for (int i=1; i<398; i++) + { + myGLCD.drawPixel(i,119+(cos(((i*0.9)*3.14)/180)*95)); + } + + myGLCD.setColor(255,255,0); + myGLCD.print("Tan", 5, 39); + for (int i=1; i<398; i++) + { + y=119+(tan(((i*0.9)*3.14)/180)); + if ((y>15) && (y<224)) + myGLCD.drawPixel(i,y); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,398,224); + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(199, 15, 199, 224); + myGLCD.drawLine(1, 119, 398, 119); + +// Draw a moving sinewave + x=1; + for (int i=1; i<(398*20); i++) + { + x++; + if (x==399) + x=1; + if (i>399) + { + if ((x==199)||(buf[x-1]==119)) + myGLCD.setColor(0,0,255); + else + myGLCD.setColor(0,0,0); + myGLCD.drawPixel(x,buf[x-1]); + } + myGLCD.setColor(0,255,255); + y=119+(sin(((i)*3.14)/180)*(90-(i / 100))); + myGLCD.drawPixel(x,y); + buf[x-1]=y; + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,398,224); + +// Draw some filled rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRect(110+(i*20), 30+(i*20), 170+(i*20), 90+(i*20)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,398,224); + +// Draw some filled, rounded rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRoundRect(230-(i*20), 30+(i*20), 290-(i*20), 90+(i*20)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,398,224); + +// Draw some filled circles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillCircle(110+(i*30),60+(i*20), 30); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,398,224); + +// Draw some lines in a pattern + myGLCD.setColor (255,0,0); + for (int i=15; i<224; i+=5) + { + myGLCD.drawLine(1, i, (i*1.77)-10, 224); + } + myGLCD.setColor (255,0,0); + for (int i=224; i>15; i-=5) + { + myGLCD.drawLine(398, i, (i*1.77)-11, 15); + } + myGLCD.setColor (0,255,255); + for (int i=224; i>15; i-=5) + { + myGLCD.drawLine(1, i, 411-(i*1.77), 15); + } + myGLCD.setColor (0,255,255); + for (int i=15; i<224; i+=5) + { + myGLCD.drawLine(398, i, 410-(i*1.77), 224); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,398,224); + +// Draw some random circles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=32+random(336); + y=45+random(146); + r=random(30); + myGLCD.drawCircle(x, y, r); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,398,224); + +// Draw some random rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(396); + y=16+random(207); + x2=2+random(396); + y2=16+random(207); + myGLCD.drawRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,398,224); + +// Draw some random rounded rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(396); + y=16+random(207); + x2=2+random(396); + y2=16+random(207); + myGLCD.drawRoundRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,398,224); + + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(396); + y=16+random(209); + x2=2+random(396); + y2=16+random(209); + myGLCD.drawLine(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,398,224); + + for (int i=0; i<10000; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + myGLCD.drawPixel(2+random(396), 16+random(209)); + } + + delay(2000); + + myGLCD.fillScr(0, 0, 255); + myGLCD.setColor(255, 0, 0); + myGLCD.fillRoundRect(120, 70, 279, 169); + + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("That's it!", CENTER, 93); + myGLCD.print("Restarting in a", CENTER, 119); + myGLCD.print("few seconds...", CENTER, 132); + + myGLCD.setColor(0, 255, 0); + myGLCD.setBackColor(0, 0, 255); + myGLCD.print("Runtime: (msecs)", CENTER, 210); + myGLCD.printNumI(millis(), CENTER, 225); + + delay (10000); +} + diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_480x272/UTFT_Demo_480x272.ino b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_480x272/UTFT_Demo_480x272.ino new file mode 100644 index 0000000..93d8395 --- /dev/null +++ b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_480x272/UTFT_Demo_480x272.ino @@ -0,0 +1,333 @@ +// UTFT_Demo_480x272 (C)2014 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of how to use most of the functions +// of the library with a supported display modules. +// +// This demo was made for modules with a screen resolution +// of 480x272 pixels. +// +// This program requires the UTFT library. +// + +#include + +// Declare which fonts we will be using +extern uint8_t SmallFont[]; + +// Set the pins to the correct ones for your development shield +// ------------------------------------------------------------ +// Arduino Uno / 2009: +// ------------------- +// Standard Arduino Uno/2009 shield : ,A5,A4,A3,A2 +// DisplayModule Arduino Uno TFT shield : ,A5,A4,A3,A2 +// +// Arduino Mega: +// ------------------- +// Standard Arduino Mega/Due shield : ,38,39,40,41 +// CTE TFT LCD/SD Shield for Arduino Mega : ,38,39,40,41 +// +// Remember to change the model parameter to suit your display module! +UTFT myGLCD(ITDB43,38,39,40,41); + +void setup() +{ + randomSeed(analogRead(0)); + +// Setup the LCD + myGLCD.InitLCD(); + myGLCD.setFont(SmallFont); +} + +void loop() +{ + int buf[478]; + int x, x2; + int y, y2; + int r; + +// Clear the screen and draw the frame + myGLCD.clrScr(); + + myGLCD.setColor(255, 0, 0); + myGLCD.fillRect(0, 0, 479, 13); + myGLCD.setColor(64, 64, 64); + myGLCD.fillRect(0, 258, 479, 271); + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("* Universal Color TFT Display Library *", CENTER, 1); + myGLCD.setBackColor(64, 64, 64); + myGLCD.setColor(255,255,0); + myGLCD.print("", CENTER, 259); + + myGLCD.setColor(0, 0, 255); + myGLCD.drawRect(0, 14, 479, 257); + +// Draw crosshairs + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(239, 15, 239, 256); + myGLCD.drawLine(1, 135, 478, 135); + for (int i=9; i<470; i+=10) + myGLCD.drawLine(i, 133, i, 138); + for (int i=15; i<256; i+=10) + myGLCD.drawLine(237, i, 241, i); + +// Draw sin-, cos- and tan-lines + myGLCD.setColor(0,255,255); + myGLCD.print("Sin", 5, 15); + for (int i=1; i<478; i++) + { + myGLCD.drawPixel(i,135+(sin(((i*1.13)*3.14)/180)*95)); + } + + myGLCD.setColor(255,0,0); + myGLCD.print("Cos", 5, 27); + for (int i=1; i<478; i++) + { + myGLCD.drawPixel(i,135+(cos(((i*1.13)*3.14)/180)*95)); + } + + myGLCD.setColor(255,255,0); + myGLCD.print("Tan", 5, 39); + for (int i=1; i<478; i++) + { + myGLCD.drawPixel(i,135+(tan(((i*1.13)*3.14)/180))); + } + + delay(2000); + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,256); + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(239, 15, 239, 256); + myGLCD.drawLine(1, 135, 478, 135); + +// Draw a moving sinewave + x=1; + for (int i=1; i<(478*20); i++) + { + x++; + if (x==479) + x=1; + if (i>479) + { + if ((x==239)||(buf[x-1]==135)) + myGLCD.setColor(0,0,255); + else + myGLCD.setColor(0,0,0); + myGLCD.drawPixel(x,buf[x-1]); + } + myGLCD.setColor(0,255,255); + y=135+(sin(((i*1.65)*3.14)/180)*(90-(i / 100))); + myGLCD.drawPixel(x,y); + buf[x-1]=y; + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,256); + +// Draw some filled rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRect(150+(i*20), 46+(i*20), 210+(i*20), 106+(i*20)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,256); + +// Draw some filled, rounded rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRoundRect(330-(i*20), 46+(i*20), 270-(i*20), 106+(i*20)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,256); + +// Draw some filled circles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillCircle(180+(i*20),75+(i*20), 30); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,256); + +// Draw some lines in a pattern + myGLCD.setColor (255,0,0); + for (int i=15; i<256; i+=5) + { + myGLCD.drawLine(1, i, (i*1.88)-10, 256); + } + myGLCD.setColor (255,0,0); + for (int i=256; i>15; i-=5) + { + myGLCD.drawLine(478, i, (i*1.88)-11, 15); + } + myGLCD.setColor (0,255,255); + for (int i=256; i>15; i-=5) + { + myGLCD.drawLine(1, i, 491-(i*1.88), 15); + } + myGLCD.setColor (0,255,255); + for (int i=15; i<256; i+=5) + { + myGLCD.drawLine(478, i, 490-(i*1.88), 256); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,256); + +// Draw some random circles + for (int i=0; i<150; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=32+random(416); + y=45+random(178); + r=random(30); + myGLCD.drawCircle(x, y, r); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,256); + +// Draw some random rectangles + for (int i=0; i<150; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(476); + y=16+random(239); + x2=2+random(476); + y2=16+random(239); + myGLCD.drawRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,256); + +// Draw some random rounded rectangles + for (int i=0; i<150; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(476); + y=16+random(239); + x2=2+random(476); + y2=16+random(239); + myGLCD.drawRoundRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,256); + + for (int i=0; i<150; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(476); + y=16+random(239); + x2=2+random(476); + y2=16+random(239); + myGLCD.drawLine(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,256); + + for (int i=0; i<10000; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + myGLCD.drawPixel(2+random(476), 16+random(239)); + } + + delay(2000); + + myGLCD.fillScr(0, 0, 255); + myGLCD.setColor(255, 0, 0); + myGLCD.fillRoundRect(160, 70, 319, 169); + + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("That's it!", CENTER, 93); + myGLCD.print("Restarting in a", CENTER, 119); + myGLCD.print("few seconds...", CENTER, 132); + + myGLCD.setColor(0, 255, 0); + myGLCD.setBackColor(0, 0, 255); + myGLCD.print("Runtime: (msecs)", CENTER, 243); + myGLCD.printNumI(millis(), CENTER, 258); + + delay (10000); +} + diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_480x320/UTFT_Demo_480x320.ino b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_480x320/UTFT_Demo_480x320.ino new file mode 100644 index 0000000..da718c3 --- /dev/null +++ b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_480x320/UTFT_Demo_480x320.ino @@ -0,0 +1,334 @@ +// UTFT_Demo_480x320 (C)2014 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of how to use most of the functions +// of the library with a supported display modules. +// +// This demo was made for modules with a screen resolution +// of 480x320 pixels. +// +// This program requires the UTFT library. +// + +#include + +// Declare which fonts we will be using +extern uint8_t SmallFont[]; + +// Set the pins to the correct ones for your development shield +// ------------------------------------------------------------ +// Arduino Uno / 2009: +// ------------------- +// Standard Arduino Uno/2009 shield : ,A5,A4,A3,A2 +// DisplayModule Arduino Uno TFT shield : ,A5,A4,A3,A2 +// +// Arduino Mega: +// ------------------- +// Standard Arduino Mega/Due shield : ,38,39,40,41 +// CTE TFT LCD/SD Shield for Arduino Mega : ,38,39,40,41 +// +// Remember to change the model parameter to suit your display module! +UTFT myGLCD(CTE32HR,38,39,40,41); + +void setup() +{ + randomSeed(analogRead(0)); + +// Setup the LCD + myGLCD.InitLCD(); + myGLCD.setFont(SmallFont); +} + +void loop() +{ + int buf[478]; + int x, x2; + int y, y2; + int r; + +// Clear the screen and draw the frame + myGLCD.clrScr(); + + myGLCD.setColor(255, 0, 0); + myGLCD.fillRect(0, 0, 479, 13); + myGLCD.setColor(64, 64, 64); + myGLCD.fillRect(0, 306, 479, 319); + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("* Universal Color TFT Display Library *", CENTER, 1); + myGLCD.setBackColor(64, 64, 64); + myGLCD.setColor(255,255,0); + myGLCD.print("", CENTER, 307); + + myGLCD.setColor(0, 0, 255); + myGLCD.drawRect(0, 14, 479, 305); + +// Draw crosshairs + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(239, 15, 239, 304); + myGLCD.drawLine(1, 159, 478, 159); + for (int i=9; i<470; i+=10) + myGLCD.drawLine(i, 157, i, 161); + for (int i=19; i<220; i+=10) + myGLCD.drawLine(237, i, 241, i); + +// Draw sin-, cos- and tan-lines + myGLCD.setColor(0,255,255); + myGLCD.print("Sin", 5, 15); + for (int i=1; i<478; i++) + { + myGLCD.drawPixel(i,159+(sin(((i*1.13)*3.14)/180)*95)); + } + + myGLCD.setColor(255,0,0); + myGLCD.print("Cos", 5, 27); + for (int i=1; i<478; i++) + { + myGLCD.drawPixel(i,159+(cos(((i*1.13)*3.14)/180)*95)); + } + + myGLCD.setColor(255,255,0); + myGLCD.print("Tan", 5, 39); + for (int i=1; i<478; i++) + { + myGLCD.drawPixel(i,159+(tan(((i*1.13)*3.14)/180))); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,304); + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(239, 15, 239, 304); + myGLCD.drawLine(1, 159, 478, 159); + +// Draw a moving sinewave + x=1; + for (int i=1; i<(478*15); i++) + { + x++; + if (x==479) + x=1; + if (i>479) + { + if ((x==239)||(buf[x-1]==159)) + myGLCD.setColor(0,0,255); + else + myGLCD.setColor(0,0,0); + myGLCD.drawPixel(x,buf[x-1]); + } + myGLCD.setColor(0,255,255); + y=159+(sin(((i*0.7)*3.14)/180)*(90-(i / 100))); + myGLCD.drawPixel(x,y); + buf[x-1]=y; + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,304); + +// Draw some filled rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRect(150+(i*20), 70+(i*20), 210+(i*20), 130+(i*20)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,304); + +// Draw some filled, rounded rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRoundRect(270-(i*20), 70+(i*20), 330-(i*20), 130+(i*20)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,304); + +// Draw some filled circles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillCircle(180+(i*20),100+(i*20), 30); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,304); + +// Draw some lines in a pattern + myGLCD.setColor (255,0,0); + for (int i=15; i<304; i+=5) + { + myGLCD.drawLine(1, i, (i*1.6)-10, 304); + } + myGLCD.setColor (255,0,0); + for (int i=304; i>15; i-=5) + { + myGLCD.drawLine(478, i, (i*1.6)-11, 15); + } + myGLCD.setColor (0,255,255); + for (int i=304; i>15; i-=5) + { + myGLCD.drawLine(1, i, 491-(i*1.6), 15); + } + myGLCD.setColor (0,255,255); + for (int i=15; i<304; i+=5) + { + myGLCD.drawLine(478, i, 490-(i*1.6), 304); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,304); + +// Draw some random circles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=32+random(416); + y=45+random(226); + r=random(30); + myGLCD.drawCircle(x, y, r); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,304); + +// Draw some random rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(476); + y=16+random(289); + x2=2+random(476); + y2=16+random(289); + myGLCD.drawRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,304); + +// Draw some random rounded rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(476); + y=16+random(289); + x2=2+random(476); + y2=16+random(289); + myGLCD.drawRoundRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,304); + + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(476); + y=16+random(289); + x2=2+random(476); + y2=16+random(289); + myGLCD.drawLine(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,304); + + for (int i=0; i<10000; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + myGLCD.drawPixel(2+random(476), 16+random(289)); + } + + delay(2000); + + myGLCD.fillScr(0, 0, 255); + myGLCD.setColor(255, 0, 0); + myGLCD.fillRoundRect(160, 70, 319, 169); + + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("That's it!", CENTER, 93); + myGLCD.print("Restarting in a", CENTER, 119); + myGLCD.print("few seconds...", CENTER, 132); + + myGLCD.setColor(0, 255, 0); + myGLCD.setBackColor(0, 0, 255); + myGLCD.print("Runtime: (msecs)", CENTER, 290); + myGLCD.printNumI(millis(), CENTER, 305); + + delay (10000); +} + diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_800x480/UTFT_Demo_800x480.ino b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_800x480/UTFT_Demo_800x480.ino new file mode 100644 index 0000000..363b71a --- /dev/null +++ b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_800x480/UTFT_Demo_800x480.ino @@ -0,0 +1,293 @@ +// UTFT_Demo_800x480 (C)2014 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of how to use most of the functions +// of the library with a supported display modules. +// +// This demo was made for modules with a screen resolution +// of 800x480 pixels. +// +// This program requires the UTFT library. +// + +#include + +// Declare which fonts we will be using +extern uint8_t SmallFont[]; + +// Set the pins to the correct ones for your development shield +// ------------------------------------------------------------ +// Arduino Uno / 2009: +// ------------------- +// Standard Arduino Uno/2009 shield : ,A5,A4,A3,A2 +// DisplayModule Arduino Uno TFT shield : ,A5,A4,A3,A2 +// +// Arduino Mega: +// ------------------- +// Standard Arduino Mega/Due shield : ,38,39,40,41 +// CTE TFT LCD/SD Shield for Arduino Mega : ,38,39,40,41 +// +// Remember to change the model parameter to suit your display module! +UTFT myGLCD(ITDB50,38,39,40,41); + +void setup() +{ + randomSeed(analogRead(0)); + +// Setup the LCD + myGLCD.InitLCD(); + myGLCD.setFont(SmallFont); +} + +void loop() +{ + int buf[798]; + int x, x2; + int y, y2; + int r; + +// Clear the screen and draw the frame + myGLCD.clrScr(); + + myGLCD.setColor(255, 0, 0); + myGLCD.fillRect(0, 0, 799, 13); + myGLCD.setColor(64, 64, 64); + myGLCD.fillRect(0, 466, 799, 479); + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("* Universal Color TFT Display Library *", CENTER, 1); + myGLCD.setBackColor(64, 64, 64); + myGLCD.setColor(255,255,0); + myGLCD.print("", CENTER, 467); + + myGLCD.setColor(0, 0, 255); + myGLCD.drawRect(0, 14, 799, 465); + +// Draw crosshairs + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(399, 15, 399, 464); + myGLCD.drawLine(1, 239, 798, 239); + for (int i=9; i<790; i+=10) + myGLCD.drawLine(i, 237, i, 242); + for (int i=19; i<470; i+=10) + myGLCD.drawLine(397, i, 402, i); + +// Draw sin-, cos- and tan-lines + myGLCD.setColor(0,255,255); + myGLCD.print("Sin", 5, 15); + for (int i=1; i<798; i++) + { + myGLCD.drawPixel(i,239+(sin(((i*1.13)*3.14)/180)*200)); + } + + myGLCD.setColor(255,0,0); + myGLCD.print("Cos", 5, 27); + for (int i=1; i<798; i++) + { + myGLCD.drawPixel(i,239+(cos(((i*1.13)*3.14)/180)*200)); + } + + myGLCD.setColor(255,255,0); + myGLCD.print("Tan", 5, 39); + for (int i=1; i<798; i++) + { + myGLCD.drawPixel(i,239+(tan(((i*0.9)*3.14)/180))); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,798,464); + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(399, 15, 399, 464); + myGLCD.drawLine(1, 239, 798, 239); + +// Draw a moving sinewave + x=1; + for (int i=1; i<(798*20); i++) + { + x++; + if (x==799) + x=1; + if (i>799) + { + if ((x==399)||(buf[x-1]==239)) + myGLCD.setColor(0,0,255); + else + myGLCD.setColor(0,0,0); + myGLCD.drawPixel(x,buf[x-1]); + } + myGLCD.setColor(0,255,255); + y=239+(sin(((i*1.65)*3.14)/180)*(200-(i / 100))); + myGLCD.drawPixel(x,y); + buf[x-1]=y; + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,798,464); + +// Draw some random filled rectangles + for (int i=0; i<50; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(746); + y=16+random(397); + x2=x+50; + y2=y+50; + myGLCD.fillRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,798,464); + +// Draw some random filled, rounded rectangles + for (int i=0; i<50; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(746); + y=16+random(397); + x2=x+50; + y2=y+50; + myGLCD.fillRoundRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,798,464); + +// Draw some random filled circles + for (int i=0; i<50; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=27+random(746); + y=41+random(397); + myGLCD.fillCircle(x, y, 25); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,798,464); + +// Draw some lines in a pattern + myGLCD.setColor (255,0,0); + for (int i=15; i<463; i+=5) + { + myGLCD.drawLine(1, i, (i*1.66)-10, 463); + } + myGLCD.setColor (255,0,0); + for (int i=463; i>15; i-=5) + { + myGLCD.drawLine(798, i, (i*1.66)+30, 15); + } + myGLCD.setColor (0,255,255); + for (int i=463; i>15; i-=5) + { + myGLCD.drawLine(1, i, 770-(i*1.66), 15); + } + myGLCD.setColor (0,255,255); + for (int i=15; i<463; i+=5) + { + myGLCD.drawLine(798, i, 810-(i*1.66), 463); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,798,464); + +// Draw some random circles + for (int i=0; i<250; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=32+random(736); + y=45+random(386); + r=random(30); + myGLCD.drawCircle(x, y, r); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,798,464); + +// Draw some random rectangles + for (int i=0; i<250; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(796); + y=16+random(447); + x2=2+random(796); + y2=16+random(447); + myGLCD.drawRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,798,464); + +// Draw some random rounded rectangles + for (int i=0; i<250; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(796); + y=16+random(447); + x2=2+random(796); + y2=16+random(447); + myGLCD.drawRoundRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,798,464); + + for (int i=0; i<250; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(796); + y=16+random(447); + x2=2+random(796); + y2=16+random(447); + myGLCD.drawLine(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,798,464); + + for (int i=0; i<10000; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + myGLCD.drawPixel(2+random(796), 16+random(447)); + } + + delay(2000); + + myGLCD.fillScr(0, 0, 255); + myGLCD.setColor(255, 0, 0); + myGLCD.fillRoundRect(320, 190, 479, 289); + + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("That's it!", CENTER, 213); + myGLCD.print("Restarting in a", CENTER, 239); + myGLCD.print("few seconds...", CENTER, 252); + + myGLCD.setColor(0, 255, 0); + myGLCD.setBackColor(0, 0, 255); + myGLCD.print("Runtime: (msecs)", CENTER, 450); + myGLCD.printNumI(millis(), CENTER, 465); + + delay (10000); +} + diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Leonardo_Demo_320x240/UTFT_Leonardo_Demo_320x240.ino b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Leonardo_Demo_320x240/UTFT_Leonardo_Demo_320x240.ino new file mode 100644 index 0000000..4e8a9d1 --- /dev/null +++ b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Leonardo_Demo_320x240/UTFT_Leonardo_Demo_320x240.ino @@ -0,0 +1,252 @@ +// UTFT_Leonardo_Demo_320x240 (C)2013 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a reduced demo of how to use some of the functions +// of the library with a supported display modules on an Arduino Leonardo. +// +// It has been reduced in size to fit in the limited flash memory of +// the Leonardo. It has not been tested on all display modules so +// some modules may still produce too large binares. +// +// This demo was made for modules with a screen resolution +// of 320x240 pixels. +// +// This program requires the UTFT library. +// + +#include + +// Declare which fonts we will be using +extern uint8_t SmallFont[]; + +UTFT myGLCD(ITDB24E_8,A5,A4,A3,A2); // Remember to change the model parameter to suit your display module! + +void setup() +{ + randomSeed(analogRead(0)); + +// Setup the LCD + myGLCD.InitLCD(); + myGLCD.setFont(SmallFont); +} + +void loop() +{ + int buf[318]; + int x, x2; + int y, y2; + int r; + +// Clear the screen and draw the frame + myGLCD.clrScr(); + + myGLCD.setColor(255, 0, 0); + myGLCD.fillRect(0, 0, 319, 13); + myGLCD.setColor(64, 64, 64); + myGLCD.fillRect(0, 226, 319, 239); + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("* Universal Color TFT Display Library *", CENTER, 1); + myGLCD.setBackColor(64, 64, 64); + myGLCD.setColor(255,255,0); + myGLCD.print("", CENTER, 227); + + myGLCD.setColor(0, 0, 255); + myGLCD.drawRect(0, 14, 319, 225); + +// Draw crosshairs + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(159, 15, 159, 224); + myGLCD.drawLine(1, 119, 318, 119); + for (int i=9; i<310; i+=10) + myGLCD.drawLine(i, 117, i, 121); + for (int i=19; i<220; i+=10) + myGLCD.drawLine(157, i, 161, i); + +// Draw sin-, cos- and tan-lines + myGLCD.setColor(0,255,255); + myGLCD.print("Sin", 5, 15); + for (int i=1; i<318; i++) + { + myGLCD.drawPixel(i,119+(sin(((i*1.13)*3.14)/180)*95)); + } + + myGLCD.setColor(255,0,0); + myGLCD.print("Cos", 5, 27); + for (int i=1; i<318; i++) + { + myGLCD.drawPixel(i,119+(cos(((i*1.13)*3.14)/180)*95)); + } + + myGLCD.setColor(255,255,0); + myGLCD.print("Tan", 5, 39); + for (int i=1; i<318; i++) + { + myGLCD.drawPixel(i,119+(tan(((i*1.13)*3.14)/180))); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(159, 15, 159, 224); + myGLCD.drawLine(1, 119, 318, 119); + +// Draw a moving sinewave + x=1; + for (int i=1; i<(318*20); i++) + { + x++; + if (x==319) + x=1; + if (i>319) + { + if ((x==159)||(buf[x-1]==119)) + myGLCD.setColor(0,0,255); + else + myGLCD.setColor(0,0,0); + myGLCD.drawPixel(x,buf[x-1]); + } + myGLCD.setColor(0,255,255); + y=119+(sin(((i*1.1)*3.14)/180)*(90-(i / 100))); + myGLCD.drawPixel(x,y); + buf[x-1]=y; + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some filled rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRect(70+(i*20), 30+(i*20), 130+(i*20), 90+(i*20)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some filled, rounded rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRoundRect(190-(i*20), 30+(i*20), 250-(i*20), 90+(i*20)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some filled circles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillCircle(100+(i*20),60+(i*20), 30); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some lines in a pattern + myGLCD.setColor (255,0,0); + for (int i=15; i<224; i+=5) + { + myGLCD.drawLine(1, i, (i*1.44)-10, 224); + } + myGLCD.setColor (255,0,0); + for (int i=224; i>15; i-=5) + { + myGLCD.drawLine(318, i, (i*1.44)-11, 15); + } + myGLCD.setColor (0,255,255); + for (int i=224; i>15; i-=5) + { + myGLCD.drawLine(1, i, 331-(i*1.44), 15); + } + myGLCD.setColor (0,255,255); + for (int i=15; i<224; i+=5) + { + myGLCD.drawLine(318, i, 330-(i*1.44), 224); + } + + delay(2000); + + myGLCD.fillScr(0, 0, 255); + myGLCD.setColor(255, 0, 0); + myGLCD.fillRoundRect(80, 70, 239, 169); + + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("That's it!", CENTER, 93); + myGLCD.print("Restarting in a", CENTER, 119); + myGLCD.print("few seconds...", CENTER, 132); + + myGLCD.setColor(0, 255, 0); + myGLCD.setBackColor(0, 0, 255); + myGLCD.print("Runtime: (msecs)", CENTER, 210); + myGLCD.printNumI(millis(), CENTER, 225); + + delay (10000); +} + diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Rotate_Bitmap/UTFT_Rotate_Bitmap.ino b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Rotate_Bitmap/UTFT_Rotate_Bitmap.ino new file mode 100644 index 0000000..ccb55f6 --- /dev/null +++ b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Rotate_Bitmap/UTFT_Rotate_Bitmap.ino @@ -0,0 +1,43 @@ +// UTFT_Rotate_Bitmap (C)2014 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of the drawBitmap()-function. +// +// This program requires the UTFT library. +// + +#include +#include + +// Set the pins to the correct ones for your development shield +// ------------------------------------------------------------ +// Arduino Uno / 2009: +// ------------------- +// Standard Arduino Uno/2009 shield : ,A5,A4,A3,A2 +// DisplayModule Arduino Uno TFT shield : ,A5,A4,A3,A2 +// +// Arduino Mega: +// ------------------- +// Standard Arduino Mega/Due shield : ,38,39,40,41 +// CTE TFT LCD/SD Shield for Arduino Mega : ,38,39,40,41 +// +// Remember to change the model parameter to suit your display module! +UTFT myGLCD(ITDB32S,38,39,40,41); + +extern unsigned int tux[0x400]; + +void setup() +{ + myGLCD.InitLCD(LANDSCAPE); + myGLCD.fillScr(255, 255, 255); + myGLCD.setColor(0, 0, 0); +} + +void loop() +{ + for (int i=0; i<360; i+=5) + { + myGLCD.drawBitmap (10, 10, 32, 32, tux, i, 16, 16); + } +} + diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Rotate_Bitmap/tux.c b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Rotate_Bitmap/tux.c new file mode 100644 index 0000000..3babe53 --- /dev/null +++ b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Rotate_Bitmap/tux.c @@ -0,0 +1,73 @@ +// Generated by : ImageConverter 565 v1.0 +// Generated from: tux.png +// Time generated: 11.10.2010 22:51:32 +// Size : 2 048 Bytes + +#include + +const unsigned short tux[0x400] PROGMEM ={ +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE73C, 0x9CD3, 0x9CF3, 0xA514, // 0x0010 (16) +0x9CF3, 0x8C51, 0xAD75, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0020 (32) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7D, 0x5AEB, 0x7BEF, 0x9CD3, 0x94B2, // 0x0030 (48) +0x94B2, 0x94B2, 0x4228, 0x7BEF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0040 (64) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x9CF3, 0x18E3, 0x630C, 0x4A49, 0x4A69, // 0x0050 (80) +0x4A69, 0x528A, 0x4A49, 0x0000, 0xC638, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0060 (96) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x6B6D, 0x0000, 0x0020, 0x10A2, 0x1082, // 0x0070 (112) +0x0841, 0x0841, 0x0841, 0x0000, 0x630C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0080 (128) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x528A, 0x4228, 0x8410, 0x0000, 0x0861, // 0x0090 (144) +0xAD55, 0xBDD7, 0x10A2, 0x0000, 0x2945, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00A0 (160) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x5ACB, 0x8C71, 0xE75D, 0x2126, 0x528B, // 0x00B0 (176) +0xE75D, 0xDEDB, 0x7BCF, 0x0000, 0x18E3, 0xE73C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00C0 (192) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x6B6D, 0x4A4A, 0x6B2A, 0x8BE7, 0xA48A, // 0x00D0 (208) +0x6B09, 0x4A8A, 0x8431, 0x0000, 0x2104, 0xE73C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00E0 (224) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x6B6E, 0x5204, 0xDE6A, 0xFFF7, 0xFFF8, // 0x00F0 (240) +0xD5AC, 0xBCAA, 0x5A66, 0x0000, 0x1082, 0xDEFB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0100 (256) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x8C10, 0xC540, 0xFFED, 0xFF2C, 0xFEEC, // 0x0110 (272) +0xFECC, 0xFE66, 0x8260, 0x0000, 0x0000, 0xB596, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0120 (288) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x94B3, 0x9C25, 0xFF20, 0xFE40, 0xFDA0, // 0x0130 (304) +0xFCC0, 0xF524, 0x836A, 0x0000, 0x0000, 0x630C, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0140 (320) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x630C, 0x94B4, 0xFF13, 0xFD83, 0xF523, // 0x0150 (336) +0xE5CF, 0xF79E, 0xE71D, 0x0861, 0x0000, 0x0861, 0xDEDB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0160 (352) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xCE59, 0x0841, 0xD69A, 0xFFFF, 0xFF7D, 0xF77D, // 0x0170 (368) +0xFFFF, 0xFFFF, 0xFFFF, 0x73AE, 0x0000, 0x0000, 0x4A69, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0180 (384) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79E, 0x10A2, 0x8410, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, // 0x0190 (400) +0xFFFF, 0xFFDF, 0xFFFF, 0xCE59, 0x0000, 0x0000, 0x0000, 0x9492, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01A0 (416) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x52AA, 0x0020, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01B0 (432) +0xFFDF, 0xFFDF, 0xF7BE, 0xFFDF, 0x3186, 0x0000, 0x0020, 0x0841, 0xCE79, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01C0 (448) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xC638, 0x0000, 0x52AA, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFDF, // 0x01D0 (464) +0xFFDF, 0xF7BE, 0xF79E, 0xFFFF, 0x9CF3, 0x0000, 0x0841, 0x0000, 0x39E7, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01E0 (480) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x5ACB, 0x0000, 0xBDF7, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFDF, 0xFFDF, // 0x01F0 (496) +0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0x3186, 0x0000, 0x0861, 0x0000, 0xAD55, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0200 (512) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE73C, 0x0861, 0x4A49, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, // 0x0210 (528) +0xF7BE, 0xF79E, 0xEF7D, 0xEF5D, 0xFFDF, 0x8410, 0x0000, 0x1082, 0x0000, 0x39E7, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0220 (544) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x94B2, 0x0000, 0xB596, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, // 0x0230 (560) +0xF79E, 0xEF7D, 0xEF7D, 0xE73C, 0xF79E, 0xAD55, 0x0861, 0x10A2, 0x0861, 0x0841, 0xCE59, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0240 (576) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79E, 0x3185, 0x10A2, 0xE71C, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF79E, // 0x0250 (592) +0xEF7D, 0xEF7D, 0xEF5D, 0xE73C, 0xEF5D, 0xBDF7, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x8C71, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0260 (608) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x94B2, 0x0000, 0x39E7, 0xF7BE, 0xFFFF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF79E, 0xEF7D, // 0x0270 (624) +0xEF7D, 0xEF5D, 0xE73C, 0xE71C, 0xE71C, 0xC618, 0x18E3, 0x10A2, 0x10A2, 0x0020, 0x6B4D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0280 (640) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x8C51, 0x38E0, 0x4A27, 0xFFFF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF79E, 0xEF7D, 0xEF7D, // 0x0290 (656) +0xEF5D, 0xE73C, 0xE71C, 0xDEFB, 0xDF1D, 0xBDF8, 0x39C7, 0x5ACB, 0x528A, 0x10A3, 0x738F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02A0 (672) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDD6C, 0xFE2B, 0xBC45, 0xA513, 0xFFFF, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF5D, // 0x02B0 (688) +0xE73C, 0xE71C, 0xDEFB, 0xD6DC, 0xDD8E, 0xB3E4, 0x2124, 0x2965, 0x2945, 0x20C1, 0xB511, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02C0 (704) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF77C, 0xE5CF, 0xF60B, 0xFF9B, 0xFF54, 0x8B02, 0x7BF0, 0xFFDF, 0xF79E, 0xEF5D, 0xEF5D, 0xE73C, // 0x02D0 (720) +0xE71C, 0xDEFB, 0xDEDB, 0xCE7A, 0xED89, 0xDDAD, 0x0842, 0x0000, 0x0000, 0xAC69, 0xDD6B, 0xEFBF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02E0 (736) +0xFFFF, 0xFFFF, 0xFFBE, 0xE5CB, 0xEDC9, 0xFE4B, 0xFF14, 0xFEF3, 0xFF35, 0xFE8D, 0x51C1, 0x634E, 0xE73C, 0xEF5D, 0xE73C, 0xE71C, // 0x02F0 (752) +0xDEFB, 0xDEDB, 0xD6DB, 0xCE59, 0xE58B, 0xFF98, 0xBD4F, 0x8B88, 0xCD90, 0xFFB7, 0xCCE8, 0xE73D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0300 (768) +0xFFFF, 0xFFFF, 0xEF3B, 0xF583, 0xFF30, 0xFF11, 0xFECF, 0xFEEF, 0xFECF, 0xFF30, 0xDD46, 0x2903, 0x6B8E, 0xEF7D, 0xE71C, 0xDEFB, // 0x0310 (784) +0xDEDB, 0xD6BA, 0xD69A, 0xCE59, 0xE5AA, 0xFF11, 0xFF53, 0xFF73, 0xFF33, 0xFF12, 0xFE6C, 0xDDAD, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0320 (800) +0xFFFF, 0xFFFF, 0xF79E, 0xEDC5, 0xFECB, 0xFECC, 0xFECC, 0xFEEC, 0xFECB, 0xFECC, 0xFEEA, 0x9BE5, 0x8432, 0xE73C, 0xDEDB, 0xDEDB, // 0x0330 (816) +0xD6BA, 0xD69A, 0xDEDB, 0xA4F3, 0xD547, 0xFF2E, 0xFECD, 0xFECE, 0xFEEE, 0xFEEE, 0xFF10, 0xFEAB, 0xE5A8, 0xEF7D, 0xFFFF, 0xFFFF, // 0x0340 (832) +0xFFFF, 0xFFFF, 0xF79E, 0xF603, 0xFEA2, 0xFEC7, 0xFEC7, 0xFEA4, 0xFE81, 0xFE61, 0xFEA4, 0xFE43, 0xDE33, 0xE75E, 0xE71C, 0xDEFB, // 0x0350 (848) +0xDEDB, 0xCE58, 0x8C72, 0x5247, 0xEDE4, 0xFF0A, 0xFECA, 0xFEC9, 0xFE84, 0xFE83, 0xFEE7, 0xFEA3, 0xB443, 0xD69B, 0xFFFF, 0xFFFF, // 0x0360 (864) +0xFFFF, 0xFFFF, 0xF75B, 0xFE60, 0xFF00, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEE0, 0xE5C1, 0x9492, 0xA514, 0x9CD3, // 0x0370 (880) +0x8410, 0x630B, 0x4229, 0x6AE8, 0xFE80, 0xFEC1, 0xFEC1, 0xFEA0, 0xFEA0, 0xFEE0, 0xDD80, 0x9BE8, 0xB597, 0xFFDF, 0xFFFF, 0xFFFF, // 0x0380 (896) +0xFFFF, 0xFFFF, 0xF79E, 0xD589, 0xE600, 0xFEA0, 0xFF00, 0xFF40, 0xFF40, 0xFF00, 0xFF00, 0xFF20, 0xFEC0, 0x5267, 0x4229, 0x4A48, // 0x0390 (912) +0x4A49, 0x5289, 0x424A, 0x7B46, 0xFF20, 0xFEE0, 0xFEE0, 0xFF20, 0xFEE0, 0xB4A5, 0x9C92, 0xDEFD, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03A0 (928) +0xFFFF, 0xFFFF, 0xFFFF, 0xE71D, 0xBDB6, 0xB530, 0xBD0B, 0xCD65, 0xEE60, 0xFF40, 0xFFA0, 0xFF80, 0xBD03, 0x8410, 0xA514, 0xA534, // 0x03B0 (944) +0xAD75, 0xB596, 0xA555, 0x9C8F, 0xF6C0, 0xFFA0, 0xFFA0, 0xF6E0, 0xA449, 0xB5B8, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03C0 (960) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7F, 0xD69C, 0xBD95, 0xBD4C, 0xCDC6, 0xB4E8, 0xAD35, 0xF7BF, 0xFFFF, 0xFFFF, // 0x03D0 (976) +0xFFFF, 0xFFFF, 0xFFFF, 0xF7BF, 0xCDD0, 0xCDC6, 0xCDA7, 0xA48D, 0xCE7B, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03E0 (992) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDF1F, 0xB59A, 0xBDDA, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, // 0x03F0 (1008) +0xFFFF, 0xFFDF, 0xFFDF, 0xFFFF, 0xEF7F, 0xB59A, 0xAD59, 0xDF1D, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) +}; diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Textrotation_Demo/UTFT_Textrotation_Demo.ino b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Textrotation_Demo/UTFT_Textrotation_Demo.ino new file mode 100644 index 0000000..81ce558 --- /dev/null +++ b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Textrotation_Demo/UTFT_Textrotation_Demo.ino @@ -0,0 +1,57 @@ +// UTFT_Textrotation_Demo (C)2014 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of the textrotation-functions. +// +// This demo was made for modules with a screen resolution +// of 320x240 pixels. +// +// This program requires the UTFT library. +// + +#include + +// Declare which fonts we will be using +extern uint8_t BigFont[]; +extern uint8_t SevenSegNumFont[]; + +// Set the pins to the correct ones for your development shield +// ------------------------------------------------------------ +// Arduino Uno / 2009: +// ------------------- +// Standard Arduino Uno/2009 shield : ,A5,A4,A3,A2 +// DisplayModule Arduino Uno TFT shield : ,A5,A4,A3,A2 +// +// Arduino Mega: +// ------------------- +// Standard Arduino Mega/Due shield : ,38,39,40,41 +// CTE TFT LCD/SD Shield for Arduino Mega : ,38,39,40,41 +// +// Remember to change the model parameter to suit your display module! +UTFT myGLCD(ITDB32S,38,39,40,41); + +void setup() +{ + myGLCD.InitLCD(); + myGLCD.clrScr(); + myGLCD.setFont(BigFont); +} + +void loop() +{ + myGLCD.print("Text rotation", 0, 0); + myGLCD.setColor(0, 0, 255); + myGLCD.print("0 degrees", 0, 16, 0); + myGLCD.print("90 degrees", 319, 0, 90); + myGLCD.print("180 degrees", 319, 239, 180); + myGLCD.print("270 degrees", 0, 239, 270); + + myGLCD.setFont(SevenSegNumFont); + myGLCD.setColor(0, 255, 0); + myGLCD.print("45", 90, 100, 45); + myGLCD.print("90", 200, 50, 90); + myGLCD.print("180", 300, 200, 180); + + while (true) {}; +} + diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_ViewFont/UTFT_ViewFont.ino b/libraries/UTFT/examples/Arduino (AVR)/UTFT_ViewFont/UTFT_ViewFont.ino new file mode 100644 index 0000000..4a16428 --- /dev/null +++ b/libraries/UTFT/examples/Arduino (AVR)/UTFT_ViewFont/UTFT_ViewFont.ino @@ -0,0 +1,64 @@ +// UTFT_ViewFont (C)2014 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of the included fonts. +// +// This demo was made for modules with a screen resolution +// of 320x240 pixels. +// +// This program requires the UTFT library. +// + +#include + +// Declare which fonts we will be using +extern uint8_t SmallFont[]; +extern uint8_t BigFont[]; +extern uint8_t SevenSegNumFont[]; + +// Set the pins to the correct ones for your development shield +// ------------------------------------------------------------ +// Arduino Uno / 2009: +// ------------------- +// Standard Arduino Uno/2009 shield : ,A5,A4,A3,A2 +// DisplayModule Arduino Uno TFT shield : ,A5,A4,A3,A2 +// +// Arduino Mega: +// ------------------- +// Standard Arduino Mega/Due shield : ,38,39,40,41 +// CTE TFT LCD/SD Shield for Arduino Mega : ,38,39,40,41 +// +// Remember to change the model parameter to suit your display module! +UTFT myGLCD(ITDB32S,38,39,40,41); + +void setup() +{ + myGLCD.InitLCD(); + + myGLCD.clrScr(); +} + +void loop() +{ + myGLCD.setColor(0, 255, 0); + myGLCD.setBackColor(0, 0, 0); + + myGLCD.setFont(BigFont); + myGLCD.print(" !\"#$%&'()*+,-./", CENTER, 0); + myGLCD.print("0123456789:;<=>?", CENTER, 16); + myGLCD.print("@ABCDEFGHIJKLMNO", CENTER, 32); + myGLCD.print("PQRSTUVWXYZ[\\]^_", CENTER, 48); + myGLCD.print("`abcdefghijklmno", CENTER, 64); + myGLCD.print("pqrstuvwxyz{|}~ ", CENTER, 80); + + myGLCD.setFont(SmallFont); + myGLCD.print(" !\"#$%&'()*+,-./0123456789:;<=>?", CENTER, 120); + myGLCD.print("@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_", CENTER, 132); + myGLCD.print("`abcdefghijklmnopqrstuvwxyz{|}~ ", CENTER, 144); + + myGLCD.setFont(SevenSegNumFont); + myGLCD.print("0123456789", CENTER, 190); + + while(1) {}; +} + diff --git a/libraries/UTFT/examples/chipKit/UTFT_Bitmap/UTFT_Bitmap.pde b/libraries/UTFT/examples/chipKit/UTFT_Bitmap/UTFT_Bitmap.pde new file mode 100644 index 0000000..b28e8fc --- /dev/null +++ b/libraries/UTFT/examples/chipKit/UTFT_Bitmap/UTFT_Bitmap.pde @@ -0,0 +1,65 @@ +// UTFT_Bitmap (C)2014 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of the drawBitmap()-function. +// +// This demo was made to work on the 320x240 modules. +// Any other size displays may cause strange behaviour. +// +// This program requires the UTFT library. +// + +#include + +// Declare which fonts we will be using +extern uint8_t SmallFont[]; + +// Set the pins to the correct ones for your development shield +// ------------------------------------------------------------ +// My chipKit Uno32/uC32 shield : ,38,39,40,41 +// My chipKit Max32 shield : ,82,83,84,85 +// AquaLEDSource All in One Super Screw Shield : ,82,83,84,85 +// +// Remember to change the model parameter to suit your display module! +UTFT myGLCD(ITDB32S,82,83,84,85); + +extern unsigned short info[0x400]; +extern unsigned short icon[0x400]; +extern unsigned short tux[0x400]; + +void setup() +{ + myGLCD.InitLCD(); + myGLCD.setFont(SmallFont); +} + +void loop() +{ + myGLCD.fillScr(255, 255, 255); + myGLCD.setColor(255, 255, 255); + myGLCD.print(" *** A 10 by 7 grid of a 32x32 icon *** ", CENTER, 228); + for (int x=0; x<10; x++) + for (int y=0; y<7; y++) + myGLCD.drawBitmap (x*32, y*32, 32, 32, info); + + delay(5000); + + myGLCD.fillScr(255, 255, 255); + myGLCD.setColor(255, 255, 255); + myGLCD.print(" Two different icons in scale 1 to 4 ", CENTER, 228); + int x=0; + for (int s=0; s<4; s++) + { + x+=(s*32); + myGLCD.drawBitmap (x, 0, 32, 32, tux, s+1); + } + x=0; + for (int s=4; s>0; s--) + { + myGLCD.drawBitmap (x, 224-(s*32), 32, 32, icon, s); + x+=(s*32); + } + + delay(5000); +} + diff --git a/libraries/UTFT/examples/chipKit/UTFT_Bitmap/icon.c b/libraries/UTFT/examples/chipKit/UTFT_Bitmap/icon.c new file mode 100644 index 0000000..9cb97a1 --- /dev/null +++ b/libraries/UTFT/examples/chipKit/UTFT_Bitmap/icon.c @@ -0,0 +1,71 @@ +// Generated by : ImageConverter 565 v1.0 +// Generated from: taskmgr.png +// Time generated: 11.10.2010 22:51:23 +// Size : 2 048 Bytes + +const unsigned short icon[0x400] ={ +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7D, 0xCE79, 0xBDD7, 0xAD75, // 0x0010 (16) +0xAD55, 0xAD75, 0xBDF7, 0xD6BA, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0020 (32) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xC638, 0x9492, 0x8C51, 0x9492, 0xA514, 0xA534, // 0x0030 (48) +0xA534, 0xA534, 0x9CF3, 0x8C71, 0x8430, 0x9CD3, 0xD69A, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0040 (64) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xCE59, 0x8410, 0x9492, 0xB5B6, 0xC618, 0xBDD7, 0xAD75, 0xA514, // 0x0050 (80) +0xA514, 0xA4F4, 0xAD55, 0xB5B6, 0xBDD7, 0xAD55, 0x8430, 0x8C71, 0xDEFB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0060 (96) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0x9CD3, 0x8430, 0xBDF7, 0xC618, 0xAD75, 0x94F2, 0x8CF1, 0x84B0, 0x8CD1, // 0x0070 (112) +0x9612, 0x8CB1, 0x7C6F, 0x7C8F, 0x8490, 0xA533, 0xBDF7, 0xB596, 0x7BEF, 0xB596, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0080 (128) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0x8430, 0x9CF3, 0xCE39, 0xA514, 0x94B2, 0x9E93, 0x94F2, 0x8CD1, 0x8CB1, 0x9D12, // 0x0090 (144) +0x9F74, 0x9D52, 0x8450, 0x7C8F, 0x73AE, 0x740E, 0x73CE, 0x9CD3, 0xC638, 0x8C51, 0x9CD3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00A0 (160) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0x8430, 0xA534, 0xBDF7, 0x8CB1, 0x8C31, 0x9DB3, 0xA735, 0x9D13, 0x8CB1, 0x8C71, 0x9D13, // 0x00B0 (176) +0xB756, 0xA5D4, 0x8C71, 0x8490, 0x8390, 0x7C70, 0x73EE, 0x6B4D, 0x8450, 0xBDF7, 0x8C71, 0x9CF3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00C0 (192) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x94B2, 0x9CF3, 0xBDD7, 0x8490, 0x8CF1, 0x9D72, 0xA694, 0xAE94, 0x9DD3, 0xA593, 0xA553, 0x9592, // 0x00D0 (208) +0x9672, 0x75CE, 0x5BAA, 0x64EB, 0x5D8C, 0x5BCA, 0x4B69, 0x634C, 0x748D, 0x7C4F, 0xBE18, 0x8430, 0xB5B6, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00E0 (224) +0xFFFF, 0xFFFF, 0xFFFF, 0xC618, 0x8410, 0xBDF7, 0x8410, 0x83F0, 0x94F2, 0x9613, 0x9D13, 0xAE55, 0x9D12, 0x750E, 0x55CB, 0x4BC8, // 0x00F0 (240) +0x4447, 0x3BC6, 0x4B67, 0x44E8, 0x3CE8, 0x3325, 0x20E2, 0x2B45, 0x43E7, 0x3946, 0x732D, 0xC5F8, 0x7BCF, 0xE71C, 0xFFFF, 0xFFFF, // 0x0100 (256) +0xFFFF, 0xFFFF, 0xF7BE, 0x7BEF, 0xBDB6, 0x9533, 0x8D71, 0x9552, 0x9E73, 0x9DD3, 0x94B2, 0x6D6D, 0x4BA8, 0x44A8, 0x55EA, 0x5D2A, // 0x0110 (272) +0x43E7, 0x4327, 0x46CA, 0x4B87, 0x42C6, 0x4E0A, 0x4D09, 0x4468, 0x4548, 0x3386, 0x2B25, 0x7C6F, 0xAD35, 0x9492, 0xFFFF, 0xFFFF, // 0x0120 (288) +0xFFDF, 0xFFFF, 0xBDD7, 0x8C71, 0xAD75, 0x8CF0, 0x8D71, 0x8D51, 0x9DF3, 0x740E, 0x21C4, 0x33E5, 0x558A, 0x554A, 0x650A, 0x566B, // 0x0130 (304) +0x43E7, 0x21C3, 0x3345, 0x2283, 0x1962, 0x3C87, 0x3386, 0x2163, 0x3345, 0x3346, 0x33A6, 0x32C6, 0x9CB3, 0x7BEF, 0xDEDB, 0xFFFF, // 0x0140 (320) +0xFFFF, 0xFFFF, 0x8430, 0xAD75, 0x8C31, 0x7C0F, 0x7BCF, 0x83F0, 0x636B, 0x0000, 0x0000, 0x4387, 0x462A, 0x4B27, 0x4B88, 0x4E8B, // 0x0150 (336) +0x42E6, 0x0000, 0x0020, 0x0100, 0x0000, 0x1121, 0x0040, 0x0000, 0x0941, 0x0000, 0x0020, 0x00E0, 0x5AAB, 0x94B2, 0x9CD3, 0xFFFF, // 0x0160 (352) +0xFFFF, 0xE71C, 0x8410, 0xB596, 0x7BEF, 0x7C6F, 0x84B0, 0x5B6B, 0x09E1, 0x0901, 0x1161, 0x3C06, 0x3D89, 0x32C5, 0x43E7, 0x470B, // 0x0170 (368) +0x4BC7, 0x0961, 0x11E2, 0x1282, 0x0961, 0x1262, 0x09E2, 0x0961, 0x12A2, 0x0961, 0x09C2, 0x0A01, 0x29E5, 0xA514, 0x7BEF, 0xFFDF, // 0x0180 (384) +0xFFFF, 0xBDD7, 0x9472, 0xA514, 0x6B4D, 0x7C6F, 0x634C, 0x0040, 0x0981, 0x0060, 0x00E0, 0x11E2, 0x10A1, 0x09C1, 0x19E3, 0x2B25, // 0x0190 (400) +0x22A3, 0x0060, 0x0120, 0x09E1, 0x0060, 0x09E1, 0x0120, 0x0060, 0x0A21, 0x0060, 0x0100, 0x01A0, 0x0040, 0x9CD3, 0x7BEF, 0xDEDB, // 0x01A0 (416) +0xFFFF, 0xA514, 0x9CF3, 0xB596, 0x73AE, 0x7C0F, 0x2945, 0x10A2, 0x2184, 0x18C3, 0x1923, 0x2184, 0x18C3, 0x21A4, 0x2964, 0x2905, // 0x01B0 (432) +0x2A25, 0x2104, 0x2965, 0x2A05, 0x2104, 0x2A05, 0x2985, 0x2104, 0x2A25, 0x2104, 0x2164, 0x29C4, 0x3166, 0xB5B6, 0x8410, 0xC618, // 0x01C0 (448) +0xFFFF, 0x9492, 0xA514, 0xDEDB, 0xC618, 0xA514, 0x8C51, 0x94B2, 0x9CB3, 0x9CF3, 0xA514, 0xA534, 0xAD75, 0xAD75, 0xB596, 0xB5D6, // 0x01D0 (464) +0xBDB7, 0xBDF7, 0xBDF7, 0xBDF7, 0xC618, 0xC5F8, 0xC5F8, 0xBDF7, 0xBDD7, 0xBDD7, 0xB5B6, 0xB596, 0xC638, 0xDEFB, 0x8430, 0xB596, // 0x01E0 (480) +0xFFFF, 0x8C51, 0x9CF3, 0xE73C, 0xDEFB, 0xD69A, 0xD6BA, 0xD6BA, 0xDEDB, 0xDEDB, 0xDEFB, 0xDF1B, 0xE71C, 0xE73C, 0xE73C, 0xE73C, // 0x01F0 (496) +0xEF5D, 0xEF5D, 0xEF5D, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xDEFB, 0xE71C, 0x8C51, 0xAD75, // 0x0200 (512) +0xFFFF, 0x8C71, 0x9CD3, 0xDEFB, 0xAD75, 0x9492, 0x9CD3, 0xA4F3, 0xA514, 0xAD55, 0xAD75, 0xB596, 0xBDB6, 0xBDD7, 0xC5F7, 0xC618, // 0x0210 (528) +0xC638, 0xCE59, 0xCE59, 0xCE79, 0xD679, 0xD679, 0xCE79, 0xCE59, 0xCE59, 0xC638, 0xC618, 0xBDF7, 0xCE79, 0xE71C, 0x8C51, 0xB596, // 0x0220 (544) +0xFFFF, 0x9CD3, 0x9492, 0xAD55, 0x2965, 0x2104, 0x2124, 0x2145, 0x1945, 0x2165, 0x2165, 0x2186, 0x2186, 0x29A6, 0x29A6, 0x31C7, // 0x0230 (560) +0x39C7, 0x31E7, 0x31E7, 0x31E7, 0x3208, 0x3208, 0x31E7, 0x31E7, 0x29E7, 0x31C7, 0x39C7, 0x31A6, 0x4A49, 0xBDF7, 0x8C51, 0xBDF7, // 0x0240 (576) +0xFFFF, 0xB5B6, 0x8430, 0x7BEF, 0x0000, 0x0000, 0x0000, 0x2000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3800, 0x2000, // 0x0250 (592) +0x0000, 0x3000, 0x3800, 0x3000, 0x3800, 0x3800, 0x3800, 0x3000, 0x3800, 0x0800, 0x0000, 0x0000, 0x0000, 0xA514, 0x8430, 0xD6BA, // 0x0260 (608) +0xFFFF, 0xDEDB, 0x7BCF, 0x8430, 0x0020, 0x0000, 0x0000, 0x8000, 0xC800, 0xC000, 0xC800, 0xC820, 0xC820, 0xC820, 0xD020, 0x9800, // 0x0270 (624) +0x0000, 0xB820, 0xD020, 0xD020, 0xD020, 0xD020, 0xD020, 0xC820, 0xD020, 0x4800, 0x0000, 0x0000, 0x2144, 0xAD75, 0x8410, 0xF7BE, // 0x0280 (640) +0xFFFF, 0xFFFF, 0x7BEF, 0x8C71, 0x2945, 0x0000, 0x0000, 0x6800, 0xA800, 0xA800, 0xA800, 0xA800, 0xA800, 0xA800, 0xB000, 0x8000, // 0x0290 (656) +0x0000, 0x9800, 0xB000, 0xB000, 0xB000, 0xB000, 0xB000, 0xB000, 0xB000, 0x4000, 0x0000, 0x0000, 0x632C, 0xA534, 0x94B2, 0xFFFF, // 0x02A0 (672) +0xFFDF, 0xFFFF, 0xAD75, 0x73AE, 0x632C, 0x0000, 0x0000, 0x6920, 0xA9E0, 0xA1C0, 0xA9E0, 0xA9E0, 0xA9E0, 0xA9E0, 0xA9E0, 0x7960, // 0x02B0 (688) +0x0000, 0x99C0, 0xB200, 0xA9E0, 0xB200, 0xB200, 0xB1E0, 0xA9E0, 0xB200, 0x40C0, 0x0000, 0x1082, 0xAD75, 0x8410, 0xD69A, 0xFFFF, // 0x02C0 (704) +0xFFFF, 0xFFFF, 0xF79E, 0x630C, 0x8C51, 0x2965, 0x0000, 0x7400, 0xB620, 0xAE00, 0xB620, 0xB640, 0xB640, 0xB620, 0xB660, 0x84A0, // 0x02D0 (720) +0x0000, 0xA5A0, 0xBE60, 0xB660, 0xBE60, 0xBE60, 0xB660, 0xB640, 0xBE80, 0x4260, 0x0000, 0x6B6D, 0xAD75, 0x8430, 0xFFFF, 0xFFFF, // 0x02E0 (736) +0xFFFF, 0xFFDF, 0xFFFF, 0xB5B6, 0x632C, 0x8410, 0x0021, 0x7360, 0xBD40, 0xB520, 0xBD40, 0xBD60, 0xBD60, 0xBD40, 0xC580, 0x8C00, // 0x02F0 (752) +0x0000, 0xACE0, 0xC580, 0xC580, 0xC580, 0xC580, 0xC580, 0xBD60, 0xC5A0, 0x39C0, 0x2126, 0xBDF7, 0x73AE, 0xD6BA, 0xFFFF, 0xFFFF, // 0x0300 (768) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x7BEF, 0x7BEF, 0x630D, 0x4AE1, 0x6D21, 0x6D01, 0x6D21, 0x6D41, 0x6D41, 0x6D41, 0x6D61, 0x53E1, // 0x0310 (784) +0x0000, 0x64C1, 0x7562, 0x6D62, 0x6D62, 0x6D62, 0x6D62, 0x6D42, 0x6D41, 0x4263, 0xA515, 0x8C51, 0xA534, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0320 (800) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79E, 0x6B4D, 0x8410, 0x636E, 0x04A6, 0x05E5, 0x05C5, 0x0585, 0x0585, 0x0586, 0x05A6, 0x0424, // 0x0330 (816) +0x0000, 0x0505, 0x05C6, 0x05A6, 0x05A6, 0x05C7, 0x0606, 0x0606, 0x1CE9, 0xA535, 0x9492, 0x8C71, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0340 (832) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7D, 0x6B4D, 0x83EF, 0x9411, 0x3A47, 0x0403, 0x0584, 0x05A4, 0x0585, 0x0585, 0x0404, // 0x0350 (848) +0x0000, 0x04E5, 0x05A5, 0x05A5, 0x05C5, 0x0584, 0x1405, 0x634B, 0xBD76, 0x8C51, 0x8C51, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0360 (864) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0x8410, 0x6B6D, 0x9CB3, 0x7C6F, 0x3CA9, 0x0BE4, 0x0443, 0x0504, 0x03C2, // 0x0370 (880) +0x0000, 0x0483, 0x0504, 0x0444, 0x1426, 0x552D, 0xA554, 0xB576, 0x73CE, 0x9CF3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0380 (896) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xB5B6, 0x6B4D, 0x7BAF, 0x9432, 0x8BD1, 0x6BCE, 0x4C6B, 0x3C09, // 0x0390 (912) +0x3186, 0x3C8A, 0x5C8C, 0x8430, 0xA493, 0xACD4, 0x8410, 0x7BEF, 0xCE79, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03A0 (928) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0xAD75, 0x7BEF, 0x73AE, 0x83F0, 0x8C11, 0x9431, // 0x03B0 (944) +0x9492, 0x9452, 0x9432, 0x8430, 0x7BEF, 0x8450, 0xBDF7, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03C0 (960) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEFB, 0xBDD7, 0xA534, 0x94D3, // 0x03D0 (976) +0x94B2, 0x9CF3, 0xA554, 0xC618, 0xE73C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03E0 (992) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03F0 (1008) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) +}; diff --git a/libraries/UTFT/examples/chipKit/UTFT_Bitmap/info.c b/libraries/UTFT/examples/chipKit/UTFT_Bitmap/info.c new file mode 100644 index 0000000..312bee1 --- /dev/null +++ b/libraries/UTFT/examples/chipKit/UTFT_Bitmap/info.c @@ -0,0 +1,71 @@ +// Generated by : ImageConverter 565 v1.0 +// Generated from: info.png +// Time generated: 11.10.2010 22:27:55 +// Size : 2 048 Bytes + +const unsigned short info[0x400] ={ +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0010 (16) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0020 (32) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF9F, 0xC69D, 0x95BB, 0x7D1A, 0x6CB9, // 0x0030 (48) +0x6499, 0x74F9, 0x8D7A, 0xB63C, 0xE73E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0040 (64) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xAE1C, 0x4C18, 0x2B56, 0x3397, 0x4C38, 0x64B9, 0x751A, // 0x0050 (80) +0x7D3A, 0x6CD9, 0x5458, 0x3BD7, 0x2B56, 0x3BB7, 0x855A, 0xE77E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0060 (96) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xA5FB, 0x2B56, 0x2B77, 0x751A, 0xB67C, 0xD73E, 0xE75E, 0xE77E, 0xE77E, // 0x0070 (112) +0xE77E, 0xE77E, 0xE75E, 0xDF3E, 0xC6DD, 0x8D9B, 0x43D7, 0x1B16, 0x74D9, 0xF7BF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0080 (128) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF9F, 0x4C18, 0x1AF6, 0x855A, 0xCEFE, 0xD71E, 0xCEFD, 0xC6DD, 0xC6BD, 0xC6BD, 0xBEBD, // 0x0090 (144) +0xC6BD, 0xBEBD, 0xC6BD, 0xC6DD, 0xC6DD, 0xD71E, 0xD71E, 0xA61C, 0x33B7, 0x2316, 0xBE7C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00A0 (160) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDF3E, 0x2336, 0x3BD7, 0xBE9D, 0xC6DD, 0xBE9D, 0xBE9D, 0xBE9D, 0xBEBD, 0xBE9D, 0xCEFD, 0xEF9F, // 0x00B0 (176) +0xEF9F, 0xD73E, 0xBE9D, 0xBEBD, 0xBE9D, 0xBE9D, 0xB69D, 0xC6BD, 0xCEDD, 0x6CFA, 0x0295, 0x9DBB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00C0 (192) +0xFFFF, 0xFFFF, 0xFFFF, 0xE75E, 0x1AF6, 0x4C58, 0xBEBD, 0xB67D, 0xAE5C, 0xB67D, 0xB67D, 0xB69D, 0xB67D, 0xBEBD, 0xF7DF, 0xFFFF, // 0x00D0 (208) +0xFFFF, 0xFFFF, 0xCF1E, 0xB67D, 0xB67D, 0xB67D, 0xB67D, 0xAE5C, 0xAE5C, 0xC6BD, 0x857B, 0x0295, 0xA5DB, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00E0 (224) +0xFFFF, 0xFFFF, 0xFFDF, 0x3BB7, 0x33D8, 0xB67D, 0xA63C, 0xA63C, 0xAE5C, 0xAE5D, 0xAE5D, 0xAE7D, 0xA65D, 0xC6DD, 0xFFFF, 0xFFFF, // 0x00F0 (240) +0xFFDF, 0xFFFF, 0xDF5E, 0xA65D, 0xAE7D, 0xAE5D, 0xAE5D, 0xAE5C, 0xA63C, 0xA61C, 0xB67D, 0x753A, 0x0295, 0xCEBC, 0xFFFF, 0xFFFF, // 0x0100 (256) +0xF7DF, 0xFFFF, 0x957A, 0x12F6, 0x9E1C, 0x9E1C, 0x9E1C, 0x9E1C, 0xA63C, 0xA63C, 0xA63D, 0xA63D, 0xA65D, 0x9DFC, 0xDF3E, 0xFFFF, // 0x0110 (272) +0xFFFF, 0xFFDF, 0xA61C, 0xA65D, 0xA65D, 0xA63D, 0xA63C, 0xA63C, 0x9E1C, 0x9E1C, 0x9DFC, 0xAE3C, 0x3C18, 0x3396, 0xFFDF, 0xFFFF, // 0x0120 (288) +0xFFFF, 0xF79F, 0x2336, 0x64DA, 0x9DFC, 0x95DC, 0x95FC, 0x95FC, 0x9E1C, 0x9E1C, 0x9E3D, 0x9E3D, 0x9E3D, 0x9E3D, 0x7D3B, 0xA63C, // 0x0130 (304) +0xB6BD, 0x8DBB, 0x8DFC, 0xA65D, 0x9E3D, 0x9E3D, 0x9E1C, 0x9E1C, 0x95FC, 0x95FC, 0x95DC, 0x95DC, 0x8DBB, 0x0AF6, 0xA5DA, 0xFFFF, // 0x0140 (320) +0xFFFF, 0xA5FB, 0x1337, 0x8DBB, 0x8DBB, 0x8DBC, 0x8DDC, 0x95FC, 0x95FC, 0x961C, 0x961D, 0x963D, 0x9E3D, 0x963D, 0xA67D, 0xB6BD, // 0x0150 (336) +0xB6BD, 0xAE7D, 0x9E3D, 0x9E3D, 0x961D, 0x961D, 0x961C, 0x95FC, 0x95FC, 0x8DDC, 0x8DDC, 0x859B, 0x95DC, 0x3C18, 0x4BD7, 0xFFFF, // 0x0160 (352) +0xFFFF, 0x6499, 0x33F8, 0x8DBB, 0x859B, 0x85BC, 0x85BC, 0x8DDC, 0x8DFC, 0x8DFD, 0x8E1D, 0x961D, 0x961D, 0x9E3D, 0xF7BF, 0xFFFF, // 0x0170 (368) +0xFFFF, 0xFFFF, 0xA67D, 0x8E1D, 0x961D, 0x8E1D, 0x8DFD, 0x8DFC, 0x8DDC, 0x85BC, 0x85BC, 0x859B, 0x859B, 0x5CDA, 0x2336, 0xE71C, // 0x0180 (384) +0xFFFF, 0x43F8, 0x4C79, 0x859B, 0x7D7B, 0x7D9C, 0x85BC, 0x85DC, 0x85DC, 0x8DFD, 0x8DFD, 0x8E1D, 0x8E1D, 0xA67E, 0xFFFF, 0xFFFF, // 0x0190 (400) +0xFFFF, 0xFFFF, 0xBEDE, 0x85FD, 0x8E1D, 0x8DFD, 0x8DFD, 0x85DC, 0x85DC, 0x85BC, 0x7D9C, 0x7D7B, 0x7D7B, 0x753B, 0x1B36, 0xBE5A, // 0x01A0 (416) +0xFFBE, 0x3BF8, 0x3419, 0x6D1B, 0x757B, 0x7D9C, 0x7D9C, 0x7DBC, 0x7DDD, 0x85FD, 0x85FD, 0x861D, 0x861D, 0x9E7E, 0xFFFF, 0xFFFF, // 0x01B0 (432) +0xFFFF, 0xFFFF, 0xB6DE, 0x85FD, 0x8E1D, 0x85FD, 0x85FD, 0x7DDD, 0x7DBC, 0x7D9C, 0x7D9C, 0x757B, 0x6D3B, 0x4C9A, 0x1337, 0xADD9, // 0x01C0 (448) +0xFFBE, 0x4418, 0x23B9, 0x3439, 0x4CBA, 0x653B, 0x759C, 0x7DBD, 0x7DDD, 0x7DFD, 0x861D, 0x861E, 0x861E, 0x9E7E, 0xFFFF, 0xFFFF, // 0x01D0 (464) +0xFFFF, 0xFFFF, 0xB6DE, 0x7E1E, 0x861E, 0x85FD, 0x7DFD, 0x7DDD, 0x7DBD, 0x759C, 0x653B, 0x4CDB, 0x3439, 0x2BF9, 0x1337, 0xA5B9, // 0x01E0 (480) +0xFF9E, 0x4C39, 0x2BF9, 0x345A, 0x3C7A, 0x3C9B, 0x4CFC, 0x5D5C, 0x659D, 0x75DD, 0x7DFE, 0x861E, 0x7E3E, 0x969F, 0xFFFF, 0xFFFF, // 0x01F0 (496) +0xFFFF, 0xFFFF, 0xB6FF, 0x7E1E, 0x863E, 0x7DFE, 0x75DD, 0x6D9D, 0x5D5C, 0x4CFC, 0x3C9B, 0x347A, 0x345A, 0x343A, 0x1B78, 0xA5B9, // 0x0200 (512) +0xF79E, 0x4418, 0x2C3A, 0x3C7A, 0x449B, 0x44DB, 0x4CFC, 0x4D3C, 0x555D, 0x5D7D, 0x65BE, 0x6DFE, 0x6DFF, 0x867F, 0xFFFF, 0xFFFF, // 0x0210 (528) +0xFFFF, 0xFFFF, 0xA6DF, 0x65FF, 0x6DFE, 0x65BE, 0x5D9E, 0x555D, 0x4D3C, 0x4CFC, 0x44DB, 0x44BB, 0x3C7A, 0x345A, 0x1B78, 0xA599, // 0x0220 (544) +0xFFDE, 0x43D8, 0x345A, 0x3C9A, 0x44DB, 0x4CFC, 0x4D3C, 0x555D, 0x5D9D, 0x5DBE, 0x65DE, 0x6DFF, 0x661F, 0x867F, 0xFFFF, 0xFFFF, // 0x0230 (560) +0xFFFF, 0xFFFF, 0xA6DF, 0x65FF, 0x6DFF, 0x65DE, 0x5DBE, 0x5D9D, 0x555D, 0x4D3C, 0x4CFC, 0x44DB, 0x3C7A, 0x3C9B, 0x1B57, 0xADB9, // 0x0240 (576) +0xFFFF, 0x4BD7, 0x2C1A, 0x44DB, 0x44DB, 0x4D1C, 0x555D, 0x5D7D, 0x5DBE, 0x65DE, 0x6E1F, 0x6E3F, 0x765F, 0x96BF, 0xFFFF, 0xFFFF, // 0x0250 (592) +0xFFFF, 0xFFFF, 0xAEFF, 0x6E3F, 0x763F, 0x6E1F, 0x65DE, 0x5DBE, 0x5D7D, 0x555D, 0x4D1C, 0x44DC, 0x3C9B, 0x44DC, 0x1AD5, 0xC639, // 0x0260 (608) +0xFFFF, 0x84D8, 0x1317, 0x5D7D, 0x44DB, 0x553C, 0x557D, 0x5D9E, 0x65DE, 0x65FF, 0x6E3F, 0x7E5F, 0x7E7F, 0x9EDF, 0xFFFF, 0xFFFF, // 0x0270 (624) +0xFFFF, 0xFFFF, 0xB73F, 0x7E7F, 0x7E5F, 0x6E3F, 0x65FF, 0x65DE, 0x5D9E, 0x557D, 0x553C, 0x44DC, 0x4D1C, 0x345B, 0x22B4, 0xE71B, // 0x0280 (640) +0xFFFF, 0xD6BC, 0x0234, 0x4CFC, 0x5D7D, 0x4D3C, 0x5D9D, 0x5DBE, 0x65FF, 0x6E3F, 0x765F, 0x867F, 0x8EBF, 0xA6DF, 0xFFFF, 0xFFFF, // 0x0290 (656) +0xFFFF, 0xFFFF, 0xB71F, 0x8EBF, 0x869F, 0x765F, 0x6E3F, 0x65FF, 0x5DBE, 0x5D7D, 0x553D, 0x4D1C, 0x65BE, 0x0AB7, 0x6C15, 0xFFBE, // 0x02A0 (672) +0xFFFF, 0xFFFF, 0x53B6, 0x0296, 0x75FE, 0x5D9D, 0x557D, 0x65DE, 0x6E1F, 0x763F, 0x7E7F, 0x8EBF, 0x9EFF, 0x96BE, 0xAE3C, 0xE77E, // 0x02B0 (688) +0xEF9E, 0xC69D, 0x967E, 0x9EFF, 0x8EBF, 0x7E7F, 0x763F, 0x6E1F, 0x65DE, 0x5D9E, 0x555D, 0x761E, 0x341A, 0x1294, 0xBE18, 0xFFFF, // 0x02C0 (704) +0xFFFF, 0xFFFF, 0xCE9B, 0x0A13, 0x2378, 0x7E5F, 0x6E1E, 0x5DBE, 0x6E1F, 0x7E5F, 0x869F, 0x96DF, 0x9EFF, 0xAF5F, 0x9E9E, 0x8DFC, // 0x02D0 (720) +0x8E1C, 0x967D, 0xAF3F, 0xA6FF, 0x96DF, 0x869F, 0x7E5F, 0x6E1F, 0x5DBE, 0x65DE, 0x7E5F, 0x4CBB, 0x0AB5, 0x7454, 0xEF5C, 0xFFFF, // 0x02E0 (736) +0xFFFF, 0xFFFF, 0xFFFF, 0x8D17, 0x01D3, 0x23B9, 0x7E3E, 0x8E9F, 0x763F, 0x765F, 0x8E9F, 0x9EDF, 0xA71F, 0xB75F, 0xC7BF, 0xCFDF, // 0x02F0 (752) +0xCFDF, 0xC7BF, 0xB75F, 0xA71F, 0x9EDF, 0x8E9F, 0x765F, 0x6E1F, 0x867F, 0x8E7F, 0x4CBB, 0x1317, 0x4BB4, 0xD679, 0xFFFF, 0xFFFF, // 0x0300 (768) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFBD, 0x7476, 0x0214, 0x1B78, 0x659D, 0x9EDF, 0x9EFF, 0x96DF, 0x9EFF, 0xAF1F, 0xB75F, 0xC79F, 0xD7DF, // 0x0310 (784) +0xD7DF, 0xC79F, 0xB75F, 0xAF1F, 0x9EDF, 0x96DF, 0x96DF, 0x9EFF, 0x7E1E, 0x3C5A, 0x1B77, 0x43B5, 0xBDD6, 0xF7BE, 0xFFFF, 0xFFFF, // 0x0320 (800) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF77D, 0x7CB6, 0x12B4, 0x1337, 0x449B, 0x7DFD, 0xA6FF, 0xB75F, 0xBF7F, 0xC79F, 0xCFBF, 0xD7FF, // 0x0330 (816) +0xD7FF, 0xCFBF, 0xC79F, 0xBF7F, 0xB77F, 0xAF1F, 0x8E5E, 0x551B, 0x3419, 0x2BD7, 0x5415, 0xB5B6, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0340 (832) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79D, 0xA577, 0x3B75, 0x1B36, 0x2BD9, 0x4CBB, 0x759D, 0x965E, 0xAEDF, 0xBF3F, 0xC77F, // 0x0350 (848) +0xC77F, 0xBF3F, 0xB6FF, 0x9E7F, 0x7DDD, 0x5D1C, 0x447A, 0x3C59, 0x4437, 0x7474, 0xC617, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0360 (864) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDE, 0xD699, 0x84D5, 0x43D5, 0x33B7, 0x3418, 0x4C7A, 0x5CFC, 0x753D, 0x857E, // 0x0370 (880) +0x859E, 0x755D, 0x653C, 0x5CFB, 0x4CDA, 0x4CB9, 0x5497, 0x6C95, 0xA555, 0xDEDA, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0380 (896) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79D, 0xCE79, 0x9D56, 0x7495, 0x5C56, 0x4C77, 0x4C97, 0x4CB8, // 0x0390 (912) +0x54D8, 0x5CD8, 0x5CF8, 0x64D7, 0x74D6, 0x8CF5, 0xAD96, 0xD699, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03A0 (928) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFBE, 0xEF1B, 0xD679, 0xBDF7, 0xAD96, 0xA576, // 0x03B0 (944) +0xA576, 0xAD76, 0xB5B6, 0xC5F7, 0xD679, 0xEF3C, 0xFFDE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03C0 (960) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFBE, // 0x03D0 (976) +0xF7BE, 0xF7BE, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03E0 (992) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03F0 (1008) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) +}; diff --git a/libraries/UTFT/examples/chipKit/UTFT_Bitmap/tux.c b/libraries/UTFT/examples/chipKit/UTFT_Bitmap/tux.c new file mode 100644 index 0000000..69a04a1 --- /dev/null +++ b/libraries/UTFT/examples/chipKit/UTFT_Bitmap/tux.c @@ -0,0 +1,71 @@ +// Generated by : ImageConverter 565 v1.0 +// Generated from: tux.png +// Time generated: 11.10.2010 22:51:32 +// Size : 2 048 Bytes + +const unsigned short tux[0x400] ={ +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE73C, 0x9CD3, 0x9CF3, 0xA514, // 0x0010 (16) +0x9CF3, 0x8C51, 0xAD75, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0020 (32) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7D, 0x5AEB, 0x7BEF, 0x9CD3, 0x94B2, // 0x0030 (48) +0x94B2, 0x94B2, 0x4228, 0x7BEF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0040 (64) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x9CF3, 0x18E3, 0x630C, 0x4A49, 0x4A69, // 0x0050 (80) +0x4A69, 0x528A, 0x4A49, 0x0000, 0xC638, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0060 (96) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x6B6D, 0x0000, 0x0020, 0x10A2, 0x1082, // 0x0070 (112) +0x0841, 0x0841, 0x0841, 0x0000, 0x630C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0080 (128) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x528A, 0x4228, 0x8410, 0x0000, 0x0861, // 0x0090 (144) +0xAD55, 0xBDD7, 0x10A2, 0x0000, 0x2945, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00A0 (160) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x5ACB, 0x8C71, 0xE75D, 0x2126, 0x528B, // 0x00B0 (176) +0xE75D, 0xDEDB, 0x7BCF, 0x0000, 0x18E3, 0xE73C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00C0 (192) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x6B6D, 0x4A4A, 0x6B2A, 0x8BE7, 0xA48A, // 0x00D0 (208) +0x6B09, 0x4A8A, 0x8431, 0x0000, 0x2104, 0xE73C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00E0 (224) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x6B6E, 0x5204, 0xDE6A, 0xFFF7, 0xFFF8, // 0x00F0 (240) +0xD5AC, 0xBCAA, 0x5A66, 0x0000, 0x1082, 0xDEFB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0100 (256) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x8C10, 0xC540, 0xFFED, 0xFF2C, 0xFEEC, // 0x0110 (272) +0xFECC, 0xFE66, 0x8260, 0x0000, 0x0000, 0xB596, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0120 (288) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x94B3, 0x9C25, 0xFF20, 0xFE40, 0xFDA0, // 0x0130 (304) +0xFCC0, 0xF524, 0x836A, 0x0000, 0x0000, 0x630C, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0140 (320) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x630C, 0x94B4, 0xFF13, 0xFD83, 0xF523, // 0x0150 (336) +0xE5CF, 0xF79E, 0xE71D, 0x0861, 0x0000, 0x0861, 0xDEDB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0160 (352) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xCE59, 0x0841, 0xD69A, 0xFFFF, 0xFF7D, 0xF77D, // 0x0170 (368) +0xFFFF, 0xFFFF, 0xFFFF, 0x73AE, 0x0000, 0x0000, 0x4A69, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0180 (384) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79E, 0x10A2, 0x8410, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, // 0x0190 (400) +0xFFFF, 0xFFDF, 0xFFFF, 0xCE59, 0x0000, 0x0000, 0x0000, 0x9492, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01A0 (416) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x52AA, 0x0020, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01B0 (432) +0xFFDF, 0xFFDF, 0xF7BE, 0xFFDF, 0x3186, 0x0000, 0x0020, 0x0841, 0xCE79, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01C0 (448) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xC638, 0x0000, 0x52AA, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFDF, // 0x01D0 (464) +0xFFDF, 0xF7BE, 0xF79E, 0xFFFF, 0x9CF3, 0x0000, 0x0841, 0x0000, 0x39E7, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01E0 (480) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x5ACB, 0x0000, 0xBDF7, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFDF, 0xFFDF, // 0x01F0 (496) +0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0x3186, 0x0000, 0x0861, 0x0000, 0xAD55, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0200 (512) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE73C, 0x0861, 0x4A49, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, // 0x0210 (528) +0xF7BE, 0xF79E, 0xEF7D, 0xEF5D, 0xFFDF, 0x8410, 0x0000, 0x1082, 0x0000, 0x39E7, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0220 (544) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x94B2, 0x0000, 0xB596, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, // 0x0230 (560) +0xF79E, 0xEF7D, 0xEF7D, 0xE73C, 0xF79E, 0xAD55, 0x0861, 0x10A2, 0x0861, 0x0841, 0xCE59, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0240 (576) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79E, 0x3185, 0x10A2, 0xE71C, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF79E, // 0x0250 (592) +0xEF7D, 0xEF7D, 0xEF5D, 0xE73C, 0xEF5D, 0xBDF7, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x8C71, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0260 (608) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x94B2, 0x0000, 0x39E7, 0xF7BE, 0xFFFF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF79E, 0xEF7D, // 0x0270 (624) +0xEF7D, 0xEF5D, 0xE73C, 0xE71C, 0xE71C, 0xC618, 0x18E3, 0x10A2, 0x10A2, 0x0020, 0x6B4D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0280 (640) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x8C51, 0x38E0, 0x4A27, 0xFFFF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF79E, 0xEF7D, 0xEF7D, // 0x0290 (656) +0xEF5D, 0xE73C, 0xE71C, 0xDEFB, 0xDF1D, 0xBDF8, 0x39C7, 0x5ACB, 0x528A, 0x10A3, 0x738F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02A0 (672) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDD6C, 0xFE2B, 0xBC45, 0xA513, 0xFFFF, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF5D, // 0x02B0 (688) +0xE73C, 0xE71C, 0xDEFB, 0xD6DC, 0xDD8E, 0xB3E4, 0x2124, 0x2965, 0x2945, 0x20C1, 0xB511, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02C0 (704) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF77C, 0xE5CF, 0xF60B, 0xFF9B, 0xFF54, 0x8B02, 0x7BF0, 0xFFDF, 0xF79E, 0xEF5D, 0xEF5D, 0xE73C, // 0x02D0 (720) +0xE71C, 0xDEFB, 0xDEDB, 0xCE7A, 0xED89, 0xDDAD, 0x0842, 0x0000, 0x0000, 0xAC69, 0xDD6B, 0xEFBF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02E0 (736) +0xFFFF, 0xFFFF, 0xFFBE, 0xE5CB, 0xEDC9, 0xFE4B, 0xFF14, 0xFEF3, 0xFF35, 0xFE8D, 0x51C1, 0x634E, 0xE73C, 0xEF5D, 0xE73C, 0xE71C, // 0x02F0 (752) +0xDEFB, 0xDEDB, 0xD6DB, 0xCE59, 0xE58B, 0xFF98, 0xBD4F, 0x8B88, 0xCD90, 0xFFB7, 0xCCE8, 0xE73D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0300 (768) +0xFFFF, 0xFFFF, 0xEF3B, 0xF583, 0xFF30, 0xFF11, 0xFECF, 0xFEEF, 0xFECF, 0xFF30, 0xDD46, 0x2903, 0x6B8E, 0xEF7D, 0xE71C, 0xDEFB, // 0x0310 (784) +0xDEDB, 0xD6BA, 0xD69A, 0xCE59, 0xE5AA, 0xFF11, 0xFF53, 0xFF73, 0xFF33, 0xFF12, 0xFE6C, 0xDDAD, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0320 (800) +0xFFFF, 0xFFFF, 0xF79E, 0xEDC5, 0xFECB, 0xFECC, 0xFECC, 0xFEEC, 0xFECB, 0xFECC, 0xFEEA, 0x9BE5, 0x8432, 0xE73C, 0xDEDB, 0xDEDB, // 0x0330 (816) +0xD6BA, 0xD69A, 0xDEDB, 0xA4F3, 0xD547, 0xFF2E, 0xFECD, 0xFECE, 0xFEEE, 0xFEEE, 0xFF10, 0xFEAB, 0xE5A8, 0xEF7D, 0xFFFF, 0xFFFF, // 0x0340 (832) +0xFFFF, 0xFFFF, 0xF79E, 0xF603, 0xFEA2, 0xFEC7, 0xFEC7, 0xFEA4, 0xFE81, 0xFE61, 0xFEA4, 0xFE43, 0xDE33, 0xE75E, 0xE71C, 0xDEFB, // 0x0350 (848) +0xDEDB, 0xCE58, 0x8C72, 0x5247, 0xEDE4, 0xFF0A, 0xFECA, 0xFEC9, 0xFE84, 0xFE83, 0xFEE7, 0xFEA3, 0xB443, 0xD69B, 0xFFFF, 0xFFFF, // 0x0360 (864) +0xFFFF, 0xFFFF, 0xF75B, 0xFE60, 0xFF00, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEE0, 0xE5C1, 0x9492, 0xA514, 0x9CD3, // 0x0370 (880) +0x8410, 0x630B, 0x4229, 0x6AE8, 0xFE80, 0xFEC1, 0xFEC1, 0xFEA0, 0xFEA0, 0xFEE0, 0xDD80, 0x9BE8, 0xB597, 0xFFDF, 0xFFFF, 0xFFFF, // 0x0380 (896) +0xFFFF, 0xFFFF, 0xF79E, 0xD589, 0xE600, 0xFEA0, 0xFF00, 0xFF40, 0xFF40, 0xFF00, 0xFF00, 0xFF20, 0xFEC0, 0x5267, 0x4229, 0x4A48, // 0x0390 (912) +0x4A49, 0x5289, 0x424A, 0x7B46, 0xFF20, 0xFEE0, 0xFEE0, 0xFF20, 0xFEE0, 0xB4A5, 0x9C92, 0xDEFD, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03A0 (928) +0xFFFF, 0xFFFF, 0xFFFF, 0xE71D, 0xBDB6, 0xB530, 0xBD0B, 0xCD65, 0xEE60, 0xFF40, 0xFFA0, 0xFF80, 0xBD03, 0x8410, 0xA514, 0xA534, // 0x03B0 (944) +0xAD75, 0xB596, 0xA555, 0x9C8F, 0xF6C0, 0xFFA0, 0xFFA0, 0xF6E0, 0xA449, 0xB5B8, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03C0 (960) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7F, 0xD69C, 0xBD95, 0xBD4C, 0xCDC6, 0xB4E8, 0xAD35, 0xF7BF, 0xFFFF, 0xFFFF, // 0x03D0 (976) +0xFFFF, 0xFFFF, 0xFFFF, 0xF7BF, 0xCDD0, 0xCDC6, 0xCDA7, 0xA48D, 0xCE7B, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03E0 (992) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDF1F, 0xB59A, 0xBDDA, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, // 0x03F0 (1008) +0xFFFF, 0xFFDF, 0xFFDF, 0xFFFF, 0xEF7F, 0xB59A, 0xAD59, 0xDF1D, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) +}; diff --git a/libraries/UTFT/examples/chipKit/UTFT_Bitmap_128x128/UTFT_Bitmap_128x128.pde b/libraries/UTFT/examples/chipKit/UTFT_Bitmap_128x128/UTFT_Bitmap_128x128.pde new file mode 100644 index 0000000..85f0573 --- /dev/null +++ b/libraries/UTFT/examples/chipKit/UTFT_Bitmap_128x128/UTFT_Bitmap_128x128.pde @@ -0,0 +1,49 @@ +// UTFT_Bitmap_128x128 (C)2012 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of the drawBitmap()-function. +// +// This demo was made to work on the 128x128 modules. +// Any other size displays may cause strange behaviour. +// +// This program requires the UTFT library. +// + +#include + +UTFT myGLCD(LPH9135,6,5,2,3,4); // Remember to change the model parameter to suit your display module! + +extern unsigned short icon1[0x400]; +extern unsigned short icon2[0x400]; +extern unsigned short tux[0x1000]; + +void setup() +{ + myGLCD.InitLCD(PORTRAIT); +} + +void loop() +{ +// Draw a 4 by 4 grid of a 32x32 icon. + myGLCD.fillScr(255, 255, 255); + for (int x=0; x<4; x++) + for (int y=0; y<4; y++) + myGLCD.drawBitmap (x*32, y*32, 32, 32, icon1); + + delay(5000); + +// Draw a 64x64 icon in double size. + myGLCD.fillScr(255, 255, 255); + myGLCD.drawBitmap (0, 0, 64, 64, tux, 2); + + delay(5000); + +// Draw a 2 by 2 grid of a 32x32 icon in double size. + myGLCD.fillScr(255, 255, 255); + for (int x=0; x<2; x++) + for (int y=0; y<2; y++) + myGLCD.drawBitmap (x*64, y*64, 32, 32, icon2, 2); + + delay(5000); +} + diff --git a/libraries/UTFT/examples/chipKit/UTFT_Bitmap_128x128/icon1.c b/libraries/UTFT/examples/chipKit/UTFT_Bitmap_128x128/icon1.c new file mode 100644 index 0000000..b9c2c97 --- /dev/null +++ b/libraries/UTFT/examples/chipKit/UTFT_Bitmap_128x128/icon1.c @@ -0,0 +1,72 @@ +// Generated by : ImageConverter 565 v1.0 +// Generated from: exit.png +// Time generated: 14.10.2010 21:53:03 +// Dimensions : 32x32 pixels +// Size : 2 048 Bytes + +const unsigned short icon1[0x400] ={ +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF1C, 0xE618, 0xE638, 0xE638, 0xE638, 0xE659, 0xE659, 0xE659, 0xE659, 0xE659, 0xE679, 0xE679, // 0x0010 (16) +0xE679, 0xE679, 0xE679, 0xE679, 0xEE79, 0xEE9A, 0xEE9A, 0xEE9A, 0xEE9A, 0xEE9A, 0xE638, 0xEEBA, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0020 (32) +0xFFFF, 0xFFFF, 0xFFFF, 0xD555, 0xCCD3, 0xDDB6, 0xDDD7, 0xDDF7, 0xDDF7, 0xDE18, 0xE618, 0xE638, 0xE638, 0xE659, 0xE679, 0xE679, // 0x0030 (48) +0xEE9A, 0xEE9A, 0xEEBA, 0xEEBA, 0xEEBA, 0xEEDB, 0xEEDB, 0xEEFB, 0xEEFB, 0xEEFB, 0xEEFB, 0xE659, 0xD575, 0xF77D, 0xFFFF, 0xFFFF, // 0x0040 (64) +0xFFDF, 0xFFFF, 0xD534, 0xC471, 0xD575, 0xCCF3, 0xCCD3, 0xCCD3, 0xCCF3, 0xCCF3, 0xD4F3, 0xD514, 0xD514, 0xD514, 0xD534, 0xDD55, // 0x0050 (80) +0xDD55, 0xDD55, 0xDD55, 0xDD75, 0xDD75, 0xDD75, 0xDD96, 0xDD96, 0xDD96, 0xDDB6, 0xDDD7, 0xEE79, 0xEEBA, 0xD534, 0xFFBE, 0xFFFF, // 0x0060 (96) +0xFFFF, 0xEEDB, 0xB38E, 0xC4B2, 0xBC30, 0xC451, 0xC471, 0xC471, 0xCC71, 0xCC92, 0xCC92, 0xCC92, 0xCCB2, 0xD4B2, 0xD4B2, 0xCC71, // 0x0070 (112) +0xCC71, 0xD4D3, 0xD4F3, 0xDCF3, 0xDCF3, 0xDD14, 0xDD14, 0xDD14, 0xDD34, 0xDD34, 0xDD34, 0xDD14, 0xE5D7, 0xDD96, 0xDDF7, 0xFFFF, // 0x0080 (128) +0xFFFF, 0xC4F3, 0xAB2C, 0xC430, 0xC410, 0xC430, 0xC430, 0xC430, 0xCC51, 0xCC51, 0xCC51, 0xCC71, 0xCC71, 0xD471, 0xCC71, 0xD5F7, // 0x0090 (144) +0xD5F7, 0xCC92, 0xDCB2, 0xDCD3, 0xDCD3, 0xDCD3, 0xDCD3, 0xDCF3, 0xDCF3, 0xDD14, 0xDD14, 0xDD34, 0xDD14, 0xDD34, 0xC492, 0xFFFF, // 0x00A0 (160) +0xFFFF, 0xB3EF, 0x9A28, 0xC430, 0xBBCF, 0xC3EF, 0xC3EF, 0xC3EF, 0xC410, 0xCC10, 0xCC10, 0xCC30, 0xCC51, 0xCBEF, 0xE638, 0xFFFF, // 0x00B0 (176) +0xFFFF, 0xE659, 0xD430, 0xDC92, 0xDC92, 0xDC92, 0xDCB2, 0xDCB2, 0xDCB2, 0xDCD3, 0xDCD3, 0xDCD3, 0xE514, 0xD410, 0xAB0C, 0xF7FF, // 0x00C0 (192) +0xFFFF, 0xABCF, 0x9165, 0xC3EF, 0xBB8E, 0xBBAE, 0xC3AE, 0xC3CF, 0xC3CF, 0xCBCF, 0xCBEF, 0xCC10, 0xCC10, 0xCBAE, 0xEE9A, 0xFFFF, // 0x00D0 (208) +0xFFFF, 0xF6DB, 0xD410, 0xDC71, 0xDC71, 0xDC71, 0xDC71, 0xDC71, 0xDC71, 0xE492, 0xE492, 0xE492, 0xE4F3, 0xCB2C, 0xA249, 0xF7FF, // 0x00E0 (224) +0xFFFF, 0xABCF, 0x88C3, 0xC3AE, 0xBB4D, 0xBB6D, 0xC36D, 0xC38E, 0xC38E, 0xCBAE, 0xC36D, 0xC34D, 0xCBCF, 0xCB8E, 0xEE59, 0xFFFF, // 0x00F0 (240) +0xFFFF, 0xF6BA, 0xDBCF, 0xD3CF, 0xCBAE, 0xD3CF, 0xE430, 0xE430, 0xE451, 0xE451, 0xE451, 0xE451, 0xECD3, 0xCAAA, 0xA208, 0xF7FF, // 0x0100 (256) +0xFFFF, 0xABCF, 0x8061, 0xBB6D, 0xBB2C, 0xBB2C, 0xC34D, 0xC34D, 0xCB4D, 0xBB0C, 0xC492, 0xCD14, 0xC38E, 0xCB2C, 0xEE59, 0xFFFF, // 0x0110 (272) +0xFFFF, 0xF6BA, 0xD36D, 0xD575, 0xE6DB, 0xDDB6, 0xD3AE, 0xE3EF, 0xE410, 0xE410, 0xE430, 0xE410, 0xECB2, 0xC986, 0xA208, 0xF7FF, // 0x0120 (288) +0xFFFF, 0xB3EF, 0x8041, 0xBB0C, 0xBAEB, 0xBAEB, 0xC30C, 0xC30C, 0xBACB, 0xD5B6, 0xFFFF, 0xFFFF, 0xEE79, 0xCACB, 0xEE59, 0xFFFF, // 0x0130 (304) +0xFFFF, 0xF679, 0xDBEF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEEBA, 0xD3CF, 0xE3AE, 0xE3EF, 0xE3CF, 0xEC10, 0xEB6D, 0xC000, 0xA249, 0xF7FF, // 0x0140 (320) +0xFFFF, 0xB3EF, 0x8020, 0xBACB, 0xBAAA, 0xBAAA, 0xC2EB, 0xBA8A, 0xD596, 0xFFFF, 0xFFDF, 0xFFFF, 0xF73C, 0xCAAA, 0xEE38, 0xFFFF, // 0x0150 (336) +0xFFFF, 0xF679, 0xDB4D, 0xFF7D, 0xFFFF, 0xFFDF, 0xFFFF, 0xEEDB, 0xDB6D, 0xEB8E, 0xEBAE, 0xEB8E, 0xE0A2, 0xC800, 0xAA49, 0xF7FF, // 0x0160 (352) +0xFFFF, 0xB3EF, 0x8000, 0xB28A, 0xBA69, 0xBA8A, 0xBA49, 0xCC30, 0xFFFF, 0xFFDF, 0xFFFF, 0xFF5D, 0xDBCF, 0xCA69, 0xEE18, 0xFFFF, // 0x0170 (368) +0xFFFF, 0xF679, 0xDAAA, 0xE3AE, 0xF6BA, 0xFFFF, 0xFFDF, 0xFFFF, 0xE5D7, 0xE30C, 0xEB8E, 0xE0E3, 0xE000, 0xC800, 0xAA49, 0xF7FF, // 0x0180 (384) +0xFFFF, 0xB3EF, 0x8800, 0xB249, 0xBA49, 0xBA49, 0xBA49, 0xEF1C, 0xFFFF, 0xFFFF, 0xFF7D, 0xD32C, 0xCA69, 0xD249, 0xEDF7, 0xFFFF, // 0x0190 (400) +0xFFFF, 0xF659, 0xDAAA, 0xE2CB, 0xE2EB, 0xFEBA, 0xFFFF, 0xFFDF, 0xFFDF, 0xE3CF, 0xE103, 0xE000, 0xE081, 0xD000, 0xAA69, 0xF7FF, // 0x01A0 (416) +0xFFFF, 0xB3EF, 0x8800, 0xB228, 0xBA08, 0xB9A6, 0xCBAE, 0xFFFF, 0xFFDF, 0xFFFF, 0xDC30, 0xC9E7, 0xD28A, 0xCA08, 0xF618, 0xFFFF, // 0x01B0 (432) +0xFFFF, 0xF679, 0xDA49, 0xE2CB, 0xE28A, 0xEB6D, 0xFFBE, 0xFFDF, 0xFFFF, 0xEC92, 0xE000, 0xE0A2, 0xE0C2, 0xD040, 0xAA89, 0xF7FF, // 0x01C0 (448) +0xFFFF, 0xB3EF, 0x8800, 0xB1E7, 0xB9E7, 0xB165, 0xDD55, 0xFFFF, 0xFFFF, 0xF71C, 0xCA08, 0xCA08, 0xD228, 0xD1E7, 0xE430, 0xFFDF, // 0x01D0 (464) +0xFFDF, 0xEC51, 0xDA08, 0xE28A, 0xE28A, 0xE228, 0xF618, 0xFFFF, 0xFFFF, 0xF679, 0xE081, 0xE0C2, 0xE903, 0xD081, 0xAA89, 0xF7FF, // 0x01E0 (480) +0xFFFF, 0xBBEF, 0x9000, 0xB1A6, 0xB986, 0xB145, 0xEE38, 0xFFFF, 0xFFFF, 0xED96, 0xC165, 0xC9E7, 0xD1E7, 0xD1E7, 0xD1C7, 0xDACB, // 0x01F0 (496) +0xE2EB, 0xD9E7, 0xE228, 0xE228, 0xEA69, 0xE9E7, 0xF40F, 0xFFFF, 0xFFFF, 0xFF5D, 0xE144, 0xE8E2, 0xE943, 0xD8C1, 0xAA8A, 0xF7FF, // 0x0200 (512) +0xFFFF, 0xBC10, 0x9000, 0xB165, 0xB145, 0xB924, 0xEE9A, 0xFFFF, 0xFFFF, 0xE514, 0xC124, 0xC9A6, 0xD1A6, 0xD1A6, 0xD1C7, 0xD9A6, // 0x0210 (528) +0xD9A6, 0xE1E7, 0xE208, 0xE208, 0xE9A6, 0xE041, 0xEA8A, 0xFFFF, 0xFFFF, 0xFF9E, 0xE9C6, 0xE902, 0xE984, 0xD902, 0xAAAA, 0xF7FF, // 0x0220 (544) +0xFFFF, 0xC410, 0x9000, 0xB124, 0xB124, 0xB0C3, 0xEE18, 0xFFFF, 0xFFFF, 0xE575, 0xC0E3, 0xC986, 0xD165, 0xD165, 0xD986, 0xD9A6, // 0x0230 (560) +0xD9A6, 0xE1A6, 0xE165, 0xE082, 0xE020, 0xE000, 0xEB4C, 0xFFFF, 0xFFFF, 0xFF7D, 0xE9A5, 0xE943, 0xE9A5, 0xD923, 0xAAAA, 0xF7FF, // 0x0240 (576) +0xFFFF, 0xC410, 0x9800, 0xB0E3, 0xB0E3, 0xB061, 0xE4F3, 0xFFFF, 0xFFFF, 0xF6FB, 0xC104, 0xC924, 0xD145, 0xD145, 0xD945, 0xD945, // 0x0250 (592) +0xD8E3, 0xD861, 0xD800, 0xE000, 0xE061, 0xE000, 0xED34, 0xFFFF, 0xFFFF, 0xFE9A, 0xE923, 0xE984, 0xE9C5, 0xE163, 0xAAAA, 0xF7FF, // 0x0260 (608) +0xFFFF, 0xC410, 0xA000, 0xB0A2, 0xB0A2, 0xB041, 0xCACB, 0xFFFF, 0xFFDF, 0xFFFF, 0xD34D, 0xC841, 0xD104, 0xD0A2, 0xD061, 0xD000, // 0x0270 (624) +0xD800, 0xD800, 0xE000, 0xE041, 0xE000, 0xD965, 0xFF9E, 0xFFDF, 0xFFFF, 0xF4D2, 0xE8E2, 0xE9A5, 0xE9E5, 0xE183, 0xAAAA, 0xF7FF, // 0x0280 (640) +0xFFFF, 0xCC10, 0xA000, 0xA861, 0xB061, 0xB061, 0xB882, 0xF6DB, 0xFFFF, 0xFFDF, 0xF75D, 0xC124, 0xC800, 0xD000, 0xD000, 0xD800, // 0x0290 (656) +0xD800, 0xE000, 0xE020, 0xE000, 0xD861, 0xF638, 0xFFFF, 0xFFDF, 0xFFDF, 0xEA68, 0xE943, 0xE9C5, 0xEA06, 0xE1A4, 0xB2CA, 0xF7FF, // 0x02A0 (672) +0xFFFF, 0xCC10, 0xA000, 0xA820, 0xB000, 0xB000, 0xB000, 0xCA49, 0xFFFF, 0xFFDF, 0xFFFF, 0xF71C, 0xCA08, 0xC800, 0xD000, 0xD800, // 0x02B0 (688) +0xD800, 0xD800, 0xD800, 0xD944, 0xEE18, 0xFFFF, 0xFFBE, 0xFFFF, 0xF4F2, 0xE902, 0xE9A5, 0xE9C5, 0xEA06, 0xE9A4, 0xB2CA, 0xF7FF, // 0x02C0 (704) +0xFFFF, 0xD410, 0xA800, 0xA800, 0xB000, 0xB000, 0xB800, 0xB800, 0xDC10, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xED96, 0xDAEB, 0xD1A6, // 0x02D0 (720) +0xD965, 0xDA69, 0xECD3, 0xFF9E, 0xFFFF, 0xFFBE, 0xFFFF, 0xFE17, 0xE923, 0xE964, 0xE9A5, 0xE9C5, 0xEA26, 0xE9C4, 0xBACA, 0xF7FF, // 0x02E0 (736) +0xF7FF, 0xD410, 0xA800, 0xA800, 0xB000, 0xB000, 0xB800, 0xB800, 0xB800, 0xE3EF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02F0 (752) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF5B6, 0xE923, 0xE923, 0xE984, 0xE9A5, 0xE9E5, 0xEA26, 0xE9C5, 0xBACA, 0xF7FF, // 0x0300 (768) +0xF7FF, 0xDC10, 0xB000, 0xA800, 0xB000, 0xB000, 0xB800, 0xB800, 0xC000, 0xC000, 0xD228, 0xF638, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0310 (784) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFEFB, 0xF3AE, 0xE0C1, 0xE903, 0xE964, 0xE984, 0xE9A5, 0xE9E5, 0xEA26, 0xE9E5, 0xC2CA, 0xF7DF, // 0x0320 (800) +0xF7FF, 0xDC51, 0xB800, 0xA800, 0xB000, 0xB000, 0xB800, 0xB800, 0xC000, 0xC000, 0xC000, 0xC800, 0xD9E7, 0xEC30, 0xF5D7, 0xFE9A, // 0x0330 (816) +0xFEBA, 0xF618, 0xF4D3, 0xEACB, 0xE0E2, 0xE040, 0xE903, 0xE943, 0xE943, 0xE984, 0xE9A5, 0xE9E5, 0xEA26, 0xEA05, 0xC30C, 0xF7DF, // 0x0340 (832) +0xFFFF, 0xD575, 0xD104, 0xA820, 0xB000, 0xB800, 0xB800, 0xC000, 0xC000, 0xC000, 0xC820, 0xC800, 0xD000, 0xD000, 0xD800, 0xD800, // 0x0350 (848) +0xE000, 0xE000, 0xE000, 0xE000, 0xE0A1, 0xE0E3, 0xE903, 0xE943, 0xE964, 0xE984, 0xE9C5, 0xE9C5, 0xF226, 0xE227, 0xBC10, 0xF7FF, // 0x0360 (864) +0xFFFF, 0xDF3C, 0xCAAA, 0xD186, 0xB082, 0xB000, 0xB800, 0xB800, 0xB800, 0xC000, 0xC000, 0xC800, 0xC800, 0xD000, 0xD000, 0xD800, // 0x0370 (880) +0xD800, 0xE000, 0xE020, 0xE040, 0xE061, 0xE0A1, 0xE0C2, 0xE102, 0xE123, 0xE943, 0xE984, 0xEA26, 0xFB0A, 0xBA08, 0xCE38, 0xFFFF, // 0x0380 (896) +0xFFFF, 0xFFDF, 0xBDD7, 0xCA69, 0xE248, 0xD207, 0xD1C6, 0xD1C6, 0xD9C7, 0xD9C7, 0xE1C7, 0xE1C7, 0xE1C7, 0xE9C7, 0xE9C7, 0xE9C7, // 0x0390 (912) +0xF1C6, 0xF1C7, 0xF1E7, 0xF207, 0xF228, 0xF248, 0xF269, 0xF289, 0xF2A9, 0xF2CA, 0xFB0A, 0xF2EA, 0xC207, 0xACB3, 0xF7BE, 0xFFFF, // 0x03A0 (928) +0xFFFF, 0xFFFF, 0xF7BE, 0xBDF7, 0xAB8E, 0xC2EB, 0xC2EB, 0xC30B, 0xC30B, 0xC30B, 0xC30B, 0xC30B, 0xC30B, 0xC30B, 0xCB0B, 0xCAEB, // 0x03B0 (944) +0xCAEB, 0xCACA, 0xCACA, 0xCAAA, 0xCAAA, 0xCA8A, 0xCA69, 0xC269, 0xC269, 0xC289, 0xBA69, 0xA2CB, 0xAD34, 0xEF7D, 0xFFFF, 0xFFFF, // 0x03C0 (960) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xDF3C, 0xBE39, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, // 0x03D0 (976) +0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xBE38, 0xD71C, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03E0 (992) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03F0 (1008) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) +}; diff --git a/libraries/UTFT/examples/chipKit/UTFT_Bitmap_128x128/icon2.c b/libraries/UTFT/examples/chipKit/UTFT_Bitmap_128x128/icon2.c new file mode 100644 index 0000000..9b843cc --- /dev/null +++ b/libraries/UTFT/examples/chipKit/UTFT_Bitmap_128x128/icon2.c @@ -0,0 +1,72 @@ +// Generated by : ImageConverter 565 v1.0 +// Generated from: video.png +// Time generated: 14.10.2010 21:53:17 +// Dimensions : 32x32 pixels +// Size : 2 048 Bytes + +const unsigned short icon2[0x400] ={ +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0010 (16) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0020 (32) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE71C, 0xB5B6, 0x94B2, 0x8C71, // 0x0030 (48) +0x9492, 0xA534, 0xD6BA, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0040 (64) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF5D, 0x9CF3, 0x73AE, 0x6B6D, 0x73AE, 0x7BCF, // 0x0050 (80) +0x7BEF, 0x7BCF, 0x7BEF, 0xA534, 0xEF7D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0060 (96) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xC638, 0x7BCF, 0x6B6D, 0x738E, 0x7BCF, 0x8C71, 0x9492, // 0x0070 (112) +0x9492, 0x9492, 0x9492, 0x8C51, 0x8C71, 0xDEDB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0080 (128) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xB596, 0x738E, 0x738E, 0x73AE, 0x6B4D, 0x8410, 0x9CF3, 0x9CF3, // 0x0090 (144) +0x9CF3, 0x9CF3, 0x9CF3, 0x9CF3, 0x94B2, 0x7BEF, 0xDEDB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00A0 (160) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xB596, 0x738E, 0x7BEF, 0x8410, 0x632C, 0x4A69, 0x9492, 0xAD75, 0xAD55, // 0x00B0 (176) +0xAD55, 0xAD55, 0xAD55, 0xA534, 0xAD55, 0x9492, 0x8430, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00C0 (192) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xBDF7, 0x7BCF, 0x8430, 0x7BCF, 0x6B4D, 0x528A, 0x6B6D, 0xB5B6, 0xB5B6, 0xB5B6, // 0x00D0 (208) +0xB5B6, 0xB596, 0xB596, 0xAD75, 0xAD75, 0xAD55, 0x8410, 0xB5B6, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00E0 (224) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEDB, 0x7BEF, 0x9CD3, 0xA514, 0x5AEB, 0x630C, 0x6B4D, 0x9492, 0xC638, 0xC618, 0xC618, // 0x00F0 (240) +0xBDF7, 0xBDF7, 0xC618, 0xB5B6, 0xB5B6, 0xB596, 0x9492, 0x8C51, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0100 (256) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0x8C71, 0x94B2, 0xAD55, 0xB5B6, 0x738E, 0x6B4D, 0x632C, 0xB596, 0xD69A, 0xCE59, 0xCE59, // 0x0110 (272) +0xCE79, 0xCE59, 0x6B6D, 0x9492, 0xB5B6, 0xBDF7, 0x9CF3, 0x8430, 0xD69A, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0120 (288) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xB5B6, 0x8C51, 0xAD55, 0xB5B6, 0xCE79, 0x8C51, 0x630C, 0x8C51, 0xCE79, 0xD6BA, 0xD69A, 0xDEDB, // 0x0130 (304) +0xBDD7, 0x8C51, 0x4228, 0x2965, 0xAD55, 0xC638, 0xA534, 0x8430, 0xB5B6, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0140 (320) +0xFFFF, 0xFFFF, 0xFFFF, 0xEF5D, 0x8C51, 0xA514, 0xB5B6, 0xC618, 0xD6BA, 0xB5B6, 0xB596, 0xE71C, 0xDEFB, 0xDEFB, 0xE71C, 0xAD55, // 0x0150 (336) +0x738E, 0x7BEF, 0x5AEB, 0x2945, 0xC638, 0xCE59, 0xA534, 0x9492, 0xA534, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0160 (352) +0xFFFF, 0xFFFF, 0xFFFF, 0xB596, 0x94B2, 0xB5B6, 0xC618, 0xCE79, 0xD6BA, 0xE73C, 0xEF7D, 0xE73C, 0xEF5D, 0xE73C, 0x9CF3, 0x738E, // 0x0170 (368) +0x7BCF, 0x8430, 0x6B6D, 0x2965, 0xB596, 0xD69A, 0xAD55, 0x94B2, 0x9CD3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0180 (384) +0xFFFF, 0xFFFF, 0xF79E, 0x9492, 0x9CF3, 0xB5B6, 0xD69A, 0xDEFB, 0xE71C, 0xE73C, 0x6B6D, 0x528A, 0xDEDB, 0xEF5D, 0x7BEF, 0x8430, // 0x0190 (400) +0x7BEF, 0x8C51, 0x7BCF, 0x2104, 0xB596, 0xD6BA, 0xAD55, 0x9CD3, 0x9CF3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE73C, 0xE6FC, // 0x01A0 (416) +0xFFDF, 0xFFFF, 0xCE59, 0x9492, 0x9492, 0x6B4D, 0x7BCF, 0xBDD7, 0xF7BE, 0xA514, 0x4A49, 0x528A, 0xC638, 0xEF7D, 0x7BEF, 0x7BEF, // 0x01B0 (432) +0x7BEF, 0x8430, 0x5AEB, 0x10A2, 0xC618, 0xD69A, 0xAD55, 0x94B2, 0xA514, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xCE5A, 0x8BF2, // 0x01C0 (448) +0xFFFF, 0xFFFF, 0xAD55, 0x94B2, 0x8C51, 0x5AEB, 0x632C, 0xBDD7, 0xE73C, 0x630C, 0x632C, 0xBDF7, 0xFFDF, 0xEF5D, 0xBDD7, 0xB5B6, // 0x01D0 (464) +0xAD75, 0xAD75, 0x8C51, 0x738E, 0xD69A, 0xCE59, 0xB596, 0x8C51, 0xB5B6, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xCE39, 0x7350, // 0x01E0 (480) +0xFFFF, 0xF79E, 0x94B2, 0x94B2, 0x7BCF, 0x5AEB, 0x738E, 0xD6BA, 0xD69A, 0x2104, 0x6B6D, 0xF79E, 0xF79E, 0xF79E, 0xF7BE, 0xF79E, // 0x01F0 (496) +0xEF7D, 0xEF5D, 0xE73C, 0xE73C, 0xDEFB, 0xBDF7, 0xBDF7, 0x7BEF, 0xD69A, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xAD36, 0x7350, // 0x0200 (512) +0xFFFF, 0xDEDB, 0x8C51, 0x94B2, 0x738E, 0x632C, 0x73AE, 0xCE79, 0xF7BE, 0x7BEF, 0xA514, 0xF7BE, 0xF79E, 0xEF7D, 0xEF7D, 0xEF5D, // 0x0210 (528) +0xE73C, 0xE71C, 0xDEFB, 0xDEDB, 0xDEDB, 0xBDD7, 0xBDF7, 0x73AE, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0x9C75, 0x736F, // 0x0220 (544) +0xFFFF, 0xCE59, 0x8430, 0x94B2, 0x6B4D, 0x6B4D, 0xB596, 0xE73C, 0xEF7D, 0xFFFF, 0xFFFF, 0xF7BE, 0xF79E, 0xEF7D, 0xEF7D, 0xEF5D, // 0x0230 (560) +0xE73C, 0xE73C, 0xDEFB, 0xDEFB, 0xD6BA, 0xC618, 0xAD55, 0x8C71, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEDB, 0x6AEF, 0x9492, // 0x0240 (576) +0xFFFF, 0xBDF7, 0x8430, 0x8C71, 0x6B6D, 0xB596, 0xE71C, 0xE73C, 0xEF5D, 0xE73C, 0xBDF7, 0xCE59, 0xF7BE, 0xEF7D, 0xEF7D, 0xEF5D, // 0x0250 (592) +0xE73C, 0xE71C, 0xDEFB, 0xDEFB, 0xC638, 0xD69A, 0x8410, 0xC618, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0x9474, 0x6B0E, 0xCE59, // 0x0260 (608) +0xFFFF, 0xB5B6, 0x8410, 0x9492, 0xBDD7, 0xD6BA, 0xD6BA, 0xE71C, 0xE73C, 0x8C71, 0x6B4D, 0xA514, 0xF7BE, 0xEF5D, 0xEF5D, 0xE73C, // 0x0270 (624) +0xE73C, 0xE71C, 0xDEFB, 0xDEDB, 0xCE59, 0xC618, 0x7BCF, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xC5F9, 0x7B51, 0x7BEF, 0xFFFF, // 0x0280 (640) +0xFFFF, 0xB596, 0x8C71, 0xAD75, 0xBDF7, 0xCE59, 0xD69A, 0xE71C, 0xCE79, 0x8410, 0x8410, 0x9CD3, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, // 0x0290 (656) +0xE71C, 0xDEFB, 0xDEFB, 0xCE59, 0xDEDB, 0x8C71, 0xAD75, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEBB, 0x83B2, 0x630C, 0xE73C, 0xFFFF, // 0x02A0 (672) +0xFFFF, 0xB5B6, 0x9492, 0xAD55, 0xBDD7, 0xC638, 0xCE79, 0xDEFB, 0xB596, 0x73AE, 0x8410, 0x8410, 0xDEDB, 0xE73C, 0xE71C, 0xE71C, // 0x02B0 (688) +0xDEFB, 0xDEFB, 0xD6BA, 0xCE59, 0xC618, 0x738E, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEDC, 0x8C14, 0x5ACC, 0xC658, 0xFFFF, 0xFFFF, // 0x02C0 (704) +0xFFFF, 0xC638, 0x8C51, 0xA534, 0xB5B6, 0xBDF7, 0xCE59, 0xD6BA, 0x94B2, 0x738E, 0x8410, 0x8430, 0xCE59, 0xE73C, 0xDEFB, 0xDEFB, // 0x02D0 (720) +0xDEDB, 0xDEFB, 0xBDF7, 0xDEDB, 0x73AE, 0xC618, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEDC, 0x8BD2, 0x5ACC, 0xBDD6, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02E0 (736) +0xFFFF, 0xDEDB, 0x8C51, 0xA514, 0xAD75, 0xBDD7, 0xC638, 0xC618, 0x73AE, 0x7BCF, 0x8410, 0x5ACB, 0x8C51, 0xE73C, 0xDEDB, 0xD6BA, // 0x02F0 (752) +0xDEFB, 0xBDD7, 0xD69A, 0x8C71, 0x8C51, 0xFFFF, 0xFFFF, 0xFFDE, 0xCE5A, 0x7B71, 0x62ED, 0xBDF7, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0300 (768) +0xFFFF, 0xF7BE, 0x94B2, 0x94B2, 0xA534, 0xB596, 0xBDF7, 0xB596, 0x6B6D, 0x4208, 0x2945, 0x18C3, 0x6B6D, 0xDEFB, 0xD69A, 0xDEDB, // 0x0310 (784) +0xB5B6, 0xC618, 0x9CF3, 0x6B4D, 0xFFDE, 0xFFFF, 0xEF5D, 0xAD37, 0x62EE, 0x6B4D, 0xCE79, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0320 (800) +0xFFDF, 0xFFFF, 0xBDF7, 0x8C51, 0xA514, 0xAD55, 0xB596, 0xBDD7, 0xA514, 0x738E, 0xA514, 0xB5B6, 0xCE59, 0xD69A, 0xDEDB, 0xB596, // 0x0330 (816) +0xBDF7, 0xA534, 0x6B4C, 0xEF5D, 0xF79E, 0xBDB8, 0x7370, 0x5AAC, 0x8C71, 0xEF7D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0340 (832) +0xFFFF, 0xFFFF, 0xF79E, 0x94B2, 0x94B2, 0xA534, 0xAD55, 0xB5B6, 0xA534, 0xBDD7, 0xD69A, 0xCE59, 0xCE79, 0xCE59, 0xA534, 0x8430, // 0x0350 (848) +0x738E, 0x3186, 0x7BB0, 0x8C33, 0x7370, 0x62ED, 0x8410, 0xCE59, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0360 (864) +0xFFFF, 0xFFFF, 0xFFFF, 0xDEFB, 0x8C71, 0x9CD3, 0xAD55, 0xB596, 0xBDD7, 0xBDD7, 0xBDF7, 0xC618, 0xB5B6, 0xA534, 0xA534, 0x632C, // 0x0370 (880) +0x6B6D, 0xB5B6, 0xAD76, 0xAD76, 0xBE17, 0xE71B, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0380 (896) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEFB, 0x94B2, 0x8C51, 0x94B2, 0xA534, 0xAD55, 0xAD55, 0x9CD3, 0x8C71, 0x73AE, 0x632C, 0xA534, // 0x0390 (912) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03A0 (928) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0xCE59, 0xA514, 0x8430, 0x7BCF, 0x738E, 0x73AE, 0x8410, 0xA534, 0xEF7D, 0xFFFF, // 0x03B0 (944) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03C0 (960) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0xE73C, 0xE71C, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03D0 (976) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03E0 (992) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, // 0x03F0 (1008) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) +}; diff --git a/libraries/UTFT/examples/chipKit/UTFT_Bitmap_128x128/tux.c b/libraries/UTFT/examples/chipKit/UTFT_Bitmap_128x128/tux.c new file mode 100644 index 0000000..7fefd80 --- /dev/null +++ b/libraries/UTFT/examples/chipKit/UTFT_Bitmap_128x128/tux.c @@ -0,0 +1,264 @@ +// Generated by : ImageConverter 565 v1.0 +// Generated from: tux_64x64.png +// Time generated: 14.10.2010 21:56:38 +// Dimensions : 64x64 pixels +// Size : 8 192 Bytes + +const unsigned short tux[0x1000] ={ +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0010 (16) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xCE79, 0x9CF3, 0x7BCF, 0x738E, 0x738E, // 0x0020 (32) +0x6B6D, 0x94B2, 0xCE79, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0030 (48) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0040 (64) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0050 (80) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xCE79, 0x6B4D, 0x5ACB, 0x8410, 0x9CF3, 0x9CF3, 0x9CF3, // 0x0060 (96) +0x9CD3, 0x73AE, 0x4208, 0x5ACB, 0xCE79, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0070 (112) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0080 (128) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0090 (144) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xA514, 0x3186, 0x8C51, 0xBDF7, 0xC618, 0xBDF7, 0xBDF7, 0xBDF7, // 0x00A0 (160) +0xBDF7, 0xC618, 0xBDD7, 0x738E, 0x18C3, 0x8C51, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00B0 (176) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00C0 (192) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00D0 (208) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xBDD7, 0x10A2, 0x8C71, 0x9CF3, 0x8C71, 0x8C71, 0x8C71, 0x8C71, 0x8C71, // 0x00E0 (224) +0x8C71, 0x8C51, 0x8C51, 0x9CF3, 0x73AE, 0x0000, 0x7BEF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00F0 (240) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0100 (256) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0110 (272) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0x2945, 0x31A6, 0x7BCF, 0x6B4D, 0x6B6D, 0x6B6D, 0x6B6D, 0x6B6D, 0x6B6D, // 0x0120 (288) +0x6B6D, 0x6B6D, 0x6B6D, 0x6B4D, 0x73AE, 0x2124, 0x0000, 0xAD55, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0130 (304) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0140 (320) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0150 (336) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xC638, 0x0000, 0x31A6, 0x52AA, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, // 0x0160 (352) +0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x528A, 0x2104, 0x0000, 0x2965, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0170 (368) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0180 (384) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0190 (400) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x8C71, 0x0000, 0x1082, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, // 0x01A0 (416) +0x3186, 0x3186, 0x3186, 0x3186, 0x2965, 0x0020, 0x0000, 0x0000, 0x9CF3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01B0 (432) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01C0 (448) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01D0 (464) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x630C, 0x0000, 0x0000, 0x0861, 0x18C3, 0x10A2, 0x10A2, 0x10A2, 0x10A2, 0x18C3, // 0x01E0 (480) +0x1082, 0x0841, 0x1082, 0x10A2, 0x0020, 0x0000, 0x0000, 0x0000, 0x528A, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01F0 (496) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0200 (512) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0210 (528) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x4A49, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0220 (544) +0x0861, 0x3186, 0x18C3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2104, 0xD6BA, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0230 (560) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0240 (576) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0250 (592) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x39C7, 0x0000, 0x3186, 0xAD75, 0x8C51, 0x0841, 0x0000, 0x0000, 0x0000, 0x4208, // 0x0260 (608) +0xD6BA, 0xFFDF, 0xE71C, 0x630C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0xAD75, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0270 (624) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0280 (640) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0290 (656) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x39C7, 0x0000, 0xCE59, 0xFFFF, 0xFFFF, 0x94B2, 0x0000, 0x0000, 0x10A2, 0xE73C, // 0x02A0 (672) +0xFFFF, 0xFFFF, 0xFFFF, 0xEF7D, 0x2124, 0x0000, 0x0000, 0x0000, 0x0000, 0x94B2, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02B0 (688) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02C0 (704) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02D0 (720) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x2965, 0x18E3, 0xDEDB, 0x7BCF, 0xAD75, 0xEF5D, 0x2944, 0x0000, 0x5ACA, 0xFFFF, // 0x02E0 (736) +0xAD55, 0x94B2, 0xAD55, 0xF7BE, 0x8410, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C51, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02F0 (752) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0300 (768) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0310 (784) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x39E7, 0x2945, 0xA514, 0x9CF3, 0x8C71, 0xD6BB, 0x39C9, 0x0000, 0x632E, 0xF7DF, // 0x0320 (800) +0x7BEF, 0xAD54, 0x7BEF, 0xBDF7, 0xB596, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C71, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0330 (816) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0340 (832) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0350 (848) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x4A49, 0x18C3, 0x9492, 0x39E7, 0x3187, 0xA48F, 0x8323, 0x5A00, 0x93A6, 0xCDD5, // 0x0360 (864) +0x4209, 0x4249, 0x2965, 0x9CD2, 0xB575, 0x0000, 0x0000, 0x0000, 0x0000, 0x9492, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0370 (880) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0380 (896) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0390 (912) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x5ACB, 0x0000, 0x9D14, 0x2905, 0x6A40, 0xE643, 0xFFAE, 0xFFF3, 0xFF70, 0xDD86, // 0x03A0 (928) +0x7240, 0x1840, 0x18C3, 0xC65A, 0x73CF, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C51, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03B0 (944) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03C0 (960) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03D0 (976) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x738E, 0x0000, 0x5A6A, 0xD566, 0xFF66, 0xFFF8, 0xFFFD, 0xFFDC, 0xFFFD, 0xFFFA, // 0x03E0 (992) +0xFF0E, 0xE566, 0xC464, 0xC4CC, 0x2103, 0x0000, 0x0000, 0x0000, 0x0000, 0x6B6D, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03F0 (1008) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0410 (1040) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x7BEF, 0x0800, 0xB440, 0xFFC6, 0xFFF3, 0xFFB4, 0xFFB2, 0xFF92, 0xFF72, 0xFF53, // 0x0420 (1056) +0xFF55, 0xFF75, 0xFEF0, 0xF542, 0x8240, 0x0000, 0x0000, 0x0000, 0x0000, 0x4228, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0430 (1072) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0440 (1088) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0450 (1104) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x8432, 0x4140, 0xFFE2, 0xFFEB, 0xFFAC, 0xFF8B, 0xFF4C, 0xFF2C, 0xFEEC, 0xFECB, // 0x0460 (1120) +0xFE6A, 0xFE08, 0xFDA7, 0xFDC3, 0xA320, 0x0000, 0x0000, 0x0000, 0x0000, 0x18E3, 0xD69A, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0470 (1136) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0480 (1152) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0490 (1168) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x9D14, 0x28A0, 0xF6E0, 0xFFE1, 0xFF43, 0xFF04, 0xFEC4, 0xFE84, 0xFE23, 0xFDE1, // 0x04A0 (1184) +0xFD60, 0xFD20, 0xFD20, 0xFD20, 0x7241, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9CF3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x04B0 (1200) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x04C0 (1216) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x04D0 (1232) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xB5B6, 0x0000, 0xC4A9, 0xFEC0, 0xFF00, 0xFEA0, 0xFE40, 0xFE00, 0xFDA0, 0xFD60, // 0x04E0 (1248) +0xFD40, 0xFD20, 0xEC80, 0xDCC7, 0x8C0F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x52AA, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x04F0 (1264) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0500 (1280) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0510 (1296) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xAD75, 0x0000, 0xD69B, 0xF631, 0xF5C0, 0xFE80, 0xFE00, 0xFDC0, 0xFD60, 0xFD40, // 0x0520 (1312) +0xFCC0, 0xDC86, 0xCD93, 0xE73D, 0xE71C, 0x0861, 0x0000, 0x0000, 0x0000, 0x0000, 0x0861, 0xC618, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0530 (1328) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0540 (1344) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0550 (1360) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x632C, 0x0000, 0xD6BA, 0xFFFF, 0xF5F1, 0xFD40, 0xFD80, 0xFD20, 0xFCE0, 0xECA3, // 0x0560 (1376) +0xDD6F, 0xE6FC, 0xFFFF, 0xFFFF, 0xFFFF, 0x632C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5ACB, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0570 (1392) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0580 (1408) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0590 (1424) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xDEDB, 0x0861, 0x0000, 0xD69A, 0xFFFF, 0xFFFF, 0xFED8, 0xF631, 0xF610, 0xE5F2, 0xE6B9, // 0x05A0 (1440) +0xF7BF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xE71C, 0x10A2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0xB5B6, 0xFFFF, 0xFFFF, 0xFFFF, // 0x05B0 (1456) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x05C0 (1472) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x05D0 (1488) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0x39E7, 0x0000, 0x4228, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7FF, 0xF7DF, 0xFFFF, // 0x05E0 (1504) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x73AE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3186, 0xEF7D, 0xFFFF, 0xFFFF, // 0x05F0 (1520) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0600 (1536) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0610 (1552) +0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x738E, 0x0000, 0x18C3, 0xDEFB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0620 (1568) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFFF, 0xCE59, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6B4D, 0xFFFF, 0xFFFF, // 0x0630 (1584) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0640 (1600) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0650 (1616) +0xFFFF, 0xFFDF, 0xFFFF, 0xA514, 0x0000, 0x0000, 0x9CD3, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0660 (1632) +0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0x2965, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xAD55, 0xFFFF, // 0x0670 (1648) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0680 (1664) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0690 (1680) +0xFFDF, 0xFFFF, 0xD69A, 0x0861, 0x0000, 0x2945, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x06A0 (1696) +0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xFFFF, 0x7BCF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18C3, 0xD6BA, // 0x06B0 (1712) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x06C0 (1728) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x06D0 (1744) +0xFFFF, 0xFFDF, 0x39C7, 0x0000, 0x0000, 0x8430, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x06E0 (1760) +0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xFFFF, 0xCE79, 0x0841, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4228, // 0x06F0 (1776) +0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0700 (1792) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, // 0x0710 (1808) +0xFFFF, 0x94B2, 0x0000, 0x0020, 0x0020, 0xCE79, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, // 0x0720 (1824) +0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xFFDF, 0x4A69, 0x0000, 0x0841, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, // 0x0730 (1840) +0x8C71, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0740 (1856) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0750 (1872) +0xEF7D, 0x2104, 0x0020, 0x0000, 0x3186, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, // 0x0760 (1888) +0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xFFFF, 0xB5B6, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0000, // 0x0770 (1904) +0x10A2, 0xD6BA, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0780 (1920) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, // 0x0790 (1936) +0x8C71, 0x0000, 0x0861, 0x0000, 0x7BCF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, // 0x07A0 (1952) +0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xFFDF, 0x528A, 0x0000, 0x0841, 0x0020, 0x0020, 0x0020, 0x0020, // 0x07B0 (1968) +0x0000, 0x630C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x07C0 (1984) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, // 0x07D0 (2000) +0x3186, 0x0000, 0x0841, 0x10A2, 0xE71C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, // 0x07E0 (2016) +0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xF79E, 0xEF5D, 0xF7BE, 0xBDD7, 0x0841, 0x0861, 0x0841, 0x0841, 0x0841, 0x0020, // 0x07F0 (2032) +0x0020, 0x1082, 0xC638, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0800 (2048) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xBDD7, // 0x0810 (2064) +0x0020, 0x1082, 0x0000, 0x7BEF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, // 0x0820 (2080) +0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF7D, 0x4208, 0x0020, 0x0861, 0x0861, 0x0841, 0x0841, // 0x0830 (2096) +0x0841, 0x0000, 0x630C, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0840 (2112) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x6B4D, // 0x0850 (2128) +0x0000, 0x0861, 0x2104, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, // 0x0860 (2144) +0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xE73C, 0xF7BE, 0x8430, 0x0000, 0x1082, 0x0861, 0x0861, 0x0861, // 0x0870 (2160) +0x0861, 0x0020, 0x18C3, 0xCE79, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0880 (2176) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF5D, 0x2124, // 0x0890 (2192) +0x0861, 0x0020, 0x8410, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, // 0x08A0 (2208) +0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xEF7D, 0xB5B6, 0x0861, 0x1082, 0x1082, 0x0861, 0x0861, // 0x08B0 (2224) +0x0861, 0x0861, 0x0000, 0x8430, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x08C0 (2240) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xA514, 0x0020, // 0x08D0 (2256) +0x10A2, 0x1082, 0xD69A, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, // 0x08E0 (2272) +0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xEF5D, 0xCE79, 0x2124, 0x1082, 0x10A2, 0x1082, 0x1082, // 0x08F0 (2288) +0x0861, 0x1082, 0x0000, 0x4208, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0900 (2304) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0x4208, 0x0861, // 0x0910 (2320) +0x1082, 0x31A6, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, // 0x0920 (2336) +0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEDB, 0x39C7, 0x1082, 0x10A2, 0x10A2, 0x1082, // 0x0930 (2352) +0x1082, 0x1082, 0x0841, 0x18C3, 0xC618, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0940 (2368) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xA534, 0x0841, 0x18C3, // 0x0950 (2384) +0x0841, 0x630C, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, // 0x0960 (2400) +0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xDEFB, 0xE73C, 0x4A49, 0x0861, 0x18C3, 0x10A2, 0x10A2, // 0x0970 (2416) +0x10A2, 0x1082, 0x1082, 0x0841, 0x9CD3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0980 (2432) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7D, 0x3186, 0x1082, 0x18E3, // 0x0990 (2448) +0x0861, 0x94B2, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, // 0x09A0 (2464) +0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEDB, 0xE73C, 0x4A69, 0x1082, 0x18E3, 0x18C3, 0x10A2, // 0x09B0 (2480) +0x10A2, 0x10A2, 0x10A2, 0x0020, 0x73AE, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x09C0 (2496) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x94B2, 0x0841, 0x18E3, 0x18E3, // 0x09D0 (2512) +0x0861, 0xAD75, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, // 0x09E0 (2528) +0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEFB, 0xDEDB, 0xE73C, 0x52AA, 0x10A2, 0x2104, 0x18E3, 0x18C3, // 0x09F0 (2544) +0x18C3, 0x18C3, 0x10A2, 0x0841, 0x630C, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0A00 (2560) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x632C, 0x0861, 0x18E4, 0x18E4, // 0x0A10 (2576) +0x1082, 0xC638, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, // 0x0A20 (2592) +0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xD6BA, 0xE71C, 0x6B4D, 0x10A2, 0x18C3, 0x18C3, 0x10A2, // 0x0A30 (2608) +0x10A2, 0x10A2, 0x18C3, 0x0861, 0x5AEB, 0xE73C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0A40 (2624) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x8410, 0x0862, 0x3143, 0x2924, // 0x0A50 (2640) +0x0882, 0xBDD7, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, // 0x0A60 (2656) +0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEDB, 0xE73C, 0x630C, 0x2103, 0x4A69, 0x632C, 0x6B4D, // 0x0A70 (2672) +0x528A, 0x2965, 0x18C3, 0x1081, 0x738E, 0xE73C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0A80 (2688) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xB596, 0x7A40, 0xECA0, 0xCC00, // 0x0A90 (2704) +0x3941, 0xA535, 0xFFFF, 0xF7BE, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, // 0x0AA0 (2720) +0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEFB, 0xD6DB, 0xCE38, 0xC618, 0x4A48, 0x4A49, 0x6B6D, 0x6B4D, 0x6B4D, // 0x0AB0 (2736) +0x6B4D, 0x630C, 0x3186, 0x18E4, 0x9492, 0xEF7D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0AC0 (2752) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xC488, 0xFD41, 0xFE6D, 0xFE6A, // 0x0AD0 (2768) +0xDC60, 0x5A25, 0xB5D8, 0xFFFF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, // 0x0AE0 (2784) +0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xD6BB, 0xBCAB, 0xD462, 0xD462, 0x49E4, 0x10C3, 0x18C3, 0x18C3, 0x18C3, // 0x0AF0 (2800) +0x18C3, 0x18E3, 0x10A3, 0x49C4, 0xB575, 0xF7BF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0B00 (2816) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xCD70, 0xECA0, 0xFF14, 0xFF9B, 0xFF7B, // 0x0B10 (2832) +0xFECF, 0xC3A0, 0x3143, 0x9CF3, 0xFFFF, 0xF7BE, 0xF79E, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, // 0x0B20 (2848) +0xE73C, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEFB, 0xC617, 0xDC60, 0xFD60, 0xFD20, 0x3120, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0B30 (2864) +0x0000, 0x0000, 0x3900, 0xE460, 0xB46A, 0xEF9F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0B40 (2880) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xD5F4, 0xDC20, 0xFE8E, 0xFF59, 0xFF36, 0xFF36, // 0x0B50 (2896) +0xFF59, 0xFE6B, 0xA300, 0x18E4, 0x8410, 0xFFBE, 0xF7BE, 0xEF7D, 0xF79E, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, // 0x0B60 (2912) +0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEBA, 0xDEFB, 0xC5B5, 0xE4A1, 0xFEF2, 0xF716, 0x3164, 0x18E4, 0x2103, 0x1082, 0x1082, // 0x0B70 (2928) +0x0021, 0x1061, 0xD5D0, 0xFE27, 0xB3E3, 0xCE9B, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0B80 (2944) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF77D, 0xE697, 0xDDAF, 0xD4C8, 0xE480, 0xFE29, 0xFF36, 0xFF15, 0xFF35, 0xFF15, // 0x0B90 (2960) +0xFF15, 0xFF36, 0xFDA5, 0x6A42, 0x1905, 0x6B4C, 0xE73C, 0xFFDF, 0xEF5D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, // 0x0BA0 (2976) +0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEDB, 0xD6BA, 0xDEDB, 0xBDB5, 0xE4C3, 0xFF56, 0xFFDB, 0xAD10, 0x10A2, 0x10C3, 0x18E4, 0x1082, // 0x0BB0 (2992) +0x2922, 0xC5B1, 0xFFDC, 0xFED1, 0xB3A2, 0xBE19, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0BC0 (3008) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE6B8, 0xD484, 0xE4C0, 0xF584, 0xFE28, 0xFECF, 0xFF14, 0xFF13, 0xFF13, 0xFF13, 0xFF13, // 0x0BD0 (3024) +0xFF13, 0xFF14, 0xFEF0, 0xDC80, 0x41C5, 0x2945, 0x5269, 0xCE59, 0xF7BE, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, // 0x0BE0 (3040) +0xDEFB, 0xDEFB, 0xDEDB, 0xDEDB, 0xD6BA, 0xD69A, 0xD6DB, 0xBD95, 0xE4E2, 0xFF33, 0xFF36, 0xFF97, 0xDDF1, 0x8B66, 0x7AE4, 0x9BC7, // 0x0BF0 (3056) +0xEEB2, 0xFF97, 0xFF37, 0xFEF0, 0xC3E0, 0xB5B7, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0C00 (3072) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xD52B, 0xFD60, 0xFECD, 0xFF33, 0xFF13, 0xFF12, 0xFEF1, 0xFEF1, 0xFEF1, 0xFEF1, 0xFEF1, // 0x0C10 (3088) +0xFEF1, 0xFEF1, 0xFF12, 0xFE69, 0x9B41, 0x31A8, 0x31A6, 0x39E7, 0xB5B6, 0xF79E, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEFB, // 0x0C20 (3104) +0xDEFB, 0xDEDB, 0xDEDB, 0xD6BA, 0xD6BA, 0xD699, 0xD6BA, 0xBD94, 0xE502, 0xFF12, 0xFF15, 0xFEF4, 0xFF55, 0xFF95, 0xFF54, 0xFF95, // 0x0C30 (3120) +0xFF35, 0xFEF4, 0xFF14, 0xFF14, 0xF5A4, 0xB426, 0xE75E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0C40 (3136) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xD54C, 0xFDA0, 0xFECE, 0xFEF0, 0xFECF, 0xFEEF, 0xFEEF, 0xFEF0, 0xFEEF, 0xFEF0, 0xFEF0, // 0x0C50 (3152) +0xFEF0, 0xFEEF, 0xFEF0, 0xFEEF, 0xF582, 0x6244, 0x39E8, 0x39C6, 0x528A, 0xE71C, 0xE73C, 0xE71C, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, // 0x0C60 (3168) +0xDEDB, 0xDEDB, 0xD6BA, 0xD6BA, 0xD69A, 0xCE79, 0xCE9A, 0xBD94, 0xE522, 0xFF10, 0xFEF2, 0xFEF2, 0xFEF2, 0xFEF2, 0xFEF2, 0xFEF2, // 0x0C70 (3184) +0xFEF2, 0xFF12, 0xFEF2, 0xFEF2, 0xFF12, 0xED85, 0xBC68, 0xE73D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0C80 (3200) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xD5B0, 0xF580, 0xFECB, 0xFEEE, 0xFECD, 0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, // 0x0C90 (3216) +0xFEEE, 0xFEEE, 0xFECD, 0xFECE, 0xFECA, 0xCC60, 0x41C7, 0x39C7, 0x4228, 0xCE79, 0xEF5D, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, // 0x0CA0 (3232) +0xDEDB, 0xD6BA, 0xD6BA, 0xD69A, 0xCE79, 0xCE59, 0xCE9A, 0xBD73, 0xED42, 0xFF0F, 0xFEF0, 0xFEF0, 0xFEF0, 0xFEF0, 0xFEF0, 0xFEF0, // 0x0CB0 (3248) +0xFEF0, 0xFEF0, 0xFEF0, 0xFEF0, 0xFEF0, 0xFF31, 0xF628, 0xC4A7, 0xDE57, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0CC0 (3264) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDE13, 0xF560, 0xFEC9, 0xFECD, 0xFECC, 0xFECC, 0xFECC, 0xFECC, 0xFECC, 0xFECC, 0xFECC, // 0x0CD0 (3280) +0xFEEC, 0xFEEC, 0xFECC, 0xFECC, 0xFEED, 0xFE44, 0x9323, 0x52CC, 0x73AE, 0xD69A, 0xE73C, 0xDEFB, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEDB, // 0x0CE0 (3296) +0xD6BA, 0xD6BA, 0xD69A, 0xCE79, 0xCE59, 0xD69A, 0xB5D8, 0x7B28, 0xF5A2, 0xFF0F, 0xFECE, 0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, // 0x0CF0 (3312) +0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, 0xFECD, 0xFF10, 0xFEA9, 0xCC60, 0xD615, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0D00 (3328) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDE55, 0xED80, 0xFEA4, 0xFECA, 0xFECA, 0xFECA, 0xFECA, 0xFECA, 0xFECA, 0xFECA, 0xFEC9, // 0x0D10 (3344) +0xFEA7, 0xFEA6, 0xFEA8, 0xFEC9, 0xFECB, 0xFEEA, 0xEDA2, 0xB4F0, 0xCE9A, 0xDEFB, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEDB, 0xD6BA, // 0x0D20 (3360) +0xD6BA, 0xD69A, 0xCE79, 0xCE79, 0xD6BA, 0xB596, 0x4A8B, 0x72A4, 0xFE45, 0xFEEC, 0xFECC, 0xFEEC, 0xFEEC, 0xFEEC, 0xFEEC, 0xFEEC, // 0x0D30 (3376) +0xFEEC, 0xFECB, 0xFECB, 0xFEEC, 0xFEEC, 0xFEEC, 0xFECC, 0xFEA5, 0xFDE0, 0xAC8B, 0xE75E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0D40 (3392) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE632, 0xF5E0, 0xFE80, 0xFE82, 0xFEC7, 0xFEC8, 0xFEC8, 0xFEC8, 0xFEC7, 0xFEA4, 0xFE61, // 0x0D50 (3408) +0xFE60, 0xFE60, 0xFE60, 0xFE61, 0xFE83, 0xFEA6, 0xFEA3, 0xDD22, 0xD658, 0xE75D, 0xDEDB, 0xDEDB, 0xDEDB, 0xD6BA, 0xD6BA, 0xD69A, // 0x0D60 (3424) +0xD69A, 0xD69A, 0xD6BA, 0xCE59, 0x9492, 0x5289, 0x39E9, 0x9B84, 0xFEA3, 0xFEEB, 0xFEEA, 0xFEEA, 0xFEEA, 0xFEEA, 0xFEEA, 0xFEC8, // 0x0D70 (3440) +0xFE84, 0xFE61, 0xFE61, 0xFEA5, 0xFEC9, 0xFEA7, 0xFEA2, 0xFE80, 0xBC41, 0x8C0F, 0xE71C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0D80 (3456) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDDCE, 0xFE40, 0xFEA0, 0xFE80, 0xFE80, 0xFEA2, 0xFEA2, 0xFEA2, 0xFEA0, 0xFE80, 0xFE80, // 0x0D90 (3472) +0xFEA0, 0xFEA0, 0xFEA0, 0xFE80, 0xFE80, 0xFE80, 0xFE80, 0xFE80, 0xCCE5, 0xD69A, 0xE73C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEDB, // 0x0DA0 (3488) +0xD69A, 0xBDF7, 0x9CD3, 0x630C, 0x4228, 0x4A69, 0x422A, 0xB423, 0xFEC0, 0xFEA5, 0xFEE7, 0xFEC7, 0xFEC7, 0xFEC6, 0xFEA3, 0xFE80, // 0x0DB0 (3504) +0xFE80, 0xFE80, 0xFE80, 0xFE60, 0xFEA0, 0xFEC0, 0xEDC0, 0xA3A4, 0x732C, 0xAD96, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0DC0 (3520) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE5A8, 0xFEC0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0DD0 (3536) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEE0, 0xF640, 0x93A8, 0x8C72, 0xA534, 0xAD75, 0xA534, 0x9CF3, 0x8C51, // 0x0DE0 (3552) +0x738E, 0x5ACB, 0x4A49, 0x4A69, 0x528A, 0x4A8A, 0x5249, 0xD502, 0xFEE0, 0xFEA0, 0xFEC0, 0xFEC1, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, // 0x0DF0 (3568) +0xFEA0, 0xFEA0, 0xFEA0, 0xFEE0, 0xFE60, 0xC482, 0x7B09, 0x7BD0, 0xB5B7, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0E00 (3584) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDD8A, 0xFEC0, 0xFF20, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, // 0x0E10 (3600) +0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEC0, 0xFF20, 0xAC02, 0x4209, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, // 0x0E20 (3616) +0x528A, 0x528A, 0x52AA, 0x52AA, 0x528A, 0x4A8A, 0x5A69, 0xE5C1, 0xFF00, 0xFEC0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, // 0x0E30 (3632) +0xFEC0, 0xFEE0, 0xFF00, 0xE561, 0x9367, 0x736E, 0x9D14, 0xD6BA, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0E40 (3648) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xD617, 0xCCC5, 0xF620, 0xFEE0, 0xFF40, 0xFF40, 0xFF40, 0xFF20, 0xFF00, 0xFF00, 0xFF00, // 0x0E50 (3664) +0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFF40, 0xB483, 0x4A8B, 0x5ACA, 0x5ACB, 0x5ACB, 0x5ACB, 0x5ACB, // 0x0E60 (3680) +0x5ACB, 0x52AA, 0x52AA, 0x52AA, 0x52AA, 0x4A8A, 0x6289, 0xEE20, 0xFF20, 0xFEE0, 0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFEE0, // 0x0E70 (3696) +0xFF20, 0xFEC0, 0xBC64, 0x732B, 0x8C72, 0xCE58, 0xEF7D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0E80 (3712) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7E, 0xB576, 0x93EE, 0xA408, 0xC4A5, 0xDD63, 0xF641, 0xFEC0, 0xFF40, 0xFF80, 0xFF60, // 0x0E90 (3728) +0xFF40, 0xFF20, 0xFF20, 0xFF40, 0xFF40, 0xFF40, 0xFF20, 0xFF20, 0xFF80, 0xAC03, 0x4A6B, 0x5ACA, 0x5ACB, 0x5ACB, 0x5AEB, 0x5AEB, // 0x0EA0 (3744) +0x5AEB, 0x630C, 0x630C, 0x630C, 0x5AEB, 0x52CB, 0x5A69, 0xE5E1, 0xFF60, 0xFF20, 0xFF20, 0xFF20, 0xFF20, 0xFF20, 0xFF20, 0xFF60, // 0x0EB0 (3760) +0xF640, 0xA3A7, 0x738F, 0xAD96, 0xE71C, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0EC0 (3776) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79E, 0xD6DB, 0xB5B8, 0x9CD4, 0x9431, 0x93EE, 0x9C0A, 0xB467, 0xD544, 0xF660, // 0x0ED0 (3792) +0xFF60, 0xFFA0, 0xFF80, 0xFF60, 0xFF40, 0xFF40, 0xFF60, 0xFFA0, 0xD521, 0x730A, 0x73CF, 0x8C71, 0x9CD3, 0x9CF3, 0xA514, 0xA534, // 0x0EE0 (3808) +0xAD55, 0xB596, 0xB5B6, 0xB596, 0xAD55, 0x9CF3, 0x83F0, 0xCD04, 0xFFA0, 0xFF40, 0xFF40, 0xFF40, 0xFF40, 0xFF40, 0xFFA0, 0xF621, // 0x0EF0 (3824) +0x8B49, 0x8431, 0xCE58, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F00 (3840) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xF79E, 0xE73C, 0xD6BB, 0xBE19, 0xA556, 0x9472, 0x9C0D, // 0x0F10 (3856) +0xB447, 0xDD82, 0xFEE0, 0xFFA0, 0xFFC0, 0xFFC0, 0xFF80, 0xC4C2, 0x730C, 0x9CF4, 0xD69A, 0xEF5D, 0xEF7D, 0xF79E, 0xF79E, 0xF7BE, // 0x0F20 (3872) +0xF7BE, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xEF7D, 0xDF1C, 0xC530, 0xF620, 0xFFC0, 0xFFC0, 0xFFC0, 0xFFC0, 0xFF80, 0xE5A2, 0x834A, // 0x0F30 (3888) +0x8C93, 0xDEDA, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F40 (3904) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDE, 0xEF7D, 0xD6BB, // 0x0F50 (3920) +0xAD77, 0x9452, 0x9BEB, 0xB466, 0xC524, 0xC543, 0xA3E5, 0x734D, 0xAD76, 0xEF5C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F60 (3936) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDF1C, 0xACB0, 0xBCA6, 0xD544, 0xCD64, 0xCD05, 0xAC07, 0x7B6D, 0x9CF4, // 0x0F70 (3952) +0xE6FB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F80 (3968) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F90 (3984) +0xFFDE, 0xE75D, 0xC65A, 0xA536, 0x9493, 0x8C53, 0x94B4, 0xBE18, 0xEF7D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0FA0 (4000) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xDEFC, 0xAD57, 0x9493, 0x8C73, 0x8C73, 0x94D4, 0xBE18, 0xEF5D, // 0x0FB0 (4016) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0FC0 (4032) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0FD0 (4048) +0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0xEF5C, 0xE73C, 0xEF5C, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0FE0 (4064) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0xEF5C, 0xE73C, 0xEF5C, 0xEF7D, 0xFFDE, 0xFFFF, // 0x0FF0 (4080) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x1000 (4096) +}; diff --git a/libraries/UTFT/examples/chipKit/UTFT_Demo_128x128_Serial/UTFT_Demo_128x128_Serial.pde b/libraries/UTFT/examples/chipKit/UTFT_Demo_128x128_Serial/UTFT_Demo_128x128_Serial.pde new file mode 100644 index 0000000..45a97e6 --- /dev/null +++ b/libraries/UTFT/examples/chipKit/UTFT_Demo_128x128_Serial/UTFT_Demo_128x128_Serial.pde @@ -0,0 +1,335 @@ +// UTFT_Demo_128x128_Serial (C)2012 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of how to use most of the functions +// of the library with a supported display modules. +// +// This demo was made to work on the 128x128 modules. +// Any other size displays may cause strange behaviour. +// +// This program requires the UTFT library. +// + +#include + +// Declare which fonts we will be using +extern uint8_t SmallFont[]; + +// Declare an instance of the class +UTFT myGLCD(LPH9135,6,5,2,3,4); // Remember to change the model parameter to suit your display module! + +void setup() +{ + randomSeed(analogRead(0)); + +// Setup the LCD + myGLCD.InitLCD(PORTRAIT); + myGLCD.setFont(SmallFont); +} + +void loop() +{ + byte buf[126]; + int x, x2; + int y, y2; + int r; + +// Clear the screen and draw the frame + myGLCD.clrScr(); + myGLCD.setContrast(64); + + myGLCD.setColor(255, 0, 0); + myGLCD.fillRect(0,0,127,12); + myGLCD.setColor(64, 64, 64); + myGLCD.fillRect(0,117,127,127); + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255,0,0); + myGLCD.print("Universal TFT", CENTER, 0); + myGLCD.setBackColor(64,64,64); + myGLCD.setColor(255,255,0); + myGLCD.print("H.Karlsen", LEFT, 116); + myGLCD.print("(C)2012", RIGHT, 116); + myGLCD.setColor(0,255,0); + myGLCD.drawRect(0,13,127,116); + +// Draw crosshairs + myGLCD.setColor(0,0,255); + myGLCD.drawLine(63,14,63,115); + myGLCD.drawLine(1,63,126,63); + for (int i=3; i<128; i+=10) + myGLCD.drawLine(i, 61, i, 65); + for (int i=14; i<118; i+=10) + myGLCD.drawLine(61, i, 65, i); + +// Draw sin-, cos- and tan-lines + myGLCD.setColor(0,255,255); + myGLCD.setBackColor(0,0,0); + myGLCD.print("Sin", 2, 14); + for (int i=1; i<126; i++) + { + myGLCD.drawPixel(i,63+(sin(((i*2.85)*3.14)/180)*45)); + } + + myGLCD.setColor(255,0,0); + myGLCD.print("Cos", 2, 26); + for (int i=1; i<126; i++) + { + myGLCD.drawPixel(i,63+(cos(((i*2.85)*3.14)/180)*45)); + } + + myGLCD.setColor(255,255,0); + myGLCD.print("Tan", 2, 38); + for (int i=1; i<126; i++) + { + myGLCD.drawPixel(i,63+(tan(((i*2.85)*3.14)/180))); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,126,115); + myGLCD.setColor(0,0,255); + myGLCD.drawLine(63,14,63,115); + myGLCD.drawLine(1,63,126,63); + +// Draw a moving sinewave + x=1; + for (int i=1; i<3654; i++) + { + x++; + if (x==127) + x=1; + if (i>127) + { + if ((x==63)||(buf[x-1]==63)) + myGLCD.setColor(0,0,255); + else + myGLCD.setColor(0,0,0); + myGLCD.drawPixel(x,buf[x-1]); + } + myGLCD.setColor(0,255,255); + y=63+(sin(((i*1.3)*3.14)/180)*45); + myGLCD.drawPixel(x,y); + buf[x-1]=y; +// delay(3); + } + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,126,115); + +// Draw some filled rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRect(10+(i*10),10+(i*10), 60+(i*10), 60+(i*10)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,126,115); + +// Draw some filled, rounded rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRoundRect(70-(i*10),10+(i*10), 120-(i*10), 60+(i*10)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,126,115); + +// Draw some filled circles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillCircle(30+(i*10),35+(i*10), 25); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,126,115); + + // Draw some lines in a pattern + myGLCD.setColor (255,0,0); + for (int i=11; i<115; i+=3) + { + myGLCD.drawLine(1, i, i-10, 115); + } + myGLCD.setColor (255,0,0); + for (int i=112; i>14; i-=3) + { + myGLCD.drawLine(126, i, i+14, 14); + } + myGLCD.setColor (0,255,255); + for (int i=115; i>14; i-=3) + { + myGLCD.drawLine(1, i, 116-i, 14); + } + myGLCD.setColor (0,255,255); + for (int i=14; i<115; i+=3) + { + myGLCD.drawLine(126, i, 140-i, 115); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,126,115); + +// Draw some random circles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=22+random(85); + y=35+random(59); + r=random(20); + myGLCD.drawCircle(x, y, r); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,126,115); + +// Draw some random rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(124); + y=15+random(101); + x2=2+random(124); + y2=15+random(101); + myGLCD.drawRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,126,115); + +// Draw some random rounded rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(124); + y=15+random(101); + x2=2+random(124); + y2=15+random(101); + myGLCD.drawRoundRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,126,115); + +// Draw some random lines + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(124); + y=15+random(101); + x2=2+random(124); + y2=15+random(101); + myGLCD.drawLine(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,126,115); + +// Draw some random pixels + for (int i=0; i<5000; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + myGLCD.drawPixel(2+random(124), 15+random(101)); + } + + delay (2000); + +// Set up the "Finished"-screen + myGLCD.setContrast(0); + myGLCD.fillScr(0,0,255); + myGLCD.setColor(255,0,0); + myGLCD.fillRoundRect(2, 40, 125, 88); + + myGLCD.setColor(255,255,255); + myGLCD.setBackColor(255,0,0); + myGLCD.print("That's it!", CENTER, 46); + myGLCD.print("Restarting in a", CENTER, 66); + myGLCD.print("few seconds...", CENTER, 76); + + myGLCD.setColor(0,0,0); + myGLCD.setBackColor(0,0,255); + myGLCD.print("Runtime: (msecs)", CENTER, 108); + myGLCD.printNumI(millis(), CENTER, 118); + + myGLCD.setContrast(64); + + delay (10000); + +// Fade screen to black + for (int i=64; i>0; i--) + { + myGLCD.setContrast(i); + delay(100); + } +} + + diff --git a/libraries/UTFT/examples/chipKit/UTFT_Demo_160x128_Serial/UTFT_Demo_160x128_Serial.pde b/libraries/UTFT/examples/chipKit/UTFT_Demo_160x128_Serial/UTFT_Demo_160x128_Serial.pde new file mode 100644 index 0000000..365b716 --- /dev/null +++ b/libraries/UTFT/examples/chipKit/UTFT_Demo_160x128_Serial/UTFT_Demo_160x128_Serial.pde @@ -0,0 +1,328 @@ +// UTFT_Demo_160x128_Serial (C)2014 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of how to use most of the functions +// of the library with a supported display modules. +// +// This demo was made for modules with a screen resolution +// of 160x128 pixels. +// +// This program requires the UTFT library. +// + +#include + +// Declare which fonts we will be using +extern uint8_t SmallFont[]; + +// Usage: myGLCD(, SDA, SCL, CS, RST[, RS]); +// +// When using the DM-TFT18-101 and shield from DisplayModule you should use the following: +// UTFT myGLCD(DMTFT18101,2,3,4,6,5); +// +UTFT myGLCD(ITDB18SP,11,10,9,12,8); // Remember to change the model parameter to suit your display module! + +void setup() +{ + randomSeed(analogRead(0)); + +// Setup the LCD + myGLCD.InitLCD(); + myGLCD.setFont(SmallFont); +} + +void loop() +{ + int buf[158]; + int x, x2; + int y, y2; + int r; + +// Clear the screen and draw the frame + myGLCD.clrScr(); + + myGLCD.setColor(255, 0, 0); + myGLCD.fillRect(0, 0, 159, 13); + myGLCD.setColor(64, 64, 64); + myGLCD.fillRect(0, 114, 159, 127); + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("Universal TFT Lib.", CENTER, 1); + myGLCD.setBackColor(64, 64, 64); + myGLCD.setColor(255,255,0); + myGLCD.print("H.Karlsen", LEFT, 114); + myGLCD.print("(C)2014", RIGHT, 114); + + myGLCD.setColor(0, 0, 255); + myGLCD.drawRect(0, 13, 159, 113); + +// Draw crosshairs + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(79, 14, 79, 113); + myGLCD.drawLine(1, 63, 158, 63); + + for (int i=9; i<150; i+=10) + myGLCD.drawLine(i, 61, i, 65); + for (int i=19; i<110; i+=10) + myGLCD.drawLine(77, i, 81, i); + +// Draw sin-, cos- and tan-lines + myGLCD.setColor(0,255,255); + myGLCD.print("Sin", 5, 15); + for (int i=1; i<158; i++) + { + myGLCD.drawPixel(i,63+(sin(((i*2.27)*3.14)/180)*40)); + } + + myGLCD.setColor(255,0,0); + myGLCD.print("Cos", 5, 27); + for (int i=1; i<158; i++) + { + myGLCD.drawPixel(i,63+(cos(((i*2.27)*3.14)/180)*40)); + } + + myGLCD.setColor(255,255,0); + myGLCD.print("Tan", 5, 39); + for (int i=1; i<158; i++) + { + myGLCD.drawPixel(i,63+(tan(((i*2.27)*3.14)/180))); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,158,113); + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(79, 14, 79, 113); + myGLCD.drawLine(1, 63, 158, 63); + +// Draw a moving sinewave + x=1; + for (int i=1; i<(158*20); i++) + { + x++; + if (x==159) + x=1; + if (i>159) + { + if ((x==79)||(buf[x-1]==63)) + myGLCD.setColor(0,0,255); + else + myGLCD.setColor(0,0,0); + myGLCD.drawPixel(x,buf[x-1]); + } + myGLCD.setColor(0,255,255); + y=63+(sin(((i*2.5)*3.14)/180)*(40-(i / 100))); + myGLCD.drawPixel(x,y); + buf[x-1]=y; + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,158,113); + +// Draw some filled rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRect(39+(i*10), 23+(i*10), 59+(i*10), 43+(i*10)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,158,113); + +// Draw some filled, rounded rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRoundRect(99-(i*10), 23+(i*10), 119-(i*10), 43+(i*10)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,158,113); + +// Draw some filled circles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillCircle(49+(i*10),33+(i*10), 15); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,158,113); + +// Draw some lines in a pattern + myGLCD.setColor (255,0,0); + for (int i=14; i<113; i+=5) + { + myGLCD.drawLine(1, i, (i*1.44)-10, 112); + } + myGLCD.setColor (255,0,0); + for (int i=112; i>15; i-=5) + { + myGLCD.drawLine(158, i, (i*1.44)-12, 14); + } + myGLCD.setColor (0,255,255); + for (int i=112; i>15; i-=5) + { + myGLCD.drawLine(1, i, 172-(i*1.44), 14); + } + myGLCD.setColor (0,255,255); + for (int i=15; i<112; i+=5) + { + myGLCD.drawLine(158, i, 171-(i*1.44), 112); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,158,113); + +// Draw some random circles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=22+random(116); + y=35+random(57); + r=random(20); + myGLCD.drawCircle(x, y, r); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,158,113); + +// Draw some random rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(156); + y=16+random(95); + x2=2+random(156); + y2=16+random(95); + myGLCD.drawRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,158,113); + +// Draw some random rounded rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(156); + y=16+random(95); + x2=2+random(156); + y2=16+random(95); + myGLCD.drawRoundRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,158,113); + + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(156); + y=16+random(95); + x2=2+random(156); + y2=16+random(95); + myGLCD.drawLine(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,14,158,113); + + for (int i=0; i<5000; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + myGLCD.drawPixel(2+random(156), 16+random(95)); + } + + delay(2000); + + myGLCD.fillScr(0, 0, 255); + myGLCD.setColor(255, 0, 0); + myGLCD.fillRoundRect(10, 17, 149, 72); + + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("That's it!", CENTER, 20); + myGLCD.print("Restarting in a", CENTER, 45); + myGLCD.print("few seconds...", CENTER, 57); + + myGLCD.setColor(0, 255, 0); + myGLCD.setBackColor(0, 0, 255); + myGLCD.print("Runtime: (msecs)", CENTER, 103); + myGLCD.printNumI(millis(), CENTER, 115); + + delay (10000); +} + diff --git a/libraries/UTFT/examples/chipKit/UTFT_Demo_220x176/UTFT_Demo_220x176.pde b/libraries/UTFT/examples/chipKit/UTFT_Demo_220x176/UTFT_Demo_220x176.pde new file mode 100644 index 0000000..d82506e --- /dev/null +++ b/libraries/UTFT/examples/chipKit/UTFT_Demo_220x176/UTFT_Demo_220x176.pde @@ -0,0 +1,329 @@ +// UTFT_Demo_220x176 (C)2014 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of how to use most of the functions +// of the library with a supported display modules. +// +// This demo was made for modules with a screen resolution +// of 220x176 pixels. +// +// This program requires the UTFT library. +// + +#include + +// Declare which fonts we will be using +extern uint8_t SmallFont[]; + +// Set the pins to the correct ones for your development shield +// ------------------------------------------------------------ +// My chipKit Uno32/uC32 shield : ,38,39,40,41 +// My chipKit Max32 shield : ,82,83,84,85 +// AquaLEDSource All in One Super Screw Shield : ,82,83,84,85 +// +// Remember to change the model parameter to suit your display module! +UTFT myGLCD(ITDB22,82,83,84,85); + +void setup() +{ + randomSeed(analogRead(0)); + +// Setup the LCD + myGLCD.InitLCD(); + myGLCD.setFont(SmallFont); +} + +void loop() +{ + int buf[218]; + int x, x2; + int y, y2; + int r; + +// Clear the screen and draw the frame + myGLCD.clrScr(); + + myGLCD.setColor(255, 0, 0); + myGLCD.fillRect(0, 0, 219, 13); + myGLCD.setColor(64, 64, 64); + myGLCD.fillRect(0, 162, 219, 175); + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("** Universal TFT Library **", CENTER, 1); + myGLCD.setBackColor(64, 64, 64); + myGLCD.setColor(255,255,0); + myGLCD.print("> elec.henningkarlsen.com <", CENTER, 163); + + myGLCD.setColor(0, 0, 255); + myGLCD.drawRect(0, 14, 219, 161); + +// Draw crosshairs + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(109, 15, 109, 160); + myGLCD.drawLine(1, 88, 218, 88); + + for (int i=9; i<210; i+=10) + myGLCD.drawLine(i, 86, i, 90); + for (int i=19; i<155; i+=10) + myGLCD.drawLine(107, i, 111, i); + +// Draw sin-, cos- and tan-lines + myGLCD.setColor(0,255,255); + myGLCD.print("Sin", 5, 15); + for (int i=1; i<218; i++) + { + myGLCD.drawPixel(i,88+(sin(((i*1.65)*3.14)/180)*70)); + } + + myGLCD.setColor(255,0,0); + myGLCD.print("Cos", 5, 27); + for (int i=1; i<218; i++) + { + myGLCD.drawPixel(i,88+(cos(((i*1.65)*3.14)/180)*70)); + } + + myGLCD.setColor(255,255,0); + myGLCD.print("Tan", 5, 39); + for (int i=1; i<218; i++) + { + myGLCD.drawPixel(i,88+(tan(((i*1.65)*3.14)/180))); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(109, 15, 109, 160); + myGLCD.drawLine(1, 88, 218, 88); + +// Draw a moving sinewave + x=1; + for (int i=1; i<(218*20); i++) + { + x++; + if (x==219) + x=1; + if (i>219) + { + if ((x==109)||(buf[x-1]==88)) + myGLCD.setColor(0,0,255); + else + myGLCD.setColor(0,0,0); + myGLCD.drawPixel(x,buf[x-1]); + } + myGLCD.setColor(0,255,255); + y=88+(sin(((i*1.6)*3.14)/180)*(65-(i / 100))); + myGLCD.drawPixel(x,y); + buf[x-1]=y; + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + +// Draw some filled rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRect(44+(i*15), 23+(i*15), 88+(i*15), 63+(i*15)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + +// Draw some filled, rounded rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRoundRect(132-(i*15), 23+(i*15), 172-(i*15), 63+(i*15)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + +// Draw some filled circles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillCircle(64+(i*15),43+(i*15), 20); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + +// Draw some lines in a pattern + myGLCD.setColor (255,0,0); + for (int i=15; i<160; i+=5) + { + myGLCD.drawLine(1, i, (i*1.44)-10, 160); + } + myGLCD.setColor (255,0,0); + for (int i=160; i>15; i-=5) + { + myGLCD.drawLine(218, i, (i*1.44)-12, 15); + } + myGLCD.setColor (0,255,255); + for (int i=160; i>15; i-=5) + { + myGLCD.drawLine(1, i, 232-(i*1.44), 15); + } + myGLCD.setColor (0,255,255); + for (int i=15; i<160; i+=5) + { + myGLCD.drawLine(218, i, 231-(i*1.44), 160); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + +// Draw some random circles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=22+random(176); + y=35+random(105); + r=random(20); + myGLCD.drawCircle(x, y, r); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + +// Draw some random rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(216); + y=16+random(143); + x2=2+random(216); + y2=16+random(143); + myGLCD.drawRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + +// Draw some random rounded rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(216); + y=16+random(143); + x2=2+random(216); + y2=16+random(143); + myGLCD.drawRoundRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(216); + y=16+random(143); + x2=2+random(216); + y2=16+random(143); + myGLCD.drawLine(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + + for (int i=0; i<10000; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + myGLCD.drawPixel(2+random(216), 16+random(143)); + } + + delay(2000); + + myGLCD.fillScr(0, 0, 255); + myGLCD.setColor(255, 0, 0); + myGLCD.fillRoundRect(40, 57, 179, 119); + + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("That's it!", CENTER, 62); + myGLCD.print("Restarting in a", CENTER, 88); + myGLCD.print("few seconds...", CENTER, 101); + + myGLCD.setColor(0, 255, 0); + myGLCD.setBackColor(0, 0, 255); + myGLCD.print("Runtime: (msecs)", CENTER, 146); + myGLCD.printNumI(millis(), CENTER, 161); + + delay (10000); +} + diff --git a/libraries/UTFT/examples/chipKit/UTFT_Demo_220x176_Serial/UTFT_Demo_220x176_Serial.pde b/libraries/UTFT/examples/chipKit/UTFT_Demo_220x176_Serial/UTFT_Demo_220x176_Serial.pde new file mode 100644 index 0000000..ec66344 --- /dev/null +++ b/libraries/UTFT/examples/chipKit/UTFT_Demo_220x176_Serial/UTFT_Demo_220x176_Serial.pde @@ -0,0 +1,322 @@ +// UTFT_Demo_220x176_Serial (C)2012 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of how to use most of the functions +// of the library with a supported display modules. +// +// This demo was made for serial modules with a screen resolution +// of 220x176 pixels. +// +// This program requires the UTFT library. +// + +#include + +// Declare which fonts we will be using +extern uint8_t SmallFont[]; + +UTFT myGLCD(ITDB22SP,11,10,9,12); // Remember to change the model parameter to suit your display module! + +void setup() +{ + randomSeed(analogRead(0)); + +// Setup the LCD + myGLCD.InitLCD(); + myGLCD.setFont(SmallFont); +} + +void loop() +{ + int buf[218]; + int x, x2; + int y, y2; + int r; + +// Clear the screen and draw the frame + myGLCD.clrScr(); + + myGLCD.setColor(255, 0, 0); + myGLCD.fillRect(0, 0, 219, 13); + myGLCD.setColor(64, 64, 64); + myGLCD.fillRect(0, 162, 219, 175); + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("** Universal TFT Library **", CENTER, 1); + myGLCD.setBackColor(64, 64, 64); + myGLCD.setColor(255,255,0); + myGLCD.print("> elec.henningkarlsen.com <", CENTER, 163); + + myGLCD.setColor(0, 0, 255); + myGLCD.drawRect(0, 14, 219, 161); + +// Draw crosshairs + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(109, 15, 109, 160); + myGLCD.drawLine(1, 88, 218, 88); + + for (int i=9; i<210; i+=10) + myGLCD.drawLine(i, 86, i, 90); + for (int i=19; i<155; i+=10) + myGLCD.drawLine(107, i, 111, i); + +// Draw sin-, cos- and tan-lines + myGLCD.setColor(0,255,255); + myGLCD.print("Sin", 5, 15); + for (int i=1; i<218; i++) + { + myGLCD.drawPixel(i,88+(sin(((i*1.65)*3.14)/180)*70)); + } + + myGLCD.setColor(255,0,0); + myGLCD.print("Cos", 5, 27); + for (int i=1; i<218; i++) + { + myGLCD.drawPixel(i,88+(cos(((i*1.65)*3.14)/180)*70)); + } + + myGLCD.setColor(255,255,0); + myGLCD.print("Tan", 5, 39); + for (int i=1; i<218; i++) + { + myGLCD.drawPixel(i,88+(tan(((i*1.65)*3.14)/180))); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(109, 15, 109, 160); + myGLCD.drawLine(1, 88, 218, 88); + +// Draw a moving sinewave + x=1; + for (int i=1; i<(218*20); i++) + { + x++; + if (x==219) + x=1; + if (i>219) + { + if ((x==109)||(buf[x-1]==88)) + myGLCD.setColor(0,0,255); + else + myGLCD.setColor(0,0,0); + myGLCD.drawPixel(x,buf[x-1]); + } + myGLCD.setColor(0,255,255); + y=88+(sin(((i*1.6)*3.14)/180)*(65-(i / 100))); + myGLCD.drawPixel(x,y); + buf[x-1]=y; + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + +// Draw some filled rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRect(44+(i*15), 23+(i*15), 88+(i*15), 63+(i*15)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + +// Draw some filled, rounded rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRoundRect(132-(i*15), 23+(i*15), 172-(i*15), 63+(i*15)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + +// Draw some filled circles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillCircle(64+(i*15),43+(i*15), 20); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + +// Draw some lines in a pattern + myGLCD.setColor (255,0,0); + for (int i=15; i<160; i+=5) + { + myGLCD.drawLine(1, i, (i*1.44)-10, 160); + } + myGLCD.setColor (255,0,0); + for (int i=160; i>15; i-=5) + { + myGLCD.drawLine(218, i, (i*1.44)-12, 15); + } + myGLCD.setColor (0,255,255); + for (int i=160; i>15; i-=5) + { + myGLCD.drawLine(1, i, 232-(i*1.44), 15); + } + myGLCD.setColor (0,255,255); + for (int i=15; i<160; i+=5) + { + myGLCD.drawLine(218, i, 231-(i*1.44), 160); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,161); + +// Draw some random circles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=22+random(176); + y=35+random(105); + r=random(20); + myGLCD.drawCircle(x, y, r); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + +// Draw some random rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(216); + y=16+random(143); + x2=2+random(216); + y2=16+random(143); + myGLCD.drawRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + +// Draw some random rounded rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(216); + y=16+random(143); + x2=2+random(216); + y2=16+random(143); + myGLCD.drawRoundRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(216); + y=16+random(143); + x2=2+random(216); + y2=16+random(143); + myGLCD.drawLine(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,218,160); + + for (int i=0; i<10000; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + myGLCD.drawPixel(2+random(216), 16+random(143)); + } + + delay(2000); + + myGLCD.fillScr(0, 0, 255); + myGLCD.setColor(255, 0, 0); + myGLCD.fillRoundRect(40, 57, 179, 119); + + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("That's it!", CENTER, 62); + myGLCD.print("Restarting in a", CENTER, 88); + myGLCD.print("few seconds...", CENTER, 101); + + myGLCD.setColor(0, 255, 0); + myGLCD.setBackColor(0, 0, 255); + myGLCD.print("Runtime: (msecs)", CENTER, 146); + myGLCD.printNumI(millis(), CENTER, 161); + + delay (10000); +} + diff --git a/libraries/UTFT/examples/chipKit/UTFT_Demo_320x240/UTFT_Demo_320x240.pde b/libraries/UTFT/examples/chipKit/UTFT_Demo_320x240/UTFT_Demo_320x240.pde new file mode 100644 index 0000000..d849855 --- /dev/null +++ b/libraries/UTFT/examples/chipKit/UTFT_Demo_320x240/UTFT_Demo_320x240.pde @@ -0,0 +1,328 @@ +// UTFT_Demo_320x240 (C)2014 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of how to use most of the functions +// of the library with a supported display modules. +// +// This demo was made for modules with a screen resolution +// of 320x240 pixels. +// +// This program requires the UTFT library. +// + +#include + +// Declare which fonts we will be using +extern uint8_t SmallFont[]; + +// Set the pins to the correct ones for your development shield +// ------------------------------------------------------------ +// My chipKit Uno32/uC32 shield : ,38,39,40,41 +// My chipKit Max32 shield : ,82,83,84,85 +// AquaLEDSource All in One Super Screw Shield : ,82,83,84,85 +// +// Remember to change the model parameter to suit your display module! +UTFT myGLCD(ITDB32S,82,83,84,85); + +void setup() +{ + randomSeed(analogRead(0)); + +// Setup the LCD + myGLCD.InitLCD(); + myGLCD.setFont(SmallFont); +} + +void loop() +{ + int buf[318]; + int x, x2; + int y, y2; + int r; + +// Clear the screen and draw the frame + myGLCD.clrScr(); + + myGLCD.setColor(255, 0, 0); + myGLCD.fillRect(0, 0, 319, 13); + myGLCD.setColor(64, 64, 64); + myGLCD.fillRect(0, 226, 319, 239); + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("* Universal Color TFT Display Library *", CENTER, 1); + myGLCD.setBackColor(64, 64, 64); + myGLCD.setColor(255,255,0); + myGLCD.print("", CENTER, 227); + + myGLCD.setColor(0, 0, 255); + myGLCD.drawRect(0, 14, 319, 225); + +// Draw crosshairs + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(159, 15, 159, 224); + myGLCD.drawLine(1, 119, 318, 119); + for (int i=9; i<310; i+=10) + myGLCD.drawLine(i, 117, i, 121); + for (int i=19; i<220; i+=10) + myGLCD.drawLine(157, i, 161, i); + +// Draw sin-, cos- and tan-lines + myGLCD.setColor(0,255,255); + myGLCD.print("Sin", 5, 15); + for (int i=1; i<318; i++) + { + myGLCD.drawPixel(i,119+(sin(((i*1.13)*3.14)/180)*95)); + } + + myGLCD.setColor(255,0,0); + myGLCD.print("Cos", 5, 27); + for (int i=1; i<318; i++) + { + myGLCD.drawPixel(i,119+(cos(((i*1.13)*3.14)/180)*95)); + } + + myGLCD.setColor(255,255,0); + myGLCD.print("Tan", 5, 39); + for (int i=1; i<318; i++) + { + myGLCD.drawPixel(i,119+(tan(((i*1.13)*3.14)/180))); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(159, 15, 159, 224); + myGLCD.drawLine(1, 119, 318, 119); + +// Draw a moving sinewave + x=1; + for (int i=1; i<(318*20); i++) + { + x++; + if (x==319) + x=1; + if (i>319) + { + if ((x==159)||(buf[x-1]==119)) + myGLCD.setColor(0,0,255); + else + myGLCD.setColor(0,0,0); + myGLCD.drawPixel(x,buf[x-1]); + } + myGLCD.setColor(0,255,255); + y=119+(sin(((i*1.1)*3.14)/180)*(90-(i / 100))); + myGLCD.drawPixel(x,y); + buf[x-1]=y; + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some filled rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRect(70+(i*20), 30+(i*20), 130+(i*20), 90+(i*20)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some filled, rounded rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRoundRect(190-(i*20), 30+(i*20), 250-(i*20), 90+(i*20)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some filled circles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillCircle(100+(i*20),60+(i*20), 30); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some lines in a pattern + myGLCD.setColor (255,0,0); + for (int i=15; i<224; i+=5) + { + myGLCD.drawLine(1, i, (i*1.44)-10, 224); + } + myGLCD.setColor (255,0,0); + for (int i=224; i>15; i-=5) + { + myGLCD.drawLine(318, i, (i*1.44)-11, 15); + } + myGLCD.setColor (0,255,255); + for (int i=224; i>15; i-=5) + { + myGLCD.drawLine(1, i, 331-(i*1.44), 15); + } + myGLCD.setColor (0,255,255); + for (int i=15; i<224; i+=5) + { + myGLCD.drawLine(318, i, 330-(i*1.44), 224); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some random circles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=32+random(256); + y=45+random(146); + r=random(30); + myGLCD.drawCircle(x, y, r); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some random rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(316); + y=16+random(207); + x2=2+random(316); + y2=16+random(207); + myGLCD.drawRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some random rounded rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(316); + y=16+random(207); + x2=2+random(316); + y2=16+random(207); + myGLCD.drawRoundRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(316); + y=16+random(209); + x2=2+random(316); + y2=16+random(209); + myGLCD.drawLine(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + + for (int i=0; i<10000; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + myGLCD.drawPixel(2+random(316), 16+random(209)); + } + + delay(2000); + + myGLCD.fillScr(0, 0, 255); + myGLCD.setColor(255, 0, 0); + myGLCD.fillRoundRect(80, 70, 239, 169); + + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("That's it!", CENTER, 93); + myGLCD.print("Restarting in a", CENTER, 119); + myGLCD.print("few seconds...", CENTER, 132); + + myGLCD.setColor(0, 255, 0); + myGLCD.setBackColor(0, 0, 255); + myGLCD.print("Runtime: (msecs)", CENTER, 210); + myGLCD.printNumI(millis(), CENTER, 225); + + delay (10000); +} + diff --git a/libraries/UTFT/examples/chipKit/UTFT_Demo_320x240_Serial/UTFT_Demo_320x240_Serial.pde b/libraries/UTFT/examples/chipKit/UTFT_Demo_320x240_Serial/UTFT_Demo_320x240_Serial.pde new file mode 100644 index 0000000..8342994 --- /dev/null +++ b/libraries/UTFT/examples/chipKit/UTFT_Demo_320x240_Serial/UTFT_Demo_320x240_Serial.pde @@ -0,0 +1,323 @@ +// UTFT_Demo_320x240_Serial (C)2014 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of how to use most of the functions +// of the library with a supported display modules. +// +// This demo was made for modules with a screen resolution +// of 320x240 pixels. +// +// This program requires the UTFT library. +// + +#include + +// Declare which fonts we will be using +extern uint8_t SmallFont[]; + +// Usage: myGLCD(, SDA, SCL, CS, RST[, RS]); +UTFT myGLCD(TFT01_22SP,9,8,12,11,10); // Remember to change the model parameter to suit your display module! + +void setup() +{ +// Just get some random numbers + randomSeed(analogRead(0)); + +// Setup the LCD + myGLCD.InitLCD(); + myGLCD.setFont(SmallFont); +} + +void loop() +{ + int buf[318]; + int x, x2; + int y, y2; + int r; + +// Clear the screen and draw the frame + myGLCD.clrScr(); + + myGLCD.setColor(255, 0, 0); + myGLCD.fillRect(0, 0, 319, 13); + myGLCD.setColor(64, 64, 64); + myGLCD.fillRect(0, 226, 319, 239); + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("* Universal Color TFT Display Library *", CENTER, 1); + myGLCD.setBackColor(64, 64, 64); + myGLCD.setColor(255,255,0); + myGLCD.print("", CENTER, 227); + + myGLCD.setColor(0, 0, 255); + myGLCD.drawRect(0, 14, 319, 225); + +// Draw crosshairs + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(159, 15, 159, 224); + myGLCD.drawLine(1, 119, 318, 119); + for (int i=9; i<310; i+=10) + myGLCD.drawLine(i, 117, i, 121); + for (int i=19; i<220; i+=10) + myGLCD.drawLine(157, i, 161, i); + +// Draw sin-, cos- and tan-lines + myGLCD.setColor(0,255,255); + myGLCD.print("Sin", 5, 15); + for (int i=1; i<318; i++) + { + myGLCD.drawPixel(i,119+(sin(((i*1.13)*3.14)/180)*95)); + } + + myGLCD.setColor(255,0,0); + myGLCD.print("Cos", 5, 27); + for (int i=1; i<318; i++) + { + myGLCD.drawPixel(i,119+(cos(((i*1.13)*3.14)/180)*95)); + } + + myGLCD.setColor(255,255,0); + myGLCD.print("Tan", 5, 39); + for (int i=1; i<318; i++) + { + myGLCD.drawPixel(i,119+(tan(((i*1.13)*3.14)/180))); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(159, 15, 159, 224); + myGLCD.drawLine(1, 119, 318, 119); + +// Draw a moving sinewave + x=1; + for (int i=1; i<(318*20); i++) + { + x++; + if (x==319) + x=1; + if (i>319) + { + if ((x==159)||(buf[x-1]==119)) + myGLCD.setColor(0,0,255); + else + myGLCD.setColor(0,0,0); + myGLCD.drawPixel(x,buf[x-1]); + } + myGLCD.setColor(0,255,255); + y=119+(sin(((i*1.1)*3.14)/180)*(90-(i / 100))); + myGLCD.drawPixel(x,y); + buf[x-1]=y; + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some filled rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRect(70+(i*20), 30+(i*20), 130+(i*20), 90+(i*20)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some filled, rounded rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRoundRect(190-(i*20), 30+(i*20), 250-(i*20), 90+(i*20)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some filled circles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillCircle(100+(i*20),60+(i*20), 30); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some lines in a pattern + myGLCD.setColor (255,0,0); + for (int i=15; i<224; i+=5) + { + myGLCD.drawLine(1, i, (i*1.44)-10, 224); + } + myGLCD.setColor (255,0,0); + for (int i=224; i>15; i-=5) + { + myGLCD.drawLine(318, i, (i*1.44)-11, 15); + } + myGLCD.setColor (0,255,255); + for (int i=224; i>15; i-=5) + { + myGLCD.drawLine(1, i, 331-(i*1.44), 15); + } + myGLCD.setColor (0,255,255); + for (int i=15; i<224; i+=5) + { + myGLCD.drawLine(318, i, 330-(i*1.44), 224); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some random circles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=32+random(256); + y=45+random(146); + r=random(30); + myGLCD.drawCircle(x, y, r); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some random rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(316); + y=16+random(207); + x2=2+random(316); + y2=16+random(207); + myGLCD.drawRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + +// Draw some random rounded rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(316); + y=16+random(207); + x2=2+random(316); + y2=16+random(207); + myGLCD.drawRoundRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(316); + y=16+random(209); + x2=2+random(316); + y2=16+random(209); + myGLCD.drawLine(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,318,224); + + for (int i=0; i<10000; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + myGLCD.drawPixel(2+random(316), 16+random(209)); + } + + delay(2000); + + myGLCD.fillScr(0, 0, 255); + myGLCD.setColor(255, 0, 0); + myGLCD.fillRoundRect(80, 70, 239, 169); + + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("That's it!", CENTER, 93); + myGLCD.print("Restarting in a", CENTER, 119); + myGLCD.print("few seconds...", CENTER, 132); + + myGLCD.setColor(0, 255, 0); + myGLCD.setBackColor(0, 0, 255); + myGLCD.print("Runtime: (msecs)", CENTER, 210); + myGLCD.printNumI(millis(), CENTER, 225); + + delay (10000); +} + diff --git a/libraries/UTFT/examples/chipKit/UTFT_Demo_400x240/UTFT_Demo_400x240.pde b/libraries/UTFT/examples/chipKit/UTFT_Demo_400x240/UTFT_Demo_400x240.pde new file mode 100644 index 0000000..0745538 --- /dev/null +++ b/libraries/UTFT/examples/chipKit/UTFT_Demo_400x240/UTFT_Demo_400x240.pde @@ -0,0 +1,330 @@ +// UTFT_Demo_400x240 (C)2014 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of how to use most of the functions +// of the library with a supported display modules. +// +// This demo was made for modules with a screen resolution +// of 400x240 pixels. +// +// This program requires the UTFT library. +// + +#include + +// Declare which fonts we will be using +extern uint8_t SmallFont[]; + +// Set the pins to the correct ones for your development shield +// ------------------------------------------------------------ +// My chipKit Uno32/uC32 shield : ,38,39,40,41 +// My chipKit Max32 shield : ,82,83,84,85 +// AquaLEDSource All in One Super Screw Shield : ,82,83,84,85 +// +// Remember to change the model parameter to suit your display module! +UTFT myGLCD(ITDB32WD,82,83,84,85); + +void setup() +{ + randomSeed(analogRead(0)); + +// Setup the LCD + myGLCD.InitLCD(); + myGLCD.setFont(SmallFont); +} + +void loop() +{ + int buf[398]; + int x, x2; + int y, y2; + int r; + +// Clear the screen and draw the frame + myGLCD.clrScr(); + + myGLCD.setColor(255, 0, 0); + myGLCD.fillRect(0, 0, 399, 13); + myGLCD.setColor(64, 64, 64); + myGLCD.fillRect(0, 226, 399, 239); + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("*** Universal Color TFT Display Library ***", CENTER, 1); + myGLCD.setBackColor(64, 64, 64); + myGLCD.setColor(255,255,0); + myGLCD.print("< http://electronics.henningkarlsen.com >", CENTER, 227); + + myGLCD.setColor(0, 0, 255); + myGLCD.drawRect(0, 14, 399, 225); + +// Draw crosshairs + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(199, 15, 199, 224); + myGLCD.drawLine(1, 119, 398, 119); + for (int i=9; i<390; i+=10) + myGLCD.drawLine(i, 117, i, 121); + for (int i=19; i<220; i+=10) + myGLCD.drawLine(197, i, 201, i); + +// Draw sin-, cos- and tan-lines + myGLCD.setColor(0,255,255); + myGLCD.print("Sin", 5, 15); + for (int i=1; i<398; i++) + { + myGLCD.drawPixel(i,119+(sin(((i*0.9)*3.14)/180)*95)); + } + + myGLCD.setColor(255,0,0); + myGLCD.print("Cos", 5, 27); + for (int i=1; i<398; i++) + { + myGLCD.drawPixel(i,119+(cos(((i*0.9)*3.14)/180)*95)); + } + + myGLCD.setColor(255,255,0); + myGLCD.print("Tan", 5, 39); + for (int i=1; i<398; i++) + { + y=119+(tan(((i*0.9)*3.14)/180)); + if ((y>15) && (y<224)) + myGLCD.drawPixel(i,y); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,398,224); + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(199, 15, 199, 224); + myGLCD.drawLine(1, 119, 398, 119); + +// Draw a moving sinewave + x=1; + for (int i=1; i<(398*20); i++) + { + x++; + if (x==399) + x=1; + if (i>399) + { + if ((x==199)||(buf[x-1]==119)) + myGLCD.setColor(0,0,255); + else + myGLCD.setColor(0,0,0); + myGLCD.drawPixel(x,buf[x-1]); + } + myGLCD.setColor(0,255,255); + y=119+(sin(((i)*3.14)/180)*(90-(i / 100))); + myGLCD.drawPixel(x,y); + buf[x-1]=y; + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,398,224); + +// Draw some filled rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRect(110+(i*20), 30+(i*20), 170+(i*20), 90+(i*20)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,398,224); + +// Draw some filled, rounded rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRoundRect(230-(i*20), 30+(i*20), 290-(i*20), 90+(i*20)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,398,224); + +// Draw some filled circles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillCircle(110+(i*30),60+(i*20), 30); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,398,224); + +// Draw some lines in a pattern + myGLCD.setColor (255,0,0); + for (int i=15; i<224; i+=5) + { + myGLCD.drawLine(1, i, (i*1.77)-10, 224); + } + myGLCD.setColor (255,0,0); + for (int i=224; i>15; i-=5) + { + myGLCD.drawLine(398, i, (i*1.77)-11, 15); + } + myGLCD.setColor (0,255,255); + for (int i=224; i>15; i-=5) + { + myGLCD.drawLine(1, i, 411-(i*1.77), 15); + } + myGLCD.setColor (0,255,255); + for (int i=15; i<224; i+=5) + { + myGLCD.drawLine(398, i, 410-(i*1.77), 224); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,398,224); + +// Draw some random circles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=32+random(336); + y=45+random(146); + r=random(30); + myGLCD.drawCircle(x, y, r); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,398,224); + +// Draw some random rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(396); + y=16+random(207); + x2=2+random(396); + y2=16+random(207); + myGLCD.drawRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,398,224); + +// Draw some random rounded rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(396); + y=16+random(207); + x2=2+random(396); + y2=16+random(207); + myGLCD.drawRoundRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,398,224); + + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(396); + y=16+random(209); + x2=2+random(396); + y2=16+random(209); + myGLCD.drawLine(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,398,224); + + for (int i=0; i<10000; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + myGLCD.drawPixel(2+random(396), 16+random(209)); + } + + delay(2000); + + myGLCD.fillScr(0, 0, 255); + myGLCD.setColor(255, 0, 0); + myGLCD.fillRoundRect(120, 70, 279, 169); + + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("That's it!", CENTER, 93); + myGLCD.print("Restarting in a", CENTER, 119); + myGLCD.print("few seconds...", CENTER, 132); + + myGLCD.setColor(0, 255, 0); + myGLCD.setBackColor(0, 0, 255); + myGLCD.print("Runtime: (msecs)", CENTER, 210); + myGLCD.printNumI(millis(), CENTER, 225); + + delay (10000); +} + diff --git a/libraries/UTFT/examples/chipKit/UTFT_Demo_480x272/UTFT_Demo_480x272.pde b/libraries/UTFT/examples/chipKit/UTFT_Demo_480x272/UTFT_Demo_480x272.pde new file mode 100644 index 0000000..ae2b2f6 --- /dev/null +++ b/libraries/UTFT/examples/chipKit/UTFT_Demo_480x272/UTFT_Demo_480x272.pde @@ -0,0 +1,327 @@ +// UTFT_Demo_480x272 (C)2014 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of how to use most of the functions +// of the library with a supported display modules. +// +// This demo was made for modules with a screen resolution +// of 480x272 pixels. +// +// This program requires the UTFT library. +// + +#include + +// Declare which fonts we will be using +extern uint8_t SmallFont[]; + +// Set the pins to the correct ones for your development shield +// ------------------------------------------------------------ +// My chipKit Uno32/uC32 shield : ,38,39,40,41 +// My chipKit Max32 shield : ,82,83,84,85 +// AquaLEDSource All in One Super Screw Shield : ,82,83,84,85 +// +// Remember to change the model parameter to suit your display module! +UTFT myGLCD(ITDB43,82,83,84,85); + +void setup() +{ + randomSeed(analogRead(0)); + +// Setup the LCD + myGLCD.InitLCD(); + myGLCD.setFont(SmallFont); +} + +void loop() +{ + int buf[478]; + int x, x2; + int y, y2; + int r; + +// Clear the screen and draw the frame + myGLCD.clrScr(); + + myGLCD.setColor(255, 0, 0); + myGLCD.fillRect(0, 0, 479, 13); + myGLCD.setColor(64, 64, 64); + myGLCD.fillRect(0, 258, 479, 271); + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("* Universal Color TFT Display Library *", CENTER, 1); + myGLCD.setBackColor(64, 64, 64); + myGLCD.setColor(255,255,0); + myGLCD.print("", CENTER, 259); + + myGLCD.setColor(0, 0, 255); + myGLCD.drawRect(0, 14, 479, 257); + +// Draw crosshairs + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(239, 15, 239, 256); + myGLCD.drawLine(1, 135, 478, 135); + for (int i=9; i<470; i+=10) + myGLCD.drawLine(i, 133, i, 138); + for (int i=15; i<256; i+=10) + myGLCD.drawLine(237, i, 241, i); + +// Draw sin-, cos- and tan-lines + myGLCD.setColor(0,255,255); + myGLCD.print("Sin", 5, 15); + for (int i=1; i<478; i++) + { + myGLCD.drawPixel(i,135+(sin(((i*1.13)*3.14)/180)*95)); + } + + myGLCD.setColor(255,0,0); + myGLCD.print("Cos", 5, 27); + for (int i=1; i<478; i++) + { + myGLCD.drawPixel(i,135+(cos(((i*1.13)*3.14)/180)*95)); + } + + myGLCD.setColor(255,255,0); + myGLCD.print("Tan", 5, 39); + for (int i=1; i<478; i++) + { + myGLCD.drawPixel(i,135+(tan(((i*1.13)*3.14)/180))); + } + + delay(2000); + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,257); + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(239, 15, 239, 256); + myGLCD.drawLine(1, 135, 478, 135); + +// Draw a moving sinewave + x=1; + for (int i=1; i<(478*20); i++) + { + x++; + if (x==479) + x=1; + if (i>479) + { + if ((x==239)||(buf[x-1]==135)) + myGLCD.setColor(0,0,255); + else + myGLCD.setColor(0,0,0); + myGLCD.drawPixel(x,buf[x-1]); + } + myGLCD.setColor(0,255,255); + y=135+(sin(((i*1.65)*3.14)/180)*(90-(i / 100))); + myGLCD.drawPixel(x,y); + buf[x-1]=y; + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,257); + +// Draw some filled rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRect(150+(i*20), 46+(i*20), 210+(i*20), 106+(i*20)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,257); + +// Draw some filled, rounded rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRoundRect(330-(i*20), 46+(i*20), 270-(i*20), 106+(i*20)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,257); + +// Draw some filled circles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillCircle(180+(i*20),75+(i*20), 30); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,257); + +// Draw some lines in a pattern + myGLCD.setColor (255,0,0); + for (int i=15; i<256; i+=5) + { + myGLCD.drawLine(1, i, (i*1.88)-10, 256); + } + myGLCD.setColor (255,0,0); + for (int i=256; i>15; i-=5) + { + myGLCD.drawLine(478, i, (i*1.88)-11, 15); + } + myGLCD.setColor (0,255,255); + for (int i=256; i>15; i-=5) + { + myGLCD.drawLine(1, i, 491-(i*1.88), 15); + } + myGLCD.setColor (0,255,255); + for (int i=15; i<256; i+=5) + { + myGLCD.drawLine(478, i, 490-(i*1.88), 256); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,257); + +// Draw some random circles + for (int i=0; i<150; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=32+random(416); + y=45+random(178); + r=random(30); + myGLCD.drawCircle(x, y, r); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,257); + +// Draw some random rectangles + for (int i=0; i<150; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(476); + y=16+random(239); + x2=2+random(476); + y2=16+random(239); + myGLCD.drawRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,257); + +// Draw some random rounded rectangles + for (int i=0; i<150; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(476); + y=16+random(239); + x2=2+random(476); + y2=16+random(239); + myGLCD.drawRoundRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,257); + + for (int i=0; i<150; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(476); + y=16+random(239); + x2=2+random(476); + y2=16+random(239); + myGLCD.drawLine(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,257); + + for (int i=0; i<10000; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + myGLCD.drawPixel(2+random(476), 16+random(239)); + } + + delay(2000); + + myGLCD.fillScr(0, 0, 255); + myGLCD.setColor(255, 0, 0); + myGLCD.fillRoundRect(160, 70, 319, 169); + + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("That's it!", CENTER, 93); + myGLCD.print("Restarting in a", CENTER, 119); + myGLCD.print("few seconds...", CENTER, 132); + + myGLCD.setColor(0, 255, 0); + myGLCD.setBackColor(0, 0, 255); + myGLCD.print("Runtime: (msecs)", CENTER, 243); + myGLCD.printNumI(millis(), CENTER, 258); + + delay (10000); +} + diff --git a/libraries/UTFT/examples/chipKit/UTFT_Demo_480x320/UTFT_Demo_480x320.pde b/libraries/UTFT/examples/chipKit/UTFT_Demo_480x320/UTFT_Demo_480x320.pde new file mode 100644 index 0000000..8d3401c --- /dev/null +++ b/libraries/UTFT/examples/chipKit/UTFT_Demo_480x320/UTFT_Demo_480x320.pde @@ -0,0 +1,328 @@ +// UTFT_Demo_480x320 (C)2014 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of how to use most of the functions +// of the library with a supported display modules. +// +// This demo was made for modules with a screen resolution +// of 480x320 pixels. +// +// This program requires the UTFT library. +// + +#include + +// Declare which fonts we will be using +extern uint8_t SmallFont[]; + +// Set the pins to the correct ones for your development shield +// ------------------------------------------------------------ +// My chipKit Uno32/uC32 shield : ,38,39,40,41 +// My chipKit Max32 shield : ,82,83,84,85 +// AquaLEDSource All in One Super Screw Shield : ,82,83,84,85 +// +// Remember to change the model parameter to suit your display module! +UTFT myGLCD(CTE32HR,82,83,84,85); + +void setup() +{ + randomSeed(analogRead(0)); + +// Setup the LCD + myGLCD.InitLCD(); + myGLCD.setFont(SmallFont); +} + +void loop() +{ + int buf[478]; + int x, x2; + int y, y2; + int r; + +// Clear the screen and draw the frame + myGLCD.clrScr(); + + myGLCD.setColor(255, 0, 0); + myGLCD.fillRect(0, 0, 479, 13); + myGLCD.setColor(64, 64, 64); + myGLCD.fillRect(0, 306, 479, 319); + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("* Universal Color TFT Display Library *", CENTER, 1); + myGLCD.setBackColor(64, 64, 64); + myGLCD.setColor(255,255,0); + myGLCD.print("", CENTER, 307); + + myGLCD.setColor(0, 0, 255); + myGLCD.drawRect(0, 14, 479, 305); + +// Draw crosshairs + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(239, 15, 239, 304); + myGLCD.drawLine(1, 159, 478, 159); + for (int i=9; i<470; i+=10) + myGLCD.drawLine(i, 157, i, 161); + for (int i=19; i<220; i+=10) + myGLCD.drawLine(237, i, 241, i); + +// Draw sin-, cos- and tan-lines + myGLCD.setColor(0,255,255); + myGLCD.print("Sin", 5, 15); + for (int i=1; i<478; i++) + { + myGLCD.drawPixel(i,159+(sin(((i*1.13)*3.14)/180)*95)); + } + + myGLCD.setColor(255,0,0); + myGLCD.print("Cos", 5, 27); + for (int i=1; i<478; i++) + { + myGLCD.drawPixel(i,159+(cos(((i*1.13)*3.14)/180)*95)); + } + + myGLCD.setColor(255,255,0); + myGLCD.print("Tan", 5, 39); + for (int i=1; i<478; i++) + { + myGLCD.drawPixel(i,159+(tan(((i*1.13)*3.14)/180))); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,304); + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(239, 15, 239, 304); + myGLCD.drawLine(1, 159, 478, 159); + +// Draw a moving sinewave + x=1; + for (int i=1; i<(478*15); i++) + { + x++; + if (x==479) + x=1; + if (i>479) + { + if ((x==239)||(buf[x-1]==159)) + myGLCD.setColor(0,0,255); + else + myGLCD.setColor(0,0,0); + myGLCD.drawPixel(x,buf[x-1]); + } + myGLCD.setColor(0,255,255); + y=159+(sin(((i*0.7)*3.14)/180)*(90-(i / 100))); + myGLCD.drawPixel(x,y); + buf[x-1]=y; + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,304); + +// Draw some filled rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRect(150+(i*20), 70+(i*20), 210+(i*20), 130+(i*20)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,304); + +// Draw some filled, rounded rectangles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillRoundRect(270-(i*20), 70+(i*20), 330-(i*20), 130+(i*20)); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,304); + +// Draw some filled circles + for (int i=1; i<6; i++) + { + switch (i) + { + case 1: + myGLCD.setColor(255,0,255); + break; + case 2: + myGLCD.setColor(255,0,0); + break; + case 3: + myGLCD.setColor(0,255,0); + break; + case 4: + myGLCD.setColor(0,0,255); + break; + case 5: + myGLCD.setColor(255,255,0); + break; + } + myGLCD.fillCircle(180+(i*20),100+(i*20), 30); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,304); + +// Draw some lines in a pattern + myGLCD.setColor (255,0,0); + for (int i=15; i<304; i+=5) + { + myGLCD.drawLine(1, i, (i*1.6)-10, 304); + } + myGLCD.setColor (255,0,0); + for (int i=304; i>15; i-=5) + { + myGLCD.drawLine(478, i, (i*1.6)-11, 15); + } + myGLCD.setColor (0,255,255); + for (int i=304; i>15; i-=5) + { + myGLCD.drawLine(1, i, 491-(i*1.6), 15); + } + myGLCD.setColor (0,255,255); + for (int i=15; i<304; i+=5) + { + myGLCD.drawLine(478, i, 490-(i*1.6), 304); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,304); + +// Draw some random circles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=32+random(416); + y=45+random(226); + r=random(30); + myGLCD.drawCircle(x, y, r); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,304); + +// Draw some random rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(476); + y=16+random(289); + x2=2+random(476); + y2=16+random(289); + myGLCD.drawRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,304); + +// Draw some random rounded rectangles + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(476); + y=16+random(289); + x2=2+random(476); + y2=16+random(289); + myGLCD.drawRoundRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,304); + + for (int i=0; i<100; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(476); + y=16+random(289); + x2=2+random(476); + y2=16+random(289); + myGLCD.drawLine(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,478,304); + + for (int i=0; i<10000; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + myGLCD.drawPixel(2+random(476), 16+random(289)); + } + + delay(2000); + + myGLCD.fillScr(0, 0, 255); + myGLCD.setColor(255, 0, 0); + myGLCD.fillRoundRect(160, 70, 319, 169); + + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("That's it!", CENTER, 93); + myGLCD.print("Restarting in a", CENTER, 119); + myGLCD.print("few seconds...", CENTER, 132); + + myGLCD.setColor(0, 255, 0); + myGLCD.setBackColor(0, 0, 255); + myGLCD.print("Runtime: (msecs)", CENTER, 290); + myGLCD.printNumI(millis(), CENTER, 305); + + delay (10000); +} + diff --git a/libraries/UTFT/examples/chipKit/UTFT_Demo_800x480/UTFT_Demo_800x480.pde b/libraries/UTFT/examples/chipKit/UTFT_Demo_800x480/UTFT_Demo_800x480.pde new file mode 100644 index 0000000..e12bf71 --- /dev/null +++ b/libraries/UTFT/examples/chipKit/UTFT_Demo_800x480/UTFT_Demo_800x480.pde @@ -0,0 +1,287 @@ +// UTFT_Demo_800x480 (C)2014 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of how to use most of the functions +// of the library with a supported display modules. +// +// This demo was made for modules with a screen resolution +// of 800x480 pixels. +// +// This program requires the UTFT library. +// + +#include + +// Declare which fonts we will be using +extern uint8_t SmallFont[]; + +// Set the pins to the correct ones for your development shield +// ------------------------------------------------------------ +// My chipKit Uno32/uC32 shield : ,38,39,40,41 +// My chipKit Max32 shield : ,82,83,84,85 +// AquaLEDSource All in One Super Screw Shield : ,82,83,84,85 +// +// Remember to change the model parameter to suit your display module! +UTFT myGLCD(ITDB50,82,83,84,85); + +void setup() +{ + randomSeed(analogRead(0)); + +// Setup the LCD + myGLCD.InitLCD(); + myGLCD.setFont(SmallFont); +} + +void loop() +{ + int buf[798]; + int x, x2; + int y, y2; + int r; + +// Clear the screen and draw the frame + myGLCD.clrScr(); + + myGLCD.setColor(255, 0, 0); + myGLCD.fillRect(0, 0, 799, 13); + myGLCD.setColor(64, 64, 64); + myGLCD.fillRect(0, 466, 799, 479); + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("* Universal Color TFT Display Library *", CENTER, 1); + myGLCD.setBackColor(64, 64, 64); + myGLCD.setColor(255,255,0); + myGLCD.print("", CENTER, 467); + + myGLCD.setColor(0, 0, 255); + myGLCD.drawRect(0, 14, 799, 465); + +// Draw crosshairs + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(399, 15, 399, 464); + myGLCD.drawLine(1, 239, 798, 239); + for (int i=9; i<790; i+=10) + myGLCD.drawLine(i, 237, i, 242); + for (int i=19; i<470; i+=10) + myGLCD.drawLine(397, i, 402, i); + +// Draw sin-, cos- and tan-lines + myGLCD.setColor(0,255,255); + myGLCD.print("Sin", 5, 15); + for (int i=1; i<798; i++) + { + myGLCD.drawPixel(i,239+(sin(((i*1.13)*3.14)/180)*200)); + } + + myGLCD.setColor(255,0,0); + myGLCD.print("Cos", 5, 27); + for (int i=1; i<798; i++) + { + myGLCD.drawPixel(i,239+(cos(((i*1.13)*3.14)/180)*200)); + } + + myGLCD.setColor(255,255,0); + myGLCD.print("Tan", 5, 39); + for (int i=1; i<798; i++) + { + myGLCD.drawPixel(i,239+(tan(((i*0.9)*3.14)/180))); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,798,464); + myGLCD.setColor(0, 0, 255); + myGLCD.setBackColor(0, 0, 0); + myGLCD.drawLine(399, 15, 399, 464); + myGLCD.drawLine(1, 239, 798, 239); + +// Draw a moving sinewave + x=1; + for (int i=1; i<(798*20); i++) + { + x++; + if (x==799) + x=1; + if (i>799) + { + if ((x==399)||(buf[x-1]==239)) + myGLCD.setColor(0,0,255); + else + myGLCD.setColor(0,0,0); + myGLCD.drawPixel(x,buf[x-1]); + } + myGLCD.setColor(0,255,255); + y=239+(sin(((i*1.65)*3.14)/180)*(200-(i / 100))); + myGLCD.drawPixel(x,y); + buf[x-1]=y; + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,798,464); + +// Draw some random filled rectangles + for (int i=0; i<50; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(746); + y=16+random(397); + x2=x+50; + y2=y+50; + myGLCD.fillRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,798,464); + +// Draw some random filled, rounded rectangles + for (int i=0; i<50; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(746); + y=16+random(397); + x2=x+50; + y2=y+50; + myGLCD.fillRoundRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,798,464); + +// Draw some random filled circles + for (int i=0; i<50; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=27+random(746); + y=41+random(397); + myGLCD.fillCircle(x, y, 25); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,798,464); + +// Draw some lines in a pattern + myGLCD.setColor (255,0,0); + for (int i=15; i<463; i+=5) + { + myGLCD.drawLine(1, i, (i*1.66)-10, 463); + } + myGLCD.setColor (255,0,0); + for (int i=463; i>15; i-=5) + { + myGLCD.drawLine(798, i, (i*1.66)+30, 15); + } + myGLCD.setColor (0,255,255); + for (int i=463; i>15; i-=5) + { + myGLCD.drawLine(1, i, 770-(i*1.66), 15); + } + myGLCD.setColor (0,255,255); + for (int i=15; i<463; i+=5) + { + myGLCD.drawLine(798, i, 810-(i*1.66), 463); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,798,464); + +// Draw some random circles + for (int i=0; i<250; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=32+random(736); + y=45+random(386); + r=random(30); + myGLCD.drawCircle(x, y, r); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,798,464); + +// Draw some random rectangles + for (int i=0; i<250; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(796); + y=16+random(447); + x2=2+random(796); + y2=16+random(447); + myGLCD.drawRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,798,464); + +// Draw some random rounded rectangles + for (int i=0; i<250; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(796); + y=16+random(447); + x2=2+random(796); + y2=16+random(447); + myGLCD.drawRoundRect(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,798,464); + + for (int i=0; i<250; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + x=2+random(796); + y=16+random(447); + x2=2+random(796); + y2=16+random(447); + myGLCD.drawLine(x, y, x2, y2); + } + + delay(2000); + + myGLCD.setColor(0,0,0); + myGLCD.fillRect(1,15,798,464); + + for (int i=0; i<10000; i++) + { + myGLCD.setColor(random(255), random(255), random(255)); + myGLCD.drawPixel(2+random(796), 16+random(447)); + } + + delay(2000); + + myGLCD.fillScr(0, 0, 255); + myGLCD.setColor(255, 0, 0); + myGLCD.fillRoundRect(320, 190, 479, 289); + + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("That's it!", CENTER, 213); + myGLCD.print("Restarting in a", CENTER, 239); + myGLCD.print("few seconds...", CENTER, 252); + + myGLCD.setColor(0, 255, 0); + myGLCD.setBackColor(0, 0, 255); + myGLCD.print("Runtime: (msecs)", CENTER, 450); + myGLCD.printNumI(millis(), CENTER, 465); + + delay (10000); +} + diff --git a/libraries/UTFT/examples/chipKit/UTFT_Rotate_Bitmap/UTFT_Rotate_Bitmap.pde b/libraries/UTFT/examples/chipKit/UTFT_Rotate_Bitmap/UTFT_Rotate_Bitmap.pde new file mode 100644 index 0000000..0d3453a --- /dev/null +++ b/libraries/UTFT/examples/chipKit/UTFT_Rotate_Bitmap/UTFT_Rotate_Bitmap.pde @@ -0,0 +1,36 @@ +// UTFT_Rotate_Bitmap (C)2014 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of the drawBitmap()-function. +// +// This program requires the UTFT library. +// + +#include + +// Set the pins to the correct ones for your development shield +// ------------------------------------------------------------ +// My chipKit Uno32/uC32 shield : ,38,39,40,41 +// My chipKit Max32 shield : ,82,83,84,85 +// AquaLEDSource All in One Super Screw Shield : ,82,83,84,85 +// +// Remember to change the model parameter to suit your display module! +UTFT myGLCD(ITDB32S,82,83,84,85); + +extern unsigned short biohazard[0x1000]; + +void setup() +{ + myGLCD.InitLCD(LANDSCAPE); + myGLCD.fillScr(255, 255, 255); + myGLCD.setColor(0, 0, 0); +} + +void loop() +{ + for (int i=0; i<360; i+=5) + { + myGLCD.drawBitmap (10, 10, 64, 64, biohazard, i, 32, 32); + } +} + diff --git a/libraries/UTFT/examples/chipKit/UTFT_Rotate_Bitmap/biohazard.c b/libraries/UTFT/examples/chipKit/UTFT_Rotate_Bitmap/biohazard.c new file mode 100644 index 0000000..ca1348d --- /dev/null +++ b/libraries/UTFT/examples/chipKit/UTFT_Rotate_Bitmap/biohazard.c @@ -0,0 +1,264 @@ +// Generated by : ImageConverter 565 v1.0 +// Generated from: biohazard1_L.png +// Time generated: 12.06.2011 00:23:59 +// Dimensions : 64x64 pixels +// Size : 8 192 Bytes + +const unsigned short biohazard[0x1000] ={ +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0010 (16) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7D, 0xC638, 0x9492, 0x6B4D, 0x4228, 0x2945, 0x2124, 0x18C3, 0x1082, // 0x0020 (32) +0x1082, 0x10A2, 0x18C3, 0x2124, 0x2965, 0x4A49, 0x6B6D, 0x9CD3, 0xCE79, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0030 (48) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0040 (64) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0050 (80) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0xBDD7, 0x6B6D, 0x2965, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0060 (96) +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0x31A6, 0x73AE, 0xC618, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0070 (112) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0080 (128) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0090 (144) +0xFFFF, 0xFFFF, 0xE73C, 0x8C71, 0x3186, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0020, 0x0020, 0x0000, 0x0000, // 0x00A0 (160) +0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x4207, 0x9CF3, 0xF79E, 0xFFFF, // 0x00B0 (176) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00C0 (192) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00D0 (208) +0xEF7D, 0x8C51, 0x2104, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x00E0 (224) +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x2965, 0x9CD3, // 0x00F0 (240) +0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0100 (256) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xAD75, // 0x0110 (272) +0x2965, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0020, 0x2901, 0x5241, 0x7B41, 0x9C02, 0xACA2, 0xBD02, // 0x0120 (288) +0xC521, 0xBD02, 0xACA2, 0x9C22, 0x7B41, 0x5241, 0x2901, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0130 (304) +0x39E7, 0xC618, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0140 (320) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xEF5D, 0x630C, 0x0000, // 0x0150 (336) +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x41C1, 0x93E1, 0xD5A1, 0xFEA1, 0xFF01, 0xFF20, 0xFF20, 0xFF20, 0xFF00, // 0x0160 (352) +0xFF00, 0xFF00, 0xFF20, 0xFF20, 0xFF20, 0xFF01, 0xFEA1, 0xD5A1, 0x93E1, 0x49E1, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0170 (368) +0x0000, 0x0841, 0x7BEF, 0xF7BE, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0180 (384) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xC638, 0x2965, 0x0000, 0x0000, // 0x0190 (400) +0x0000, 0x0000, 0x0000, 0x0000, 0x18A0, 0x7B41, 0xD5A1, 0xFF01, 0xFF20, 0xFEE0, 0xFEC0, 0xFEA0, 0xF680, 0xF680, 0xFEA0, 0xFEA0, // 0x01A0 (416) +0xFEA0, 0xFEA0, 0xFEA0, 0xF680, 0xF680, 0xFEA0, 0xFEC0, 0xFF00, 0xFF20, 0xFF01, 0xD5A1, 0x7B41, 0x1880, 0x0000, 0x0000, 0x0000, // 0x01B0 (432) +0x0000, 0x0000, 0x0000, 0x4208, 0xDEDB, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01C0 (448) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xAD55, 0x1082, 0x0000, 0x0000, 0x0000, // 0x01D0 (464) +0x0000, 0x0000, 0x0840, 0x7B62, 0xEE41, 0xFF21, 0xFEE0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFF20, 0xFF20, 0xFEA1, 0xFEC0, // 0x01E0 (480) +0xFEC0, 0xFEC0, 0xFEA1, 0xFF00, 0xFF20, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEE0, 0xFF21, 0xEE41, 0x7B62, 0x0840, 0x0000, // 0x01F0 (496) +0x0000, 0x0000, 0x0000, 0x0000, 0x18E3, 0xC618, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0200 (512) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x94B2, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0210 (528) +0x0000, 0x5201, 0xDDE1, 0xFF21, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFF40, 0xF6A1, 0xB4C1, 0x7322, 0xA441, 0xFEE0, // 0x0220 (544) +0xFEA0, 0xFEE0, 0xA461, 0x7322, 0xACA1, 0xF681, 0xFF40, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFF21, 0xDDE2, 0x4A01, // 0x0230 (560) +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1082, 0xB596, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0240 (576) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x9492, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0820, // 0x0250 (592) +0x9402, 0xFF01, 0xFEE0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEE0, 0xFF01, 0x9401, 0x3961, 0x7341, 0xCD81, 0xF680, 0xFEC0, // 0x0260 (608) +0xFEA0, 0xFEC0, 0xF681, 0xCD81, 0x7B61, 0x3961, 0x8BE1, 0xFEE1, 0xFEE0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEE0, 0xFF01, // 0x0270 (624) +0x9402, 0x0820, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0xB596, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0280 (640) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xA534, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x20C0, 0xCD61, // 0x0290 (656) +0xFF40, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFF01, 0xE621, 0x39A1, 0x20E1, 0xCD81, 0xFF40, 0xFEE0, 0xFEC0, 0xFEC0, // 0x02A0 (672) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEE0, 0xFF41, 0xCDC1, 0x2901, 0x3961, 0xDE01, 0xFF00, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEA0, // 0x02B0 (688) +0xFF21, 0xC561, 0x18A1, 0x0000, 0x0000, 0x0000, 0x0000, 0x1082, 0xC618, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02C0 (704) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xC618, 0x0861, 0x0000, 0x0000, 0x0000, 0x0000, 0x3121, 0xDE01, 0xFF00, // 0x02D0 (720) +0xFE80, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF01, 0xD5A2, 0x18A0, 0x20E0, 0xF682, 0xFF01, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, // 0x02E0 (736) +0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFF00, 0xF6A1, 0x2920, 0x1080, 0xCDA2, 0xFF01, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x02F0 (752) +0xFE80, 0xFF00, 0xDE01, 0x2921, 0x0000, 0x0000, 0x0000, 0x0000, 0x18E3, 0xDEDB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0300 (768) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE73C, 0x2124, 0x0000, 0x0000, 0x0000, 0x0000, 0x2921, 0xEE41, 0xFF00, 0xFEA0, // 0x0310 (784) +0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEE0, 0xDE02, 0x18A1, 0x0840, 0xDDE1, 0xFF00, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEC0, // 0x0320 (800) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEE0, 0xE621, 0x0860, 0x1880, 0xD5E2, 0xFEE0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0330 (816) +0xFEA0, 0xFEA0, 0xFF00, 0xE641, 0x2921, 0x0000, 0x0000, 0x0000, 0x0000, 0x4208, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0340 (832) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x5ACB, 0x0000, 0x0000, 0x0000, 0x0000, 0x18C0, 0xDE21, 0xFF00, 0xFEA0, 0xFEC0, // 0x0350 (848) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC1, 0x39A1, 0x0000, 0x8382, 0xFF21, 0xFE80, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0360 (864) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFE80, 0xFF20, 0x8BC1, 0x0000, 0x3161, 0xF6A1, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0370 (880) +0xFEC0, 0xFEC0, 0xFEA0, 0xFF00, 0xDE01, 0x18A0, 0x0000, 0x0000, 0x0000, 0x0000, 0x7BCF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0380 (896) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xA534, 0x0000, 0x0000, 0x0000, 0x0000, 0x0820, 0xCD61, 0xFF00, 0xFEA0, 0xFEC0, 0xFEC0, // 0x0390 (912) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF21, 0x93E1, 0x0000, 0x1060, 0xDE01, 0xFEE0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x03A0 (928) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEE0, 0xE621, 0x1080, 0x0000, 0x8BA1, 0xFF20, 0xFEA0, 0xFEC0, 0xFEC0, // 0x03B0 (944) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF00, 0xCD61, 0x0820, 0x0000, 0x0000, 0x0000, 0x0021, 0xBDF7, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03C0 (960) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF5D, 0x2104, 0x0000, 0x0000, 0x0000, 0x0000, 0x9402, 0xFF41, 0xFE80, 0xFEA0, 0xFEC0, 0xFEC0, // 0x03D0 (976) +0xFEC0, 0xFEC0, 0xFEA0, 0xFEC0, 0xF681, 0x20E0, 0x0000, 0x41A1, 0xFEE1, 0xFEA0, 0xFEA1, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x03E0 (992) +0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFF01, 0x49E1, 0x0000, 0x18A1, 0xEE41, 0xFEC0, 0xFEA0, 0xFEC0, // 0x03F0 (1008) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFE80, 0xFF41, 0x9402, 0x0000, 0x0000, 0x0000, 0x0000, 0x39C7, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x7BCF, 0x0000, 0x0000, 0x0000, 0x0000, 0x4A01, 0xFF01, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0410 (1040) +0xFEC0, 0xFEC0, 0xFEA0, 0xFF20, 0xA461, 0x0000, 0x0000, 0x6AC1, 0xFF21, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, // 0x0420 (1056) +0xFEE0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFE80, 0xFF20, 0x7300, 0x0000, 0x0000, 0x9C21, 0xFF20, 0xFEA0, 0xFEC0, // 0x0430 (1072) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFF01, 0x49E1, 0x0000, 0x0000, 0x0000, 0x0000, 0x9CD3, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0440 (1088) +0xFFFF, 0xFFFF, 0xFFFF, 0xDEFB, 0x10A2, 0x0000, 0x0000, 0x0000, 0x0840, 0xDDE1, 0xFEE0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0450 (1104) +0xFEA0, 0xFEA0, 0xFEA0, 0xFF20, 0x6261, 0x0000, 0x0000, 0x7300, 0xFF21, 0xF6A0, 0xFEA0, 0xFEE0, 0xFF20, 0xFF00, 0xFEA1, 0xEE42, // 0x0460 (1120) +0xE602, 0xEE42, 0xFEA1, 0xFF00, 0xFF20, 0xFEE0, 0xFEA0, 0xF681, 0xFF40, 0x8360, 0x0000, 0x0000, 0x5241, 0xFF01, 0xFEA0, 0xFEA0, // 0x0470 (1136) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF00, 0xDDC1, 0x0840, 0x0000, 0x0000, 0x0000, 0x2945, 0xEF7D, 0xFFFF, 0xFFFF, // 0x0480 (1152) +0xFFFF, 0xFFDF, 0xFFFF, 0x7BEF, 0x0000, 0x0000, 0x0000, 0x0000, 0x7B42, 0xFF21, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0490 (1168) +0xFEC0, 0xFEA0, 0xFEC0, 0xFEA0, 0x2900, 0x0000, 0x0000, 0x6AE0, 0xFF21, 0xFEC0, 0xFF01, 0xDE01, 0x9C01, 0x5241, 0x2921, 0x18A1, // 0x04A0 (1184) +0x1061, 0x1881, 0x2921, 0x5241, 0x9C02, 0xDDE1, 0xFF21, 0xFEC0, 0xFF20, 0x7321, 0x0000, 0x0000, 0x20E0, 0xF681, 0xFEC0, 0xFEA0, // 0x04B0 (1200) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF21, 0x7B41, 0x0000, 0x0000, 0x0000, 0x0000, 0x9CD3, 0xFFFF, 0xFFDF, // 0x04C0 (1216) +0xFFDF, 0xFFFF, 0xEF7D, 0x2104, 0x0000, 0x0000, 0x0000, 0x1080, 0xEE41, 0xFEE0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x04D0 (1232) +0xFEC0, 0xFEA0, 0xFEC0, 0xEE21, 0x1060, 0x0000, 0x0000, 0x41C1, 0xFF21, 0xDDE1, 0x6AC1, 0x0860, 0x0000, 0x0000, 0x0000, 0x0000, // 0x04E0 (1248) +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0860, 0x62C1, 0xDDC1, 0xFF41, 0x49E1, 0x0000, 0x0000, 0x0840, 0xE601, 0xFEE0, 0xFEA0, // 0x04F0 (1264) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEC0, 0xEE41, 0x1080, 0x0000, 0x0000, 0x0000, 0x39C7, 0xF7BE, 0xFFFF, // 0x0500 (1280) +0xFFDF, 0xFFFF, 0xA534, 0x0000, 0x0000, 0x0000, 0x0000, 0x7B21, 0xFF21, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0510 (1296) +0xFEA0, 0xFEA0, 0xFEE0, 0xE602, 0x0841, 0x0000, 0x0000, 0x1080, 0xACC2, 0x1060, 0x0000, 0x0000, 0x0000, 0x0020, 0x2920, 0x4A01, // 0x0520 (1312) +0x5241, 0x4A01, 0x3140, 0x0821, 0x0000, 0x0000, 0x0000, 0x0860, 0xACA2, 0x18A0, 0x0000, 0x0000, 0x0820, 0xDDE2, 0xFEE0, 0xFEA0, // 0x0530 (1328) +0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFE80, 0xFF21, 0x7321, 0x0000, 0x0000, 0x0000, 0x0020, 0xC618, 0xFFFF, // 0x0540 (1344) +0xFFFF, 0xFFFF, 0x52AA, 0x0000, 0x0020, 0x0000, 0x0820, 0xDDA1, 0xFEE0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0550 (1360) +0xFEC0, 0xFEA0, 0xFEE0, 0xE621, 0x1060, 0x0000, 0x0000, 0x0000, 0x6AE2, 0x20C1, 0x0000, 0x20E1, 0x8BA2, 0xD5A1, 0xFEA1, 0xFF00, // 0x0560 (1376) +0xFF01, 0xFF00, 0xFEC1, 0xD5C1, 0x8BC2, 0x2901, 0x0000, 0x18A1, 0x7302, 0x0000, 0x0000, 0x0000, 0x0840, 0xDE01, 0xFEE0, 0xFEA0, // 0x0570 (1392) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEE0, 0xD5A1, 0x0020, 0x0000, 0x0000, 0x0000, 0x738E, 0xFFFF, // 0x0580 (1408) +0xFFFF, 0xE71C, 0x18C3, 0x0000, 0x0020, 0x0000, 0x49C1, 0xFF01, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0590 (1424) +0xFEA0, 0xFEA0, 0xFEC0, 0xF661, 0x18A0, 0x0000, 0x0000, 0x0000, 0x2101, 0x8363, 0x7321, 0xEE81, 0xFF21, 0xFEE0, 0xFEC0, 0xFEA0, // 0x05A0 (1440) +0xFEA0, 0xFEA0, 0xFEC0, 0xFEE0, 0xFF20, 0xF681, 0x7B41, 0x8362, 0x2921, 0x0000, 0x0000, 0x0000, 0x1080, 0xEE41, 0xFEC0, 0xFEA0, // 0x05B0 (1456) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFF01, 0x41C1, 0x0000, 0x0020, 0x0000, 0x3186, 0xF79E, // 0x05C0 (1472) +0xFFFF, 0xAD75, 0x0000, 0x0000, 0x0020, 0x0000, 0x93E1, 0xFF20, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEC0, // 0x05D0 (1488) +0xFEC0, 0xFEA0, 0xFEA0, 0xFF41, 0x5221, 0x0000, 0x0000, 0x0000, 0x0000, 0x41C1, 0xFF01, 0xFF00, 0xF660, 0xFEA0, 0xFEA0, 0xFEC0, // 0x05E0 (1504) +0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xF660, 0xFF00, 0xFF22, 0x49E1, 0x0000, 0x0000, 0x0000, 0x0000, 0x49E1, 0xFF40, 0xFEA0, 0xFEA0, // 0x05F0 (1520) +0xFEA1, 0xFEC0, 0xFEA1, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF20, 0x93E1, 0x0000, 0x0020, 0x0000, 0x0020, 0xC638, // 0x0600 (1536) +0xFFFF, 0x73AE, 0x0000, 0x0000, 0x0000, 0x0020, 0xD5A1, 0xFF00, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA1, 0xFEA0, // 0x0610 (1552) +0xFEA1, 0xFF20, 0xFEC1, 0xD5C1, 0x5220, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0x3981, 0xE622, 0xFF20, 0xFEC0, 0xFEA0, 0xFEA0, // 0x0620 (1568) +0xFEC0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFF21, 0xE621, 0x41C1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x49E0, 0xCDA2, 0xFEA1, 0xFF20, // 0x0630 (1584) +0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF00, 0xD5A1, 0x0020, 0x0000, 0x0000, 0x0000, 0x9492, // 0x0640 (1600) +0xFFFF, 0x4A49, 0x0000, 0x0020, 0x0000, 0x2901, 0xFEA1, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEE0, // 0x0650 (1616) +0xFEE1, 0xA461, 0x3981, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1881, 0x93E1, 0xE622, 0xFF01, 0xFF00, // 0x0660 (1632) +0xFEA0, 0xFF00, 0xFF21, 0xEE41, 0x9401, 0x18A1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3141, 0x9C21, // 0x0670 (1648) +0xFEC1, 0xFEE0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEC0, 0xFEA1, 0x2901, 0x0000, 0x0020, 0x0000, 0x632C, // 0x0680 (1664) +0xE71C, 0x2124, 0x0000, 0x0020, 0x0000, 0x5241, 0xFF01, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFF00, 0xD5C1, // 0x0690 (1680) +0x41C1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1081, 0x4A01, 0xAC81, // 0x06A0 (1696) +0xFF21, 0xB4C1, 0x5221, 0x1081, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x06B0 (1712) +0x3981, 0xCD81, 0xFF21, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF01, 0x5221, 0x0000, 0x0020, 0x0000, 0x4228, // 0x06C0 (1728) +0xBDF7, 0x18C3, 0x0000, 0x0020, 0x0000, 0x7B41, 0xFF20, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFF20, 0xBD02, 0x1060, // 0x06D0 (1744) +0x0000, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5201, // 0x06E0 (1760) +0xFFC0, 0x5A41, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, // 0x06F0 (1776) +0x0000, 0x0840, 0xACA1, 0xFF21, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF20, 0x7B41, 0x0000, 0x0020, 0x0000, 0x2945, // 0x0700 (1792) +0x94B2, 0x0861, 0x0000, 0x0000, 0x0000, 0x9C02, 0xFF20, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF00, 0xBD22, 0x0820, 0x0000, // 0x0710 (1808) +0x0820, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1881, 0xAC81, // 0x0720 (1824) +0xFF20, 0xB4A1, 0x18A1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0730 (1840) +0x0020, 0x0000, 0x0000, 0xB4C2, 0xFF00, 0xFE80, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF20, 0x9C02, 0x0000, 0x0020, 0x0000, 0x2104, // 0x0740 (1856) +0x73AE, 0x0841, 0x0000, 0x0000, 0x0000, 0xACA2, 0xFF20, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEE0, 0xE622, 0x18A1, 0x0000, 0x0000, // 0x0750 (1872) +0x0000, 0x1080, 0x5221, 0x6B03, 0x6AE2, 0x6AE3, 0x4A01, 0x1080, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1061, 0xCD82, 0xFF20, // 0x0760 (1888) +0xFE80, 0xFF20, 0xD5C2, 0x1881, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1080, 0x5241, 0x6AE3, 0x6AE2, 0x6AE3, 0x5A62, 0x18C0, // 0x0770 (1904) +0x0000, 0x0000, 0x0000, 0x1060, 0xDDE2, 0xFEE0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFF20, 0xACA2, 0x0000, 0x0000, 0x0000, 0x10A2, // 0x0780 (1920) +0x52AA, 0x0000, 0x0000, 0x0000, 0x0000, 0xBD02, 0xFF00, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF01, 0x5A61, 0x0000, 0x0000, 0x18A0, // 0x0790 (1936) +0x9401, 0xEE61, 0xFEE2, 0x49E2, 0x18A1, 0x62A1, 0xFF41, 0xE621, 0x8BC2, 0x1880, 0x0000, 0x0820, 0x0000, 0x7B21, 0xFF40, 0xFE80, // 0x07A0 (1952) +0xFEC0, 0xFE80, 0xFF40, 0x8381, 0x0000, 0x0820, 0x0000, 0x1080, 0x8BE2, 0xEE41, 0xFF41, 0x62A2, 0x10A1, 0x3982, 0xFEC2, 0xF6A1, // 0x07B0 (1968) +0xA462, 0x2101, 0x0000, 0x0000, 0x49E1, 0xFF01, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF00, 0xBD02, 0x0000, 0x0000, 0x0000, 0x1082, // 0x07C0 (1984) +0x528A, 0x0000, 0x0000, 0x0000, 0x0000, 0xC521, 0xFF00, 0xFEA0, 0xFEC0, 0xFEA0, 0xFF00, 0xCD41, 0x0000, 0x0000, 0x49C1, 0xE642, // 0x07D0 (2000) +0xFF21, 0xFEE0, 0xEE42, 0x1081, 0x0000, 0x41A0, 0xFEE0, 0xFEC0, 0xFF40, 0xE621, 0x41A1, 0x0000, 0x0000, 0x93E1, 0xFF20, 0xFEA0, // 0x07E0 (2016) +0xFEA0, 0xFEA0, 0xFF20, 0x9C22, 0x0000, 0x0000, 0x3981, 0xDE01, 0xFF21, 0xFEC0, 0xFEE1, 0x49E1, 0x0000, 0x0840, 0xE602, 0xFEC0, // 0x07F0 (2032) +0xFF20, 0xEE81, 0x5A61, 0x0000, 0x0000, 0xBCE1, 0xFF00, 0xFEA0, 0xFEC0, 0xFEA0, 0xFF00, 0xC521, 0x0000, 0x0000, 0x0000, 0x1082, // 0x0800 (2048) +0x52AA, 0x0000, 0x0000, 0x0000, 0x0000, 0xBD02, 0xFF00, 0xFEA0, 0xFEA0, 0xFEA0, 0xFF20, 0x6AC1, 0x0000, 0x49E1, 0xFEE2, 0xFEE0, // 0x0810 (2064) +0xFE80, 0xFEC0, 0xF682, 0x20E1, 0x0000, 0x39A0, 0xFEE0, 0xFEA0, 0xFE80, 0xFEE0, 0xF6A2, 0x41A1, 0x3961, 0xDDC1, 0xFF00, 0xFE80, // 0x0820 (2080) +0xFEA0, 0xFEA0, 0xFF00, 0xE601, 0x41C1, 0x3981, 0xF682, 0xFF00, 0xFE80, 0xFEA0, 0xFF00, 0x41C1, 0x0000, 0x20C1, 0xF661, 0xFEC0, // 0x0830 (2096) +0xF6A0, 0xFEC0, 0xFF01, 0x6261, 0x0000, 0x5A41, 0xFF01, 0xFEA0, 0xFEC0, 0xFEA0, 0xFF00, 0xBD02, 0x0000, 0x0000, 0x0000, 0x1082, // 0x0840 (2112) +0x738E, 0x0841, 0x0000, 0x0000, 0x0000, 0xACA2, 0xFF20, 0xFEA0, 0xFEA0, 0xFEC0, 0xF681, 0x18A0, 0x1080, 0xEE41, 0xFEE0, 0xFEA0, // 0x0850 (2128) +0xFEC0, 0xFEA0, 0xFEE1, 0x3980, 0x0000, 0x20C0, 0xF662, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEE0, 0xF681, 0xFEE1, 0xFF01, 0xDDC1, 0xFF21, // 0x0860 (2144) +0xFF20, 0xFF21, 0xDDC1, 0xFEC1, 0xFF01, 0xF661, 0xFEE0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEA1, 0x2900, 0x0000, 0x3140, 0xFEA1, 0xFEA0, // 0x0870 (2160) +0xFEA0, 0xFEA0, 0xFEC0, 0xF6A1, 0x2101, 0x0840, 0xEE41, 0xFEE0, 0xFEA0, 0xFEA0, 0xFF20, 0xAC82, 0x0000, 0x0000, 0x0000, 0x10A2, // 0x0880 (2176) +0x9492, 0x0861, 0x0000, 0x0000, 0x0000, 0x9C02, 0xFF20, 0xFEA0, 0xFEA0, 0xFF00, 0xD582, 0x0000, 0x93C1, 0xFF40, 0xFE80, 0xFEC0, // 0x0890 (2192) +0xFEC0, 0xFEA0, 0xFF21, 0x6AC1, 0x0000, 0x0000, 0xCD41, 0xFF00, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEE0, 0xDDE1, 0x41A1, 0x0860, 0x6AC1, // 0x08A0 (2208) +0x93E1, 0x6AE1, 0x0841, 0x3161, 0xD5C1, 0xFEE0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFF00, 0xCD61, 0x0000, 0x0000, 0x5A81, 0xFF21, 0xFEA0, // 0x08B0 (2224) +0xFEC0, 0xFEC0, 0xFEA0, 0xFF20, 0xAC81, 0x0000, 0xC521, 0xFF00, 0xFEA0, 0xFEA0, 0xFF20, 0x9C02, 0x0000, 0x0020, 0x0000, 0x2104, // 0x08C0 (2240) +0xB5B6, 0x10A2, 0x0000, 0x0020, 0x0000, 0x7B41, 0xFF20, 0xFEA0, 0xFEA0, 0xFF20, 0xAC80, 0x0820, 0xEE41, 0xFEC0, 0xFEA0, 0xFEC0, // 0x08D0 (2256) +0xFEC0, 0xFEA0, 0xFF00, 0xAC81, 0x0000, 0x0000, 0x7301, 0xFF20, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEE0, 0xD5C1, 0x0000, 0x0000, 0x0000, // 0x08E0 (2272) +0x0000, 0x0000, 0x0000, 0x0000, 0xD561, 0xFEE0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFF41, 0x7B42, 0x0000, 0x0000, 0xA442, 0xFF21, 0xFEA0, // 0x08F0 (2288) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA1, 0x1080, 0x9C00, 0xFF40, 0xFEA0, 0xFEA0, 0xFF20, 0x7B41, 0x0000, 0x0020, 0x0000, 0x2124, // 0x0900 (2304) +0xDEFB, 0x2104, 0x0000, 0x0020, 0x0000, 0x5221, 0xFF01, 0xFEA0, 0xFEA0, 0xFF40, 0x93C0, 0x3961, 0xFF21, 0xFEA0, 0xFEC0, 0xFEC0, // 0x0910 (2320) +0xFEC0, 0xFEA0, 0xFEC0, 0xEE61, 0x1881, 0x0000, 0x1080, 0xEE21, 0xFEE0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFF01, 0x41C1, 0x0000, 0x0020, // 0x0920 (2336) +0x0000, 0x0020, 0x0000, 0x3961, 0xFEE1, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEC0, 0xEE61, 0x18A1, 0x0000, 0x1060, 0xE621, 0xFEC0, 0xFEA0, // 0x0930 (2352) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF21, 0x4A01, 0x8361, 0xFF40, 0xFEA0, 0xFEA0, 0xFF01, 0x5221, 0x0000, 0x0020, 0x0000, 0x4208, // 0x0940 (2368) +0xFFDF, 0x4208, 0x0000, 0x0000, 0x0000, 0x2901, 0xFEA1, 0xFEC0, 0xFEA0, 0xFF40, 0x93C0, 0x5A60, 0xFF41, 0xFEA0, 0xFEC0, 0xFEC0, // 0x0950 (2384) +0xFEA0, 0xFEC0, 0xFEA0, 0xFF21, 0x7B41, 0x0000, 0x0000, 0x6281, 0xFF21, 0xFEA0, 0xFEA0, 0xFEA0, 0xFF21, 0x62A1, 0x0000, 0x0000, // 0x0960 (2400) +0x0000, 0x0000, 0x0000, 0x5A41, 0xFF01, 0xFEA0, 0xFEA0, 0xF680, 0xFF41, 0x6AC1, 0x0000, 0x0000, 0x7301, 0xFF21, 0xFEA0, 0xFEA0, // 0x0970 (2416) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF40, 0x6AE1, 0x8361, 0xFF40, 0xFEA0, 0xFEC0, 0xFEA1, 0x2901, 0x0000, 0x0020, 0x0000, 0x630C, // 0x0980 (2432) +0xFFFF, 0x6B6D, 0x0000, 0x0020, 0x0000, 0x0020, 0xD5A1, 0xFF00, 0xFEA0, 0xFF20, 0xA461, 0x6AC0, 0xFF40, 0xFEA0, 0xFEC0, 0xFEC0, // 0x0990 (2448) +0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xEE61, 0x18C0, 0x0000, 0x0000, 0x93E2, 0xFF41, 0xFEA0, 0xFE80, 0xFF20, 0x6AE1, 0x0000, 0x0000, // 0x09A0 (2464) +0x0000, 0x0000, 0x0000, 0x62A1, 0xFF21, 0xFE80, 0xFEA0, 0xFF40, 0x9C22, 0x0000, 0x0000, 0x1881, 0xE641, 0xFEC0, 0xFEC0, 0xFEC0, // 0x09B0 (2480) +0xFEA0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF40, 0x7B61, 0x9C00, 0xFF40, 0xFE80, 0xFF00, 0xD581, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C51, // 0x09C0 (2496) +0xFFFF, 0xA534, 0x0000, 0x0000, 0x0000, 0x0000, 0x93E1, 0xFF20, 0xFE80, 0xFF00, 0xC541, 0x72E1, 0xFF20, 0xFEA0, 0xFEC0, 0xFEC0, // 0x09D0 (2512) +0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFF00, 0xB4C1, 0x0000, 0x0020, 0x0000, 0x93E1, 0xFF21, 0xFEC0, 0xFF01, 0x5A81, 0x0000, 0x0000, // 0x09E0 (2528) +0x0000, 0x0000, 0x0000, 0x5222, 0xFF01, 0xFEC0, 0xFF21, 0x9C01, 0x0000, 0x0020, 0x0000, 0xAC81, 0xFF01, 0xFEA0, 0xFEA0, 0xFEC0, // 0x09F0 (2544) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF20, 0x7B40, 0xBD01, 0xFF20, 0xF680, 0xFF20, 0x93C1, 0x0000, 0x0020, 0x0000, 0x0000, 0xBDF7, // 0x0A00 (2560) +0xFFFF, 0xDEDB, 0x1082, 0x0000, 0x0000, 0x0000, 0x41C1, 0xFF01, 0xFEA0, 0xFEC0, 0xF660, 0x6AC2, 0xF6A1, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0A10 (2576) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF21, 0x8BA1, 0x0000, 0x0000, 0x0000, 0x6281, 0xDE21, 0xFF01, 0x3161, 0x0000, 0x0000, // 0x0A20 (2592) +0x0000, 0x0000, 0x0000, 0x2921, 0xFEE1, 0xE641, 0x62A1, 0x0000, 0x0000, 0x0000, 0x8381, 0xFF21, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0A30 (2608) +0xFEC0, 0xFEC0, 0xFEA0, 0xFEC0, 0xFEC1, 0x6AC2, 0xE621, 0xFEE0, 0xFEA0, 0xFF01, 0x41C1, 0x0000, 0x0020, 0x0000, 0x2124, 0xEF5D, // 0x0A40 (2624) +0xFFFF, 0xFFFF, 0x4A49, 0x0000, 0x0000, 0x0000, 0x0020, 0xD5A1, 0xFEE0, 0xFEA0, 0xFEC0, 0xCD41, 0xF660, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0A50 (2640) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFF21, 0x8BC1, 0x0000, 0x0000, 0x0000, 0x1060, 0xA442, 0x0860, 0x0000, 0x0000, // 0x0A60 (2656) +0x0000, 0x0000, 0x0000, 0x0820, 0xA442, 0x18A0, 0x0000, 0x0000, 0x0000, 0x8381, 0xFF21, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0A70 (2672) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFE80, 0xCD62, 0xFEC0, 0xFEA1, 0xFEE0, 0xD5A1, 0x0020, 0x0000, 0x0000, 0x0000, 0x630C, 0xFFFF, // 0x0A80 (2688) +0xFFDF, 0xFFFF, 0x94B2, 0x0000, 0x0000, 0x0000, 0x0000, 0x7321, 0xFF21, 0xFEA0, 0xFEA0, 0xFEE0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEC0, // 0x0A90 (2704) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFF21, 0xB4C1, 0x20E1, 0x0000, 0x3161, 0x62A2, 0x0000, 0x0000, 0x0000, // 0x0AA0 (2720) +0x0000, 0x0000, 0x0000, 0x0000, 0x5A82, 0x39A1, 0x0000, 0x20C1, 0xAC82, 0xFF21, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0AB0 (2736) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEC0, 0xFEE0, 0xFEA0, 0xFEA0, 0xFF21, 0x7321, 0x0000, 0x0000, 0x0000, 0x0000, 0xB596, 0xFFFF, // 0x0AC0 (2752) +0xFFDF, 0xFFFF, 0xE73C, 0x18C3, 0x0000, 0x0000, 0x0000, 0x1080, 0xEE41, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA1, 0xFF00, 0xFEE0, 0xFEA0, // 0x0AD0 (2768) +0xFEC0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFF00, 0xEE41, 0x83C1, 0x8BA3, 0x1081, 0x0000, 0x0000, 0x0000, // 0x0AE0 (2784) +0x0000, 0x0000, 0x0000, 0x0000, 0x1060, 0x8383, 0x83A1, 0xEE41, 0xFF00, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, // 0x0AF0 (2800) +0xFEC0, 0xFEA0, 0xFEC0, 0xFF00, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xEE21, 0x1080, 0x0000, 0x0000, 0x0000, 0x2945, 0xEF7D, 0xFFFF, // 0x0B00 (2816) +0xFFFF, 0xFFFF, 0xFFFF, 0x6B4D, 0x0000, 0x0000, 0x0000, 0x0000, 0x7B41, 0xFF21, 0xFEA0, 0xFEA0, 0xFF00, 0xB482, 0xD5C1, 0xFF20, // 0x0B10 (2832) +0xFE80, 0xFEA0, 0xFEA0, 0xFEA1, 0xFEA0, 0xFEC0, 0xFEA1, 0xFEA0, 0xF680, 0xFF20, 0xF6A2, 0x3121, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0B20 (2848) +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20E1, 0xEE62, 0xFF40, 0xF680, 0xFEA0, 0xFEA1, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, // 0x0B30 (2864) +0xF681, 0xFF20, 0xE601, 0xAC62, 0xFF00, 0xFEA0, 0xFE80, 0xFF21, 0x7B41, 0x0000, 0x0000, 0x0000, 0x0000, 0x8410, 0xFFFF, 0xFFFF, // 0x0B40 (2880) +0xFFFF, 0xFFDF, 0xFFFF, 0xD69A, 0x0841, 0x0000, 0x0000, 0x0000, 0x0840, 0xDDC1, 0xFEE0, 0xFEA0, 0xFEE1, 0xD5A1, 0x5221, 0xBD21, // 0x0B50 (2896) +0xFF41, 0xFF00, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA1, 0xFEC0, 0xFF00, 0xFF21, 0xCD61, 0x20E1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, // 0x0B60 (2912) +0x7322, 0x0840, 0x0000, 0x0000, 0x0000, 0x0000, 0x18A1, 0xBD22, 0xFF21, 0xFF00, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEE0, // 0x0B70 (2928) +0xFF40, 0xC561, 0x5221, 0xCD81, 0xFEE0, 0xFE81, 0xFEE0, 0xDDC1, 0x0840, 0x0000, 0x0000, 0x0000, 0x18E3, 0xE71C, 0xFFFF, 0xFFFF, // 0x0B80 (2944) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x632C, 0x0000, 0x0000, 0x0000, 0x0000, 0x49E1, 0xFF01, 0xFEA0, 0xFEA0, 0xFF00, 0xDE01, 0x4181, // 0x0B90 (2960) +0x5A81, 0xD581, 0xFEE1, 0xFF20, 0xFF20, 0xFF01, 0xFEC1, 0xD582, 0x6AE1, 0x0020, 0x0000, 0x0020, 0x0000, 0x0000, 0x1060, 0xACA2, // 0x0BA0 (2976) +0xFF61, 0xBD21, 0x18A1, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, 0x62A2, 0xCD62, 0xFEA1, 0xFF01, 0xFF20, 0xFF20, 0xFEE1, 0xD5C1, // 0x0BB0 (2992) +0x62C1, 0x3981, 0xD5C1, 0xFF21, 0xFEA0, 0xFEA0, 0xFF01, 0x49E1, 0x0000, 0x0000, 0x0000, 0x0000, 0x7BEF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0BC0 (3008) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEDB, 0x1082, 0x0000, 0x0000, 0x0000, 0x0000, 0x93E2, 0xFF40, 0xFE80, 0xFE80, 0xFEE0, 0xFEC1, // 0x0BD0 (3024) +0x6B01, 0x1061, 0x18C1, 0x4A00, 0x5AA0, 0x5240, 0x3141, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4A01, 0xDDC1, 0xFF20, // 0x0BE0 (3040) +0xFE80, 0xFF00, 0xE602, 0x5A41, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2921, 0x5220, 0x5AA0, 0x4A00, 0x20E1, 0x1060, // 0x0BF0 (3056) +0x6AE1, 0xF6A1, 0xFEE0, 0xFEA1, 0xFEA0, 0xFF41, 0x93E1, 0x0000, 0x0000, 0x0000, 0x0000, 0x2124, 0xE71C, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0C00 (3072) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x8C71, 0x0000, 0x0000, 0x0000, 0x0000, 0x0820, 0xCD61, 0xFF00, 0xFEA0, 0xFEA0, 0xFEC0, // 0x0C10 (3088) +0xFF41, 0xDDE1, 0x6B01, 0x18C1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18A0, 0x5A61, 0xBCE2, 0xFF01, 0xFEE0, 0xFEA0, // 0x0C20 (3104) +0xFEC0, 0xFEA0, 0xFEE0, 0xFF01, 0xC541, 0x6281, 0x20C1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18C1, 0x6AE1, 0xDDC1, // 0x0C30 (3120) +0xFF41, 0xFEC0, 0xFEA0, 0xFEA0, 0xFF01, 0xC541, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0xA514, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0C40 (3136) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0x4208, 0x0000, 0x0000, 0x0000, 0x0000, 0x18A1, 0xDE01, 0xFF00, 0xFE80, 0xFEC0, // 0x0C50 (3152) +0xFEA0, 0xFEE0, 0xFF20, 0xFEC1, 0xD5A2, 0xAC82, 0x9401, 0x93E1, 0x9C42, 0xC522, 0xEE41, 0xFF01, 0xFF00, 0xFEA0, 0xFEA0, 0xFEC0, // 0x0C60 (3168) +0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFF00, 0xFF21, 0xF661, 0xC542, 0xA462, 0x93E1, 0x9C01, 0xB4A2, 0xD5A1, 0xFEC1, 0xFF20, 0xFEE0, // 0x0C70 (3184) +0xFEA0, 0xFEC0, 0xFE80, 0xFF00, 0xDE01, 0x18A1, 0x0000, 0x0000, 0x0000, 0x0000, 0x52AA, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0C80 (3200) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xD6BA, 0x10A2, 0x0000, 0x0000, 0x0000, 0x0000, 0x2921, 0xE641, 0xFF00, 0xFE80, // 0x0C90 (3216) +0xFEC0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFF00, 0xFF20, 0xFF20, 0xFF20, 0xFF20, 0xFF00, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0CA0 (3232) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFF00, 0xFF20, 0xFF20, 0xFF20, 0xFF20, 0xFF00, 0xFEC0, 0xFEA0, 0xFEA0, // 0x0CB0 (3248) +0xFEA0, 0xFE80, 0xFF00, 0xE641, 0x2901, 0x0000, 0x0000, 0x0000, 0x0000, 0x2124, 0xE71C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0CC0 (3264) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xAD55, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2901, 0xDE01, 0xFF00, // 0x0CD0 (3280) +0xFE80, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0CE0 (3296) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEA0, // 0x0CF0 (3312) +0xFE80, 0xFF00, 0xDE01, 0x2900, 0x0000, 0x0000, 0x0000, 0x0000, 0x0861, 0xBDD7, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0D00 (3328) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x8430, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18A1, 0xC561, // 0x0D10 (3344) +0xFF21, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0D20 (3360) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, // 0x0D30 (3376) +0xFF41, 0xC561, 0x18A1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9CD3, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0D40 (3392) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x73AE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0820, // 0x0D50 (3408) +0x9402, 0xFF01, 0xFEE0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0D60 (3424) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEE0, 0xFF01, // 0x0D70 (3440) +0x9402, 0x0820, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C51, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0D80 (3456) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x73AE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0D90 (3472) +0x0000, 0x4A01, 0xDDC1, 0xFF41, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0DA0 (3488) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFF21, 0xD5C1, 0x4A01, // 0x0DB0 (3504) +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C51, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0DC0 (3520) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x8430, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0DD0 (3536) +0x0000, 0x0000, 0x0840, 0x7B61, 0xE641, 0xFF21, 0xFEE0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0DE0 (3552) +0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEE0, 0xFF21, 0xE621, 0x7B42, 0x0840, 0x0000, // 0x0DF0 (3568) +0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0x9492, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0E00 (3584) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xAD55, 0x10A2, 0x0000, 0x0000, // 0x0E10 (3600) +0x0000, 0x0000, 0x0000, 0x0000, 0x1880, 0x7B21, 0xD5A1, 0xFF01, 0xFF20, 0xFF00, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, // 0x0E20 (3616) +0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFF00, 0xFF20, 0xFF01, 0xD5A1, 0x7321, 0x1880, 0x0000, 0x0000, 0x0000, // 0x0E30 (3632) +0x0000, 0x0000, 0x0000, 0x18E3, 0xAD75, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0E40 (3648) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xD69A, 0x4228, 0x0000, // 0x0E50 (3664) +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x41C1, 0x93E1, 0xD5A1, 0xFEA1, 0xFF01, 0xFF20, 0xFF20, 0xFF20, 0xFF00, // 0x0E60 (3680) +0xFF00, 0xFF00, 0xFF20, 0xFF20, 0xFF20, 0xFF01, 0xFEA1, 0xD5A1, 0x93E1, 0x41C1, 0x0020, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, // 0x0E70 (3696) +0x0000, 0x0000, 0x528A, 0xD6BA, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0E80 (3712) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFDF, 0x8C71, // 0x0E90 (3728) +0x10A2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2901, 0x5221, 0x7B41, 0x9402, 0xAC82, 0xBCE2, // 0x0EA0 (3744) +0xC521, 0xBCE2, 0xAC82, 0x9401, 0x7B41, 0x5221, 0x2901, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0EB0 (3760) +0x18E3, 0x94B2, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0EC0 (3776) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0ED0 (3792) +0xD6BA, 0x632C, 0x0841, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0EE0 (3808) +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x10A2, 0x738E, // 0x0EF0 (3824) +0xDEFB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F00 (3840) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F10 (3856) +0xFFFF, 0xFFFF, 0xCE79, 0x6B4D, 0x18C3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0000, 0x0000, // 0x0F20 (3872) +0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2104, 0x738E, 0xD69A, 0xFFFF, // 0x0F30 (3888) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F40 (3904) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F50 (3920) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE71C, 0x94B2, 0x4A49, 0x1082, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0F60 (3936) +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18C3, 0x4A69, 0x9CD3, 0xE73C, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F70 (3952) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F80 (3968) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F90 (3984) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEDB, 0xA534, 0x6B6D, 0x4208, 0x2104, 0x18C3, 0x0861, 0x0841, 0x0000, // 0x0FA0 (4000) +0x0000, 0x0000, 0x0841, 0x0861, 0x18C3, 0x2124, 0x4228, 0x6B6D, 0xA534, 0xDEDB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0FB0 (4016) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0FC0 (4032) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0FD0 (4048) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEDB, 0xB5B6, 0x9492, 0x6B6D, 0x4A49, // 0x0FE0 (4064) +0x4228, 0x4A49, 0x6B6D, 0x8C51, 0xAD75, 0xDEDB, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0FF0 (4080) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x1000 (4096) +}; diff --git a/libraries/UTFT/examples/chipKit/UTFT_Textrotation_Demo/UTFT_Textrotation_Demo.pde b/libraries/UTFT/examples/chipKit/UTFT_Textrotation_Demo/UTFT_Textrotation_Demo.pde new file mode 100644 index 0000000..f9db69a --- /dev/null +++ b/libraries/UTFT/examples/chipKit/UTFT_Textrotation_Demo/UTFT_Textrotation_Demo.pde @@ -0,0 +1,51 @@ +// UTFT_Textrotation_Demo (C)2014 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of the textrotation-functions. +// +// This demo was made for modules with a screen resolution +// of 320x240 pixels. +// +// This program requires the UTFT library. +// + +#include + +// Declare which fonts we will be using +extern uint8_t BigFont[]; +extern uint8_t SevenSegNumFont[]; + +// Set the pins to the correct ones for your development shield +// ------------------------------------------------------------ +// My chipKit Uno32/uC32 shield : ,38,39,40,41 +// My chipKit Max32 shield : ,82,83,84,85 +// AquaLEDSource All in One Super Screw Shield : ,82,83,84,85 +// +// Remember to change the model parameter to suit your display module! +UTFT myGLCD(ITDB32S,82,83,84,85); + +void setup() +{ + myGLCD.InitLCD(); + myGLCD.clrScr(); + myGLCD.setFont(BigFont); +} + +void loop() +{ + myGLCD.print("Text rotation", 0, 0); + myGLCD.setColor(0, 0, 255); + myGLCD.print("0 degrees", 0, 16, 0); + myGLCD.print("90 degrees", 319, 0, 90); + myGLCD.print("180 degrees", 319, 239, 180); + myGLCD.print("270 degrees", 0, 239, 270); + + myGLCD.setFont(SevenSegNumFont); + myGLCD.setColor(0, 255, 0); + myGLCD.print("45", 90, 100, 45); + myGLCD.print("90", 200, 50, 90); + myGLCD.print("180", 300, 200, 180); + + while (true) {}; +} + diff --git a/libraries/UTFT/examples/chipKit/UTFT_ViewFont/UTFT_ViewFont.pde b/libraries/UTFT/examples/chipKit/UTFT_ViewFont/UTFT_ViewFont.pde new file mode 100644 index 0000000..bd9fa5f --- /dev/null +++ b/libraries/UTFT/examples/chipKit/UTFT_ViewFont/UTFT_ViewFont.pde @@ -0,0 +1,58 @@ +// UTFT_ViewFont (C)2014 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a demo of the included fonts. +// +// This demo was made for modules with a screen resolution +// of 320x240 pixels. +// +// This program requires the UTFT library. +// + +#include + +// Declare which fonts we will be using +extern uint8_t SmallFont[]; +extern uint8_t BigFont[]; +extern uint8_t SevenSegNumFont[]; + +// Set the pins to the correct ones for your development shield +// ------------------------------------------------------------ +// My chipKit Uno32/uC32 shield : ,38,39,40,41 +// My chipKit Max32 shield : ,82,83,84,85 +// AquaLEDSource All in One Super Screw Shield : ,82,83,84,85 +// +// Remember to change the model parameter to suit your display module! +UTFT myGLCD(ITDB32S,82,83,84,85); + +void setup() +{ + myGLCD.InitLCD(); + + myGLCD.clrScr(); +} + +void loop() +{ + myGLCD.setColor(0, 255, 0); + myGLCD.setBackColor(0, 0, 0); + + myGLCD.setFont(BigFont); + myGLCD.print(" !\"#$%&'()*+,-./", CENTER, 0); + myGLCD.print("0123456789:;<=>?", CENTER, 16); + myGLCD.print("@ABCDEFGHIJKLMNO", CENTER, 32); + myGLCD.print("PQRSTUVWXYZ[\\]^_", CENTER, 48); + myGLCD.print("`abcdefghijklmno", CENTER, 64); + myGLCD.print("pqrstuvwxyz{|}~ ", CENTER, 80); + + myGLCD.setFont(SmallFont); + myGLCD.print(" !\"#$%&'()*+,-./0123456789:;<=>?", CENTER, 120); + myGLCD.print("@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_", CENTER, 132); + myGLCD.print("`abcdefghijklmnopqrstuvwxyz{|}~ ", CENTER, 144); + + myGLCD.setFont(SevenSegNumFont); + myGLCD.print("0123456789", CENTER, 190); + + while(1) {}; +} + diff --git a/libraries/UTFT/hardware/arm/HW_ARM.h b/libraries/UTFT/hardware/arm/HW_ARM.h new file mode 100644 index 0000000..c71a5ff --- /dev/null +++ b/libraries/UTFT/hardware/arm/HW_ARM.h @@ -0,0 +1,7 @@ +void UTFT::_convert_float(char *buf, double num, int width, byte prec) +{ + char format[10]; + + sprintf(format, "%%%i.%if", width, prec); + sprintf(buf, format, num); +} diff --git a/libraries/UTFT/hardware/arm/HW_ARM_defines.h b/libraries/UTFT/hardware/arm/HW_ARM_defines.h new file mode 100644 index 0000000..2881e17 --- /dev/null +++ b/libraries/UTFT/hardware/arm/HW_ARM_defines.h @@ -0,0 +1,40 @@ +// CTE TFT LCD/SD Shield for Arduino Due +// ------------------------------------- +// Uncomment the following line if you are using this shield +//#define CTE_DUE_SHIELD 1 +// +// For this shield: RS=25, WR=26, CS=27, RST=28 +//******************************************************************** + +// ElecHouse TFT LCD/SD Shield for Arduino Due +// ------------------------------------- +// Uncomment the following line if you are using this shield +//#define EHOUSE_DUE_SHIELD 1 +// +// For this shield: RS=22, WR=23, CS=31, RST=33 +//******************************************************************** + +// *** Hardwarespecific defines *** +#define cbi(reg, bitmask) *reg &= ~bitmask +#define sbi(reg, bitmask) *reg |= bitmask +#define pulse_high(reg, bitmask) sbi(reg, bitmask); cbi(reg, bitmask); +#define pulse_low(reg, bitmask) cbi(reg, bitmask); sbi(reg, bitmask); + +#define cport(port, data) port &= data +#define sport(port, data) port |= data + +#define swap(type, i, j) {type t = i; i = j; j = t;} + +#define fontbyte(x) cfont.font[x] + +#define pgm_read_word(data) *data +#define pgm_read_byte(data) *data +#define bitmapdatatype unsigned short* + +#if defined(TEENSYDUINO) && TEENSYDUINO >= 117 + #define regtype volatile uint8_t + #define regsize uint8_t +#else + #define regtype volatile uint32_t + #define regsize uint32_t +#endif diff --git a/libraries/UTFT/hardware/arm/HW_MX20DX256.h b/libraries/UTFT/hardware/arm/HW_MX20DX256.h new file mode 100644 index 0000000..93df980 --- /dev/null +++ b/libraries/UTFT/hardware/arm/HW_MX20DX256.h @@ -0,0 +1,188 @@ +/** + * + * This file is a modified version of the HW_Teensy3.h created by Paul Stoffregen. + * + * Teensy 3.x pin definitions created by Dawnmist + * http://forum.pjrc.com/threads/18002-Teensy-3-0-driving-an-SSD1289-with-utft?p=34719&viewfull=1#post34719 + * + * This file only supports the B and D ports as defined by Dawnmist for 8-bit and 16-bit display modules. + * Serial display modules are also supported. + * + * NOTE: This file has only been tested on a Teensy 3.1 + * +**/ + +// *** Hardware specific functions *** +void UTFT::_hw_special_init() +{ +} + +void UTFT::LCD_Writ_Bus(char VH,char VL, byte mode) +{ + switch (mode) + { + case 1: + if (display_serial_mode==SERIAL_4PIN) + { + if (VH==1) + sbi(P_SDA, B_SDA); + else + cbi(P_SDA, B_SDA); + pulse_low(P_SCL, B_SCL); + } + else + { + if (VH==1) + sbi(P_RS, B_RS); + else + cbi(P_RS, B_RS); + } + + if (VL & 0x80) + sbi(P_SDA, B_SDA); + else + cbi(P_SDA, B_SDA); + pulse_low(P_SCL, B_SCL); + if (VL & 0x40) + sbi(P_SDA, B_SDA); + else + cbi(P_SDA, B_SDA); + pulse_low(P_SCL, B_SCL); + if (VL & 0x20) + sbi(P_SDA, B_SDA); + else + cbi(P_SDA, B_SDA); + pulse_low(P_SCL, B_SCL); + if (VL & 0x10) + sbi(P_SDA, B_SDA); + else + cbi(P_SDA, B_SDA); + pulse_low(P_SCL, B_SCL); + if (VL & 0x08) + sbi(P_SDA, B_SDA); + else + cbi(P_SDA, B_SDA); + pulse_low(P_SCL, B_SCL); + if (VL & 0x04) + sbi(P_SDA, B_SDA); + else + cbi(P_SDA, B_SDA); + pulse_low(P_SCL, B_SCL); + if (VL & 0x02) + sbi(P_SDA, B_SDA); + else + cbi(P_SDA, B_SDA); + pulse_low(P_SCL, B_SCL); + if (VL & 0x01) + sbi(P_SDA, B_SDA); + else + cbi(P_SDA, B_SDA); + pulse_low(P_SCL, B_SCL); + break; + case 8: + *(volatile uint8_t *)(&GPIOD_PDOR) = VH; + pulse_low(P_WR, B_WR); + *(volatile uint8_t *)(&GPIOD_PDOR) = VL; + pulse_low(P_WR, B_WR); + break; + case 16: + *(volatile uint8_t *)(&GPIOD_PDOR) = VH; + GPIOB_PCOR = 0x000F000F; // clear data lines B0-3,B16-19 + GPIOB_PSOR = (0x0F & VL) | ((VL >> 4) << 16); // set data lines 0-3,16-19 if set in cl + pulse_low(P_WR, B_WR); + break; + } +} + +void UTFT::_set_direction_registers(byte mode) +{ + GPIOD_PDDR |= 0xFF; + PORTD_PCR0 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); + PORTD_PCR1 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); + PORTD_PCR2 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); + PORTD_PCR3 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); + PORTD_PCR4 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); + PORTD_PCR5 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); + PORTD_PCR6 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); + PORTD_PCR7 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); + + if (mode == 16) + { + GPIOB_PDDR |= 0x000F000F; + PORTB_PCR0 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); + PORTB_PCR1 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); + PORTB_PCR2 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); + PORTB_PCR3 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); + PORTB_PCR16 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); + PORTB_PCR17 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); + PORTB_PCR18 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); + PORTB_PCR19 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); + } +} +void UTFT::_fast_fill_16(int ch, int cl, long pix) +{ + long blocks; + + *(volatile uint8_t *)(&GPIOD_PDOR) = ch; + GPIOB_PCOR = 0x000F000F; // clear data lines B0-3,B16-19 + GPIOB_PSOR = (0x0F & cl) | ((cl >> 4) << 16); // set data lines 0-3,16-19 if set in cl + + blocks = pix/16; + for (int i=0; i>3) | ((VH & 0x80)>>1); + pulse_low(P_WR, B_WR); + + REG_PIOA_CODR=0x0000C000; + REG_PIOD_CODR=0x0000064F; + REG_PIOA_SODR=(VL & 0x06)<<13; + (VL & 0x01) ? REG_PIOB_SODR = 0x4000000 : REG_PIOB_CODR = 0x4000000; + REG_PIOD_SODR=((VL & 0x78)>>3) | ((VL & 0x80)>>1); + pulse_low(P_WR, B_WR); +#endif + break; + case 16: +#if defined(CTE_DUE_SHIELD) + REG_PIOC_CODR=0xFF1FE; + REG_PIOC_SODR=(VL<<1) & 0x1FE; + REG_PIOC_SODR=(VH<<12) & 0xFF000; +#elif defined(EHOUSE_DUE_SHIELD) + PIOC->PIO_ODSR = ((PIOC->PIO_ODSR&(~0x000FF3FC)) | ((((uint32_t)VL)<<2) | (((uint32_t)VH)<<12))); +#else + REG_PIOA_CODR=0x0000C080; + REG_PIOC_CODR=0x0000003E; + REG_PIOD_CODR=0x0000064F; + REG_PIOA_SODR=((VH & 0x06)<<13) | ((VL & 0x40)<<1); + (VH & 0x01) ? REG_PIOB_SODR = 0x4000000 : REG_PIOB_CODR = 0x4000000; + REG_PIOC_SODR=((VL & 0x01)<<5) | ((VL & 0x02)<<3) | ((VL & 0x04)<<1) | ((VL & 0x08)>>1) | ((VL & 0x10)>>3); + REG_PIOD_SODR=((VH & 0x78)>>3) | ((VH & 0x80)>>1) | ((VL & 0x20)<<5) | ((VL & 0x80)<<2); +#endif + pulse_low(P_WR, B_WR); + break; + case LATCHED_16: + asm("nop"); // Mode is unsupported + break; + } +} + +void UTFT::_set_direction_registers(byte mode) +{ + if (mode!=LATCHED_16) + { +#if defined(CTE_DUE_SHIELD) + if (mode==16) + { + REG_PIOC_OER=0x000FF1FE; + } + else + REG_PIOC_OER=0x000FF000; +#elif defined(EHOUSE_DUE_SHIELD) + if (mode==16) + { + REG_PIOC_OER=0x000FF3FC; + REG_PIOC_OWER=0x000FF3FC; + } + else + REG_PIOC_OER=0x000FF000; +#else + REG_PIOA_OER=0x0000c000; //PA14,PA15 enable + REG_PIOB_OER=0x04000000; //PB26 enable + REG_PIOD_OER=0x0000064f; //PD0-3,PD6,PD9-10 enable + if (mode==16) + { + REG_PIOA_OER=0x00000080; //PA7 enable + REG_PIOC_OER=0x0000003e; //PC1 - PC5 enable + } +#endif + } + else + { + asm("nop"); // Mode is unsupported + } +} + +void UTFT::_fast_fill_16(int ch, int cl, long pix) +{ + long blocks; + +#if defined(CTE_DUE_SHIELD) + REG_PIOC_CODR=0xFF1FE; + REG_PIOC_SODR=(cl<<1) & 0x1FE; + REG_PIOC_SODR=(ch<<12) & 0xFF000; +#elif defined(EHOUSE_DUE_SHIELD) + PIOC->PIO_ODSR = ((PIOC->PIO_ODSR&(~0x000FF3FC)) | ((((uint32_t)cl)<<2) | (((uint32_t)ch)<<12))); +#else + REG_PIOA_CODR=0x0000C080; + REG_PIOC_CODR=0x0000003E; + REG_PIOD_CODR=0x0000064F; + REG_PIOA_SODR=((ch & 0x06)<<13) | ((cl & 0x40)<<1); + (ch & 0x01) ? REG_PIOB_SODR = 0x4000000 : REG_PIOB_CODR = 0x4000000; + REG_PIOC_SODR=((cl & 0x01)<<5) | ((cl & 0x02)<<3) | ((cl & 0x04)<<1) | ((cl & 0x08)>>1) | ((cl & 0x10)>>3); + REG_PIOD_SODR=((ch & 0x78)>>3) | ((ch & 0x80)>>1) | ((cl & 0x20)<<5) | ((cl & 0x80)<<2); +#endif + + blocks = pix/16; + for (int i=0; i>3) | ((ch & 0x80)>>1); +#endif + + blocks = pix/16; + for (int i=0; i>3; + PORTE &= ~0x3B; + PORTE |= (VH & 0x03) + ((VH & 0x0C)<<2) + ((VH & 0x20)>>2); + pulse_low(P_WR, B_WR); + PORTG &= ~0x20; + PORTG |= (VL & 0x10)<<1; + PORTH &= ~0x18; + PORTH |= (VL & 0xC0)>>3; + PORTE &= ~0x3B; + PORTE |= (VL & 0x03) + ((VL & 0x0C)<<2) + ((VL & 0x20)>>2); + pulse_low(P_WR, B_WR); +#else + PORTA = VH; + pulse_low(P_WR, B_WR); + PORTA = VL; + pulse_low(P_WR, B_WR); +#endif + break; + case 16: + PORTA = VH; + PORTC = VL; + pulse_low(P_WR, B_WR); + break; + case LATCHED_16: + PORTG &= ~0x20; + PORTG |= (VH & 0x10)<<1; + PORTH &= ~0x18; + PORTH |= (VH & 0xC0)>>3; + PORTE &= ~0x3B; + PORTE |= (VH & 0x03) + ((VH & 0x0C)<<2) + ((VH & 0x20)>>2); + cbi(P_ALE, B_ALE); + pulse_high(P_ALE, B_ALE); + cbi(P_CS, B_CS); + PORTG &= ~0x20; + PORTG |= (VL & 0x10)<<1; + PORTH &= ~0x18; + PORTH |= (VL & 0xC0)>>3; + PORTE &= ~0x3B; + PORTE |= (VL & 0x03) + ((VL & 0x0C)<<2) + ((VL & 0x20)>>2); + pulse_low(P_WR, B_WR); + sbi(P_CS, B_CS); + break; + } +} + +void UTFT::_set_direction_registers(byte mode) +{ +#if defined(USE_UNO_SHIELD_ON_MEGA) + DDRH = 0x18; + DDRG = 0x20; + DDRE = 0x3B; +#else + if (mode!=LATCHED_16) + { + DDRA = 0xFF; + if (mode==16) + DDRC = 0xFF; + } + else + { + DDRH = 0x18; + DDRG = 0x20; + DDRE = 0x3B; + } +#endif +} + +void UTFT::_fast_fill_16(int ch, int cl, long pix) +{ +#if defined(USE_UNO_SHIELD_ON_MEGA) + if (ch==cl) + _fast_fill_8(ch, pix); + else + { + for (int i=0; i>3; + PORTE &= ~0x3B; + PORTE |= (ch & 0x03) + ((ch & 0x0C)<<2) + ((ch & 0x20)>>2); + pulse_low(P_WR, B_WR); + PORTG &= ~0x20; + PORTG |= (cl & 0x10)<<1; + PORTH &= ~0x18; + PORTH |= (cl & 0xC0)>>3; + PORTE &= ~0x3B; + PORTE |= (cl & 0x03) + ((cl & 0x0C)<<2) + ((cl & 0x20)>>2); + pulse_low(P_WR, B_WR); + } + } +#else + long blocks; + + PORTA = ch; + PORTC = cl; + + blocks = pix/16; + for (int i=0; i>3; + PORTE &= ~0x3B; + PORTE |= (ch & 0x03) + ((ch & 0x0C)<<2) + ((ch & 0x20)>>2); +#else + PORTA = ch; +#endif + + blocks = pix/16; + for (int i=0; i>4); + pulse_low(P_WR, B_WR); + cport (PORTD, 0xF0); + sport (PORTD, (VL & 0x0F)); + cport (PORTB, 0xF0); + sport (PORTB, (VL & 0xF0)>>4); + pulse_low(P_WR, B_WR); + break; + case 16: + cport (PORTD, 0x90); + sport (PORTD, (VH & 0x0F) | ((VL & 0x03)<<5)); + PORTB = ((VH & 0xF0)>>4) | ((VL & 0x3C)<<2); + cport (PORTA, 0x3F); + sport (PORTA, ((VL & 0x40)<<1) | ((VL & 0x80)>>1)); + pulse_low(P_WR, B_WR); + break; + case LATCHED_16: + cport (PORTD, 0xF0); + sport (PORTD, (VH & 0x0F)); + cport (PORTB, 0xF0); + sport (PORTB, (VH & 0xF0)>>4); + cbi(P_ALE, B_ALE); + pulse_high(P_ALE, B_ALE); + cbi(P_CS, B_CS); + cport (PORTD, 0xF0); + sport (PORTD, (VL & 0x0F)); + cport (PORTB, 0xF0); + sport (PORTB, (VL & 0xF0)>>4); + pulse_low(P_WR, B_WR); + sbi(P_CS, B_CS); + break; + } +} + +void UTFT::_set_direction_registers(byte mode) +{ + DDRB |= 0x0F; + DDRD |= 0x0F; + if (mode==16) + { + DDRB = 0xFF; + DDRD |= 0x6F; + DDRA |= 0xC0; + } + +} + +void UTFT::_fast_fill_16(int ch, int cl, long pix) +{ + long blocks; + + cport (PORTD, 0x90); + sport (PORTD, (ch & 0x0F) | ((cl & 0x03)<<5)); + PORTB = ((ch & 0xF0)>>4) | ((cl & 0x3C)<<2); + cport (PORTA, 0x3F); + sport (PORTA, ((cl & 0x40)<<1) | ((cl & 0x80)>>1)); + + blocks = pix/16; + for (int i=0; i>4); + + blocks = pix/16; + for (int i=0; i>6) & 0x03); + PORTB = VL & 0x3F; + pulse_low(P_WR, B_WR); + break; + case LATCHED_16: + PORTD = VH; + cbi(P_ALE, B_ALE); + pulse_high(P_ALE, B_ALE); + cbi(P_CS, B_CS); + PORTD = VL; + pulse_low(P_WR, B_WR); + sbi(P_CS, B_CS); + break; + } +} + +void UTFT::_set_direction_registers(byte mode) +{ + DDRD = 0xFF; + if (mode==16) + { + DDRB |= 0x3F; + DDRC |= 0x03; + } + +} + +void UTFT::_fast_fill_16(int ch, int cl, long pix) +{ + long blocks; + + PORTD = ch; + cport(PORTC, 0xFC); + sport(PORTC, (cl>>6) & 0x03); + PORTB = cl & 0x3F; + + blocks = pix/16; + for (int i=0; i>3) + ((VH & 0x04)>>1) + ((VH & 0x03)<<2); + PORTE += ((VH & 0x80)>>1); + pulse_low(P_WR, B_WR); + + cport(PORTC, 0xBF); + cport(PORTD, 0x60); + cport(PORTE, 0xBF); + PORTC += ((VL & 0x20)<<1); + PORTD += ((VL & 0x40)<<1) + (VL & 0x10) + ((VL & 0x08)>>3) + ((VL & 0x04)>>1) + ((VL & 0x03)<<2); + PORTE += ((VL & 0x80)>>1); + pulse_low(P_WR, B_WR); + break; + case 16: + cport(PORTB, 0x0F); + cport(PORTC, 0x3F); + cport(PORTD, 0x20); + cport(PORTE, 0xBF); + cport(PORTF, 0x3F); + + PORTB |= ((VL & 0x0F)<<4); + PORTC |= ((VL & 0x20)<<2) + ((VH & 0x20)<<1); + PORTD |= ((VH & 0x40)<<1) + (VH & 0x10) + ((VH & 0x08)>>3) + ((VH & 0x04)>>1) + ((VH & 0x03)<<2) + ((VL & 0x10)<<2); + PORTE |= ((VH & 0x80)>>1); + PORTF |= ((VL & 0x80)>>1) + ((VL & 0x40)<<1); + + pulse_low(P_WR, B_WR); + break; + case LATCHED_16: + cport(PORTC, 0xBF); + cport(PORTD, 0x60); + cport(PORTE, 0xBF); + PORTC += ((VH & 0x20)<<1); + PORTD += ((VH & 0x40)<<1) + (VH & 0x10) + ((VH & 0x08)>>3) + ((VH & 0x04)>>1) + ((VH & 0x03)<<2); + PORTE += ((VH & 0x80)>>1); + cbi(P_ALE, B_ALE); + pulse_high(P_ALE, B_ALE); + cbi(P_CS, B_CS); + cport(PORTC, 0xBF); + cport(PORTD, 0x60); + cport(PORTE, 0xBF); + PORTC += ((VL & 0x20)<<1); + PORTD += ((VL & 0x40)<<1) + (VL & 0x10) + ((VL & 0x08)>>3) + ((VL & 0x04)>>1) + ((VL & 0x03)<<2); + PORTE += ((VL & 0x80)>>1); + pulse_low(P_WR, B_WR); + sbi(P_CS, B_CS); + break; + } +} + +void UTFT::_set_direction_registers(byte mode) +{ + switch (mode) + { + case 8: + case LATCHED_16: + DDRC |= 0x40; + DDRD |= 0x9F; + DDRE |= 0x40; + break; + case 16: + DDRB |= 0xF0; + DDRC |= 0xC0; + DDRD |= 0xDF; + DDRE |= 0x40; + DDRF |= 0xC0; + break; + } +} + +void UTFT::_fast_fill_16(int ch, int cl, long pix) +{ + long blocks; + + cport(PORTB, 0x0F); + cport(PORTC, 0x3F); + cport(PORTD, 0x20); + cport(PORTE, 0xBF); + cport(PORTF, 0x3F); + + PORTB |= ((cl & 0x0F)<<4); + PORTC |= ((cl & 0x20)<<2) + ((ch & 0x20)<<1); + PORTD |= ((ch & 0x40)<<1) + (ch & 0x10) + ((ch & 0x08)>>3) + ((ch & 0x04)>>1) + ((ch & 0x03)<<2) + ((cl & 0x10)<<2); + PORTE |= ((ch & 0x80)>>1); + PORTF |= ((cl & 0x80)>>1) + ((cl & 0x40)<<1); + + blocks = pix/16; + for (int i=0; i>3) + ((ch & 0x04)>>1) + ((ch & 0x03)<<2); + PORTE |= ((ch & 0x80)>>1); + + blocks = pix/16; + for (int i=0; i>8); + LCD_Write_DATA(x1); + LCD_Write_DATA(x2>>8); + LCD_Write_DATA(x2); + LCD_Write_COM(0x2b); + LCD_Write_DATA(y1>>8); + LCD_Write_DATA(y1); + LCD_Write_DATA(y2>>8); + LCD_Write_DATA(y2); + LCD_Write_COM(0x2c); + break; diff --git a/libraries/UTFT/tft_drivers/hx8347a/initlcd.h b/libraries/UTFT/tft_drivers/hx8347a/initlcd.h new file mode 100644 index 0000000..76bf08e --- /dev/null +++ b/libraries/UTFT/tft_drivers/hx8347a/initlcd.h @@ -0,0 +1,88 @@ +case HX8347A: + LCD_Write_COM_DATA(0x46,0x00A4); + LCD_Write_COM_DATA(0x47,0x0053); + LCD_Write_COM_DATA(0x48,0x0000); + LCD_Write_COM_DATA(0x49,0x0044); + LCD_Write_COM_DATA(0x4a,0x0004); + LCD_Write_COM_DATA(0x4b,0x0067); + LCD_Write_COM_DATA(0x4c,0x0033); + LCD_Write_COM_DATA(0x4d,0x0077); + LCD_Write_COM_DATA(0x4e,0x0012); + LCD_Write_COM_DATA(0x4f,0x004C); + LCD_Write_COM_DATA(0x50,0x0046); + LCD_Write_COM_DATA(0x51,0x0044); + + //240x320 window setting + LCD_Write_COM_DATA(0x02,0x0000); // Column address start2 + LCD_Write_COM_DATA(0x03,0x0000); // Column address start1 + LCD_Write_COM_DATA(0x04,0x0000); // Column address end2 + LCD_Write_COM_DATA(0x05,0x00ef); // Column address end1 + LCD_Write_COM_DATA(0x06,0x0000); // Row address start2 + LCD_Write_COM_DATA(0x07,0x0000); // Row address start1 + LCD_Write_COM_DATA(0x08,0x0001); // Row address end2 + LCD_Write_COM_DATA(0x09,0x003f); // Row address end1 + + // Display Setting + LCD_Write_COM_DATA(0x01,0x0006); // IDMON=0, INVON=1, NORON=1, PTLON=0 + LCD_Write_COM_DATA(0x16,0x00C8); // MY=0, MX=0, MV=0, ML=1, BGR=0, TEON=0 0048 + LCD_Write_COM_DATA(0x23,0x0095); // N_DC=1001 0101 + LCD_Write_COM_DATA(0x24,0x0095); // PI_DC=1001 0101 + LCD_Write_COM_DATA(0x25,0x00FF); // I_DC=1111 1111 + + LCD_Write_COM_DATA(0x27,0x0002); // N_BP=0000 0010 + LCD_Write_COM_DATA(0x28,0x0002); // N_FP=0000 0010 + LCD_Write_COM_DATA(0x29,0x0002); // PI_BP=0000 0010 + LCD_Write_COM_DATA(0x2a,0x0002); // PI_FP=0000 0010 + LCD_Write_COM_DATA(0x2C,0x0002); // I_BP=0000 0010 + LCD_Write_COM_DATA(0x2d,0x0002); // I_FP=0000 0010 + + LCD_Write_COM_DATA(0x3a,0x0001); // N_RTN=0000, N_NW=001 0001 + LCD_Write_COM_DATA(0x3b,0x0000); // P_RTN=0000, P_NW=001 + LCD_Write_COM_DATA(0x3c,0x00f0); // I_RTN=1111, I_NW=000 + LCD_Write_COM_DATA(0x3d,0x0000); // DIV=00 + delay(1); + LCD_Write_COM_DATA(0x35,0x0038); // EQS=38h + LCD_Write_COM_DATA(0x36,0x0078); // EQP=78h + LCD_Write_COM_DATA(0x3E,0x0038); // SON=38h + LCD_Write_COM_DATA(0x40,0x000F); // GDON=0Fh + LCD_Write_COM_DATA(0x41,0x00F0); // GDOFF + + // Power Supply Setting + LCD_Write_COM_DATA(0x19,0x0049); // CADJ=0100, CUADJ=100, OSD_EN=1 ,60Hz + LCD_Write_COM_DATA(0x93,0x000F); // RADJ=1111, 100% + delay(1); + LCD_Write_COM_DATA(0x20,0x0040); // BT=0100 + LCD_Write_COM_DATA(0x1D,0x0007); // VC1=111 0007 + LCD_Write_COM_DATA(0x1E,0x0000); // VC3=000 + LCD_Write_COM_DATA(0x1F,0x0004); // VRH=0011 + + //VCOM SETTING + LCD_Write_COM_DATA(0x44,0x004D); // VCM=101 0000 4D + LCD_Write_COM_DATA(0x45,0x000E); // VDV=1 0001 0011 + delay(1); + LCD_Write_COM_DATA(0x1C,0x0004); // AP=100 + delay(2); + + LCD_Write_COM_DATA(0x1B,0x0018); // GASENB=0, PON=0, DK=1, XDK=0, VLCD_TRI=0, STB=0 + delay(1); + LCD_Write_COM_DATA(0x1B,0x0010); // GASENB=0, PON=1, DK=0, XDK=0, VLCD_TRI=0, STB=0 + delay(1); + LCD_Write_COM_DATA(0x43,0x0080); //set VCOMG=1 + delay(2); + + // Display ON Setting + LCD_Write_COM_DATA(0x90,0x007F); // SAP=0111 1111 + LCD_Write_COM_DATA(0x26,0x0004); //GON=0, DTE=0, D=01 + delay(1); + LCD_Write_COM_DATA(0x26,0x0024); //GON=1, DTE=0, D=01 + LCD_Write_COM_DATA(0x26,0x002C); //GON=1, DTE=0, D=11 + delay(1); + LCD_Write_COM_DATA(0x26,0x003C); //GON=1, DTE=1, D=11 + + // INTERNAL REGISTER SETTING + LCD_Write_COM_DATA(0x57,0x0002); // TEST_Mode=1: into TEST mode + LCD_Write_COM_DATA(0x95,0x0001); // SET DISPLAY CLOCK AND PUMPING CLOCK TO SYNCHRONIZE + LCD_Write_COM_DATA(0x57,0x0000); // TEST_Mode=0: exit TEST mode + //LCD_Write_COM_DATA(0x21,0x0000); + LCD_Write_COM(0x22); + break; diff --git a/libraries/UTFT/tft_drivers/hx8347a/setxy.h b/libraries/UTFT/tft_drivers/hx8347a/setxy.h new file mode 100644 index 0000000..bf82d6b --- /dev/null +++ b/libraries/UTFT/tft_drivers/hx8347a/setxy.h @@ -0,0 +1,11 @@ +case HX8347A: + LCD_Write_COM_DATA(0x02,x1>>8); + LCD_Write_COM_DATA(0x03,x1); + LCD_Write_COM_DATA(0x04,x2>>8); + LCD_Write_COM_DATA(0x05,x2); + LCD_Write_COM_DATA(0x06,y1>>8); + LCD_Write_COM_DATA(0x07,y1); + LCD_Write_COM_DATA(0x08,y2>>8); + LCD_Write_COM_DATA(0x09,y2); + LCD_Write_COM(0x22); + break; diff --git a/libraries/UTFT/tft_drivers/hx8352a/initlcd.h b/libraries/UTFT/tft_drivers/hx8352a/initlcd.h new file mode 100644 index 0000000..5645bbe --- /dev/null +++ b/libraries/UTFT/tft_drivers/hx8352a/initlcd.h @@ -0,0 +1,131 @@ +case HX8352A: + LCD_Write_COM(0x83); + LCD_Write_DATA(0x02); //TESTM=1 + + LCD_Write_COM(0x85); + LCD_Write_DATA(0x03); //VDC_SEL=011 + LCD_Write_COM(0x8B); + LCD_Write_DATA(0x01); + LCD_Write_COM(0x8C); + LCD_Write_DATA(0x93); //STBA[7]=1,STBA[5:4]=01,STBA[1:0]=11 + + LCD_Write_COM(0x91); + LCD_Write_DATA(0x01); //DCDC_SYNC=1 + + LCD_Write_COM(0x83); + LCD_Write_DATA(0x00); //TESTM=0 + //Gamma Setting + + LCD_Write_COM(0x3E); + LCD_Write_DATA(0xB0); + LCD_Write_COM(0x3F); + LCD_Write_DATA(0x03); + LCD_Write_COM(0x40); + LCD_Write_DATA(0x10); + LCD_Write_COM(0x41); + LCD_Write_DATA(0x56); + LCD_Write_COM(0x42); + LCD_Write_DATA(0x13); + LCD_Write_COM(0x43); + LCD_Write_DATA(0x46); + LCD_Write_COM(0x44); + LCD_Write_DATA(0x23); + LCD_Write_COM(0x45); + LCD_Write_DATA(0x76); + LCD_Write_COM(0x46); + LCD_Write_DATA(0x00); + LCD_Write_COM(0x47); + LCD_Write_DATA(0x5E); + LCD_Write_COM(0x48); + LCD_Write_DATA(0x4F); + LCD_Write_COM(0x49); + LCD_Write_DATA(0x40); + //**********Power On sequence************ + + LCD_Write_COM(0x17); + LCD_Write_DATA(0x91); + + LCD_Write_COM(0x2B); + LCD_Write_DATA(0xF9); + delay(10); + + LCD_Write_COM(0x1B); + LCD_Write_DATA(0x14); + + LCD_Write_COM(0x1A); + LCD_Write_DATA(0x11); + + LCD_Write_COM(0x1C); + LCD_Write_DATA(0x06); + + LCD_Write_COM(0x1F); + LCD_Write_DATA(0x42); + delay(20); + + LCD_Write_COM(0x19); + LCD_Write_DATA(0x0A); + + LCD_Write_COM(0x19); + LCD_Write_DATA(0x1A); + delay(40); + + + LCD_Write_COM(0x19); + LCD_Write_DATA(0x12); + delay(40); + + LCD_Write_COM(0x1E); + LCD_Write_DATA(0x27); + delay(100); + + + //**********DISPLAY ON SETTING*********** + + LCD_Write_COM(0x24); + LCD_Write_DATA(0x60); + + LCD_Write_COM(0x3D); + LCD_Write_DATA(0x40); + + LCD_Write_COM(0x34); + LCD_Write_DATA(0x38); + + LCD_Write_COM(0x35); + LCD_Write_DATA(0x38); + + LCD_Write_COM(0x24); + LCD_Write_DATA(0x38); + delay(40); + + LCD_Write_COM(0x24); + LCD_Write_DATA(0x3C); + + LCD_Write_COM(0x16); + LCD_Write_DATA(0x1C); + + LCD_Write_COM(0x01); + LCD_Write_DATA(0x06); + + LCD_Write_COM(0x55); + LCD_Write_DATA(0x00); + + LCD_Write_COM(0x02); + LCD_Write_DATA(0x00); + LCD_Write_COM(0x03); + LCD_Write_DATA(0x00); + LCD_Write_COM(0x04); + LCD_Write_DATA(0x00); + LCD_Write_COM(0x05); + LCD_Write_DATA(0xef); + + LCD_Write_COM(0x06); + LCD_Write_DATA(0x00); + LCD_Write_COM(0x07); + LCD_Write_DATA(0x00); + LCD_Write_COM(0x08); + LCD_Write_DATA(0x01); + LCD_Write_COM(0x09); + LCD_Write_DATA(0x8f); + + LCD_Write_COM(0x22); + break; diff --git a/libraries/UTFT/tft_drivers/hx8352a/setxy.h b/libraries/UTFT/tft_drivers/hx8352a/setxy.h new file mode 100644 index 0000000..225fe65 --- /dev/null +++ b/libraries/UTFT/tft_drivers/hx8352a/setxy.h @@ -0,0 +1,11 @@ +case HX8352A: + LCD_Write_COM_DATA(0x02,x1>>8); + LCD_Write_COM_DATA(0x03,x1); + LCD_Write_COM_DATA(0x04,x2>>8); + LCD_Write_COM_DATA(0x05,x2); + LCD_Write_COM_DATA(0x06,y1>>8); + LCD_Write_COM_DATA(0x07,y1); + LCD_Write_COM_DATA(0x08,y2>>8); + LCD_Write_COM_DATA(0x09,y2); + LCD_Write_COM(0x22); + break; diff --git a/libraries/UTFT/tft_drivers/hx8353c/initlcd.h b/libraries/UTFT/tft_drivers/hx8353c/initlcd.h new file mode 100644 index 0000000..70b6f29 --- /dev/null +++ b/libraries/UTFT/tft_drivers/hx8353c/initlcd.h @@ -0,0 +1,69 @@ +case HX8353C: + LCD_Write_COM(0xB9);//SETEXTC + LCD_Write_DATA(0xFF); + LCD_Write_DATA(0x83); + LCD_Write_DATA(0x53); + + LCD_Write_COM(0xB0);//RADJ + LCD_Write_DATA(0x3C); + LCD_Write_DATA(0x01); + + LCD_Write_COM(0xB6);//VCOM + LCD_Write_DATA(0x94); + LCD_Write_DATA(0x6C); + LCD_Write_DATA(0x50); + + LCD_Write_COM(0xB1);//PWR + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x01); + LCD_Write_DATA(0x1B); + LCD_Write_DATA(0x03); + LCD_Write_DATA(0x01); + LCD_Write_DATA(0x08); + LCD_Write_DATA(0x77); + LCD_Write_DATA(0x89); + + LCD_Write_COM(0xE0); //Gamma setting for tpo Panel + LCD_Write_DATA(0x50); + LCD_Write_DATA(0x77); + LCD_Write_DATA(0x40); + LCD_Write_DATA(0x08); + LCD_Write_DATA(0xBF); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x03); + LCD_Write_DATA(0x0F); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x01); + LCD_Write_DATA(0x73); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x72); + LCD_Write_DATA(0x03); + LCD_Write_DATA(0xB0); + LCD_Write_DATA(0x0F); + LCD_Write_DATA(0x08); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x0F); + + LCD_Write_COM(0x3A); + LCD_Write_DATA(0x05); //05 + LCD_Write_COM(0x36); + LCD_Write_DATA(0xC0); //83 //0B + + LCD_Write_COM(0x11); // SLPOUT + delay(150); + + LCD_Write_COM(0x29); // display on + + delay(150); + LCD_Write_COM(0x2D); //Look up table + + for(int j=0;j<32;j++) + { LCD_Write_DATA(2*j); } //Red + for(int j=0;j<64;j++) + { LCD_Write_DATA(1*j); } //Green + for(int j=0;j<32;j++) + { LCD_Write_DATA(2*j); } //Blue + + LCD_Write_COM(0x2c); + delay(150); + break; diff --git a/libraries/UTFT/tft_drivers/hx8353c/setxy.h b/libraries/UTFT/tft_drivers/hx8353c/setxy.h new file mode 100644 index 0000000..a654657 --- /dev/null +++ b/libraries/UTFT/tft_drivers/hx8353c/setxy.h @@ -0,0 +1,13 @@ +case HX8353C: + LCD_Write_COM(0x2a); + LCD_Write_DATA(x1>>8); + LCD_Write_DATA(x1); + LCD_Write_DATA(x2>>8); + LCD_Write_DATA(x2); + LCD_Write_COM(0x2b); + LCD_Write_DATA(y1>>8); + LCD_Write_DATA(y1); + LCD_Write_DATA(y2>>8); + LCD_Write_DATA(y2); + LCD_Write_COM(0x2c); + break; diff --git a/libraries/UTFT/tft_drivers/ili9320/initlcd.h b/libraries/UTFT/tft_drivers/ili9320/initlcd.h new file mode 100644 index 0000000..a49f118 --- /dev/null +++ b/libraries/UTFT/tft_drivers/ili9320/initlcd.h @@ -0,0 +1,67 @@ +case ILI9320_8: +case ILI9320_16: + LCD_Write_COM_DATA(0xe5, 0x8000); + LCD_Write_COM_DATA(0x00, 0x0001); + LCD_Write_COM_DATA(0x01, 0x0100); + LCD_Write_COM_DATA(0x02, 0x0700); + LCD_Write_COM_DATA(0x03, 0x1030); + LCD_Write_COM_DATA(0x04, 0x0000); + LCD_Write_COM_DATA(0x08, 0x0202); + LCD_Write_COM_DATA(0x09, 0x0000); + LCD_Write_COM_DATA(0x0A, 0x0000); + LCD_Write_COM_DATA(0x0C, 0x0000); + LCD_Write_COM_DATA(0x0D, 0x0000); + LCD_Write_COM_DATA(0x0F, 0x0000); + //-----Power On sequence----------------------- + LCD_Write_COM_DATA(0x10, 0x0000); + LCD_Write_COM_DATA(0x11, 0x0007); + LCD_Write_COM_DATA(0x12, 0x0000); + LCD_Write_COM_DATA(0x13, 0x0000); + delay(50); + LCD_Write_COM_DATA(0x10, 0x17B0); + LCD_Write_COM_DATA(0x11, 0x0007); + delay(10); + LCD_Write_COM_DATA(0x12, 0x013A); + delay(10); + LCD_Write_COM_DATA(0x13, 0x1A00); + LCD_Write_COM_DATA(0x29, 0x000c); + delay(10); + //-----Gamma control----------------------- + LCD_Write_COM_DATA(0x30, 0x0000); + LCD_Write_COM_DATA(0x31, 0x0505); + LCD_Write_COM_DATA(0x32, 0x0004); + LCD_Write_COM_DATA(0x35, 0x0006); + LCD_Write_COM_DATA(0x36, 0x0707); + LCD_Write_COM_DATA(0x37, 0x0105); + LCD_Write_COM_DATA(0x38, 0x0002); + LCD_Write_COM_DATA(0x39, 0x0707); + LCD_Write_COM_DATA(0x3C, 0x0704); + LCD_Write_COM_DATA(0x3D, 0x0807); + //-----Set RAM area----------------------- + LCD_Write_COM_DATA(0x50, 0x0000); + LCD_Write_COM_DATA(0x51, 0x00EF); + LCD_Write_COM_DATA(0x52, 0x0000); + LCD_Write_COM_DATA(0x53, 0x013F); + LCD_Write_COM_DATA(0x60, 0x2700); + LCD_Write_COM_DATA(0x61, 0x0001); + LCD_Write_COM_DATA(0x6A, 0x0000); + LCD_Write_COM_DATA(0x21, 0x0000); + LCD_Write_COM_DATA(0x20, 0x0000); + //-----Partial Display Control------------ + LCD_Write_COM_DATA(0x80, 0x0000); + LCD_Write_COM_DATA(0x81, 0x0000); + LCD_Write_COM_DATA(0x82, 0x0000); + LCD_Write_COM_DATA(0x83, 0x0000); + LCD_Write_COM_DATA(0x84, 0x0000); + LCD_Write_COM_DATA(0x85, 0x0000); + //-----Panel Control---------------------- + LCD_Write_COM_DATA(0x90, 0x0010); + LCD_Write_COM_DATA(0x92, 0x0000); + LCD_Write_COM_DATA(0x93, 0x0003); + LCD_Write_COM_DATA(0x95, 0x0110); + LCD_Write_COM_DATA(0x97, 0x0000); + LCD_Write_COM_DATA(0x98, 0x0000); + //-----Display on----------------------- + LCD_Write_COM_DATA(0x07, 0x0173); + delay(50); + break; diff --git a/libraries/UTFT/tft_drivers/ili9320/setxy.h b/libraries/UTFT/tft_drivers/ili9320/setxy.h new file mode 100644 index 0000000..d54564f --- /dev/null +++ b/libraries/UTFT/tft_drivers/ili9320/setxy.h @@ -0,0 +1,10 @@ +case ILI9320_8: +case ILI9320_16: + LCD_Write_COM_DATA(0x20,x1); + LCD_Write_COM_DATA(0x21,y1); + LCD_Write_COM_DATA(0x50,x1); + LCD_Write_COM_DATA(0x52,y1); + LCD_Write_COM_DATA(0x51,x2); + LCD_Write_COM_DATA(0x53,y2); + LCD_Write_COM(0x22); + break; diff --git a/libraries/UTFT/tft_drivers/ili9325c/initlcd.h b/libraries/UTFT/tft_drivers/ili9325c/initlcd.h new file mode 100644 index 0000000..23fba46 --- /dev/null +++ b/libraries/UTFT/tft_drivers/ili9325c/initlcd.h @@ -0,0 +1,61 @@ +case ILI9325C: + LCD_Write_COM_DATA(0xE5, 0x78F0); // set SRAM internal timing + LCD_Write_COM_DATA(0x01, 0x0100); // set Driver Output Control + LCD_Write_COM_DATA(0x02, 0x0700); // set 1 line inversion + LCD_Write_COM_DATA(0x03, 0x1030); // set GRAM write direction and BGR=1. + LCD_Write_COM_DATA(0x04, 0x0000); // Resize register + LCD_Write_COM_DATA(0x08, 0x0207); // set the back porch and front porch + LCD_Write_COM_DATA(0x09, 0x0000); // set non-display area refresh cycle ISC[3:0] + LCD_Write_COM_DATA(0x0A, 0x0000); // FMARK function + LCD_Write_COM_DATA(0x0C, 0x0000); // RGB interface setting + LCD_Write_COM_DATA(0x0D, 0x0000); // Frame marker Position + LCD_Write_COM_DATA(0x0F, 0x0000); // RGB interface polarity + //*************Power On sequence ****************// + LCD_Write_COM_DATA(0x10, 0x0000); // SAP, BT[3:0], AP, DSTB, SLP, STB + LCD_Write_COM_DATA(0x11, 0x0007); // DC1[2:0], DC0[2:0], VC[2:0] + LCD_Write_COM_DATA(0x12, 0x0000); // VREG1OUT voltage + LCD_Write_COM_DATA(0x13, 0x0000); // VDV[4:0] for VCOM amplitude + LCD_Write_COM_DATA(0x07, 0x0001); + delay(200); // Dis-charge capacitor power voltage + LCD_Write_COM_DATA(0x10, 0x1090); // SAP, BT[3:0], AP, DSTB, SLP, STB + LCD_Write_COM_DATA(0x11, 0x0227); // Set DC1[2:0], DC0[2:0], VC[2:0] + delay(50); // Delay 50ms + LCD_Write_COM_DATA(0x12, 0x001F); // 0012 + delay(50); // Delay 50ms + LCD_Write_COM_DATA(0x13, 0x1500); // VDV[4:0] for VCOM amplitude + LCD_Write_COM_DATA(0x29, 0x0027); // 04 VCM[5:0] for VCOMH + LCD_Write_COM_DATA(0x2B, 0x000D); // Set Frame Rate + delay(50); // Delay 50ms + LCD_Write_COM_DATA(0x20, 0x0000); // GRAM horizontal Address + LCD_Write_COM_DATA(0x21, 0x0000); // GRAM Vertical Address + // ----------- Adjust the Gamma Curve ----------// + LCD_Write_COM_DATA(0x30, 0x0000); + LCD_Write_COM_DATA(0x31, 0x0707); + LCD_Write_COM_DATA(0x32, 0x0307); + LCD_Write_COM_DATA(0x35, 0x0200); + LCD_Write_COM_DATA(0x36, 0x0008); + LCD_Write_COM_DATA(0x37, 0x0004); + LCD_Write_COM_DATA(0x38, 0x0000); + LCD_Write_COM_DATA(0x39, 0x0707); + LCD_Write_COM_DATA(0x3C, 0x0002); + LCD_Write_COM_DATA(0x3D, 0x1D04); + //------------------ Set GRAM area ---------------// + LCD_Write_COM_DATA(0x50, 0x0000); // Horizontal GRAM Start Address + LCD_Write_COM_DATA(0x51, 0x00EF); // Horizontal GRAM End Address + LCD_Write_COM_DATA(0x52, 0x0000); // Vertical GRAM Start Address + LCD_Write_COM_DATA(0x53, 0x013F); // Vertical GRAM Start Address + LCD_Write_COM_DATA(0x60, 0xA700); // Gate Scan Line + LCD_Write_COM_DATA(0x61, 0x0001); // NDL,VLE, REV + LCD_Write_COM_DATA(0x6A, 0x0000); // set scrolling line + //-------------- Partial Display Control ---------// + LCD_Write_COM_DATA(0x80, 0x0000); + LCD_Write_COM_DATA(0x81, 0x0000); + LCD_Write_COM_DATA(0x82, 0x0000); + LCD_Write_COM_DATA(0x83, 0x0000); + LCD_Write_COM_DATA(0x84, 0x0000); + LCD_Write_COM_DATA(0x85, 0x0000); + //-------------- Panel Control -------------------// + LCD_Write_COM_DATA(0x90, 0x0010); + LCD_Write_COM_DATA(0x92, 0x0600); + LCD_Write_COM_DATA(0x07, 0x0133); // 262K color and display ON + break; diff --git a/libraries/UTFT/tft_drivers/ili9325c/setxy.h b/libraries/UTFT/tft_drivers/ili9325c/setxy.h new file mode 100644 index 0000000..6e7428d --- /dev/null +++ b/libraries/UTFT/tft_drivers/ili9325c/setxy.h @@ -0,0 +1,9 @@ +case ILI9325C: + LCD_Write_COM_DATA(0x20,x1); + LCD_Write_COM_DATA(0x21,y1); + LCD_Write_COM_DATA(0x50,x1); + LCD_Write_COM_DATA(0x52,y1); + LCD_Write_COM_DATA(0x51,x2); + LCD_Write_COM_DATA(0x53,y2); + LCD_Write_COM(0x22); + break; diff --git a/libraries/UTFT/tft_drivers/ili9325d/alt/initlcd.h b/libraries/UTFT/tft_drivers/ili9325d/alt/initlcd.h new file mode 100644 index 0000000..fa52c8d --- /dev/null +++ b/libraries/UTFT/tft_drivers/ili9325d/alt/initlcd.h @@ -0,0 +1,61 @@ +case ILI9325D_16ALT: + LCD_Write_COM_DATA(0xE5, 0x78F0); // set SRAM internal timing + LCD_Write_COM_DATA(0x01, 0x0100); // set Driver Output Control + LCD_Write_COM_DATA(0x02, 0x0700); // set 1 line inversion + LCD_Write_COM_DATA(0x03, 0x1030); // set GRAM write direction and BGR=1. + LCD_Write_COM_DATA(0x04, 0x0000); // Resize register + LCD_Write_COM_DATA(0x08, 0x0207); // set the back porch and front porch + LCD_Write_COM_DATA(0x09, 0x0000); // set non-display area refresh cycle ISC[3:0] + LCD_Write_COM_DATA(0x0A, 0x0000); // FMARK function + LCD_Write_COM_DATA(0x0C, 0x0000); // RGB interface setting + LCD_Write_COM_DATA(0x0D, 0x0000); // Frame marker Position + LCD_Write_COM_DATA(0x0F, 0x0000); // RGB interface polarity + //*************Power On sequence ****************// + LCD_Write_COM_DATA(0x10, 0x0000); // SAP, BT[3:0], AP, DSTB, SLP, STB + LCD_Write_COM_DATA(0x11, 0x0007); // DC1[2:0], DC0[2:0], VC[2:0] + LCD_Write_COM_DATA(0x12, 0x0000); // VREG1OUT voltage + LCD_Write_COM_DATA(0x13, 0x0000); // VDV[4:0] for VCOM amplitude + LCD_Write_COM_DATA(0x07, 0x0001); + delay(200); // Dis-charge capacitor power voltage + LCD_Write_COM_DATA(0x10, 0x1590); // SAP, BT[3:0], AP, DSTB, SLP, STB + LCD_Write_COM_DATA(0x11, 0x0227); // Set DC1[2:0], DC0[2:0], VC[2:0] + delay(50); // Delay 50ms + LCD_Write_COM_DATA(0x12, 0x009C); // 0012 + delay(50); // Delay 50ms + LCD_Write_COM_DATA(0x13, 0x1900); // VDV[4:0] for VCOM amplitude + LCD_Write_COM_DATA(0x29, 0x0023); // 04 VCM[5:0] for VCOMH + LCD_Write_COM_DATA(0x2B, 0x000E); // Set Frame Rate + delay(50); // Delay 50ms + LCD_Write_COM_DATA(0x20, 0x0000); // GRAM horizontal Address + LCD_Write_COM_DATA(0x21, 0x0000); // GRAM Vertical Address + // ----------- Adjust the Gamma Curve ----------// + LCD_Write_COM_DATA(0x30, 0x0000); + LCD_Write_COM_DATA(0x31, 0x0404); + LCD_Write_COM_DATA(0x32, 0x0003); + LCD_Write_COM_DATA(0x35, 0x0405); + LCD_Write_COM_DATA(0x36, 0x0808); + LCD_Write_COM_DATA(0x37, 0x0407); + LCD_Write_COM_DATA(0x38, 0x0303); + LCD_Write_COM_DATA(0x39, 0x0707); + LCD_Write_COM_DATA(0x3C, 0x0504); + LCD_Write_COM_DATA(0x3D, 0x0808); + //------------------ Set GRAM area ---------------// + LCD_Write_COM_DATA(0x50, 0x0000); // Horizontal GRAM Start Address + LCD_Write_COM_DATA(0x51, 0x00EF); // Horizontal GRAM End Address + LCD_Write_COM_DATA(0x52, 0x0000); // Vertical GRAM Start Address + LCD_Write_COM_DATA(0x53, 0x013F); // Vertical GRAM Start Address + LCD_Write_COM_DATA(0x60, 0xA700); // Gate Scan Line + LCD_Write_COM_DATA(0x61, 0x0001); // NDL,VLE, REV + LCD_Write_COM_DATA(0x6A, 0x0000); // set scrolling line + //-------------- Partial Display Control ---------// + LCD_Write_COM_DATA(0x80, 0x0000); + LCD_Write_COM_DATA(0x81, 0x0000); + LCD_Write_COM_DATA(0x82, 0x0000); + LCD_Write_COM_DATA(0x83, 0x0000); + LCD_Write_COM_DATA(0x84, 0x0000); + LCD_Write_COM_DATA(0x85, 0x0000); + //-------------- Panel Control -------------------// + LCD_Write_COM_DATA(0x90, 0x0010); + LCD_Write_COM_DATA(0x92, 0x0000); + LCD_Write_COM_DATA(0x07, 0x0133); // 262K color and display ON + break; diff --git a/libraries/UTFT/tft_drivers/ili9325d/alt/setxy.h b/libraries/UTFT/tft_drivers/ili9325d/alt/setxy.h new file mode 100644 index 0000000..95361e0 --- /dev/null +++ b/libraries/UTFT/tft_drivers/ili9325d/alt/setxy.h @@ -0,0 +1,9 @@ +case ILI9325D_16ALT: + LCD_Write_COM_DATA(0x20,x1); + LCD_Write_COM_DATA(0x21,y1); + LCD_Write_COM_DATA(0x50,x1); + LCD_Write_COM_DATA(0x52,y1); + LCD_Write_COM_DATA(0x51,x2); + LCD_Write_COM_DATA(0x53,y2); + LCD_Write_COM(0x22); + break; diff --git a/libraries/UTFT/tft_drivers/ili9325d/default/initlcd.h b/libraries/UTFT/tft_drivers/ili9325d/default/initlcd.h new file mode 100644 index 0000000..6ecb6e2 --- /dev/null +++ b/libraries/UTFT/tft_drivers/ili9325d/default/initlcd.h @@ -0,0 +1,62 @@ +case ILI9325D_8: +case ILI9325D_16: + LCD_Write_COM_DATA(0xE5, 0x78F0); // set SRAM internal timing + LCD_Write_COM_DATA(0x01, 0x0100); // set Driver Output Control + LCD_Write_COM_DATA(0x02, 0x0200); // set 1 line inversion + LCD_Write_COM_DATA(0x03, 0x1030); // set GRAM write direction and BGR=1. + LCD_Write_COM_DATA(0x04, 0x0000); // Resize register + LCD_Write_COM_DATA(0x08, 0x0207); // set the back porch and front porch + LCD_Write_COM_DATA(0x09, 0x0000); // set non-display area refresh cycle ISC[3:0] + LCD_Write_COM_DATA(0x0A, 0x0000); // FMARK function + LCD_Write_COM_DATA(0x0C, 0x0000); // RGB interface setting + LCD_Write_COM_DATA(0x0D, 0x0000); // Frame marker Position + LCD_Write_COM_DATA(0x0F, 0x0000); // RGB interface polarity + //*************Power On sequence ****************// + LCD_Write_COM_DATA(0x10, 0x0000); // SAP, BT[3:0], AP, DSTB, SLP, STB + LCD_Write_COM_DATA(0x11, 0x0007); // DC1[2:0], DC0[2:0], VC[2:0] + LCD_Write_COM_DATA(0x12, 0x0000); // VREG1OUT voltage + LCD_Write_COM_DATA(0x13, 0x0000); // VDV[4:0] for VCOM amplitude + LCD_Write_COM_DATA(0x07, 0x0001); + delay(200); // Dis-charge capacitor power voltage + LCD_Write_COM_DATA(0x10, 0x1690); // SAP, BT[3:0], AP, DSTB, SLP, STB + LCD_Write_COM_DATA(0x11, 0x0227); // Set DC1[2:0], DC0[2:0], VC[2:0] + delay(50); // Delay 50ms + LCD_Write_COM_DATA(0x12, 0x000D); // 0012 + delay(50); // Delay 50ms + LCD_Write_COM_DATA(0x13, 0x1200); // VDV[4:0] for VCOM amplitude + LCD_Write_COM_DATA(0x29, 0x000A); // 04 VCM[5:0] for VCOMH + LCD_Write_COM_DATA(0x2B, 0x000D); // Set Frame Rate + delay(50); // Delay 50ms + LCD_Write_COM_DATA(0x20, 0x0000); // GRAM horizontal Address + LCD_Write_COM_DATA(0x21, 0x0000); // GRAM Vertical Address + // ----------- Adjust the Gamma Curve ----------// + LCD_Write_COM_DATA(0x30, 0x0000); + LCD_Write_COM_DATA(0x31, 0x0404); + LCD_Write_COM_DATA(0x32, 0x0003); + LCD_Write_COM_DATA(0x35, 0x0405); + LCD_Write_COM_DATA(0x36, 0x0808); + LCD_Write_COM_DATA(0x37, 0x0407); + LCD_Write_COM_DATA(0x38, 0x0303); + LCD_Write_COM_DATA(0x39, 0x0707); + LCD_Write_COM_DATA(0x3C, 0x0504); + LCD_Write_COM_DATA(0x3D, 0x0808); + //------------------ Set GRAM area ---------------// + LCD_Write_COM_DATA(0x50, 0x0000); // Horizontal GRAM Start Address + LCD_Write_COM_DATA(0x51, 0x00EF); // Horizontal GRAM End Address + LCD_Write_COM_DATA(0x52, 0x0000); // Vertical GRAM Start Address + LCD_Write_COM_DATA(0x53, 0x013F); // Vertical GRAM Start Address + LCD_Write_COM_DATA(0x60, 0xA700); // Gate Scan Line + LCD_Write_COM_DATA(0x61, 0x0001); // NDL,VLE, REV + LCD_Write_COM_DATA(0x6A, 0x0000); // set scrolling line + //-------------- Partial Display Control ---------// + LCD_Write_COM_DATA(0x80, 0x0000); + LCD_Write_COM_DATA(0x81, 0x0000); + LCD_Write_COM_DATA(0x82, 0x0000); + LCD_Write_COM_DATA(0x83, 0x0000); + LCD_Write_COM_DATA(0x84, 0x0000); + LCD_Write_COM_DATA(0x85, 0x0000); + //-------------- Panel Control -------------------// + LCD_Write_COM_DATA(0x90, 0x0010); + LCD_Write_COM_DATA(0x92, 0x0000); + LCD_Write_COM_DATA(0x07, 0x0133); // 262K color and display ON + break; diff --git a/libraries/UTFT/tft_drivers/ili9325d/default/setxy.h b/libraries/UTFT/tft_drivers/ili9325d/default/setxy.h new file mode 100644 index 0000000..f5fdd94 --- /dev/null +++ b/libraries/UTFT/tft_drivers/ili9325d/default/setxy.h @@ -0,0 +1,10 @@ +case ILI9325D_8: +case ILI9325D_16: + LCD_Write_COM_DATA(0x20,x1); + LCD_Write_COM_DATA(0x21,y1); + LCD_Write_COM_DATA(0x50,x1); + LCD_Write_COM_DATA(0x52,y1); + LCD_Write_COM_DATA(0x51,x2); + LCD_Write_COM_DATA(0x53,y2); + LCD_Write_COM(0x22); + break; diff --git a/libraries/UTFT/tft_drivers/ili9327/initlcd.h b/libraries/UTFT/tft_drivers/ili9327/initlcd.h new file mode 100644 index 0000000..451806b --- /dev/null +++ b/libraries/UTFT/tft_drivers/ili9327/initlcd.h @@ -0,0 +1,63 @@ +case ILI9327: + LCD_Write_COM(0xE9); + LCD_Write_DATA(0x00,0x20); + LCD_Write_COM(0x11); //Exit Sleep + delay(100); + LCD_Write_COM(0xD1); + LCD_Write_DATA(0x00,0x00); + LCD_Write_DATA(0x00,0x71); + LCD_Write_DATA(0x00,0x19); + LCD_Write_COM(0xD0); + LCD_Write_DATA(0x00,0x07); + LCD_Write_DATA(0x00,0x01); + LCD_Write_DATA(0x00,0x08); + LCD_Write_COM(0x36); + LCD_Write_DATA(0x00,0x48); + LCD_Write_COM(0x3A); + LCD_Write_DATA(0x00,0x05); + LCD_Write_COM(0xC1); + LCD_Write_DATA(0x00,0x10); + LCD_Write_DATA(0x00,0x10); + LCD_Write_DATA(0x00,0x02); + LCD_Write_DATA(0x00,0x02); + LCD_Write_COM(0xC0); //Set Default Gamma + LCD_Write_DATA(0x00,0x00); + LCD_Write_DATA(0x00,0x35); + LCD_Write_DATA(0x00,0x00); + LCD_Write_DATA(0x00,0x00); + LCD_Write_DATA(0x00,0x01); + LCD_Write_DATA(0x00,0x02); + LCD_Write_COM(0xC5); //Set frame rate + LCD_Write_DATA(0x00,0x04); + LCD_Write_COM(0xD2); //power setting + LCD_Write_DATA(0x00,0x01); + LCD_Write_DATA(0x00,0x44); + LCD_Write_COM(0xC8); //Set Gamma + LCD_Write_DATA(0x00,0x04); + LCD_Write_DATA(0x00,0x67); + LCD_Write_DATA(0x00,0x35); + LCD_Write_DATA(0x00,0x04); + LCD_Write_DATA(0x00,0x08); + LCD_Write_DATA(0x00,0x06); + LCD_Write_DATA(0x00,0x24); + LCD_Write_DATA(0x00,0x01); + LCD_Write_DATA(0x00,0x37); + LCD_Write_DATA(0x00,0x40); + LCD_Write_DATA(0x00,0x03); + LCD_Write_DATA(0x00,0x10); + LCD_Write_DATA(0x00,0x08); + LCD_Write_DATA(0x00,0x80); + LCD_Write_DATA(0x00,0x00); + LCD_Write_COM(0x2A); + LCD_Write_DATA(0x00,0x00); + LCD_Write_DATA(0x00,0x00); + LCD_Write_DATA(0x00,0x00); + LCD_Write_DATA(0x00,0xeF); + LCD_Write_COM(0x2B); + LCD_Write_DATA(0x00,0x00); + LCD_Write_DATA(0x00,0x00); + LCD_Write_DATA(0x00,0x01); + LCD_Write_DATA(0x00,0x8F); + LCD_Write_COM(0x29); //display on + LCD_Write_COM(0x2C); //display on + break; diff --git a/libraries/UTFT/tft_drivers/ili9327/setxy.h b/libraries/UTFT/tft_drivers/ili9327/setxy.h new file mode 100644 index 0000000..6390c65 --- /dev/null +++ b/libraries/UTFT/tft_drivers/ili9327/setxy.h @@ -0,0 +1,13 @@ +case ILI9327: + LCD_Write_COM(0x2a); + LCD_Write_DATA(0x00,x1>>8); + LCD_Write_DATA(0x00,x1); + LCD_Write_DATA(0x00,x2>>8); + LCD_Write_DATA(0x00,x2); + LCD_Write_COM(0x2b); + LCD_Write_DATA(0x00,y1>>8); + LCD_Write_DATA(0x00,y1); + LCD_Write_DATA(0x00,y2>>8); + LCD_Write_DATA(0x00,y2); + LCD_Write_COM(0x2c); + break; diff --git a/libraries/UTFT/tft_drivers/ili9341/s4p/initlcd.h b/libraries/UTFT/tft_drivers/ili9341/s4p/initlcd.h new file mode 100644 index 0000000..0a5a082 --- /dev/null +++ b/libraries/UTFT/tft_drivers/ili9341/s4p/initlcd.h @@ -0,0 +1,58 @@ +case ILI9341_S4P: + LCD_Write_COM(0x11);//sleep out + delay(20); + //LCD_Write_COM(0x01); //reset + //delay(15); + LCD_Write_COM(0x28); //display off + delay(5); + LCD_Write_COM(0xCF); //power control b + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x83); //83 81 AA + LCD_Write_DATA(0x30); + LCD_Write_COM(0xED); //power on seq control + LCD_Write_DATA(0x64); //64 67 + LCD_Write_DATA(0x03); + LCD_Write_DATA(0x12); + LCD_Write_DATA(0x81); + LCD_Write_COM(0xE8); //timing control a + LCD_Write_DATA(0x85); + LCD_Write_DATA(0x01); + LCD_Write_DATA(0x79); //79 78 + LCD_Write_COM(0xCB); //power control a + LCD_Write_DATA(0x39); + LCD_Write_DATA(0X2C); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x34); + LCD_Write_DATA(0x02); + LCD_Write_COM(0xF7); //pump ratio control + LCD_Write_DATA(0x20); + LCD_Write_COM(0xEA); //timing control b + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x00); + LCD_Write_COM(0xC0); //power control 2 + LCD_Write_DATA(0x26); //26 25 + LCD_Write_COM(0xC1); //power control 2 + LCD_Write_DATA(0x11); + LCD_Write_COM(0xC5); //vcom control 1 + LCD_Write_DATA(0x35); + LCD_Write_DATA(0x3E); + LCD_Write_COM(0xC7); //vcom control 2 + LCD_Write_DATA(0xBE); //BE 94 + LCD_Write_COM(0xB1); //frame control + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x1B); //1B 70 + LCD_Write_COM(0xB6); //display control + LCD_Write_DATA(0x0A); + LCD_Write_DATA(0x82); + LCD_Write_DATA(0x27); + LCD_Write_DATA(0x00); + LCD_Write_COM(0xB7); //emtry mode + LCD_Write_DATA(0x07); + LCD_Write_COM(0x3A); //pixel format + LCD_Write_DATA(0x55); //16bit + LCD_Write_COM(0x36); //mem access + LCD_Write_DATA((1<<3)|(1<<6)); + //LCD_Write_DATA((1<<3)|(1<<7)); //rotate 180 + LCD_Write_COM(0x29); //display on + delay(5); + break; diff --git a/libraries/UTFT/tft_drivers/ili9341/s4p/setxy.h b/libraries/UTFT/tft_drivers/ili9341/s4p/setxy.h new file mode 100644 index 0000000..08ac212 --- /dev/null +++ b/libraries/UTFT/tft_drivers/ili9341/s4p/setxy.h @@ -0,0 +1,13 @@ +case ILI9341_S4P: + LCD_Write_COM(0x2A); //column + LCD_Write_DATA(x1>>8); + LCD_Write_DATA(x1); + LCD_Write_DATA(x2>>8); + LCD_Write_DATA(x2); + LCD_Write_COM(0x2B); //page + LCD_Write_DATA(y1>>8); + LCD_Write_DATA(y1); + LCD_Write_DATA(y2>>8); + LCD_Write_DATA(y2); + LCD_Write_COM(0x2C); //write + break; diff --git a/libraries/UTFT/tft_drivers/ili9341/s5p/initlcd.h b/libraries/UTFT/tft_drivers/ili9341/s5p/initlcd.h new file mode 100644 index 0000000..7afa6f6 --- /dev/null +++ b/libraries/UTFT/tft_drivers/ili9341/s5p/initlcd.h @@ -0,0 +1,105 @@ +case ILI9341_S5P: + LCD_Write_COM(0xCB); + LCD_Write_DATA(0x39); + LCD_Write_DATA(0x2C); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x34); + LCD_Write_DATA(0x02); + + LCD_Write_COM(0xCF); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0XC1); + LCD_Write_DATA(0X30); + + LCD_Write_COM(0xE8); + LCD_Write_DATA(0x85); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x78); + + LCD_Write_COM(0xEA); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x00); + + LCD_Write_COM(0xED); + LCD_Write_DATA(0x64); + LCD_Write_DATA(0x03); + LCD_Write_DATA(0X12); + LCD_Write_DATA(0X81); + + LCD_Write_COM(0xF7); + LCD_Write_DATA(0x20); + + LCD_Write_COM(0xC0); //Power control + LCD_Write_DATA(0x23); //VRH[5:0] + + LCD_Write_COM(0xC1); //Power control + LCD_Write_DATA(0x10); //SAP[2:0];BT[3:0] + + LCD_Write_COM(0xC5); //VCM control + LCD_Write_DATA(0x3e); //Contrast + LCD_Write_DATA(0x28); + + LCD_Write_COM(0xC7); //VCM control2 + LCD_Write_DATA(0x86); //-- + + LCD_Write_COM(0x36); // Memory Access Control + LCD_Write_DATA(0x48); + + LCD_Write_COM(0x3A); + LCD_Write_DATA(0x55); + + LCD_Write_COM(0xB1); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x18); + + LCD_Write_COM(0xB6); // Display Function Control + LCD_Write_DATA(0x08); + LCD_Write_DATA(0x82); + LCD_Write_DATA(0x27); +/* + LCD_Write_COM(0xF2); // 3Gamma Function Disable + LCD_Write_DATA(0x00); + + LCD_Write_COM(0x26); //Gamma curve selected + LCD_Write_DATA(0x01); + + LCD_Write_COM(0xE0); //Set Gamma + LCD_Write_DATA(0x0F); + LCD_Write_DATA(0x31); + LCD_Write_DATA(0x2B); + LCD_Write_DATA(0x0C); + LCD_Write_DATA(0x0E); + LCD_Write_DATA(0x08); + LCD_Write_DATA(0x4E); + LCD_Write_DATA(0xF1); + LCD_Write_DATA(0x37); + LCD_Write_DATA(0x07); + LCD_Write_DATA(0x10); + LCD_Write_DATA(0x03); + LCD_Write_DATA(0x0E); + LCD_Write_DATA(0x09); + LCD_Write_DATA(0x00); + + LCD_Write_COM(0XE1); //Set Gamma + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x0E); + LCD_Write_DATA(0x14); + LCD_Write_DATA(0x03); + LCD_Write_DATA(0x11); + LCD_Write_DATA(0x07); + LCD_Write_DATA(0x31); + LCD_Write_DATA(0xC1); + LCD_Write_DATA(0x48); + LCD_Write_DATA(0x08); + LCD_Write_DATA(0x0F); + LCD_Write_DATA(0x0C); + LCD_Write_DATA(0x31); + LCD_Write_DATA(0x36); + LCD_Write_DATA(0x0F); +*/ + LCD_Write_COM(0x11); //Exit Sleep + delay(120); + + LCD_Write_COM(0x29); //Display on + LCD_Write_COM(0x2c); + break; diff --git a/libraries/UTFT/tft_drivers/ili9341/s5p/setxy.h b/libraries/UTFT/tft_drivers/ili9341/s5p/setxy.h new file mode 100644 index 0000000..965f21d --- /dev/null +++ b/libraries/UTFT/tft_drivers/ili9341/s5p/setxy.h @@ -0,0 +1,13 @@ +case ILI9341_S5P: + LCD_Write_COM(0x2a); + LCD_Write_DATA(x1>>8); + LCD_Write_DATA(x1); + LCD_Write_DATA(x2>>8); + LCD_Write_DATA(x2); + LCD_Write_COM(0x2b); + LCD_Write_DATA(y1>>8); + LCD_Write_DATA(y1); + LCD_Write_DATA(y2>>8); + LCD_Write_DATA(y2); + LCD_Write_COM(0x2c); + break; diff --git a/libraries/UTFT/tft_drivers/ili9481/initlcd.h b/libraries/UTFT/tft_drivers/ili9481/initlcd.h new file mode 100644 index 0000000..74260ed --- /dev/null +++ b/libraries/UTFT/tft_drivers/ili9481/initlcd.h @@ -0,0 +1,62 @@ +case ILI9481: + LCD_Write_COM(0x11); + delay(20); + LCD_Write_COM(0xD0); + LCD_Write_DATA(0x07); + LCD_Write_DATA(0x42); + LCD_Write_DATA(0x18); + + LCD_Write_COM(0xD1); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x07); + LCD_Write_DATA(0x10); + + LCD_Write_COM(0xD2); + LCD_Write_DATA(0x01); + LCD_Write_DATA(0x02); + + LCD_Write_COM(0xC0); + LCD_Write_DATA(0x10); + LCD_Write_DATA(0x3B); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x02); + LCD_Write_DATA(0x11); + + LCD_Write_COM(0xC5); + LCD_Write_DATA(0x03); + + LCD_Write_COM(0xC8); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x32); + LCD_Write_DATA(0x36); + LCD_Write_DATA(0x45); + LCD_Write_DATA(0x06); + LCD_Write_DATA(0x16); + LCD_Write_DATA(0x37); + LCD_Write_DATA(0x75); + LCD_Write_DATA(0x77); + LCD_Write_DATA(0x54); + LCD_Write_DATA(0x0C); + LCD_Write_DATA(0x00); + + LCD_Write_COM(0x36); + LCD_Write_DATA(0x0A); + + + LCD_Write_COM(0x3A); + LCD_Write_DATA(0x55); + + LCD_Write_COM(0x2A); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x01); + LCD_Write_DATA(0x3F); + + LCD_Write_COM(0x2B); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x01); + LCD_Write_DATA(0xE0); + delay(120); + LCD_Write_COM(0x29); + break; diff --git a/libraries/UTFT/tft_drivers/ili9481/setxy.h b/libraries/UTFT/tft_drivers/ili9481/setxy.h new file mode 100644 index 0000000..e3e7ce2 --- /dev/null +++ b/libraries/UTFT/tft_drivers/ili9481/setxy.h @@ -0,0 +1,13 @@ +case ILI9481: + LCD_Write_COM(0x2a); + LCD_Write_DATA(x1>>8); + LCD_Write_DATA(x1); + LCD_Write_DATA(x2>>8); + LCD_Write_DATA(x2); + LCD_Write_COM(0x2b); + LCD_Write_DATA(y1>>8); + LCD_Write_DATA(y1); + LCD_Write_DATA(y2>>8); + LCD_Write_DATA(y2); + LCD_Write_COM(0x2c); + break; diff --git a/libraries/UTFT/tft_drivers/ili9486/initlcd.h b/libraries/UTFT/tft_drivers/ili9486/initlcd.h new file mode 100644 index 0000000..b67b0ed --- /dev/null +++ b/libraries/UTFT/tft_drivers/ili9486/initlcd.h @@ -0,0 +1,105 @@ +case ILI9486: + LCD_Write_COM(0x11); // Sleep OUT + delay(50); + + LCD_Write_COM(0xF2); // ????? + LCD_Write_DATA(0x1C); + LCD_Write_DATA(0xA3); + LCD_Write_DATA(0x32); + LCD_Write_DATA(0x02); + LCD_Write_DATA(0xb2); + LCD_Write_DATA(0x12); + LCD_Write_DATA(0xFF); + LCD_Write_DATA(0x12); + LCD_Write_DATA(0x00); + + LCD_Write_COM(0xF1); // ????? + LCD_Write_DATA(0x36); + LCD_Write_DATA(0xA4); + + LCD_Write_COM(0xF8); // ????? + LCD_Write_DATA(0x21); + LCD_Write_DATA(0x04); + + LCD_Write_COM(0xF9); // ????? + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x08); + + LCD_Write_COM(0xC0); // Power Control 1 + LCD_Write_DATA(0x0d); + LCD_Write_DATA(0x0d); + + LCD_Write_COM(0xC1); // Power Control 2 + LCD_Write_DATA(0x43); + LCD_Write_DATA(0x00); + + LCD_Write_COM(0xC2); // Power Control 3 + LCD_Write_DATA(0x00); + + LCD_Write_COM(0xC5); // VCOM Control + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x48); + + LCD_Write_COM(0xB6); // Display Function Control + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x22); // 0x42 = Rotate display 180 deg. + LCD_Write_DATA(0x3B); + + LCD_Write_COM(0xE0); // PGAMCTRL (Positive Gamma Control) + LCD_Write_DATA(0x0f); + LCD_Write_DATA(0x24); + LCD_Write_DATA(0x1c); + LCD_Write_DATA(0x0a); + LCD_Write_DATA(0x0f); + LCD_Write_DATA(0x08); + LCD_Write_DATA(0x43); + LCD_Write_DATA(0x88); + LCD_Write_DATA(0x32); + LCD_Write_DATA(0x0f); + LCD_Write_DATA(0x10); + LCD_Write_DATA(0x06); + LCD_Write_DATA(0x0f); + LCD_Write_DATA(0x07); + LCD_Write_DATA(0x00); + + LCD_Write_COM(0xE1); // NGAMCTRL (Negative Gamma Control) + LCD_Write_DATA(0x0F); + LCD_Write_DATA(0x38); + LCD_Write_DATA(0x30); + LCD_Write_DATA(0x09); + LCD_Write_DATA(0x0f); + LCD_Write_DATA(0x0f); + LCD_Write_DATA(0x4e); + LCD_Write_DATA(0x77); + LCD_Write_DATA(0x3c); + LCD_Write_DATA(0x07); + LCD_Write_DATA(0x10); + LCD_Write_DATA(0x05); + LCD_Write_DATA(0x23); + LCD_Write_DATA(0x1b); + LCD_Write_DATA(0x00); + + LCD_Write_COM(0x20); // Display Inversion OFF + LCD_Write_DATA(0x00);//C8 + + LCD_Write_COM(0x36); // Memory Access Control + LCD_Write_DATA(0x0A); + + LCD_Write_COM(0x3A); // Interface Pixel Format + LCD_Write_DATA(0x55); + + LCD_Write_COM(0x2A); // Column Addess Set + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x01); + LCD_Write_DATA(0xDF); + + LCD_Write_COM(0x002B); // Page Address Set + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x01); + LCD_Write_DATA(0x3f); + delay(50); + LCD_Write_COM(0x0029); // Display ON + LCD_Write_COM(0x002C); // Memory Write + break; diff --git a/libraries/UTFT/tft_drivers/ili9486/setxy.h b/libraries/UTFT/tft_drivers/ili9486/setxy.h new file mode 100644 index 0000000..df5beb3 --- /dev/null +++ b/libraries/UTFT/tft_drivers/ili9486/setxy.h @@ -0,0 +1,13 @@ +case ILI9486: + LCD_Write_COM(0x2a); + LCD_Write_DATA(x1>>8); + LCD_Write_DATA(x1); + LCD_Write_DATA(x2>>8); + LCD_Write_DATA(x2); + LCD_Write_COM(0x2b); + LCD_Write_DATA(y1>>8); + LCD_Write_DATA(y1); + LCD_Write_DATA(y2>>8); + LCD_Write_DATA(y2); + LCD_Write_COM(0x2c); + break; diff --git a/libraries/UTFT/tft_drivers/pcf8833/initlcd.h b/libraries/UTFT/tft_drivers/pcf8833/initlcd.h new file mode 100644 index 0000000..685f855 --- /dev/null +++ b/libraries/UTFT/tft_drivers/pcf8833/initlcd.h @@ -0,0 +1,30 @@ +case PCF8833: + LCD_Write_COM(0x01); + LCD_Write_COM(0x25); + LCD_Write_DATA(0x40); + LCD_Write_COM(0x11); + delay(10); + LCD_Write_COM(0x20); + LCD_Write_COM(0x38); + LCD_Write_COM(0x29); + LCD_Write_COM(0x13); + LCD_Write_COM(0x36); + LCD_Write_DATA(0x60); + LCD_Write_COM(0x3A); + LCD_Write_DATA(0x05); + LCD_Write_COM(0x2A); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x7F); + LCD_Write_COM(0xB4); + LCD_Write_DATA(0x03); + LCD_Write_DATA(0x08); + LCD_Write_DATA(0x0b); + LCD_Write_DATA(0x0e); + LCD_Write_COM(0xBA); + LCD_Write_DATA(0x07); + LCD_Write_DATA(0x0D); + LCD_Write_COM(0x2B); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x7F); + LCD_Write_COM(0x2C); + break; diff --git a/libraries/UTFT/tft_drivers/pcf8833/setxy.h b/libraries/UTFT/tft_drivers/pcf8833/setxy.h new file mode 100644 index 0000000..34dd38c --- /dev/null +++ b/libraries/UTFT/tft_drivers/pcf8833/setxy.h @@ -0,0 +1,9 @@ +case PCF8833: + LCD_Write_COM(0x2a); + LCD_Write_DATA(x1); + LCD_Write_DATA(x2); + LCD_Write_COM(0x2b); + LCD_Write_DATA(y1); + LCD_Write_DATA(y2); + LCD_Write_COM(0x2c); + break; diff --git a/libraries/UTFT/tft_drivers/r61581/initlcd.h b/libraries/UTFT/tft_drivers/r61581/initlcd.h new file mode 100644 index 0000000..6208485 --- /dev/null +++ b/libraries/UTFT/tft_drivers/r61581/initlcd.h @@ -0,0 +1,110 @@ +case R61581: + LCD_Write_COM(0xB0); + LCD_Write_DATA(0x1E); + + LCD_Write_COM(0xB0); + LCD_Write_DATA(0x00); + + LCD_Write_COM(0xB3); + LCD_Write_DATA(0x02); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x10); + + LCD_Write_COM(0xB4); + LCD_Write_DATA(0x00);//0X10 + +// LCD_Write_COM(0xB9); //PWM Settings for Brightness Control +// LCD_Write_DATA(0x01);// Disabled by default. +// LCD_Write_DATA(0xFF); //0xFF = Max brightness +// LCD_Write_DATA(0xFF); +// LCD_Write_DATA(0x18); + + LCD_Write_COM(0xC0); + LCD_Write_DATA(0x03); + LCD_Write_DATA(0x3B);// + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x01); + LCD_Write_DATA(0x00);//NW + LCD_Write_DATA(0x43); + + LCD_Write_COM(0xC1); + LCD_Write_DATA(0x08); + LCD_Write_DATA(0x15);//CLOCK + LCD_Write_DATA(0x08); + LCD_Write_DATA(0x08); + + LCD_Write_COM(0xC4); + LCD_Write_DATA(0x15); + LCD_Write_DATA(0x03); + LCD_Write_DATA(0x03); + LCD_Write_DATA(0x01); + + LCD_Write_COM(0xC6); + LCD_Write_DATA(0x02); + + LCD_Write_COM(0xC8); + LCD_Write_DATA(0x0c); + LCD_Write_DATA(0x05); + LCD_Write_DATA(0x0A);//0X12 + LCD_Write_DATA(0x6B);//0x7D + LCD_Write_DATA(0x04); + LCD_Write_DATA(0x06);//0x08 + LCD_Write_DATA(0x15);//0x0A + LCD_Write_DATA(0x10); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x60);//0x23 + + LCD_Write_COM(0x36); + LCD_Write_DATA(0x0A); + + LCD_Write_COM(0x0C); + LCD_Write_DATA(0x55); + + LCD_Write_COM(0x3A); + LCD_Write_DATA(0x55); + + LCD_Write_COM(0x38); + + LCD_Write_COM(0xD0); + LCD_Write_DATA(0x07); + LCD_Write_DATA(0x07);//VCI1 + LCD_Write_DATA(0x14);//VRH 0x1D + LCD_Write_DATA(0xA2);//BT 0x06 + + LCD_Write_COM(0xD1); + LCD_Write_DATA(0x03); + LCD_Write_DATA(0x5A);//VCM 0x5A + LCD_Write_DATA(0x10);//VDV + + LCD_Write_COM(0xD2); + LCD_Write_DATA(0x03); + LCD_Write_DATA(0x04);//0x24 + LCD_Write_DATA(0x04); + + LCD_Write_COM(0x11); + delay(150); + + LCD_Write_COM(0x2A); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x01); + LCD_Write_DATA(0xDF);//320 + + LCD_Write_COM(0x2B); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x01); + LCD_Write_DATA(0x3F);//480 + + + delay(100); + + LCD_Write_COM(0x29); + delay(30); + + LCD_Write_COM(0x2C); + delay(30); + break; diff --git a/libraries/UTFT/tft_drivers/r61581/setxy.h b/libraries/UTFT/tft_drivers/r61581/setxy.h new file mode 100644 index 0000000..29f356b --- /dev/null +++ b/libraries/UTFT/tft_drivers/r61581/setxy.h @@ -0,0 +1,13 @@ +case R61581: + LCD_Write_COM(0x2a); + LCD_Write_DATA(x1>>8); + LCD_Write_DATA(x1); + LCD_Write_DATA(x2>>8); + LCD_Write_DATA(x2); + LCD_Write_COM(0x2b); + LCD_Write_DATA(y1>>8); + LCD_Write_DATA(y1); + LCD_Write_DATA(y2>>8); + LCD_Write_DATA(y2); + LCD_Write_COM(0x2c); + break; diff --git a/libraries/UTFT/tft_drivers/s1d19122/initlcd.h b/libraries/UTFT/tft_drivers/s1d19122/initlcd.h new file mode 100644 index 0000000..33f2c65 --- /dev/null +++ b/libraries/UTFT/tft_drivers/s1d19122/initlcd.h @@ -0,0 +1,183 @@ +case S1D19122: + //************* Start Initial Sequence **********// + + int i,R,G,B; + LCD_Write_COM(0x11); + LCD_Write_COM(0x13); + LCD_Write_COM(0x29); + + //-------------- Display Control ---------// + LCD_Write_COM(0xB0); + + LCD_Write_DATA(0x05); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0xF0); + LCD_Write_DATA(0x0A); + LCD_Write_DATA(0x41); + LCD_Write_DATA(0x02); + LCD_Write_DATA(0x0A); + LCD_Write_DATA(0x30); + LCD_Write_DATA(0x31); + LCD_Write_DATA(0x36); + LCD_Write_DATA(0x37); + LCD_Write_DATA(0x40); + LCD_Write_DATA(0x02); + LCD_Write_DATA(0x3F); + LCD_Write_DATA(0x40); + LCD_Write_DATA(0x02); + LCD_Write_DATA(0x81); + LCD_Write_DATA(0x04); + LCD_Write_DATA(0x05); + LCD_Write_DATA(0x64); + + // ----------- Gamma Curve Set3 Postive----------// + LCD_Write_COM(0xFC); + + LCD_Write_DATA(0x88); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x10); + LCD_Write_DATA(0x01); + LCD_Write_DATA(0x01); + LCD_Write_DATA(0x10); + LCD_Write_DATA(0x42); + LCD_Write_DATA(0x42); + LCD_Write_DATA(0x22); + LCD_Write_DATA(0x11); + LCD_Write_DATA(0x11); + LCD_Write_DATA(0x22); + LCD_Write_DATA(0x99); + LCD_Write_DATA(0xAA); + LCD_Write_DATA(0xAA); + LCD_Write_DATA(0xAA); + LCD_Write_DATA(0xBB); + LCD_Write_DATA(0xBB); + LCD_Write_DATA(0xAA); + LCD_Write_DATA(0x33); + LCD_Write_DATA(0x33); + LCD_Write_DATA(0x11); + LCD_Write_DATA(0x01); + LCD_Write_DATA(0x01); + LCD_Write_DATA(0x01); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0xC0); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x00); + + // ----------- Gamma Curve Set3 Negative----------// + LCD_Write_COM(0xFD); + + LCD_Write_DATA(0x88); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x10); + LCD_Write_DATA(0x01); + LCD_Write_DATA(0x01); + LCD_Write_DATA(0x10); + LCD_Write_DATA(0x42); + LCD_Write_DATA(0x42); + LCD_Write_DATA(0x22); + LCD_Write_DATA(0x11); + LCD_Write_DATA(0x11); + LCD_Write_DATA(0x22); + LCD_Write_DATA(0x99); + LCD_Write_DATA(0xAA); + LCD_Write_DATA(0xAA); + LCD_Write_DATA(0xAA); + LCD_Write_DATA(0xBB); + LCD_Write_DATA(0xBB); + LCD_Write_DATA(0xAA); + LCD_Write_DATA(0x33); + LCD_Write_DATA(0x33); + LCD_Write_DATA(0x11); + LCD_Write_DATA(0x01); + LCD_Write_DATA(0x01); + LCD_Write_DATA(0x01); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x03); + + // ----------- EVRSER Regulator Voltage Setting---------// + LCD_Write_COM(0xBE); + + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x15); + LCD_Write_DATA(0x16); + LCD_Write_DATA(0x08); + LCD_Write_DATA(0x09); + LCD_Write_DATA(0x15); + LCD_Write_DATA(0x10); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x00); + + // -----------Module Definiton Setting---------// + LCD_Write_COM(0xC0); + + LCD_Write_DATA(0x0E); + LCD_Write_DATA(0x01); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x00); + + // -----------PWRDEF Power Ability Ddfinition----------// + LCD_Write_COM(0xC1); + + LCD_Write_DATA(0x2F); + LCD_Write_DATA(0x23); + LCD_Write_DATA(0xB4); + LCD_Write_DATA(0xFF); + LCD_Write_DATA(0x24); + LCD_Write_DATA(0x03); + LCD_Write_DATA(0x20); + LCD_Write_DATA(0x02); + LCD_Write_DATA(0x02); + LCD_Write_DATA(0x02); + LCD_Write_DATA(0x20); + LCD_Write_DATA(0x20); + LCD_Write_DATA(0x00); + + // -----------Other Setting----------// + LCD_Write_COM(0xC2); + LCD_Write_DATA(0x03); + LCD_Write_COM(0x26); + LCD_Write_DATA(0x08); + LCD_Write_COM(0x35); + + LCD_Write_COM(0x36); + LCD_Write_DATA(0x64); + LCD_Write_COM(0x3A); + LCD_Write_DATA(0x05); + LCD_Write_COM(0x2A); + LCD_Write_DATA(0x01,0x3f); + LCD_Write_COM(0x2B); + LCD_Write_DATA(0xEF); + LCD_Write_COM(0x2c); + + // -----------RGB Setting----------// + LCD_Write_COM(0x2D); + R=0; + G=0; + B=0; + + for(i=0;i<32;i++) + { + LCD_Write_DATA(R); + R=R+2; + } + for(i=0;i<64;i++) + { + LCD_Write_DATA(G); + G=G+1; + } + for(i=0;i<32;i++) + { + LCD_Write_DATA(B); + B=B+2; + } + break; diff --git a/libraries/UTFT/tft_drivers/s1d19122/setxy.h b/libraries/UTFT/tft_drivers/s1d19122/setxy.h new file mode 100644 index 0000000..d88c733 --- /dev/null +++ b/libraries/UTFT/tft_drivers/s1d19122/setxy.h @@ -0,0 +1,13 @@ +case S1D19122: + LCD_Write_COM(0x2a); + LCD_Write_DATA(x1>>8); + LCD_Write_DATA(x1); + LCD_Write_DATA(x2>>8); + LCD_Write_DATA(x2); + LCD_Write_COM(0x2b); + LCD_Write_DATA(y1>>8); + LCD_Write_DATA(y1); + LCD_Write_DATA(y2>>8); + LCD_Write_DATA(y2); + LCD_Write_COM(0x2c); + break; diff --git a/libraries/UTFT/tft_drivers/s6d0164/initlcd.h b/libraries/UTFT/tft_drivers/s6d0164/initlcd.h new file mode 100644 index 0000000..7b2716b --- /dev/null +++ b/libraries/UTFT/tft_drivers/s6d0164/initlcd.h @@ -0,0 +1,44 @@ +case S6D0164: + LCD_Write_COM_DATA(0x11,0x001A); + LCD_Write_COM_DATA(0x12,0x3121); + LCD_Write_COM_DATA(0x13,0x006C); + LCD_Write_COM_DATA(0x14,0x4249); + + LCD_Write_COM_DATA(0x10,0x0800); + delay(10); + LCD_Write_COM_DATA(0x11,0x011A); + delay(10); + LCD_Write_COM_DATA(0x11,0x031A); + delay(10); + LCD_Write_COM_DATA(0x11,0x071A); + delay(10); + LCD_Write_COM_DATA(0x11,0x0F1A); + delay(10); + LCD_Write_COM_DATA(0x11,0x0F3A); + delay(30); + + LCD_Write_COM_DATA(0x01,0x011C); + LCD_Write_COM_DATA(0x02,0x0100); + LCD_Write_COM_DATA(0x03,0x1030); + LCD_Write_COM_DATA(0x07,0x0000); + LCD_Write_COM_DATA(0x08,0x0808); + LCD_Write_COM_DATA(0x0B,0x1100); + LCD_Write_COM_DATA(0x0C,0x0000); + + LCD_Write_COM_DATA(0x0F,0x1401); + LCD_Write_COM_DATA(0x15,0x0000); + LCD_Write_COM_DATA(0x20,0x0000); + LCD_Write_COM_DATA(0x21,0x0000); + + + LCD_Write_COM_DATA(0x36,0x00AF); + LCD_Write_COM_DATA(0x37,0x0000); + LCD_Write_COM_DATA(0x38,0x00DB); + LCD_Write_COM_DATA(0x39,0x0000); + + LCD_Write_COM_DATA(0x0F,0x0B01); + LCD_Write_COM_DATA(0x07,0x0016); + LCD_Write_COM_DATA(0x07,0x0017); + + LCD_Write_COM(0x22); + break; diff --git a/libraries/UTFT/tft_drivers/s6d0164/setxy.h b/libraries/UTFT/tft_drivers/s6d0164/setxy.h new file mode 100644 index 0000000..6e5d5e9 --- /dev/null +++ b/libraries/UTFT/tft_drivers/s6d0164/setxy.h @@ -0,0 +1,9 @@ +case S6D0164: + LCD_Write_COM_DATA(0x36,x2); + LCD_Write_COM_DATA(0x37,x1); + LCD_Write_COM_DATA(0x38,y2); + LCD_Write_COM_DATA(0x39,y1); + LCD_Write_COM_DATA(0x20,x1); + LCD_Write_COM_DATA(0x21,y1); + LCD_Write_COM(0x22); + break; diff --git a/libraries/UTFT/tft_drivers/s6d1121/initlcd.h b/libraries/UTFT/tft_drivers/s6d1121/initlcd.h new file mode 100644 index 0000000..c8d80e6 --- /dev/null +++ b/libraries/UTFT/tft_drivers/s6d1121/initlcd.h @@ -0,0 +1,47 @@ +case S6D1121_8: +case S6D1121_16: + LCD_Write_COM_DATA(0x11,0x2004); + LCD_Write_COM_DATA(0x13,0xCC00); + LCD_Write_COM_DATA(0x15,0x2600); + LCD_Write_COM_DATA(0x14,0x252A); + LCD_Write_COM_DATA(0x12,0x0033); + LCD_Write_COM_DATA(0x13,0xCC04); + LCD_Write_COM_DATA(0x13,0xCC06); + LCD_Write_COM_DATA(0x13,0xCC4F); + LCD_Write_COM_DATA(0x13,0x674F); + LCD_Write_COM_DATA(0x11,0x2003); + LCD_Write_COM_DATA(0x30,0x2609); + LCD_Write_COM_DATA(0x31,0x242C); + LCD_Write_COM_DATA(0x32,0x1F23); + LCD_Write_COM_DATA(0x33,0x2425); + LCD_Write_COM_DATA(0x34,0x2226); + LCD_Write_COM_DATA(0x35,0x2523); + LCD_Write_COM_DATA(0x36,0x1C1A); + LCD_Write_COM_DATA(0x37,0x131D); + LCD_Write_COM_DATA(0x38,0x0B11); + LCD_Write_COM_DATA(0x39,0x1210); + LCD_Write_COM_DATA(0x3A,0x1315); + LCD_Write_COM_DATA(0x3B,0x3619); + LCD_Write_COM_DATA(0x3C,0x0D00); + LCD_Write_COM_DATA(0x3D,0x000D); + LCD_Write_COM_DATA(0x16,0x0007); + LCD_Write_COM_DATA(0x02,0x0013); + LCD_Write_COM_DATA(0x03,0x0003); + LCD_Write_COM_DATA(0x01,0x0127); + LCD_Write_COM_DATA(0x08,0x0303); + LCD_Write_COM_DATA(0x0A,0x000B); + LCD_Write_COM_DATA(0x0B,0x0003); + LCD_Write_COM_DATA(0x0C,0x0000); + LCD_Write_COM_DATA(0x41,0x0000); + LCD_Write_COM_DATA(0x50,0x0000); + LCD_Write_COM_DATA(0x60,0x0005); + LCD_Write_COM_DATA(0x70,0x000B); + LCD_Write_COM_DATA(0x71,0x0000); + LCD_Write_COM_DATA(0x78,0x0000); + LCD_Write_COM_DATA(0x7A,0x0000); + LCD_Write_COM_DATA(0x79,0x0007); + LCD_Write_COM_DATA(0x07,0x0051); + LCD_Write_COM_DATA(0x07,0x0053); + LCD_Write_COM_DATA(0x79,0x0000); + LCD_Write_COM(0x22); + break; diff --git a/libraries/UTFT/tft_drivers/s6d1121/setxy.h b/libraries/UTFT/tft_drivers/s6d1121/setxy.h new file mode 100644 index 0000000..c2f5a1f --- /dev/null +++ b/libraries/UTFT/tft_drivers/s6d1121/setxy.h @@ -0,0 +1,9 @@ +case S6D1121_8: +case S6D1121_16: + LCD_Write_COM_DATA(0x46,(x2 << 8) | x1); + LCD_Write_COM_DATA(0x47,y2); + LCD_Write_COM_DATA(0x48,y1); + LCD_Write_COM_DATA(0x20,x1); + LCD_Write_COM_DATA(0x21,y1); + LCD_Write_COM(0x22); + break; diff --git a/libraries/UTFT/tft_drivers/ssd1289/initlcd.h b/libraries/UTFT/tft_drivers/ssd1289/initlcd.h new file mode 100644 index 0000000..0d63d92 --- /dev/null +++ b/libraries/UTFT/tft_drivers/ssd1289/initlcd.h @@ -0,0 +1,46 @@ +case SSD1289: +case SSD1289_8: +case SSD1289LATCHED: + LCD_Write_COM_DATA(0x00,0x0001); + LCD_Write_COM_DATA(0x03,0xA8A4); + LCD_Write_COM_DATA(0x0C,0x0000); + LCD_Write_COM_DATA(0x0D,0x080C); + LCD_Write_COM_DATA(0x0E,0x2B00); + LCD_Write_COM_DATA(0x1E,0x00B7); + LCD_Write_COM_DATA(0x01,0x2B3F); + LCD_Write_COM_DATA(0x02,0x0600); + LCD_Write_COM_DATA(0x10,0x0000); + LCD_Write_COM_DATA(0x11,0x6070); + LCD_Write_COM_DATA(0x05,0x0000); + LCD_Write_COM_DATA(0x06,0x0000); + LCD_Write_COM_DATA(0x16,0xEF1C); + LCD_Write_COM_DATA(0x17,0x0003); + LCD_Write_COM_DATA(0x07,0x0233); + LCD_Write_COM_DATA(0x0B,0x0000); + LCD_Write_COM_DATA(0x0F,0x0000); + LCD_Write_COM_DATA(0x41,0x0000); + LCD_Write_COM_DATA(0x42,0x0000); + LCD_Write_COM_DATA(0x48,0x0000); + LCD_Write_COM_DATA(0x49,0x013F); + LCD_Write_COM_DATA(0x4A,0x0000); + LCD_Write_COM_DATA(0x4B,0x0000); + LCD_Write_COM_DATA(0x44,0xEF00); + LCD_Write_COM_DATA(0x45,0x0000); + LCD_Write_COM_DATA(0x46,0x013F); + LCD_Write_COM_DATA(0x30,0x0707); + LCD_Write_COM_DATA(0x31,0x0204); + LCD_Write_COM_DATA(0x32,0x0204); + LCD_Write_COM_DATA(0x33,0x0502); + LCD_Write_COM_DATA(0x34,0x0507); + LCD_Write_COM_DATA(0x35,0x0204); + LCD_Write_COM_DATA(0x36,0x0204); + LCD_Write_COM_DATA(0x37,0x0502); + LCD_Write_COM_DATA(0x3A,0x0302); + LCD_Write_COM_DATA(0x3B,0x0302); + LCD_Write_COM_DATA(0x23,0x0000); + LCD_Write_COM_DATA(0x24,0x0000); + LCD_Write_COM_DATA(0x25,0x8000); + LCD_Write_COM_DATA(0x4f,0x0000); + LCD_Write_COM_DATA(0x4e,0x0000); + LCD_Write_COM(0x22); + break; diff --git a/libraries/UTFT/tft_drivers/ssd1289/setxy.h b/libraries/UTFT/tft_drivers/ssd1289/setxy.h new file mode 100644 index 0000000..28b0efd --- /dev/null +++ b/libraries/UTFT/tft_drivers/ssd1289/setxy.h @@ -0,0 +1,10 @@ +case SSD1289: +case SSD1289_8: +case SSD1289LATCHED: + LCD_Write_COM_DATA(0x44,(x2<<8)+x1); + LCD_Write_COM_DATA(0x45,y1); + LCD_Write_COM_DATA(0x46,y2); + LCD_Write_COM_DATA(0x4e,x1); + LCD_Write_COM_DATA(0x4f,y1); + LCD_Write_COM(0x22); + break; diff --git a/libraries/UTFT/tft_drivers/ssd1963/480/initlcd.h b/libraries/UTFT/tft_drivers/ssd1963/480/initlcd.h new file mode 100644 index 0000000..a051795 --- /dev/null +++ b/libraries/UTFT/tft_drivers/ssd1963/480/initlcd.h @@ -0,0 +1,78 @@ +case SSD1963_480: + LCD_Write_COM(0xE2); //PLL multiplier, set PLL clock to 120M + LCD_Write_DATA(0x23); //N=0x36 for 6.5M, 0x23 for 10M crystal + LCD_Write_DATA(0x02); + LCD_Write_DATA(0x54); + LCD_Write_COM(0xE0); // PLL enable + LCD_Write_DATA(0x01); + delay(10); + LCD_Write_COM(0xE0); + LCD_Write_DATA(0x03); + delay(10); + LCD_Write_COM(0x01); // software reset + delay(100); + LCD_Write_COM(0xE6); //PLL setting for PCLK, depends on resolution + LCD_Write_DATA(0x01); + LCD_Write_DATA(0x1F); + LCD_Write_DATA(0xFF); + + LCD_Write_COM(0xB0); //LCD SPECIFICATION + LCD_Write_DATA(0x20); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x01); //Set HDP 479 + LCD_Write_DATA(0xDF); + LCD_Write_DATA(0x01); //Set VDP 271 + LCD_Write_DATA(0x0F); + LCD_Write_DATA(0x00); + + LCD_Write_COM(0xB4); //HSYNC + LCD_Write_DATA(0x02); //Set HT 531 + LCD_Write_DATA(0x13); + LCD_Write_DATA(0x00); //Set HPS 8 + LCD_Write_DATA(0x08); + LCD_Write_DATA(0x2B); //Set HPW 43 + LCD_Write_DATA(0x00); //Set LPS 2 + LCD_Write_DATA(0x02); + LCD_Write_DATA(0x00); + + LCD_Write_COM(0xB6); //VSYNC + LCD_Write_DATA(0x01); //Set VT 288 + LCD_Write_DATA(0x20); + LCD_Write_DATA(0x00); //Set VPS 4 + LCD_Write_DATA(0x04); + LCD_Write_DATA(0x0c); //Set VPW 12 + LCD_Write_DATA(0x00); //Set FPS 2 + LCD_Write_DATA(0x02); + + LCD_Write_COM(0xBA); + LCD_Write_DATA(0x0F); //GPIO[3:0] out 1 + + LCD_Write_COM(0xB8); + LCD_Write_DATA(0x07); //GPIO3=input, GPIO[2:0]=output + LCD_Write_DATA(0x01); //GPIO0 normal + + LCD_Write_COM(0x36); //rotation + LCD_Write_DATA(0x22); + + LCD_Write_COM(0xF0); //pixel data interface + LCD_Write_DATA(0x03); + + + delay(1); + + setXY(0, 0, 479, 271); + LCD_Write_COM(0x29); //display on + + LCD_Write_COM(0xBE); //set PWM for B/L + LCD_Write_DATA(0x06); + LCD_Write_DATA(0xf0); + LCD_Write_DATA(0x01); + LCD_Write_DATA(0xf0); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x00); + + LCD_Write_COM(0xd0); + LCD_Write_DATA(0x0d); + + LCD_Write_COM(0x2C); + break; diff --git a/libraries/UTFT/tft_drivers/ssd1963/480/setxy.h b/libraries/UTFT/tft_drivers/ssd1963/480/setxy.h new file mode 100644 index 0000000..e2b9297 --- /dev/null +++ b/libraries/UTFT/tft_drivers/ssd1963/480/setxy.h @@ -0,0 +1,15 @@ +case SSD1963_480: + swap(word, x1, y1); + swap(word, x2, y2); + LCD_Write_COM(0x2a); + LCD_Write_DATA(x1>>8); + LCD_Write_DATA(x1); + LCD_Write_DATA(x2>>8); + LCD_Write_DATA(x2); + LCD_Write_COM(0x2b); + LCD_Write_DATA(y1>>8); + LCD_Write_DATA(y1); + LCD_Write_DATA(y2>>8); + LCD_Write_DATA(y2); + LCD_Write_COM(0x2c); + break; diff --git a/libraries/UTFT/tft_drivers/ssd1963/800/initlcd.h b/libraries/UTFT/tft_drivers/ssd1963/800/initlcd.h new file mode 100644 index 0000000..722286d --- /dev/null +++ b/libraries/UTFT/tft_drivers/ssd1963/800/initlcd.h @@ -0,0 +1,78 @@ +case SSD1963_800: + LCD_Write_COM(0xE2); //PLL multiplier, set PLL clock to 120M + LCD_Write_DATA(0x1E); //N=0x36 for 6.5M, 0x23 for 10M crystal + LCD_Write_DATA(0x02); + LCD_Write_DATA(0x54); + LCD_Write_COM(0xE0); // PLL enable + LCD_Write_DATA(0x01); + delay(10); + LCD_Write_COM(0xE0); + LCD_Write_DATA(0x03); + delay(10); + LCD_Write_COM(0x01); // software reset + delay(100); + LCD_Write_COM(0xE6); //PLL setting for PCLK, depends on resolution + LCD_Write_DATA(0x03); + LCD_Write_DATA(0xFF); + LCD_Write_DATA(0xFF); + + LCD_Write_COM(0xB0); //LCD SPECIFICATION + LCD_Write_DATA(0x24); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x03); //Set HDP 799 + LCD_Write_DATA(0x1F); + LCD_Write_DATA(0x01); //Set VDP 479 + LCD_Write_DATA(0xDF); + LCD_Write_DATA(0x00); + + LCD_Write_COM(0xB4); //HSYNC + LCD_Write_DATA(0x03); //Set HT 928 + LCD_Write_DATA(0xA0); + LCD_Write_DATA(0x00); //Set HPS 46 + LCD_Write_DATA(0x2E); + LCD_Write_DATA(0x30); //Set HPW 48 + LCD_Write_DATA(0x00); //Set LPS 15 + LCD_Write_DATA(0x0F); + LCD_Write_DATA(0x00); + + LCD_Write_COM(0xB6); //VSYNC + LCD_Write_DATA(0x02); //Set VT 525 + LCD_Write_DATA(0x0D); + LCD_Write_DATA(0x00); //Set VPS 16 + LCD_Write_DATA(0x10); + LCD_Write_DATA(0x10); //Set VPW 16 + LCD_Write_DATA(0x00); //Set FPS 8 + LCD_Write_DATA(0x08); + + LCD_Write_COM(0xBA); + LCD_Write_DATA(0x0F); //GPIO[3:0] out 1 + + LCD_Write_COM(0xB8); + LCD_Write_DATA(0x07); //GPIO3=input, GPIO[2:0]=output + LCD_Write_DATA(0x01); //GPIO0 normal + + LCD_Write_COM(0x36); //rotation + LCD_Write_DATA(0x22); + + LCD_Write_COM(0xF0); //pixel data interface + LCD_Write_DATA(0x03); + + + delay(1); + + setXY(0, 0, 799, 479); + LCD_Write_COM(0x29); //display on + + LCD_Write_COM(0xBE); //set PWM for B/L + LCD_Write_DATA(0x06); + LCD_Write_DATA(0xf0); + LCD_Write_DATA(0x01); + LCD_Write_DATA(0xf0); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x00); + + LCD_Write_COM(0xd0); + LCD_Write_DATA(0x0d); + + LCD_Write_COM(0x2C); + break; diff --git a/libraries/UTFT/tft_drivers/ssd1963/800/setxy.h b/libraries/UTFT/tft_drivers/ssd1963/800/setxy.h new file mode 100644 index 0000000..1b2fed7 --- /dev/null +++ b/libraries/UTFT/tft_drivers/ssd1963/800/setxy.h @@ -0,0 +1,15 @@ +case SSD1963_800: + swap(word, x1, y1); + swap(word, x2, y2); + LCD_Write_COM(0x2a); + LCD_Write_DATA(x1>>8); + LCD_Write_DATA(x1); + LCD_Write_DATA(x2>>8); + LCD_Write_DATA(x2); + LCD_Write_COM(0x2b); + LCD_Write_DATA(y1>>8); + LCD_Write_DATA(y1); + LCD_Write_DATA(y2>>8); + LCD_Write_DATA(y2); + LCD_Write_COM(0x2c); + break; diff --git a/libraries/UTFT/tft_drivers/ssd1963/800alt/initlcd.h b/libraries/UTFT/tft_drivers/ssd1963/800alt/initlcd.h new file mode 100644 index 0000000..a0cbecc --- /dev/null +++ b/libraries/UTFT/tft_drivers/ssd1963/800alt/initlcd.h @@ -0,0 +1,78 @@ +case SSD1963_800ALT: + LCD_Write_COM(0xE2); //PLL multiplier, set PLL clock to 120M + LCD_Write_DATA(0x23); //N=0x36 for 6.5M, 0x23 for 10M crystal + LCD_Write_DATA(0x02); + LCD_Write_DATA(0x04); + LCD_Write_COM(0xE0); // PLL enable + LCD_Write_DATA(0x01); + delay(10); + LCD_Write_COM(0xE0); + LCD_Write_DATA(0x03); + delay(10); + LCD_Write_COM(0x01); // software reset + delay(100); + LCD_Write_COM(0xE6); //PLL setting for PCLK, depends on resolution + LCD_Write_DATA(0x04); + LCD_Write_DATA(0x93); + LCD_Write_DATA(0xE0); + + LCD_Write_COM(0xB0); //LCD SPECIFICATION + LCD_Write_DATA(0x00); // 0x24 + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x03); //Set HDP 799 + LCD_Write_DATA(0x1F); + LCD_Write_DATA(0x01); //Set VDP 479 + LCD_Write_DATA(0xDF); + LCD_Write_DATA(0x00); + + LCD_Write_COM(0xB4); //HSYNC + LCD_Write_DATA(0x03); //Set HT 928 + LCD_Write_DATA(0xA0); + LCD_Write_DATA(0x00); //Set HPS 46 + LCD_Write_DATA(0x2E); + LCD_Write_DATA(0x30); //Set HPW 48 + LCD_Write_DATA(0x00); //Set LPS 15 + LCD_Write_DATA(0x0F); + LCD_Write_DATA(0x00); + + LCD_Write_COM(0xB6); //VSYNC + LCD_Write_DATA(0x02); //Set VT 525 + LCD_Write_DATA(0x0D); + LCD_Write_DATA(0x00); //Set VPS 16 + LCD_Write_DATA(0x10); + LCD_Write_DATA(0x10); //Set VPW 16 + LCD_Write_DATA(0x00); //Set FPS 8 + LCD_Write_DATA(0x08); + + LCD_Write_COM(0xBA); + LCD_Write_DATA(0x05); //GPIO[3:0] out 1 + + LCD_Write_COM(0xB8); + LCD_Write_DATA(0x07); //GPIO3=input, GPIO[2:0]=output + LCD_Write_DATA(0x01); //GPIO0 normal + + LCD_Write_COM(0x36); //rotation + LCD_Write_DATA(0x22); // -- Set to 0x21 to rotate 180 degrees + + LCD_Write_COM(0xF0); //pixel data interface + LCD_Write_DATA(0x03); + + + delay(10); + + setXY(0, 0, 799, 479); + LCD_Write_COM(0x29); //display on + + LCD_Write_COM(0xBE); //set PWM for B/L + LCD_Write_DATA(0x06); + LCD_Write_DATA(0xF0); + LCD_Write_DATA(0x01); + LCD_Write_DATA(0xF0); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x00); + + LCD_Write_COM(0xD0); + LCD_Write_DATA(0x0D); + + LCD_Write_COM(0x2C); + break; diff --git a/libraries/UTFT/tft_drivers/ssd1963/800alt/setxy.h b/libraries/UTFT/tft_drivers/ssd1963/800alt/setxy.h new file mode 100644 index 0000000..7e6a81d --- /dev/null +++ b/libraries/UTFT/tft_drivers/ssd1963/800alt/setxy.h @@ -0,0 +1,15 @@ +case SSD1963_800ALT: + swap(word, x1, y1); + swap(word, x2, y2); + LCD_Write_COM(0x2a); + LCD_Write_DATA(x1>>8); + LCD_Write_DATA(x1); + LCD_Write_DATA(x2>>8); + LCD_Write_DATA(x2); + LCD_Write_COM(0x2b); + LCD_Write_DATA(y1>>8); + LCD_Write_DATA(y1); + LCD_Write_DATA(y2>>8); + LCD_Write_DATA(y2); + LCD_Write_COM(0x2c); + break; diff --git a/libraries/UTFT/tft_drivers/st7735/initlcd.h b/libraries/UTFT/tft_drivers/st7735/initlcd.h new file mode 100644 index 0000000..63439c7 --- /dev/null +++ b/libraries/UTFT/tft_drivers/st7735/initlcd.h @@ -0,0 +1,104 @@ +case ST7735: + LCD_Write_COM(0x11);//Sleep exit + delay(12); + + //ST7735R Frame Rate + LCD_Write_COM(0xB1); + LCD_Write_DATA(0x01); + LCD_Write_DATA(0x2C); + LCD_Write_DATA(0x2D); + LCD_Write_COM(0xB2); + LCD_Write_DATA(0x01); + LCD_Write_DATA(0x2C); + LCD_Write_DATA(0x2D); + LCD_Write_COM(0xB3); + LCD_Write_DATA(0x01); + LCD_Write_DATA(0x2C); + LCD_Write_DATA(0x2D); + LCD_Write_DATA(0x01); + LCD_Write_DATA(0x2C); + LCD_Write_DATA(0x2D); + + LCD_Write_COM(0xB4); //Column inversion + LCD_Write_DATA(0x07); + + //ST7735R Power Sequence + LCD_Write_COM(0xC0); + LCD_Write_DATA(0xA2); + LCD_Write_DATA(0x02); + LCD_Write_DATA(0x84); + LCD_Write_COM(0xC1); + LCD_Write_DATA(0xC5); + LCD_Write_COM(0xC2); + LCD_Write_DATA(0x0A); + LCD_Write_DATA(0x00); + LCD_Write_COM(0xC3); + LCD_Write_DATA(0x8A); + LCD_Write_DATA(0x2A); + LCD_Write_COM(0xC4); + LCD_Write_DATA(0x8A); + LCD_Write_DATA(0xEE); + + LCD_Write_COM(0xC5); //VCOM + LCD_Write_DATA(0x0E); + + LCD_Write_COM(0x36); //MX, MY, RGB mode + LCD_Write_DATA(0xC8); + + //ST7735R Gamma Sequence + LCD_Write_COM(0xe0); + LCD_Write_DATA(0x0f); + LCD_Write_DATA(0x1a); + LCD_Write_DATA(0x0f); + LCD_Write_DATA(0x18); + LCD_Write_DATA(0x2f); + LCD_Write_DATA(0x28); + LCD_Write_DATA(0x20); + LCD_Write_DATA(0x22); + LCD_Write_DATA(0x1f); + LCD_Write_DATA(0x1b); + LCD_Write_DATA(0x23); + LCD_Write_DATA(0x37); + LCD_Write_DATA(0x00); + + LCD_Write_DATA(0x07); + LCD_Write_DATA(0x02); + LCD_Write_DATA(0x10); + LCD_Write_COM(0xe1); + LCD_Write_DATA(0x0f); + LCD_Write_DATA(0x1b); + LCD_Write_DATA(0x0f); + LCD_Write_DATA(0x17); + LCD_Write_DATA(0x33); + LCD_Write_DATA(0x2c); + LCD_Write_DATA(0x29); + LCD_Write_DATA(0x2e); + LCD_Write_DATA(0x30); + LCD_Write_DATA(0x30); + LCD_Write_DATA(0x39); + LCD_Write_DATA(0x3f); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x07); + LCD_Write_DATA(0x03); + LCD_Write_DATA(0x10); + + LCD_Write_COM(0x2a); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x7f); + LCD_Write_COM(0x2b); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x9f); + + LCD_Write_COM(0xF0); //Enable test command + LCD_Write_DATA(0x01); + LCD_Write_COM(0xF6); //Disable ram power save mode + LCD_Write_DATA(0x00); + + LCD_Write_COM(0x3A); //65k mode + LCD_Write_DATA(0x05); + LCD_Write_COM(0x29);//Display on + break; diff --git a/libraries/UTFT/tft_drivers/st7735/setxy.h b/libraries/UTFT/tft_drivers/st7735/setxy.h new file mode 100644 index 0000000..ff38181 --- /dev/null +++ b/libraries/UTFT/tft_drivers/st7735/setxy.h @@ -0,0 +1,13 @@ +case ST7735: + LCD_Write_COM(0x2a); + LCD_Write_DATA(x1>>8); + LCD_Write_DATA(x1); + LCD_Write_DATA(x2>>8); + LCD_Write_DATA(x2); + LCD_Write_COM(0x2b); + LCD_Write_DATA(y1>>8); + LCD_Write_DATA(y1); + LCD_Write_DATA(y2>>8); + LCD_Write_DATA(y2); + LCD_Write_COM(0x2c); + break; diff --git a/libraries/UTFT/tft_drivers/st7735s/initlcd.h b/libraries/UTFT/tft_drivers/st7735s/initlcd.h new file mode 100644 index 0000000..d28296d --- /dev/null +++ b/libraries/UTFT/tft_drivers/st7735s/initlcd.h @@ -0,0 +1,98 @@ +case ST7735S: + LCD_Write_COM(0x11);//Sleep exit + delay(120); + + //ST7735R Frame Rate + LCD_Write_COM(0xB1); + LCD_Write_DATA(0x05); + LCD_Write_DATA(0x3C); + LCD_Write_DATA(0x3C); + LCD_Write_COM(0xB2); + LCD_Write_DATA(0x05); + LCD_Write_DATA(0x3C); + LCD_Write_DATA(0x3C); + LCD_Write_COM(0xB3); + LCD_Write_DATA(0x05); + LCD_Write_DATA(0x3C); + LCD_Write_DATA(0x3C); + LCD_Write_DATA(0x05); + LCD_Write_DATA(0x3C); + LCD_Write_DATA(0x3C); + + LCD_Write_COM(0xB4); //Column inversion + LCD_Write_DATA(0x03); + + //ST7735R Power Sequence + LCD_Write_COM(0xC0); + LCD_Write_DATA(0x28); + LCD_Write_DATA(0x08); + LCD_Write_DATA(0x04); + LCD_Write_COM(0xC1); + LCD_Write_DATA(0xC0); + LCD_Write_COM(0xC2); + LCD_Write_DATA(0x0D); + LCD_Write_DATA(0x00); + LCD_Write_COM(0xC3); + LCD_Write_DATA(0x8D); + LCD_Write_DATA(0x2A); + LCD_Write_COM(0xC4); + LCD_Write_DATA(0x8D); + LCD_Write_DATA(0xEE); + + LCD_Write_COM(0xC5); //VCOM + LCD_Write_DATA(0x1A); + + LCD_Write_COM(0x36); //MX, MY, RGB mode + LCD_Write_DATA(0xC0); + + //ST7735R Gamma Sequence + LCD_Write_COM(0xE0); + LCD_Write_DATA(0x03); + LCD_Write_DATA(0x22); + LCD_Write_DATA(0x07); + LCD_Write_DATA(0x0A); + LCD_Write_DATA(0x2E); + LCD_Write_DATA(0x30); + LCD_Write_DATA(0x25); + LCD_Write_DATA(0x2A); + LCD_Write_DATA(0x28); + LCD_Write_DATA(0x26); + LCD_Write_DATA(0x2E); + LCD_Write_DATA(0x3A); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x01); + LCD_Write_DATA(0x03); + LCD_Write_DATA(0x13); + LCD_Write_COM(0xE1); + LCD_Write_DATA(0x04); + LCD_Write_DATA(0x16); + LCD_Write_DATA(0x06); + LCD_Write_DATA(0x0D); + LCD_Write_DATA(0x2D); + LCD_Write_DATA(0x26); + LCD_Write_DATA(0x23); + LCD_Write_DATA(0x27); + LCD_Write_DATA(0x27); + LCD_Write_DATA(0x25); + LCD_Write_DATA(0x2D); + LCD_Write_DATA(0x3B); + LCD_Write_DATA(0x00); + LCD_Write_DATA(0x01); + LCD_Write_DATA(0x04); + LCD_Write_DATA(0x13); + + //LCD_Write_COM(0x2A); + //LCD_Write_DATA(0x00); + //LCD_Write_DATA(0x00); + //LCD_Write_DATA(0x00); + //LCD_Write_DATA(0x7F); + //LCD_Write_COM(0x2B); + //LCD_Write_DATA(0x00); + //LCD_Write_DATA(0x00); + //LCD_Write_DATA(0x00); + //LCD_Write_DATA(0x9F); + + LCD_Write_COM(0x3A); //65k mode + LCD_Write_DATA(0x05); + LCD_Write_COM(0x29);//Display on + break; diff --git a/libraries/UTFT/tft_drivers/st7735s/setxy.h b/libraries/UTFT/tft_drivers/st7735s/setxy.h new file mode 100644 index 0000000..b7a1c64 --- /dev/null +++ b/libraries/UTFT/tft_drivers/st7735s/setxy.h @@ -0,0 +1,13 @@ +case ST7735S: + LCD_Write_COM(0x2a); + LCD_Write_DATA(x1>>8); + LCD_Write_DATA(x1); + LCD_Write_DATA(x2>>8); + LCD_Write_DATA(x2); + LCD_Write_COM(0x2b); + LCD_Write_DATA(y1>>8); + LCD_Write_DATA(y1); + LCD_Write_DATA(y2>>8); + LCD_Write_DATA(y2); + LCD_Write_COM(0x2c); + break; diff --git a/libraries/UTFT/version.txt b/libraries/UTFT/version.txt new file mode 100644 index 0000000..cbef4b4 --- /dev/null +++ b/libraries/UTFT/version.txt @@ -0,0 +1,65 @@ +Version: + 1.0 12 Feb 2012 - initial release + 1.1 09 Apr 2012 - added support for more display modules + added support for String objects to print() + fixed a bug in printNumF() + added optional minimum length and filler character to pintNumI() and printNumF() + added option to disable unneeded controller chip code to minimize memory use + 1.2 14 Apr 2012 - added support for more display modules + added getDisplayXSize() and getDisplayYSize() + 1.3 03 Jun 2012 - added support for more display modules + fixed a bug in the ITDB02-25H init + 2.0 21 Jan 2013 - added support for Arduino Due and Arduino Leonardo + added support for the "AquaLEDSource All in One Super Screw Shield" on chipKit Max32 + added support for more display modules + fixed a bug in printNumF() + optimized drawLine() + optimized 16bit data transfer + optimized some 8bit data transfer + added option to use pre-defined RGB565 values with setColor(), setBackColor() and fillScr() + added functions getColor(), getBackColor(), getFont(), getFontXsize() and getFontYsize() + added 16 VGA standard colors as pre-defined color literal + rearranged the manual to keep related functions grouped together + 2.01 05 Feb 2013 - fixed a bug that only shows up on linux-based systems + 2.1 29 Mar 2013 - added support for Electronics Lees 3.2" display shield Rev B on Arduinos + fixed a bug that only shows up on some linux-based systems + added built-in support for using display shields designed for Arduino Uno on Arduino Mega + changed license to CC BY-NC-SA 3.0 + 2.2 01 May 2013 - added support for ElecFreaks TFT01-5.0 and TFT01-7.0 + added support for chipKit uC32 + restructured files slightly + 2.3 08 May 2013 - added support for transparent text background + fixed a bug in printNumF() + 2.4 11 May 2013 - added basic support for multiple display modules from Coldtears + 2.41 12 May 2013 - made some changes to facilitate the use of add-on libraries + 2.42 17 Jun 2013 - fixed a small bug in drawBitmap() + fixed a bug in the 16-bit Arduino Due driver + 2.5 25 Jul 2013 - fixed a bug where some lines were 1 pixel too short + fixed a bug in the init code for 7" modules that were only visible in portrait mode + added basic support for more display modules from Coldtears + updated ImageConverter565 to v2.0 + added ImgConv v1.0 - Command line image converter + added manual for image converters + fixed some omissions in memorysaver.h + 2.51 02 Aug 2013 - updated ImageConverter565 to v2.1 + fixed a typo in the tools manual name + 2.6 07 Sep 2013 - added support for 4 more ElecFreaks display modules + added support for Watterott electronics MI0283QT-9A display module + fixed a bug in the "Arduino (ARM)/UTFT_Demo_480x272" example + 2.7 03 Nov 2013 - added support Bobuino (ATmega1284P) + optimized Arduino Due driver slightly + 2.71 06 Dec 2013 - added support for ElecFreaks TFT01-4.3 + added support for Coldtears 3.5" and 4.0" modules + minor changes to the library constructor + removed unused variables + 2.72 12 Dec 2013 - added support for ElecFreaks TFT-2.4 v1.2 + 2.73 16 Feb 2014 - added support for Teensy 3.x Boards + added support for three display modules from ElecHouse + minor bugfixes + added three new functions for CPLD-based displays + 2.74 20 Feb 2014 - fixed a bug in the serial driver + 2.75 28 Mar 2014 - added support for Coldtears 5" and 7" CPLD modules + 2.76 04 May 2014 - added support for several display modules from DisplayModule + 2.77 24 May 2014 - fixed a bug with the ElecHouse 7" display and shield combination + 2.78 08 Sep 2014 - fixed compatibility-issues with Arduino 1.5.7 + diff --git a/libraries/UTFT_Buttons/License - CC BY-NC-SA 3.0 - Legal.pdf b/libraries/UTFT_Buttons/License - CC BY-NC-SA 3.0 - Legal.pdf new file mode 100644 index 0000000..ed326c9 Binary files /dev/null and b/libraries/UTFT_Buttons/License - CC BY-NC-SA 3.0 - Legal.pdf differ diff --git a/libraries/UTFT_Buttons/License - CC BY-NC-SA 3.0 - Summary.pdf b/libraries/UTFT_Buttons/License - CC BY-NC-SA 3.0 - Summary.pdf new file mode 100644 index 0000000..b35e677 Binary files /dev/null and b/libraries/UTFT_Buttons/License - CC BY-NC-SA 3.0 - Summary.pdf differ diff --git a/libraries/UTFT_Buttons/UTFT_Buttons.cpp b/libraries/UTFT_Buttons/UTFT_Buttons.cpp new file mode 100644 index 0000000..33143f2 --- /dev/null +++ b/libraries/UTFT_Buttons/UTFT_Buttons.cpp @@ -0,0 +1,269 @@ +/* + UTFT_Buttons.cpp - Add-on Library for UTFT: Buttons + Copyright (C)2013 Henning Karlsen. All right reserved + + This library adds simple but easy to use buttons to extend the use + of the UTFT and UTouch libraries. + + You can always find the latest version of the library at + http://electronics.henningkarlsen.com/ + + If you make any modifications or improvements to the code, I would + appreciate that you share the code with me so that I might include + it in the next release. I can be contacted through + http://electronics.henningkarlsen.com/contact.php. + + This library is free software; you can redistribute it and/or + modify it under the terms of the CC BY-NC-SA 3.0 license. + Please see the included documents for further information. +*/ + +#include "UTFT_Buttons.h" +#include +#include + +UTFT_Buttons::UTFT_Buttons(UTFT *ptrUTFT, UTouch *ptrUTouch) +{ + _UTFT = ptrUTFT; + _UTouch = ptrUTouch; + deleteAllButtons(); + _color_text = VGA_WHITE; + _color_text_inactive = VGA_GRAY; + _color_background = VGA_BLUE; + _color_border = VGA_WHITE; + _color_hilite = VGA_RED; + _font_text = NULL; + _font_symbol = NULL; +} + +int UTFT_Buttons::addButton(uint16_t x, uint16_t y, uint16_t width, uint16_t height, char *label, uint16_t flags) +{ + int btcnt = 0; + + while (((buttons[btcnt].flags & BUTTON_UNUSED) == 0) and (btcntgetFont();; + word _current_color = _UTFT->getColor(); + word _current_back = _UTFT->getBackColor(); + + if (buttons[buttonID].flags & BUTTON_BITMAP) + { + _UTFT->drawBitmap(buttons[buttonID].pos_x, buttons[buttonID].pos_y, buttons[buttonID].width, buttons[buttonID].height, buttons[buttonID].data); + if (!(buttons[buttonID].flags & BUTTON_NO_BORDER)) + { + if ((buttons[buttonID].flags & BUTTON_DISABLED)) + _UTFT->setColor(_color_text_inactive); + else + _UTFT->setColor(_color_border); + _UTFT->drawRect(buttons[buttonID].pos_x, buttons[buttonID].pos_y, buttons[buttonID].pos_x+buttons[buttonID].width, buttons[buttonID].pos_y+buttons[buttonID].height); + } + } + else + { + _UTFT->setColor(_color_background); + _UTFT->fillRoundRect(buttons[buttonID].pos_x, buttons[buttonID].pos_y, buttons[buttonID].pos_x+buttons[buttonID].width, buttons[buttonID].pos_y+buttons[buttonID].height); + _UTFT->setColor(_color_border); + _UTFT->drawRoundRect(buttons[buttonID].pos_x, buttons[buttonID].pos_y, buttons[buttonID].pos_x+buttons[buttonID].width, buttons[buttonID].pos_y+buttons[buttonID].height); + if (buttons[buttonID].flags & BUTTON_DISABLED) + _UTFT->setColor(_color_text_inactive); + else + _UTFT->setColor(_color_text); + if (buttons[buttonID].flags & BUTTON_SYMBOL) + { + _UTFT->setFont(_font_symbol); + text_x = (buttons[buttonID].width/2) - (_UTFT->getFontXsize()/2) + buttons[buttonID].pos_x; + text_y = (buttons[buttonID].height/2) - (_UTFT->getFontYsize()/2) + buttons[buttonID].pos_y; + } + else + { + _UTFT->setFont(_font_text); + text_x = ((buttons[buttonID].width/2) - ((strlen(buttons[buttonID].label) * _UTFT->getFontXsize())/2)) + buttons[buttonID].pos_x; + text_y = (buttons[buttonID].height/2) - (_UTFT->getFontYsize()/2) + buttons[buttonID].pos_y; + } + _UTFT->setBackColor(_color_background); + _UTFT->print(buttons[buttonID].label, text_x, text_y); + if ((buttons[buttonID].flags & BUTTON_SYMBOL) and (buttons[buttonID].flags & BUTTON_SYMBOL_REP_3X)) + { + _UTFT->print(buttons[buttonID].label, text_x-_UTFT->getFontXsize(), text_y); + _UTFT->print(buttons[buttonID].label, text_x+_UTFT->getFontXsize(), text_y); + } + } + _UTFT->setFont(_font_current); + _UTFT->setColor(_current_color); + _UTFT->setBackColor(_current_back); +} + +void UTFT_Buttons::enableButton(int buttonID, boolean redraw) +{ + if (!(buttons[buttonID].flags & BUTTON_UNUSED)) + { + buttons[buttonID].flags = buttons[buttonID].flags & ~BUTTON_DISABLED; + if (redraw) + drawButton(buttonID); + } +} + +void UTFT_Buttons::disableButton(int buttonID, boolean redraw) +{ + if (!(buttons[buttonID].flags & BUTTON_UNUSED)) + { + buttons[buttonID].flags = buttons[buttonID].flags | BUTTON_DISABLED; + if (redraw) + drawButton(buttonID); + } +} + +void UTFT_Buttons::relabelButton(int buttonID, char *label, boolean redraw) +{ + if (!(buttons[buttonID].flags & BUTTON_UNUSED)) + { + buttons[buttonID].label = label; + if (redraw) + drawButton(buttonID); + } +} + +boolean UTFT_Buttons::buttonEnabled(int buttonID) +{ + return !(buttons[buttonID].flags & BUTTON_DISABLED); +} + +void UTFT_Buttons::deleteButton(int buttonID) +{ + if (!(buttons[buttonID].flags & BUTTON_UNUSED)) + buttons[buttonID].flags = BUTTON_UNUSED; +} + +void UTFT_Buttons::deleteAllButtons() +{ + for (int i=0;idataAvailable() == true) + { + _UTouch->read(); + int result = -1; + int touch_x = _UTouch->getX(); + int touch_y = _UTouch->getY(); + word _current_color = _UTFT->getColor(); + + for (int i=0;i= buttons[i].pos_x) and (touch_x <= (buttons[i].pos_x + buttons[i].width)) and (touch_y >= buttons[i].pos_y) and (touch_y <= (buttons[i].pos_y + buttons[i].height))) + result = i; + } + } + if (result != -1) + { + if (!(buttons[result].flags & BUTTON_NO_BORDER)) + { + _UTFT->setColor(_color_hilite); + if (buttons[result].flags & BUTTON_BITMAP) + _UTFT->drawRect(buttons[result].pos_x, buttons[result].pos_y, buttons[result].pos_x+buttons[result].width, buttons[result].pos_y+buttons[result].height); + else + _UTFT->drawRoundRect(buttons[result].pos_x, buttons[result].pos_y, buttons[result].pos_x+buttons[result].width, buttons[result].pos_y+buttons[result].height); + } + } + + while (_UTouch->dataAvailable() == true) {}; + + if (result != -1) + { + if (!(buttons[result].flags & BUTTON_NO_BORDER)) + { + _UTFT->setColor(_color_border); + if (buttons[result].flags & BUTTON_BITMAP) + _UTFT->drawRect(buttons[result].pos_x, buttons[result].pos_y, buttons[result].pos_x+buttons[result].width, buttons[result].pos_y+buttons[result].height); + else + _UTFT->drawRoundRect(buttons[result].pos_x, buttons[result].pos_y, buttons[result].pos_x+buttons[result].width, buttons[result].pos_y+buttons[result].height); + } + } + + _UTFT->setColor(_current_color); + return result; + } + else + return -1; +} + +void UTFT_Buttons::setTextFont(uint8_t* font) +{ + _font_text = font; +} + +void UTFT_Buttons::setSymbolFont(uint8_t* font) +{ + _font_symbol = font; +} + +void UTFT_Buttons::setButtonColors(word atxt, word iatxt, word brd, word brdhi, word back) +{ + _color_text = atxt; + _color_text_inactive = iatxt; + _color_background = back; + _color_border = brd; + _color_hilite = brdhi; +} diff --git a/libraries/UTFT_Buttons/UTFT_Buttons.h b/libraries/UTFT_Buttons/UTFT_Buttons.h new file mode 100644 index 0000000..678c847 --- /dev/null +++ b/libraries/UTFT_Buttons/UTFT_Buttons.h @@ -0,0 +1,84 @@ +/* + UTFT_Buttons.h - Add-on Library for UTFT: Buttons + Copyright (C)2013 Henning Karlsen. All right reserved + + This library adds simple but easy to use buttons to extend the use + of the UTFT and UTouch libraries. + + You can always find the latest version of the library at + http://electronics.henningkarlsen.com/ + + If you make any modifications or improvements to the code, I would + appreciate that you share the code with me so that I might include + it in the next release. I can be contacted through + http://electronics.henningkarlsen.com/contact.php. + + This library is free software; you can redistribute it and/or + modify it under the terms of the CC BY-NC-SA 3.0 license. + Please see the included documents for further information. +*/ + +#ifndef UTFT_Buttons_h +#define UTFT_Buttons_h + +#if defined(__AVR__) + #include "Arduino.h" +#elif defined(__PIC32MX__) + #include "WProgram.h" +#elif defined(__arm__) + #include "Arduino.h" +#endif + +#include +#include +#if ((!defined(UTFT_VERSION)) || (UTFT_VERSION<241)) + #error : You will need UTFT v2.41 or higher to use this add-on library... +#endif + +#define MAX_BUTTONS 20 // Maximum number of buttons available at one time + +// Define presets for button status +#define BUTTON_DISABLED 0x0001 +#define BUTTON_SYMBOL 0x0002 +#define BUTTON_SYMBOL_REP_3X 0x0004 +#define BUTTON_BITMAP 0x0008 +#define BUTTON_NO_BORDER 0x0010 +#define BUTTON_UNUSED 0x8000 + +typedef struct +{ + uint16_t pos_x, pos_y, width, height; + uint16_t flags; + char *label; + bitmapdatatype data; +} button_type; + +class UTFT_Buttons +{ + public: + UTFT_Buttons(UTFT *ptrUTFT, UTouch *ptrUTouch); + + int addButton(uint16_t x, uint16_t y, uint16_t width, uint16_t height, char *label, uint16_t flags=0); + int addButton(uint16_t x, uint16_t y, uint16_t width, uint16_t height, bitmapdatatype data, uint16_t flags=0); + void drawButtons(); + void drawButton(int buttonID); + void enableButton(int buttonID, boolean redraw=false); + void disableButton(int buttonID, boolean redraw=false); + void relabelButton(int buttonID, char *label, boolean redraw=false); + boolean buttonEnabled(int buttonID); + void deleteButton(int buttonID); + void deleteAllButtons(); + int checkButtons(); + void setTextFont(uint8_t* font); + void setSymbolFont(uint8_t* font); + void setButtonColors(word atxt, word iatxt, word brd, word brdhi, word back); + + protected: + UTFT *_UTFT; + UTouch *_UTouch; + button_type buttons[MAX_BUTTONS]; + word _color_text, _color_text_inactive, _color_background, _color_border, _color_hilite; + uint8_t *_font_text, *_font_symbol; +}; + +#endif diff --git a/libraries/UTFT_Buttons/UTFT_Buttons.pdf b/libraries/UTFT_Buttons/UTFT_Buttons.pdf new file mode 100644 index 0000000..82d9d48 Binary files /dev/null and b/libraries/UTFT_Buttons/UTFT_Buttons.pdf differ diff --git a/libraries/UTFT_Buttons/examples/UTFT_Buttons_Bitmap_Demo/UTFT_Buttons_Bitmap_Demo.ino b/libraries/UTFT_Buttons/examples/UTFT_Buttons_Bitmap_Demo/UTFT_Buttons_Bitmap_Demo.ino new file mode 100644 index 0000000..f778f0d --- /dev/null +++ b/libraries/UTFT_Buttons/examples/UTFT_Buttons_Bitmap_Demo/UTFT_Buttons_Bitmap_Demo.ino @@ -0,0 +1,130 @@ +// UTFT_Buttons_Bitmap_Demo (C)2013 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// A small demo to demonstrate the use of some of the +// functions of the UTFT_Buttons add-on library. +// +// This demo was made for modules with a screen resolution +// of 320x240 pixels, but should work on larger screens as +// well. +// +// This demo will not work on Arduino 2009/Uno/Leonardo +// due to the size of the images. +// +// This program requires both the UTFT and UTouch libraries +// in addition to the UTFT_Buttons add-on library. +// + +// This code block is only needed to support multiple +// MCU architectures in a single sketch. +#if defined(__AVR__) + #define imagedatatype unsigned int +#elif defined(__PIC32MX__) + #define imagedatatype unsigned short +#elif defined(__arm__) + #define imagedatatype unsigned short +#endif +// End of multi-architecture block + +#include +#include +#include + +// Declare which fonts we will be using +extern uint8_t BigFont[]; + +// Declare which bitmaps we will be using +extern imagedatatype cat[]; +extern imagedatatype dog[]; +extern imagedatatype bird[]; +extern imagedatatype monkey[]; + +// Set up UTFT... +// Set the pins to the correct ones for your development board +// ----------------------------------------------------------- +// Standard Arduino 2009/Uno/Leonardo shield : NOT SUPPORTED DUE TO LACK OF MEMORY +// Standard Arduino Mega/Due shield : ,38,39,40,41 +// CTE TFT LCD/SD Shield for Arduino Due : ,25,26,27,28 +// Standard chipKit Uno32/uC32 : ,34,35,36,37 +// Standard chipKit Max32 : ,82,83,84,85 +// AquaLEDSource All in One Super Screw Shield : ,82,83,84,85 +// +// Remember to change the model parameter to suit your display module! +UTFT myGLCD(ITDB32S,38,39,40,41); + +// Set up UTouch... +// Set the pins to the correct ones for your development board +// ----------------------------------------------------------- +// Standard Arduino 2009/Uno/Leonardo shield : NOT SUPPORTED DUE TO LACK OF MEMORY +// Standard Arduino Mega/Due shield : 6,5,4,3,2 +// CTE TFT LCD/SD Shield for Arduino Due : 6,5,4,3,2 +// Standard chipKit Uno32/uC32 : 20,21,22,23,24 +// Standard chipKit Max32 : 62,63,64,65,66 +// AquaLEDSource All in One Super Screw Shield : 62,63,64,65,66 +UTouch myTouch(6,5,4,3,2); + +// Finally we set up UTFT_Buttons :) +UTFT_Buttons myButtons(&myGLCD, &myTouch); + +void setup() +{ + myGLCD.InitLCD(); + myGLCD.clrScr(); + myGLCD.setFont(BigFont); + + myTouch.InitTouch(); + myTouch.setPrecision(PREC_MEDIUM); + + myButtons.setTextFont(BigFont); +} + +void loop() +{ + int but1, but2, but3, but4, but5, pressed_button; + + but1 = myButtons.addButton( 10, 10, 80, 60, cat); + but2 = myButtons.addButton( 120, 10, 80, 60, dog); + but3 = myButtons.addButton( 10, 80, 80, 60, bird); + but4 = myButtons.addButton( 120, 80, 80, 60, monkey, BUTTON_NO_BORDER); + but5 = myButtons.addButton( 10, 150, 190, 30, "Disable Dog"); + myButtons.drawButtons(); + + myGLCD.print("You pressed:", 10, 200); + myGLCD.setColor(VGA_BLACK); + myGLCD.setBackColor(VGA_WHITE); + myGLCD.print("None ", 10, 220); + + while(1) + { + if (myTouch.dataAvailable() == true) + { + pressed_button = myButtons.checkButtons(); + + if (pressed_button==but5) + if (myButtons.buttonEnabled(but2)) + { + myButtons.disableButton(but2); + myButtons.relabelButton(but5, "Enable Dog", true); + myButtons.drawButton(but2); + } + else + { + myButtons.enableButton(but2); + myButtons.relabelButton(but5, "Disable Dog", true); + myButtons.drawButton(but2); + } + + if (pressed_button==but1) + myGLCD.print("Cat ", 10, 220); + if (pressed_button==but2) + myGLCD.print("Dog ", 10, 220); + if (pressed_button==but3) + myGLCD.print("Bird ", 10, 220); + if (pressed_button==but4) + myGLCD.print("Monkey ", 10, 220); + if (pressed_button==-1) + myGLCD.print("None ", 10, 220); + } + } +} + diff --git a/libraries/UTFT_Buttons/examples/UTFT_Buttons_Bitmap_Demo/bird.c b/libraries/UTFT_Buttons/examples/UTFT_Buttons_Bitmap_Demo/bird.c new file mode 100644 index 0000000..ec21c18 --- /dev/null +++ b/libraries/UTFT_Buttons/examples/UTFT_Buttons_Bitmap_Demo/bird.c @@ -0,0 +1,314 @@ +// Generated by : ImageConverter 565 v1.2 +// Dimensions : 80x60 pixels +// Size : 9 600 Bytes + +#if defined(__AVR__) + #include +#elif defined(__PIC32MX__) + #define PROGMEM +#elif defined(__arm__) + #define PROGMEM +#endif + +const unsigned short bird[0x12C0] PROGMEM ={ +0x71A0, 0x6980, 0x7A20, 0xAB61, 0xDC82, 0xECC1, 0xF4C0, 0xECE1, 0xED03, 0xD4C5, 0x9BA5, 0x7AC2, 0x9320, 0xBC22, 0xC421, 0xBBE0, // 0x0010 (16) +0xB3E0, 0xA3A1, 0x7A81, 0x5180, 0x4140, 0x51A1, 0x6A82, 0x8303, 0x7281, 0x61A0, 0x5980, 0x5961, 0x5101, 0x5901, 0x5921, 0x6140, // 0x0020 (32) +0x69E0, 0x92E1, 0xAB42, 0xAB00, 0xAB60, 0xBBE3, 0xAB62, 0x8A40, 0x8A20, 0xB382, 0xE504, 0xF583, 0xF561, 0xD4A0, 0xABA0, 0xA361, // 0x0030 (48) +0xBBA1, 0xC381, 0xB320, 0xA320, 0x9B41, 0x8B01, 0x82E1, 0x7AA2, 0x7264, 0x6A43, 0x6A20, 0x82A0, 0xAB80, 0xBBE1, 0xAB61, 0x8A80, // 0x0040 (64) +0x71E0, 0x61C1, 0x6A01, 0x7262, 0x6A81, 0x62C1, 0x62E1, 0x6B02, 0x7322, 0x6B22, 0x62C1, 0x5260, 0x4A61, 0x4A62, 0x4A42, 0x4A02, // 0x0050 (80) +0x6160, 0x6160, 0x71E0, 0x9B21, 0xD441, 0xE4A1, 0xECC1, 0xE4C2, 0xE4E3, 0xD4C5, 0xAC06, 0x8B23, 0xA381, 0xC442, 0xC421, 0xBBA0, // 0x0060 (96) +0xBB80, 0xAB40, 0x7AA1, 0x51C0, 0x3140, 0x4161, 0x5A21, 0x7262, 0x7241, 0x61A0, 0x5940, 0x5120, 0x48E0, 0x48E0, 0x5120, 0x61A0, // 0x0070 (112) +0x7A60, 0x9B20, 0xAB41, 0x9AE0, 0xAB60, 0xC443, 0xB3E2, 0x8AC0, 0x92A0, 0xBBC2, 0xE503, 0xF563, 0xE541, 0xCC80, 0x9BA0, 0x9B60, // 0x0080 (128) +0xAB80, 0xB380, 0xAB40, 0x9B21, 0x8B01, 0x82E1, 0x7AC2, 0x7AC3, 0x7263, 0x7262, 0x7240, 0x8AA0, 0xB360, 0xCC22, 0xCC02, 0xB341, // 0x0090 (144) +0x9A40, 0x89A0, 0x79C0, 0x71E0, 0x6241, 0x62A1, 0x6301, 0x6321, 0x6B41, 0x6B41, 0x6301, 0x5281, 0x4241, 0x4A43, 0x4A24, 0x4A04, // 0x00A0 (160) +0x59A1, 0x59A1, 0x6A00, 0x9301, 0xC421, 0xD481, 0xD461, 0xD462, 0xD4A4, 0xCCC5, 0xB445, 0x9B62, 0xABA1, 0xC483, 0xC441, 0xA360, // 0x00B0 (176) +0x92C0, 0x9B01, 0x82E2, 0x5A20, 0x3980, 0x3961, 0x49C3, 0x5A05, 0x6A24, 0x61E2, 0x59A2, 0x5141, 0x4920, 0x4920, 0x5160, 0x69C0, // 0x00C0 (192) +0x8AA0, 0x9B20, 0x9B00, 0x92A0, 0xAB80, 0xC483, 0xB423, 0x9320, 0x8AE0, 0xB3C2, 0xDCE3, 0xE523, 0xD4E2, 0xB441, 0x8BA0, 0x8340, // 0x00D0 (208) +0xA380, 0xB3C1, 0xB3C2, 0x9B42, 0x82E1, 0x72A2, 0x7AC2, 0x7AE3, 0x7AA3, 0x7A82, 0x7A81, 0x8AA0, 0xAB20, 0xD401, 0xDC61, 0xD3C0, // 0x00E0 (224) +0xC280, 0xA9A0, 0x9140, 0x8180, 0x71E1, 0x6A81, 0x62E1, 0x6320, 0x6320, 0x6B41, 0x6302, 0x5261, 0x4201, 0x4A03, 0x4A25, 0x4A05, // 0x00F0 (240) +0x59E3, 0x59C2, 0x61E1, 0x82A1, 0xABC1, 0xBC01, 0xBBE1, 0xBBE3, 0xC424, 0xC465, 0xBC25, 0xA361, 0xA360, 0xBC44, 0xB422, 0x8B00, // 0x0100 (256) +0x7280, 0x7282, 0x7A83, 0x61E3, 0x5162, 0x4121, 0x4160, 0x51E2, 0x6221, 0x6A02, 0x61A2, 0x5122, 0x4902, 0x5101, 0x5980, 0x7200, // 0x0110 (272) +0x8A81, 0x9281, 0x8A60, 0x92A0, 0xB3C1, 0xC483, 0xAC03, 0x8B21, 0x8AE0, 0xABC3, 0xD4A4, 0xDCC4, 0xBC43, 0x9381, 0x7B21, 0x7B00, // 0x0120 (288) +0x9340, 0xABC1, 0xB3E2, 0x9B41, 0x7AA1, 0x6A82, 0x72A3, 0x7AC4, 0x7AA3, 0x7A82, 0x7A81, 0x8280, 0x9AC0, 0xBBA1, 0xDC42, 0xDBC1, // 0x0130 (304) +0xCA80, 0xB180, 0x9900, 0x9141, 0x89C2, 0x7A42, 0x6AA0, 0x62A0, 0x6300, 0x6301, 0x62C2, 0x5242, 0x49E2, 0x4A03, 0x5A24, 0x5A25, // 0x0140 (320) +0x59E1, 0x51A0, 0x59C0, 0x7280, 0x9B60, 0xA3A0, 0xAB81, 0xABA3, 0xABC4, 0xABE4, 0xAC04, 0xA382, 0x9321, 0x9BA3, 0x9362, 0x6A80, // 0x0150 (336) +0x51C0, 0x5A01, 0x6222, 0x59E3, 0x49A2, 0x3121, 0x3141, 0x5203, 0x6284, 0x6223, 0x51C2, 0x4181, 0x4981, 0x4960, 0x5940, 0x79A1, // 0x0160 (352) +0x81E1, 0x8A21, 0x8A40, 0x9AE0, 0xBC01, 0xBC42, 0x9BA2, 0x8B21, 0x9322, 0xB3E4, 0xD4A4, 0xCC83, 0xAC02, 0x8B41, 0x7AC2, 0x7281, // 0x0170 (368) +0x82C0, 0xA360, 0xB3C1, 0x9B40, 0x7AA0, 0x7261, 0x7A83, 0x82C4, 0x8283, 0x7A62, 0x7281, 0x7AA1, 0x8AA0, 0xA321, 0xC3A2, 0xCB82, // 0x0180 (384) +0xB261, 0xA160, 0xA100, 0xA121, 0x99A2, 0x9222, 0x8261, 0x6A60, 0x62A1, 0x5A82, 0x5242, 0x5202, 0x5202, 0x6202, 0x6A23, 0x7223, // 0x0190 (400) +0x69E0, 0x61E0, 0x6A40, 0x7AE0, 0x8B81, 0x9380, 0x9B61, 0xA383, 0x9B63, 0x9323, 0x9B63, 0x9363, 0x82E1, 0x7281, 0x6241, 0x51E0, // 0x01A0 (416) +0x41C0, 0x39A1, 0x4A03, 0x49E4, 0x39A3, 0x4289, 0x5452, 0x5538, 0x4D9C, 0x3CF9, 0x3C33, 0x3B4D, 0x4286, 0x41A1, 0x4140, 0x5960, // 0x01B0 (432) +0x71C0, 0x9261, 0x9AE0, 0xAB40, 0xBC01, 0xB401, 0x9361, 0x8302, 0x9364, 0xAC25, 0xC483, 0xC4A2, 0xBC62, 0xABC2, 0x9342, 0x82A1, // 0x01C0 (448) +0x8AA0, 0x9B20, 0xB381, 0x9B20, 0x7A80, 0x7260, 0x8282, 0x8AC4, 0x8A83, 0x8262, 0x7281, 0x7A81, 0x7A80, 0x92C0, 0xB322, 0xBB22, // 0x01D0 (464) +0xAA41, 0x9980, 0xA121, 0xA942, 0xA982, 0xA202, 0x8A41, 0x7241, 0x6A42, 0x5A22, 0x51E2, 0x5A02, 0x6A22, 0x7242, 0x8221, 0x8A22, // 0x01E0 (480) +0x8A80, 0x92C0, 0x8B60, 0x93C1, 0x8BA0, 0x8B60, 0x9B60, 0xABC3, 0x9383, 0x7AC1, 0x7AC2, 0x7AE3, 0x6A81, 0x5200, 0x49A1, 0x4182, // 0x01F0 (496) +0x3962, 0x39A3, 0x3182, 0x3248, 0x4C55, 0x3D1C, 0x149E, 0x047F, 0x0C5D, 0x043C, 0x04BE, 0x153E, 0x255D, 0x3497, 0x4B0B, 0x51C2, // 0x0200 (512) +0x82A2, 0xA342, 0xB361, 0xAB60, 0xABA1, 0x9B41, 0x7AC2, 0x72A3, 0x8B66, 0x9BE6, 0xA403, 0xB422, 0xC463, 0xC463, 0xB402, 0xA361, // 0x0210 (528) +0x9B20, 0xA361, 0xB382, 0x9AE0, 0x7A40, 0x7A20, 0x8280, 0x9AE2, 0x9AC2, 0x9281, 0x7A61, 0x7A81, 0x7A80, 0x8AA0, 0xAAE2, 0xBB02, // 0x0220 (544) +0xB281, 0xA9E0, 0xB182, 0xB162, 0xA982, 0xA203, 0x8A42, 0x7221, 0x6222, 0x5A22, 0x6202, 0x6A21, 0x7A61, 0x8A61, 0x9241, 0x9221, // 0x0230 (560) +0xB360, 0xB3E1, 0xB462, 0xA441, 0x83A0, 0x8360, 0xA3E1, 0xBC64, 0xA3E4, 0x7AE1, 0x6A61, 0x6A82, 0x5A41, 0x49E1, 0x4182, 0x4163, // 0x0240 (576) +0x4142, 0x3143, 0x322A, 0x43B5, 0x2C3B, 0x0BDC, 0x03BD, 0x039D, 0x03BC, 0x03DC, 0x0C3E, 0x043E, 0x0C7E, 0x253F, 0x359D, 0x5515, // 0x0250 (592) +0x8C29, 0xBC25, 0xB3A2, 0xA300, 0x9302, 0x7A62, 0x6A02, 0x6A64, 0x8368, 0x8BA7, 0x8343, 0x9341, 0xB3E2, 0xC443, 0xC462, 0xB401, // 0x0260 (608) +0xB3E2, 0xB3C3, 0xBBA3, 0xA2E1, 0x7A20, 0x7A20, 0x92A0, 0xAB42, 0xBB63, 0xB323, 0x8AC2, 0x7A61, 0x7A60, 0x8A80, 0xAAC1, 0xC302, // 0x0270 (624) +0xCB02, 0xC261, 0xC1C2, 0xB162, 0xA181, 0x99E2, 0x8242, 0x6A22, 0x5A22, 0x6243, 0x6A62, 0x7A61, 0x8A80, 0x9281, 0x9A42, 0x9A02, // 0x0280 (640) +0xCC40, 0xD4A1, 0xBC61, 0x9BC0, 0x8380, 0x8380, 0xAC41, 0xD505, 0xC4A3, 0x9361, 0x6261, 0x5A22, 0x6222, 0x59E2, 0x49C3, 0x41E3, // 0x0290 (656) +0x39A0, 0x2A06, 0x33F7, 0x139B, 0x02FA, 0x0B1B, 0x0ADB, 0x0AFB, 0x0AD9, 0x02D9, 0x0B9C, 0x03DC, 0x047C, 0x04BC, 0x04BF, 0x155F, // 0x02A0 (672) +0x2DDE, 0x5DD9, 0x7C8F, 0x7B25, 0x7261, 0x6A20, 0x51E2, 0x62A4, 0x8BA6, 0x9BE6, 0x93A4, 0x8B41, 0x9B80, 0xB3E0, 0xB402, 0xABE3, // 0x02B0 (688) +0xA3C4, 0xABE5, 0xA3A3, 0x92E0, 0x8220, 0x8A00, 0xAAE0, 0xCBE2, 0xD442, 0xB3A1, 0x8B00, 0x82E1, 0x92E1, 0xA301, 0xAB01, 0xC321, // 0x02C0 (704) +0xCB62, 0xCB02, 0xC262, 0xA9C1, 0x99C1, 0x91C2, 0x79E3, 0x69C2, 0x71E1, 0x7A41, 0x82A0, 0x8280, 0x8A80, 0x92A2, 0x9261, 0x8A00, // 0x02D0 (720) +0xDCA0, 0xD4A1, 0xAC00, 0x8B60, 0x7B20, 0x7B40, 0xAC21, 0xDD45, 0xD504, 0xA381, 0x7281, 0x6A63, 0x6A43, 0x6243, 0x6264, 0x4A04, // 0x02E0 (736) +0x4226, 0x53B1, 0x2359, 0x029A, 0x0258, 0x0216, 0x0215, 0x0215, 0x0277, 0x02B8, 0x031B, 0x0B9D, 0x039C, 0x041D, 0x0C5D, 0x045C, // 0x02F0 (752) +0x0CBD, 0x151D, 0x2DBC, 0x4DB8, 0x53AB, 0x4203, 0x4A24, 0x7B06, 0xAC07, 0xC465, 0xBC41, 0xB420, 0xA3E1, 0x9BC2, 0x9BC3, 0x9342, // 0x0300 (768) +0x9343, 0x9B43, 0x9321, 0x8AA0, 0x7A40, 0x8A60, 0xB360, 0xD442, 0xDC82, 0xBBC0, 0x9B20, 0x9B21, 0xB3A2, 0xBBA2, 0xBB61, 0xBB40, // 0x0310 (784) +0xCB80, 0xCB61, 0xC301, 0xB261, 0xA201, 0x89E2, 0x71E2, 0x69C2, 0x71E1, 0x8262, 0x82C0, 0x7AA0, 0x7A60, 0x8261, 0x8A21, 0x81C0, // 0x0320 (800) +0xE4C1, 0xCC61, 0x9360, 0x72C0, 0x6AC0, 0x7B00, 0xAC00, 0xDD24, 0xDD04, 0xB3E1, 0x8B01, 0x7AC3, 0x7AA4, 0x7AA4, 0x7284, 0x6286, // 0x0330 (816) +0x532C, 0x4BD4, 0x12B7, 0x0237, 0x0192, 0x0191, 0x01B2, 0x0214, 0x0296, 0x1319, 0x0B19, 0x0B7A, 0x0B7A, 0x0B9A, 0x039A, 0x03FB, // 0x0340 (832) +0x047D, 0x04FE, 0x04FD, 0x157D, 0x3E1E, 0x4D16, 0x5329, 0x9386, 0xCC66, 0xDCA4, 0xD4A1, 0xD4C0, 0xC460, 0xB3E0, 0xA3A1, 0x9301, // 0x0350 (848) +0x8AC2, 0x8AE2, 0x9301, 0x82A0, 0x7A60, 0x92E0, 0xC401, 0xDC81, 0xDC81, 0xBBA0, 0xA300, 0xAB40, 0xC422, 0xD422, 0xC381, 0xBB20, // 0x0360 (864) +0xC380, 0xCBA0, 0xCBA2, 0xBB42, 0xAAE1, 0x9A81, 0x8241, 0x7201, 0x7A21, 0x8282, 0x7AC1, 0x72A0, 0x7260, 0x7240, 0x7A21, 0x79E0, // 0x0370 (880) +0xE482, 0xBBE1, 0x7AC0, 0x5A40, 0x6260, 0x7AE0, 0xABC0, 0xD4C3, 0xDCE3, 0xBC01, 0x9B41, 0x8AE2, 0x8B04, 0x82E4, 0x7263, 0x6286, // 0x0380 (896) +0x5B6E, 0x2AD1, 0x0A33, 0x01D3, 0x0191, 0x012F, 0x0191, 0x01B2, 0x1235, 0x0235, 0x0298, 0x02F9, 0x033B, 0x03DD, 0x03FD, 0x041D, // 0x0390 (912) +0x0C7C, 0x049C, 0x049D, 0x04FE, 0x0D5E, 0x35BD, 0x5599, 0x7CD0, 0xC4C7, 0xDC61, 0xE4A1, 0xED01, 0xE4E0, 0xCC60, 0xABC0, 0x9320, // 0x03A0 (928) +0x8AC2, 0x9B03, 0xA363, 0xA321, 0x9AE0, 0xAB60, 0xD460, 0xE4C0, 0xD460, 0xB360, 0x9AC0, 0xA320, 0xC401, 0xCC01, 0xBB41, 0xB2E0, // 0x03B0 (944) +0xBB21, 0xC381, 0xC3C2, 0xC3C1, 0xBBC1, 0xB3A1, 0x9B41, 0x92E1, 0x82A1, 0x82A1, 0x72C1, 0x6AC1, 0x6AA0, 0x6A80, 0x7280, 0x7A60, // 0x03C0 (960) +0xD442, 0xAB40, 0x6A40, 0x51E0, 0x6240, 0x72A0, 0x9B40, 0xC422, 0xD4A3, 0xC422, 0x9B21, 0x8AE2, 0x82E3, 0x7AC4, 0x7AE4, 0x5A64, // 0x03D0 (976) +0x7C2E, 0x5BF0, 0x018A, 0x012B, 0x00C9, 0x00C8, 0x00E6, 0x1168, 0x0149, 0x01CE, 0x02B5, 0x0319, 0x039B, 0x0C5D, 0x0C7C, 0x043B, // 0x03E0 (992) +0x047C, 0x049D, 0x049D, 0x049D, 0x0CDD, 0x049B, 0x0C9A, 0x55DA, 0x8D6F, 0xB4C7, 0xDCA2, 0xF4C2, 0xECC2, 0xD482, 0xAC22, 0x9361, // 0x03F0 (1008) +0x92E2, 0xAB43, 0xC3E3, 0xCBE2, 0xC3A0, 0xCBE0, 0xE480, 0xECC0, 0xD460, 0xB380, 0x92C0, 0x9AE0, 0xB380, 0xC381, 0xB300, 0xB2C1, // 0x0400 (1024) +0xBAC2, 0xC343, 0xC3A2, 0xBBC1, 0xC401, 0xCC41, 0xBC21, 0xABC1, 0x9B40, 0x8300, 0x7300, 0x6B00, 0x6AE0, 0x6AA0, 0x6AC0, 0x72E1, // 0x0410 (1040) +0xCC02, 0xA300, 0x7220, 0x61E0, 0x6240, 0x6A40, 0x8280, 0xAB81, 0xC423, 0xAB60, 0x92E1, 0x8AA2, 0x9345, 0x7AE5, 0x6285, 0x8C0D, // 0x0420 (1056) +0xAD75, 0x530D, 0x0083, 0x0042, 0x1083, 0x1082, 0x18E2, 0x0061, 0x00E6, 0x124F, 0x0AF6, 0x039B, 0x0BFC, 0x03FC, 0x03FB, 0x0C1B, // 0x0430 (1072) +0x0C3B, 0x0C7C, 0x047B, 0x049C, 0x0C9B, 0x1CFC, 0x153D, 0x1D1B, 0x3D7A, 0x7574, 0xACE9, 0xDCC4, 0xF4C2, 0xEC61, 0xCC62, 0xAB80, // 0x0440 (1088) +0xA301, 0xB382, 0xD403, 0xE442, 0xE441, 0xEC81, 0xF4C0, 0xECC1, 0xDC81, 0xB3C0, 0x9B00, 0x92C0, 0xA300, 0xB321, 0xB2E1, 0xB2C1, // 0x0450 (1104) +0xBB23, 0xC3A4, 0xC3C2, 0xBBA0, 0xC3E1, 0xD462, 0xD482, 0xC441, 0xABE0, 0x9BA0, 0x8B80, 0x83A0, 0x8360, 0x7300, 0x72E0, 0x6AC1, // 0x0460 (1120) +0xCC22, 0xB380, 0x8AA0, 0x7220, 0x6A20, 0x6A00, 0x7A20, 0xA301, 0xAB61, 0xA301, 0x8A81, 0x8AA3, 0x8283, 0x7AC6, 0x840D, 0x8450, // 0x0470 (1136) +0x52AB, 0x7C30, 0x846F, 0x4AC8, 0x10C0, 0x10E2, 0x0904, 0x0147, 0x11ED, 0x0A71, 0x02F4, 0x03B8, 0x03D9, 0x0378, 0x0BFA, 0x0C1A, // 0x0480 (1152) +0x147B, 0x0C5A, 0x0C7A, 0x0C5A, 0x0439, 0x047A, 0x0499, 0x0CBA, 0x1CDA, 0x455B, 0x5D97, 0x9591, 0xD527, 0xECA1, 0xDC82, 0xC3E1, // 0x0490 (1168) +0xBBC1, 0xCC02, 0xDC42, 0xEC82, 0xECA1, 0xEC81, 0xECA1, 0xECC1, 0xE4A1, 0xCC40, 0xB3A0, 0xA300, 0xAAE0, 0xB2E1, 0xB2C2, 0xBB23, // 0x04A0 (1184) +0xC3C4, 0xCC45, 0xCC83, 0xC401, 0xCBC1, 0xD422, 0xD482, 0xCC82, 0xBC40, 0xAC00, 0x9BE0, 0xA400, 0xA3E0, 0x9BA0, 0x8341, 0x72E0, // 0x04B0 (1200) +0xDC82, 0xCC21, 0xAB40, 0x8240, 0x6A00, 0x6A00, 0x8240, 0xA302, 0xAB63, 0x92A0, 0x8A42, 0x8243, 0x8A84, 0x8308, 0x73AD, 0x7C72, // 0x04C0 (1216) +0x9D35, 0x9534, 0x9574, 0x7450, 0x0966, 0x0168, 0x01CD, 0x0251, 0x0274, 0x0AF6, 0x0B98, 0x0399, 0x141C, 0x039A, 0x03FA, 0x0C7C, // 0x04D0 (1232) +0x047C, 0x049C, 0x04BD, 0x049C, 0x047A, 0x14DB, 0x14DC, 0x0C9A, 0x14B9, 0x253A, 0x3D9C, 0x55BA, 0x7DB6, 0x9D4F, 0xCCC5, 0xE481, // 0x04E0 (1248) +0xDC82, 0xDC82, 0xECA2, 0xECA2, 0xE4A1, 0xE461, 0xE461, 0xECA1, 0xECC1, 0xE4A0, 0xD440, 0xBB80, 0xBB00, 0xBAE2, 0xB303, 0xBB84, // 0x04F0 (1264) +0xC405, 0xD4C6, 0xDD25, 0xD482, 0xCC01, 0xD401, 0xD461, 0xD482, 0xC462, 0xB401, 0xABC1, 0xABC1, 0xBC02, 0xBC22, 0x9BC1, 0x8340, // 0x0500 (1280) +0xE4A1, 0xDC61, 0xBBC1, 0x92C0, 0x71E0, 0x71E0, 0x9260, 0xAB02, 0xAB42, 0x9AE0, 0x9280, 0x9AA0, 0x92C2, 0x8AA3, 0x82A6, 0x72C9, // 0x0510 (1296) +0x5ACA, 0x21A6, 0x2186, 0x1188, 0x016B, 0x01F1, 0x0A98, 0x0AFB, 0x0B39, 0x0B59, 0x0B98, 0x0398, 0x0376, 0x043A, 0x047B, 0x0CBC, // 0x0520 (1312) +0x0C59, 0x0BF7, 0x03F7, 0x0438, 0x047A, 0x0CBA, 0x14FA, 0x1498, 0x24D7, 0x34F8, 0x3D3B, 0x4DBD, 0x457B, 0x54D4, 0xA50E, 0xD4E8, // 0x0530 (1328) +0xDCE3, 0xE4C1, 0xECE3, 0xEC82, 0xE481, 0xDC60, 0xDC60, 0xE4C0, 0xE4C0, 0xE4A1, 0xE461, 0xD401, 0xB340, 0xA321, 0xB364, 0xABA4, // 0x0540 (1344) +0xA404, 0xC4C5, 0xE505, 0xE4C3, 0xD440, 0xC400, 0xCC41, 0xD483, 0xD483, 0xCC63, 0xAC03, 0x9381, 0x9BA2, 0xB463, 0xBC42, 0xABC0, // 0x0550 (1360) +0xE4A1, 0xDCA2, 0xBC23, 0x92E1, 0x7200, 0x71E0, 0x9260, 0xAB01, 0xAB21, 0xA2E0, 0xAAE0, 0xB300, 0xB322, 0xAB23, 0x9AE4, 0x7A85, // 0x0560 (1376) +0x6B29, 0x29E6, 0x0127, 0x09CD, 0x0A31, 0x0213, 0x0276, 0x0B18, 0x0337, 0x0378, 0x0378, 0x0399, 0x0BFA, 0x145B, 0x0C7A, 0x14BB, // 0x0570 (1392) +0x0C37, 0x0C58, 0x0479, 0x0CFB, 0x253C, 0x24DB, 0x24FA, 0x2D1B, 0x2D1A, 0x2CFA, 0x2CFA, 0x355A, 0x45BA, 0x3557, 0x3D55, 0x6D50, // 0x0580 (1408) +0xB4E6, 0xDCC2, 0xE4C3, 0xECC3, 0xDC21, 0xE421, 0xEC61, 0xE460, 0xDCA1, 0xDC60, 0xDC00, 0xD3C0, 0xBB61, 0xAB63, 0x9BC4, 0x8B83, // 0x0590 (1424) +0x8B42, 0xB404, 0xDCE4, 0xE503, 0xCC81, 0xBBE0, 0xBC00, 0xCC83, 0xD4A3, 0xD483, 0xBC42, 0x9B80, 0x9320, 0xA3A2, 0xBC22, 0xC421, // 0x05A0 (1440) +0xDC81, 0xD4A3, 0xB403, 0x8AC0, 0x61C0, 0x69C0, 0x9260, 0xAAE1, 0xAAE0, 0xB300, 0xC320, 0xC340, 0xCBA1, 0xD3E3, 0xC384, 0x9AC3, // 0x05B0 (1456) +0x7B28, 0x4AAB, 0x018C, 0x01F2, 0x0A54, 0x0255, 0x02B7, 0x0B38, 0x0BF8, 0x03B7, 0x0BF9, 0x0C1B, 0x0C3B, 0x147C, 0x14DB, 0x14BA, // 0x05C0 (1472) +0x0C9B, 0x14DC, 0x0CDC, 0x1CDC, 0x34DC, 0x3CBB, 0x34BB, 0x3CDB, 0x5D1B, 0x5CFA, 0x4CD8, 0x3435, 0x3455, 0x34B6, 0x1497, 0x3CB4, // 0x05D0 (1488) +0x948A, 0xC444, 0xE483, 0xE482, 0xDC62, 0xCBE0, 0xDC01, 0xEC61, 0xEC60, 0xE420, 0xCBC0, 0xBB81, 0xBB80, 0xB3C2, 0x9BE4, 0x8322, // 0x05E0 (1504) +0x7AC2, 0xA383, 0xCCA3, 0xDD23, 0xC4A1, 0xA3A0, 0xA3A0, 0xBC22, 0xCCA2, 0xD4A2, 0xCC83, 0xB3C1, 0x9AE0, 0xA301, 0xBBA1, 0xCC43, // 0x05F0 (1520) +0xD461, 0xCC42, 0xA3A1, 0x7240, 0x5980, 0x69C0, 0x9260, 0xAAC0, 0xAAE0, 0xBB20, 0xC340, 0xCB40, 0xCB80, 0xDC22, 0xDC03, 0xB344, // 0x0600 (1536) +0x8B6A, 0x6370, 0x1231, 0x0255, 0x0275, 0x0296, 0x0339, 0x0BDA, 0x0C9C, 0x045A, 0x0C79, 0x0C79, 0x0438, 0x0479, 0x0CDA, 0x0499, // 0x0610 (1552) +0x0CDB, 0x0C9A, 0x0C99, 0x1CBA, 0x1C99, 0x1458, 0x0C99, 0x24F9, 0x3CF8, 0x44B6, 0x2C56, 0x2416, 0x2C77, 0x2477, 0x1437, 0x4519, // 0x0620 (1568) +0x7D75, 0x9CCD, 0xC485, 0xE4C3, 0xD441, 0xC3E0, 0xD3E1, 0xE462, 0xE4A1, 0xDC60, 0xCBC0, 0xBB21, 0xB321, 0xBBA4, 0xB3E3, 0x9B41, // 0x0630 (1584) +0x8AC1, 0x9B42, 0xBC42, 0xC4E2, 0xA461, 0x8360, 0x8320, 0x9B82, 0xBC02, 0xCC43, 0xCC63, 0xC402, 0xAB21, 0xA2C0, 0xB320, 0xC3C2, // 0x0640 (1600) +0xDC61, 0xCC21, 0x9B61, 0x7240, 0x59A0, 0x7200, 0x9AA0, 0xB300, 0xBB60, 0xC360, 0xCB60, 0xC340, 0xC360, 0xD401, 0xDC23, 0xB3A5, // 0x0650 (1616) +0x83ED, 0x5414, 0x1336, 0x0317, 0x0338, 0x0BDA, 0x0C7D, 0x0CBD, 0x04DC, 0x04DC, 0x0C7A, 0x0438, 0x0417, 0x0458, 0x0479, 0x0459, // 0x0660 (1632) +0x0477, 0x0CB9, 0x0CBB, 0x047B, 0x045A, 0x0459, 0x0478, 0x0477, 0x0496, 0x0CB7, 0x1C57, 0x2416, 0x4D19, 0x44F8, 0x2477, 0x24D9, // 0x0670 (1648) +0x255B, 0x5DB7, 0xB4C8, 0xDCA2, 0xCC22, 0xB3A1, 0xC402, 0xD462, 0xD4E2, 0xDCA2, 0xD3A2, 0xC2C1, 0xBAA2, 0xC323, 0xC3C2, 0xB3A0, // 0x0680 (1664) +0x9B20, 0x9341, 0x9BA0, 0xA401, 0x8BA0, 0x6B00, 0x6AC0, 0x82E2, 0x9B43, 0xB384, 0xC404, 0xCC04, 0xBB82, 0xAAE0, 0xAAE0, 0xB342, // 0x0690 (1680) +0xDC61, 0xCC21, 0x9B61, 0x7240, 0x61C0, 0x7220, 0xAAE0, 0xCBA1, 0xD3C1, 0xD3C0, 0xD3A1, 0xC360, 0xC3A0, 0xD402, 0xD403, 0xA3A6, // 0x06A0 (1696) +0x6C4F, 0x3C76, 0x1419, 0x03FB, 0x043C, 0x151F, 0x0D5F, 0x051E, 0x04FC, 0x04DC, 0x14BC, 0x0C19, 0x03D7, 0x1439, 0x0C18, 0x03D6, // 0x06B0 (1712) +0x03B5, 0x03B6, 0x03BA, 0x03DB, 0x0C3B, 0x041A, 0x03D8, 0x0C59, 0x049A, 0x0C37, 0x2C15, 0x2B72, 0x43F3, 0x3BF3, 0x3475, 0x1435, // 0x06C0 (1728) +0x0499, 0x3559, 0x8DD3, 0xACEA, 0xBC44, 0xC3E2, 0xC423, 0xCC64, 0xDCA3, 0xE483, 0xD3E3, 0xC322, 0xBAA0, 0xBAE0, 0xC3A1, 0xC3E1, // 0x06D0 (1744) +0xA3A0, 0x9340, 0x8B00, 0x8320, 0x7300, 0x62A0, 0x6A80, 0x7281, 0x8282, 0x92C2, 0xAB63, 0xC3C3, 0xC3A2, 0xB320, 0xAAC0, 0xAB01, // 0x06E0 (1760) +0xDC41, 0xC3E1, 0x9320, 0x7260, 0x6200, 0x7A40, 0xB320, 0xE402, 0xE400, 0xDBE0, 0xCB80, 0xC360, 0xCBC0, 0xD422, 0xCBE2, 0x9B85, // 0x06F0 (1776) +0x6450, 0x23F6, 0x0C1A, 0x049D, 0x04FF, 0x055F, 0x051D, 0x0D3E, 0x0D1C, 0x0CDC, 0x1CFE, 0x043B, 0x03D8, 0x0C38, 0x0BF7, 0x0374, // 0x0700 (1792) +0x0332, 0x0B73, 0x1375, 0x0B34, 0x0B54, 0x1374, 0x0B53, 0x0B54, 0x03B6, 0x13D5, 0x3475, 0x23D3, 0x0B94, 0x1C36, 0x34B7, 0x23F3, // 0x0710 (1808) +0x022C, 0x130F, 0x3D78, 0x7657, 0x9C47, 0xBBA2, 0xC3E4, 0xD446, 0xD485, 0xDC84, 0xD442, 0xCBC1, 0xBB21, 0xBB00, 0xC381, 0xC401, // 0x0720 (1824) +0xB401, 0x9B60, 0x8B00, 0x82C0, 0x72A0, 0x6AA0, 0x7AC0, 0x82C1, 0x8261, 0x8A61, 0x9AC0, 0xB342, 0xC381, 0xBB20, 0xAAA0, 0xA281, // 0x0730 (1840) +0xCC00, 0xB380, 0x8B00, 0x7280, 0x6A20, 0x8260, 0xBB40, 0xEC21, 0xEC61, 0xE400, 0xD380, 0xCB60, 0xD3E1, 0xDC43, 0xCBE2, 0x9B65, // 0x0740 (1856) +0x63F2, 0x2BD7, 0x13FA, 0x047C, 0x053E, 0x055F, 0x051E, 0x0D1E, 0x0CDD, 0x14FE, 0x1D5F, 0x045B, 0x0479, 0x0C99, 0x0417, 0x0BF6, // 0x0750 (1872) +0x0352, 0x0373, 0x03D4, 0x0372, 0x02CD, 0x0AAC, 0x1AED, 0x1B0E, 0x0B11, 0x0B52, 0x13B0, 0x1BF2, 0x03B4, 0x13F5, 0x2370, 0x4BD1, // 0x0760 (1888) +0x534F, 0x4B4F, 0x33AF, 0x6DB6, 0xA615, 0x8C4A, 0xAC25, 0xCC85, 0xD484, 0xD463, 0xCC61, 0xCC41, 0xBBC2, 0xBB41, 0xC381, 0xCC02, // 0x0770 (1904) +0xC421, 0xABA0, 0x9321, 0x8AC1, 0x7AA0, 0x7AC0, 0x8B41, 0x9B63, 0x9B42, 0x92E1, 0x92C0, 0xAB21, 0xC362, 0xC322, 0xAAA1, 0xA261, // 0x0780 (1920) +0xA382, 0x9AE0, 0x9280, 0x8A60, 0x7260, 0x8280, 0xAB60, 0xDC21, 0xF442, 0xEBE0, 0xCB80, 0xC3A0, 0xD400, 0xDC62, 0xD423, 0x9BA6, // 0x0790 (1936) +0x5C52, 0x1BF7, 0x0419, 0x151E, 0x0D1D, 0x0D3D, 0x0D1E, 0x0D3E, 0x04DD, 0x0CFD, 0x155D, 0x0439, 0x03B7, 0x13B8, 0x0B77, 0x1398, // 0x07A0 (1952) +0x1396, 0x0B12, 0x1331, 0x024C, 0x1A6B, 0x120A, 0x1A6D, 0x1AD0, 0x0AD1, 0x0B53, 0x0353, 0x0393, 0x0331, 0x02CE, 0x230F, 0x4B6F, // 0x07B0 (1968) +0x6BCE, 0x8C4F, 0x7BED, 0x4B2B, 0x5D77, 0x9EDB, 0x9CCC, 0xBCA7, 0xC4A4, 0xBC62, 0xBC61, 0xCC82, 0xCC41, 0xCBC1, 0xCBA1, 0xD3E2, // 0x07C0 (1984) +0xD422, 0xC3E1, 0xA360, 0x8B00, 0x82A0, 0x8AA0, 0xA300, 0xBB82, 0xCBC2, 0xC3C2, 0xAB40, 0xA320, 0xB3A1, 0xBBA2, 0xBB22, 0xB2A1, // 0x07D0 (2000) +0x92E0, 0x9AE0, 0x9AE0, 0x92A0, 0x7240, 0x7240, 0xA320, 0xD401, 0xEC61, 0xE400, 0xC380, 0xBB80, 0xCBE1, 0xDC63, 0xD443, 0x9B84, // 0x07E0 (2016) +0x63AB, 0x3C32, 0x0C79, 0x0D3F, 0x0D1E, 0x0D1E, 0x049C, 0x049C, 0x0CBD, 0x14FD, 0x151E, 0x047B, 0x03F8, 0x0316, 0x0B58, 0x0293, // 0x07F0 (2032) +0x022F, 0x01CB, 0x0A2B, 0x01A9, 0x026C, 0x02CE, 0x0310, 0x0B52, 0x0B73, 0x0353, 0x03B4, 0x0BB3, 0x1330, 0x01EB, 0x02AD, 0x2B8F, // 0x0800 (2048) +0x19C6, 0x0903, 0x0082, 0x0083, 0x0925, 0x53D0, 0x8DFA, 0x84D1, 0xB446, 0xBBC0, 0xAC40, 0xB4E2, 0xB4C3, 0xBC63, 0xC402, 0xCBE1, // 0x0810 (2064) +0xD441, 0xCC21, 0xB3C1, 0x9B00, 0x8280, 0x8260, 0x92C0, 0xB381, 0xCC22, 0xD462, 0xC3E2, 0xAB60, 0xAB61, 0xBBC3, 0xC3E3, 0xBB61, // 0x0820 (2080) +0xA300, 0xAB80, 0xB382, 0x92E1, 0x7220, 0x7220, 0xA320, 0xD421, 0xEC81, 0xDC20, 0xBB80, 0xAB20, 0xBB81, 0xCC03, 0xCC03, 0xA362, // 0x0830 (2096) +0x6B23, 0x540C, 0x2CF9, 0x0D1E, 0x04BD, 0x04BD, 0x0CDE, 0x0C7D, 0x045C, 0x14BD, 0x0CDD, 0x043A, 0x0335, 0x1397, 0x0295, 0x0274, // 0x0840 (2112) +0x0272, 0x0291, 0x02D2, 0x0312, 0x0B72, 0x1BF3, 0x0B71, 0x1392, 0x0BB2, 0x022C, 0x026E, 0x1352, 0x0BB5, 0x0395, 0x0373, 0x13B3, // 0x0850 (2128) +0x1B2F, 0x01A8, 0x1987, 0x2987, 0x2147, 0x0907, 0x2330, 0x7DD6, 0x94CB, 0x9C03, 0xB444, 0xC463, 0xCCC1, 0xC4A0, 0xBC20, 0xBBC0, // 0x0860 (2144) +0xD440, 0xDC62, 0xD421, 0xAB60, 0x8AA0, 0x7A60, 0x8280, 0x9301, 0xB3C0, 0xD462, 0xD462, 0xBBA0, 0x9B00, 0xAB42, 0xBC02, 0xBC02, // 0x0870 (2160) +0xBBE0, 0xC442, 0xBBE3, 0x92C0, 0x6A00, 0x7A40, 0xAB40, 0xD421, 0xE481, 0xDC20, 0xBB80, 0xAB00, 0xB301, 0xC342, 0xC362, 0xB321, // 0x0880 (2176) +0x8AC1, 0x6348, 0x3CD7, 0x0C9B, 0x045A, 0x043A, 0x0C7D, 0x0C7D, 0x14DE, 0x043B, 0x0CBC, 0x0419, 0x0292, 0x12F4, 0x0AD4, 0x02D5, // 0x0890 (2192) +0x0316, 0x0377, 0x0B55, 0x1334, 0x1B32, 0x128E, 0x228C, 0x0187, 0x126A, 0x234F, 0x0AAF, 0x026F, 0x0313, 0x03D6, 0x03B6, 0x13B6, // 0x08A0 (2208) +0x2C14, 0x2B4F, 0x2A08, 0x5B0C, 0x6BAE, 0x6BCE, 0x5BED, 0x8552, 0x9E16, 0x950F, 0xBCC5, 0xDD02, 0xDD01, 0xD481, 0xBC00, 0xBBC0, // 0x08B0 (2224) +0xD400, 0xE482, 0xE461, 0xC3A0, 0x9B00, 0x8280, 0x7241, 0x7A60, 0x9B20, 0xC401, 0xDCA2, 0xC422, 0x9B00, 0x8AA0, 0x9B80, 0xB443, // 0x08C0 (2240) +0xD4A1, 0xD4C3, 0xB403, 0x8AC0, 0x7A40, 0x92E0, 0xBBC1, 0xDC61, 0xE481, 0xDC40, 0xCBA1, 0xBB20, 0xBAC0, 0xBAC1, 0xC2C1, 0xBAC1, // 0x08D0 (2256) +0xAAC3, 0x7AE8, 0x4434, 0x1458, 0x1459, 0x03F8, 0x0377, 0x03FA, 0x0C7B, 0x14BC, 0x0459, 0x1459, 0x0AF3, 0x022F, 0x12F1, 0x12F1, // 0x08E0 (2272) +0x128F, 0x0A6E, 0x0A6D, 0x0A0C, 0x11CB, 0x0948, 0x0986, 0x2A29, 0x10E5, 0x2A2A, 0x1B6F, 0x0330, 0x028F, 0x0AF2, 0x0BB4, 0x0BB4, // 0x08F0 (2288) +0x13D4, 0x0ACE, 0x0165, 0x1123, 0x10C1, 0x2122, 0x39C4, 0x1184, 0x1B8F, 0x7617, 0xBDCD, 0xCD25, 0xBD01, 0xC4E1, 0xC402, 0xCBA2, // 0x0900 (2304) +0xDC22, 0xE482, 0xE481, 0xCBE0, 0xAB40, 0x92E0, 0x7A82, 0x7A41, 0x8AC0, 0xAB81, 0xCC42, 0xCC22, 0xA321, 0x7200, 0x7A60, 0x9BA3, // 0x0910 (2320) +0xDD02, 0xD4C3, 0xABE2, 0x8AC0, 0x8AC0, 0xAB81, 0xD442, 0xE4A2, 0xEC81, 0xDC40, 0xD3E0, 0xCB60, 0xC321, 0xC2C1, 0xBA60, 0xBA61, // 0x0920 (2336) +0xC2C3, 0x9B07, 0x63D0, 0x3415, 0x0BF7, 0x0C18, 0x0335, 0x0376, 0x0395, 0x0C18, 0x0479, 0x0C79, 0x1BD7, 0x024F, 0x020B, 0x1A6B, // 0x0930 (2352) +0x0965, 0x19C6, 0x32CC, 0x228B, 0x01E7, 0x22CB, 0x19C8, 0x0926, 0x2ACB, 0x0186, 0x0126, 0x2AEE, 0x1371, 0x0352, 0x03B4, 0x03B4, // 0x0940 (2368) +0x0BD4, 0x0B11, 0x1ACE, 0x32AD, 0x19C8, 0x1125, 0x08A1, 0x00C2, 0x00C5, 0x1AEE, 0x55B8, 0x7E34, 0xBD47, 0xD4A0, 0xD480, 0xCC40, // 0x0950 (2384) +0xDC41, 0xDC62, 0xDC82, 0xCC20, 0xB3A0, 0xAB61, 0x9B22, 0x92E2, 0x8AC0, 0x9B01, 0xABA2, 0xBBE3, 0xAB43, 0x7A20, 0x69E0, 0x82C3, // 0x0960 (2400) +0xDCE1, 0xCC81, 0xA381, 0x8AE0, 0x9B41, 0xC402, 0xDC61, 0xECA1, 0xE480, 0xDC40, 0xD400, 0xCBC0, 0xCB80, 0xC300, 0xBA81, 0xBA82, // 0x0970 (2416) +0xC302, 0xAB45, 0x8369, 0x5BD0, 0x1374, 0x03D7, 0x03B7, 0x0B96, 0x0334, 0x0B96, 0x0418, 0x0C59, 0x1458, 0x1393, 0x0126, 0x11C8, // 0x0980 (2432) +0x1A29, 0x0145, 0x1A28, 0x4BAE, 0x334D, 0x22CC, 0x2B2C, 0x0A07, 0x09E7, 0x436E, 0x1A09, 0x11E9, 0x1ACC, 0x130E, 0x1392, 0x1372, // 0x0990 (2448) +0x3B70, 0x4370, 0x3391, 0x232F, 0x338F, 0x3B6E, 0x4B2D, 0x3209, 0x2166, 0x0107, 0x0395, 0x355A, 0x7615, 0x9D8C, 0xC4C4, 0xD460, // 0x09A0 (2464) +0xD461, 0xCC41, 0xCC61, 0xC441, 0xC401, 0xC422, 0xC443, 0xBBE3, 0x9301, 0x82A0, 0x8280, 0x9AE2, 0x9AE2, 0x8220, 0x69A0, 0x7202, // 0x09B0 (2480) +0xDCA0, 0xC440, 0xA361, 0x9321, 0xB3C2, 0xD483, 0xE4A1, 0xE480, 0xE460, 0xDC40, 0xD420, 0xCBE0, 0xC3A0, 0xC340, 0xB2A2, 0xBAE3, // 0x09C0 (2496) +0xCBC3, 0xBBC4, 0x9B04, 0x7B6B, 0x2BD3, 0x0376, 0x03B8, 0x13F9, 0x0B36, 0x0B35, 0x0BF7, 0x03F7, 0x03D5, 0x2436, 0x22EE, 0x00C5, // 0x09D0 (2512) +0x01A8, 0x1A6B, 0x11A7, 0x1986, 0x530C, 0x63CE, 0x43AE, 0x43CE, 0x1269, 0x1A69, 0x53AE, 0x3AAA, 0x31E7, 0x3A08, 0x3289, 0x42C9, // 0x09E0 (2528) +0x6B48, 0x7348, 0x7B48, 0x6B4A, 0x434D, 0x2B4E, 0x3390, 0x22AC, 0x1165, 0x0965, 0x024B, 0x1C16, 0x149B, 0x34D9, 0x84EF, 0xB4C8, // 0x09F0 (2544) +0xCCA3, 0xC420, 0xBC21, 0xBC42, 0xC442, 0xDCA3, 0xE504, 0xD4C3, 0xABE3, 0x82A0, 0x7200, 0x7A21, 0x8A41, 0x8200, 0x69A0, 0x69E2, // 0x0A00 (2560) +0xD4A1, 0xC420, 0xB380, 0xBBA0, 0xD462, 0xDCA3, 0xD461, 0xD440, 0xD480, 0xD4A1, 0xCC21, 0xBBA0, 0xBB81, 0xB341, 0xB321, 0xC3A3, // 0x0A10 (2576) +0xE484, 0xDC43, 0xC382, 0x8AE4, 0x5B6C, 0x3392, 0x0354, 0x0BD7, 0x0355, 0x0334, 0x0395, 0x0BD6, 0x03B6, 0x0BF7, 0x1BF6, 0x026F, // 0x0A20 (2592) +0x00A5, 0x00A3, 0x0965, 0x0123, 0x1103, 0x4AA9, 0x5B4C, 0x530B, 0x3A68, 0x3A47, 0x3A06, 0x39C5, 0x39C4, 0x4205, 0x4245, 0x4246, // 0x0A30 (2608) +0x52A8, 0x62E9, 0x6AE8, 0x7309, 0x7B28, 0x6AE8, 0x3A68, 0x2A8A, 0x126B, 0x0168, 0x0128, 0x23B4, 0x0C18, 0x0419, 0x14DB, 0x3CF7, // 0x0A40 (2624) +0x8D0E, 0xAC67, 0xA3C1, 0xB3A0, 0xC421, 0xD4C2, 0xE543, 0xE524, 0xC442, 0x9B40, 0x7220, 0x61E0, 0x7221, 0x71E1, 0x61C0, 0x6A01, // 0x0A50 (2640) +0xC440, 0xBC00, 0xBBE0, 0xCC41, 0xDCC3, 0xD482, 0xC3E0, 0xBBC0, 0xD480, 0xDCA1, 0xC421, 0xAB60, 0xAB40, 0xAB61, 0xBBC2, 0xD463, // 0x0A60 (2656) +0xF503, 0xF503, 0xCBE3, 0xA344, 0x72C5, 0x532B, 0x1B51, 0x0334, 0x0B34, 0x02F4, 0x0397, 0x0375, 0x0BD5, 0x13F6, 0x0395, 0x1374, // 0x0A70 (2672) +0x1AD0, 0x0169, 0x00A2, 0x00A1, 0x08A0, 0x3184, 0x41C6, 0x41C7, 0x3165, 0x3185, 0x52C9, 0x52A8, 0x3A05, 0x39C4, 0x5205, 0x49E5, // 0x0A80 (2688) +0x4A47, 0x4A67, 0x5289, 0x5ACA, 0x5AC9, 0x62C9, 0x6B09, 0x41E5, 0x18E2, 0x1145, 0x016A, 0x12F3, 0x0BD9, 0x03DA, 0x03DA, 0x14BC, // 0x0A90 (2704) +0x24BA, 0x5D58, 0x6C6C, 0x6B22, 0x9360, 0xC482, 0xE503, 0xE503, 0xD4C3, 0xABA1, 0x7AC1, 0x6A61, 0x6221, 0x6201, 0x5A02, 0x51E2, // 0x0AA0 (2720) +0xB400, 0xB3C0, 0xCC20, 0xDCC2, 0xE502, 0xCC61, 0xB3C0, 0xB3A0, 0xCC60, 0xD481, 0xC401, 0xA320, 0x9B40, 0xB3C1, 0xCC62, 0xED23, // 0x0AB0 (2736) +0xFDA2, 0xFD82, 0xDC62, 0xB321, 0x8240, 0x5245, 0x2B4F, 0x0B12, 0x0A70, 0x0A71, 0x1334, 0x0B54, 0x0393, 0x13F5, 0x0332, 0x0353, // 0x0AC0 (2752) +0x1BD5, 0x0AF0, 0x01A8, 0x0924, 0x1102, 0x08C1, 0x2165, 0x2986, 0x2144, 0x1924, 0x3ACA, 0x3B0B, 0x32CA, 0x2A48, 0x4227, 0x4206, // 0x0AD0 (2768) +0x4226, 0x39E5, 0x4205, 0x4226, 0x3A06, 0x31C5, 0x4205, 0x4A87, 0x39E5, 0x29A6, 0x0107, 0x09ED, 0x0270, 0x02B3, 0x0B56, 0x03B7, // 0x0AE0 (2784) +0x14DB, 0x2D1A, 0x54D5, 0x642D, 0x73A5, 0xA422, 0xD4C2, 0xECC1, 0xE481, 0xCBE0, 0x9B00, 0x7A80, 0x7A60, 0x6A21, 0x61E1, 0x59E2, // 0x0AF0 (2800) +0xA360, 0xAB80, 0xCC20, 0xE4C2, 0xDCE2, 0xC440, 0xB3C0, 0xBBE0, 0xD460, 0xDC81, 0xC3E0, 0xAB40, 0xABA0, 0xC441, 0xDCC1, 0xF562, // 0x0B00 (2816) +0xFDE2, 0xF5A2, 0xE4A2, 0xB361, 0x7A61, 0x4A03, 0x434C, 0x336F, 0x1AAE, 0x0A2E, 0x01ED, 0x024E, 0x028F, 0x02D0, 0x026D, 0x0B30, // 0x0B10 (2832) +0x0BD3, 0x0351, 0x026D, 0x0168, 0x09C9, 0x09A8, 0x0125, 0x0145, 0x1164, 0x19A5, 0x32EA, 0x3B4C, 0x330C, 0x2A8A, 0x3227, 0x3A27, // 0x0B20 (2848) +0x4228, 0x4A29, 0x4207, 0x4A07, 0x5248, 0x4207, 0x2122, 0x2102, 0x31C5, 0x3A49, 0x0106, 0x0169, 0x09ED, 0x020F, 0x0271, 0x0335, // 0x0B30 (2864) +0x03B9, 0x0CBD, 0x1D3C, 0x34F8, 0x4412, 0x638C, 0x9BE7, 0xCC85, 0xDCE2, 0xCC60, 0xABA0, 0x8B00, 0x72A0, 0x6260, 0x5A60, 0x6260, // 0x0B40 (2880) +0x9300, 0xA360, 0xCC21, 0xDCA2, 0xD4A1, 0xCC40, 0xBC00, 0xC421, 0xDC81, 0xE481, 0xD400, 0xC3E0, 0xCC40, 0xDCC1, 0xED00, 0xFD41, // 0x0B50 (2896) +0xFDC2, 0xF583, 0xD4A3, 0xABC3, 0x72A3, 0x5203, 0x5A85, 0x5B29, 0x2B0C, 0x026C, 0x026D, 0x022D, 0x022D, 0x020C, 0x128D, 0x028D, // 0x0B60 (2912) +0x0B4F, 0x0B70, 0x024D, 0x026F, 0x0290, 0x0A8F, 0x022B, 0x0A09, 0x0965, 0x0944, 0x19E5, 0x3247, 0x3A88, 0x42A9, 0x4AA9, 0x3A27, // 0x0B70 (2928) +0x31E6, 0x3A48, 0x3A28, 0x4268, 0x4227, 0x52A8, 0x5AE8, 0x3A05, 0x29C4, 0x2184, 0x0903, 0x1165, 0x0965, 0x11E6, 0x1A06, 0x1A26, // 0x0B80 (2944) +0x330C, 0x2370, 0x0C78, 0x151C, 0x2D1A, 0x2C14, 0x332E, 0x4ACA, 0x83EA, 0xA468, 0xAC03, 0x9320, 0x7AC0, 0x6A80, 0x5A80, 0x5AA0, // 0x0B90 (2960) +0x9B20, 0xB3A1, 0xCC21, 0xD461, 0xD460, 0xCC40, 0xC420, 0xCC41, 0xE481, 0xDC60, 0xD420, 0xD440, 0xE4C1, 0xE4E1, 0xECE0, 0xFD20, // 0x0BA0 (2976) +0xFD62, 0xED22, 0xD482, 0xABA2, 0x82E2, 0x6A21, 0x6200, 0x6283, 0x4B08, 0x3B4B, 0x12ED, 0x020C, 0x026E, 0x0A8E, 0x0A4C, 0x0A2A, // 0x0BB0 (2992) +0x12AC, 0x0A6C, 0x020C, 0x0A8F, 0x0290, 0x0AD1, 0x0AB0, 0x0A6E, 0x09EB, 0x0188, 0x0125, 0x0924, 0x19A6, 0x21E7, 0x326A, 0x2A28, // 0x0BC0 (3008) +0x3227, 0x3A47, 0x3A07, 0x3A07, 0x5227, 0x49E6, 0x5227, 0x5A68, 0x5227, 0x5205, 0x6A44, 0x9B66, 0xAB63, 0xB381, 0xBBC0, 0xC401, // 0x0BD0 (3024) +0xBBA2, 0x8B22, 0x4B23, 0x2B46, 0x33AB, 0x5471, 0x5454, 0x4392, 0x330D, 0x4B2B, 0x8389, 0x9387, 0x7AC3, 0x7240, 0x7280, 0x6AA0, // 0x0BE0 (3040) +0xB380, 0xBBE1, 0xCC21, 0xCC00, 0xCC20, 0xD440, 0xCC20, 0xD440, 0xDC80, 0xD460, 0xD440, 0xD480, 0xDCC0, 0xDCA0, 0xDCA0, 0xE4E1, // 0x0BF0 (3056) +0xED02, 0xE4C2, 0xD441, 0xAB41, 0x8AE3, 0x7262, 0x7242, 0x7283, 0x72C3, 0x7346, 0x5349, 0x2ACA, 0x024A, 0x020B, 0x01C8, 0x0A09, // 0x0C00 (3072) +0x0A2A, 0x126B, 0x0A6B, 0x0A6C, 0x0A6C, 0x020C, 0x0A6D, 0x01EB, 0x01EA, 0x09C9, 0x0187, 0x00E4, 0x00C3, 0x00E2, 0x1984, 0x2A06, // 0x0C10 (3088) +0x2A67, 0x11E6, 0x2A48, 0x3248, 0x3228, 0x3207, 0x3A27, 0x4247, 0x4226, 0x49E4, 0x59A1, 0x92A3, 0xBB82, 0xBB40, 0xCBC0, 0xCC02, // 0x0C20 (3104) +0xB3A2, 0x9301, 0x7260, 0x6200, 0x6A00, 0x7260, 0x8305, 0x942C, 0x742F, 0x4B2C, 0x3AA8, 0x5349, 0x73EA, 0x6B05, 0x5A60, 0x6A80, // 0x0C30 (3120) +0xC3E0, 0xD442, 0xD441, 0xCC20, 0xD460, 0xDC80, 0xDC60, 0xDC61, 0xD480, 0xD460, 0xCC60, 0xD480, 0xD4A0, 0xCC40, 0xC420, 0xD480, // 0x0C40 (3136) +0xE4C0, 0xDC81, 0xB3A1, 0x9323, 0x72A3, 0x7284, 0x7A84, 0x92E4, 0xAB64, 0xABA5, 0x8B43, 0x5AE4, 0x2AC8, 0x0A69, 0x0209, 0x01E9, // 0x0C50 (3152) +0x022B, 0x028C, 0x0AAC, 0x0A6A, 0x1A4A, 0x1A29, 0x0186, 0x09C6, 0x0183, 0x0963, 0x1123, 0x18E2, 0x20E0, 0x6283, 0x8B22, 0x9300, // 0x0C60 (3168) +0x8AE2, 0x82C3, 0x5A23, 0x4A46, 0x3269, 0x2A49, 0x3206, 0x31C4, 0x3A26, 0x4206, 0x41C5, 0x4983, 0x8A63, 0xAAA2, 0xBB43, 0xC3A4, // 0x0C70 (3184) +0xA381, 0x82C0, 0x8240, 0x8202, 0x79A0, 0x81E0, 0x9AA0, 0xAB81, 0xAC25, 0xA468, 0x7388, 0x52E7, 0x6326, 0x62C4, 0x6220, 0x6A40, // 0x0C80 (3200) +0xD460, 0xDCA0, 0xDCC0, 0xDCC0, 0xE4A0, 0xF4C1, 0xECE1, 0xE4A0, 0xDC80, 0xD440, 0xDC60, 0xDC81, 0xD4A0, 0xC420, 0xC3E0, 0xCC60, // 0x0C90 (3216) +0xD4C2, 0xC442, 0xA341, 0x8280, 0x7A62, 0x82C3, 0xA363, 0xB3C3, 0xC403, 0xC444, 0xB3C3, 0x7AC2, 0x10A0, 0x00E2, 0x09A6, 0x1A8A, // 0x0CA0 (3232) +0x1A69, 0x1248, 0x0A27, 0x01C6, 0x01C7, 0x01C7, 0x01A7, 0x19E7, 0x21C5, 0x1943, 0x08C2, 0x10C2, 0x2941, 0x7B67, 0x93A2, 0x9B20, // 0x0CB0 (3248) +0x92A0, 0x9A80, 0x9A82, 0x8A83, 0x6A63, 0x5223, 0x39E3, 0x29A2, 0x19A3, 0x2183, 0x31A6, 0x3965, 0x4103, 0x69E3, 0xA303, 0xBB63, // 0x0CC0 (3264) +0xAB03, 0x9A62, 0x9242, 0x9222, 0x8200, 0x8A20, 0x9AE0, 0xAB60, 0xBBE1, 0xBBE1, 0xABC1, 0x8B41, 0x6AE1, 0x6AC3, 0x6AA3, 0x6243, // 0x0CD0 (3280) +0xDCA0, 0xE4E0, 0xE500, 0xE500, 0xF500, 0xFD01, 0xF501, 0xECE0, 0xE480, 0xDC60, 0xDC80, 0xE4A0, 0xDCE1, 0xD4A0, 0xD460, 0xDCA0, // 0x0CE0 (3296) +0xDCC0, 0xBC00, 0x9B01, 0x7A41, 0x7A62, 0x9B43, 0xC423, 0xDCA2, 0xD481, 0xD4A4, 0xC488, 0x51A0, 0x0840, 0x0081, 0x0081, 0x0903, // 0x0CF0 (3312) +0x29E6, 0x21E6, 0x2227, 0x09A5, 0x0144, 0x01E6, 0x01A5, 0x01C5, 0x1206, 0x09A5, 0x00E3, 0x1944, 0x2921, 0x59E1, 0x9300, 0xA300, // 0x0D00 (3328) +0xAB00, 0xA281, 0x9A21, 0x9A43, 0x9284, 0x8AC5, 0x7AC4, 0x6A83, 0x6283, 0x5A63, 0x5A64, 0x5225, 0x41A3, 0x4161, 0x6A41, 0xA365, // 0x0D10 (3344) +0xA303, 0x9A83, 0x9A62, 0x9242, 0x9261, 0x9AC1, 0xB381, 0xC401, 0xC3E0, 0xAB80, 0x9320, 0x7AA0, 0x6260, 0x6282, 0x6AA3, 0x6A83, // 0x0D20 (3360) +0xDCE0, 0xE500, 0xE520, 0xED00, 0xF520, 0xFD00, 0xF500, 0xF4E0, 0xE4A0, 0xE480, 0xDC80, 0xE4C0, 0xE501, 0xE521, 0xDCE0, 0xE500, // 0x0D30 (3376) +0xDCC1, 0xBBC0, 0x8AC2, 0x6A21, 0x7AA1, 0xABA3, 0xDCA2, 0xF522, 0xED23, 0xC484, 0x6202, 0x41C5, 0x2965, 0x3A08, 0x4208, 0x1081, // 0x0D40 (3392) +0x0060, 0x1901, 0x3960, 0x8387, 0x6AC3, 0x6B24, 0x52A3, 0x3A22, 0x42A6, 0x1100, 0x3941, 0x7223, 0x7200, 0x8A80, 0x9B20, 0xC402, // 0x0D50 (3408) +0xC3A2, 0xAAE1, 0x9A41, 0x9282, 0x8AE3, 0x8B24, 0x8B03, 0x8AC1, 0x9280, 0x8A40, 0x8A01, 0x8A23, 0x8244, 0x6A03, 0x7262, 0x9344, // 0x0D60 (3424) +0xAB84, 0xAB03, 0x9A82, 0x9241, 0x9260, 0xAB21, 0xC3E1, 0xD462, 0xCC41, 0xAB80, 0x8AC0, 0x6A40, 0x5A00, 0x5A00, 0x6220, 0x6A40, // 0x0D70 (3440) +0xDCE0, 0xE520, 0xE500, 0xECE0, 0xF520, 0xFD00, 0xF4E0, 0xF4E0, 0xECC0, 0xE480, 0xD460, 0xD480, 0xE4E0, 0xED21, 0xED20, 0xE501, // 0x0D80 (3456) +0xDC82, 0xB381, 0x8282, 0x7221, 0x82C1, 0xB403, 0xE4E3, 0xF544, 0xED87, 0x6220, 0x6B2A, 0x8451, 0x3A69, 0x5B2D, 0x7C10, 0x5ACB, // 0x0D90 (3472) +0x18A3, 0x1020, 0x38E0, 0x9B86, 0xA363, 0xB381, 0xD440, 0xE4E3, 0xBC44, 0x48E0, 0x9AA1, 0x9220, 0x89C0, 0xA2A1, 0xC3C1, 0xD463, // 0x0DA0 (3488) +0xC3E2, 0xAB20, 0x9AA1, 0x9AE2, 0x9B43, 0x9B43, 0x9B02, 0x9AC1, 0xA2C1, 0xA260, 0xA200, 0x99E0, 0x9A01, 0xA282, 0xB303, 0xC3A3, // 0x0DB0 (3504) +0xC423, 0xBBC2, 0xA2C1, 0x8A00, 0x9220, 0xA2A1, 0xB361, 0xC3E2, 0xC422, 0xB3A1, 0x8B01, 0x7260, 0x6220, 0x6A40, 0x72A0, 0x7AA0, // 0x0DC0 (3520) +0xDCE0, 0xE500, 0xED00, 0xECE0, 0xF520, 0xFD20, 0xF4E0, 0xECE0, 0xE4C0, 0xDC80, 0xCC20, 0xCC20, 0xDC80, 0xECE0, 0xED00, 0xECE1, // 0x0DD0 (3536) +0xDC21, 0xBB41, 0x9261, 0x8A21, 0x9AC1, 0xC3E3, 0xED03, 0xF545, 0xD4E7, 0x6A82, 0xA553, 0x7C31, 0x636D, 0x740F, 0x73EF, 0x6B6D, // 0x0DE0 (3552) +0x2143, 0x1080, 0x5243, 0x6A62, 0x6A21, 0x92E2, 0xC380, 0xE4A5, 0x8240, 0x79E0, 0xAB23, 0x9220, 0x9240, 0xAB01, 0xD420, 0xDC40, // 0x0DF0 (3568) +0xC380, 0xAAA0, 0xAA60, 0xBB03, 0xC3A4, 0xBBA4, 0xB342, 0xAAE1, 0xAAA0, 0xAA60, 0xAA60, 0xAA81, 0xAAC1, 0xAB00, 0xBB60, 0xCC21, // 0x0E00 (3584) +0xDCC1, 0xC440, 0xA320, 0x9220, 0x91E1, 0x9A22, 0xA282, 0xB302, 0xAB61, 0x9B41, 0x82E0, 0x6A60, 0x6220, 0x6A60, 0x7AE0, 0x8B20, // 0x0E10 (3600) +0xDCC0, 0xE500, 0xED00, 0xED00, 0xF520, 0xF540, 0xECE0, 0xE4C0, 0xDCA0, 0xD460, 0xBC00, 0xBC00, 0xD460, 0xE4A1, 0xECE0, 0xECC1, // 0x0E20 (3616) +0xE420, 0xCB20, 0xB221, 0xA1E1, 0xAA61, 0xD3A2, 0xF4E2, 0xF543, 0xE506, 0x8B24, 0xAD32, 0x8431, 0x7BEF, 0x94B1, 0x8CB0, 0x6BCD, // 0x0E30 (3632) +0x31C7, 0x1903, 0x4A24, 0x49C2, 0x49A0, 0x6A41, 0x9B42, 0xB3C4, 0x5920, 0xAB65, 0x9AC1, 0x9A60, 0x9A80, 0xB342, 0xC3E1, 0xCBC1, // 0x0E40 (3648) +0xB2C0, 0xA240, 0xAA20, 0xC323, 0xD425, 0xDC64, 0xCBA2, 0xBAE0, 0xB280, 0xB240, 0xB220, 0xB2A1, 0xBB82, 0xB3A1, 0xB3C0, 0xCCA1, // 0x0E50 (3664) +0xDD01, 0xCC80, 0xAB40, 0x9220, 0x91C2, 0x99C3, 0x9A02, 0xA262, 0x92C1, 0x8AE0, 0x72E0, 0x6A80, 0x6260, 0x6A60, 0x7AE0, 0x8B81, // 0x0E60 (3680) +0xDCC0, 0xE4E1, 0xED00, 0xF500, 0xF520, 0xF541, 0xED01, 0xE4C0, 0xD4A0, 0xC460, 0xB400, 0xBC00, 0xCC40, 0xE480, 0xECA0, 0xEC81, // 0x0E70 (3696) +0xE401, 0xD2E0, 0xB9E1, 0xA981, 0xAA00, 0xCB41, 0xECA1, 0xF501, 0xECE3, 0xC486, 0xB531, 0x8C51, 0x8C70, 0x9CD1, 0x9CD1, 0x73CE, // 0x0E80 (3712) +0x4207, 0x31A5, 0x4A46, 0x3182, 0x39C2, 0x5A03, 0x82E5, 0x6120, 0x8220, 0xA302, 0x9280, 0x92A0, 0x92C0, 0xA321, 0xC3C1, 0xB340, // 0x0E90 (3728) +0x9AE0, 0x9A80, 0xA261, 0xBB02, 0xDC24, 0xECA5, 0xE423, 0xCB21, 0xAA40, 0xAA60, 0xB280, 0xB302, 0xBB82, 0xB3A1, 0xB3C0, 0xCC61, // 0x0EA0 (3744) +0xDCC1, 0xCC40, 0xAB40, 0x9240, 0x99E2, 0xA1E3, 0xA203, 0x9222, 0x8240, 0x7280, 0x6A80, 0x6280, 0x6260, 0x6240, 0x72A0, 0x8361, // 0x0EB0 (3760) +0xD4A0, 0xDCC0, 0xECE0, 0xECE0, 0xE4E0, 0xE500, 0xE500, 0xDCC0, 0xCC80, 0xC460, 0xAC00, 0xB400, 0xCC40, 0xDC40, 0xE460, 0xE441, // 0x0EC0 (3776) +0xDBA2, 0xC2A2, 0xB1C2, 0xA161, 0xA1E0, 0xC341, 0xE482, 0xF4E2, 0xE4A1, 0xC444, 0xBD91, 0xAD95, 0x94D1, 0xB5D6, 0xA535, 0x8432, // 0x0ED0 (3792) +0x738F, 0x3186, 0x5268, 0x49E4, 0x3981, 0x49E3, 0x3984, 0x3101, 0x82E3, 0x8280, 0x8AA0, 0x92C0, 0x9AE0, 0xA321, 0xAB41, 0xB322, // 0x0EE0 (3808) +0xAB01, 0xB2E1, 0xAAC1, 0xB2E1, 0xBBC2, 0xDCA5, 0xDC64, 0xCB83, 0xAA60, 0xAA20, 0xB261, 0xBB02, 0xB362, 0xABA1, 0xABE1, 0xB401, // 0x0EF0 (3824) +0xCC41, 0xC3E1, 0xAB21, 0x9A60, 0xA222, 0xAA23, 0xA202, 0x9201, 0x8261, 0x72A1, 0x62A0, 0x5AA0, 0x5A60, 0x5A60, 0x6AC0, 0x8342, // 0x0F00 (3840) +0xC420, 0xCC60, 0xDCA0, 0xE4C0, 0xDCA0, 0xDCA0, 0xD4C0, 0xCCA0, 0xC480, 0xB460, 0xB420, 0xB400, 0xCC20, 0xDC40, 0xE440, 0xE401, // 0x0F10 (3856) +0xC361, 0xAAA1, 0x9200, 0x8A00, 0x8A60, 0xAB41, 0xCC61, 0xDCE2, 0xD481, 0xABA2, 0xBD0F, 0xC5F7, 0x9CB3, 0x94B2, 0xA533, 0x9471, // 0x0F20 (3872) +0x8C2F, 0x31A6, 0x29A5, 0x3A07, 0x2943, 0x3984, 0x2902, 0x3100, 0x8AC5, 0x9282, 0x9AC2, 0xAB22, 0xBB21, 0xBB20, 0xC380, 0xCBE1, // 0x0F30 (3888) +0xCBE1, 0xCBC0, 0xBB81, 0xAB00, 0xAB00, 0xCBC3, 0xDC23, 0xCBC1, 0xB2C0, 0xB280, 0xB2C1, 0xB2C2, 0xA2E3, 0xA323, 0xA383, 0xA3A2, // 0x0F40 (3904) +0xABA2, 0xABA2, 0x9B02, 0x9AE2, 0xAB22, 0xA2E2, 0x9A82, 0x9241, 0x8A81, 0x82E1, 0x7300, 0x62E0, 0x5AA0, 0x5A80, 0x7300, 0x8BC0, // 0x0F50 (3920) +0xA380, 0xB3E0, 0xCC61, 0xD461, 0xC420, 0xC420, 0xCC60, 0xCC80, 0xC480, 0xBC40, 0xB420, 0xB400, 0xCC00, 0xDC41, 0xDC00, 0xD3A1, // 0x0F60 (3936) +0xBB01, 0xAA60, 0x9A21, 0x9221, 0x8A60, 0x9B21, 0xBC21, 0xC481, 0xC421, 0x9B21, 0x940A, 0xB574, 0xAD54, 0x9492, 0xA513, 0x840F, // 0x0F70 (3952) +0x738D, 0x2124, 0x31C6, 0x4228, 0x20E3, 0x3144, 0x18A1, 0x3921, 0x9325, 0xA322, 0xAB62, 0xBBA2, 0xCBC1, 0xCBC1, 0xD421, 0xD461, // 0x0F80 (3968) +0xDCA1, 0xD481, 0xC401, 0xAB40, 0x9AC0, 0xAB21, 0xC3C1, 0xCBE1, 0xCB81, 0xC361, 0xBB22, 0xAAA1, 0x9261, 0x92A2, 0x9303, 0x9B42, // 0x0F90 (3984) +0x9B21, 0xA341, 0x9B21, 0xAB63, 0xBBE4, 0xBBA3, 0xA302, 0x9281, 0x92E1, 0x9B82, 0x93C1, 0x8360, 0x7300, 0x72E0, 0x8360, 0x9C01, // 0x0FA0 (4000) +0x8320, 0x9360, 0xABE1, 0xB3E1, 0xAB80, 0xB3A0, 0xBC20, 0xC440, 0xBC60, 0xB440, 0xAC00, 0xB3E0, 0xC400, 0xD421, 0xD3C1, 0xC320, // 0x0FB0 (4016) +0xAA80, 0xA241, 0x9221, 0x8A20, 0x8A80, 0x9320, 0x9BC0, 0xAC01, 0x9B81, 0x7A80, 0x6AC6, 0xAD52, 0xC5F6, 0xA513, 0xA533, 0xAD74, // 0x0FC0 (4032) +0xBE18, 0x634D, 0x5AEB, 0x2986, 0x10A2, 0x18C2, 0x39C6, 0x6AE8, 0xA384, 0xB3A2, 0xBBE2, 0xC401, 0xD441, 0xD461, 0xDC80, 0xE4C1, // 0x0FD0 (4048) +0xE500, 0xDCE1, 0xC441, 0xAB40, 0x9280, 0x9AC0, 0xBB81, 0xD443, 0xDC64, 0xDC64, 0xD423, 0xB341, 0x9280, 0x8A41, 0x8262, 0x8AA2, // 0x0FE0 (4064) +0x92E1, 0x9B01, 0xAB42, 0xBBE4, 0xD485, 0xCC64, 0xB3A2, 0x9B00, 0x9B40, 0xABE2, 0xB462, 0xAC01, 0x9360, 0x9360, 0x93E0, 0xA461, // 0x0FF0 (4080) +0x7300, 0x7B20, 0x8B40, 0x9340, 0x9320, 0x9B60, 0xB400, 0xBC60, 0xBC60, 0xAC40, 0xA3E0, 0xA3C0, 0xBBC0, 0xCBE1, 0xC381, 0xB2C0, // 0x1000 (4096) +0x9A40, 0x9241, 0x8A21, 0x8220, 0x8260, 0x82E0, 0x8361, 0x83A1, 0x8301, 0x6A81, 0x5223, 0x9CAF, 0xC5F6, 0xB5B6, 0xA534, 0xAD95, // 0x1010 (4112) +0xA554, 0x5B0C, 0x2104, 0x2945, 0x31A6, 0x2965, 0x738D, 0x7348, 0xA3C4, 0xC402, 0xC422, 0xCC41, 0xD480, 0xD480, 0xD460, 0xE4C0, // 0x1020 (4128) +0xE500, 0xDCE0, 0xCC40, 0xAB20, 0x9A80, 0xA2A0, 0xBB81, 0xD443, 0xE4A3, 0xECE4, 0xE503, 0xCC62, 0xAB41, 0x8A60, 0x7A20, 0x8261, // 0x1030 (4144) +0x8AC0, 0x9B00, 0xB362, 0xCC23, 0xDCC4, 0xD4C3, 0xBC42, 0xA3A0, 0xA3A0, 0xB400, 0xC461, 0xCC61, 0xBC00, 0xABC0, 0xA420, 0xAC80, // 0x1040 (4160) +0x6300, 0x6B00, 0x7B00, 0x82E0, 0x82E0, 0x9360, 0xAC21, 0xB461, 0xAC40, 0xA420, 0x93C0, 0x9360, 0xA360, 0xB381, 0xAB21, 0x9A80, // 0x1050 (4176) +0x8A40, 0x8241, 0x8241, 0x7A20, 0x7A60, 0x7AC0, 0x7321, 0x7341, 0x6AE2, 0x6283, 0x4A02, 0x8C0D, 0xCE17, 0xAD55, 0xAD75, 0xAD75, // 0x1060 (4192) +0x3A07, 0x18E3, 0x4228, 0x630B, 0x39E7, 0x4228, 0x8C4F, 0x6AA5, 0xABE4, 0xC423, 0xCC43, 0xD463, 0xD4A2, 0xD480, 0xD440, 0xDC81, // 0x1070 (4208) +0xECE0, 0xE4C1, 0xCBE0, 0xAAC0, 0x9A40, 0xA281, 0xBB41, 0xCC02, 0xD462, 0xE4C2, 0xE522, 0xE4E1, 0xC441, 0xA360, 0x92C0, 0x8AA0, // 0x1080 (4224) +0x8AC0, 0x9B01, 0xB382, 0xCC23, 0xD4A3, 0xD4C2, 0xBCA1, 0xAC20, 0xA3E0, 0xABE0, 0xC440, 0xD481, 0xCC80, 0xC440, 0xB460, 0xB460, // 0x1090 (4240) +0x6B00, 0x6B00, 0x8320, 0x8320, 0x8300, 0x9360, 0xA401, 0xAC21, 0x9C00, 0x93C0, 0x8360, 0x7B00, 0x8B00, 0x9B20, 0x9B00, 0x8A80, // 0x10A0 (4256) +0x8280, 0x8281, 0x8260, 0x8240, 0x8A40, 0x8AC0, 0x7B20, 0x6B00, 0x62A2, 0x5A62, 0x5A64, 0x8BEC, 0xC5F6, 0xBDB7, 0x9CB2, 0x5ACB, // 0x10B0 (4272) +0x52CA, 0x6B6D, 0x7BCD, 0x630B, 0x2124, 0x6B6C, 0x736A, 0x6A84, 0xABC5, 0xBBE3, 0xCC44, 0xDCA4, 0xDCC3, 0xD481, 0xD421, 0xD421, // 0x10C0 (4288) +0xDC82, 0xDC62, 0xBB80, 0xA280, 0x9200, 0xA281, 0xB322, 0xC3A2, 0xC401, 0xD481, 0xDD01, 0xE521, 0xD4C2, 0xC441, 0xB3A0, 0xA320, // 0x10D0 (4304) +0x92E0, 0x9B20, 0xB3A2, 0xC402, 0xCC62, 0xCCA2, 0xBCA1, 0xAC60, 0xA420, 0xA400, 0xB420, 0xC460, 0xCC81, 0xCCA1, 0xC481, 0xB420, // 0x10E0 (4320) +0x72E0, 0x7AE0, 0x8B20, 0x9320, 0x9320, 0x9B40, 0xA3A1, 0x9BA1, 0x8B60, 0x8360, 0x7320, 0x72C0, 0x7AA0, 0x9300, 0x9B00, 0x8AC0, // 0x10F0 (4336) +0x82C0, 0x82A0, 0x8A60, 0x9240, 0xA240, 0xA2C0, 0x8B20, 0x72E0, 0x6260, 0x6AC4, 0x5A83, 0x942C, 0xCE37, 0xC5F7, 0x7BCE, 0x73AD, // 0x1100 (4352) +0xB575, 0x9471, 0x842F, 0x5AEA, 0x4A48, 0x736C, 0x5243, 0x7B04, 0x9B64, 0xA363, 0xC3E4, 0xE4A5, 0xE4C3, 0xD481, 0xCC21, 0xC3E1, // 0x1110 (4368) +0xC402, 0xBBC2, 0xA320, 0x8A60, 0x8220, 0x8A41, 0x9AC1, 0xA321, 0xAB41, 0xBC01, 0xD4A2, 0xDD02, 0xD4C2, 0xCC61, 0xC420, 0xB3C0, // 0x1120 (4384) +0xA360, 0x9B41, 0xAB82, 0xB3A1, 0xBBE0, 0xC461, 0xBCA0, 0xAC60, 0xA440, 0x9C00, 0x9BC0, 0xA3E0, 0xB420, 0xC481, 0xC461, 0xB3E0, // 0x1130 (4400) +0x7A81, 0x82A0, 0x92E0, 0x9B00, 0x9300, 0x9B21, 0x9B61, 0x9341, 0x8300, 0x7B01, 0x72E1, 0x6AA0, 0x7AA0, 0x92E0, 0x9B20, 0x9B20, // 0x1140 (4416) +0x8AE0, 0x8AA0, 0x9A60, 0xA240, 0xB220, 0xBAA0, 0x9B20, 0x7AC0, 0x6A80, 0x6AA2, 0x6283, 0xA4CE, 0xC5F6, 0xC638, 0xA533, 0xAD74, // 0x1150 (4432) +0xBDB6, 0xA4F3, 0x8C70, 0x5289, 0x39C6, 0x5246, 0x6283, 0x8303, 0x82C2, 0x92C2, 0xBBA3, 0xDC84, 0xE4C2, 0xDCA1, 0xCC41, 0xB3C0, // 0x1160 (4448) +0x9B60, 0x9300, 0x82A0, 0x7A40, 0x7A40, 0x8241, 0x8A81, 0x92A1, 0x92C0, 0xA341, 0xBC22, 0xCC82, 0xC420, 0xBBE0, 0xC420, 0xC441, // 0x1170 (4464) +0xABC1, 0xA361, 0xA341, 0xA320, 0xAB60, 0xBC21, 0xBC80, 0xAC60, 0x9C40, 0x93E0, 0x8B80, 0x8B60, 0xA3C0, 0xB420, 0xBC00, 0xABC0, // 0x1180 (4480) +0x8A40, 0x8220, 0x8A60, 0x92C1, 0x92E1, 0x92E2, 0x8303, 0x8303, 0x7AC3, 0x72C2, 0x6AA1, 0x6A80, 0x7AA0, 0x9300, 0xA341, 0xA321, // 0x1190 (4496) +0x92E1, 0x9AA1, 0xA220, 0xB1E0, 0xB220, 0xBA81, 0xAAC1, 0x8AA0, 0x7260, 0x6A82, 0x62A5, 0xAD51, 0xBDD5, 0xBDF6, 0xB5D6, 0xA514, // 0x11A0 (4512) +0xBDF7, 0xCE59, 0x8C50, 0x5A88, 0x6A47, 0x7A45, 0x8243, 0x8A62, 0x8241, 0x8A61, 0xAB04, 0xCBE5, 0xD463, 0xCC62, 0xC402, 0xAB81, // 0x11B0 (4528) +0x8B21, 0x72E1, 0x62C0, 0x62A0, 0x6AA1, 0x72C2, 0x7AA1, 0x82A0, 0x8280, 0x92A0, 0xAB22, 0xB363, 0xA321, 0x9B00, 0xAB80, 0xC422, // 0x11C0 (4544) +0xBBC1, 0xAB61, 0x9300, 0x8AE0, 0x9B40, 0xB420, 0xBC81, 0xAC40, 0xA420, 0x9BE0, 0x9360, 0x9320, 0xA3A0, 0xB420, 0xB421, 0xA3A0, // 0x11D0 (4560) +0x8221, 0x8200, 0x8240, 0x8A81, 0x92A1, 0x8AA1, 0x82A2, 0x7AC3, 0x72A3, 0x72A3, 0x6AA2, 0x7281, 0x7AA0, 0x92E1, 0xA301, 0xA2E1, // 0x11E0 (4576) +0x9AC1, 0xA281, 0xAA01, 0xB1C0, 0xB1C0, 0xB221, 0xA261, 0x9260, 0x7241, 0x6A42, 0x62A6, 0x9C8F, 0xAD53, 0xBDD6, 0xB575, 0xA513, // 0x11F0 (4592) +0xC638, 0xBDD6, 0xA513, 0x62A9, 0x7287, 0x7A25, 0x8243, 0x8222, 0x8201, 0x8221, 0x9A83, 0xB343, 0xB3A2, 0xBBC2, 0xB3C3, 0xA383, // 0x1200 (4608) +0x8362, 0x6B21, 0x62E0, 0x5AC0, 0x6AC1, 0x72C2, 0x7AC1, 0x82C1, 0x8280, 0x8A60, 0x9280, 0x9280, 0x8260, 0x7A40, 0x92E0, 0xAB81, // 0x1210 (4624) +0xB3A2, 0xAB41, 0x92C0, 0x8AA0, 0x9B40, 0xBC21, 0xBC61, 0xB400, 0xA3E0, 0xA3C0, 0x9B80, 0xABA0, 0xB420, 0xC441, 0xB421, 0xA3A0, // 0x1220 (4640) +0x8A01, 0x8200, 0x8220, 0x8A61, 0x8A61, 0x8A62, 0x7A82, 0x7283, 0x7A83, 0x7283, 0x72A3, 0x7AA2, 0x8281, 0x92A1, 0x9AC1, 0x9AC1, // 0x1230 (4656) +0x9AA2, 0xA282, 0xB202, 0xB181, 0xB160, 0xA9A1, 0xA201, 0x9222, 0x7A23, 0x6A23, 0x7B08, 0x8BCD, 0x83CE, 0xBDB6, 0xBDB6, 0xA4F3, // 0x1240 (4672) +0xBDF6, 0xB5B6, 0xC637, 0x940E, 0x7AA7, 0x7A23, 0x8222, 0x8A22, 0x81E2, 0x81C2, 0x9222, 0x9A83, 0x9AC2, 0x9AE2, 0x9B23, 0x9364, // 0x1250 (4688) +0x8363, 0x6B22, 0x5B00, 0x5AE0, 0x6AE1, 0x72E1, 0x82E1, 0x8AE2, 0x92E1, 0x92A1, 0x8A60, 0x8220, 0x7200, 0x69E0, 0x7A40, 0x92E1, // 0x1260 (4704) +0xAB62, 0xA321, 0x8A80, 0x8260, 0xA320, 0xBC01, 0xC441, 0xB3E0, 0xB3E0, 0xB3E1, 0xABC1, 0xBBE1, 0xCC62, 0xC441, 0xB400, 0xB3E0, // 0x1270 (4720) +0x8A01, 0x81E1, 0x8221, 0x8A61, 0x8A62, 0x8262, 0x7A63, 0x7263, 0x7264, 0x7A63, 0x7A83, 0x8283, 0x8A82, 0x92A2, 0x9AA2, 0xA2A2, // 0x1280 (4736) +0x9AA2, 0xAA62, 0xB202, 0xB161, 0xA920, 0xA941, 0xA1C2, 0x9203, 0x7A23, 0x61E3, 0x6A87, 0xB4F2, 0x9470, 0x9CD2, 0xBDB6, 0x9CB2, // 0x1290 (4752) +0xBDD6, 0xBDD6, 0xC618, 0xACB1, 0x7A85, 0x8222, 0x8A22, 0x8A02, 0x81C2, 0x89C2, 0x9222, 0x9242, 0x8A62, 0x8A83, 0x8AC3, 0x8B24, // 0x12A0 (4768) +0x7343, 0x6321, 0x5B21, 0x5B00, 0x6AE1, 0x7AE1, 0x82E1, 0x92E1, 0xA322, 0x9B02, 0x8A81, 0x7A41, 0x7221, 0x6201, 0x6A00, 0x8281, // 0x12B0 (4784) +0x9B21, 0x9B01, 0x8A80, 0x8260, 0xA320, 0xBBE2, 0xC401, 0xBBE0, 0xBC01, 0xBC01, 0xB3C1, 0xBBE1, 0xCC42, 0xC421, 0xB3E1, 0xB401, // 0x12C0 (4800) +}; diff --git a/libraries/UTFT_Buttons/examples/UTFT_Buttons_Bitmap_Demo/cat.c b/libraries/UTFT_Buttons/examples/UTFT_Buttons_Bitmap_Demo/cat.c new file mode 100644 index 0000000..bfc86c0 --- /dev/null +++ b/libraries/UTFT_Buttons/examples/UTFT_Buttons_Bitmap_Demo/cat.c @@ -0,0 +1,314 @@ +// Generated by : ImageConverter 565 v1.2 +// Dimensions : 80x60 pixels +// Size : 9 600 Bytes + +#if defined(__AVR__) + #include +#elif defined(__PIC32MX__) + #define PROGMEM +#elif defined(__arm__) + #define PROGMEM +#endif + +const unsigned short cat[0x12C0] PROGMEM ={ +0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0820, 0x0800, 0x0000, 0x0820, 0x1062, 0x0820, // 0x0010 (16) +0x0800, 0x28E3, 0x3144, 0x2903, 0x20A1, 0x1040, 0x0820, 0x0820, 0x1041, 0x20C3, 0x20E3, 0x1862, 0x1882, 0x1882, 0x18C2, 0x0840, // 0x0020 (32) +0x1000, 0x3103, 0x3103, 0x41C6, 0x6289, 0x5A68, 0x3144, 0x2081, 0x6289, 0x944F, 0x732A, 0x8BCD, 0x8BCD, 0x940E, 0x9C4F, 0x8BAC, // 0x0030 (48) +0x49E5, 0x4184, 0x6AEA, 0x5A68, 0x3964, 0x2903, 0x0800, 0x0800, 0x0800, 0x1881, 0x1041, 0x1882, 0x20A2, 0x20A2, 0x20A2, 0x20C2, // 0x0040 (64) +0x28C1, 0x28C1, 0x28E2, 0x28C2, 0x28C2, 0x28A2, 0x2082, 0x2082, 0x28C2, 0x28C2, 0x2903, 0x2903, 0x28E2, 0x2903, 0x2923, 0x2923, // 0x0050 (80) +0x0820, 0x0821, 0x0820, 0x0800, 0x0800, 0x0820, 0x0800, 0x0800, 0x0800, 0x0820, 0x0820, 0x0800, 0x0820, 0x0820, 0x94B2, 0xB575, // 0x0060 (96) +0x734D, 0x4186, 0x41C6, 0x5248, 0x6AEA, 0x5247, 0x3984, 0x3964, 0x3103, 0x20C2, 0x3124, 0x3144, 0x20C2, 0x1881, 0x3144, 0x39A5, // 0x0070 (112) +0x3944, 0x49C6, 0x5227, 0x83AD, 0x9C70, 0x7B6C, 0x732B, 0x6289, 0xACF2, 0xBD53, 0x9C4F, 0x6AC9, 0x732A, 0x5A67, 0xA490, 0xA4B0, // 0x0080 (128) +0x5A47, 0x2080, 0x3964, 0x5227, 0x6ACA, 0x734C, 0x3144, 0x1000, 0x1020, 0x1881, 0x1020, 0x1861, 0x1840, 0x3103, 0x28E2, 0x2081, // 0x0090 (144) +0x28C2, 0x1880, 0x2081, 0x28C2, 0x28E2, 0x20A1, 0x1881, 0x20A2, 0x20A2, 0x20C2, 0x28E2, 0x28E2, 0x20E2, 0x2903, 0x2923, 0x2903, // 0x00A0 (160) +0x0821, 0x0821, 0x0800, 0x0000, 0x0800, 0x0820, 0x0800, 0x0000, 0x0820, 0x0821, 0x0800, 0x0000, 0x0000, 0x0000, 0x4A28, 0xBDB6, // 0x00B0 (176) +0xE6FB, 0xD638, 0xACF3, 0x7B4C, 0x4A07, 0x6288, 0x7B4B, 0x7B4B, 0x7B6C, 0x6AA9, 0x4185, 0x4185, 0x49E6, 0x49C6, 0x5A68, 0x734B, // 0x00C0 (192) +0x6AEA, 0x6AC9, 0x734B, 0x9C70, 0x8C0F, 0x7B6C, 0x7B6C, 0x9C90, 0xD617, 0xAD12, 0x6289, 0x6ACA, 0x732B, 0x3984, 0x9C50, 0xCDD6, // 0x00D0 (208) +0x5A68, 0x2902, 0x5227, 0x732B, 0x944F, 0xA491, 0x7B4C, 0x28E3, 0x4185, 0x4185, 0x28C2, 0x1840, 0x1020, 0x28C2, 0x2081, 0x2081, // 0x00E0 (224) +0x1881, 0x20A2, 0x1881, 0x1861, 0x20A2, 0x20A1, 0x2081, 0x20A2, 0x28E2, 0x2903, 0x28E2, 0x28E2, 0x28E3, 0x28E2, 0x2903, 0x2903, // 0x00F0 (240) +0x0820, 0x0820, 0x0000, 0x0000, 0x0000, 0x0820, 0x0800, 0x0000, 0x0000, 0x0820, 0x0000, 0x0820, 0x0000, 0x0820, 0x0841, 0x18A3, // 0x0100 (256) +0x630C, 0xBDD7, 0xDE99, 0xE6DB, 0xBDB5, 0x9C71, 0x7B4C, 0x6AA9, 0x6AEA, 0x6ACA, 0x5A68, 0x41A5, 0x5227, 0x940E, 0x9C90, 0x83CD, // 0x0110 (272) +0x732A, 0x838C, 0x9C70, 0xACD1, 0x8BEE, 0x7B6C, 0x940F, 0xB533, 0xE699, 0xB533, 0x5A68, 0x734C, 0x62A9, 0x49E6, 0xACF2, 0xD657, // 0x0120 (288) +0x83AD, 0x5248, 0x5227, 0x62A9, 0xA4D2, 0xACF2, 0x8BCE, 0x6289, 0x5207, 0x5207, 0x5A68, 0x49C6, 0x28E2, 0x1840, 0x2081, 0x2081, // 0x0130 (304) +0x20A2, 0x20A2, 0x20A2, 0x28E3, 0x28E2, 0x20C2, 0x20C2, 0x20C2, 0x20C2, 0x3123, 0x3123, 0x3103, 0x2903, 0x20A2, 0x20E3, 0x28E3, // 0x0140 (320) +0x0820, 0x0000, 0x0000, 0x0000, 0x0000, 0x0820, 0x0820, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0821, // 0x0150 (336) +0x3186, 0x6B6E, 0x94B3, 0xC5F8, 0xDEBB, 0xEF1C, 0xDE9A, 0xC5B6, 0xA4B2, 0x9C71, 0x9C70, 0xA4B1, 0x942F, 0x9C90, 0x9C90, 0x7B6C, // 0x0160 (352) +0x7B6B, 0x9C6F, 0xACF1, 0xACD1, 0x7B8C, 0x734B, 0x83CD, 0xBD54, 0xCDF6, 0xCDD6, 0x734C, 0x8C0F, 0x49E6, 0x5A89, 0xBD75, 0xD658, // 0x0170 (368) +0x83AD, 0x734B, 0x62C9, 0x7B6C, 0xACD1, 0xACD1, 0x93EE, 0x6268, 0x51E6, 0x83AD, 0x9C4F, 0x72EA, 0x5A27, 0x49A5, 0x5207, 0x41A6, // 0x0180 (384) +0x3945, 0x20C3, 0x2082, 0x20A2, 0x2081, 0x28E2, 0x3144, 0x28E2, 0x3985, 0x3144, 0x28E3, 0x20C3, 0x20E3, 0x1040, 0x1040, 0x20C2, // 0x0190 (400) +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0820, 0x0000, 0x0000, 0x0000, 0x0820, 0x0800, 0x0000, // 0x01A0 (416) +0x18C3, 0x736E, 0x8C72, 0xAD36, 0xC619, 0xD67B, 0xD69B, 0xE6FC, 0xEF3D, 0xEEFC, 0xE71B, 0xE6B9, 0xCE37, 0xBD74, 0x940E, 0x838C, // 0x01B0 (432) +0x940E, 0xA4B0, 0xA4B0, 0x942E, 0x6288, 0x5A47, 0xA4B1, 0x7B6C, 0x942F, 0xCDD6, 0x8BEE, 0x9C70, 0x6AEA, 0x9C70, 0x942F, 0xA491, // 0x01C0 (448) +0xA4B1, 0x62A9, 0x6AC9, 0x83AD, 0xACB1, 0xACB1, 0x93EE, 0x62A8, 0x72C9, 0x8BAD, 0xA470, 0xA470, 0x942F, 0x7B6C, 0x730B, 0x5207, // 0x01D0 (464) +0x3124, 0x20A2, 0x1040, 0x1881, 0x3964, 0x5247, 0x62C9, 0x62A9, 0x49E7, 0x5A69, 0x8C10, 0xAD14, 0xC5D7, 0xACF4, 0x5A89, 0x20E3, // 0x01E0 (480) +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0800, 0x0841, // 0x01F0 (496) +0x0820, 0x6B2D, 0xA4F5, 0xB597, 0xC63A, 0xD67C, 0xD69C, 0xCE7B, 0xCE39, 0xCE79, 0xD699, 0xD678, 0xBD95, 0xA4B1, 0x8BCD, 0x7B2A, // 0x0200 (512) +0x9C6F, 0xACF1, 0x9C4F, 0x6AC9, 0x41A5, 0x7B6C, 0xA491, 0x5227, 0x7B4B, 0xC5B5, 0xACD2, 0x83AD, 0x9C4F, 0xC5B5, 0x5A68, 0x5A47, // 0x0210 (528) +0xACD2, 0x836C, 0x51E6, 0x6AA9, 0xA46F, 0xACB0, 0x9C4E, 0x7B2A, 0x836B, 0x93EE, 0xA490, 0xBD53, 0xCDD5, 0xACB1, 0x732B, 0x49E6, // 0x0220 (544) +0x28E2, 0x1020, 0x0800, 0x2902, 0x5247, 0x5A88, 0x62A9, 0x734D, 0xA4D3, 0xDE7A, 0xDEBB, 0xDEBB, 0xCE18, 0xAD14, 0x9CD2, 0x4207, // 0x0230 (560) +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0820, 0x0000, 0x0800, 0x0000, 0x0800, // 0x0240 (576) +0x0800, 0x41C7, 0xAD35, 0xB577, 0xC61A, 0xBDD9, 0xBE1A, 0xC63A, 0xC619, 0xBDF8, 0xD699, 0xD658, 0xB533, 0xA470, 0x9C0E, 0x8BAD, // 0x0250 (592) +0x8BAD, 0xA490, 0x9C70, 0x730A, 0x6AE9, 0xACF2, 0xACF2, 0x8BEE, 0x838C, 0xCDF6, 0x9C70, 0x9C4F, 0xC574, 0xB4F2, 0x72EA, 0x7B4C, // 0x0260 (608) +0xB533, 0xACF2, 0x5206, 0x7B4B, 0x9C4F, 0xB4D1, 0x9C4F, 0x940E, 0x93CD, 0x9C0E, 0xACB0, 0xB513, 0xCDF6, 0xD617, 0xC5D5, 0xBD95, // 0x0270 (624) +0x8BEE, 0x6289, 0x6288, 0x7B8C, 0x8C0E, 0xA4B1, 0xC5B5, 0xDE9A, 0xD65A, 0xC5B8, 0xB556, 0x9CB4, 0x7BAF, 0x630C, 0x6B4C, 0x3185, // 0x0280 (640) +0x0000, 0x0800, 0x0820, 0x0820, 0x0800, 0x0800, 0x0800, 0x0820, 0x0800, 0x0800, 0x0820, 0x0820, 0x0800, 0x0000, 0x0800, 0x0820, // 0x0290 (656) +0x1060, 0x1041, 0x8BF1, 0xCE1A, 0xB598, 0xC61A, 0xCE5B, 0xCE3A, 0xD67B, 0xCE39, 0xDE79, 0xC5B5, 0xA4B0, 0x942E, 0x7B6B, 0x838C, // 0x02A0 (672) +0x836C, 0x940E, 0xB513, 0x9450, 0x9430, 0xCDF7, 0xD658, 0xA4B1, 0x8BAD, 0xACB1, 0x9C2E, 0xAC90, 0xBD73, 0x7B4C, 0x944F, 0xC5D6, // 0x02B0 (688) +0xCDD6, 0xBD13, 0x8BAD, 0x93EE, 0xA490, 0xACB1, 0xB4D1, 0xA42E, 0x9BED, 0xA40D, 0x9BED, 0xAC6F, 0xCD94, 0xDE99, 0xDEBA, 0xE6DB, // 0x02C0 (704) +0xE6DB, 0xE6DB, 0xDE9A, 0xCE39, 0xDE7A, 0xE6BC, 0xCE3A, 0xC5F9, 0xBDB8, 0xA515, 0x9452, 0x734E, 0x62EC, 0x9CB3, 0x734D, 0x20C3, // 0x02D0 (720) +0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0820, 0x0820, 0x0800, 0x0800, 0x0820, 0x0820, 0x0800, 0x0800, 0x0820, 0x1020, // 0x02E0 (736) +0x1861, 0x1041, 0x522A, 0xD67C, 0xC61A, 0xCE5B, 0xD67B, 0xDEDD, 0xDEBC, 0xD67A, 0xC5D7, 0xBD74, 0xA4B0, 0x83AC, 0x6AC9, 0x5A27, // 0x02F0 (752) +0x6288, 0xA490, 0xAD12, 0x940F, 0x9C70, 0xCDD7, 0xE6DA, 0xB4F2, 0x93EE, 0x8BAD, 0x836C, 0x942E, 0xACD1, 0x7B6C, 0xC5B5, 0xE6DA, // 0x0300 (768) +0xDE37, 0xACD2, 0x8BCD, 0x9C90, 0xA4D2, 0x838D, 0x838C, 0x940E, 0x9BED, 0x93CC, 0x93AC, 0x9C2E, 0xBD53, 0xDE78, 0xDE99, 0xC5F8, // 0x0310 (784) +0xC5D7, 0xBDB7, 0xC5D7, 0xD65A, 0xCE3A, 0xCE19, 0xCE5A, 0xCE1A, 0xB577, 0x9CD4, 0x9CB4, 0x9CB3, 0xBD97, 0xAD35, 0x3986, 0x28E4, // 0x0320 (800) +0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x1040, // 0x0330 (816) +0x1061, 0x1061, 0x3186, 0xCE1A, 0xDEDC, 0xCE3A, 0xDEDD, 0xE6FD, 0xD65A, 0xC5B7, 0xB554, 0xB513, 0xACF1, 0x83AC, 0x51E6, 0x3102, // 0x0340 (832) +0x5A47, 0xB533, 0xACD2, 0x4A07, 0x8C0F, 0xD638, 0xE6DA, 0xC5B5, 0x8BEE, 0x838C, 0x9C4F, 0x9C4F, 0x9C70, 0x9C90, 0xE6D9, 0xEEFA, // 0x0350 (848) +0xCDF6, 0x838C, 0x732B, 0xACF2, 0xACF2, 0x6AEA, 0x49E6, 0x7B0A, 0x8BAC, 0x9C0E, 0xA42F, 0xA44F, 0xACF2, 0xCDD6, 0xC5F7, 0xB555, // 0x0360 (864) +0xB576, 0xC5F8, 0xCE39, 0xD67B, 0xD67B, 0xD69B, 0xD69C, 0xCE5B, 0xC5FA, 0xB598, 0xBDB8, 0xCE19, 0xD67A, 0x6B0C, 0x18A2, 0x28E3, // 0x0370 (880) +0x1020, 0x0820, 0x0820, 0x0820, 0x0820, 0x1020, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x1020, // 0x0380 (896) +0x1040, 0x1061, 0x2904, 0xB576, 0xDEDC, 0xC61A, 0xDEBC, 0xE6FD, 0xCE18, 0xB534, 0xBD74, 0xB512, 0xA4B1, 0x836C, 0x5A48, 0x5A48, // 0x0390 (912) +0x4164, 0xACD2, 0xBD54, 0x3985, 0x83CE, 0xE6DA, 0xFF9D, 0xD657, 0xBD53, 0xACD1, 0xB532, 0xBD53, 0xBD73, 0xD637, 0xEF3B, 0xEEFA, // 0x03A0 (928) +0xAD12, 0x41C5, 0x62C9, 0xC595, 0xC5B5, 0x6AC9, 0x3122, 0x51E5, 0x72C9, 0x9BED, 0xAC90, 0xA490, 0xB512, 0xCDB5, 0xC5B6, 0xBD96, // 0x03B0 (944) +0xC5D7, 0xCE5A, 0xD69B, 0xCE3A, 0xC63A, 0xC61A, 0xC5FA, 0xCE7B, 0xCE3A, 0xCE3A, 0xD67B, 0xEF1D, 0xB596, 0x3145, 0x3124, 0x20E3, // 0x03C0 (960) +0x0820, 0x0800, 0x0800, 0x0820, 0x1020, 0x1020, 0x1020, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, // 0x03D0 (976) +0x1061, 0x0840, 0x20E3, 0xA4F4, 0xEF5E, 0xBDB8, 0xBD97, 0xDE9B, 0xDE79, 0xB513, 0xACF2, 0xACF2, 0xA491, 0x8BCE, 0x93EE, 0xA491, // 0x03E0 (992) +0x940F, 0x8BCE, 0xC5D6, 0x7B6C, 0x9450, 0xEF3C, 0xFF9D, 0xE6B9, 0xDE57, 0xD616, 0xC594, 0xD616, 0xDE78, 0xE6FA, 0xFFBD, 0xEF1A, // 0x03F0 (1008) +0x942F, 0x3984, 0x838C, 0xCDF6, 0x7B4B, 0x4163, 0x4163, 0x4984, 0x5205, 0x8BAC, 0xBCF1, 0xBCF1, 0xBCF2, 0xC533, 0xC574, 0xCDD6, // 0x0400 (1024) +0xD679, 0xD69A, 0xDEBB, 0xD69B, 0xD67B, 0xCE5B, 0xC5F9, 0xBDD9, 0xCE5B, 0xDE9C, 0xDEDC, 0xDEDC, 0x62CB, 0x18A2, 0x28E3, 0x20E2, // 0x0410 (1040) +0x0820, 0x0820, 0x0820, 0x1021, 0x1041, 0x1041, 0x1041, 0x1041, 0x1021, 0x1021, 0x1021, 0x1041, 0x1041, 0x1021, 0x1021, 0x1021, // 0x0420 (1056) +0x1040, 0x1061, 0x1061, 0x4A28, 0xE6DC, 0xE6BC, 0xD67A, 0xD619, 0xC5D6, 0xBD53, 0xB533, 0xACD1, 0xA491, 0xBD54, 0xB554, 0xB513, // 0x0430 (1072) +0xC5B5, 0xBD95, 0xDE99, 0xBD75, 0xC5D6, 0xFF9D, 0xF79D, 0xDEB9, 0xD637, 0xDE98, 0xDE77, 0xDE77, 0xDE98, 0xEF1B, 0xFFDE, 0xE71B, // 0x0440 (1088) +0x9450, 0x6AEA, 0xD616, 0x9C70, 0x6AC9, 0x838C, 0x9C4F, 0x8BAC, 0x834B, 0x9C0D, 0xBD11, 0xBD32, 0xC532, 0xC533, 0xBD12, 0xB4F2, // 0x0450 (1104) +0xB554, 0xDE9A, 0xEF3D, 0xF75E, 0xEF3E, 0xE6DD, 0xD65B, 0xC5D9, 0xC5F9, 0xDE9B, 0xEF3E, 0xCE39, 0x39A6, 0x2904, 0x28E3, 0x2903, // 0x0460 (1120) +0x1040, 0x1040, 0x1040, 0x1041, 0x1041, 0x1041, 0x1041, 0x1041, 0x1041, 0x1041, 0x1041, 0x1041, 0x1041, 0x1041, 0x1041, 0x1041, // 0x0470 (1136) +0x1040, 0x1881, 0x1061, 0x2924, 0xBD96, 0xE6BC, 0xD639, 0xC5B6, 0xBD54, 0xBD53, 0xC594, 0xB512, 0xB4F3, 0xCDF7, 0xDE99, 0xE6B9, // 0x0480 (1152) +0xD658, 0xD658, 0xF77D, 0xFFBE, 0xEF3C, 0xFFBE, 0xF79D, 0xDEB9, 0xDE78, 0xE6B9, 0xE6D9, 0xD657, 0xDE98, 0xF75C, 0xFFDE, 0xF77D, // 0x0490 (1168) +0xBDD6, 0xCE37, 0xE6DA, 0xCDF6, 0xD617, 0xC594, 0xBD53, 0xB512, 0xACD1, 0xACD1, 0xBD33, 0xBD33, 0xC573, 0xC553, 0xBCF1, 0xACB1, // 0x04A0 (1184) +0xBD54, 0xD637, 0xDEBA, 0xEEFB, 0xE6DB, 0xC5D8, 0xB556, 0xB557, 0xCE1A, 0xDE9B, 0xDEBB, 0x8C10, 0x3145, 0x3144, 0x2903, 0x20C2, // 0x04B0 (1200) +0x1041, 0x1041, 0x1041, 0x1040, 0x1040, 0x1040, 0x1040, 0x1040, 0x1040, 0x1041, 0x1041, 0x1041, 0x1040, 0x1040, 0x1041, 0x1041, // 0x04C0 (1216) +0x1061, 0x1040, 0x18A2, 0x20C2, 0x9451, 0xE6DC, 0xC5D8, 0xA492, 0xB513, 0xCDD5, 0xBD73, 0xA490, 0xBD75, 0xCDF7, 0xD637, 0x9450, // 0x04D0 (1232) +0x41C6, 0x5269, 0x736D, 0xBDD6, 0xFFDE, 0xFFFF, 0xF79D, 0xCE58, 0xD678, 0xEEFA, 0xE6B9, 0xD637, 0xDE99, 0xF77C, 0xFFFF, 0xFFBE, // 0x04E0 (1248) +0xFFDF, 0xE6FB, 0xBDB6, 0xBD75, 0xBD95, 0xE6B9, 0xDE78, 0xD637, 0xC5D5, 0xBD54, 0xB512, 0xACD2, 0xC594, 0xCD94, 0xB511, 0xB4F1, // 0x04F0 (1264) +0xBD33, 0xB513, 0xD637, 0xE6BA, 0xCDF7, 0xB535, 0xB576, 0xD639, 0xD67A, 0xEF1D, 0xCE39, 0x41E8, 0x2904, 0x3144, 0x2102, 0x2943, // 0x0500 (1280) +0x0820, 0x1041, 0x1041, 0x1040, 0x1040, 0x1041, 0x1040, 0x0820, 0x1040, 0x1041, 0x1041, 0x1040, 0x1040, 0x1040, 0x1041, 0x1041, // 0x0510 (1296) +0x1061, 0x1881, 0x20C2, 0x20E2, 0x6B0B, 0xC5B5, 0x9C4F, 0x9C4F, 0xACB0, 0xB4D1, 0xC553, 0xC595, 0xBD54, 0xBD54, 0xACF2, 0x4A28, // 0x0520 (1312) +0x3A08, 0x2165, 0x2966, 0x39E8, 0x94B2, 0xFFFF, 0xFFBD, 0xDEB9, 0xDEB9, 0xE6F9, 0xE6FA, 0xD657, 0xE6FA, 0xFFDE, 0xFFDE, 0xFFFF, // 0x0530 (1328) +0x9CD3, 0x4A69, 0x41E7, 0x41E7, 0x4207, 0x5A8A, 0xBD95, 0xE6DA, 0xDE57, 0xCDD5, 0xBD52, 0xB511, 0xCDB4, 0xCDB4, 0xC594, 0xC594, // 0x0540 (1344) +0xC532, 0xA44F, 0xB4F2, 0xD638, 0xC5D7, 0xC5F8, 0xD69B, 0xDEFC, 0xE6FC, 0xEF5D, 0x7B8E, 0x20E3, 0x18A2, 0x2903, 0x2944, 0x2944, // 0x0550 (1360) +0x1040, 0x1041, 0x1061, 0x1041, 0x1041, 0x1061, 0x1061, 0x1041, 0x1041, 0x1041, 0x1041, 0x1061, 0x1041, 0x1040, 0x1041, 0x1061, // 0x0560 (1376) +0x1882, 0x20C2, 0x20E3, 0x2902, 0x39A5, 0x838C, 0x83AC, 0x940E, 0x93ED, 0x93CD, 0x8BAC, 0x8BAD, 0x9C50, 0xCE37, 0xB574, 0x632C, // 0x0570 (1392) +0x29C7, 0x0062, 0x08C3, 0x4A8B, 0x634D, 0xE71C, 0xFFFF, 0xDEDA, 0xDE99, 0xE6DA, 0xE6D9, 0xDEB9, 0xEF5C, 0xFFDE, 0xFFFF, 0xCE59, // 0x0580 (1408) +0x632D, 0x4A6A, 0x10C3, 0x18E4, 0x632C, 0x5AAA, 0x5269, 0xB574, 0xCDF6, 0xB533, 0xCDD5, 0xCDB5, 0xC573, 0xBD53, 0xC574, 0xB4F1, // 0x0590 (1424) +0xB4D0, 0x9BED, 0x7B4B, 0xA4B1, 0xC5D7, 0xC5D7, 0xCE39, 0xD67B, 0xDEBB, 0xBD97, 0x41C7, 0x1040, 0x1881, 0x20E3, 0x3144, 0x3144, // 0x05A0 (1440) +0x1061, 0x1061, 0x1061, 0x1061, 0x1881, 0x1881, 0x1881, 0x1881, 0x1061, 0x1061, 0x1061, 0x1881, 0x1881, 0x1061, 0x1061, 0x1881, // 0x05B0 (1456) +0x20C2, 0x20C2, 0x20E2, 0x3144, 0x6289, 0x83AC, 0x8BAC, 0x93CD, 0x6267, 0x2060, 0x3943, 0x6AA9, 0xCDF6, 0xFF7D, 0x840F, 0x4A69, // 0x05C0 (1472) +0x08A3, 0x0084, 0x4ACC, 0x73F0, 0x5B0D, 0xAD56, 0xFFFF, 0xEF3C, 0xDEDA, 0xE6FB, 0xE6DA, 0xE6DA, 0xF79D, 0xFFFF, 0xEF5D, 0x8410, // 0x05D0 (1488) +0x6BAF, 0x08A4, 0x29A7, 0x31E9, 0x1925, 0x8C92, 0x5269, 0x9C92, 0xBD74, 0x83AD, 0x8BEE, 0xB512, 0xCDB5, 0xCD94, 0xC574, 0xC553, // 0x05E0 (1504) +0xBD11, 0xB4D1, 0x8B8C, 0x836C, 0xACF3, 0xC5D7, 0xCE18, 0xD659, 0xC5D7, 0xAD34, 0x5249, 0x1881, 0x20A2, 0x3144, 0x3164, 0x41C6, // 0x05F0 (1520) +0x1881, 0x1881, 0x1881, 0x1882, 0x18A2, 0x1882, 0x1882, 0x18A2, 0x1882, 0x1881, 0x1881, 0x18A2, 0x18A2, 0x1882, 0x1881, 0x1881, // 0x0600 (1536) +0x20A2, 0x20E3, 0x2903, 0x3964, 0x6AEA, 0x838C, 0x8BAC, 0x72C9, 0x3922, 0x5A27, 0x72C9, 0x7B4C, 0xE6DA, 0xFF9D, 0x630B, 0x4A69, // 0x0610 (1552) +0x2166, 0x10E5, 0x2167, 0x5B2D, 0x6B8F, 0x7BF0, 0xF7BF, 0xF77D, 0xE71B, 0xE6DA, 0xE6FA, 0xEF3C, 0xFFFF, 0xFF9E, 0x7B8E, 0x4209, // 0x0620 (1568) +0x6B8F, 0x00A4, 0x3A2A, 0x426B, 0x2187, 0x8452, 0x528A, 0xB555, 0xF77D, 0xB533, 0x730A, 0x5A27, 0x6268, 0x7B4B, 0x940F, 0xB4D1, // 0x0630 (1584) +0xC553, 0xB4B0, 0xAC90, 0x8BAD, 0x940F, 0xCDD6, 0xCDF7, 0xB555, 0x9C92, 0x6AEB, 0x3165, 0x3985, 0x39A5, 0x41C6, 0x41E6, 0x3164, // 0x0640 (1600) +0x18A2, 0x18A1, 0x18A1, 0x18A2, 0x18A2, 0x18A1, 0x1881, 0x18A2, 0x18A2, 0x18A2, 0x18A1, 0x18A1, 0x18A2, 0x18A2, 0x1881, 0x1881, // 0x0650 (1616) +0x18A1, 0x20C2, 0x28E2, 0x3964, 0x5206, 0x6AC9, 0x7B4B, 0x4184, 0x4984, 0x72C9, 0x6AA9, 0x72EB, 0xC5B5, 0xFF9D, 0xC5D6, 0x4A69, // 0x0660 (1632) +0x3A08, 0x3A09, 0x5ACC, 0x73AF, 0x526A, 0x3986, 0xAD14, 0xE6DA, 0xDEB9, 0xCDF6, 0xEEFA, 0xEEDA, 0xEEFA, 0xA4B1, 0x4A07, 0x39A7, // 0x0670 (1648) +0x634E, 0x426B, 0x1105, 0x2146, 0x5B4D, 0x6B6E, 0x4A49, 0xDEDB, 0xFFBE, 0xDE58, 0x940F, 0x7B2B, 0x5A27, 0x3102, 0x28E2, 0x49C6, // 0x0680 (1664) +0x72E9, 0x836C, 0x93EE, 0x8BAD, 0x8BCE, 0xC574, 0xACB2, 0x6ACA, 0x4A07, 0x2904, 0x39A6, 0x5249, 0x5268, 0x5A69, 0x41C6, 0x3964, // 0x0690 (1680) +0x20C2, 0x20C2, 0x20C2, 0x20C2, 0x20C2, 0x18A1, 0x18A1, 0x18A1, 0x18A1, 0x18A1, 0x18A1, 0x1881, 0x18A1, 0x18A1, 0x18A1, 0x1881, // 0x06A0 (1696) +0x1881, 0x20C2, 0x2923, 0x3985, 0x49E6, 0x5227, 0x3103, 0x3964, 0x7B2B, 0x4184, 0x49C6, 0x51E6, 0x732B, 0xBD74, 0xF75C, 0xF73B, // 0x06B0 (1712) +0xDE99, 0xE6FB, 0xFF9D, 0xF73C, 0x732C, 0x41A5, 0x83AD, 0xC594, 0xCDB5, 0xC5B4, 0xD616, 0xC594, 0x730A, 0x3923, 0x51E6, 0x83CE, // 0x06C0 (1728) +0xB5B6, 0xA535, 0x8431, 0x73AF, 0x73AE, 0x6B6D, 0xCE38, 0xFFBE, 0xF73B, 0xACB1, 0x6288, 0x7B4B, 0xA491, 0x940F, 0x5207, 0x1860, // 0x06D0 (1744) +0x28A1, 0x4165, 0x6AA9, 0x838D, 0x730B, 0xACD2, 0xCDD6, 0x7B6D, 0x1861, 0x20C2, 0x3185, 0x5269, 0x62EA, 0x62EA, 0x41E6, 0x2902, // 0x06E0 (1760) +0x20E2, 0x20E2, 0x20E2, 0x20E2, 0x20E2, 0x20C2, 0x20C2, 0x20C2, 0x20C2, 0x20C2, 0x20C2, 0x20C2, 0x20A2, 0x20C2, 0x20C2, 0x20C2, // 0x06F0 (1776) +0x2903, 0x2902, 0x2903, 0x3144, 0x5228, 0x4A27, 0x1040, 0x5A89, 0xBD75, 0x838D, 0x5227, 0x836C, 0x7B6C, 0x7B4B, 0x9C4F, 0xC594, // 0x0700 (1792) +0xD657, 0xDE98, 0xD617, 0xB4F2, 0x6268, 0x8B8C, 0x8BAD, 0xB512, 0xB4D1, 0xB4F1, 0xBD32, 0xA44F, 0x6288, 0x3943, 0x51E6, 0xCDB5, // 0x0710 (1808) +0xFFFE, 0xFFFE, 0xFFDE, 0xF77D, 0xEF1B, 0xF73C, 0xEF1A, 0xDE78, 0xA490, 0x5A47, 0x6AC9, 0x836C, 0x62A8, 0x732B, 0x9450, 0x732B, // 0x0720 (1824) +0x3144, 0x3104, 0x4A07, 0x838D, 0x7B4B, 0x8BCE, 0xB533, 0x9C91, 0x41A6, 0x1040, 0x2924, 0x4A48, 0x5AA9, 0x62EA, 0x5247, 0x3164, // 0x0730 (1840) +0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x28E3, 0x2903, 0x20E2, 0x20E2, 0x20E2, 0x20E2, 0x20C2, 0x20E2, 0x2923, // 0x0740 (1856) +0x3123, 0x3143, 0x3964, 0x3164, 0x2923, 0x18A2, 0x1881, 0x5A8A, 0xB554, 0x8BEF, 0x41A5, 0x6268, 0x836C, 0x838C, 0x834A, 0xA46F, // 0x0750 (1872) +0xB512, 0xA490, 0x836C, 0x7B2B, 0xACD1, 0xC594, 0xA42E, 0xB4B0, 0xA44E, 0xACB0, 0xACAF, 0xB4F1, 0x9C2E, 0x72EA, 0x49C5, 0x7B4C, // 0x0760 (1888) +0xBD73, 0xDE57, 0xDE78, 0xD657, 0xD637, 0xBD74, 0xACD1, 0xA470, 0x9C4F, 0x9C4F, 0xA470, 0x7B4B, 0x7B6B, 0x7B6C, 0x9C91, 0xCE38, // 0x0770 (1904) +0x83EF, 0x5228, 0x5228, 0x730B, 0x7B6C, 0x838D, 0x8BEE, 0xA4B1, 0x6B2B, 0x3165, 0x3165, 0x3185, 0x3165, 0x5248, 0x5A89, 0x39A5, // 0x0780 (1920) +0x2903, 0x2923, 0x2923, 0x2923, 0x2903, 0x2923, 0x2923, 0x2923, 0x2923, 0x2923, 0x2923, 0x2923, 0x2903, 0x2903, 0x2903, 0x2903, // 0x0790 (1936) +0x3144, 0x3123, 0x3985, 0x4A08, 0x3165, 0x3144, 0x5A8A, 0xB554, 0x8C0F, 0x49C6, 0x5207, 0x5227, 0x6ACA, 0x732B, 0xAD12, 0xE6B9, // 0x07A0 (1952) +0xBD94, 0x5227, 0x5207, 0xB554, 0xEF1B, 0xACF2, 0x7B4C, 0x838D, 0x8BCE, 0x8BCE, 0x83CD, 0x944F, 0xCE36, 0xE697, 0xACD0, 0x6267, // 0x07B0 (1968) +0x6268, 0xA490, 0xC574, 0xBD53, 0xBD53, 0xB4D1, 0xA470, 0x8BCD, 0x8BAD, 0x836C, 0x6288, 0x732B, 0xBD54, 0xE6B9, 0xE6DA, 0xE6FB, // 0x07C0 (1984) +0xCE17, 0x6AEC, 0x3985, 0x3986, 0x41C6, 0x62A9, 0x7B6C, 0x9450, 0x7B8D, 0x5248, 0x4A07, 0x4A48, 0x4207, 0x3185, 0x3164, 0x2943, // 0x07D0 (2000) +0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x20E2, 0x20E2, // 0x07E0 (2016) +0x3123, 0x41A6, 0x4A28, 0x5269, 0x4A28, 0x5269, 0x9451, 0xB554, 0xB554, 0x838D, 0x6ACA, 0x7B6C, 0x62A9, 0x9450, 0xD658, 0xE6B9, // 0x07F0 (2032) +0xD678, 0xC5D6, 0xBD95, 0xD678, 0xFFDE, 0x9430, 0x4185, 0x6248, 0x72EA, 0x5A48, 0x4A06, 0x5247, 0xD657, 0xFF9C, 0xE678, 0x72EA, // 0x0800 (2048) +0x49A5, 0x6ACA, 0xCDF6, 0xD5F6, 0xC595, 0xB533, 0xACD1, 0xACB1, 0xA470, 0x9C2F, 0x6AEA, 0x6AEA, 0x8BEE, 0x9C50, 0xACF3, 0xDE9A, // 0x0810 (2064) +0xEF1C, 0xB575, 0x5A8A, 0x3985, 0x3985, 0x3124, 0x4A07, 0x734C, 0x734C, 0x5AAA, 0x6B4C, 0x62EB, 0x3185, 0x10A1, 0x20E2, 0x3185, // 0x0820 (2080) +0x2903, 0x2923, 0x2923, 0x2923, 0x2903, 0x2923, 0x2923, 0x2923, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x28E3, 0x28E3, // 0x0830 (2096) +0x2923, 0x3985, 0x4A28, 0x5A89, 0x5269, 0x5AAA, 0xA4B2, 0x9430, 0x734C, 0x9C91, 0x8BEE, 0x734C, 0x9450, 0xBD75, 0xD679, 0xE6FB, // 0x0840 (2112) +0xEF3C, 0xEF5C, 0xFFFE, 0xFFBE, 0xFFFE, 0xD659, 0x3965, 0x5A28, 0x5A49, 0x5228, 0x5227, 0x8C0F, 0xFF7C, 0xFF7D, 0xDE38, 0xEEBA, // 0x0850 (2128) +0xDE78, 0xC5B6, 0xC5B6, 0xEF1B, 0xE6B9, 0xC5B6, 0xACF2, 0x8BEE, 0x7B4C, 0x732B, 0x6AEA, 0x6AEA, 0x62CA, 0x6B0B, 0x9C70, 0xDE79, // 0x0860 (2144) +0xE6DB, 0xE6FC, 0xB575, 0x6AEB, 0x41C6, 0x41A6, 0x5A69, 0x83CE, 0x5AAA, 0x5269, 0x6B2C, 0x4A49, 0x2123, 0x18A2, 0x3164, 0x4A28, // 0x0870 (2160) +0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2923, 0x2903, 0x2903, 0x2923, 0x2923, 0x2903, 0x2903, 0x2923, // 0x0880 (2176) +0x3144, 0x3985, 0x5269, 0x6B2C, 0x736D, 0x7BAE, 0x83CE, 0x5A89, 0x5269, 0x734C, 0x9C71, 0x8BEF, 0x83CE, 0xB554, 0xD638, 0xD679, // 0x0890 (2192) +0xE6DB, 0xE71C, 0xF79D, 0xFFDE, 0xFFDE, 0xFFBE, 0x9C71, 0x49C7, 0x4186, 0x49C7, 0x9451, 0xFF9D, 0xFFFF, 0xFFDE, 0xFFFF, 0xDEBA, // 0x08A0 (2208) +0xDEBA, 0xF75C, 0xE6FB, 0xDEBA, 0xEF3C, 0xE6DB, 0xCDD6, 0xC5D6, 0xB534, 0x734C, 0x6AEB, 0xAD13, 0xC5D6, 0xAD13, 0x9C91, 0x9450, // 0x08B0 (2224) +0xC5F7, 0xDEBB, 0xE6FB, 0xD638, 0xA4D3, 0x732C, 0x7B8D, 0x8BEF, 0x6B2C, 0x5AAA, 0x6B2C, 0x6B2C, 0x5289, 0x2965, 0x2944, 0x41E6, // 0x08C0 (2240) +0x28E3, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2923, 0x2923, // 0x08D0 (2256) +0x3164, 0x3965, 0x41C6, 0x62CA, 0x736D, 0x62EB, 0x41E7, 0x41C7, 0x3145, 0x3986, 0x62CB, 0x9450, 0x9C71, 0xB535, 0xB555, 0xBDB6, // 0x08E0 (2272) +0xE6BB, 0xEF3D, 0xF79E, 0xF77D, 0xEF5D, 0xEEFC, 0xDE79, 0x93F0, 0x4165, 0x8BCF, 0xDEBA, 0xF77D, 0xF7DE, 0xFFFF, 0xF7DE, 0xE73C, // 0x08F0 (2288) +0xE6FB, 0xEF1C, 0xE6DB, 0xE6FB, 0xDEBA, 0xD679, 0xCE18, 0xBD96, 0xC5B6, 0xC5B6, 0xC5B6, 0xDE79, 0xBD74, 0x6B0B, 0x49E7, 0x41A6, // 0x0900 (2304) +0x734C, 0xB575, 0xDE9A, 0xCDF7, 0xACF3, 0x9410, 0x83CF, 0x6B2C, 0x5269, 0x62CB, 0x7BCF, 0x8C30, 0x7BCE, 0x5ACB, 0x5289, 0x4207, // 0x0910 (2320) +0x20E2, 0x20E2, 0x20E2, 0x20E2, 0x2103, 0x2103, 0x2903, 0x2903, 0x2103, 0x2903, 0x2903, 0x2903, 0x2903, 0x2103, 0x2903, 0x2923, // 0x0920 (2336) +0x3144, 0x4A07, 0x5289, 0x5A89, 0x52A9, 0x5269, 0x39A6, 0x20C2, 0x20E3, 0x4A28, 0x734C, 0x8BEF, 0x83CF, 0x9431, 0xB555, 0xB556, // 0x0930 (2352) +0xCDF8, 0xE6DB, 0xEF3C, 0xEF5D, 0xDEDA, 0xD658, 0xDE38, 0xC575, 0x51C7, 0xB4D3, 0xE679, 0xE6DA, 0xEF3C, 0xF7BD, 0xF7DE, 0xE75C, // 0x0940 (2368) +0xE71B, 0xF77D, 0xE6FB, 0xCE17, 0xCE38, 0xCE38, 0xCE18, 0xA4B2, 0xA4D3, 0xBD96, 0xB555, 0xAD14, 0x8C10, 0x5A8A, 0x41A6, 0x2924, // 0x0950 (2384) +0x3965, 0x62AA, 0x838E, 0x8C0F, 0x8C0F, 0x83AE, 0x83CE, 0x734D, 0x6B0C, 0x6B2C, 0x83EF, 0x9492, 0x8C51, 0x83EF, 0x7BCE, 0x62EB, // 0x0960 (2400) +0x2103, 0x2103, 0x20E2, 0x2103, 0x20E2, 0x20E2, 0x20E2, 0x20E2, 0x20E2, 0x20E2, 0x2903, 0x2103, 0x20E2, 0x20E2, 0x20E2, 0x2903, // 0x0970 (2416) +0x3164, 0x41C6, 0x5268, 0x5AA9, 0x5269, 0x5289, 0x5AAA, 0x4A48, 0x5AAA, 0x736D, 0x7BAE, 0xACF3, 0xCDF8, 0xCDF8, 0xC5F8, 0xBD97, // 0x0980 (2432) +0xA493, 0xB535, 0xCE38, 0xDE9A, 0xC5F7, 0xACD3, 0x8B8E, 0x6A29, 0x38A2, 0x59A6, 0x93AF, 0xC554, 0xDE59, 0xEEFB, 0xF75D, 0xEF3C, // 0x0990 (2448) +0xF73C, 0xE6DA, 0xCE18, 0xD659, 0xD659, 0xCE38, 0xCE18, 0xD679, 0xD659, 0xC5D7, 0xB575, 0xC5B7, 0xAD34, 0x8C0F, 0x62EB, 0x5249, // 0x09A0 (2464) +0x4A07, 0x41A5, 0x4A07, 0x49E7, 0x6ACA, 0x9410, 0x7B6D, 0x62CB, 0x62CB, 0x734D, 0x83F0, 0x8C31, 0x8C31, 0x8C51, 0x7BAE, 0x5A89, // 0x09B0 (2480) +0x3164, 0x3164, 0x2944, 0x2944, 0x2923, 0x2103, 0x2103, 0x2103, 0x20E2, 0x2103, 0x2103, 0x2102, 0x20E2, 0x20E2, 0x2103, 0x2923, // 0x09C0 (2496) +0x3164, 0x39A5, 0x4A27, 0x5248, 0x39A5, 0x3185, 0x4A48, 0x83CE, 0x736D, 0x6B0B, 0x9451, 0xAD34, 0xCE18, 0xE6BB, 0xEF5D, 0xDEBB, // 0x09D0 (2512) +0xB535, 0x9451, 0x83EF, 0x83EF, 0x5228, 0x28C2, 0x2841, 0x3041, 0x48E3, 0x4062, 0x3841, 0x4924, 0x7269, 0x9BEF, 0xC534, 0xC596, // 0x09E0 (2528) +0xAD13, 0x8C0F, 0x6B0B, 0x5269, 0xA4F3, 0xDE9A, 0xE6FB, 0xF77D, 0xFF9E, 0xF75D, 0xF75D, 0xEF1C, 0xDE7A, 0xCDF8, 0xA4F3, 0x8C0F, // 0x09F0 (2544) +0x734C, 0x62A9, 0x5A69, 0x730B, 0x83AD, 0x7B6D, 0x5A69, 0x5A69, 0x39A6, 0x6B0C, 0x8410, 0x9472, 0x9492, 0x8C30, 0x6AEC, 0x62AB, // 0x0A00 (2560) +0x3144, 0x3164, 0x3164, 0x3144, 0x3144, 0x3144, 0x3144, 0x3144, 0x3143, 0x3144, 0x2923, 0x3143, 0x3143, 0x2903, 0x2903, 0x2923, // 0x0A10 (2576) +0x3185, 0x41E7, 0x4A48, 0x4A48, 0x3185, 0x20C2, 0x3185, 0x4A49, 0x62EB, 0x6B2D, 0x526A, 0x8C51, 0xB556, 0xD67A, 0xF75D, 0xF73D, // 0x0A20 (2592) +0xDE7B, 0xB515, 0x83EE, 0x41E6, 0x1020, 0x1820, 0x38A2, 0x82AA, 0x9B2B, 0x7A07, 0x6124, 0x6104, 0x58A3, 0x6124, 0x5964, 0x61C5, // 0x0A30 (2608) +0x6A48, 0x59E7, 0x4186, 0x734D, 0xC5F8, 0xF7BF, 0xF7DF, 0xF7DF, 0xFFDF, 0xFFDE, 0xFF9D, 0xEEFB, 0xCE17, 0xB514, 0x9451, 0x732D, // 0x0A40 (2624) +0x62CB, 0x6AEB, 0x6B0B, 0x83AE, 0x83CE, 0x4A07, 0x20E2, 0x2103, 0x2944, 0x62EB, 0x7BCF, 0x8410, 0x7BAE, 0x6B4D, 0x734C, 0x62CA, // 0x0A50 (2640) +0x3164, 0x2944, 0x2923, 0x2923, 0x2923, 0x3144, 0x3164, 0x3164, 0x3164, 0x3164, 0x3143, 0x3164, 0x3985, 0x3144, 0x2923, 0x2903, // 0x0A60 (2656) +0x3164, 0x4207, 0x4A48, 0x4A48, 0x2944, 0x18A2, 0x18A2, 0x39C7, 0x6B2C, 0x8C31, 0x83D0, 0x83D0, 0x8C11, 0xB535, 0xCE39, 0xEF3D, // 0x0A70 (2672) +0xEF3E, 0xDEDC, 0xCE38, 0xAD13, 0x41C7, 0x1821, 0x61E7, 0xD534, 0xD554, 0xDD75, 0xC4D3, 0xABF0, 0xB3CF, 0xAB6D, 0x7248, 0x6A27, // 0x0A80 (2688) +0x51A5, 0x5207, 0x83AE, 0xD638, 0xFFFF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF79D, 0xEF3C, 0xD658, 0xB554, 0x9450, 0x734D, 0x7B8E, 0x9451, // 0x0A90 (2704) +0x9C92, 0x9C71, 0x83CF, 0x62AA, 0x4A07, 0x3964, 0x3144, 0x2923, 0x3185, 0x5269, 0x738E, 0x630C, 0x5AAA, 0x62EB, 0x5A89, 0x5268, // 0x0AA0 (2720) +0x5289, 0x4A28, 0x41E7, 0x39A6, 0x3185, 0x3144, 0x2924, 0x2924, 0x2923, 0x2923, 0x2924, 0x2944, 0x2944, 0x2923, 0x2944, 0x3144, // 0x0AB0 (2736) +0x41E7, 0x4A28, 0x5289, 0x5269, 0x4A48, 0x2924, 0x18A2, 0x3986, 0x7B8F, 0x9C93, 0xB556, 0x9452, 0x7BAF, 0x7B8F, 0xACF4, 0xCE59, // 0x0AC0 (2752) +0xE73D, 0xE75D, 0xEF5D, 0xFFDF, 0xC597, 0x28C3, 0x7ACB, 0xDD96, 0xD575, 0xE5F8, 0xF679, 0xEDF8, 0xD534, 0xC471, 0xD554, 0x8B2C, // 0x0AD0 (2768) +0x4144, 0x6289, 0xC5D6, 0xFF9D, 0xFFBE, 0xF79E, 0xF79E, 0xE71B, 0xDE99, 0xC5B6, 0x9CB1, 0x7B8D, 0x734C, 0x734C, 0x7B8D, 0x9C92, // 0x0AE0 (2784) +0xAD14, 0xA4D3, 0x736D, 0x5AAA, 0x5248, 0x41C6, 0x41E6, 0x3165, 0x2944, 0x5269, 0x5ACB, 0x4A28, 0x41C6, 0x4A27, 0x4A07, 0x4A07, // 0x0AF0 (2800) +0x7BAE, 0x736D, 0x6B2C, 0x630B, 0x5ACB, 0x5AAA, 0x52A9, 0x5AAA, 0x4A68, 0x4A28, 0x4207, 0x41E7, 0x39C6, 0x39A6, 0x39A6, 0x31A5, // 0x0B00 (2816) +0x39C6, 0x4A27, 0x5AA9, 0x62EA, 0x5289, 0x3165, 0x3165, 0x6B0C, 0xA4F4, 0xAD35, 0xBD97, 0xAD15, 0x9431, 0x83CF, 0x83EF, 0x8C51, // 0x0B10 (2832) +0xB596, 0xDEFC, 0xEF7E, 0xF79F, 0xFFBF, 0x6AAB, 0x8B6D, 0xCD34, 0xD534, 0xEE18, 0xF659, 0xE5B7, 0xD4F2, 0xCCD2, 0x934D, 0x4145, // 0x0B20 (2848) +0x49C7, 0xAD13, 0xF77D, 0xFFDF, 0xF79E, 0xFF9E, 0xEEFC, 0xCE18, 0x9C92, 0x7B8E, 0x6ACA, 0x730B, 0x8BEF, 0x9451, 0x8C30, 0x7B6E, // 0x0B30 (2864) +0x6B0C, 0x5AAA, 0x5269, 0x41E7, 0x4A07, 0x5A89, 0x5268, 0x5249, 0x5269, 0x62CB, 0x5AAA, 0x62EB, 0x5289, 0x4A27, 0x4A27, 0x41E6, // 0x0B40 (2880) +0x738E, 0x738E, 0x736D, 0x736D, 0x6B4D, 0x736D, 0x738E, 0x7BCF, 0x738E, 0x736D, 0x736D, 0x738D, 0x736D, 0x6B4C, 0x630B, 0x62EB, // 0x0B50 (2896) +0x52A9, 0x4A48, 0x5289, 0x4A48, 0x5269, 0x39C7, 0x6B4D, 0x9CD3, 0xB535, 0xA4D4, 0xACF5, 0x8C11, 0x8BF0, 0x6B2D, 0x6B0C, 0x734D, // 0x0B60 (2912) +0x7B8E, 0xACF4, 0xE6BB, 0xF75E, 0xFFDF, 0xC5B6, 0x8B4C, 0xC4B2, 0xC492, 0xDD35, 0xE535, 0xDCF4, 0xCC91, 0xB3EE, 0x38C2, 0x3905, // 0x0B70 (2928) +0x9CB2, 0xF79E, 0xFFDF, 0xFFBE, 0xF77E, 0xE6DB, 0xC5D7, 0x9431, 0x83AE, 0x838E, 0x9C72, 0xA492, 0xAD14, 0xB534, 0x8C30, 0x5269, // 0x0B80 (2944) +0x3986, 0x3165, 0x41C7, 0x3985, 0x3164, 0x5228, 0x4A27, 0x39A6, 0x4A48, 0x7B8E, 0x83EF, 0x6B2C, 0x5289, 0x4A07, 0x3164, 0x41C5, // 0x0B90 (2960) +0x738E, 0x73AE, 0x73AE, 0x738E, 0x6B6D, 0x6B6E, 0x738E, 0x7BCF, 0x73AF, 0x738E, 0x7BEF, 0x8410, 0x7BCF, 0x73AE, 0x6B6D, 0x6B4C, // 0x0BA0 (2976) +0x632B, 0x5ACA, 0x4A48, 0x52AA, 0x5289, 0x6B4D, 0x8C51, 0xA4F4, 0xACF5, 0xA4F4, 0x8BF1, 0x7B8F, 0x734E, 0x83CF, 0xA4D3, 0xB555, // 0x0BB0 (2992) +0xB515, 0xB515, 0x9CB3, 0xD659, 0xEF3D, 0xEF1C, 0x938E, 0xDD95, 0xCCD2, 0xCC92, 0xD4B2, 0xD492, 0xF5B6, 0x71E7, 0x4124, 0xA4B2, // 0x0BC0 (3008) +0xFFBF, 0xFFBF, 0xF77E, 0xF75D, 0xDE9A, 0xAD14, 0x9430, 0x8C10, 0xACD3, 0xACF3, 0xB555, 0xB534, 0x9451, 0x5A8A, 0x5A6A, 0x5249, // 0x0BD0 (3024) +0x3165, 0x3165, 0x3124, 0x4A07, 0x5248, 0x2903, 0x1061, 0x2904, 0x4A49, 0x6B4D, 0x7BCF, 0x6B2C, 0x5269, 0x3185, 0x2103, 0x5248, // 0x0BE0 (3040) +0x738E, 0x7BAF, 0x7BAF, 0x7B8E, 0x738E, 0x738E, 0x738F, 0x7BAF, 0x7BAF, 0x734E, 0x738E, 0x7BCF, 0x7BCF, 0x7BAF, 0x6B4D, 0x630C, // 0x0BF0 (3056) +0x5AEB, 0x5ACA, 0x5269, 0x4207, 0x41E7, 0x630C, 0x9492, 0xAD35, 0xBD77, 0xB536, 0xA4D4, 0xAD15, 0xACF4, 0x83CF, 0x9C92, 0xB555, // 0x0C00 (3072) +0xCDF8, 0xC5B7, 0x8C10, 0x83EF, 0xC5F8, 0xF73E, 0x72CB, 0x7A8A, 0xB42F, 0xBC70, 0xC471, 0xC4B2, 0xABCF, 0x5145, 0x51E7, 0xDEBA, // 0x0C10 (3088) +0xFFBF, 0xF77E, 0xD69A, 0xA4B3, 0x8C10, 0x83CF, 0x7B8D, 0x8C0F, 0x9C91, 0x9C91, 0x9471, 0x8C0F, 0x6B2C, 0x5248, 0x5248, 0x5A69, // 0x0C20 (3104) +0x41E7, 0x3985, 0x49E6, 0x41C6, 0x3123, 0x28E2, 0x28E3, 0x41E7, 0x62EB, 0x736D, 0x8C72, 0x83F0, 0x528A, 0x41E7, 0x5289, 0x6B2B, // 0x0C30 (3120) +0x738E, 0x7BAF, 0x7BAF, 0x738F, 0x736E, 0x738E, 0x738E, 0x736E, 0x736E, 0x6B2D, 0x736E, 0x7B8F, 0x738E, 0x736E, 0x630C, 0x5ACB, // 0x0C40 (3136) +0x52AA, 0x4A68, 0x4227, 0x31A6, 0x39A6, 0x6B2C, 0x9492, 0xAD15, 0xC5B8, 0xC5B8, 0xB556, 0x9452, 0xA4B3, 0x9C92, 0x6B0C, 0x734D, // 0x0C50 (3152) +0x9CD3, 0xC618, 0x94B2, 0x5ACB, 0x630D, 0xCDD8, 0xDE19, 0x7AAB, 0x59C5, 0x6A26, 0x830A, 0x61E6, 0x61E7, 0x7ACB, 0xBD55, 0xFF9E, // 0x0C60 (3168) +0xF77D, 0xDE9A, 0xA4F3, 0x7BAE, 0x736D, 0x7B8D, 0x732B, 0x5227, 0x5248, 0x5268, 0x4207, 0x5A89, 0x6B2B, 0x8C0F, 0x8BEE, 0x5AA9, // 0x0C70 (3184) +0x4A07, 0x5A68, 0x732B, 0x83AD, 0x732B, 0x41A5, 0x20E2, 0x5269, 0x6B4D, 0x7BAF, 0x8C52, 0x7BCF, 0x6B4D, 0x5ACA, 0x5ACA, 0x630B, // 0x0C80 (3200) +0x736E, 0x738F, 0x73AF, 0x738E, 0x738F, 0x7BD0, 0x7BD0, 0x738F, 0x73AF, 0x736E, 0x738F, 0x6B6E, 0x6B6D, 0x738E, 0x632C, 0x630C, // 0x0C90 (3216) +0x52AA, 0x4A69, 0x39C7, 0x3165, 0x3165, 0x5A8A, 0x9472, 0xBD76, 0xC5D8, 0xBD97, 0xA4B3, 0x8C10, 0x9431, 0x9C92, 0x7B6D, 0x6B0C, // 0x0CA0 (3232) +0xB555, 0xCE38, 0xC5F7, 0x9471, 0x5A8A, 0x7B6E, 0xE6BB, 0xEEDC, 0xC598, 0xACF5, 0xA4D3, 0xB534, 0xCE38, 0xE6FB, 0xFFBF, 0xE6DB, // 0x0CB0 (3248) +0xBD55, 0x940F, 0x732C, 0x7B6D, 0x732C, 0x730C, 0x6289, 0x3944, 0x3964, 0x5227, 0x62A9, 0x7B8C, 0x944F, 0x7B8D, 0x5A68, 0x5228, // 0x0CC0 (3264) +0x6B0C, 0x7BAE, 0x8C0F, 0x83CE, 0x62A9, 0x5227, 0x4207, 0x62CB, 0x6B2D, 0x83F0, 0x9472, 0x7B8F, 0x4A28, 0x41C6, 0x5247, 0x4A06, // 0x0CD0 (3280) +0x7BCF, 0x738F, 0x738E, 0x73AF, 0x7BAF, 0x7BD0, 0x83F1, 0x83F1, 0x8411, 0x7BD0, 0x83F0, 0x7BD0, 0x7BCF, 0x7BCF, 0x6B6D, 0x632C, // 0x0CE0 (3296) +0x5B0B, 0x52A9, 0x4207, 0x2923, 0x2923, 0x18A2, 0x62EB, 0xA4D3, 0x9C92, 0x7B8E, 0x7B8F, 0xBD76, 0xACF4, 0xB555, 0xB535, 0xA4B2, // 0x0CF0 (3312) +0x9C71, 0x9C71, 0xBD95, 0xC5D7, 0xA4B3, 0x732C, 0x83AF, 0xD618, 0xEEFC, 0xEEDB, 0xEF1C, 0xE6DB, 0xEEFC, 0xDE9A, 0xB534, 0x8C30, // 0x0D00 (3328) +0x6AEB, 0x62A9, 0x732C, 0x83CE, 0x83AE, 0x6AEB, 0x62AA, 0x62A9, 0x62A9, 0x8BCE, 0x83CE, 0x9C70, 0x83CE, 0x6AEB, 0x6AEB, 0x9430, // 0x0D10 (3344) +0xAD34, 0xB575, 0xA4D3, 0x8BEF, 0x83AD, 0x6B0B, 0x5A89, 0x734C, 0x738E, 0x83F0, 0x83F0, 0x630C, 0x5249, 0x41C6, 0x41C5, 0x5227, // 0x0D20 (3360) +0x8411, 0x7BD0, 0x73AF, 0x7BD0, 0x7BF0, 0x7BD0, 0x7BF0, 0x83F1, 0x7BF0, 0x7BD0, 0x83F0, 0x8411, 0x8410, 0x8410, 0x7BAF, 0x738E, // 0x0D30 (3376) +0x632C, 0x52A9, 0x4207, 0x39C6, 0x2923, 0x18A1, 0x4A27, 0x734C, 0x7B8D, 0x83AE, 0xA4B2, 0xACF4, 0xBD76, 0xC5B7, 0xC5B7, 0xBD55, // 0x0D40 (3392) +0xA4D2, 0x838D, 0x9430, 0xACD3, 0xACD3, 0x8BEF, 0x5A68, 0x838D, 0xAD13, 0xCDF7, 0xD659, 0xCDF8, 0xBD76, 0x83AF, 0x41C6, 0x5A89, // 0x0D50 (3408) +0x6AEB, 0x83AD, 0xA4B2, 0xAD13, 0xAD14, 0x9C71, 0x83EF, 0x7BAE, 0x9450, 0xB534, 0xB534, 0x9410, 0x730C, 0x838E, 0xACF4, 0xC5D7, // 0x0D60 (3424) +0xCE18, 0xBD96, 0x9C71, 0x8C0F, 0x9CB1, 0x734C, 0x5289, 0x734C, 0x7BAF, 0x7BCF, 0x630C, 0x526A, 0x41E7, 0x41C6, 0x5268, 0x5267, // 0x0D70 (3440) +0x8431, 0x8411, 0x83F1, 0x83F1, 0x83F1, 0x8411, 0x8411, 0x83F1, 0x83F1, 0x7BF0, 0x8411, 0x8411, 0x7BF0, 0x7BF0, 0x7BCF, 0x7BCF, // 0x0D80 (3456) +0x6B6E, 0x5AEB, 0x4208, 0x5249, 0x62EB, 0x6AEB, 0x83CE, 0x9450, 0xA4B2, 0x9C71, 0x9450, 0x9C51, 0xB535, 0xC5B8, 0xCDF8, 0xBD35, // 0x0D90 (3472) +0x8BEF, 0x836D, 0x6269, 0x5A48, 0x940F, 0x9C50, 0x7B8C, 0x5A68, 0x41E6, 0x6B0A, 0x6AEB, 0x6AEB, 0x6ACB, 0x5A49, 0x5228, 0x734C, // 0x0DA0 (3488) +0x9C92, 0xB535, 0xC5B7, 0xD639, 0xD638, 0xC5D7, 0xBD95, 0xBD75, 0xB533, 0xA4D2, 0x83CE, 0x7B6D, 0x83CE, 0x8BCF, 0xC596, 0xCDF8, // 0x0DB0 (3504) +0xB555, 0x8C10, 0x62CB, 0x6AEB, 0x7B8D, 0x5228, 0x41E7, 0x62CB, 0x7BAE, 0x7BCF, 0x4A29, 0x2104, 0x20C2, 0x3144, 0x5247, 0x5268, // 0x0DC0 (3520) +0x8411, 0x8411, 0x83F1, 0x7BF1, 0x7BF1, 0x8411, 0x8C52, 0x8C32, 0x8C52, 0x8C32, 0x8C52, 0x8C52, 0x8431, 0x8411, 0x8411, 0x7BF0, // 0x0DD0 (3536) +0x7BD0, 0x738F, 0x7BB0, 0x9CB4, 0xBDB8, 0xBD77, 0xA4D4, 0x9C92, 0x7B6D, 0x5248, 0x62AA, 0x7B4D, 0xACF3, 0xBD96, 0xD639, 0xC597, // 0x0DE0 (3552) +0xACB3, 0x8BAE, 0x6ACA, 0x5227, 0x5A47, 0x9C2F, 0x942F, 0x41A5, 0x41C6, 0x5248, 0x3984, 0x3964, 0x5A48, 0x6AEA, 0x838E, 0x9C51, // 0x0DF0 (3568) +0xC5B8, 0xCDF9, 0xD65A, 0xE6BC, 0xDE9A, 0xDE7A, 0xC5B7, 0xB555, 0xAD13, 0x83CE, 0x62CA, 0x7B6D, 0x9C91, 0xBD95, 0xB554, 0x9430, // 0x0E00 (3584) +0x7B6E, 0x62CB, 0x5A8A, 0x62AA, 0x4A07, 0x1861, 0x2924, 0x6B0C, 0x7BCF, 0x736D, 0x5AAA, 0x3165, 0x20E3, 0x2923, 0x3144, 0x3985, // 0x0E10 (3600) +0x8C32, 0x8411, 0x8411, 0x8411, 0x83F1, 0x8411, 0x8431, 0x8C32, 0x8C52, 0x8C32, 0x8C52, 0x9473, 0x9493, 0x9473, 0x8C52, 0x8432, // 0x0E20 (3616) +0x8C32, 0x9473, 0xAD57, 0xC5F9, 0xCE1A, 0xCDF9, 0x9C93, 0x62CC, 0x3145, 0x0820, 0x3124, 0x5248, 0x62CA, 0x83CF, 0xBD96, 0xDE7A, // 0x0E30 (3632) +0xCDF8, 0xB514, 0x942F, 0x7B6C, 0x7B6B, 0x7B6B, 0x41A6, 0x49E7, 0x6ACA, 0x5227, 0x5A47, 0x730A, 0x83AD, 0x9450, 0xACF3, 0xB535, // 0x0E40 (3648) +0xC5D8, 0xC5B8, 0xDE9B, 0xDE7A, 0xDE5A, 0xD659, 0xB514, 0x838E, 0x838D, 0x83AD, 0x734C, 0x8BEF, 0x9450, 0xA4B2, 0xACF3, 0x9C71, // 0x0E50 (3664) +0xA4D3, 0xACF3, 0xA4B2, 0x83CF, 0x4A28, 0x1861, 0x3985, 0x83CF, 0x83EF, 0x5269, 0x39A6, 0x3986, 0x2944, 0x3145, 0x39A5, 0x41E6, // 0x0E60 (3680) +0x8C72, 0x8C52, 0x8C52, 0x8C32, 0x8411, 0x83F1, 0x83F1, 0x7BF0, 0x83F1, 0x8411, 0x8C32, 0x8C52, 0x8C73, 0x9473, 0x9473, 0x8C52, // 0x0E70 (3696) +0x8C51, 0x8411, 0x7BD0, 0x736F, 0xA4D5, 0xC5D9, 0xC5F9, 0xA4F5, 0x62AB, 0x5249, 0x28E3, 0x1040, 0x2904, 0x5269, 0xBD76, 0xE6BB, // 0x0E80 (3712) +0xEF1C, 0xDEBA, 0xBD95, 0xA491, 0x9C71, 0x732B, 0x5A68, 0x49C6, 0x730B, 0x6AA9, 0x732B, 0x8BCE, 0x9C71, 0xAD14, 0xB535, 0xAD14, // 0x0E90 (3728) +0xBD76, 0xACF4, 0xB535, 0xBD76, 0xB534, 0xA492, 0x9C30, 0x732C, 0x6AEB, 0x8BEF, 0x9430, 0x8BCE, 0x9C71, 0x8C10, 0x8C11, 0x9C72, // 0x0EA0 (3744) +0x8C30, 0x83EF, 0x83AE, 0x7B8D, 0x732C, 0x5A69, 0x62EB, 0x83EF, 0x9CD2, 0x738D, 0x4A28, 0x5AAA, 0x6B0B, 0x62CA, 0x6B0B, 0x7B6D, // 0x0EB0 (3760) +0x8411, 0x8411, 0x8411, 0x8411, 0x7BF0, 0x7BF0, 0x7BD0, 0x73AF, 0x73AF, 0x7BF0, 0x8411, 0x8411, 0x8411, 0x8C52, 0x9473, 0x9492, // 0x0EC0 (3776) +0x94B2, 0x5AEB, 0x3186, 0x4209, 0x6B2E, 0xAD15, 0xD65A, 0xD65A, 0xD659, 0x8C30, 0x2904, 0x20E3, 0x20C3, 0x62CB, 0xB535, 0xD659, // 0x0ED0 (3792) +0xDEBA, 0xEF5D, 0xE6FC, 0xD639, 0xAD14, 0xA491, 0x8BCE, 0x7B4B, 0x838C, 0x836D, 0x83AE, 0x8BEF, 0x8C10, 0xACF4, 0xB575, 0xACF3, // 0x0EE0 (3808) +0x9C91, 0x940F, 0x838D, 0xA4B2, 0x9C50, 0x83AE, 0x9C50, 0x940F, 0x93EF, 0x838D, 0x8BEF, 0x9430, 0xA4B3, 0xACF5, 0xC5F9, 0xC5B8, // 0x0EF0 (3824) +0x732C, 0x3985, 0x41A6, 0x7B8D, 0x9C91, 0x7B6D, 0x6B0C, 0x7B8D, 0x8C50, 0x7BAE, 0x6B2C, 0x83EF, 0x9451, 0x9C71, 0xA4B2, 0xA4D3, // 0x0F00 (3840) +0x83F1, 0x83F1, 0x7BF0, 0x83F1, 0x83F1, 0x7BF0, 0x7BD0, 0x7BB0, 0x7BB0, 0x7BD0, 0x8411, 0x8C52, 0x9473, 0x8C53, 0x9474, 0x9494, // 0x0F10 (3856) +0x8C52, 0x738F, 0x5ACC, 0x4209, 0x41E8, 0x5AAB, 0x9452, 0xBDB7, 0xD639, 0x8BF0, 0x49E7, 0x18A2, 0x1061, 0x41C7, 0x62AA, 0xA4B2, // 0x0F20 (3872) +0xDEBB, 0xEEFD, 0xE6BB, 0xE6FC, 0xBD76, 0x8C10, 0x9CB2, 0xA4B2, 0xBD75, 0xC5D6, 0xB555, 0xBD76, 0xC5B7, 0xCE19, 0xD65B, 0xCE19, // 0x0F30 (3888) +0xC5B7, 0xC5D7, 0xAD14, 0xB555, 0xBD75, 0xB575, 0xBD96, 0xA4B2, 0x83CF, 0x83AF, 0x9CB3, 0x9472, 0xA4F4, 0xB556, 0xAD35, 0xB576, // 0x0F40 (3904) +0x8C11, 0x5A8B, 0x62EB, 0x9451, 0x9450, 0x7B8D, 0x62CA, 0x83CF, 0xAD13, 0x83F0, 0x83AF, 0x9451, 0x9452, 0x9472, 0x9CD3, 0x9C93, // 0x0F50 (3920) +0x8411, 0x8C32, 0x8C32, 0x8C32, 0x8431, 0x8411, 0x8411, 0x83F0, 0x7BF0, 0x8411, 0x8412, 0x8C32, 0x9494, 0x9473, 0xA4D5, 0xAD16, // 0x0F60 (3936) +0xAD56, 0xBDD8, 0xC619, 0xB5B7, 0x8C31, 0x526A, 0x5A8B, 0x7BAF, 0xB576, 0xC5F8, 0x9451, 0x49E8, 0x18A2, 0x0820, 0x3165, 0x7B8E, // 0x0F70 (3952) +0xACF4, 0xB555, 0xD639, 0xDEBB, 0xCDF8, 0xB555, 0xA4D4, 0xACD4, 0xBD76, 0xCE18, 0xD65A, 0xD65A, 0xD65A, 0xDE9B, 0xDEBB, 0xDE7A, // 0x0F80 (3968) +0xE6BB, 0xDE9B, 0xD659, 0xC5D7, 0xD639, 0xBD96, 0xAD14, 0x9451, 0x9451, 0xA4D4, 0x9CB3, 0x9C72, 0x8C11, 0x736E, 0x6B2D, 0x6B0D, // 0x0F90 (3984) +0x8C31, 0x9C93, 0x8C51, 0x83EF, 0x734C, 0x5A89, 0x6B0B, 0x8C30, 0xBD96, 0xA4D3, 0x8C31, 0x9472, 0x9CB3, 0x9CB3, 0x9CD3, 0x9CD3, // 0x0FA0 (4000) +0x83F1, 0x8431, 0x8C31, 0x8411, 0x8411, 0x8411, 0x8411, 0x7BF0, 0x8411, 0x7BD0, 0x8C32, 0x8411, 0x9473, 0x9C93, 0x9C94, 0xBD98, // 0x0FB0 (4016) +0xC63A, 0xD67B, 0xDEDC, 0xE71D, 0xDEDC, 0xA515, 0x4A29, 0x2946, 0x4A08, 0x7BCF, 0xA4D3, 0x9CB2, 0x528A, 0x20C3, 0x18A3, 0x2925, // 0x0FC0 (4032) +0x41E7, 0x7BAE, 0xA4D3, 0xA4B3, 0x9C93, 0xC5B8, 0xACF5, 0xB557, 0xBD77, 0xBD57, 0xC5D9, 0xCE19, 0xD65A, 0xD67A, 0xDEBA, 0xCE39, // 0x0FD0 (4048) +0xCE19, 0xC5D8, 0xB535, 0xA4B3, 0xA4B3, 0x9451, 0x9C92, 0xA4D3, 0xA4D4, 0xACD4, 0x734E, 0x6AEC, 0x7B8F, 0x9C93, 0xA4B3, 0x7B6E, // 0x0FE0 (4064) +0x630C, 0x736E, 0x62EC, 0x5AAB, 0x5289, 0x62EB, 0x62CA, 0x6B0B, 0x8C30, 0x8C10, 0x9C92, 0xACF4, 0x9C93, 0x9452, 0x9CB3, 0xA4B3, // 0x0FF0 (4080) +0x7BCF, 0x7BD0, 0x7BD0, 0x7BAF, 0x7BCF, 0x7BD0, 0x7BD0, 0x7BAF, 0x73AF, 0x7BCF, 0x7BD0, 0x8411, 0x9493, 0xA4D4, 0xAD36, 0xC5D9, // 0x1000 (4096) +0xD67B, 0xD69B, 0xDEDC, 0xDEDC, 0xE6FC, 0xE71D, 0x9492, 0x3186, 0x0000, 0x0821, 0x526A, 0x9472, 0x9CB3, 0x6B2D, 0x6B4D, 0x734E, // 0x1010 (4112) +0x6B2D, 0xA4B3, 0x8C31, 0x6B2D, 0x6B0D, 0x9C73, 0x9C73, 0xBD98, 0xC5F9, 0xBD98, 0xC5D9, 0xBDB8, 0xCE19, 0xCE3A, 0xCE39, 0xBD97, // 0x1020 (4128) +0xB556, 0xAD36, 0x8C11, 0x734E, 0xAD14, 0xCDF8, 0xC5B6, 0xA4D3, 0x9451, 0xB534, 0xD659, 0x9C72, 0x41C7, 0x3986, 0xA4D3, 0xCE39, // 0x1030 (4144) +0xB556, 0x9472, 0x5249, 0x18C3, 0x41C7, 0x62CB, 0x4A28, 0x41C7, 0x3966, 0x7B8E, 0xACF4, 0xACF4, 0x9CB3, 0x9C93, 0xA4D4, 0xAD14, // 0x1040 (4160) +0x7BCF, 0x73AF, 0x738E, 0x738F, 0x7BAF, 0x7BCF, 0x7BCF, 0x73AF, 0x738F, 0x7BCF, 0x7BAF, 0x8411, 0x9493, 0x8C52, 0x7BAF, 0x5A8B, // 0x1050 (4176) +0x62ED, 0xA515, 0xCE5A, 0xE6FD, 0xDEDC, 0xE71D, 0xEF5D, 0xCE59, 0x6B2D, 0x3166, 0x18C3, 0x4A49, 0x8C31, 0x9CD4, 0xB576, 0xA4F5, // 0x1060 (4192) +0xAD15, 0xDE9B, 0xCE19, 0x8C11, 0x7BAF, 0x7B8F, 0x83F0, 0x9472, 0xA4D4, 0xA4D4, 0xBDD8, 0xC5F9, 0xCE5A, 0xC61A, 0xBDB9, 0xC5F9, // 0x1070 (4208) +0xAD36, 0x8C31, 0x8C31, 0xB535, 0x9451, 0xA4B2, 0xCE17, 0xACF3, 0x7B6D, 0x628A, 0x8C10, 0xCE18, 0xBD75, 0x4A28, 0x39A6, 0x9CD3, // 0x1080 (4224) +0xC5D8, 0xCE39, 0x9451, 0x734D, 0x736D, 0x6B4D, 0x4A08, 0x62CB, 0x39A7, 0x83AF, 0xACF4, 0xAD15, 0xACF4, 0xAD15, 0xAD15, 0xAD15, // 0x1090 (4240) +0x83F0, 0x7BAF, 0x738E, 0x73AF, 0x7BCF, 0x7BCF, 0x73AF, 0x738E, 0x7BD0, 0x7BD0, 0x8C52, 0x8431, 0x8411, 0x62CC, 0x39A7, 0x1883, // 0x10A0 (4256) +0x0000, 0x1082, 0x4A29, 0x9CF4, 0xCE7A, 0xDEDC, 0xEF3D, 0xE71D, 0xD6BB, 0xA514, 0x39E8, 0x0842, 0x18A3, 0x4A29, 0x630C, 0x8C31, // 0x10B0 (4272) +0xC619, 0xDE7C, 0xDEDC, 0xC5D9, 0xAD56, 0x9473, 0x8C52, 0x8C52, 0xA4F4, 0xAD15, 0xBDB8, 0xD65B, 0xC61A, 0xBDB9, 0xCE1A, 0xBD78, // 0x10C0 (4288) +0x9472, 0x7B8F, 0xBD96, 0x9451, 0x83CE, 0xBD75, 0xBD54, 0x942F, 0x9C71, 0xACF3, 0x62EB, 0x62AA, 0xBD95, 0xB575, 0x5269, 0x5ACB, // 0x10D0 (4304) +0x9CB3, 0xBDF8, 0xC618, 0x7BAF, 0x4A08, 0x62EC, 0x8C31, 0xA4F4, 0xAD15, 0xAD15, 0xB536, 0xB536, 0xACF5, 0xA4D4, 0xAD15, 0xB535, // 0x10E0 (4320) +0x83F0, 0x83F0, 0x7BCF, 0x7BAF, 0x73AF, 0x73AF, 0x738E, 0x736E, 0x7BB0, 0x8C32, 0x9473, 0x9452, 0x8410, 0x6B0D, 0x7B8F, 0x83F0, // 0x10F0 (4336) +0x3185, 0x0000, 0x0000, 0x0841, 0x31A6, 0x62EC, 0x7BD0, 0xBDD8, 0xD69B, 0xD67B, 0x7BF0, 0x0842, 0x0000, 0x0000, 0x0861, 0x62EC, // 0x1100 (4352) +0x8C31, 0xAD36, 0xD69B, 0xD69C, 0xBDB9, 0xA516, 0x9494, 0x9CB5, 0xA4F6, 0xB578, 0xC5D9, 0xD69C, 0xC5D9, 0xC5D9, 0xBDB8, 0x7B90, // 0x1110 (4368) +0x6AED, 0xA4F4, 0xBD96, 0x9C92, 0x83AE, 0x8BEE, 0x9C50, 0x9C91, 0x9C71, 0x9C51, 0xC5D7, 0x9C72, 0x5269, 0x6B0C, 0x8C51, 0x528A, // 0x1120 (4384) +0x6B4D, 0x8411, 0xAD35, 0x8C31, 0x526A, 0x83F0, 0xA4D4, 0xAD15, 0xB535, 0xB557, 0xB536, 0xAD16, 0xB537, 0xB536, 0xAD36, 0xB536, // 0x1130 (4400) +0x83CF, 0x83F0, 0x83F0, 0x7BAF, 0x738E, 0x736E, 0x738F, 0x738F, 0x7BD0, 0x8C31, 0x9473, 0x9472, 0x9CB3, 0xB556, 0xB576, 0xCE39, // 0x1140 (4416) +0xAD33, 0x4207, 0x20C2, 0x0000, 0x0000, 0x0000, 0x0001, 0x39A8, 0xAD56, 0xD6BC, 0xA515, 0x3187, 0x1062, 0x0820, 0x0020, 0x10A2, // 0x1150 (4432) +0x2925, 0x4A6A, 0x9493, 0xB5B8, 0xB578, 0x8C33, 0x7BD2, 0x9CB6, 0xB579, 0xB579, 0xBDB9, 0xCE1A, 0xBD98, 0xBD97, 0x8C11, 0x6B0C, // 0x1160 (4448) +0x6B2D, 0xACF4, 0xBD76, 0xB534, 0x9C71, 0x9C71, 0xA4D2, 0xACF3, 0x9C71, 0x83AE, 0xA4B2, 0xD639, 0xC5D7, 0x7B8F, 0x62EC, 0x8C51, // 0x1170 (4464) +0x528B, 0x6B2D, 0x6B0D, 0x7B8F, 0x9472, 0xACF4, 0xACF4, 0xAD15, 0xB556, 0xAD16, 0xB536, 0xB557, 0xAD16, 0xACF6, 0xB557, 0xB536, // 0x1180 (4480) +0x8410, 0x83F0, 0x8410, 0x7BF0, 0x7BAF, 0x7BAF, 0x738F, 0x738F, 0x83D0, 0x83F1, 0x83D0, 0x9CD3, 0xAD35, 0xB576, 0xB576, 0xC5F8, // 0x1190 (4496) +0xBDD6, 0x8C50, 0x2945, 0x0841, 0x0000, 0x0000, 0x0000, 0x0000, 0x738F, 0xDEFC, 0xB597, 0x7BD0, 0x41E9, 0x0000, 0x0000, 0x0000, // 0x11A0 (4512) +0x0821, 0x20E4, 0x4209, 0x9492, 0x94B3, 0x4A6A, 0x31C8, 0x6B4E, 0x8C73, 0x9CF5, 0x9CD4, 0xA515, 0xAD36, 0x83D0, 0x62EC, 0x9451, // 0x11B0 (4528) +0xAD13, 0xA4D2, 0x9C71, 0xA4B1, 0xB513, 0xC595, 0xBD74, 0xACD2, 0x8C0F, 0x9450, 0xA4F3, 0xACF3, 0xD67A, 0xE6BC, 0x9C93, 0x9CB4, // 0x11C0 (4544) +0x9C72, 0x5AAB, 0x62AB, 0x83F0, 0xA4D4, 0xB556, 0xB556, 0xB556, 0xB535, 0xB535, 0xAD15, 0xB536, 0xAD15, 0xAD15, 0xAD15, 0xAD16, // 0x11D0 (4560) +0x8431, 0x83F0, 0x7BF0, 0x7BF0, 0x83F0, 0x8410, 0x7BD0, 0x73AF, 0x8C11, 0x8C11, 0x630C, 0x6B2D, 0x8411, 0x8C11, 0x734E, 0x8C51, // 0x11E0 (4576) +0xBD96, 0xBDB6, 0x8C51, 0x5AAB, 0x3186, 0x0841, 0x0000, 0x0000, 0x528A, 0xCE5A, 0xB5B8, 0xAD57, 0x738F, 0x1062, 0x0820, 0x0000, // 0x11F0 (4592) +0x0841, 0x2924, 0x3186, 0x5ACB, 0x5ACB, 0x1062, 0x2966, 0x3187, 0x4209, 0x5AEC, 0x630D, 0x83F1, 0x7BAF, 0x4A08, 0x83F0, 0xAD14, // 0x1200 (4608) +0xB533, 0xB554, 0xB554, 0xB533, 0xA491, 0x9C50, 0x942F, 0xB533, 0xBD33, 0xB513, 0xACF3, 0xBD75, 0xC5D7, 0xCE19, 0xC5F9, 0x9473, // 0x1210 (4624) +0x9452, 0x6B2D, 0x734E, 0x9452, 0xACF4, 0xB556, 0xBD77, 0xBD77, 0xBD77, 0xBD56, 0xB556, 0xB556, 0xAD16, 0xB536, 0xB536, 0xB556, // 0x1220 (4640) +0x8410, 0x7BF0, 0x7BF0, 0x83F0, 0x83F0, 0x83F0, 0x7BD0, 0x7BD0, 0x9452, 0x9CB4, 0x9493, 0x6B4E, 0x39A7, 0x39A7, 0x41E8, 0x4A49, // 0x1230 (4656) +0x734D, 0x83EF, 0xA4F3, 0xBD96, 0xB555, 0x5AAB, 0x0020, 0x0000, 0x39C7, 0xC5F9, 0xC61A, 0xCE5B, 0x9494, 0x2925, 0x1082, 0x1061, // 0x1240 (4672) +0x1061, 0x18C2, 0x2944, 0x2103, 0x39A6, 0x526A, 0x632D, 0x6B6E, 0x736E, 0x62EC, 0x6B2D, 0x736E, 0x736E, 0x736D, 0x9C92, 0xA4B2, // 0x1250 (4688) +0x9C70, 0x83AC, 0x942F, 0x9C4F, 0x838C, 0x942F, 0x8BCD, 0x8BCD, 0x9C2F, 0x8BCE, 0x83CD, 0xA4B1, 0xB555, 0xB555, 0xCDF8, 0xA4F4, // 0x1260 (4704) +0x8C31, 0x8BF1, 0x9452, 0xA4D4, 0xA4D4, 0xAD15, 0xBD77, 0xBD97, 0xBD77, 0xBD77, 0xB556, 0xB536, 0xACF5, 0xAD16, 0xB536, 0xB556, // 0x1270 (4720) +0x8411, 0x8411, 0x8411, 0x8411, 0x83F1, 0x7BD0, 0x7BD0, 0x8C31, 0x9473, 0xB576, 0xB576, 0xB576, 0x62EC, 0x39A7, 0x7BAF, 0x9C92, // 0x1280 (4736) +0x83CF, 0x83CF, 0x9CB3, 0xB556, 0xC619, 0xA4D4, 0x10A3, 0x0000, 0x39C8, 0xC5F9, 0xD67C, 0xCE7B, 0x9CB4, 0x31A7, 0x20E3, 0x18C2, // 0x1290 (4752) +0x1061, 0x2103, 0x0840, 0x18C2, 0x5269, 0x8430, 0xA514, 0xAD35, 0xA515, 0xA4F4, 0xA515, 0x9472, 0x8C10, 0xA4D3, 0xAD34, 0xAD13, // 0x12A0 (4768) +0x9C70, 0x9C4F, 0x940E, 0x836C, 0x93EE, 0xB4F2, 0x836C, 0x6AC9, 0x730A, 0x940E, 0x940F, 0x838D, 0xACD3, 0xBD75, 0xBD76, 0xA4B3, // 0x12B0 (4784) +0x9432, 0xA4B4, 0xAD16, 0xB557, 0xAD15, 0xAD15, 0xBD97, 0xC5B8, 0xC5D8, 0xC5D8, 0xBD98, 0xB557, 0xAD15, 0xB556, 0xBD77, 0xBD77, // 0x12C0 (4800) +}; diff --git a/libraries/UTFT_Buttons/examples/UTFT_Buttons_Bitmap_Demo/dog.c b/libraries/UTFT_Buttons/examples/UTFT_Buttons_Bitmap_Demo/dog.c new file mode 100644 index 0000000..2c25dbe --- /dev/null +++ b/libraries/UTFT_Buttons/examples/UTFT_Buttons_Bitmap_Demo/dog.c @@ -0,0 +1,314 @@ +// Generated by : ImageConverter 565 v1.2 +// Dimensions : 80x60 pixels +// Size : 9 600 Bytes + +#if defined(__AVR__) + #include +#elif defined(__PIC32MX__) + #define PROGMEM +#elif defined(__arm__) + #define PROGMEM +#endif + +const unsigned short dog[0x12C0] PROGMEM ={ +0x2B2C, 0x232C, 0x232C, 0x234C, 0x236D, 0x2B6D, 0x2B8D, 0x2B8D, 0x2BAE, 0x33AE, 0x33AE, 0x33CE, 0x33CF, 0x33CF, 0x33EF, 0x33EF, // 0x0010 (16) +0x3C10, 0x3C10, 0x3C10, 0x3C30, 0x3C30, 0x3C30, 0x3C30, 0x3C30, 0x3C10, 0x3C11, 0x3C11, 0x3C11, 0x3C11, 0x3411, 0x33F1, 0x3C11, // 0x0020 (32) +0x3BF1, 0x3BF1, 0x3BD0, 0x3BF1, 0x33F0, 0x3C11, 0x3C11, 0x3411, 0x3411, 0x3411, 0x3410, 0x3411, 0x3C11, 0x3BF1, 0x3BD0, 0x3BD1, // 0x0030 (48) +0x33D0, 0x2BD0, 0x33D0, 0x33D0, 0x2B90, 0x2B90, 0x2B90, 0x236F, 0x236F, 0x1B4F, 0x1B4F, 0x1B2F, 0x1B0F, 0x1AEF, 0x1AEF, 0x1AEF, // 0x0040 (64) +0x12EE, 0x12ED, 0x12CD, 0x12CD, 0x0ACC, 0x0AAC, 0x0AAC, 0x0A8B, 0x0A8B, 0x028B, 0x026B, 0x024A, 0x024A, 0x022A, 0x0229, 0x0229, // 0x0050 (80) +0x2B4D, 0x2B2C, 0x2B4D, 0x2B6D, 0x2B6D, 0x2B8D, 0x2BAE, 0x2BAE, 0x33AE, 0x33AE, 0x33CE, 0x33CF, 0x33CF, 0x33EF, 0x33EF, 0x3C0F, // 0x0060 (96) +0x3C10, 0x3C10, 0x3C30, 0x3C30, 0x3C30, 0x3C30, 0x3C30, 0x3C30, 0x3C31, 0x3C31, 0x3C11, 0x3C11, 0x3C31, 0x3C32, 0x3C32, 0x3411, // 0x0070 (112) +0x2C31, 0x2C51, 0x2C31, 0x3452, 0x3411, 0x3411, 0x3411, 0x3C31, 0x3C11, 0x3C32, 0x3431, 0x3411, 0x3411, 0x3411, 0x3411, 0x3C11, // 0x0080 (128) +0x3C11, 0x33F1, 0x33D0, 0x33D0, 0x2BB0, 0x2BB0, 0x2BB0, 0x2B90, 0x236F, 0x236F, 0x234F, 0x1B4F, 0x1B2F, 0x1B0F, 0x1B0E, 0x1AEE, // 0x0090 (144) +0x12EE, 0x12ED, 0x12ED, 0x12CD, 0x12CD, 0x0ACC, 0x0AAC, 0x0A8C, 0x0A8B, 0x0A8B, 0x026B, 0x026B, 0x024A, 0x024A, 0x022A, 0x022A, // 0x00A0 (160) +0x2B4D, 0x2B4D, 0x2B6D, 0x2B6D, 0x2B8D, 0x2B8E, 0x2BAE, 0x33AE, 0x33AE, 0x33CE, 0x33CF, 0x33CF, 0x33EF, 0x3BEF, 0x3C0F, 0x3C10, // 0x00B0 (176) +0x3C30, 0x3C30, 0x3C30, 0x3C30, 0x3C30, 0x3C50, 0x3C51, 0x3C51, 0x3C31, 0x3C51, 0x3C51, 0x3C32, 0x3C31, 0x3C31, 0x3C32, 0x3C32, // 0x00C0 (192) +0x3C52, 0x3452, 0x3411, 0x3C32, 0x3C32, 0x4412, 0x4412, 0x43F1, 0x3BF1, 0x4412, 0x3C31, 0x3C31, 0x3C52, 0x3C32, 0x3C11, 0x3C11, // 0x00D0 (208) +0x3C11, 0x3BF1, 0x3BF1, 0x3BF1, 0x33D1, 0x33D0, 0x3390, 0x2B90, 0x2B90, 0x2B6F, 0x236F, 0x234F, 0x234F, 0x1B2E, 0x1B0E, 0x1B0E, // 0x00E0 (224) +0x1B0E, 0x130E, 0x12ED, 0x12ED, 0x12ED, 0x12CD, 0x0ACC, 0x0AAC, 0x0A8C, 0x0A8C, 0x0A8C, 0x026B, 0x026B, 0x024A, 0x024A, 0x022A, // 0x00F0 (240) +0x2B4D, 0x2B4D, 0x2B6D, 0x2B8D, 0x2B8D, 0x2B8E, 0x33AE, 0x33AE, 0x33CE, 0x33CF, 0x33CF, 0x3BEF, 0x3BEF, 0x3C0F, 0x3C30, 0x3C30, // 0x0100 (256) +0x3C30, 0x3C30, 0x3C30, 0x4450, 0x3C51, 0x4451, 0x3C51, 0x3C51, 0x3C51, 0x3C51, 0x3C51, 0x4472, 0x4472, 0x3C52, 0x3C32, 0x4452, // 0x0110 (272) +0x4412, 0x4C32, 0x4412, 0x4412, 0x4412, 0x4412, 0x4432, 0x3C11, 0x3C31, 0x3C51, 0x3C51, 0x3C31, 0x3C31, 0x3C31, 0x3C11, 0x4431, // 0x0120 (288) +0x3C11, 0x3C11, 0x3411, 0x33F1, 0x33F1, 0x33D1, 0x33D1, 0x33D1, 0x2B90, 0x2B90, 0x2B70, 0x234F, 0x234F, 0x234E, 0x1B2E, 0x1B0E, // 0x0130 (304) +0x1B0E, 0x1B0E, 0x12EE, 0x12ED, 0x12ED, 0x12ED, 0x12CD, 0x12CC, 0x0AAC, 0x0AAC, 0x0A8C, 0x0A8B, 0x026B, 0x026B, 0x024A, 0x024A, // 0x0140 (320) +0x336D, 0x2B6D, 0x2B6D, 0x2B8D, 0x2B8E, 0x2BAE, 0x33AE, 0x33CE, 0x33CE, 0x33CF, 0x3BEF, 0x3BEF, 0x3C0F, 0x3C10, 0x3C30, 0x3C30, // 0x0150 (336) +0x3C30, 0x4450, 0x4450, 0x4450, 0x4451, 0x4451, 0x4471, 0x4471, 0x4472, 0x4472, 0x4452, 0x3C52, 0x3C31, 0x3C31, 0x4452, 0x4472, // 0x0160 (352) +0x4472, 0x4472, 0x3C51, 0x3C31, 0x3C31, 0x3C10, 0x3C31, 0x4451, 0x3C30, 0x3C30, 0x3C0F, 0x3C10, 0x4451, 0x4C71, 0x4450, 0x3C10, // 0x0170 (368) +0x4451, 0x3C31, 0x3C31, 0x3C11, 0x3411, 0x33F1, 0x2BD1, 0x2BB1, 0x2BB1, 0x2B90, 0x2B70, 0x2B70, 0x2B4F, 0x234F, 0x232F, 0x1B2E, // 0x0180 (384) +0x1B2E, 0x1B0E, 0x1B0E, 0x1AEE, 0x12EE, 0x12ED, 0x12CD, 0x12CD, 0x0AAC, 0x0AAC, 0x0A8C, 0x0A8B, 0x0A8B, 0x026B, 0x024A, 0x024A, // 0x0190 (400) +0x336D, 0x2B6D, 0x2B6D, 0x2B8D, 0x2B8E, 0x2BAE, 0x33CE, 0x33CE, 0x33CE, 0x33CF, 0x3BEF, 0x3C0F, 0x3C10, 0x3C30, 0x3C30, 0x3C30, // 0x01A0 (416) +0x4450, 0x4450, 0x4451, 0x4451, 0x4471, 0x4471, 0x4472, 0x4472, 0x4472, 0x4472, 0x4472, 0x4472, 0x4C72, 0x4C92, 0x4C72, 0x4472, // 0x01B0 (432) +0x3C71, 0x3C50, 0x3C50, 0x5492, 0x7555, 0x8DD7, 0xAE9A, 0xBF1C, 0xBF1C, 0xB69A, 0xA618, 0xA618, 0xBEFB, 0xC75D, 0xAE79, 0x8575, // 0x01C0 (448) +0x5451, 0x4C11, 0x4410, 0x4411, 0x3C11, 0x3411, 0x3411, 0x33D1, 0x2BB0, 0x3391, 0x2B70, 0x2B70, 0x2B70, 0x2B50, 0x234F, 0x232F, // 0x01D0 (464) +0x1B2E, 0x1B2E, 0x1B0E, 0x1B0E, 0x1B0E, 0x12ED, 0x12ED, 0x12ED, 0x12CC, 0x0AAC, 0x0AAC, 0x0A8B, 0x0A8B, 0x0A8B, 0x026B, 0x024A, // 0x01E0 (480) +0x2B6D, 0x2B6D, 0x2B6D, 0x2B8D, 0x2BAE, 0x2BAE, 0x33CE, 0x33CE, 0x33CF, 0x33EF, 0x3BEF, 0x3C0F, 0x3C30, 0x3C30, 0x3C50, 0x3C50, // 0x01F0 (496) +0x4451, 0x4451, 0x4451, 0x4471, 0x4471, 0x4471, 0x4472, 0x4472, 0x4C92, 0x4492, 0x4472, 0x4C72, 0x4C72, 0x4452, 0x4431, 0x4C10, // 0x0200 (512) +0x5C71, 0x8555, 0xAE99, 0xD77D, 0xF7FF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7FF, // 0x0210 (528) +0xD75D, 0x9DF8, 0x6CD3, 0x5410, 0x43D0, 0x4411, 0x3C11, 0x2BB0, 0x33D1, 0x33B1, 0x2B90, 0x2B70, 0x2B70, 0x2B70, 0x234F, 0x234F, // 0x0220 (544) +0x234E, 0x1B2E, 0x1B2E, 0x1B2E, 0x1B0E, 0x1B0D, 0x12ED, 0x12ED, 0x12CC, 0x12CC, 0x12AC, 0x0AAC, 0x0A8B, 0x0A8B, 0x0A6B, 0x026A, // 0x0230 (560) +0x2B6D, 0x2B6D, 0x2B6D, 0x2B8D, 0x2BAE, 0x33CE, 0x33CE, 0x33CE, 0x33EF, 0x33EF, 0x3C0F, 0x3C10, 0x3C30, 0x3C30, 0x3C50, 0x3C50, // 0x0240 (576) +0x3C51, 0x4451, 0x4451, 0x4471, 0x4472, 0x4472, 0x4492, 0x4492, 0x4492, 0x4C72, 0x4C92, 0x4C72, 0x4451, 0x5492, 0x7DD7, 0xAF1C, // 0x0250 (592) +0xDF9E, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFDE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, // 0x0260 (608) +0xFFFF, 0xF7FF, 0xEFFF, 0xC71C, 0x7514, 0x43F0, 0x3BF0, 0x4411, 0x33D1, 0x33B1, 0x33B0, 0x2B90, 0x2B90, 0x236F, 0x236F, 0x234F, // 0x0270 (624) +0x1B4E, 0x1B2E, 0x1B2E, 0x1B2E, 0x1B0E, 0x1B0E, 0x1B0D, 0x1B0D, 0x12ED, 0x12CC, 0x12CC, 0x12AC, 0x0AAB, 0x0A8B, 0x0A8B, 0x0A6A, // 0x0280 (640) +0x2B8D, 0x2B6D, 0x2B8D, 0x2BAE, 0x2BAE, 0x2BCE, 0x2BEE, 0x2BEE, 0x33EF, 0x33EF, 0x3C0F, 0x3C0F, 0x3C30, 0x3C30, 0x3C50, 0x4450, // 0x0290 (656) +0x4471, 0x4450, 0x4471, 0x4492, 0x4472, 0x4472, 0x4C72, 0x4C72, 0x4472, 0x44B3, 0x3C72, 0x4492, 0x5492, 0xAE59, 0xFFFF, 0xFFFF, // 0x02A0 (672) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFE, 0xFFFF, 0xFFFE, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02B0 (688) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF9E, 0xD6DB, 0xCF1C, 0xA659, 0x64D3, 0x3BF0, 0x2BAF, 0x2BD0, 0x2B8F, 0x2B6F, 0x2B4F, 0x232F, // 0x02C0 (704) +0x232F, 0x1B2F, 0x1B2E, 0x1B2E, 0x1B2E, 0x1B2D, 0x1B0D, 0x1B0D, 0x1B0C, 0x1AEC, 0x1ACB, 0x12AB, 0x12AB, 0x0AAA, 0x0AAA, 0x0A8A, // 0x02D0 (720) +0x2B6E, 0x2B6D, 0x2B8E, 0x2BAE, 0x2BAE, 0x2BCE, 0x2BCE, 0x2BCE, 0x33EF, 0x33EF, 0x3C0F, 0x3C0F, 0x3C30, 0x3C30, 0x3C50, 0x3C50, // 0x02E0 (736) +0x3C2F, 0x4471, 0x4471, 0x4492, 0x4C92, 0x4CB2, 0x4CB2, 0x4C71, 0x5CB2, 0x64F4, 0x7D56, 0xA65A, 0xD79E, 0xF7FF, 0xF7FE, 0xFFDE, // 0x02F0 (752) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFE, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0300 (768) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xF7FF, 0xF7FF, 0xD79E, 0xAE7A, 0x6CF4, 0x4BF1, 0x338F, 0x338F, 0x2B6F, 0x2B6F, // 0x0310 (784) +0x236F, 0x1B0E, 0x1B2E, 0x1B2E, 0x1B0D, 0x234D, 0x1B0C, 0x1B0C, 0x1B0C, 0x1B0B, 0x1AEB, 0x1ACB, 0x12CB, 0x12AA, 0x0AAA, 0x0A8A, // 0x0320 (800) +0x2B8E, 0x2B6E, 0x2B8E, 0x2BAE, 0x2BAE, 0x2BCF, 0x2BCF, 0x2BCF, 0x33EF, 0x3410, 0x3410, 0x3C10, 0x3C10, 0x3C30, 0x3C50, 0x3C51, // 0x0330 (816) +0x4491, 0x3C50, 0x4491, 0x4491, 0x4CB2, 0x4470, 0x5470, 0x85D6, 0xC75C, 0xE7BF, 0xF7FF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFE, 0xFFFF, // 0x0340 (832) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0350 (848) +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE7DF, 0xA5F8, 0x5410, 0x3BAF, 0x2B6E, 0x236E, // 0x0360 (864) +0x1B0D, 0x2B6E, 0x234E, 0x1B2D, 0x234D, 0x1B2C, 0x232C, 0x232C, 0x230B, 0x230B, 0x22EB, 0x1AEB, 0x1ACA, 0x1ACA, 0x12CA, 0x12A9, // 0x0370 (880) +0x2B8E, 0x2B6E, 0x2B8E, 0x2BAF, 0x2BAF, 0x2BAF, 0x2BCF, 0x2BCF, 0x33EF, 0x33F0, 0x3410, 0x3C10, 0x3C10, 0x3C30, 0x3C30, 0x4451, // 0x0380 (896) +0x4451, 0x4471, 0x4491, 0x4491, 0x4C91, 0x6D13, 0xAE99, 0xEFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDE, // 0x0390 (912) +0xFFFF, 0xFFFF, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFDD, 0xFFDE, 0xFFFF, // 0x03A0 (928) +0xFFFF, 0xFFDF, 0xFFFF, 0xFFFE, 0xFFFE, 0xFFDE, 0xFFFE, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xF7FF, 0xC71C, 0x74F4, 0x3BAE, 0x338E, // 0x03B0 (944) +0x338E, 0x232D, 0x236D, 0x234D, 0x234C, 0x234C, 0x1B2B, 0x232C, 0x232B, 0x230B, 0x230A, 0x22EA, 0x1AEA, 0x1ACA, 0x12C9, 0x12A9, // 0x03C0 (960) +0x2B8E, 0x2B6E, 0x2B8E, 0x2BAE, 0x2BAF, 0x2BAF, 0x2BCF, 0x2BCF, 0x33EF, 0x33EF, 0x3C0F, 0x3C10, 0x3C10, 0x3C30, 0x3C50, 0x4450, // 0x03D0 (976) +0x4430, 0x4C71, 0x4C71, 0x5471, 0x9E38, 0xE7FF, 0xEFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFDE, 0xFFDE, 0xFFFF, // 0x03E0 (992) +0xFFFE, 0xFFFE, 0xFFDD, 0xF7DC, 0xFFFC, 0xFFFC, 0xFFDD, 0xFFDD, 0xFFFE, 0xFFFE, 0xFFFD, 0xF7DC, 0xF7DC, 0xF7BC, 0xF7DC, 0xFFDD, // 0x03F0 (1008) +0xFFDE, 0xFFFF, 0xFFDE, 0xFFDE, 0xFFFE, 0xEF7C, 0xD6B8, 0xF7BD, 0xFFFE, 0xFFDE, 0xFFFF, 0xFFFF, 0xF7FF, 0xE7DF, 0x95B6, 0x438E, // 0x0400 (1024) +0x334C, 0x336D, 0x2B4C, 0x2B4C, 0x234C, 0x234C, 0x234B, 0x232B, 0x232A, 0x232A, 0x230A, 0x230A, 0x2309, 0x1AE9, 0x1AC9, 0x12C8, // 0x0410 (1040) +0x338E, 0x2B8D, 0x2B8D, 0x2BAE, 0x2BAE, 0x2BCE, 0x2BCF, 0x33CF, 0x33EF, 0x33EF, 0x3C0F, 0x3C0F, 0x3C2F, 0x4430, 0x4450, 0x4450, // 0x0420 (1056) +0x4C70, 0x4C30, 0x8554, 0xDF7D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFE, 0xFFFD, 0xE73A, 0xDED9, 0xF79C, 0xF7BD, 0xF7DE, // 0x0430 (1072) +0xFFDE, 0xFFFD, 0xF7BC, 0xEF7A, 0xF79A, 0xF7DB, 0xF7BB, 0xF77B, 0xF79C, 0xFFDC, 0xF7BC, 0xEF5A, 0xEF7A, 0xF79A, 0xF79A, 0xF79B, // 0x0440 (1088) +0xFF9C, 0xFFDE, 0xFFFE, 0xF7DD, 0xF7FD, 0xE77B, 0x9D32, 0xAD93, 0xFFFD, 0xFFFE, 0xFFFE, 0xFFFF, 0xF7DE, 0xFFFF, 0xEFFF, 0x9595, // 0x0450 (1104) +0x3B6D, 0x334C, 0x338C, 0x2B4B, 0x2B4B, 0x234B, 0x2B8B, 0x234A, 0x234A, 0x232A, 0x2329, 0x2329, 0x2309, 0x2308, 0x1AE8, 0x1AE8, // 0x0460 (1120) +0x33AE, 0x338D, 0x2BAD, 0x33AD, 0x2BCE, 0x2BCE, 0x33EE, 0x33EE, 0x340F, 0x3C0F, 0x3C0F, 0x3C2F, 0x442F, 0x444F, 0x444F, 0x444F, // 0x0470 (1136) +0x4C2F, 0x8DB5, 0xD77C, 0xFFFF, 0xFFFF, 0xFFDE, 0xFFFF, 0xFFFF, 0xFFFE, 0xFFFD, 0xDEF8, 0x9CAF, 0xAD51, 0xEF5A, 0xEFBC, 0xEFBC, // 0x0480 (1152) +0xFFDD, 0xFFFD, 0xF7BB, 0xEF79, 0xEF79, 0xEF79, 0xEF59, 0xEF7A, 0xEF5A, 0xEF7B, 0xEF5A, 0xE718, 0xE738, 0xE738, 0xE758, 0xEF59, // 0x0490 (1168) +0xEF7B, 0xF79C, 0xFFFD, 0xFFFD, 0xF7DD, 0xF7DD, 0xBE16, 0x8C6F, 0xE71A, 0xFFFE, 0xFFDE, 0xFFDE, 0xF79D, 0xFFFE, 0xFFFF, 0xF7FF, // 0x04A0 (1184) +0x9E16, 0x438C, 0x3B8B, 0x336B, 0x336A, 0x2B6A, 0x2B6A, 0x2B49, 0x2B49, 0x2B49, 0x2B28, 0x2B28, 0x2B28, 0x2308, 0x2307, 0x22E7, // 0x04B0 (1200) +0x3BCE, 0x33AD, 0x33AD, 0x33CE, 0x33CE, 0x33EE, 0x33EE, 0x340E, 0x3C0E, 0x3C0F, 0x3C2E, 0x442F, 0x444F, 0x444F, 0x446F, 0x4C4E, // 0x04C0 (1216) +0x95F5, 0xE7FE, 0xF7FE, 0xF7FD, 0xFFFE, 0xFFDE, 0xFFDE, 0xFFDE, 0xFF9C, 0xFFDC, 0xB592, 0x6B48, 0xAD71, 0xE718, 0xE739, 0xF79B, // 0x04D0 (1232) +0xF7BD, 0xFFBD, 0xF79B, 0xEF79, 0xE738, 0xDED6, 0xDED7, 0xEF5A, 0xEF5A, 0xEF3A, 0xE719, 0xDEF8, 0xE718, 0xDED6, 0xDED7, 0xE718, // 0x04E0 (1248) +0xDF19, 0xE75A, 0xF7BC, 0xFFDD, 0xFFDD, 0xFFBD, 0xE71A, 0x8C4F, 0xAD33, 0xFFDE, 0xFFFE, 0xFFDE, 0xEF5C, 0xF7BD, 0xFFFE, 0xFFFE, // 0x04F0 (1264) +0xEFFF, 0xB6F9, 0x438B, 0x3B6A, 0x3B8A, 0x3369, 0x3369, 0x3369, 0x2B48, 0x2B48, 0x2B48, 0x2B27, 0x2B27, 0x2B27, 0x2306, 0x2306, // 0x0500 (1280) +0x3BCD, 0x33CD, 0x33CD, 0x33ED, 0x3BED, 0x3C0D, 0x3C0D, 0x3C2D, 0x3C2D, 0x3C4D, 0x3C6D, 0x446E, 0x4C6E, 0x4C4E, 0x5C4F, 0xAE37, // 0x0510 (1296) +0xFFFF, 0xFFDE, 0xFFFD, 0xF7DD, 0xF7BC, 0xF7BC, 0xFFDC, 0xF77B, 0xF779, 0xE738, 0x94AE, 0x6B69, 0xB5B3, 0xDEF9, 0xDF39, 0xE77A, // 0x0520 (1312) +0xEF7A, 0xEF7A, 0xE718, 0xDED6, 0xCE75, 0xD6B6, 0xCE75, 0xDED7, 0xEF7A, 0xEF7A, 0xDEF8, 0xDED8, 0xD6B7, 0xCE55, 0xCE54, 0xD695, // 0x0530 (1328) +0xD6B6, 0xD6F7, 0xE739, 0xEF7B, 0xF7DC, 0xEFBC, 0xD6FA, 0x8C6F, 0x8C4D, 0xE6F8, 0xFFFE, 0xFFFE, 0xFFDE, 0xE73B, 0xFFDD, 0xFFDE, // 0x0540 (1344) +0xFFDF, 0xFFFF, 0xA5F5, 0x4B8A, 0x3B89, 0x3BC9, 0x3388, 0x3388, 0x3388, 0x3368, 0x2B68, 0x2B67, 0x2B47, 0x2B46, 0x2B25, 0x2B25, // 0x0550 (1360) +0x3BEC, 0x3BEC, 0x3BEC, 0x3C0C, 0x3C0D, 0x3C0D, 0x442D, 0x444D, 0x4C8D, 0x444D, 0x448D, 0x4C8E, 0x546E, 0x6CD0, 0xC73A, 0xF7FF, // 0x0560 (1376) +0xF7FE, 0xFFFE, 0xFFFD, 0xEF7B, 0xEF7B, 0xFFDC, 0xEF7A, 0xE719, 0xEF59, 0xD695, 0x840B, 0x736A, 0xBDD3, 0xD6D8, 0xDF18, 0xE77A, // 0x0570 (1392) +0xEF9A, 0xDF18, 0xDF17, 0xD6B5, 0xC633, 0xCE54, 0xBE13, 0xCE54, 0xCE96, 0xDF18, 0xD6D7, 0xD6B7, 0xC634, 0xBDF3, 0xBDF2, 0xBDF3, // 0x0580 (1408) +0xC634, 0xCE76, 0xCE97, 0xD6B8, 0xE77B, 0xE77B, 0xD6F9, 0x94D1, 0x6329, 0xC615, 0xFFDD, 0xF7BD, 0xFFFE, 0xEF9C, 0xDEFA, 0xFFDD, // 0x0590 (1424) +0xFFFF, 0xF7DE, 0xF7FE, 0x8D91, 0x43C9, 0x3BC8, 0x3BC7, 0x3BA7, 0x3387, 0x3387, 0x3387, 0x3367, 0x3366, 0x2B45, 0x2B45, 0x2B24, // 0x05A0 (1440) +0x440C, 0x440B, 0x440B, 0x440C, 0x442C, 0x442C, 0x444C, 0x4C4C, 0x444B, 0x4CAD, 0x4C6C, 0x546D, 0x5C6D, 0xBF19, 0xF7FE, 0xF7FE, // 0x05B0 (1456) +0xFFFE, 0xFFBD, 0xF79B, 0xEF7A, 0xF79B, 0xF79B, 0xE6F8, 0xEF39, 0xEF58, 0xC613, 0x7369, 0x738A, 0xB5B3, 0xD6B7, 0xDEF8, 0xD6F7, // 0x05C0 (1472) +0xD6D6, 0xCE95, 0xCE95, 0xCE94, 0xC632, 0xC633, 0xBE12, 0xB5B1, 0xC654, 0xCE75, 0xCE75, 0xCE96, 0xBE14, 0xB591, 0xB5B1, 0xBDD2, // 0x05D0 (1488) +0xC634, 0xCE76, 0xCE97, 0xCE97, 0xDF19, 0xDF3A, 0xDF3A, 0xB5D5, 0x6B8A, 0xA510, 0xF7BC, 0xFFFE, 0xDF1A, 0xE73B, 0xD6D9, 0xE73B, // 0x05E0 (1504) +0xFFDD, 0xF7DD, 0xEFFD, 0x95D2, 0x43A8, 0x43E7, 0x3BE7, 0x3BA6, 0x3BA6, 0x3BA6, 0x33A6, 0x3385, 0x3385, 0x3364, 0x3344, 0x3343, // 0x05F0 (1520) +0x4C2B, 0x4C0B, 0x442B, 0x442B, 0x444B, 0x446B, 0x4C6B, 0x4C8C, 0x4C8B, 0x54AC, 0x54CC, 0x5C8C, 0x7D30, 0xE7FC, 0xF7FD, 0xFFBC, // 0x0600 (1536) +0xF79C, 0xF77B, 0xDEF8, 0xE718, 0xEF59, 0xE719, 0xE6F8, 0xF779, 0xEF38, 0xBDD2, 0x6B48, 0x840C, 0xC614, 0xD6D7, 0xDF18, 0xCEB6, // 0x0610 (1552) +0xC675, 0xC654, 0xC633, 0xBE12, 0xBDF1, 0xBDD1, 0xBE12, 0xB5B1, 0xBDF2, 0xBE13, 0xBE13, 0xBDF3, 0xAD91, 0xAD71, 0xB5B1, 0xB5B1, // 0x0620 (1568) +0xB5F3, 0xC655, 0xCE76, 0xC656, 0xC677, 0xCED9, 0xD6F9, 0xADB4, 0x6349, 0x8C6D, 0xDEF9, 0xFFFE, 0xD6D9, 0xCEB8, 0xCE97, 0xCE77, // 0x0630 (1584) +0xDF1A, 0xDF1A, 0xE7DB, 0x852F, 0x4BE8, 0x4C07, 0x3BC5, 0x43E6, 0x43C5, 0x43C5, 0x3BA5, 0x3BA5, 0x3BA4, 0x3B83, 0x3B63, 0x3362, // 0x0640 (1600) +0x544B, 0x4C4A, 0x4C4A, 0x4C6B, 0x4C8B, 0x4C8B, 0x4C8B, 0x54AB, 0x54CB, 0x4C8A, 0x54CB, 0x5CAC, 0x7D0E, 0xCF37, 0xEFBB, 0xE739, // 0x0650 (1616) +0xE6F8, 0xDED7, 0xD675, 0xDED7, 0xDED7, 0xD696, 0xE6F8, 0xF779, 0xE6F7, 0xB570, 0x6307, 0x948D, 0xCE75, 0xD6D7, 0xD6D7, 0xCE96, // 0x0660 (1632) +0xC654, 0xC654, 0xC653, 0xBDF2, 0xB5B1, 0xB5B1, 0xB5D2, 0xB5D2, 0xAD91, 0xAD91, 0xADB2, 0xAD71, 0x9D10, 0xA530, 0xAD71, 0xAD71, // 0x0670 (1648) +0x9D30, 0xB5D3, 0xC635, 0xD6B8, 0xCEB8, 0xCED9, 0xCED8, 0xBE36, 0x5AE7, 0x7BEB, 0xC656, 0xF7BD, 0xDF3A, 0xC677, 0xBE15, 0xBDF5, // 0x0680 (1664) +0xC636, 0xC656, 0xE7FB, 0x8DB0, 0x4BE7, 0x4C06, 0x4405, 0x4C05, 0x43E5, 0x43C4, 0x43C4, 0x43C4, 0x3BA4, 0x3BA3, 0x3B82, 0x3B62, // 0x0690 (1680) +0x546A, 0x546A, 0x4C6A, 0x4C8A, 0x4CAA, 0x4CAA, 0x54AA, 0x54CA, 0x54EA, 0x54EA, 0x54CA, 0x64EB, 0x6CCC, 0xBEF5, 0xE778, 0xC634, // 0x06A0 (1696) +0xD675, 0xCE34, 0xCE54, 0xD695, 0xCE75, 0xD696, 0xDED7, 0xEF79, 0xDEB6, 0xA50F, 0x6327, 0x94AE, 0xC655, 0xCE96, 0xC675, 0xC654, // 0x06B0 (1712) +0xC654, 0xC654, 0xCE75, 0xBDD3, 0xB5B2, 0xC614, 0xB591, 0xAD50, 0xAD70, 0xA550, 0xAD71, 0xAD71, 0xA530, 0x9D10, 0xA510, 0x9CCF, // 0x06C0 (1728) +0x94EF, 0x9CEF, 0x9CF0, 0xC615, 0xDF39, 0xE77B, 0xCED9, 0xBE36, 0x73CB, 0x73CB, 0xBE15, 0xF7BC, 0xDF5B, 0xBE57, 0xB5F4, 0xADB3, // 0x06D0 (1744) +0xAD93, 0xB5F4, 0xD778, 0x95CF, 0x4BE6, 0x4C26, 0x4C25, 0x4C04, 0x4BE4, 0x4BE4, 0x43E4, 0x43C4, 0x43C3, 0x43A3, 0x3BA2, 0x3B82, // 0x06E0 (1760) +0x5C89, 0x5489, 0x5489, 0x54A9, 0x54A9, 0x54A9, 0x5CC9, 0x5CC9, 0x5CE9, 0x5CE9, 0x5CE9, 0x64EA, 0x74EB, 0xAE51, 0xD736, 0xBE12, // 0x06F0 (1776) +0xBDD2, 0xC613, 0xCE34, 0xC5F2, 0xC634, 0xD6B6, 0xE718, 0xE718, 0xD6B6, 0x9CCE, 0x6B68, 0x9CCF, 0xBDF4, 0xC656, 0xC696, 0xCE96, // 0x0700 (1792) +0xD6F6, 0xCE75, 0xBDF3, 0xAD71, 0xA530, 0xB5B2, 0xAD71, 0x9CCE, 0x9CEE, 0xA52F, 0xAD91, 0xA52F, 0x9D0F, 0x9D0F, 0x94AE, 0x7BEB, // 0x0710 (1808) +0x6BA9, 0x6B8A, 0x7BEC, 0x9CF0, 0xC636, 0xDF3A, 0xE77B, 0xCE97, 0x846D, 0x738A, 0xB593, 0xEF7B, 0xE75B, 0xC677, 0xA593, 0xA552, // 0x0720 (1824) +0x9D11, 0xA591, 0xC715, 0x74EB, 0x5446, 0x5445, 0x4C03, 0x5424, 0x4C03, 0x4C03, 0x4C03, 0x4BE3, 0x43E3, 0x43C3, 0x43A2, 0x43A2, // 0x0730 (1840) +0x5CA8, 0x5C88, 0x5488, 0x5CA8, 0x5CC8, 0x5CC8, 0x5CC8, 0x64E8, 0x5D08, 0x6509, 0x5CE8, 0x6D0A, 0x6CEA, 0x95CE, 0xD735, 0xADB0, // 0x0740 (1856) +0xAD70, 0xBDB2, 0xB591, 0xB591, 0xC613, 0xCE55, 0xE718, 0xDF18, 0xD695, 0x8C4C, 0x6B48, 0x9CCF, 0xB5D3, 0xC655, 0xD6D7, 0xE759, // 0x0750 (1872) +0xD6F7, 0xC634, 0xA530, 0xA530, 0x94AE, 0x9CAE, 0xA52F, 0x9CEE, 0x94CD, 0xA50F, 0xAD90, 0xA52F, 0x94EE, 0x8C8D, 0x842C, 0x73AA, // 0x0760 (1888) +0x6348, 0x4A65, 0x6B29, 0x946E, 0xA532, 0xB5F5, 0xD6F9, 0xCE97, 0x94CF, 0x6349, 0xA552, 0xEF7C, 0xDF3A, 0xC677, 0xAD93, 0x9D11, // 0x0770 (1904) +0x8CCF, 0xADD1, 0x9DF0, 0x6468, 0x5466, 0x5444, 0x5443, 0x5443, 0x5423, 0x5423, 0x4C03, 0x4C03, 0x43E3, 0x43E3, 0x43C2, 0x43A2, // 0x0780 (1920) +0x5CA7, 0x5CA7, 0x5CA7, 0x5CC8, 0x5CC8, 0x64C8, 0x64E8, 0x64E8, 0x6508, 0x64E7, 0x6D08, 0x6D28, 0x6D09, 0x7D6B, 0xA691, 0xAE71, // 0x0790 (1936) +0xA54F, 0xA50E, 0xA52F, 0xB571, 0xBDD3, 0xD676, 0xDED8, 0xE718, 0xC633, 0x7388, 0x6B68, 0x9D0F, 0xBE14, 0xCEB7, 0xE75A, 0xDF39, // 0x07A0 (1952) +0xC654, 0xA52F, 0x8C4C, 0x73A9, 0x73A8, 0x840A, 0x8C8C, 0x948D, 0x94AD, 0xA510, 0xAD91, 0xAD71, 0xA531, 0x8C6E, 0x8C2C, 0x7389, // 0x07B0 (1968) +0x52A6, 0x18E0, 0x2103, 0x39E7, 0x7BEE, 0xAD74, 0xA553, 0xB5D3, 0x8CAC, 0x52C5, 0x842C, 0xDEF9, 0xF7BE, 0xD69A, 0xA553, 0x8CEF, // 0x07C0 (1984) +0x8D2E, 0xAE71, 0x74EA, 0x5C46, 0x5C65, 0x5C64, 0x5443, 0x5C63, 0x5443, 0x5423, 0x5423, 0x4C03, 0x4BE3, 0x4BC3, 0x43C2, 0x43A2, // 0x07D0 (2000) +0x64C6, 0x64C6, 0x64C7, 0x64C7, 0x64E7, 0x64E7, 0x6507, 0x6507, 0x6507, 0x6D27, 0x6D27, 0x6D27, 0x6D28, 0x7528, 0x8DCC, 0xAE70, // 0x07E0 (2016) +0xB5D0, 0x94AC, 0xA52E, 0xA52F, 0xB592, 0xDEB7, 0xE719, 0xDED7, 0xBDD2, 0x6326, 0x6B67, 0xA52F, 0xC675, 0xD6F8, 0xD718, 0xBE15, // 0x07F0 (2032) +0xA552, 0x8C6E, 0x5AE8, 0x41E3, 0x62E7, 0x6B48, 0x842B, 0x948D, 0x9D0F, 0xAD71, 0xB5D3, 0xB5B2, 0xAD92, 0xA530, 0x9CCE, 0x7BCB, // 0x0800 (2048) +0x2962, 0x0840, 0x1081, 0x0000, 0x0860, 0x2984, 0x8C90, 0x9D10, 0x7C2A, 0x4AA4, 0x5B27, 0xBDF4, 0xF7BD, 0xE73B, 0xA552, 0x8CCE, // 0x0810 (2064) +0x9DF0, 0x856C, 0x6487, 0x5C66, 0x5C65, 0x5C64, 0x5C84, 0x5443, 0x5443, 0x5443, 0x5423, 0x4C03, 0x4BE3, 0x4BE3, 0x4BC2, 0x43A1, // 0x0820 (2080) +0x64E5, 0x64C5, 0x64C5, 0x64E6, 0x64E6, 0x6506, 0x6D06, 0x6D26, 0x6D26, 0x6D46, 0x6D46, 0x6D46, 0x7547, 0x7547, 0x7527, 0x960C, // 0x0830 (2096) +0xB650, 0xA56E, 0x94CC, 0x9CED, 0xB5B2, 0xDED7, 0xEF39, 0xDED7, 0xA50F, 0x5AE5, 0x73A8, 0x9D0E, 0xB5D2, 0xC655, 0xA551, 0x9D11, // 0x0840 (2112) +0x842E, 0x39E6, 0x18C1, 0x1060, 0x3162, 0x5265, 0x83CB, 0xA4F0, 0xAD31, 0xBDD3, 0xC635, 0xC635, 0xB5D3, 0xAD92, 0xA571, 0x9CF0, // 0x0850 (2128) +0x52A7, 0x1080, 0x0020, 0x0000, 0x0860, 0x4A87, 0xA552, 0x9D10, 0x844B, 0x52E5, 0x5B07, 0x9CF0, 0xE73A, 0xF7BC, 0xADD3, 0x9D90, // 0x0860 (2144) +0x95CD, 0x64A7, 0x6485, 0x64A5, 0x64A4, 0x5C63, 0x5CA4, 0x5C63, 0x5463, 0x5444, 0x5423, 0x5403, 0x4BE3, 0x4BE2, 0x4BC1, 0x4BA1, // 0x0870 (2160) +0x6CE5, 0x6CC5, 0x6CC5, 0x6CE5, 0x6D05, 0x6D06, 0x6D25, 0x6D45, 0x7546, 0x6D45, 0x7565, 0x7565, 0x7565, 0x7D87, 0x7546, 0x8568, // 0x0880 (2176) +0x95AB, 0xB62F, 0x9D4C, 0x9D4D, 0xBE12, 0xD696, 0xE718, 0xD676, 0x8C6C, 0x5AC5, 0x73A8, 0x8C6C, 0x9D0F, 0xA530, 0x94CE, 0x4225, // 0x0890 (2192) +0x0860, 0x0020, 0x0020, 0x18C0, 0x18A0, 0x39A3, 0x8C2D, 0xBDB3, 0xBDF4, 0xCE56, 0xCE98, 0xD6F9, 0xCED8, 0xC698, 0xBE36, 0xADB4, // 0x08A0 (2208) +0x94D0, 0x3A06, 0x2984, 0x31A5, 0x52C8, 0x8C8F, 0xA572, 0x9D10, 0x844B, 0x5B27, 0x7C0B, 0x9D10, 0xB5D3, 0xF7FC, 0xC6B6, 0x9DB0, // 0x08B0 (2224) +0x74E8, 0x64A5, 0x6CE5, 0x64A5, 0x64A4, 0x5C84, 0x5C84, 0x5C84, 0x5C64, 0x5C64, 0x5423, 0x5423, 0x5402, 0x4BE2, 0x4BC1, 0x4BC1, // 0x08C0 (2240) +0x6CE5, 0x6CC4, 0x6CE5, 0x6CE5, 0x7506, 0x7526, 0x7546, 0x7546, 0x7565, 0x7545, 0x7D65, 0x7565, 0x7545, 0x7D65, 0x7D86, 0x7D67, // 0x08D0 (2256) +0x8548, 0x9DCB, 0xB62E, 0xA5AD, 0xBE11, 0xDED6, 0xDEB6, 0xBDB2, 0x842B, 0x6B46, 0x73A8, 0x844B, 0x9D0E, 0xAD70, 0xBDF2, 0x73AA, // 0x08E0 (2272) +0x1921, 0x0860, 0x0000, 0x18A0, 0x2941, 0x734A, 0xAD52, 0xBDD4, 0xDEF9, 0xE75B, 0xE73C, 0xE77D, 0xE77D, 0xEF9E, 0xDF3C, 0xCEB9, // 0x08F0 (2288) +0xD6B8, 0x94D1, 0x73CD, 0x6BAC, 0x846E, 0x9D30, 0x9D51, 0xA571, 0x848D, 0x6369, 0x8C8E, 0xC676, 0x950F, 0xD738, 0xD758, 0x850D, // 0x0900 (2304) +0x64A6, 0x6D05, 0x64E5, 0x5CA4, 0x64A4, 0x64A4, 0x5C84, 0x5C84, 0x5C64, 0x5C64, 0x5C23, 0x5423, 0x5403, 0x53E2, 0x53C2, 0x4BC1, // 0x0910 (2320) +0x74E5, 0x74E5, 0x74E5, 0x74E5, 0x7526, 0x7526, 0x7546, 0x7546, 0x7546, 0x7D66, 0x7D66, 0x7D66, 0x7D86, 0x7D65, 0x85A6, 0x85A6, // 0x0920 (2336) +0x85A7, 0x8D88, 0x9DEB, 0xAE0D, 0xBE30, 0xDEF5, 0xBDD2, 0xA4EE, 0x842A, 0x7BC8, 0x7C09, 0x8C8C, 0x9D2F, 0xADB1, 0xAD90, 0xADB1, // 0x0930 (2352) +0x844D, 0x52A7, 0x52A6, 0x52A6, 0x6B49, 0xAD72, 0xD677, 0xE73A, 0xF79D, 0xF7DE, 0xF7DF, 0xF7BF, 0xEF9F, 0xF7BF, 0xF7BF, 0xF7DE, // 0x0940 (2368) +0xEF9C, 0xD6B8, 0xA593, 0x9511, 0x9510, 0xA591, 0xA571, 0x9D71, 0x8CEF, 0x6BCB, 0x9510, 0xDF79, 0x8D2E, 0xA5F0, 0xDFD8, 0x7D0B, // 0x0950 (2384) +0x6CC6, 0x6D05, 0x64C4, 0x64C5, 0x64C5, 0x64A5, 0x6484, 0x6484, 0x6464, 0x5C64, 0x5C23, 0x5C23, 0x5C03, 0x53E2, 0x53C2, 0x53C2, // 0x0960 (2400) +0x74E5, 0x74E5, 0x7505, 0x7506, 0x7526, 0x7D46, 0x7D46, 0x7D46, 0x7D66, 0x7D67, 0x7D66, 0x8586, 0x85A7, 0x8586, 0x85A5, 0x85A6, // 0x0970 (2416) +0x7D85, 0x85C7, 0x8D87, 0xAE2C, 0xBE50, 0xBE31, 0xA50E, 0xA50E, 0x94AC, 0x844A, 0x73E8, 0x844A, 0xA56F, 0xADB1, 0xB5D1, 0x9D2F, // 0x0980 (2432) +0xA530, 0x9CCF, 0x842C, 0x8C4D, 0xB5D3, 0xD697, 0xE73A, 0xF7BD, 0xF7BE, 0xF7DF, 0xF7DF, 0xF7FF, 0xFFFF, 0xFFDF, 0xF7BE, 0xFFFF, // 0x0990 (2448) +0xEFBD, 0xE73B, 0xD6FA, 0xB5D5, 0xA572, 0xA572, 0xA592, 0x9D72, 0x848E, 0x7C2D, 0xA5D3, 0xD758, 0x8D2C, 0x856B, 0xC753, 0x854A, // 0x09A0 (2464) +0x6D06, 0x6CE5, 0x6CC5, 0x6CE5, 0x6CC5, 0x64A5, 0x6484, 0x6484, 0x6464, 0x6444, 0x5C23, 0x5C23, 0x5C03, 0x53E3, 0x53C3, 0x53C3, // 0x09B0 (2480) +0x7505, 0x7505, 0x7525, 0x7D26, 0x7D26, 0x7D46, 0x7D46, 0x7D67, 0x8587, 0x8587, 0x8587, 0x85A7, 0x8586, 0x85C6, 0x8DC6, 0x8DC6, // 0x09C0 (2496) +0x85E6, 0x8DE6, 0x8DC7, 0x9589, 0xBE6F, 0xB5CF, 0xAD6F, 0xBDD1, 0x9D0D, 0x8CAB, 0x7C29, 0x846B, 0xA56F, 0xADD1, 0xADB1, 0xA570, // 0x09D0 (2512) +0xA52F, 0xA50F, 0x9CEF, 0xAD71, 0xC655, 0xD6B7, 0xE75B, 0xF7DD, 0xF7DE, 0xF7FF, 0xF7FF, 0xF7DF, 0xFFFF, 0xFFFF, 0xFFBE, 0xFFDE, // 0x09E0 (2528) +0xFFDF, 0xF7BE, 0xDF3C, 0xCE99, 0xADD5, 0xADB4, 0xADD4, 0xA593, 0x84AF, 0x7C6E, 0xB655, 0xDFB9, 0x8D8B, 0x7D28, 0x7D28, 0x7528, // 0x09F0 (2544) +0x7527, 0x7506, 0x6CE6, 0x64A5, 0x6CA5, 0x6CA5, 0x6484, 0x6484, 0x6464, 0x6464, 0x5C43, 0x5C23, 0x5C03, 0x5BE3, 0x53C3, 0x53C3, // 0x0A00 (2560) +0x7D06, 0x7D06, 0x7D07, 0x8527, 0x8547, 0x8547, 0x8567, 0x8567, 0x8DA8, 0x8DA8, 0x8DA8, 0x8DA8, 0x8DA7, 0x8DC8, 0x95C7, 0x95C8, // 0x0A10 (2576) +0x95E8, 0x8DC8, 0x95E8, 0x95A9, 0xB68F, 0xDF96, 0xE7B9, 0xBE14, 0xA590, 0x9D2E, 0x8CAB, 0x94CC, 0x9D4E, 0xA590, 0xADD2, 0xB5D2, // 0x0A20 (2592) +0xA570, 0xAD50, 0xAD71, 0xC614, 0xCE76, 0xDF19, 0xEF9C, 0xF7DD, 0xEFBD, 0xEF9D, 0xF7FE, 0xF7DE, 0xE77D, 0xEF9D, 0xF7DE, 0xEFBE, // 0x0A30 (2608) +0xE75D, 0xF7DF, 0xE77D, 0xC678, 0xB615, 0xB614, 0xB635, 0x9D93, 0x84EF, 0x8D0F, 0xC6D8, 0xCF57, 0x8D6A, 0x7D47, 0x7527, 0x7506, // 0x0A40 (2624) +0x6D06, 0x6D06, 0x6CE5, 0x6CE5, 0x6CC5, 0x6CA5, 0x6484, 0x6465, 0x6465, 0x6465, 0x6445, 0x6424, 0x6404, 0x5BE4, 0x5BC3, 0x53C2, // 0x0A50 (2640) +0x7D27, 0x7D07, 0x7D07, 0x7D27, 0x8547, 0x8568, 0x8D88, 0x8D88, 0x8DA8, 0x8DA8, 0x8DC8, 0x95C8, 0x95C8, 0x95C8, 0x95E8, 0x95E8, // 0x0A60 (2656) +0x95E8, 0x95E8, 0x95C8, 0x95CA, 0xBE71, 0xF7FA, 0xEFDA, 0xCE96, 0xADB0, 0xA56F, 0x9D2E, 0xA54F, 0xA58F, 0xA590, 0xB5F2, 0xB613, // 0x0A70 (2672) +0xB5D2, 0xB5B2, 0xB5F3, 0xB5F3, 0xD6B7, 0xE75A, 0xDF19, 0xDEFA, 0xDF1A, 0xDEFA, 0xADD5, 0x9D33, 0x8C91, 0x94F2, 0xADB5, 0xC658, // 0x0A80 (2688) +0xDF3C, 0xEF7D, 0xEFBE, 0xCEDA, 0xA5B3, 0xBE76, 0xB615, 0xA5D4, 0x8D10, 0xA5D3, 0xCF59, 0xBED5, 0x8D8A, 0x7D27, 0x7D47, 0x7D47, // 0x0A90 (2704) +0x7527, 0x6D06, 0x6CE5, 0x6CC5, 0x6CC5, 0x6CA5, 0x6CA5, 0x6C85, 0x6C85, 0x6C65, 0x6C65, 0x6445, 0x6424, 0x5C04, 0x5BE3, 0x5BC3, // 0x0AA0 (2720) +0x8528, 0x8528, 0x8507, 0x8527, 0x8548, 0x8D68, 0x8D88, 0x8DA9, 0x8DA8, 0x8DA8, 0x95C8, 0x95C8, 0x95C8, 0x95E8, 0x95E8, 0x95E8, // 0x0AB0 (2736) +0x95E7, 0x95E8, 0x95C9, 0xAE4E, 0xE7D9, 0xF7FD, 0xF7DC, 0xCE95, 0xB5D1, 0xADB0, 0xAD70, 0xA54F, 0x9D4E, 0xA58F, 0xB612, 0xBE54, // 0x0AC0 (2752) +0xC654, 0xC654, 0xB5F2, 0xBE14, 0xCEB6, 0xDF39, 0xDF19, 0xD6F9, 0xB5F5, 0x7C0F, 0x5B0B, 0x5B2B, 0x636C, 0x73AD, 0x73EE, 0x8C91, // 0x0AD0 (2768) +0xBE16, 0xD6FA, 0xEFDE, 0xE79D, 0xBE56, 0xB615, 0xADF5, 0xADF5, 0x9D92, 0xC6D7, 0xE7DB, 0xC6F5, 0x95AB, 0x7D48, 0x7D47, 0x7527, // 0x0AE0 (2784) +0x7527, 0x6D06, 0x6CE5, 0x6CC5, 0x6CC5, 0x6CA5, 0x6CA5, 0x6CA5, 0x6C85, 0x6C65, 0x6C45, 0x6445, 0x6425, 0x6424, 0x6404, 0x5BE3, // 0x0AF0 (2800) +0x8528, 0x8528, 0x8528, 0x8548, 0x8D69, 0x8D69, 0x8D69, 0x8D89, 0x8DA9, 0x95A9, 0x95C9, 0x95C9, 0x95C8, 0x95E9, 0x95E8, 0x9E08, // 0x0B00 (2816) +0x9E08, 0x9DC8, 0x9DEC, 0xDF97, 0xFFFD, 0xFFFF, 0xF7DC, 0xD6D7, 0xB5F2, 0xADB0, 0xA570, 0xA570, 0x9D4F, 0xA590, 0xB612, 0xBE53, // 0x0B10 (2832) +0xBE53, 0xBE13, 0xBE13, 0xBE34, 0xDF18, 0xDF39, 0xE77A, 0xCE77, 0x94B0, 0x6B6C, 0x632B, 0x5289, 0x4A68, 0x4A68, 0x52A9, 0x7BEE, // 0x0B20 (2848) +0x73ED, 0xBE37, 0xDF5C, 0xE79D, 0xCF19, 0xB636, 0xB636, 0xA5D4, 0xAE14, 0xCF38, 0xDFB9, 0xC714, 0x95AB, 0x8569, 0x7D67, 0x7547, // 0x0B30 (2864) +0x7527, 0x6D06, 0x6CE5, 0x6CC5, 0x6CC5, 0x6CA5, 0x6CA5, 0x74A6, 0x6C85, 0x6C66, 0x6C65, 0x6C46, 0x6C45, 0x6C25, 0x6404, 0x63E4, // 0x0B40 (2880) +0x8528, 0x8528, 0x8529, 0x8D49, 0x8D49, 0x8D49, 0x8D69, 0x8D69, 0x8D89, 0x9589, 0x95A9, 0x95C9, 0x95E9, 0x95E9, 0x9DE9, 0x9DE9, // 0x0B50 (2896) +0x95C8, 0x9DCB, 0xCF15, 0xFFFD, 0xF7FE, 0xFFFF, 0xF7FD, 0xE739, 0xBE33, 0xAD90, 0xA54E, 0xA58F, 0xA590, 0xA591, 0xADF1, 0xB612, // 0x0B60 (2912) +0xBE12, 0xB5D2, 0xC654, 0xD6D7, 0xDEF8, 0xD6D8, 0xC656, 0xBDF5, 0x630A, 0x5289, 0x2102, 0x0840, 0x0820, 0x0800, 0x0820, 0x39C6, // 0x0B70 (2928) +0x634B, 0xA594, 0xC679, 0xE77D, 0xDF7B, 0xCEF9, 0xBE97, 0xADF4, 0xBE96, 0xCF17, 0xC715, 0xAE70, 0x8D8A, 0x8568, 0x7D48, 0x7D47, // 0x0B80 (2944) +0x6D27, 0x6CE7, 0x6CE6, 0x6CC5, 0x6CC5, 0x6CA5, 0x74A5, 0x74A6, 0x7486, 0x7466, 0x7466, 0x7466, 0x7466, 0x6C46, 0x6C25, 0x6405, // 0x0B90 (2960) +0x8508, 0x8508, 0x8D29, 0x8D29, 0x8D49, 0x8D49, 0x8D49, 0x8D69, 0x9589, 0x9589, 0x95A9, 0x9DCA, 0x95C9, 0x9DE9, 0x95E9, 0x95C9, // 0x0BA0 (2976) +0x9DAB, 0xCED3, 0xF7FD, 0xFFFF, 0xFFFF, 0xFFFE, 0xFFFD, 0xDF19, 0xC674, 0xB5D1, 0xA56E, 0x9D2D, 0x952F, 0xA570, 0xA5B1, 0xADD1, // 0x0BB0 (2992) +0xBE13, 0xC655, 0xD6D7, 0xD6D7, 0xD6D7, 0xB5D4, 0xB5B4, 0xB5B4, 0x738C, 0x3185, 0x0820, 0x0000, 0x0000, 0x0000, 0x0000, 0x18C2, // 0x0BC0 (3008) +0x5B4B, 0x9512, 0xADD6, 0xD71C, 0xDF9C, 0xC6F9, 0xC6F8, 0xAE35, 0xBEB6, 0xC6F5, 0xB6D2, 0x9DED, 0x95CB, 0x8589, 0x7D68, 0x7D48, // 0x0BD0 (3024) +0x7527, 0x6CE7, 0x64C6, 0x64A6, 0x6CA6, 0x6CC6, 0x74A6, 0x74A7, 0x7486, 0x7487, 0x7467, 0x7467, 0x7467, 0x7446, 0x6C26, 0x6C05, // 0x0BE0 (3040) +0x84E8, 0x84E8, 0x8508, 0x8D29, 0x8D29, 0x8D49, 0x8D4A, 0x8D4A, 0x956A, 0x958A, 0x95AA, 0x95CA, 0x95C9, 0x95C9, 0x95E9, 0x9DCB, // 0x0BF0 (3056) +0xC6D3, 0xFFFD, 0xFFFF, 0xFFFF, 0xFFDE, 0xFFFE, 0xF7DB, 0xDF18, 0xCE95, 0xBE32, 0xADAF, 0x94EC, 0x8CAC, 0x950E, 0x9D4F, 0xA5B1, // 0x0C00 (3072) +0xB5F2, 0xCEB6, 0xCE96, 0xCEB6, 0xC676, 0xB5D4, 0xAD93, 0x94F1, 0x73AD, 0x1902, 0x0040, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0C10 (3088) +0x4288, 0x8490, 0x9D55, 0xBE59, 0xD75B, 0xC6D8, 0xC6F8, 0xB675, 0xBED5, 0xB692, 0xAE90, 0x9DEC, 0x95EB, 0x8DAA, 0x8589, 0x7D68, // 0x0C20 (3104) +0x7528, 0x6CE7, 0x64A6, 0x64A6, 0x6CA6, 0x74C6, 0x74C7, 0x7CC7, 0x7CA7, 0x7C87, 0x7C87, 0x7C88, 0x7C68, 0x7447, 0x6C27, 0x6C26, // 0x0C30 (3120) +0x84E8, 0x84E8, 0x8508, 0x8D29, 0x8D49, 0x8D49, 0x8D29, 0x8D29, 0x8D49, 0x956A, 0x958A, 0x9589, 0x95A9, 0x95CA, 0x9E0A, 0xA60D, // 0x0C40 (3136) +0xEFFA, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7DD, 0xF7BB, 0xDF17, 0xCE94, 0xBE32, 0xB5D0, 0xA56E, 0x94ED, 0x84AC, 0x8CCD, 0xA591, // 0x0C50 (3152) +0xADF3, 0xADD3, 0xBE54, 0xC6B7, 0xBE76, 0xA593, 0x9511, 0x8CD1, 0x5B2B, 0x31A5, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0881, // 0x0C60 (3168) +0x4268, 0x742F, 0x9D35, 0xB639, 0xCF3A, 0xCF39, 0xAE34, 0xC6F6, 0xCF57, 0xAE71, 0xA64E, 0x9E0C, 0x8D8A, 0x8569, 0x7D48, 0x7528, // 0x0C70 (3184) +0x6CE7, 0x64C7, 0x64A6, 0x64A6, 0x6CC6, 0x74C7, 0x7CC7, 0x7CC7, 0x7CC8, 0x7CA8, 0x7CA8, 0x7CA8, 0x7C88, 0x7468, 0x7447, 0x7447, // 0x0C80 (3200) +0x7CC7, 0x7CC7, 0x84E8, 0x8D08, 0x8D29, 0x9529, 0x8D09, 0x8D09, 0x8D29, 0x954A, 0x956A, 0x9569, 0x95A9, 0x95A9, 0x958C, 0xC6B3, // 0x0C90 (3216) +0xFFFD, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDD, 0xF7BC, 0xEF5A, 0xDEF7, 0xC653, 0xBE12, 0xB5D0, 0xA56F, 0x94EC, 0x8CAC, 0x846B, 0x8CCD, // 0x0CA0 (3232) +0xADD1, 0x8D0F, 0xA591, 0xBE75, 0xB614, 0x9D72, 0x8CD0, 0x846F, 0x5B0A, 0x31A5, 0x0880, 0x0000, 0x0000, 0x0020, 0x0000, 0x18C1, // 0x0CB0 (3248) +0x4226, 0x638B, 0x8CB1, 0xB617, 0xD75B, 0xC6B8, 0xB657, 0xE7DB, 0xD757, 0xAE50, 0xA60C, 0x9DEA, 0x8D89, 0x8569, 0x7507, 0x74E7, // 0x0CC0 (3264) +0x6CE7, 0x6CA6, 0x64A6, 0x6CA7, 0x74C7, 0x7CC8, 0x7CC8, 0x84C8, 0x84C9, 0x84A9, 0x84A9, 0x84A9, 0x84A9, 0x7C89, 0x7C89, 0x7C68, // 0x0CD0 (3280) +0x7CA7, 0x7CA7, 0x7CC7, 0x84E8, 0x8CE9, 0x8CE9, 0x8CE9, 0x8CE9, 0x8D09, 0x8D2A, 0x8D4A, 0x8D49, 0x8D69, 0x956A, 0xA5EE, 0xE798, // 0x0CE0 (3296) +0xFFFE, 0xFFFF, 0xFFFF, 0xFFFE, 0xF7BD, 0xEF7B, 0xDF18, 0xD6B6, 0xC654, 0xB5D1, 0xA56F, 0xADD0, 0x9D2E, 0x846B, 0x846B, 0x846B, // 0x0CF0 (3312) +0x94EE, 0x952F, 0x6BEA, 0xADD2, 0xBE34, 0x9D31, 0x848F, 0x73CD, 0x52C8, 0x2984, 0x0880, 0x0860, 0x0020, 0x0840, 0x18C1, 0x18E1, // 0x0D00 (3328) +0x29C3, 0x5B29, 0x7C4F, 0xB5F6, 0xCEF9, 0xC6B9, 0xDF9C, 0xF7FD, 0xE7D9, 0xBEB2, 0x9DCC, 0x95A9, 0x8548, 0x7507, 0x6CE7, 0x6CE7, // 0x0D10 (3344) +0x6CC7, 0x6CA7, 0x6C86, 0x6CA7, 0x74C8, 0x7CC8, 0x7CC8, 0x84E9, 0x84C9, 0x84A9, 0x84A9, 0x84A9, 0x84A9, 0x8489, 0x7C89, 0x7C69, // 0x0D20 (3360) +0x7C87, 0x7C87, 0x7CA8, 0x84C9, 0x8CE9, 0x8CC9, 0x8CC9, 0x8CE9, 0x8D09, 0x8D09, 0x8D29, 0x8D4A, 0x956A, 0x958B, 0xB651, 0xF7FB, // 0x0D30 (3376) +0xFFFE, 0xFFFF, 0xFFFF, 0xFFFE, 0xF7BC, 0xEF7A, 0xE738, 0xDEF7, 0xD6B5, 0xBE12, 0xADB0, 0xA54F, 0xA54E, 0x94ED, 0x848B, 0x846B, // 0x0D40 (3392) +0x848C, 0x94EE, 0x8CCE, 0x846D, 0xAD91, 0xA571, 0x7C2D, 0x634A, 0x4A87, 0x31C4, 0x18E1, 0x1901, 0x0860, 0x0020, 0x18C1, 0x18E1, // 0x0D50 (3408) +0x29C3, 0x4286, 0x740D, 0xADD4, 0xC697, 0xD73A, 0xF7FE, 0xF7FE, 0xF7FB, 0xCF15, 0x9DEC, 0x95AA, 0x8548, 0x6CE6, 0x6CE6, 0x64A5, // 0x0D60 (3424) +0x6486, 0x6C87, 0x6C87, 0x74A7, 0x74A8, 0x7CC8, 0x84C9, 0x84E9, 0x84C9, 0x84A9, 0x84A9, 0x84AA, 0x84A9, 0x8489, 0x848A, 0x7C69, // 0x0D70 (3440) +0x7446, 0x7466, 0x7C87, 0x84A8, 0x84A9, 0x84A9, 0x84A8, 0x84C8, 0x84E9, 0x84E9, 0x8D09, 0x8D2A, 0x954A, 0x954C, 0xC694, 0xF7FC, // 0x0D80 (3456) +0xFFFE, 0xFFFF, 0xFFDE, 0xEF9C, 0xE73A, 0xDF18, 0xDF17, 0xD6F6, 0xC653, 0xBE12, 0xADB0, 0x94CC, 0x94CC, 0x94ED, 0x8C8B, 0x844A, // 0x0D90 (3472) +0x7C2A, 0x7C0A, 0x94EE, 0x8C8D, 0x7C4B, 0x8CAD, 0x844C, 0x52C6, 0x4285, 0x2982, 0x08A0, 0x0880, 0x0080, 0x08A0, 0x1901, 0x31E4, // 0x0DA0 (3488) +0x42A6, 0x6C0B, 0x9D71, 0xA593, 0xB615, 0xE75B, 0xF7FE, 0xFFFF, 0xF7FC, 0xD736, 0x9DAC, 0x8528, 0x74E6, 0x64A5, 0x64A5, 0x6485, // 0x0DB0 (3504) +0x6466, 0x6C67, 0x6C87, 0x7487, 0x74A8, 0x7CA8, 0x84C8, 0x84C9, 0x84C9, 0x84A9, 0x8489, 0x8489, 0x8489, 0x848A, 0x846A, 0x7C49, // 0x0DC0 (3520) +0x6C25, 0x7446, 0x7466, 0x7C87, 0x8488, 0x8488, 0x84A8, 0x8CC8, 0x8D09, 0x8D09, 0x8D4A, 0x8D2A, 0x8D09, 0x952C, 0xDF58, 0xFFFD, // 0x0DD0 (3536) +0xFFFE, 0xFFFF, 0xF7DD, 0xE75A, 0xDF18, 0xDF17, 0xDEF7, 0xD6B6, 0xCE94, 0xB5D1, 0x94EE, 0x846C, 0x7C2A, 0x7C2B, 0x8CAC, 0x844A, // 0x0DE0 (3552) +0x6BC8, 0x6BE8, 0x6BC8, 0x848B, 0x7C2A, 0x7C2A, 0x94ED, 0x7C6B, 0x63A8, 0x5306, 0x42A5, 0x4264, 0x42A5, 0x4AC6, 0x4AC6, 0x6BCA, // 0x0DF0 (3568) +0x84CE, 0xA5B2, 0x9D71, 0x9510, 0xB614, 0xE75A, 0xF7DE, 0xF7DE, 0xFFFD, 0xD737, 0xA5ED, 0x7D07, 0x6CC5, 0x6464, 0x5C43, 0x5C24, // 0x0E00 (3584) +0x6446, 0x6C47, 0x6C67, 0x7487, 0x7487, 0x7CA8, 0x7CA8, 0x7CA8, 0x7CA8, 0x7C68, 0x7C68, 0x7C69, 0x7C69, 0x7C69, 0x7C49, 0x7C29, // 0x0E10 (3600) +0x7446, 0x7446, 0x7C66, 0x7C67, 0x8468, 0x8488, 0x84C8, 0x8CE8, 0x8D29, 0x9529, 0x954A, 0x8D0A, 0x8D0A, 0xADD0, 0xF7FB, 0xFFFE, // 0x0E20 (3616) +0xFFFF, 0xFFFE, 0xEFBC, 0xE75A, 0xDF18, 0xDF18, 0xD6F6, 0xCE95, 0xB5B1, 0x9D0F, 0x94CE, 0x94EE, 0x94AD, 0x8C8C, 0x8CAC, 0x844A, // 0x0E30 (3632) +0x7409, 0x6BC7, 0x63A7, 0x5B66, 0x6BC7, 0x6366, 0x6BC8, 0x846A, 0x8CCC, 0x84AB, 0x742A, 0x6BC9, 0x6388, 0x63A9, 0x742B, 0x8CEE, // 0x0E40 (3648) +0x8CEF, 0x84AE, 0x848E, 0x9510, 0xADB2, 0xD6D8, 0xF7FE, 0xF7FF, 0xE79B, 0xBE94, 0x958B, 0x7CE6, 0x6CA5, 0x6464, 0x5C23, 0x6445, // 0x0E50 (3664) +0x6446, 0x6C47, 0x6C67, 0x7467, 0x7487, 0x7487, 0x7487, 0x7C67, 0x7C67, 0x7447, 0x7C47, 0x7C48, 0x7C48, 0x7C49, 0x7C29, 0x7408, // 0x0E60 (3680) +0x7C87, 0x7C87, 0x7C67, 0x7C67, 0x8488, 0x8488, 0x84C8, 0x8CE9, 0x8D29, 0x8D09, 0x8D0A, 0x8D0A, 0x9D6D, 0xD6F5, 0xFFFE, 0xFFFF, // 0x0E70 (3696) +0xF7FF, 0xF7DE, 0xEF7C, 0xDF19, 0xD6D7, 0xCEB6, 0xC674, 0xBE13, 0xBDF3, 0xB5B2, 0xB5D2, 0xA571, 0x94EE, 0x94CE, 0x8C8C, 0x846B, // 0x0E80 (3712) +0x73C8, 0x6366, 0x6B87, 0x6366, 0x5B25, 0x5304, 0x5B05, 0x6346, 0x6BA7, 0x73C8, 0x73E9, 0x7C4B, 0x7C4B, 0x7C4C, 0x7C4C, 0x7C2C, // 0x0E90 (3728) +0x848E, 0x7C4E, 0x8CEF, 0x9D30, 0xA571, 0xC696, 0xE77B, 0xE77C, 0xEFFC, 0xBEB4, 0x8D6B, 0x74C6, 0x6C84, 0x6443, 0x5C03, 0x6424, // 0x0EA0 (3744) +0x6425, 0x6C47, 0x6C46, 0x6C66, 0x6C46, 0x7446, 0x6C45, 0x7445, 0x7425, 0x6C26, 0x7426, 0x7427, 0x7407, 0x7408, 0x73E8, 0x6BC8, // 0x0EB0 (3760) +0x8CE9, 0x84C9, 0x84A8, 0x84A9, 0x8CA9, 0x8CA9, 0x8CC9, 0x8CE9, 0x8D2A, 0x8D2A, 0x8D0A, 0x952B, 0xADCF, 0xF7FA, 0xFFFF, 0xFFDF, // 0x0EC0 (3776) +0xF7BE, 0xEFBD, 0xE77B, 0xD6F9, 0xCE96, 0xC674, 0xC654, 0xC634, 0xBE13, 0xADB2, 0xA551, 0x9D30, 0x844C, 0x8CAD, 0x94CD, 0x7C0A, // 0x0ED0 (3792) +0x6346, 0x73C9, 0x6BA7, 0x6346, 0x6325, 0x6346, 0x6366, 0x5AE4, 0x52C4, 0x5AE5, 0x5B05, 0x6347, 0x6389, 0x6BAA, 0x6BCA, 0x740C, // 0x0EE0 (3808) +0x848F, 0x9511, 0x9D31, 0x9D50, 0xB5F3, 0xC696, 0xCED9, 0xE77C, 0xE7BB, 0xB673, 0x854A, 0x6CA5, 0x6463, 0x6443, 0x6423, 0x6404, // 0x0EF0 (3824) +0x6425, 0x6C26, 0x6C46, 0x6C46, 0x6C25, 0x6C25, 0x6C24, 0x6C04, 0x6C04, 0x6C05, 0x7406, 0x7406, 0x6BE7, 0x6BC7, 0x6BC7, 0x63A6, // 0x0F00 (3840) +0x952A, 0x950A, 0x8D09, 0x8D09, 0x8D29, 0x8D0A, 0x8D09, 0x8D09, 0x952A, 0x954A, 0x9529, 0x950B, 0xCEB6, 0xFFFF, 0xF7FE, 0xF7DE, // 0x0F10 (3856) +0xEFBD, 0xE79C, 0xE75B, 0xDF5A, 0xD718, 0xCEB6, 0xC654, 0xC654, 0xB5D2, 0xA570, 0x9D2F, 0x9D2F, 0x94EE, 0x8CCD, 0x848C, 0x6388, // 0x0F20 (3872) +0x6BA8, 0x73E9, 0x6367, 0x6367, 0x6346, 0x6B87, 0x5B06, 0x5AE5, 0x6326, 0x6326, 0x6347, 0x6368, 0x6388, 0x73CA, 0x740B, 0x7C4C, // 0x0F30 (3888) +0x848D, 0x94F0, 0xA592, 0xADF4, 0xBE36, 0xCED9, 0xDF3C, 0xE7BD, 0xD759, 0xAE10, 0x8D4A, 0x6C85, 0x6C65, 0x6445, 0x6424, 0x6425, // 0x0F40 (3904) +0x6406, 0x6407, 0x6C26, 0x6C45, 0x6C24, 0x6C23, 0x6403, 0x6C03, 0x6C04, 0x6C05, 0x6BE6, 0x63C6, 0x63A6, 0x63A5, 0x63A5, 0x6385, // 0x0F50 (3920) +0x952A, 0x950A, 0x9529, 0x954A, 0x954A, 0x952A, 0x9529, 0x954A, 0x9D6B, 0x952A, 0x950A, 0xB610, 0xEFBB, 0xFFFF, 0xF7FE, 0xEFDE, // 0x0F60 (3936) +0xE77C, 0xE79C, 0xE75B, 0xD6F8, 0xC696, 0xBE34, 0xB5D2, 0xAD91, 0xA570, 0xA54F, 0x9D2F, 0x9D2F, 0x94EE, 0x8CCD, 0x846C, 0x73EA, // 0x0F70 (3952) +0x73E9, 0x73E9, 0x6347, 0x5B26, 0x5B26, 0x6326, 0x6326, 0x5B05, 0x6347, 0x6347, 0x6347, 0x6348, 0x6388, 0x6BC9, 0x740B, 0x7C2C, // 0x0F80 (3968) +0x846D, 0x84AE, 0x8CF0, 0xA572, 0xB615, 0xCED9, 0xD73B, 0xE79D, 0xD738, 0xA5F0, 0x8D4A, 0x74A6, 0x6C86, 0x6C65, 0x6445, 0x6405, // 0x0F90 (3984) +0x6406, 0x6406, 0x6C26, 0x6425, 0x6403, 0x6402, 0x63E2, 0x63E3, 0x6C04, 0x6BE5, 0x63C5, 0x63A5, 0x6385, 0x5B65, 0x5B64, 0x5B64, // 0x0FA0 (4000) +0x952A, 0x952A, 0x952A, 0x9D4A, 0x954A, 0x952A, 0x952A, 0x954A, 0x9D4B, 0x9D4C, 0x9D4C, 0xD716, 0xFFFD, 0xF7FE, 0xF7DE, 0xEFBD, // 0x0FB0 (4016) +0xE79D, 0xDF5B, 0xD6D9, 0xCE97, 0xCE96, 0xCE96, 0xBE34, 0xADB2, 0x9D2F, 0x9D0F, 0x9D2F, 0x9D0F, 0x950F, 0x94EE, 0x846C, 0x740A, // 0x0FC0 (4032) +0x73EA, 0x73EA, 0x5B47, 0x52E6, 0x52C5, 0x5B06, 0x6B68, 0x6306, 0x5B06, 0x5AE6, 0x52E5, 0x5AE6, 0x6347, 0x6B89, 0x740B, 0x7C4C, // 0x0FD0 (4048) +0x84AE, 0x8CEF, 0x9510, 0x9D72, 0xADD4, 0xBE56, 0xCEFA, 0xEFFD, 0xCF37, 0x958D, 0x8509, 0x74C6, 0x74A6, 0x6C66, 0x6C46, 0x6426, // 0x0FE0 (4064) +0x6406, 0x63E5, 0x6405, 0x63E4, 0x63E3, 0x63E2, 0x63C2, 0x63E3, 0x63E4, 0x63C4, 0x63A4, 0x5B84, 0x5B64, 0x5B64, 0x5B43, 0x5342, // 0x0FF0 (4080) +0x950A, 0x950A, 0x9529, 0x954A, 0x954A, 0x8D0A, 0x8D09, 0x8D0A, 0x952B, 0x9D4C, 0xADD0, 0xF7DB, 0xFFFE, 0xF7BE, 0xEFBD, 0xEF9D, // 0x1000 (4096) +0xE77C, 0xE77B, 0xDF5A, 0xD6F8, 0xC696, 0xBE14, 0xB5D2, 0xAD91, 0x9D0F, 0x94EE, 0x94EF, 0x94EE, 0x94CE, 0x94EF, 0x8C8D, 0x7C2B, // 0x1010 (4112) +0x7C4B, 0x6BC9, 0x6348, 0x6347, 0x5B06, 0x5AE6, 0x6B88, 0x6B88, 0x6327, 0x5B06, 0x5B07, 0x5B07, 0x6348, 0x6368, 0x73EA, 0x7C4C, // 0x1020 (4128) +0x846D, 0x8CCF, 0x9D51, 0xA5B2, 0xADF4, 0xB636, 0xCED9, 0xEFDD, 0xD777, 0x8D2C, 0x7CC7, 0x74C6, 0x74A7, 0x6446, 0x6446, 0x6C26, // 0x1030 (4144) +0x63E6, 0x63E5, 0x63E4, 0x5BE4, 0x63C3, 0x63E3, 0x63C2, 0x63E3, 0x63C3, 0x63A3, 0x5B83, 0x5B63, 0x5B63, 0x5B63, 0x5342, 0x5322, // 0x1040 (4160) +0x94E9, 0x94E9, 0x9509, 0x952A, 0x952A, 0x8D0A, 0x84C9, 0x84C9, 0x950B, 0x950D, 0xC695, 0xFFFD, 0xF7FE, 0xEFBE, 0xEF9D, 0xEF9D, // 0x1050 (4176) +0xE77C, 0xDF5B, 0xDF19, 0xCEB7, 0xBE34, 0xB5D3, 0xADB2, 0xADB2, 0xA550, 0x94CE, 0x94CE, 0x8CAE, 0x846D, 0x846D, 0x846C, 0x7C4C, // 0x1060 (4192) +0x7C4C, 0x6BCA, 0x6BAA, 0x6B89, 0x6368, 0x6347, 0x6B89, 0x6BA9, 0x6B89, 0x6B68, 0x6B68, 0x6368, 0x6B89, 0x6BA9, 0x73EB, 0x7C2C, // 0x1070 (4208) +0x846D, 0x8CCF, 0x9510, 0x9D51, 0xA593, 0xB615, 0xCEFA, 0xF7FE, 0xDFD9, 0x8D4C, 0x7CC7, 0x7CE7, 0x74A7, 0x6C46, 0x6426, 0x6C27, // 0x1080 (4224) +0x6405, 0x5BE5, 0x63E4, 0x5BC3, 0x63C3, 0x63E3, 0x63E3, 0x63E4, 0x63C3, 0x5BA3, 0x5B83, 0x5B63, 0x5B63, 0x5B63, 0x5342, 0x5322, // 0x1090 (4240) +0x8CA9, 0x8CA9, 0x8D09, 0x952A, 0x954B, 0x8D2A, 0x8CEA, 0x84CA, 0x8CEA, 0xA58F, 0xEFBB, 0xF7FF, 0xF7DE, 0xEFBE, 0xE79D, 0xE77C, // 0x10A0 (4256) +0xD719, 0xCEB8, 0xBE56, 0xB614, 0xB613, 0xB613, 0xB5D2, 0xAD90, 0xA52F, 0x8C8D, 0x846C, 0x846D, 0x844C, 0x7C2C, 0x7C4C, 0x846C, // 0x10B0 (4272) +0x740B, 0x73EB, 0x7C0B, 0x6BA9, 0x6BA9, 0x73CA, 0x73CA, 0x6B89, 0x6BA9, 0x6B89, 0x6B89, 0x6B89, 0x6BCA, 0x73EB, 0x740B, 0x7C0C, // 0x10C0 (4288) +0x740B, 0x846D, 0x8CCE, 0x9510, 0x9D72, 0xB615, 0xCED9, 0xEFDD, 0xE7DA, 0x956D, 0x7D09, 0x7CE7, 0x74A7, 0x6C67, 0x6C46, 0x6426, // 0x10D0 (4304) +0x6405, 0x5BE5, 0x5BE4, 0x5BC4, 0x63E4, 0x6404, 0x63E4, 0x63E4, 0x63C3, 0x5BA3, 0x5B83, 0x5B62, 0x5B62, 0x5B62, 0x5342, 0x5321, // 0x10E0 (4320) +0x8488, 0x8CA9, 0x8CE9, 0x8D0A, 0x952B, 0x8D2B, 0x8D0B, 0x84EA, 0x84CA, 0xBE73, 0xFFFE, 0xF7FF, 0xEFBE, 0xE79D, 0xE77C, 0xD6F9, // 0x10F0 (4336) +0xCED8, 0xC697, 0xBE35, 0xADB2, 0x9D30, 0x94EE, 0x94CD, 0x8CCD, 0x9D0F, 0x9CEE, 0x8C8D, 0x844C, 0x7C4C, 0x73EB, 0x6BCA, 0x6BAA, // 0x1100 (4352) +0x740B, 0x740B, 0x73EA, 0x73CA, 0x7C0B, 0x7C0B, 0x73EA, 0x73CA, 0x6BCA, 0x6BCA, 0x6BAA, 0x6BAA, 0x6BCA, 0x73EB, 0x73EB, 0x73EB, // 0x1110 (4368) +0x73EB, 0x73EB, 0x742C, 0x848E, 0x9531, 0xB616, 0xCEDA, 0xE7BD, 0xDFBA, 0x958E, 0x8529, 0x7CE7, 0x7486, 0x6C66, 0x6446, 0x6425, // 0x1120 (4384) +0x5BE5, 0x5BC4, 0x5BE4, 0x5BC4, 0x63E4, 0x6405, 0x63E4, 0x63E4, 0x5BC3, 0x5BA3, 0x5B62, 0x5362, 0x5362, 0x5342, 0x5321, 0x4B21, // 0x1130 (4400) +0x8489, 0x8CA9, 0x8CE9, 0x8CEA, 0x8D0A, 0x8D2B, 0x8D2B, 0x850A, 0x84EB, 0xCEF5, 0xF7FE, 0xEFDF, 0xE79E, 0xE77D, 0xD73A, 0xCEB8, // 0x1140 (4416) +0xC697, 0xBE35, 0xB5D4, 0xADD3, 0xA571, 0x94EE, 0x844B, 0x7C0A, 0x7C0B, 0x94EE, 0x8CAD, 0x844C, 0x7C4C, 0x7C0B, 0x73CA, 0x6BCA, // 0x1150 (4432) +0x73CA, 0x73EA, 0x6B89, 0x6B89, 0x73EA, 0x7C0B, 0x73CA, 0x6389, 0x6B89, 0x6BCA, 0x6BCA, 0x6BAA, 0x6389, 0x6BCA, 0x6BCB, 0x73EB, // 0x1160 (4448) +0x73EB, 0x7C2C, 0x848D, 0x9510, 0x9D51, 0xADD5, 0xC699, 0xE79D, 0xDFBA, 0x958E, 0x854A, 0x7D07, 0x6C86, 0x6425, 0x6405, 0x6405, // 0x1170 (4464) +0x5BE4, 0x5BC4, 0x5BC4, 0x5BC4, 0x5BE4, 0x6405, 0x63E4, 0x63E4, 0x5BA3, 0x5B83, 0x5382, 0x5362, 0x5362, 0x5342, 0x5321, 0x4B21, // 0x1180 (4480) +0x8CAA, 0x8CCA, 0x8CEA, 0x8D0A, 0x8D0A, 0x8D0A, 0x8D0A, 0x7CAA, 0x9D71, 0xE79C, 0xE7DD, 0xE7BD, 0xE79D, 0xD71B, 0xC6D9, 0xC698, // 0x1190 (4496) +0xBE56, 0xB5F4, 0xADB3, 0x9D51, 0x9510, 0x94EF, 0x94EF, 0x846D, 0x7C2C, 0x7C2B, 0x848D, 0x846C, 0x7C2B, 0x740B, 0x7C0B, 0x6BCA, // 0x11A0 (4512) +0x6BCA, 0x6BCA, 0x6BA9, 0x6368, 0x6368, 0x6BA9, 0x6BC9, 0x6BA9, 0x6BA9, 0x6BCA, 0x6389, 0x6369, 0x6389, 0x6389, 0x6BCA, 0x6BEB, // 0x11B0 (4528) +0x7C4D, 0x7C4D, 0x84AF, 0x9511, 0xA592, 0xADF5, 0xB637, 0xCF3A, 0xDFBB, 0x9DF1, 0x852B, 0x74A7, 0x6446, 0x6405, 0x53A4, 0x5BE5, // 0x11C0 (4544) +0x53C4, 0x5BC4, 0x5BC4, 0x5BC3, 0x5BE4, 0x6405, 0x6405, 0x63E4, 0x5BA3, 0x5BA3, 0x5363, 0x5362, 0x5362, 0x5362, 0x5341, 0x4B00, // 0x11D0 (4560) +0x84AA, 0x84AA, 0x8CCA, 0x8CEA, 0x8D0A, 0x8D0A, 0x84EA, 0x7CAB, 0xBE96, 0xEFDD, 0xE7BD, 0xE79D, 0xD73B, 0xC6B9, 0xBE58, 0xB636, // 0x11E0 (4576) +0xB635, 0xADD3, 0xADD3, 0xA592, 0x94F0, 0x8CAE, 0x94CF, 0x8CCE, 0x7C2C, 0x740B, 0x7C2B, 0x7C2B, 0x7C2C, 0x740B, 0x73EB, 0x6B8A, // 0x11F0 (4592) +0x73EA, 0x73EA, 0x6BAA, 0x6B89, 0x6BA9, 0x6BCA, 0x6BA9, 0x6389, 0x6389, 0x6BA9, 0x6389, 0x6389, 0x6BAA, 0x6BAA, 0x6BEB, 0x740C, // 0x1200 (4608) +0x744D, 0x7C4D, 0x84AF, 0x8CD0, 0x8CF0, 0x9D52, 0xA5D5, 0xCEF9, 0xCF38, 0x850E, 0x74A9, 0x6C67, 0x5BE4, 0x53A4, 0x5384, 0x5364, // 0x1210 (4624) +0x5BC5, 0x5BC4, 0x5BC3, 0x5BE4, 0x63E5, 0x63E5, 0x63C3, 0x63C3, 0x5BA3, 0x5B83, 0x5363, 0x5363, 0x5342, 0x5341, 0x5341, 0x4B21, // 0x1220 (4640) +0x8469, 0x8469, 0x8489, 0x84A9, 0x84CA, 0x8CEA, 0x84EB, 0x954E, 0xD739, 0xE79D, 0xDF5C, 0xD73C, 0xCEDA, 0xBE98, 0xB657, 0xB636, // 0x1230 (4656) +0xADF4, 0x9D51, 0x9531, 0x9510, 0x94F0, 0x8CCF, 0x8CCE, 0x848D, 0x7C2B, 0x6BCA, 0x6BA9, 0x6389, 0x6BCA, 0x73CB, 0x6BAA, 0x6389, // 0x1240 (4672) +0x73EB, 0x6BCA, 0x6BAA, 0x6389, 0x6B89, 0x6BA9, 0x6BA9, 0x6BA9, 0x6369, 0x6B89, 0x6BAA, 0x6BAA, 0x6BCA, 0x6BAA, 0x6BCB, 0x740B, // 0x1250 (4688) +0x73EC, 0x742C, 0x7C6E, 0x848E, 0x84AE, 0x8D10, 0xA5B4, 0xCEF9, 0xCF38, 0x84ED, 0x6C68, 0x6406, 0x5384, 0x5344, 0x5B87, 0x5B67, // 0x1260 (4704) +0x5347, 0x5367, 0x5B67, 0x5B88, 0x63A9, 0x63A9, 0x63A8, 0x63A8, 0x6388, 0x6368, 0x5B48, 0x5B48, 0x5B47, 0x5306, 0x5B27, 0x5B68, // 0x1270 (4720) +0x7408, 0x7C28, 0x7C68, 0x7C68, 0x7C89, 0x84CA, 0x84EC, 0xADF2, 0xDF7B, 0xD73C, 0xD71C, 0xD73C, 0xC6B9, 0xBE78, 0xB636, 0xB615, // 0x1280 (4736) +0xA572, 0x94F0, 0x8CAF, 0x848E, 0x8CAE, 0x8CAF, 0x8CAE, 0x844D, 0x73EB, 0x6BAA, 0x6368, 0x5307, 0x5B48, 0x6BAA, 0x6B8A, 0x6B89, // 0x1290 (4752) +0x6BAA, 0x6BAA, 0x6389, 0x6369, 0x6348, 0x6348, 0x6B89, 0x73CA, 0x6369, 0x6B89, 0x6BAA, 0x6BAA, 0x6BEB, 0x6BAA, 0x6BAB, 0x6BCB, // 0x12A0 (4768) +0x63AA, 0x6BCB, 0x740C, 0x7C2D, 0x7C8E, 0x8D10, 0x9DB4, 0xC6F9, 0xCF38, 0x8D4E, 0x74A9, 0x63E6, 0x5B86, 0x3A83, 0x3223, 0x3A24, // 0x12B0 (4784) +0x4285, 0x4AE6, 0x4AE6, 0x4285, 0x4265, 0x4286, 0x4285, 0x4245, 0x4285, 0x4265, 0x4245, 0x4245, 0x4244, 0x3A03, 0x4225, 0x4266, // 0x12C0 (4800) +}; diff --git a/libraries/UTFT_Buttons/examples/UTFT_Buttons_Bitmap_Demo/monkey.c b/libraries/UTFT_Buttons/examples/UTFT_Buttons_Bitmap_Demo/monkey.c new file mode 100644 index 0000000..8374cd4 --- /dev/null +++ b/libraries/UTFT_Buttons/examples/UTFT_Buttons_Bitmap_Demo/monkey.c @@ -0,0 +1,314 @@ +// Generated by : ImageConverter 565 v1.2 +// Dimensions : 80x60 pixels +// Size : 9 600 Bytes + +#if defined(__AVR__) + #include +#elif defined(__PIC32MX__) + #define PROGMEM +#elif defined(__arm__) + #define PROGMEM +#endif + +const unsigned short monkey[0x12C0] PROGMEM ={ +0x858A, 0x858A, 0x85AA, 0x85AA, 0x8DAA, 0x8DAA, 0x8DAA, 0x8DAA, 0x8DAA, 0x8DCA, 0x8DCA, 0x8DAA, 0x8DAA, 0x95CA, 0x95CB, 0x8DAA, // 0x0010 (16) +0x8DAA, 0x8DAA, 0x8DAA, 0x95CB, 0x9DEB, 0x9E0B, 0x9DEB, 0x95EA, 0x95EA, 0x95EA, 0x95EA, 0x95EA, 0x95EA, 0x95EA, 0x95EA, 0x95EB, // 0x0020 (32) +0x95EA, 0x9DEA, 0x9E0B, 0xA62B, 0xA60A, 0x9DE9, 0x9DE9, 0x95E9, 0x95C9, 0x95E9, 0x960A, 0xA64B, 0xAE6B, 0xAE4B, 0xAE4B, 0xAE4B, // 0x0030 (48) +0xAE4B, 0xAE2A, 0xAE2A, 0xAE2A, 0xAE2A, 0xAE2A, 0xAE4B, 0xAE4B, 0xAE4B, 0xAE2B, 0xAE4B, 0xAE6B, 0xB66C, 0xB66B, 0xB66A, 0xAE6B, // 0x0040 (64) +0xB66B, 0xAE6B, 0xAE4B, 0xAE4B, 0xA62A, 0xA60A, 0xA62B, 0xAE4B, 0xAE6C, 0xAE6B, 0xAE2B, 0xA60A, 0xA60A, 0xAE4A, 0xAE6B, 0xB66B, // 0x0050 (80) +0x85AA, 0x85AA, 0x85AA, 0x85AA, 0x8DCA, 0x8DCA, 0x8DAA, 0x8DAA, 0x8DAA, 0x8DCA, 0x8DCA, 0x8DAA, 0x8DAA, 0x95CA, 0x95CB, 0x95CB, // 0x0060 (96) +0x95CA, 0x95CA, 0x95CA, 0x95EB, 0x9E0B, 0x9E0B, 0x9DEB, 0x95EA, 0x95CA, 0x95CA, 0x95C9, 0x95C9, 0x95CA, 0x95CA, 0x8DCA, 0x95CA, // 0x0070 (112) +0x95CA, 0x9DEA, 0xA62B, 0xA62B, 0xA60A, 0x9DE9, 0x95C8, 0x95C8, 0x8DA8, 0x95C8, 0x95E9, 0x9E2A, 0xA64B, 0xAE4B, 0xAE2A, 0xAE2A, // 0x0080 (128) +0xAE2A, 0xA60A, 0xAE2A, 0xAE4B, 0xAE4B, 0xAE4B, 0xAE4B, 0xAE6B, 0xAE4B, 0xAE2B, 0xAE4B, 0xAE4B, 0xB66B, 0xAE6B, 0xAE4A, 0xAE4A, // 0x0090 (144) +0xAE4A, 0xAE4A, 0xAE4A, 0xA62A, 0xA5E9, 0xA5EA, 0xA62A, 0xAE4B, 0xAE6C, 0xAE6B, 0xAE4B, 0xA62A, 0xA62A, 0xAE4B, 0xB66B, 0xB66B, // 0x00A0 (160) +0x85AB, 0x85AB, 0x85AA, 0x85AA, 0x85AA, 0x85AA, 0x85AA, 0x8DAA, 0x8DAA, 0x8DCA, 0x8DCA, 0x8DCA, 0x8DCA, 0x95CA, 0x95CA, 0x95EB, // 0x00B0 (176) +0x95EB, 0x95EB, 0x95EB, 0x9E0B, 0x9E0B, 0x9E0B, 0x9DEA, 0x95CA, 0x95EA, 0x95C9, 0x95C9, 0x8DC9, 0x8DC9, 0x8DC9, 0x8DC9, 0x95C9, // 0x00C0 (192) +0x95EA, 0x9DEA, 0xA62A, 0xA62A, 0xA62A, 0x9DE9, 0x9DC8, 0x95C8, 0x95C8, 0x9DE8, 0x9E29, 0xA64A, 0xAE4A, 0xAE4A, 0xAE4A, 0xAE2A, // 0x00D0 (208) +0xA60A, 0xA60A, 0xAE2A, 0xAE4B, 0xAE4B, 0xAE6B, 0xB66C, 0xB68C, 0xAE4B, 0xAE4B, 0xAE4B, 0xB64B, 0xB64A, 0xAE4A, 0xAE49, 0xAE4A, // 0x00E0 (224) +0xAE4A, 0xAE4A, 0xAE2A, 0xA60A, 0xA5E9, 0x9DE9, 0xA60A, 0xAE4B, 0xAE6B, 0xAE6B, 0xAE4B, 0xAE2B, 0xAE2A, 0xAE4B, 0xAE4B, 0xB66B, // 0x00F0 (240) +0x85CB, 0x85CB, 0x85CB, 0x85CB, 0x85AA, 0x858A, 0x858A, 0x858A, 0x8DAA, 0x8DCA, 0x8DCA, 0x8DCA, 0x8DCA, 0x8DCA, 0x95CA, 0x95CA, // 0x0100 (256) +0x95EA, 0x960B, 0x9E0B, 0x9E0B, 0x9E0B, 0x95EB, 0x95EA, 0x95CA, 0x95C9, 0x95C9, 0x95C9, 0x8DC9, 0x8DC9, 0x8DC9, 0x95C9, 0x95E9, // 0x0110 (272) +0x9E0A, 0xA60A, 0xA62A, 0xA62A, 0xA62A, 0x9DE9, 0x9DE9, 0x9DE9, 0x9DE8, 0x9E09, 0xA629, 0xAE49, 0xAE4A, 0xAE4A, 0xAE4A, 0xAE2A, // 0x0120 (288) +0xA60A, 0xA60A, 0xA62A, 0xAE4B, 0xAE6B, 0xB66B, 0xB68B, 0xB68B, 0xB66B, 0xB66B, 0xB66B, 0xB66A, 0xB64A, 0xB64A, 0xB649, 0xB66A, // 0x0130 (304) +0xB66A, 0xB66A, 0xAE4A, 0xAE2A, 0xA609, 0xA609, 0xAE2A, 0xAE6B, 0xAE6B, 0xAE6B, 0xAE4B, 0xAE2A, 0xA62A, 0xAE2A, 0xAE4B, 0xAE4B, // 0x0140 (320) +0x8DCB, 0x8DCB, 0x8DCB, 0x8DCB, 0x85AA, 0x858A, 0x8569, 0x8569, 0x85AA, 0x85AA, 0x8DCA, 0x8DCA, 0x8DCA, 0x8DCA, 0x8DCA, 0x95CA, // 0x0150 (336) +0x95EA, 0x9E0A, 0x9E0B, 0x9E0B, 0x9DEB, 0x95EB, 0x95CA, 0x8DA9, 0x8DA9, 0x95A9, 0x95C9, 0x95E9, 0x95E9, 0x95E9, 0x9E0A, 0x9E0A, // 0x0160 (352) +0xA62A, 0xAE2A, 0xAE4B, 0xAE4B, 0xA62A, 0xA60A, 0xA609, 0xA629, 0xA609, 0xA629, 0xAE49, 0xAE49, 0xAE49, 0xAE4A, 0xAE4A, 0xAE4A, // 0x0170 (368) +0xA62A, 0xA60A, 0xA62A, 0xAE4B, 0xAE6B, 0xB68B, 0xB68B, 0xB68B, 0xBE8B, 0xBE8B, 0xB66B, 0xB66B, 0xB66A, 0xB64A, 0xB66A, 0xB66A, // 0x0180 (384) +0xB66A, 0xB66A, 0xB64A, 0xAE4A, 0xAE2A, 0xAE2A, 0xAE4A, 0xAE6B, 0xAE6B, 0xAE4B, 0xAE2A, 0xA60A, 0xA5E9, 0xA60A, 0xAE2A, 0xAE4B, // 0x0190 (400) +0x8DCA, 0x8DCA, 0x8DCA, 0x8DCA, 0x85AA, 0x85AA, 0x858A, 0x858A, 0x85AA, 0x85AA, 0x8DAA, 0x8DCA, 0x8DCA, 0x8DAA, 0x8DC9, 0x95C9, // 0x01A0 (416) +0x95EA, 0x9E0A, 0x9E0B, 0x9E0B, 0x9DEB, 0x95EB, 0x95CA, 0x8DA9, 0x8DA9, 0x95C9, 0x9DEA, 0x9E0A, 0x9E0A, 0x9E0A, 0xA62A, 0xA62A, // 0x01B0 (432) +0xAE4A, 0xAE4A, 0xAE4A, 0xAE4B, 0xAE6B, 0xAE4B, 0xAE4A, 0xAE4A, 0xAE49, 0xAE49, 0xB649, 0xB649, 0xB669, 0xB66A, 0xB66A, 0xAE6A, // 0x01C0 (448) +0xAE2A, 0xA60A, 0xAE2A, 0xAE4A, 0xB66A, 0xB68B, 0xBE8B, 0xBE8B, 0xBE8B, 0xBE8B, 0xB68B, 0xB66B, 0xB66A, 0xB64A, 0xB66A, 0xB66A, // 0x01D0 (464) +0xB66B, 0xB66A, 0xB66A, 0xB66A, 0xAE4A, 0xAE4A, 0xAE4A, 0xAE4A, 0xAE6A, 0xAE4A, 0xAE2A, 0xA609, 0xA609, 0xAE2A, 0xAE4A, 0xAE6B, // 0x01E0 (480) +0x8DCA, 0x8DA9, 0x85A9, 0x85AA, 0x8DAA, 0x85AA, 0x85AA, 0x85AA, 0x85AA, 0x85AA, 0x85AA, 0x8DCA, 0x8DCA, 0x8DC9, 0x8DA9, 0x95C9, // 0x01F0 (496) +0x95E9, 0x9E0A, 0x9E0A, 0x9E0B, 0x9E0A, 0x9DEB, 0x9DEA, 0x95CA, 0x95EA, 0x9DEA, 0x9E0A, 0xA62A, 0xA62A, 0xA62A, 0xA62A, 0xAE4B, // 0x0200 (512) +0xAE4A, 0xAE4A, 0xAE4B, 0xAE4B, 0xAE6B, 0xAE4B, 0xAE4B, 0xAE4B, 0xB66A, 0xB64A, 0xB649, 0xB649, 0xB669, 0xAE4A, 0xAE4A, 0xAE6A, // 0x0210 (528) +0xAE4B, 0xAE4B, 0xAE4A, 0xB66A, 0xB66B, 0xBE8B, 0xBE8B, 0xBE8B, 0xBE8B, 0xBE8B, 0xBE8B, 0xB66B, 0xB66B, 0xB66B, 0xB66B, 0xB66B, // 0x0220 (544) +0xBE8B, 0xB68B, 0xB66B, 0xB66B, 0xB66A, 0xAE4A, 0xAE4A, 0xAE4A, 0xAE6A, 0xAE4A, 0xAE4A, 0xAE4A, 0xAE4A, 0xAE4A, 0xAE6A, 0xB66A, // 0x0230 (560) +0x8DC9, 0x8DA9, 0x8589, 0x8589, 0x85A9, 0x8DAA, 0x8DCA, 0x8DCA, 0x8DAA, 0x85AA, 0x8DAA, 0x8DCA, 0x8DCA, 0x8DC9, 0x8DA9, 0x95C9, // 0x0240 (576) +0x9DE9, 0x9E0A, 0xA62A, 0x9E0A, 0x9E0B, 0x9E0B, 0x9E0B, 0x9E0B, 0x9E0B, 0x9E0B, 0x9E0A, 0x9E0A, 0xA60A, 0xA62A, 0xA62A, 0xAE2A, // 0x0250 (592) +0xAE2A, 0xAE6B, 0xB66B, 0xAE4B, 0x9E0A, 0x9DEA, 0xA62A, 0xAE6B, 0xBEAB, 0xBE8A, 0xB66A, 0xBE6A, 0xB66A, 0xB66A, 0xAE6A, 0xAE6B, // 0x0260 (608) +0xB66B, 0xAE4B, 0xB66A, 0xB68B, 0xB68B, 0xBE8B, 0xBEAB, 0xBEAB, 0xBE8B, 0xBE8B, 0xBE8B, 0xBE8B, 0xB68B, 0xB66B, 0xB66B, 0xB66B, // 0x0270 (624) +0xB68B, 0xB66B, 0xB66A, 0xB66A, 0xB66A, 0xB66A, 0xAE6A, 0xB66A, 0xAE4A, 0xAE4A, 0xAE4A, 0xAE6A, 0xAE6A, 0xAE6A, 0xAE6A, 0xAE6A, // 0x0280 (640) +0x85E9, 0x85C8, 0x8589, 0x85A9, 0x8DAA, 0x8DCB, 0x95EB, 0x95EB, 0x95EA, 0x95EA, 0x95EA, 0x95EA, 0x95C9, 0x8DA9, 0x95AA, 0x95CA, // 0x0290 (656) +0x9E0A, 0x9E2A, 0x9E2A, 0xA609, 0xA60A, 0xA62B, 0xAE2C, 0xA60C, 0xA62C, 0x9DEC, 0x9E0B, 0x9E0A, 0x9E2A, 0xA609, 0xA62A, 0xAE2A, // 0x02A0 (672) +0xBE6B, 0xAE0C, 0x7CAA, 0x6C6C, 0x642C, 0x644D, 0x74AF, 0x6C6D, 0x6429, 0x8D8B, 0xBECC, 0xB66A, 0xBE4B, 0xBE4C, 0xB64B, 0xB66C, // 0x02B0 (688) +0xAE4B, 0xAE4B, 0xB68C, 0xB68C, 0xB68B, 0xB68B, 0xBE8B, 0xBEAC, 0xBE8C, 0xBE8C, 0xBE8C, 0xBE8C, 0xB68C, 0xB66C, 0xAE6C, 0xB68C, // 0x02C0 (704) +0xB68C, 0xB68C, 0xB68C, 0xB68C, 0xB68B, 0xB68B, 0xB66B, 0xB66A, 0xB66A, 0xAE4A, 0xAE49, 0xAE4A, 0xAE4A, 0xB66A, 0xB669, 0xAE49, // 0x02D0 (720) +0x85C9, 0x85A9, 0x8589, 0x85AA, 0x8DAB, 0x8DCB, 0x95EB, 0x95EB, 0x960A, 0x960A, 0x960A, 0x9609, 0x95E9, 0x95C9, 0x95C9, 0x95EA, // 0x02E0 (736) +0x960A, 0x9E0A, 0x9E2A, 0xA60A, 0xA62A, 0xA62B, 0xA62C, 0xA62D, 0xA62C, 0xA62C, 0x960B, 0x95EA, 0x9E2B, 0xA62B, 0xA60B, 0xAE4D, // 0x02F0 (752) +0x8D4B, 0x4305, 0x53A9, 0x748E, 0x746E, 0x6C0D, 0x7C8F, 0x9552, 0x7CAE, 0x640A, 0x7CCA, 0xAE8F, 0xAE6D, 0xAE6C, 0xA68B, 0xAE8C, // 0x0300 (768) +0xB68D, 0xB66D, 0xB66D, 0xB66D, 0xB68D, 0xBE8D, 0xBE8D, 0xB68C, 0xBE8D, 0xBE8D, 0xBE8D, 0xB68D, 0xB66C, 0xAE6C, 0xAE6D, 0xB66D, // 0x0310 (784) +0xB68D, 0xB68D, 0xB6AD, 0xB68C, 0xB68C, 0xB68C, 0xB66B, 0xB66B, 0xAE4A, 0xAE4A, 0xAE4A, 0xAE4A, 0xAE4A, 0xAE4A, 0xAE4A, 0xAE4A, // 0x0320 (800) +0x7DAA, 0x7D8A, 0x7D8A, 0x85AB, 0x85AB, 0x8DCC, 0x8DEC, 0x95EC, 0x960B, 0x960A, 0x9E0A, 0x9E2A, 0x9609, 0x95E9, 0x95E9, 0x95EA, // 0x0330 (816) +0x95EB, 0x9E0B, 0x9E0B, 0x9E0B, 0xA62B, 0xA64C, 0xA64D, 0xA64D, 0x9E0C, 0x9E0C, 0x95EB, 0x95EB, 0x9E2C, 0x9E0C, 0xB66F, 0x84CA, // 0x0340 (832) +0x3203, 0x6BAB, 0xAD71, 0xAD50, 0xB530, 0x940B, 0xACED, 0xAD0D, 0xAD2E, 0xBDB0, 0x846B, 0x8CCB, 0xB66E, 0xA64C, 0xAE6D, 0xAE8E, // 0x0350 (848) +0xAE4E, 0xAE6E, 0xB66E, 0xB66E, 0xB64D, 0xB66E, 0xBEAE, 0xBE8E, 0xBE8E, 0xBE8E, 0xB6AE, 0xB68E, 0xAE6E, 0xAE4D, 0xAE6D, 0xAE6D, // 0x0360 (864) +0xB68E, 0xB68E, 0xB68E, 0xB68D, 0xB68D, 0xB68C, 0xB66C, 0xB66B, 0xAE4A, 0xAE2A, 0xAE4A, 0xAE4A, 0xAE4A, 0xAE4B, 0xAE4B, 0xAE4B, // 0x0370 (880) +0x7DAA, 0x7D8A, 0x7D8A, 0x7D8B, 0x85AC, 0x85AC, 0x8DCC, 0x95EC, 0x95EC, 0x960B, 0x960B, 0x960B, 0x960B, 0x95EA, 0x95EA, 0x95EB, // 0x0380 (896) +0x95EC, 0x95EC, 0x9E0C, 0x9E2C, 0xA62C, 0xA62C, 0xA64D, 0x9E4D, 0x9E2D, 0x960C, 0x960C, 0x9E0C, 0x9E0D, 0xA62F, 0x954D, 0x29C0, // 0x0390 (912) +0x7368, 0xB50F, 0x9BE9, 0x9387, 0xA40B, 0xAC2B, 0x9BE8, 0x8345, 0x93A6, 0x8B86, 0xACCC, 0x83C8, 0x9D6C, 0xBE90, 0xBE50, 0xAE0F, // 0x03A0 (928) +0xB66F, 0xAE6F, 0xAE6F, 0xAE8F, 0xAE4E, 0xB66E, 0xB6AF, 0xB66E, 0xB68F, 0xB68F, 0xB6AF, 0xB68E, 0xAE6E, 0xAE6E, 0xA64E, 0xAE4E, // 0x03B0 (944) +0xB66F, 0xB66E, 0xB68E, 0xB68E, 0xB68E, 0xB68D, 0xB66D, 0xB66C, 0xAE4B, 0xAE2B, 0xAE2B, 0xAE4B, 0xAE4B, 0xAE4B, 0xAE4C, 0xAE4C, // 0x03C0 (960) +0x7D8A, 0x7D8B, 0x7DAB, 0x7DAB, 0x85AB, 0x85AC, 0x85CC, 0x8DCD, 0x8DED, 0x95ED, 0x95EC, 0x95EC, 0x95EC, 0x95EC, 0x95CC, 0x95CC, // 0x03D0 (976) +0x95EC, 0x95ED, 0x960D, 0x9E0C, 0x9E0C, 0x9E2D, 0x9E2D, 0x9E2D, 0x960D, 0x960D, 0x95EC, 0x95CC, 0x95CD, 0xAE31, 0x42C5, 0x2980, // 0x03E0 (992) +0x9C6C, 0x93C9, 0x8B87, 0x8347, 0x6AE7, 0x8BED, 0x7B4B, 0x62A9, 0x7308, 0x7B28, 0x6AE7, 0x7BCA, 0x42A5, 0x9D8F, 0xB671, 0xB670, // 0x03F0 (1008) +0xAE8F, 0xAE8F, 0xB68F, 0xAE8E, 0xAE6E, 0xAE6E, 0xB6AF, 0xB6AF, 0xB6AF, 0xB6AF, 0xB68F, 0xAE8F, 0xAE6E, 0xAE4E, 0xA64E, 0xA64E, // 0x0400 (1024) +0xAE4F, 0xAE6F, 0xB66F, 0xB68F, 0xB68E, 0xB68E, 0xB66D, 0xAE6D, 0xAE4C, 0xAE4C, 0xAE4C, 0xAE4C, 0xAE4C, 0xAE4C, 0xAE4C, 0xAE4C, // 0x0410 (1040) +0x7D8A, 0x7DAA, 0x7DAB, 0x7DAB, 0x7DAB, 0x7DAC, 0x85AC, 0x85CD, 0x8DEE, 0x8DEE, 0x8DED, 0x8DED, 0x8DCD, 0x8DCD, 0x8DCD, 0x8DCD, // 0x0420 (1056) +0x8DED, 0x95ED, 0x960D, 0x960D, 0x9E0D, 0x9E0D, 0x9E2D, 0x9E2E, 0x9E4E, 0x9E2E, 0x9E2E, 0x95AD, 0xA5EF, 0x84CC, 0x10E0, 0x5266, // 0x0430 (1072) +0x7B4A, 0x6A67, 0x6A87, 0x6AC7, 0x944E, 0x9470, 0x7BCF, 0x9CB2, 0x734C, 0x62A9, 0x5AA8, 0x7BAB, 0x4246, 0x4265, 0xAE10, 0xB690, // 0x0440 (1088) +0xB66F, 0xAE6F, 0xB68F, 0xAE6F, 0xAE6F, 0xB68F, 0xAE6E, 0xAE6F, 0xB68F, 0xB68F, 0xAE8F, 0xAE6E, 0xAE4E, 0xA64E, 0xAE4E, 0xAE4E, // 0x0450 (1104) +0xAE4E, 0xAE4E, 0xAE6E, 0xAE8F, 0xB68F, 0xB68F, 0xB66E, 0xAE4E, 0xAE4D, 0xAE4D, 0xAE4D, 0xAE4D, 0xA64D, 0xA64D, 0xA64D, 0xA64D, // 0x0460 (1120) +0x7DAA, 0x7DAA, 0x85AB, 0x85AB, 0x7DAB, 0x7DAB, 0x85AC, 0x85CD, 0x8DED, 0x8DED, 0x8DCD, 0x85CD, 0x8DCD, 0x8DCD, 0x8DCC, 0x8DCC, // 0x0470 (1136) +0x95EC, 0x95EC, 0x960C, 0x95ED, 0x95ED, 0x960D, 0x960E, 0x9E0E, 0x9E2F, 0x9E0E, 0x95EE, 0x95AD, 0xADF0, 0x5306, 0x10A0, 0x5AA8, // 0x0480 (1152) +0x7AEA, 0x6207, 0x72EA, 0x9C2F, 0x8BED, 0x942E, 0xA490, 0x8BCE, 0xAD13, 0xB534, 0x83AD, 0x942E, 0x62C9, 0x20A0, 0x5285, 0xAD90, // 0x0490 (1168) +0xBEB3, 0xB672, 0xB671, 0xAE50, 0xAE70, 0xB691, 0xAE4F, 0xB690, 0xAE4F, 0xAE4F, 0xAE6F, 0xAE6F, 0xAE4E, 0xAE4E, 0xAE6E, 0xAE6E, // 0x04A0 (1184) +0xAE4E, 0xAE6E, 0xAE6E, 0xAE6E, 0xB68F, 0xB68F, 0xB68F, 0xAE6E, 0xAE6E, 0xAE4E, 0xAE4E, 0xA64D, 0xA62D, 0xA64D, 0xA66D, 0xA64D, // 0x04B0 (1200) +0x7D8A, 0x85AB, 0x85AB, 0x85AB, 0x7DAB, 0x7DAB, 0x85CC, 0x85ED, 0x8DED, 0x8DED, 0x85CD, 0x85CC, 0x85AC, 0x85CB, 0x8DCB, 0x8DCB, // 0x04C0 (1216) +0x960C, 0x960C, 0x95EC, 0x95ED, 0x95ED, 0x95ED, 0x960E, 0x9E0F, 0x9E2F, 0xA650, 0x9DEE, 0x8D6D, 0x84CC, 0x2160, 0x10A0, 0x5AA7, // 0x04D0 (1232) +0x8BEB, 0x8BCB, 0xA46F, 0xB4F3, 0xAC71, 0xAC71, 0xAC71, 0xB4B3, 0xC598, 0xDE5B, 0xCDF9, 0x9C71, 0x6288, 0x3102, 0x3963, 0x4A26, // 0x04E0 (1248) +0x63AA, 0x84CD, 0xB653, 0xBEB4, 0xB673, 0xA5D0, 0x850C, 0x8D4D, 0xA5EF, 0xA62F, 0xAE6F, 0xAE6F, 0xAE6E, 0xAE6E, 0xAE6E, 0xB68F, // 0x04F0 (1264) +0xAE6E, 0xAE6E, 0xAE6E, 0xAE6E, 0xAE8F, 0xB68F, 0xB68F, 0xB66F, 0xAE6F, 0xAE4E, 0xA64E, 0xA64D, 0xA62D, 0xA64D, 0xA64D, 0xA64D, // 0x0500 (1280) +0x7D69, 0x7D8A, 0x85AB, 0x85AB, 0x85AB, 0x7D8C, 0x85AC, 0x85ED, 0x85ED, 0x85ED, 0x85CC, 0x85AC, 0x85AB, 0x85AB, 0x8DCB, 0x95EC, // 0x0510 (1296) +0x9E2B, 0x9E2B, 0xA64C, 0xA62B, 0x9E2C, 0x9E2C, 0x9E4D, 0xA66E, 0xAE8F, 0xA5EF, 0x94CE, 0x5AA8, 0x628A, 0x28E4, 0x18A1, 0x49E6, // 0x0520 (1312) +0x7B4B, 0x9BCD, 0xC490, 0xCCF2, 0xD553, 0xBCD1, 0x9BCE, 0xA3CE, 0xB410, 0xC4D3, 0xEEDA, 0xD658, 0x72CA, 0x30C3, 0x41A5, 0x5A68, // 0x0530 (1328) +0x5A48, 0x6248, 0x72EB, 0x9410, 0x8C12, 0x7391, 0x6B71, 0x6370, 0x73F1, 0x9D14, 0x9D31, 0xA58E, 0xB66E, 0xB6AD, 0xB6AE, 0xAEAE, // 0x0540 (1344) +0xAE8E, 0xAE6E, 0xAE8D, 0xAE6D, 0xB68F, 0xBE90, 0xB670, 0xB691, 0xB670, 0xAE50, 0xAE4E, 0xA64E, 0xA64D, 0xA64D, 0xA64E, 0xAE4E, // 0x0550 (1360) +0x7549, 0x7D6A, 0x85AB, 0x85AA, 0x85AB, 0x85AB, 0x85CC, 0x8DED, 0x8DED, 0x85CD, 0x85CC, 0x8DEC, 0x85AA, 0x8DCB, 0x960B, 0x960B, // 0x0560 (1376) +0xA64B, 0xAE6C, 0x9DAD, 0x8CEC, 0x7C4C, 0x6BCC, 0x742E, 0x94F2, 0x73ED, 0x52C8, 0x62C8, 0x49E4, 0x4162, 0x3901, 0x2880, 0x4983, // 0x0570 (1392) +0x72E8, 0xB48F, 0xC4D1, 0xD4F2, 0xCCD1, 0xD574, 0xE657, 0xDE17, 0xD5B5, 0xD595, 0xA470, 0xCD95, 0xA450, 0x28A1, 0x4164, 0x49E6, // 0x0580 (1408) +0x3984, 0x3143, 0x4185, 0x5207, 0x732B, 0x6AEA, 0x9450, 0x8C30, 0x8BF0, 0x9C93, 0xA4B4, 0xAD14, 0x94CF, 0x8CCD, 0x9DCE, 0xB6AF, // 0x0590 (1424) +0xB6AF, 0xAE4E, 0xB66E, 0xBEAE, 0xB66E, 0xB66E, 0xBEB0, 0xB690, 0xAE6F, 0xAE6F, 0xAE6E, 0xAE6E, 0xA64D, 0xA64D, 0xAE4E, 0xAE6E, // 0x05A0 (1440) +0x756B, 0x7D8B, 0x85AB, 0x85CA, 0x85AA, 0x85AA, 0x85CC, 0x8DED, 0x8DED, 0x8DCD, 0x8DEC, 0x8DEC, 0x8DCB, 0x8DCA, 0x9E2C, 0xA62D, // 0x05B0 (1456) +0x9DCD, 0x6BE8, 0x6349, 0x632C, 0x6B4F, 0x6B2F, 0x6B2F, 0x6B50, 0x4A2A, 0x2945, 0x3984, 0x5205, 0x5A25, 0x4962, 0x3081, 0x38C2, // 0x05C0 (1472) +0x8B29, 0xBCAF, 0x8AC9, 0x9B6C, 0xF698, 0xB4F2, 0x8C2F, 0x9470, 0xC5D5, 0xDE17, 0x5985, 0x6185, 0xAC50, 0x3902, 0x3943, 0x1060, // 0x05D0 (1488) +0x6348, 0x7BEB, 0x49E7, 0x7B2D, 0x6AAA, 0x93AE, 0x9BEE, 0x9C0E, 0xA450, 0x9C0F, 0x9BEF, 0xBD14, 0xACD3, 0x8BEF, 0x5AE9, 0x7C4B, // 0x05E0 (1504) +0xB630, 0xBE90, 0xB66E, 0xBE8E, 0xB68E, 0xB68E, 0xB68E, 0xB66E, 0xAE6E, 0xAE6E, 0xAE6E, 0xAE6D, 0xAE6D, 0xA64D, 0xAE4E, 0xAE6E, // 0x05F0 (1520) +0x7D8C, 0x7D8B, 0x7DAB, 0x85AA, 0x85AA, 0x85AA, 0x8DCC, 0x8DCC, 0x8DEC, 0x95EC, 0x8DCB, 0x8DAB, 0x9E0D, 0xA62F, 0x8D4D, 0x744B, // 0x0600 (1536) +0x6BAC, 0x632C, 0x73AE, 0x8C11, 0x83F0, 0x83D0, 0x6B2E, 0x736F, 0x736F, 0x4A29, 0x39A6, 0x20E2, 0x3963, 0x49C5, 0x30E3, 0x30C2, // 0x0610 (1552) +0x938B, 0xA3ED, 0x50E2, 0xCCD2, 0xBCF3, 0x9C10, 0xB514, 0xCDF7, 0xE6BA, 0xCDD6, 0x30A2, 0x6207, 0xB4D2, 0x28A1, 0x4144, 0x3122, // 0x0620 (1568) +0x6B69, 0x52A7, 0x5269, 0x51E9, 0x72AC, 0x93B0, 0x8B2E, 0x9BCF, 0xAC50, 0x7AE9, 0x8328, 0xC510, 0xB4AF, 0x9BEE, 0x72EB, 0x6ACA, // 0x0630 (1584) +0x7BEA, 0xADCF, 0xBE70, 0xBE8F, 0xBECF, 0xB66D, 0xB6AE, 0xB68E, 0xAE6E, 0xAE6D, 0xAE6D, 0xAE6D, 0xA64D, 0xA64D, 0xA64E, 0xAE4E, // 0x0640 (1600) +0x7D8B, 0x7D8B, 0x7D8B, 0x7D8B, 0x7D8A, 0x85AB, 0x8DCB, 0x95EC, 0x8DEB, 0x960C, 0x9E0C, 0x9E0D, 0x8D2D, 0x742B, 0x52E9, 0x6B4C, // 0x0650 (1616) +0x734D, 0x940F, 0x9C4F, 0x7B4B, 0x7B6C, 0x8BCF, 0x8BF1, 0x62AC, 0x7B90, 0x62AC, 0x4A29, 0x3165, 0x20E2, 0x3164, 0x28E1, 0x1820, // 0x0660 (1632) +0x7A88, 0xB40F, 0x6145, 0x7269, 0xDEB9, 0xF7DE, 0xE6DB, 0xCDB7, 0xDDF9, 0xEE5A, 0x726A, 0xCD56, 0xAC92, 0x28A1, 0x3964, 0x6B2B, // 0x0670 (1648) +0x6B6B, 0x10A1, 0x4A06, 0x3924, 0x72CB, 0x7AEC, 0x6AAB, 0x8B8E, 0x9C50, 0x2881, 0x3921, 0x7B08, 0x9BEA, 0xAC2C, 0x936B, 0x72A8, // 0x0680 (1664) +0x6B29, 0x7C0A, 0xC672, 0xC670, 0xBE8F, 0xB68E, 0xAE6D, 0xAE6E, 0xAE6D, 0xA64D, 0xA62D, 0xA62D, 0x9E2C, 0xA62D, 0x9E2E, 0xA62E, // 0x0690 (1680) +0x7D8B, 0x7D8B, 0x7D6B, 0x7D6B, 0x7D8B, 0x85AB, 0x8DEB, 0x8DEB, 0x9E2C, 0x9DEC, 0x9DEE, 0x8D0C, 0x6B89, 0x5AA8, 0x62CB, 0x72EC, // 0x06A0 (1696) +0x93AD, 0xB490, 0xB4CF, 0x6266, 0x49A4, 0x7B2C, 0xA472, 0x832D, 0x5A08, 0x93EF, 0x6ACA, 0x28C2, 0x20C2, 0x28E3, 0x20A1, 0x1860, // 0x06B0 (1712) +0x30E2, 0xAC71, 0xA38E, 0x7A89, 0xC554, 0xCDD6, 0xBCD3, 0xAC11, 0xB473, 0xDDF9, 0xEF1C, 0xE6DB, 0x732C, 0x28E1, 0x2922, 0x948E, // 0x06C0 (1728) +0x8C8E, 0x10C0, 0x3983, 0x49A4, 0x72CA, 0x59E7, 0x6AEA, 0x942F, 0x5228, 0x0800, 0x1820, 0x30C1, 0x8329, 0xB46D, 0xB46E, 0x82C9, // 0x06D0 (1744) +0x5A46, 0x62E8, 0x840A, 0xBE31, 0xBE70, 0xB68F, 0xB6AF, 0xAE8E, 0xAE6E, 0xA62D, 0x9E0C, 0x9DEC, 0x9DEC, 0x9E0D, 0x9E0D, 0x9E0E, // 0x06E0 (1760) +0x7DAB, 0x7D8B, 0x7D8B, 0x7D8C, 0x7DAC, 0x85CC, 0x8DEB, 0x8DEC, 0x95EC, 0x9DEE, 0x7C8B, 0x73AA, 0x736B, 0x62A9, 0x7B2B, 0x9BCD, // 0x06F0 (1776) +0xAC0E, 0x8309, 0x51A4, 0x2080, 0x2902, 0x8C0E, 0x83AC, 0x7B0A, 0x4143, 0x7B2A, 0x730A, 0x28A1, 0x2081, 0x20C2, 0x1061, 0x1861, // 0x0700 (1792) +0x1840, 0x51C6, 0xB470, 0xB44F, 0xBCD0, 0xBCF1, 0xBD12, 0xAC2F, 0xABF0, 0xCCF5, 0xDDF8, 0xC5B6, 0x4A26, 0x2982, 0x1980, 0x8D0D, // 0x0710 (1808) +0xB632, 0x29A1, 0x3141, 0x3922, 0x6227, 0x59E6, 0x6AA8, 0xA4B0, 0x4A06, 0x1020, 0x2081, 0x1840, 0x51E4, 0x832A, 0x938B, 0x7A88, // 0x0720 (1824) +0x4144, 0x5206, 0x4A24, 0x9D0D, 0xBE90, 0xB66F, 0xAE4E, 0xAE8E, 0xAE6E, 0xA62D, 0x9E0C, 0x9DEC, 0x9DEC, 0x9E0D, 0x960D, 0x960D, // 0x0730 (1840) +0x7D8B, 0x7D8B, 0x7D8B, 0x7D8C, 0x85CC, 0x85EC, 0x8E0B, 0x8E0C, 0x95EE, 0x850D, 0x5328, 0x7BAD, 0x62C9, 0x832B, 0xAC4D, 0xA42C, // 0x0740 (1856) +0x7AC7, 0x30C0, 0x1020, 0x0860, 0x29A4, 0x740D, 0x73AB, 0x62E8, 0x3102, 0x834C, 0x6A89, 0x20A1, 0x20C1, 0x2963, 0x0880, 0x0880, // 0x0750 (1872) +0x18C2, 0x18A1, 0x6A67, 0xC48F, 0xBC2D, 0xCCAF, 0xC4F0, 0xAC4E, 0x9BCE, 0xBC92, 0xDE18, 0x940F, 0x2942, 0x6BC9, 0x748A, 0x95AE, // 0x0760 (1888) +0xC6F5, 0x4AC7, 0x3143, 0x3923, 0x72A8, 0x7287, 0x6226, 0x8B8C, 0x72EA, 0x3944, 0x3122, 0x2080, 0x2080, 0x4963, 0x6226, 0x6226, // 0x0770 (1904) +0x51A6, 0x49A5, 0x39A2, 0x6B67, 0xC691, 0xB68F, 0xAE6E, 0xAE6E, 0xAE6E, 0xA62D, 0xA60C, 0x9E0C, 0x9E0C, 0x9E2C, 0x9E2C, 0x962C, // 0x0780 (1920) +0x7D8C, 0x7D8C, 0x75AA, 0x7DCB, 0x7DEB, 0x85EC, 0x8DED, 0x95CD, 0x9DAF, 0x6BA9, 0x4A44, 0x5205, 0x51C5, 0x82EA, 0xAC2E, 0x9BAC, // 0x0790 (1936) +0x49C5, 0x1020, 0x3081, 0x38A1, 0x38A1, 0x59C6, 0x836C, 0x6288, 0x3942, 0x8BAC, 0x49A7, 0x2061, 0x3142, 0x39A4, 0x18A0, 0x1080, // 0x07A0 (1952) +0x10A0, 0x1902, 0x2102, 0x6B2A, 0xA4B0, 0xBD12, 0xBCB1, 0xAC2F, 0xAC2F, 0xCD54, 0xA470, 0x41C5, 0x2141, 0x5305, 0x854B, 0xAE4F, // 0x07B0 (1968) +0xBE52, 0x6B89, 0x3982, 0x3983, 0x49E7, 0x6ACA, 0x3963, 0x5244, 0xAD6E, 0xB630, 0x8D6C, 0x9D6E, 0x5264, 0x5A24, 0x82E7, 0x7245, // 0x07C0 (1984) +0x61E5, 0x51A5, 0x3963, 0x5286, 0xB60F, 0xB68F, 0xAE6F, 0xAE6E, 0xA64D, 0xA64C, 0xA62C, 0xA62C, 0xA62C, 0xA62C, 0xA62D, 0x9E0D, // 0x07D0 (2000) +0x7D8B, 0x7D8B, 0x7DAB, 0x85CB, 0x85AB, 0x85CC, 0x8DCC, 0x95CD, 0x8D2D, 0x3203, 0x39C3, 0x3983, 0x49A4, 0x6226, 0x5183, 0x4142, // 0x07E0 (2016) +0x1880, 0x2100, 0x39C2, 0x6326, 0x844A, 0x8C4B, 0x736A, 0x5206, 0x51C5, 0x93AD, 0x4964, 0x28C1, 0x3182, 0x4A45, 0x3184, 0x18A1, // 0x07F0 (2032) +0x1840, 0x3103, 0x3102, 0x3102, 0x49E6, 0x730B, 0x940F, 0xACD2, 0xACF3, 0x7B6D, 0x49E6, 0x20C1, 0x18C0, 0x2142, 0x31C3, 0x4225, // 0x0800 (2048) +0x18E0, 0x20C0, 0x3962, 0x41A3, 0x3141, 0x4A05, 0x41C4, 0x6B08, 0xA56E, 0xB64F, 0xAE70, 0xBE91, 0x8C6A, 0x6285, 0x8B49, 0x7AA8, // 0x0810 (2064) +0x7267, 0x51C5, 0x4184, 0x3982, 0x9D2C, 0xBE8F, 0xAE4E, 0xAE6E, 0xA64D, 0xA62C, 0xA62B, 0xA60B, 0xA60B, 0xA62C, 0xA62C, 0xA62D, // 0x0820 (2080) +0x856B, 0x858B, 0x8DCB, 0x85CB, 0x85AB, 0x85CB, 0x8DAB, 0x95CE, 0x744B, 0x29C2, 0x2962, 0x3142, 0x3943, 0x5206, 0x30C0, 0x20A0, // 0x0830 (2096) +0x5B26, 0x7C89, 0x8D4A, 0xAE4D, 0xAE8D, 0x958B, 0x52E5, 0x4A05, 0x8BAD, 0x836C, 0x28C0, 0x3121, 0x4A45, 0x4225, 0x2923, 0x20A1, // 0x0840 (2112) +0x2860, 0x4122, 0x6225, 0x51C4, 0x4183, 0x3942, 0x3964, 0x5A89, 0x4A07, 0x41E6, 0x3163, 0x18A0, 0x18A0, 0x1860, 0x1000, 0x0800, // 0x0850 (2128) +0x28C3, 0x2081, 0x28E1, 0x3121, 0x3121, 0x5245, 0x62E7, 0x7BC9, 0xB60F, 0xAE2E, 0x9E0C, 0xAE4E, 0x94EB, 0x62C5, 0x7AE8, 0x7AC8, // 0x0860 (2144) +0x7267, 0x51A5, 0x4184, 0x3141, 0x6346, 0xBE70, 0xB66F, 0xAE4D, 0xAE4C, 0xA62B, 0xA62B, 0xA60B, 0xA62B, 0xA62B, 0xA62C, 0xA64C, // 0x0870 (2160) +0x8D8A, 0x858A, 0x8DAA, 0x85AA, 0x85AA, 0x85AB, 0x858B, 0x9DCE, 0x6BE9, 0x2982, 0x2942, 0x3963, 0x49C5, 0x49A5, 0x3922, 0x3181, // 0x0880 (2176) +0x8D6C, 0x9E4C, 0x9E4B, 0xA62A, 0x9E09, 0xA5CB, 0x9D4D, 0x6B49, 0x6AE9, 0x3963, 0x2101, 0x2963, 0x18C0, 0x18C1, 0x3102, 0x30C1, // 0x0890 (2192) +0x4141, 0x4982, 0x6A85, 0x7AE7, 0x8327, 0x8B69, 0x7266, 0x6225, 0x6226, 0x5A05, 0x4183, 0x28C0, 0x1880, 0x1040, 0x1881, 0x3124, // 0x08A0 (2208) +0x49C6, 0x49C5, 0x49A4, 0x3923, 0x3102, 0x28E0, 0x7388, 0xB5EF, 0xB64E, 0xAE4C, 0xAE6C, 0xAE4D, 0x94EB, 0x5264, 0x7B08, 0x7AA8, // 0x08B0 (2224) +0x6A67, 0x51C5, 0x4184, 0x3142, 0x3180, 0x9D4D, 0xBE8F, 0xAE4D, 0xAE6C, 0xAE4C, 0xA62B, 0xA60A, 0xA60A, 0xA62A, 0xA62B, 0xA62B, // 0x08C0 (2240) +0x85AA, 0x85AA, 0x7DAA, 0x7D8A, 0x7DAA, 0x85AB, 0x858B, 0x95AE, 0x4AC6, 0x20E1, 0x3122, 0x3943, 0x5A06, 0x49A5, 0x3922, 0x4203, // 0x08D0 (2256) +0x856A, 0x8DE9, 0x95E8, 0xA609, 0xADE9, 0xB62D, 0x94EC, 0x2982, 0x18C1, 0x20A1, 0x28E1, 0x1880, 0x0820, 0x1040, 0x20C1, 0x3962, // 0x08E0 (2272) +0x51C4, 0x51E3, 0x72A6, 0x7AA6, 0x82C6, 0xABCA, 0xABC9, 0x9327, 0x7A86, 0x6A25, 0x59C5, 0x3902, 0x2080, 0x20A1, 0x3963, 0x49E4, // 0x08F0 (2288) +0x49A4, 0x5206, 0x5A26, 0x51E6, 0x4143, 0x28E1, 0x20C0, 0x6B66, 0xBE8D, 0xB66B, 0xAE4B, 0xB68D, 0x9D4B, 0x4A62, 0x72E8, 0x72A8, // 0x0900 (2304) +0x6226, 0x5A06, 0x49C5, 0x3942, 0x2940, 0x6BA7, 0xBE4F, 0xAE2C, 0xAE4C, 0xA62B, 0xA62B, 0x9E0A, 0x9E0A, 0x9E0A, 0xA62A, 0xA62B, // 0x0910 (2320) +0x85A9, 0x85CA, 0x7D8A, 0x7569, 0x7D8A, 0x7D8A, 0x8DAC, 0x850B, 0x2161, 0x20E2, 0x3123, 0x4144, 0x59E5, 0x59E5, 0x4143, 0x4A24, // 0x0920 (2336) +0x954B, 0x9DEA, 0xAE29, 0xB64A, 0xB64C, 0x7C68, 0x1100, 0x18C1, 0x28E3, 0x30C2, 0x30A0, 0x38C1, 0x28C2, 0x20A1, 0x18A0, 0x2922, // 0x0930 (2352) +0x4964, 0x5184, 0x7AA8, 0x8B09, 0x82A7, 0x8AC7, 0x9B68, 0xA389, 0x82E7, 0x6A47, 0x59E6, 0x4124, 0x30A2, 0x28A2, 0x49A4, 0x72C9, // 0x0940 (2368) +0x72C9, 0x5A06, 0x5205, 0x5204, 0x51C5, 0x4143, 0x28E1, 0x1080, 0x5B25, 0xC6AF, 0xB68D, 0xB66C, 0xADCC, 0x5283, 0x6AA7, 0x6A68, // 0x0950 (2384) +0x6206, 0x5A06, 0x51C5, 0x4184, 0x3962, 0x4A43, 0xADCD, 0xB62C, 0xAE2B, 0xA60B, 0x9E0B, 0x9E0A, 0x9E0A, 0x9E0A, 0xA60A, 0x9E0A, // 0x0960 (2400) +0x85A9, 0x85AA, 0x7D6A, 0x756A, 0x7D8A, 0x858A, 0x95EC, 0x63A6, 0x10C0, 0x28E2, 0x3923, 0x49A5, 0x6246, 0x4183, 0x3962, 0x4A24, // 0x0970 (2416) +0x954B, 0xA5EA, 0xA609, 0xBE6C, 0x7C88, 0x10E0, 0x18E0, 0x3123, 0x4144, 0x4124, 0x4943, 0x4963, 0x3102, 0x2081, 0x20C1, 0x30E2, // 0x0980 (2432) +0x4143, 0x5184, 0x6A26, 0x8AC9, 0x9B6A, 0xA38A, 0x9B6A, 0x9B6A, 0x936A, 0x7AC9, 0x6227, 0x4985, 0x4164, 0x3903, 0x3903, 0x4985, // 0x0990 (2448) +0x6249, 0x6A89, 0x5A45, 0x49A3, 0x51C5, 0x4964, 0x3923, 0x28E1, 0x1060, 0x6327, 0xBE4F, 0xC690, 0x950C, 0x4202, 0x6266, 0x72A8, // 0x09A0 (2464) +0x6A47, 0x6226, 0x59E6, 0x5206, 0x41A5, 0x39C2, 0x94CA, 0xB64D, 0xA60B, 0xA60B, 0x9E0B, 0x9E0A, 0x9E0A, 0x9E0A, 0x9E0A, 0x9DEA, // 0x09B0 (2480) +0x85A9, 0x7D69, 0x7D49, 0x7D6A, 0x7D8B, 0x858B, 0x95CC, 0x3A61, 0x10C0, 0x2903, 0x28A1, 0x51A5, 0x5205, 0x4182, 0x3121, 0x52A5, // 0x09C0 (2496) +0x9DCC, 0x9E0A, 0xAE8B, 0x8D29, 0x1920, 0x20E0, 0x28E1, 0x3943, 0x4963, 0x4984, 0x49C5, 0x3963, 0x3964, 0x28C2, 0x3901, 0x4942, // 0x09D0 (2512) +0x4142, 0x6245, 0x6A65, 0x7AA6, 0x9369, 0xAC0C, 0x9B6A, 0xA3AB, 0x938B, 0x7AE8, 0x6A86, 0x51E4, 0x49C4, 0x51E5, 0x51E7, 0x51A6, // 0x09E0 (2528) +0x51A6, 0x6228, 0x6AC9, 0x5A46, 0x51A4, 0x4923, 0x4145, 0x3924, 0x2901, 0x2100, 0x39C2, 0x8C6C, 0x73C9, 0x2120, 0x5203, 0x5A04, // 0x09F0 (2544) +0x6A66, 0x6A88, 0x6A88, 0x6A89, 0x6289, 0x41C3, 0x6BA5, 0xAE0C, 0xA5EB, 0x9DEB, 0x9DEB, 0x9E0A, 0x9E0A, 0x9E0A, 0x9DEA, 0x9DEA, // 0x0A00 (2560) +0x7588, 0x7D68, 0x8569, 0x8569, 0x85A8, 0x95CB, 0x8CAB, 0x2120, 0x2101, 0x20C0, 0x3923, 0x5A06, 0x59E6, 0x49C4, 0x3101, 0x4A43, // 0x0A10 (2576) +0x9DCC, 0xA64D, 0x9D8E, 0x2961, 0x18A0, 0x28E1, 0x3922, 0x49C5, 0x4984, 0x51E6, 0x4963, 0x4122, 0x4122, 0x3901, 0x49A4, 0x4143, // 0x0A20 (2592) +0x4983, 0x59E5, 0x72A8, 0x7287, 0x8309, 0x938B, 0x8B4A, 0x8B2A, 0x8329, 0x7AC9, 0x72C9, 0x6A67, 0x51A5, 0x5A06, 0x6AC9, 0x6AC9, // 0x0A30 (2608) +0x6AC9, 0x6AA9, 0x7AEA, 0x72EA, 0x3943, 0x3943, 0x3943, 0x4184, 0x4984, 0x4985, 0x28E3, 0x2923, 0x39C5, 0x1880, 0x49C4, 0x6205, // 0x0A40 (2624) +0x72A8, 0x830A, 0x72C9, 0x6226, 0x5205, 0x5226, 0x4A04, 0xA52E, 0x9E0C, 0x95EA, 0x960A, 0x9E0A, 0x9E09, 0x9E0A, 0x9DE9, 0x9DC9, // 0x0A50 (2640) +0x6D48, 0x7549, 0x7D49, 0x8569, 0x8589, 0x95CC, 0x7409, 0x18A0, 0x20E0, 0x28E1, 0x49A5, 0x5A07, 0x51C5, 0x51C5, 0x3963, 0x4203, // 0x0A60 (2656) +0x9DCD, 0xA62F, 0x42A4, 0x0840, 0x2902, 0x28C1, 0x49C5, 0x49C5, 0x49C5, 0x51C5, 0x4143, 0x51A4, 0x51A4, 0x51A4, 0x5A05, 0x51A4, // 0x0A70 (2672) +0x4163, 0x51A4, 0x6A87, 0x72A8, 0x832A, 0x8309, 0x72A8, 0x7AC8, 0x7AC8, 0x7AC9, 0x6A88, 0x6A68, 0x51E6, 0x5A27, 0x6AA9, 0x6AA9, // 0x0A80 (2688) +0x7B0A, 0x832B, 0x834C, 0x6A68, 0x3102, 0x3943, 0x4184, 0x51E5, 0x51E5, 0x49A5, 0x3964, 0x3123, 0x18A1, 0x1020, 0x3922, 0x6226, // 0x0A90 (2704) +0x7288, 0x7AC9, 0x72A8, 0x6247, 0x5205, 0x5205, 0x49C4, 0x7BEA, 0x9DEC, 0x95CA, 0x8DC9, 0x95E9, 0x9E09, 0x9E0A, 0x9DE9, 0x95C9, // 0x0AA0 (2720) +0x6508, 0x6D49, 0x7529, 0x858B, 0x85AA, 0x95ED, 0x5B27, 0x18A0, 0x2901, 0x3123, 0x4164, 0x4965, 0x49A5, 0x51C5, 0x3963, 0x4224, // 0x0AB0 (2736) +0xADF0, 0x748A, 0x0080, 0x18A0, 0x2081, 0x3123, 0x4184, 0x49A4, 0x4984, 0x4184, 0x4984, 0x6206, 0x6226, 0x7287, 0x6A67, 0x6226, // 0x0AC0 (2752) +0x4963, 0x4983, 0x5A06, 0x6A88, 0x832A, 0x72A8, 0x5A06, 0x6226, 0x830A, 0x7B0A, 0x6A88, 0x6268, 0x5A47, 0x6247, 0x6268, 0x6268, // 0x0AD0 (2768) +0x834B, 0x93CD, 0x9C0E, 0x51C5, 0x3923, 0x4984, 0x5206, 0x6247, 0x72A8, 0x72A9, 0x49A5, 0x3964, 0x20C2, 0x1860, 0x30E1, 0x59E5, // 0x0AE0 (2784) +0x6226, 0x6A68, 0x6AA8, 0x6267, 0x5A46, 0x5205, 0x49E4, 0x6B68, 0x9DCC, 0x8DCA, 0x8D88, 0x8DA9, 0x95E9, 0x95E9, 0x95C9, 0x95A9, // 0x0AF0 (2800) +0x5CE8, 0x6509, 0x6D2A, 0x7D8C, 0x7DAB, 0x8DAD, 0x4264, 0x2101, 0x28E1, 0x3943, 0x4185, 0x51C6, 0x6247, 0x5A06, 0x3943, 0x3983, // 0x0B00 (2816) +0x73EB, 0x1920, 0x10A0, 0x2923, 0x3123, 0x3102, 0x3102, 0x3122, 0x28C1, 0x3943, 0x5A06, 0x6226, 0x72A7, 0x8309, 0x6A67, 0x6A47, // 0x0B10 (2832) +0x51C4, 0x51A4, 0x59E6, 0x6AA8, 0x834B, 0x72C9, 0x51C5, 0x51C5, 0x72CA, 0x6A88, 0x6247, 0x5A27, 0x6248, 0x6248, 0x5A27, 0x6248, // 0x0B20 (2848) +0x832A, 0x9C0E, 0x9C2F, 0x30E2, 0x4184, 0x51C5, 0x5A26, 0x6A67, 0x7AEA, 0x7AEA, 0x6A89, 0x49C6, 0x3944, 0x20A1, 0x2060, 0x51C5, // 0x0B30 (2864) +0x51C4, 0x6206, 0x5A26, 0x59E6, 0x5A47, 0x5A47, 0x5A46, 0x5AC6, 0x956B, 0x8DAA, 0x8D69, 0x8D68, 0x8D88, 0x8DA9, 0x8D89, 0x8D89, // 0x0B40 (2880) +0x5D09, 0x6509, 0x6D2B, 0x756C, 0x758B, 0x7D0B, 0x31C3, 0x3122, 0x3102, 0x3923, 0x49C5, 0x51C5, 0x49C5, 0x51C5, 0x4984, 0x3102, // 0x0B50 (2896) +0x18E0, 0x0040, 0x20C2, 0x3944, 0x4164, 0x3102, 0x28E1, 0x3122, 0x20A1, 0x2080, 0x51E5, 0x7AE9, 0x7AE8, 0x8B49, 0x8309, 0x59E5, // 0x0B60 (2912) +0x51A4, 0x49A4, 0x51E6, 0x6A88, 0x72EA, 0x6268, 0x4144, 0x4985, 0x6268, 0x51E6, 0x5A27, 0x5207, 0x6248, 0x6247, 0x5A27, 0x6A68, // 0x0B70 (2928) +0x832B, 0xA44F, 0x6AC9, 0x1860, 0x4184, 0x5A06, 0x6226, 0x6A67, 0x7AC8, 0x7AE9, 0x7B0A, 0x6248, 0x4164, 0x2081, 0x2080, 0x49C4, // 0x0B80 (2944) +0x51C5, 0x6206, 0x5A26, 0x51A4, 0x51C5, 0x5A47, 0x6287, 0x4203, 0x7CA9, 0x8DAA, 0x8D69, 0x8549, 0x8548, 0x8568, 0x8D69, 0x8D69, // 0x0B90 (2960) +0x5D08, 0x6509, 0x6D4B, 0x6D4B, 0x758B, 0x6CAA, 0x2961, 0x3143, 0x3103, 0x4164, 0x49C5, 0x51E5, 0x51E5, 0x5206, 0x49A5, 0x30E2, // 0x0BA0 (2976) +0x0820, 0x18A1, 0x3124, 0x4165, 0x3963, 0x3102, 0x4184, 0x3123, 0x20A1, 0x28C2, 0x3102, 0x7AE9, 0x9BEB, 0x9BCB, 0x938B, 0x6A46, // 0x0BB0 (2992) +0x51A4, 0x49A4, 0x5A06, 0x6A88, 0x72EA, 0x6268, 0x3944, 0x4185, 0x6AAA, 0x5207, 0x5A27, 0x5A27, 0x6A89, 0x6A88, 0x6247, 0x72A9, // 0x0BC0 (3008) +0x8B8C, 0x9BED, 0x2902, 0x1040, 0x2902, 0x51E6, 0x6246, 0x6246, 0x7287, 0x8329, 0x72C9, 0x6A68, 0x49A5, 0x28A1, 0x28A1, 0x49E5, // 0x0BD0 (3024) +0x6226, 0x5A05, 0x6246, 0x59E6, 0x4984, 0x51E6, 0x6288, 0x41E3, 0x6C07, 0x8D6A, 0x8549, 0x8528, 0x7D28, 0x8528, 0x8549, 0x8549, // 0x0BE0 (3040) +0x5D08, 0x6509, 0x6D4A, 0x6D4B, 0x758B, 0x6469, 0x2141, 0x3122, 0x3923, 0x4164, 0x4184, 0x49C4, 0x5206, 0x5206, 0x4164, 0x3103, // 0x0BF0 (3056) +0x1860, 0x28C2, 0x4185, 0x51C5, 0x4142, 0x4142, 0x5206, 0x3143, 0x28E2, 0x28C2, 0x1840, 0x6226, 0x9BEC, 0xA3EB, 0xA3EC, 0x7AA8, // 0x0C00 (3072) +0x51A4, 0x51A5, 0x6A88, 0x6A68, 0x6AC9, 0x6268, 0x4164, 0x3964, 0x6AAA, 0x6268, 0x5A27, 0x6268, 0x72C9, 0x72A9, 0x6A68, 0x832A, // 0x0C10 (3088) +0x93AC, 0x6AA8, 0x0800, 0x1060, 0x1860, 0x3943, 0x59E6, 0x59C4, 0x6226, 0x7AC8, 0x7AE9, 0x6247, 0x51C5, 0x3923, 0x1840, 0x5206, // 0x0C20 (3104) +0x6A87, 0x6226, 0x6226, 0x5A06, 0x49A5, 0x51C5, 0x5A47, 0x41E3, 0x6BE7, 0x8D4A, 0x8509, 0x8508, 0x7D08, 0x7D08, 0x8528, 0x7D28, // 0x0C30 (3120) +0x6548, 0x6D49, 0x6D6A, 0x6D6B, 0x758B, 0x6469, 0x2961, 0x3922, 0x4143, 0x4984, 0x49A4, 0x51E5, 0x49E5, 0x49C5, 0x4964, 0x3903, // 0x0C40 (3136) +0x2061, 0x3944, 0x49A5, 0x51A5, 0x4163, 0x49A4, 0x49E5, 0x4185, 0x28E3, 0x20C2, 0x1820, 0x3921, 0x8B49, 0x9BCB, 0xA40C, 0x7AA7, // 0x0C50 (3152) +0x51C4, 0x6226, 0x834B, 0x6A88, 0x6AA9, 0x6248, 0x4185, 0x3964, 0x5A68, 0x6AAA, 0x6268, 0x72C9, 0x72E9, 0x6A88, 0x6A67, 0x8B6B, // 0x0C60 (3168) +0x93AD, 0x4163, 0x0840, 0x1080, 0x1040, 0x28C1, 0x51A5, 0x5183, 0x59E4, 0x6A66, 0x72C8, 0x6A67, 0x59E6, 0x4143, 0x20A0, 0x49C4, // 0x0C70 (3184) +0x6A87, 0x72C9, 0x6AA8, 0x59E6, 0x49A5, 0x51C5, 0x51E6, 0x49E4, 0x7428, 0x958B, 0x8509, 0x8509, 0x7D28, 0x7D28, 0x8529, 0x7D28, // 0x0C80 (3200) +0x6D69, 0x7569, 0x7569, 0x7D69, 0x7DAA, 0x6C68, 0x2141, 0x3944, 0x4184, 0x49C5, 0x4984, 0x4984, 0x51C5, 0x51E6, 0x49A4, 0x3963, // 0x0C90 (3216) +0x20A1, 0x28E2, 0x49A5, 0x4964, 0x4964, 0x5A06, 0x49A5, 0x3964, 0x2102, 0x1080, 0x1060, 0x1860, 0x6267, 0x93EC, 0x938A, 0x7286, // 0x0CA0 (3232) +0x59E4, 0x7AA8, 0x832A, 0x72A9, 0x832B, 0x6228, 0x4185, 0x4164, 0x5A48, 0x6AAA, 0x6A88, 0x7AEA, 0x7B0A, 0x8B6B, 0x938B, 0xA40E, // 0x0CB0 (3248) +0x8B6C, 0x30C2, 0x1860, 0x20C1, 0x1080, 0x1080, 0x41C2, 0x5A44, 0x51A4, 0x59A5, 0x6206, 0x5A06, 0x51C4, 0x4963, 0x30C1, 0x6226, // 0x0CC0 (3264) +0x7AC9, 0x7AE9, 0x6A68, 0x51C5, 0x4984, 0x51C5, 0x51E5, 0x41E3, 0x6BC6, 0x956A, 0x854A, 0x8529, 0x8528, 0x7D28, 0x8548, 0x7D48, // 0x0CD0 (3280) +0x7569, 0x7D8A, 0x7D89, 0x7D69, 0x85AA, 0x6C68, 0x2961, 0x3984, 0x4184, 0x4164, 0x3942, 0x4984, 0x51E5, 0x51E5, 0x49C5, 0x49C5, // 0x0CE0 (3296) +0x28E2, 0x28E2, 0x4164, 0x4964, 0x59E6, 0x51C5, 0x3963, 0x2902, 0x18C1, 0x1060, 0x1040, 0x1040, 0x4163, 0x836A, 0x8B6A, 0x7AC8, // 0x0CF0 (3312) +0x9BEC, 0xB490, 0x834A, 0x832B, 0x8B8C, 0x6248, 0x49A5, 0x4164, 0x5207, 0x6AA9, 0x7B2B, 0x72C9, 0x7B0A, 0xBCD1, 0xC552, 0xB48F, // 0x0D00 (3328) +0x8B8C, 0x30E1, 0x20C0, 0x2922, 0x20C2, 0x0820, 0x28C1, 0x6267, 0x6A87, 0x59E4, 0x4983, 0x5183, 0x4162, 0x4142, 0x4122, 0x6206, // 0x0D10 (3344) +0x8309, 0x6A87, 0x59C5, 0x51A4, 0x4963, 0x51A4, 0x5A26, 0x41E3, 0x6385, 0x958B, 0x8D8A, 0x8D69, 0x8549, 0x8549, 0x8569, 0x7D48, // 0x0D20 (3360) +0x7D89, 0x85AA, 0x8589, 0x7D69, 0x85AA, 0x6C48, 0x2961, 0x4185, 0x51E5, 0x49A4, 0x4983, 0x51A4, 0x59E5, 0x59E6, 0x5A06, 0x51E6, // 0x0D30 (3376) +0x3102, 0x28C1, 0x4163, 0x5A06, 0x6227, 0x4984, 0x3102, 0x20E2, 0x1080, 0x1060, 0x20A1, 0x2060, 0x30C1, 0x72A8, 0x8B4A, 0x8309, // 0x0D40 (3392) +0xBCD0, 0xCD53, 0x93CC, 0x93CD, 0x9C2E, 0x6268, 0x5206, 0x4164, 0x5A27, 0x72EA, 0x834B, 0x72A9, 0x834B, 0xB490, 0xC511, 0xB490, // 0x0D50 (3408) +0x8B6B, 0x38E1, 0x28E0, 0x2901, 0x20C2, 0x1042, 0x1020, 0x3944, 0x5A46, 0x6A87, 0x6245, 0x59E4, 0x4983, 0x5184, 0x4984, 0x4123, // 0x0D60 (3424) +0x7288, 0x7288, 0x59E5, 0x51A4, 0x4963, 0x4983, 0x5205, 0x4203, 0x6385, 0x95AB, 0x8D8A, 0x8D8A, 0x8D69, 0x8D89, 0x8D69, 0x8548, // 0x0D70 (3440) +0x8589, 0x85AA, 0x8568, 0x7D48, 0x858A, 0x6406, 0x2961, 0x49A5, 0x49A5, 0x4163, 0x4163, 0x49A4, 0x5A26, 0x6247, 0x6A88, 0x5A27, // 0x0D80 (3456) +0x3122, 0x28E1, 0x51C5, 0x6A88, 0x51C5, 0x3103, 0x20C1, 0x1880, 0x0840, 0x1880, 0x3964, 0x30E2, 0x38E1, 0x6226, 0x8329, 0x8B4A, // 0x0D90 (3472) +0x9C0D, 0xAC8F, 0x9C0D, 0xA44F, 0xA44F, 0x72EA, 0x5A27, 0x49A5, 0x5A07, 0x7B2B, 0x7B2B, 0x72A9, 0x8B6B, 0xA40E, 0xAC4E, 0xA42E, // 0x0DA0 (3488) +0x832A, 0x3902, 0x3941, 0x3142, 0x20A2, 0x1021, 0x1041, 0x1860, 0x3123, 0x49A5, 0x5205, 0x6266, 0x6226, 0x51A4, 0x51A5, 0x59E6, // 0x0DB0 (3504) +0x59C5, 0x6A46, 0x59E5, 0x49A3, 0x4963, 0x4963, 0x49A4, 0x39C2, 0x6BE7, 0x9DCC, 0x8D89, 0x8DA9, 0x8D89, 0x8D89, 0x8D88, 0x8D68, // 0x0DC0 (3520) +0x85A9, 0x8DAA, 0x8568, 0x8548, 0x858A, 0x6427, 0x2961, 0x49A5, 0x4164, 0x4163, 0x51A4, 0x51C5, 0x49A4, 0x4984, 0x5A26, 0x5A47, // 0x0DD0 (3536) +0x3943, 0x28C1, 0x49A5, 0x49A5, 0x3123, 0x20A1, 0x18A1, 0x1060, 0x1060, 0x20C2, 0x5206, 0x4984, 0x4943, 0x6205, 0x7B09, 0x8B8B, // 0x0DE0 (3552) +0x8B6B, 0x93CC, 0x8BAC, 0xAC6F, 0xA44F, 0x7B2B, 0x51E6, 0x6247, 0x6248, 0x6AA9, 0x7B0A, 0x7AEA, 0x834B, 0xA42E, 0xA40E, 0x8B8C, // 0x0DF0 (3568) +0x72C9, 0x3923, 0x3923, 0x3102, 0x1880, 0x0820, 0x2962, 0x20E0, 0x18A0, 0x28E2, 0x3122, 0x3923, 0x4163, 0x4983, 0x4964, 0x5185, // 0x0E00 (3584) +0x51A5, 0x59C5, 0x6246, 0x6246, 0x51C4, 0x4963, 0x4183, 0x41C3, 0x6BC8, 0x9DAC, 0x95AA, 0x95C9, 0x95A9, 0x95A9, 0x8D89, 0x8D88, // 0x0E10 (3600) +0x85A9, 0x85A9, 0x8568, 0x8569, 0x858A, 0x6C47, 0x2961, 0x4184, 0x4164, 0x4163, 0x4983, 0x4963, 0x4983, 0x51C5, 0x5A46, 0x5A06, // 0x0E20 (3616) +0x3943, 0x28C1, 0x30E2, 0x28A1, 0x20C1, 0x18A1, 0x1080, 0x1080, 0x0840, 0x20C1, 0x5206, 0x59E5, 0x51A4, 0x6226, 0x7AE8, 0x8BAB, // 0x0E30 (3632) +0x836A, 0x8B6B, 0x832A, 0x93CD, 0x9C2E, 0x72C9, 0x5206, 0x7B0B, 0x6A89, 0x5A47, 0x6AA9, 0x7AEA, 0x7B0A, 0x93CD, 0x834A, 0x7B0A, // 0x0E40 (3648) +0x6A89, 0x4985, 0x3103, 0x20A1, 0x1880, 0x0860, 0x5B46, 0x6BC8, 0x3A03, 0x2121, 0x20E0, 0x3101, 0x3122, 0x3922, 0x3922, 0x4164, // 0x0E50 (3664) +0x4984, 0x51A4, 0x5A25, 0x5A25, 0x4984, 0x3902, 0x30E1, 0x3982, 0x5B26, 0x954C, 0x9E0B, 0x9DEA, 0x95C9, 0x95C9, 0x95A9, 0x8D89, // 0x0E60 (3680) +0x8589, 0x8589, 0x8568, 0x8569, 0x8569, 0x7488, 0x2982, 0x3964, 0x4164, 0x49A4, 0x49A4, 0x4163, 0x4183, 0x5206, 0x5A46, 0x51C5, // 0x0E70 (3696) +0x3102, 0x30E2, 0x28C1, 0x20C2, 0x20C1, 0x18C1, 0x0860, 0x0860, 0x0840, 0x20A0, 0x49C5, 0x59E5, 0x51A4, 0x6246, 0x72C8, 0x834A, // 0x0E80 (3712) +0x7AE8, 0x7AE9, 0x832A, 0x7B0A, 0x93CD, 0x6AA8, 0x72C9, 0x7B2B, 0x6268, 0x6A89, 0x6A88, 0x6A88, 0x7AEA, 0x834B, 0x72A8, 0x72A9, // 0x0E90 (3728) +0x5A47, 0x3944, 0x28C2, 0x28A1, 0x1880, 0x0040, 0x6BE6, 0xAE2D, 0x958B, 0x5B85, 0x31A0, 0x20E0, 0x28E0, 0x3102, 0x3102, 0x3123, // 0x0EA0 (3744) +0x4164, 0x41A4, 0x4183, 0x3942, 0x4143, 0x38E2, 0x30A1, 0x3121, 0x4A64, 0x84AA, 0xA60B, 0x9E0A, 0x9DC9, 0x9DEA, 0x95C9, 0x8DA9, // 0x0EB0 (3760) +0x7D89, 0x7D69, 0x7D68, 0x7D48, 0x7D49, 0x7CCA, 0x31A3, 0x3984, 0x4184, 0x4984, 0x4163, 0x4983, 0x4984, 0x51E5, 0x51C4, 0x4163, // 0x0EC0 (3776) +0x3102, 0x28C1, 0x28E1, 0x20C2, 0x18A1, 0x0840, 0x18E2, 0x2122, 0x1080, 0x1860, 0x4184, 0x4984, 0x4963, 0x5A05, 0x6A87, 0x72C8, // 0x0ED0 (3792) +0x6A66, 0x7287, 0x834A, 0x7AE9, 0x8B8B, 0x7B2A, 0x836C, 0x72C9, 0x6268, 0x72C9, 0x5A06, 0x6268, 0x7AEA, 0x6A88, 0x6247, 0x6288, // 0x0EE0 (3808) +0x5A06, 0x3923, 0x30E2, 0x28A1, 0x1060, 0x0880, 0x63E5, 0xA60B, 0x9E09, 0xAE4C, 0x950A, 0x5B06, 0x3163, 0x20C1, 0x20C1, 0x2902, // 0x0EF0 (3824) +0x3103, 0x3123, 0x3121, 0x3100, 0x30C1, 0x30A2, 0x3903, 0x3963, 0x39C3, 0x73E8, 0x9DCB, 0x9DE9, 0x9DE9, 0x95CA, 0x8DC9, 0x8DA9, // 0x0F00 (3840) +0x7D6C, 0x7D6B, 0x7548, 0x7569, 0x7549, 0x7CEB, 0x4A44, 0x4143, 0x49A4, 0x4183, 0x41A3, 0x5204, 0x62A6, 0x49C4, 0x4163, 0x30E2, // 0x0F10 (3856) +0x30E2, 0x20A1, 0x20C1, 0x1080, 0x0880, 0x2182, 0x3285, 0x3A45, 0x18A1, 0x2081, 0x3122, 0x3942, 0x4983, 0x59E5, 0x6225, 0x6226, // 0x0F20 (3872) +0x5A05, 0x6226, 0x72A8, 0x7AE9, 0x7B2A, 0x8B8B, 0x8B8C, 0x5A26, 0x6246, 0x7B0A, 0x5A26, 0x6267, 0x6AA9, 0x6268, 0x5A47, 0x5A47, // 0x0F30 (3888) +0x49C5, 0x3943, 0x28E1, 0x28C1, 0x1880, 0x0860, 0x6386, 0x9DEC, 0x95A9, 0x95E9, 0x9E0A, 0x9DEB, 0x8D09, 0x5B64, 0x29C0, 0x1920, // 0x0F40 (3904) +0x18E0, 0x28C2, 0x28C2, 0x28A2, 0x30A2, 0x30C2, 0x4143, 0x41A3, 0x4A44, 0x6B87, 0x8D2B, 0x9DCC, 0x95CB, 0x95C9, 0x8DA8, 0x8DA8, // 0x0F50 (3920) +0x7D6C, 0x7D8B, 0x6D48, 0x6D68, 0x6529, 0x7D2B, 0x52A6, 0x3962, 0x3983, 0x3983, 0x3982, 0x49E4, 0x49A3, 0x4163, 0x3902, 0x3902, // 0x0F60 (3936) +0x2081, 0x20A1, 0x1080, 0x0880, 0x29E3, 0x5BA8, 0x6449, 0x5BC8, 0x2100, 0x20A0, 0x3122, 0x3122, 0x4163, 0x51C5, 0x59E5, 0x59E6, // 0x0F70 (3952) +0x59E5, 0x59E5, 0x6AA8, 0x7B09, 0x836B, 0x834A, 0x832A, 0x51E5, 0x6A87, 0x7B0A, 0x6247, 0x5A06, 0x6267, 0x5A27, 0x51E6, 0x51E6, // 0x0F80 (3968) +0x4184, 0x3923, 0x30E2, 0x28A1, 0x20A1, 0x1080, 0x5304, 0x9DCC, 0x95A9, 0x95E9, 0x95C9, 0x95A9, 0xA5EB, 0xAE0D, 0x8D2B, 0x6C08, // 0x0F90 (3984) +0x4283, 0x31A1, 0x2100, 0x2900, 0x3121, 0x3161, 0x41C2, 0x4A43, 0x4AA3, 0x5BA6, 0x7CC9, 0x8D8A, 0x8DAA, 0x8589, 0x8568, 0x8568, // 0x0FA0 (4000) +0x7D4B, 0x7D6B, 0x6D69, 0x6D69, 0x6549, 0x754C, 0x4B06, 0x2942, 0x3162, 0x2901, 0x3142, 0x3922, 0x3922, 0x4164, 0x3902, 0x28C2, // 0x0FB0 (4016) +0x20A2, 0x1860, 0x10A0, 0x29C2, 0x6429, 0x8D8C, 0x858B, 0x7CEA, 0x31A1, 0x20C0, 0x3121, 0x3102, 0x3943, 0x49A5, 0x49C5, 0x49C5, // 0x0FC0 (4032) +0x49A4, 0x51A4, 0x6267, 0x72C8, 0x7B0A, 0x6A88, 0x6AA8, 0x51C4, 0x7B2A, 0x834B, 0x6AA8, 0x51E5, 0x5A26, 0x5A06, 0x51E5, 0x4164, // 0x0FD0 (4048) +0x3943, 0x3103, 0x30E2, 0x28A1, 0x20A2, 0x18C0, 0x3A42, 0x958B, 0x8568, 0x8DA8, 0x8DC9, 0x95E9, 0x9DE9, 0x9DEA, 0xA60C, 0xA5ED, // 0x0FE0 (4064) +0x9DAC, 0x8CEA, 0x6C06, 0x5B65, 0x5B44, 0x6386, 0x6C07, 0x7448, 0x7CC8, 0x7D09, 0x856A, 0x8DCA, 0x8DAA, 0x8568, 0x7D47, 0x7D48, // 0x0FF0 (4080) +0x7D6B, 0x7D8B, 0x758A, 0x758A, 0x6D6B, 0x6D0B, 0x4286, 0x2922, 0x2902, 0x28E2, 0x30C1, 0x38E2, 0x3903, 0x30C2, 0x28E2, 0x18A0, // 0x1000 (4096) +0x10A0, 0x1941, 0x3AA4, 0x5C08, 0x7D6B, 0x85AB, 0x7DCA, 0x8DAC, 0x4263, 0x28E0, 0x3102, 0x30E2, 0x3923, 0x49A5, 0x49C5, 0x41A4, // 0x1010 (4112) +0x4184, 0x4984, 0x5A06, 0x6226, 0x6226, 0x59E5, 0x6A67, 0x6267, 0x7B09, 0x834A, 0x6AA8, 0x51C4, 0x49A4, 0x49A4, 0x51C5, 0x4164, // 0x1020 (4128) +0x3122, 0x3903, 0x30E2, 0x30A2, 0x28A2, 0x20E1, 0x29E1, 0x8D2B, 0x8DCA, 0x8DA9, 0x8DC9, 0x95EA, 0x95E9, 0x9DEA, 0x9DEB, 0x9DEB, // 0x1030 (4144) +0x9E0B, 0xA64C, 0xA64C, 0x9DEB, 0x9DCB, 0xA5EC, 0xA62C, 0x9E0C, 0x9E0B, 0x95EA, 0x8DEA, 0x8DC9, 0x8589, 0x8548, 0x7D28, 0x8528, // 0x1040 (4160) +0x756B, 0x754A, 0x756A, 0x754A, 0x754B, 0x6429, 0x39C3, 0x3122, 0x3102, 0x30E1, 0x30C1, 0x30A1, 0x28A1, 0x20C1, 0x10A0, 0x1100, // 0x1050 (4176) +0x2A22, 0x53A7, 0x7D0B, 0x7D4A, 0x7D8A, 0x7DAA, 0x7DCA, 0x8DAC, 0x52C6, 0x28E1, 0x3102, 0x30E2, 0x3923, 0x4164, 0x4183, 0x4183, // 0x1060 (4192) +0x4163, 0x4984, 0x51A5, 0x49A4, 0x4984, 0x51C5, 0x6A88, 0x72C9, 0x8B8B, 0x836B, 0x6267, 0x49C4, 0x4983, 0x4983, 0x51E5, 0x4163, // 0x1070 (4208) +0x30E2, 0x3902, 0x3902, 0x30E2, 0x28A1, 0x20E1, 0x31E1, 0x84EA, 0x8D8A, 0x85A9, 0x8DAA, 0x8DCA, 0x95C9, 0x95EA, 0x95EB, 0x95EB, // 0x1080 (4224) +0x95EA, 0x9E0A, 0x9E2B, 0x9E0B, 0x9DEA, 0x9DEA, 0x960A, 0x9E0A, 0x960A, 0x95E9, 0x95E9, 0x8DC9, 0x8DA8, 0x8568, 0x8547, 0x8548, // 0x1090 (4240) +0x6D6A, 0x6D4A, 0x756B, 0x7D6B, 0x7D2B, 0x53A7, 0x31A2, 0x41A3, 0x3982, 0x39A2, 0x4A25, 0x41C4, 0x2941, 0x1900, 0x19A1, 0x4B86, // 0x10A0 (4256) +0x6CA8, 0x7D8B, 0x85CB, 0x7D8A, 0x7DAA, 0x85EB, 0x7DAA, 0x8DAC, 0x5B27, 0x20E1, 0x3122, 0x3102, 0x3902, 0x4143, 0x4143, 0x4963, // 0x10B0 (4272) +0x4163, 0x4984, 0x4184, 0x4163, 0x4163, 0x49C5, 0x6267, 0x6267, 0x8BAC, 0x7B2A, 0x51E5, 0x4984, 0x4184, 0x49A4, 0x51C5, 0x3943, // 0x10C0 (4288) +0x30E1, 0x3922, 0x3902, 0x3902, 0x28C1, 0x2101, 0x3A22, 0x84EB, 0x8DAB, 0x8589, 0x8D8A, 0x95CA, 0x95EA, 0x95CA, 0x95EB, 0x9DEB, // 0x10D0 (4304) +0xA62B, 0xA62B, 0xA62B, 0xA62B, 0x9E2B, 0x9E0B, 0x9E0B, 0x9E2B, 0x9E0A, 0x9E0A, 0x9E09, 0x95E9, 0x95C8, 0x8D88, 0x8D68, 0x8D68, // 0x10E0 (4320) +0x6549, 0x6D49, 0x7549, 0x7D4A, 0x74EA, 0x4B65, 0x3A63, 0x4AC5, 0x5B87, 0x6409, 0x4B46, 0x3A83, 0x3A63, 0x42E4, 0x7CEA, 0x858B, // 0x10F0 (4336) +0x7D8A, 0x7DAA, 0x7D89, 0x85AA, 0x8DAA, 0x8DAA, 0x85AA, 0x9DED, 0x73C9, 0x2120, 0x2941, 0x2922, 0x3122, 0x3943, 0x3923, 0x4144, // 0x1100 (4352) +0x4143, 0x4143, 0x3943, 0x3923, 0x4143, 0x4164, 0x51E5, 0x49A4, 0x5A27, 0x51E6, 0x4143, 0x3922, 0x3902, 0x4143, 0x4164, 0x3923, // 0x1110 (4368) +0x28E1, 0x3102, 0x3902, 0x3902, 0x3102, 0x2100, 0x4263, 0x954C, 0x8D8A, 0x8DAA, 0x95CA, 0x95CA, 0x95C9, 0x95CA, 0x95EA, 0x9E0B, // 0x1120 (4384) +0x9E0A, 0xA62B, 0xA62B, 0xA60B, 0x9E0B, 0x9E0B, 0xA62B, 0xA60B, 0xA62A, 0xA60A, 0x9E0A, 0x9DE9, 0x95C8, 0x8DA8, 0x8DA8, 0x8DA8, // 0x1130 (4400) +0x6D69, 0x6D89, 0x7549, 0x7D4A, 0x6D2A, 0x5407, 0x6449, 0x74CB, 0x6CEA, 0x5468, 0x43E6, 0x5448, 0x6468, 0x7D2B, 0x7D6A, 0x7D89, // 0x1140 (4416) +0x7DAA, 0x85A9, 0x8DAA, 0x95EB, 0x8D8A, 0x95CB, 0x95EA, 0x9DEC, 0x8CAB, 0x2980, 0x2960, 0x2941, 0x3142, 0x3944, 0x3923, 0x3904, // 0x1150 (4432) +0x3923, 0x3102, 0x3102, 0x3102, 0x3943, 0x3923, 0x4184, 0x3943, 0x3943, 0x3923, 0x3923, 0x3902, 0x3902, 0x3943, 0x3923, 0x3102, // 0x1160 (4448) +0x28C1, 0x28C2, 0x3102, 0x3102, 0x3122, 0x2920, 0x4282, 0x9DAC, 0x95CA, 0x95EA, 0x95CA, 0x95CA, 0x9DE9, 0x9DE9, 0x9DEA, 0x9E0A, // 0x1170 (4464) +0xA62A, 0xAE4B, 0xAE6B, 0xAE4B, 0xA64B, 0xA62B, 0xA62B, 0xA62B, 0xAE2B, 0xA60A, 0xA60A, 0x9E0A, 0x9DE9, 0x95C8, 0x8DC8, 0x95E9, // 0x1180 (4480) +0x6D69, 0x6D69, 0x6D48, 0x7569, 0x7548, 0x6D28, 0x7549, 0x756A, 0x7549, 0x6D29, 0x6508, 0x6D29, 0x6D69, 0x7569, 0x7589, 0x7D89, // 0x1190 (4496) +0x85A9, 0x8DAA, 0x95C9, 0x95C9, 0x8DCA, 0x95EB, 0x9DEC, 0xA5EC, 0x9DCC, 0x4261, 0x2900, 0x3103, 0x3923, 0x3123, 0x3103, 0x28E2, // 0x11A0 (4512) +0x28E2, 0x3102, 0x28E1, 0x28E1, 0x3102, 0x3102, 0x3122, 0x3102, 0x3102, 0x30E2, 0x28C2, 0x30E2, 0x3102, 0x3102, 0x30E2, 0x3102, // 0x11B0 (4528) +0x20C1, 0x28C1, 0x30E2, 0x3102, 0x3121, 0x2900, 0x4202, 0xADAD, 0xADEA, 0xA5E9, 0x9E09, 0x95E9, 0x9DE9, 0x9E0A, 0xA60A, 0xA62A, // 0x11C0 (4544) +0xAE4B, 0xAE4B, 0xAE4B, 0xAE4B, 0xAE4A, 0xAE4A, 0xAE4A, 0xAE2A, 0xA64A, 0xA62A, 0xA62A, 0x9E2A, 0x9DE9, 0x95E9, 0x9DE8, 0x9DC8, // 0x11D0 (4560) +0x6D69, 0x6D69, 0x6D48, 0x7569, 0x7569, 0x7569, 0x7569, 0x756A, 0x6D49, 0x6D29, 0x6509, 0x6D49, 0x7569, 0x7D89, 0x7D89, 0x7DA9, // 0x11E0 (4576) +0x85AA, 0x8DAA, 0x95C9, 0x95C9, 0x8DEA, 0x95EB, 0x9DEC, 0x9DEC, 0xA62D, 0x5B65, 0x2920, 0x3123, 0x3102, 0x28E2, 0x20C2, 0x20C1, // 0x11F0 (4592) +0x20A1, 0x28E2, 0x28E2, 0x28E2, 0x28E2, 0x28C1, 0x28E1, 0x28E1, 0x28E1, 0x28E1, 0x28C1, 0x28C2, 0x30E2, 0x30E2, 0x30E2, 0x3102, // 0x1200 (4608) +0x20A1, 0x1880, 0x28E2, 0x3102, 0x3101, 0x2900, 0x39A1, 0xA56D, 0xAE2B, 0xA629, 0x9E0A, 0x9E0A, 0x9E0A, 0xA62A, 0xA62A, 0xA64A, // 0x1210 (4624) +0xAE4B, 0xAE4B, 0xB66B, 0xAE4B, 0xAE4A, 0xAE4A, 0xAE4A, 0xAE2A, 0xA62A, 0xA60A, 0x9E2A, 0x9E0A, 0x9DE9, 0x95E9, 0x9DE8, 0x9DC8, // 0x1220 (4640) +0x6549, 0x6549, 0x6528, 0x6D49, 0x7569, 0x7569, 0x7D6A, 0x754A, 0x6D29, 0x6D09, 0x6D09, 0x7549, 0x7589, 0x7D89, 0x7DA9, 0x85A9, // 0x1230 (4656) +0x8DA9, 0x8DCA, 0x95C9, 0x95E9, 0x95EA, 0x95EB, 0x9DEC, 0x9DEC, 0xA62D, 0x7448, 0x2940, 0x3123, 0x28E2, 0x20A1, 0x1881, 0x1881, // 0x1240 (4672) +0x1880, 0x28E2, 0x2902, 0x2902, 0x28C1, 0x20A1, 0x20A1, 0x20A1, 0x20A1, 0x28A1, 0x20A1, 0x20A1, 0x28A2, 0x28C2, 0x28C2, 0x30E3, // 0x1250 (4688) +0x1881, 0x1040, 0x28C2, 0x20A1, 0x28E1, 0x2921, 0x2920, 0x8CAA, 0xB64C, 0xAE2A, 0xA62A, 0xA62A, 0xA62A, 0xA62B, 0xA62A, 0xAE4B, // 0x1260 (4704) +0xAE4B, 0xAE6B, 0xB66B, 0xAE4B, 0xAE4A, 0xAE4A, 0xAE4A, 0xAE2A, 0xA62A, 0x9E09, 0x9E09, 0x9E09, 0x9DE9, 0x95E9, 0x9DE8, 0x9DC8, // 0x1270 (4720) +0x6529, 0x6549, 0x6528, 0x6D28, 0x7549, 0x7549, 0x756A, 0x7529, 0x6D29, 0x6D09, 0x6D08, 0x7549, 0x7D69, 0x7D89, 0x85A9, 0x85A9, // 0x1280 (4736) +0x8DA9, 0x8DC9, 0x95C9, 0x95E9, 0x95EA, 0x960B, 0x95EC, 0x9DEC, 0x9E0D, 0x7C89, 0x2120, 0x3122, 0x20C1, 0x1880, 0x1881, 0x1881, // 0x1290 (4752) +0x1860, 0x28E2, 0x3102, 0x3102, 0x20C2, 0x1881, 0x1881, 0x20A1, 0x2081, 0x20A1, 0x20A1, 0x20A1, 0x20A1, 0x20A1, 0x28C2, 0x28E2, // 0x12A0 (4768) +0x1860, 0x1060, 0x20A2, 0x1860, 0x20C1, 0x3121, 0x2100, 0x73E7, 0xBE4D, 0xAE2A, 0xA62A, 0xA62A, 0xA62B, 0xA62A, 0xA62A, 0xAE2A, // 0x12B0 (4784) +0xAE4B, 0xAE4B, 0xAE4B, 0xAE4B, 0xAE4A, 0xAE4A, 0xAE4A, 0xA62A, 0xA62A, 0x9E09, 0x9DE9, 0x95E9, 0x95E9, 0x95E9, 0x9DE8, 0x95C8, // 0x12C0 (4800) +}; diff --git a/libraries/UTFT_Buttons/examples/UTFT_Buttons_Demo_320x240/UTFT_Buttons_Demo_320x240.ino b/libraries/UTFT_Buttons/examples/UTFT_Buttons_Demo_320x240/UTFT_Buttons_Demo_320x240.ino new file mode 100644 index 0000000..6b5cb1a --- /dev/null +++ b/libraries/UTFT_Buttons/examples/UTFT_Buttons_Demo_320x240/UTFT_Buttons_Demo_320x240.ino @@ -0,0 +1,125 @@ +// UTFT_Buttons_Demo_320x240 (C)2013 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// A small demo to demonstrate the use of some of the +// functions of the UTFT_Buttons add-on library. +// +// This demo was made for modules with a screen resolution +// of 320x240 pixels, but should work on larger screens as +// well. +// +// This program requires both the UTFT and UTouch libraries +// in addition to the UTFT_Buttons add-on library. +// + +#include +#include +#include + +// Declare which fonts we will be using +extern uint8_t SmallFont[]; +extern uint8_t BigFont[]; +extern uint8_t Dingbats1_XL[]; + +// Set up UTFT... +// Set the pins to the correct ones for your development board +// ----------------------------------------------------------- +// Standard Arduino 2009/Uno/Leonardo shield : ,19,18,17,16 +// Standard Arduino Mega/Due shield : ,38,39,40,41 +// CTE TFT LCD/SD Shield for Arduino Due : ,25,26,27,28 +// Standard chipKit Uno32/uC32 : ,34,35,36,37 +// Standard chipKit Max32 : ,82,83,84,85 +// AquaLEDSource All in One Super Screw Shield : ,82,83,84,85 +// +// Remember to change the model parameter to suit your display module! +UTFT myGLCD(ITDB32S,38,39,40,41); + +// Set up UTouch... +// Set the pins to the correct ones for your development board +// ----------------------------------------------------------- +// Standard Arduino 2009/Uno/Leonardo shield : 15,10,14,9,8 +// Standard Arduino Mega/Due shield : 6,5,4,3,2 +// CTE TFT LCD/SD Shield for Arduino Due : 6,5,4,3,2 +// Standard chipKit Uno32/uC32 : 20,21,22,23,24 +// Standard chipKit Max32 : 62,63,64,65,66 +// AquaLEDSource All in One Super Screw Shield : 62,63,64,65,66 +UTouch myTouch(6,5,4,3,2); + +// Finally we set up UTFT_Buttons :) +UTFT_Buttons myButtons(&myGLCD, &myTouch); + +void setup() +{ + myGLCD.InitLCD(); + myGLCD.clrScr(); + myGLCD.setFont(SmallFont); + + myTouch.InitTouch(); + myTouch.setPrecision(PREC_MEDIUM); + + myButtons.setTextFont(BigFont); + myButtons.setSymbolFont(Dingbats1_XL); +} + +void loop() +{ + int but1, but2, but3, but4, butX, butY, pressed_button; + boolean default_colors = true; + + but1 = myButtons.addButton( 10, 20, 300, 30, "Button 1"); + but2 = myButtons.addButton( 10, 60, 300, 30, "Button 2"); + but3 = myButtons.addButton( 10, 100, 300, 30, "Button 3"); + but4 = myButtons.addButton( 10, 140, 300, 30, "Button 4", BUTTON_DISABLED); + butX = myButtons.addButton(279, 199, 40, 40, "a", BUTTON_SYMBOL); + butY = myButtons.addButton( 0, 199, 100, 40, "I", BUTTON_SYMBOL | BUTTON_SYMBOL_REP_3X); + myButtons.drawButtons(); + + myGLCD.print("You pressed:", 110, 205); + myGLCD.setColor(VGA_BLACK); + myGLCD.setBackColor(VGA_WHITE); + myGLCD.print("None ", 110, 220); + + while(1) + { + if (myTouch.dataAvailable() == true) + { + pressed_button = myButtons.checkButtons(); + + if (pressed_button==butX) + { + if (myButtons.buttonEnabled(but4)) + myButtons.disableButton(but4, true); + else + myButtons.enableButton(but4, true); + } + else if (pressed_button==butY) + { + if (default_colors) + { + myButtons.setButtonColors(VGA_YELLOW, VGA_RED, VGA_YELLOW, VGA_BLUE, VGA_GRAY); + myButtons.relabelButton(butY, "_"); + myButtons.drawButtons(); + default_colors=false; + } + else + { + myButtons.setButtonColors(VGA_WHITE, VGA_GRAY, VGA_WHITE, VGA_RED, VGA_BLUE); + myButtons.relabelButton(butY, "I"); + myButtons.drawButtons(); + default_colors=true; + } + } + if (pressed_button==but1) + myGLCD.print("Button 1", 110, 220); + if (pressed_button==but2) + myGLCD.print("Button 2", 110, 220); + if (pressed_button==but3) + myGLCD.print("Button 3", 110, 220); + if (pressed_button==but4) + myGLCD.print("Button 4", 110, 220); + if (pressed_button==-1) + myGLCD.print("None ", 110, 220); + } + } +} + diff --git a/libraries/UTFT_Buttons/fonts.c b/libraries/UTFT_Buttons/fonts.c new file mode 100644 index 0000000..b189f8e --- /dev/null +++ b/libraries/UTFT_Buttons/fonts.c @@ -0,0 +1,117 @@ +#if defined(__AVR__) + #include + #define fontdatatype const uint8_t +#elif defined(__PIC32MX__) + #define PROGMEM + #define fontdatatype const unsigned char +#elif defined(__arm__) + #define PROGMEM + #define fontdatatype const unsigned char +#endif + +// Dingbats1_XL.c +// Font type : Full (95 characters) +// Font size : 32x24 pixels +fontdatatype Dingbats1_XL[9124] PROGMEM={ +0x20,0x18,0x20,0x5F, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x1F,0x80,0x00,0x00,0x0D,0xC0,0x00,0x00,0x1E,0xE0,0x00,0x00,0x33,0x30,0x00,0x00,0x61,0x98,0x00,0x00,0xCC,0xCC,0x00,0x00,0xCC,0x6C,0x00,0x01,0x80,0x36,0x00,0x03,0x02,0x36,0x00,0x07,0x06,0x1B,0x00,0x01,0x8E,0x1B,0x00,0x00,0xF6,0x1B,0x00,0x00,0x06,0x1B,0x00,0x00,0x06,0x1B,0x00,0x00,0x06,0x1B,0x00,0x00,0x07,0xFB,0x00,0x00,0x07,0xFB,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ! +0x00,0x00,0x00,0x00,0x07,0xFF,0xFE,0x00,0x07,0xFF,0xFF,0x00,0x06,0x00,0x03,0x00,0x06,0x00,0x03,0x00,0x06,0x06,0x33,0x00,0x06,0x06,0x33,0x00,0x06,0x00,0x33,0x00,0x06,0x00,0x33,0x00,0x07,0x00,0x33,0x00,0x03,0x80,0x33,0x00,0x01,0xC0,0x33,0x00,0x00,0xFC,0x33,0x00,0x00,0x7C,0x33,0x00,0x00,0x0C,0x3F,0x00,0x00,0x0C,0x1E,0x00,0x00,0x0C,0x00,0x00,0x00,0x1B,0xFC,0x00,0x00,0x19,0x24,0x00,0x00,0x1F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // " +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x04,0x00,0x00,0xEF,0xDC,0x00,0x00,0xFF,0xFC,0x00,0x00,0xD0,0x2C,0x00,0x00,0xC0,0x0C,0x00,0x01,0x80,0x06,0x00,0x01,0x80,0x06,0x00,0x03,0x00,0x03,0x00,0x03,0x0C,0xC3,0x00,0x03,0x0C,0xC3,0x00,0x03,0x00,0x03,0x00,0x03,0x03,0x03,0x00,0x01,0x8A,0x46,0x00,0x01,0x8F,0xC6,0x00,0x00,0xE0,0x1C,0x00,0x00,0x70,0x38,0x00,0x00,0x3F,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // # +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x1E,0x00,0x03,0xF7,0xBF,0x00,0x03,0xFF,0xFF,0x00,0x03,0xF0,0x3F,0x00,0x03,0xE0,0x1F,0x00,0x01,0x80,0x06,0x00,0x01,0x9C,0x66,0x00,0x03,0x35,0xB3,0x00,0x03,0x35,0x33,0x00,0x03,0x3C,0xF3,0x00,0x03,0x7C,0x7B,0x00,0x03,0x38,0x73,0x00,0x01,0x80,0x06,0x00,0x01,0x80,0x06,0x00,0x00,0xE0,0x1C,0x00,0x00,0x70,0x38,0x00,0x00,0x3F,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // $ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x00,0x00,0x30,0x3F,0x00,0x00,0x40,0x00,0x80,0x00,0x80,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x30,0x00,0x80,0x02,0x30,0x00,0x80,0x02,0x00,0x01,0x80,0x02,0x00,0x01,0x00,0x02,0x00,0x01,0x00,0x02,0x01,0x01,0x00,0x02,0x01,0x01,0x00,0x02,0x7F,0x01,0x00,0x02,0x41,0x01,0x00,0x02,0x41,0x02,0x00,0x02,0x41,0x02,0x00,0x01,0x38,0xFC,0x00,0x01,0x88,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // % +0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x1F,0xE0,0x00,0x00,0x3F,0xF0,0x00,0x00,0x7F,0xF8,0x00,0x00,0x7F,0xFC,0x00,0x00,0xFF,0xFC,0x00,0x00,0xFF,0xFC,0x00,0x01,0xC0,0x0E,0x00,0x01,0x9F,0xE6,0x00,0x01,0x8C,0xC6,0x00,0x01,0xCC,0xCE,0x00,0x01,0xC0,0x0E,0x00,0x01,0xCC,0xCE,0x00,0x01,0x97,0xA6,0x00,0x01,0x80,0x06,0x00,0x01,0x80,0x06,0x00,0x00,0xC0,0x0C,0x00,0x00,0xFF,0xFC,0x00,0x00,0x3F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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,0xC0,0x00,0x00,0x06,0xC0,0x03,0x00,0x04,0x40,0x02,0x80,0x06,0x40,0x02,0x40,0x0E,0x20,0x01,0x40,0x01,0x2E,0x03,0x20,0x00,0x91,0x02,0x20,0x00,0x85,0xFE,0x20,0x04,0x45,0x69,0x20,0x0C,0xC3,0x00,0x20,0x1F,0xE0,0x00,0x60,0x10,0x00,0x00,0x40,0x18,0x0E,0x99,0x80,0x0F,0xF8,0xE1,0x00,0x00,0x0F,0xBF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ' +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x38,0x00,0x00,0xFF,0xFC,0x00,0x00,0x8F,0xC6,0x00,0x01,0xBF,0xF6,0x00,0x01,0xF8,0x7E,0x00,0x01,0xE0,0x1F,0x00,0x03,0xC0,0x0F,0x00,0x03,0x80,0x07,0x00,0x03,0x8C,0xC6,0x00,0x03,0x8C,0xC7,0x00,0x03,0x80,0x07,0x00,0x03,0x83,0x07,0x00,0x03,0xC9,0x4F,0x00,0x03,0xCF,0xCF,0x00,0x03,0xC0,0x0F,0x00,0x00,0xF0,0x3C,0x00,0x00,0xFC,0xFC,0x00,0x00,0x3F,0xF0,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ( +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x0F,0xC0,0x00,0x00,0x19,0xE0,0x00,0x00,0x39,0xE0,0x00,0x00,0x5F,0xE0,0x00,0x00,0x3F,0xE0,0x00,0x00,0x17,0xE0,0x00,0x00,0x13,0xF0,0x00,0x00,0x13,0xF0,0x00,0x00,0x33,0xF8,0x00,0x00,0x23,0xF8,0x00,0x00,0x23,0xFC,0x00,0x00,0x23,0xF0,0x00,0x00,0x33,0xF0,0x00,0x00,0x1B,0xF0,0x00,0x00,0x1F,0xF0,0x00,0x00,0x21,0xF8,0x00,0x00,0x3F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ) +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0xC0,0x1F,0xFF,0xFF,0xC0,0x1F,0xFF,0xFF,0xC0,0x10,0x7F,0xFF,0xC0,0x15,0x7F,0xFD,0xC0,0x15,0xBF,0xF8,0xE0,0x0A,0xFF,0xF8,0x60,0x0F,0x3F,0xF0,0x00,0x07,0xFF,0xC0,0x00,0x01,0xFF,0x80,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // * +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x1F,0xC0,0x00,0x00,0xFF,0xE0,0x00,0x01,0xEF,0xF1,0xC0,0x03,0xEF,0xFB,0x80,0x06,0x6F,0xFF,0x00,0x0E,0x63,0xFF,0x00,0x07,0xF3,0xFB,0x80,0x03,0xEB,0xF1,0x80,0x00,0xFF,0xF0,0x40,0x00,0x1C,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,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0xC0,0x83,0x00,0x01,0x80,0x4F,0x00,0x02,0x60,0x3F,0x00,0x06,0x60,0x3F,0x00,0x01,0x80,0x4F,0x00,0x00,0xC0,0x83,0x00,0x00,0x23,0x01,0x00,0x00,0x17,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x03,0x00,0x00,0x00,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,0x1F,0xE0,0x00,0x00,0x67,0x98,0x00,0x00,0xF0,0x3C,0x00,0x01,0xE7,0x9E,0x00,0x03,0xEF,0xFF,0x00,0x02,0x0C,0x31,0x00,0x03,0xF8,0xDF,0x80,0x07,0xE8,0xDF,0x80,0x07,0xF8,0x1F,0x80,0x07,0xF8,0x3F,0x80,0x07,0xE8,0xFF,0x80,0x07,0x28,0xD3,0x80,0x06,0x1C,0xE1,0x80,0x02,0x17,0x21,0x00,0x02,0x1F,0xE1,0x00,0x02,0x10,0x21,0x00,0x03,0xF0,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // - +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x70,0x00,0x00,0x14,0x50,0x00,0x00,0x92,0x94,0x00,0x00,0xFA,0xBE,0x00,0x00,0xFA,0xBE,0x00,0x00,0xFB,0xBE,0x00,0x00,0x73,0x9C,0x00,0x00,0x0F,0xE0,0x00,0x00,0x07,0xC0,0x00,0x00,0x1F,0xF0,0x00,0x00,0x07,0xC0,0x00,0x00,0x1F,0xF0,0x00,0x00,0x1F,0xF0,0x00,0x00,0x07,0xC0,0x00,0x00,0x03,0x80,0x00,0x00,0x06,0xC0,0x00,0x00,0x0F,0xE0,0x00,0x00,0x0F,0xE0,0x00,0x00,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,0xC0,0x00,0x00,0x0F,0xE0,0x00,0x00,0x3F,0xA0,0x00,0x00,0x7F,0xE0,0x00,0x00,0x7D,0xE0,0x00,0x00,0xF0,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0xFB,0xE0,0x00,0x00,0xFF,0xF0,0x00,0x00,0xFF,0xF8,0x00,0x00,0xFF,0xF8,0x00,0x00,0x7F,0xFC,0x00,0x00,0x7F,0xFC,0x00,0x00,0x7F,0xFC,0x00,0x00,0x77,0xFE,0x00,0x00,0x77,0xFE,0x00,0x00,0x77,0x1F,0x00,0x00,0x77,0x1C,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // / + +0x00,0x00,0x00,0x00,0x00,0x0F,0xC0,0x00,0x00,0x30,0x30,0x00,0x00,0xC0,0x0C,0x00,0x01,0x80,0xC6,0x00,0x01,0x01,0xF2,0x00,0x02,0x03,0xF1,0x00,0x02,0x07,0xA1,0x00,0x04,0x07,0x60,0x80,0x04,0x0E,0x00,0x80,0x04,0x0C,0x00,0x80,0x04,0x1C,0x00,0x80,0x04,0x1C,0x00,0x80,0x04,0x1C,0x00,0x80,0x02,0x3E,0x01,0x00,0x02,0x3A,0x01,0x00,0x01,0x14,0x02,0x00,0x00,0x24,0x06,0x00,0x00,0x20,0x0C,0x00,0x00,0x30,0x30,0x00,0x00,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 0 +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0x80,0x05,0x00,0x00,0x80,0x05,0xC0,0x00,0x80,0x07,0xFF,0xFF,0x80,0x07,0xFF,0xFF,0x80,0x04,0x00,0x00,0x80,0x04,0x00,0x00,0x80,0x04,0x00,0x00,0x80,0x04,0x00,0x00,0x80,0x04,0x00,0x00,0x80,0x04,0x00,0x00,0x80,0x04,0x00,0x00,0x80,0x07,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 1 +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,0xFF,0xFF,0x80,0x02,0x00,0x00,0x80,0x06,0xFE,0x3E,0x80,0x06,0xFE,0x00,0x80,0x06,0x00,0x00,0x80,0x06,0xFF,0xFE,0x80,0x06,0xFE,0xFE,0x80,0x06,0x00,0x00,0x80,0x07,0xFF,0xFF,0x80,0x04,0x00,0x01,0x00,0x07,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 2 +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0xC6,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x82,0x00,0x03,0xFF,0x83,0x80,0x02,0x00,0x44,0x80,0x06,0x07,0x38,0x80,0x06,0x18,0xC0,0x80,0x06,0x10,0x40,0x80,0x06,0x10,0x40,0x80,0x06,0x18,0xC0,0x80,0x06,0x07,0x00,0x80,0x07,0xFF,0xFF,0x80,0x04,0x00,0x01,0x00,0x07,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 3 +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x78,0x00,0x00,0x10,0xCC,0x00,0x00,0x10,0x84,0x00,0x00,0x10,0x84,0x00,0x00,0x10,0x84,0x00,0x00,0x19,0x84,0x00,0x00,0x0F,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 4 +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0xEE,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x10,0x78,0x00,0x00,0x10,0xCC,0x00,0x00,0x10,0x84,0x00,0x00,0x10,0x84,0x00,0x00,0x10,0x84,0x00,0x00,0x19,0x84,0x00,0x00,0x0F,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 5 +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x10,0x00,0x00,0xCF,0x98,0x00,0x00,0xEF,0xB8,0x00,0x01,0xDF,0xDC,0x00,0x03,0xCF,0x9E,0x00,0x01,0xFF,0xFC,0x00,0x01,0xFF,0xFC,0x00,0x03,0xDF,0xDE,0x00,0x03,0xAF,0xAE,0x00,0x07,0xFF,0xFF,0x00,0x03,0xDF,0xDE,0x00,0x03,0xBF,0xEE,0x00,0x07,0x87,0x0F,0x00,0x07,0xF7,0x7F,0x00,0x08,0xE7,0x38,0x80,0x00,0xE7,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 6 +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x37,0xB0,0x00,0x00,0x37,0xB0,0x00,0x00,0x3F,0xF0,0x00,0x00,0x3F,0xF0,0x00,0x00,0x3F,0xF0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x03,0xC3,0x0F,0x00,0x01,0xE3,0x1E,0x00,0x00,0xF3,0x3C,0x00,0x00,0x7B,0x78,0x00,0x00,0x3F,0xF0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x07,0x80,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 7 +0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x1F,0xC0,0x00,0x00,0x27,0x20,0x00,0x00,0x1F,0xC0,0x00,0x00,0x3F,0xE0,0x00,0x00,0x7F,0xF0,0x00,0x00,0x9F,0xC8,0x00,0x00,0x3F,0xE0,0x00,0x00,0xFF,0xF8,0x00,0x01,0xFF,0xFC,0x00,0x03,0xFF,0xFE,0x00,0x04,0x07,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 8 +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x1B,0x80,0x00,0x00,0x1F,0xC0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x1F,0xF0,0x00,0x00,0x3F,0xF8,0x00,0x00,0x7F,0xFC,0x00,0x00,0xFF,0xFE,0x00,0x00,0xE1,0x0E,0x00,0x00,0xE1,0x0E,0x00,0x00,0xE1,0x0E,0x00,0x00,0xFF,0xFE,0x00,0x00,0xFF,0xFE,0x00,0x00,0xE1,0x0E,0x00,0x00,0xE1,0x0E,0x00,0x00,0xE1,0x0E,0x00,0x00,0xFF,0xFE,0x00,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 9 +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFC,0x00,0x00,0x40,0x04,0x00,0x00,0x59,0xB4,0x00,0x00,0x59,0xB4,0x00,0x00,0x40,0x04,0x00,0x00,0x40,0x04,0x00,0x00,0x59,0xB4,0x00,0x00,0x59,0xB4,0x00,0x00,0x40,0x04,0x00,0x00,0x40,0x04,0x00,0x00,0x59,0xB4,0x00,0x00,0x59,0xB4,0x00,0x00,0x40,0x04,0x00,0x00,0x40,0x04,0x00,0x00,0x41,0x84,0x00,0x00,0x41,0x84,0x00,0x00,0x41,0x84,0x00,0x00,0x7F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // : +0x00,0x00,0x00,0x00,0x03,0xFF,0xE0,0x00,0x02,0x00,0x20,0x00,0x02,0xFF,0xA0,0x00,0x02,0x00,0x20,0x00,0x02,0xFF,0xA0,0x00,0x02,0x00,0x20,0x00,0x02,0xFF,0xA0,0x00,0x02,0x00,0x20,0x00,0x02,0xFF,0xA0,0x00,0x02,0x00,0x20,0x00,0x02,0xFF,0xA0,0x00,0x02,0xFF,0xA0,0x00,0x02,0x00,0x20,0x00,0x02,0xFF,0xA0,0x00,0x02,0x00,0x20,0x00,0x02,0x3E,0x20,0x00,0x02,0x3E,0x20,0x00,0x02,0x3E,0x20,0x00,0x03,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ; +0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x0F,0xC0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x0F,0xC0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x7F,0xF8,0x00,0x00,0xFF,0xFC,0x00,0x01,0xFF,0xFE,0x00,0x01,0xFC,0xFE,0x00,0x01,0xF8,0x7E,0x00,0x01,0xF8,0x7E,0x00,0x01,0xF8,0x7E,0x00,0x01,0xF8,0x7E,0x00,0x01,0xF8,0x7E,0x00,0x01,0xF8,0x7E,0x00,0x01,0xF8,0x7E,0x00,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,0xFD,0xFC,0x00,0x03,0x22,0x26,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x22,0x26,0x00,0x00,0x7D,0xFC,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x08,0x42,0x00,0x03,0x18,0xC6,0x00,0x03,0x39,0xCE,0x00,0x03,0x7B,0xFE,0x00,0x03,0xFF,0xFE,0x00,0x03,0xFF,0xFE,0x00,0x03,0xFF,0xFE,0x00,0x03,0xFF,0xFE,0x00,0x03,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // = +0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x18,0x0F,0xC0,0x60,0x17,0xDF,0xEF,0xA0,0x10,0x71,0x38,0x20,0x10,0x31,0x30,0x20,0x10,0xD1,0x2C,0x20,0x1F,0x1F,0xE3,0xE0,0x00,0x1F,0xE0,0x00,0x00,0x1F,0xC0,0x00,0x00,0x1F,0xC0,0x00,0x00,0x1F,0xC0,0x00,0x00,0x1F,0xC0,0x00,0x00,0x1F,0xC0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // > +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x00,0x00,0x0C,0x60,0x00,0x00,0x09,0x20,0x00,0x00,0x09,0xA0,0x00,0x00,0x08,0x20,0x00,0x00,0x0C,0x60,0x00,0x00,0x0F,0xE0,0x00,0x00,0x7F,0xFC,0x00,0x00,0x7F,0xFC,0x00,0x00,0x7F,0xFC,0x00,0x01,0xFF,0xFF,0x00,0x01,0xFC,0x7F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ? + +0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x0B,0xE0,0x00,0x00,0x08,0x78,0x00,0x00,0x08,0x08,0x00,0x00,0x0F,0x08,0x00,0x00,0x0B,0xE8,0x00,0x00,0x08,0x78,0x00,0x00,0x08,0x08,0x00,0x00,0x08,0x08,0x00,0x00,0x08,0x08,0x00,0x00,0x08,0x08,0x00,0x00,0x08,0x08,0x00,0x00,0x78,0x08,0x00,0x00,0xF8,0x08,0x00,0x01,0xF8,0x08,0x00,0x01,0xF0,0x78,0x00,0x01,0xE0,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF0,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // @ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x38,0x00,0x00,0x3E,0x7C,0x00,0x00,0x3E,0x7C,0x00,0x00,0x3E,0x7C,0x00,0x00,0x1C,0x38,0x00,0x01,0x00,0x00,0x00,0x01,0xCF,0xF0,0x00,0x01,0xFF,0xF0,0x00,0x01,0xFF,0xF0,0x00,0x01,0xFF,0xF0,0x00,0x01,0xCF,0xF0,0x00,0x01,0x07,0xE0,0x00,0x00,0x05,0xA0,0x00,0x00,0x0D,0xB0,0x00,0x00,0x09,0x90,0x00,0x00,0x19,0x98,0x00,0x00,0x11,0x88,0x00,0x00,0x31,0x8C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // A +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFE,0x00,0x00,0xA0,0x14,0x00,0x01,0x40,0x14,0x00,0x01,0xC0,0x18,0x00,0x01,0x40,0x18,0x00,0x01,0x40,0x28,0x00,0x01,0xFF,0xF8,0x00,0x01,0x40,0x18,0x00,0x01,0x40,0x14,0x00,0x00,0xC0,0x1C,0x00,0x00,0xA0,0x14,0x00,0x00,0xA0,0x0C,0x00,0x00,0x7F,0xFC,0x00,0x00,0xA0,0x0E,0x00,0x00,0xE0,0x0C,0x00,0x00,0xE0,0x0C,0x00,0x00,0xC0,0x14,0x00,0x01,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // B +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x01,0xF6,0x00,0x00,0x3E,0xCE,0x00,0x03,0xF9,0xF0,0x00,0x02,0x3E,0x00,0x00,0x03,0xFF,0xFE,0x00,0x03,0x1C,0xE2,0x00,0x03,0xFF,0xFE,0x00,0x00,0x7F,0xFE,0x00,0x00,0x7F,0xFE,0x00,0x00,0x7F,0xFE,0x00,0x00,0x7F,0xFE,0x00,0x00,0x7F,0xFE,0x00,0x00,0x7F,0xFE,0x00,0x00,0x7F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // C +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xE0,0x00,0x00,0x82,0x20,0x00,0x00,0x82,0x20,0x00,0x00,0xFF,0x20,0x00,0x00,0x81,0x20,0x00,0x00,0xFF,0xE0,0x00,0x00,0x8E,0x20,0x00,0x00,0xFF,0xE0,0x00,0x00,0x80,0x20,0x00,0x00,0xFF,0xE0,0x00,0x00,0x87,0x20,0x00,0x00,0x85,0xE0,0x00,0x00,0xFD,0x30,0x00,0x00,0x15,0x2E,0x00,0x00,0x6F,0x2A,0x00,0x00,0x41,0xEE,0x00,0x00,0x3C,0x3C,0x00,0x00,0x07,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // D +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x2C,0x80,0x00,0x00,0x24,0x80,0x00,0x00,0x12,0x50,0x00,0x00,0x49,0xB8,0x00,0x00,0x44,0xF0,0x00,0x00,0x43,0x5C,0x00,0x00,0xA0,0xBF,0x80,0x07,0x1D,0x7F,0x80,0x00,0xA0,0x8F,0x80,0x00,0x40,0x07,0x00,0x00,0x40,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // E +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x30,0xC0,0x00,0x00,0x20,0x40,0x00,0x00,0x40,0x23,0x00,0x00,0x40,0x26,0x00,0x00,0x40,0x26,0x00,0x00,0x40,0x2E,0x00,0x00,0x20,0x5A,0x00,0x00,0x30,0xF1,0x00,0x00,0x0F,0x19,0x00,0x00,0x05,0x1E,0x00,0x00,0x77,0x3C,0x00,0x00,0x7C,0x7C,0x00,0x00,0xFF,0xF8,0x00,0x00,0x7F,0xF0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x07,0xC0,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // F +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x20,0x00,0x00,0x06,0xD8,0x00,0x00,0x04,0xC8,0x00,0x00,0x0D,0xA8,0x00,0x00,0x15,0xFC,0x00,0x00,0x65,0xA6,0x00,0x00,0xE3,0x72,0x00,0x01,0xF6,0x9C,0x00,0x03,0xFB,0x67,0x00,0x00,0xFC,0x97,0x00,0x00,0x7E,0x3F,0x00,0x00,0x3D,0xFF,0x80,0x00,0x17,0x50,0x00,0x00,0x39,0xD8,0x00,0x00,0x0E,0xC8,0x00,0x00,0x04,0xC8,0x00,0x00,0x09,0xB8,0x00,0x00,0x1B,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // G +0x00,0x00,0x00,0x00,0x00,0x10,0x18,0x00,0x00,0x10,0x10,0x00,0x04,0x08,0x20,0x00,0x02,0x0B,0xA0,0xC0,0x01,0x03,0xE1,0x00,0x00,0x83,0xF2,0x00,0x00,0x0F,0xFC,0x00,0x00,0x33,0xFE,0x00,0x08,0x61,0xFF,0x00,0x07,0x76,0x3F,0x00,0x00,0x78,0x0F,0x00,0x00,0x7C,0x0F,0x00,0x00,0x3E,0x06,0x00,0x00,0x9F,0xF8,0x00,0x01,0x0F,0xFA,0x00,0x06,0x07,0xF9,0x00,0x08,0x03,0xF8,0x80,0x00,0x1B,0xF8,0xC0,0x00,0x10,0x00,0x00,0x00,0x20,0x84,0x00,0x00,0x20,0x84,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00, // H +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x0F,0xC0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x3F,0xF0,0x00,0x00,0x7F,0xF8,0x00,0x00,0x64,0x98,0x00,0x00,0x64,0x98,0x00,0x00,0x7F,0xF8,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFE,0x00,0x03,0xFF,0xFF,0x00,0x07,0xFF,0xFF,0x80,0x01,0xF7,0xBE,0x00,0x01,0xF7,0xBE,0x00,0x00,0xE3,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // I +0x00,0x00,0x00,0x00,0x00,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,0xF8,0x00,0x0F,0xC7,0xFC,0x00,0x01,0xFF,0xFC,0x00,0x00,0x07,0xFC,0x00,0x00,0x07,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x01,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x80,0x01,0x00,0x00,0x80,0x01,0x80,0x01,0x80,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // J +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x10,0x44,0x00,0x00,0x20,0x24,0x00,0x00,0x47,0x16,0x00,0x00,0xC8,0x9E,0x00,0x03,0x50,0x4F,0x00,0x04,0x50,0x4F,0x00,0x02,0x90,0x4F,0x00,0x07,0x88,0x87,0x80,0x07,0x87,0x1F,0x80,0x07,0xE5,0x3F,0xC0,0x0F,0xF7,0x7F,0x00,0x0F,0xF8,0xFE,0x00,0x03,0xFD,0xFC,0x00,0x00,0x7D,0xF8,0x00,0x00,0x7F,0xF0,0x00,0x00,0x7F,0xF0,0x00,0x00,0x7F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // K +0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x00,0x03,0x80,0x00,0x00,0x03,0x40,0x00,0x00,0x02,0x40,0x00,0x00,0x04,0x40,0x00,0x00,0x04,0xC0,0x00,0x00,0x03,0x80,0x00,0x00,0x07,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x19,0xC0,0x00,0x00,0x37,0xE0,0x00,0x00,0x35,0x70,0x00,0x00,0x35,0x30,0x00,0x00,0x33,0x30,0x00,0x00,0x19,0x20,0x00,0x00,0x1C,0xE0,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x0E,0x80,0x00,0x00,0x0E,0x80,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // L +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0xC0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0x70,0x00,0x00,0x01,0x18,0x00,0x00,0x01,0x08,0x00,0x00,0x01,0x08,0x00,0x00,0x01,0x08,0x00,0x00,0x01,0x08,0x00,0x00,0x01,0x10,0x00,0x00,0x01,0x20,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // M +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0x80,0x04,0x00,0x00,0x80,0x04,0xFF,0xFC,0x80,0x05,0xFF,0xFE,0x80,0x05,0xFF,0x06,0x80,0x05,0xFF,0x06,0x80,0x05,0xFF,0x06,0x80,0x05,0xFF,0xF6,0x80,0x05,0xFF,0xF6,0x80,0x05,0xFF,0xF6,0x80,0x05,0xFF,0xFE,0x80,0x05,0xFF,0xFE,0x80,0x05,0xFF,0xFE,0x80,0x05,0xFF,0xFE,0x80,0x04,0x00,0x00,0x80,0x05,0x9B,0xC0,0x80,0x04,0x00,0x00,0x80,0x07,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // N +0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x01,0x80,0x00,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x20,0x00,0x00,0x03,0xFF,0xFE,0x00,0x02,0x4F,0x0E,0x00,0x02,0x4C,0xE6,0x00,0x02,0x7D,0xF6,0x00,0x02,0x4B,0xFA,0x00,0x02,0x4B,0xFA,0x00,0x02,0x7B,0xFA,0x00,0x02,0x7B,0xFA,0x00,0x02,0x7D,0xF6,0x00,0x02,0x7C,0xE6,0x00,0x02,0x7F,0x1E,0x00,0x01,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // O + +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x00,0x00,0x16,0xD0,0x00,0x00,0x19,0x30,0x00,0x00,0x16,0xD0,0x00,0x00,0x16,0xD0,0x00,0x00,0x19,0x30,0x00,0x00,0x16,0xD0,0x00,0x00,0x3F,0xF8,0x00,0x00,0x30,0x18,0x00,0x00,0x3F,0xF8,0x00,0x00,0x3F,0xF8,0x00,0x00,0x3F,0xF8,0x00,0x00,0x2F,0xE8,0x00,0x00,0x20,0x08,0x00,0x00,0x1F,0xF0,0x00,0x00,0x03,0x80,0x00,0x00,0x03,0x80,0x00,0x00,0x0F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // P +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFC,0x00,0x07,0xFF,0xFF,0x80,0x0F,0xFF,0xFF,0xC0,0x0F,0xC0,0x0F,0xC0,0x00,0x0F,0xC0,0x00,0x0F,0x9C,0xE7,0xC0,0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x00,0x00,0x60,0x18,0x00,0x00,0xE0,0x1C,0x00,0x00,0xF0,0x3C,0x00,0x01,0xF0,0x3E,0x00,0x01,0xF8,0x7E,0x00,0x01,0xFF,0xFE,0x00,0x01,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Q +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xE0,0x00,0x00,0x3C,0x10,0x00,0x01,0xF0,0x08,0x00,0x1E,0x3C,0x04,0x00,0xFC,0x3E,0x04,0x01,0x83,0x3C,0x04,0x01,0x01,0x38,0x04,0x02,0x06,0xB0,0x04,0x7E,0x18,0xB0,0x04,0x81,0x17,0xB0,0x04,0x80,0xE8,0xB0,0x04,0xC0,0x28,0xB0,0x04,0x5F,0x98,0x80,0x04,0x20,0x48,0x80,0x04,0x10,0x04,0x80,0x38,0x08,0x03,0x83,0xC0,0x04,0x01,0x9C,0x00,0x03,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // R +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xE0,0x00,0x00,0x1C,0x10,0x00,0x01,0xE0,0x08,0x00,0x0E,0x00,0x04,0x00,0x7C,0x00,0x04,0x01,0x83,0x00,0x04,0x01,0x01,0x00,0x04,0x02,0x00,0x80,0x14,0x7E,0x00,0x80,0xE4,0x81,0x00,0x8F,0xE4,0x80,0xC0,0xBF,0xE4,0xC0,0x20,0xB1,0xC4,0x5F,0x90,0x80,0xC4,0x20,0x48,0x80,0x04,0x10,0x04,0x80,0x38,0x08,0x02,0x83,0xC0,0x04,0x01,0x9C,0x00,0x03,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // S +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0x00,0x00,0x08,0x10,0x00,0x00,0x08,0x10,0x00,0x00,0x78,0x0F,0xFE,0x00,0x40,0x00,0x02,0x00,0x40,0x00,0x02,0x00,0x41,0xFF,0xFF,0xF8,0x41,0x00,0x00,0x08,0x42,0x00,0x00,0x10,0x42,0x00,0x00,0x10,0x44,0x00,0x00,0x20,0x48,0x00,0x00,0x20,0x48,0x00,0x00,0x40,0x50,0x00,0x00,0x80,0x50,0x00,0x00,0x80,0x60,0x00,0x01,0x00,0x60,0x00,0x01,0x00,0x7F,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // T +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xE0,0x00,0x00,0x3F,0xF0,0x00,0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x00,0x07,0xFF,0xFF,0x80,0x07,0xFF,0xFF,0x80,0x07,0xFF,0xFF,0x80,0x07,0xFF,0xFF,0x80,0x07,0xFF,0xFF,0x80,0x07,0xFF,0xFF,0x80,0x07,0xFF,0xFF,0x80,0x07,0xFF,0xFF,0x80,0x07,0xFF,0xFF,0x80,0x07,0xFF,0xFF,0x80,0x07,0xFF,0xFF,0x80,0x07,0xFF,0xFF,0x80,0x07,0xFF,0xFF,0x80,0x07,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // U +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x00,0x00,0x1F,0xF0,0x00,0x07,0x3F,0xF8,0x00,0x07,0x40,0x04,0x00,0x07,0xFF,0xFF,0xC0,0x07,0xFF,0xFF,0xC0,0x07,0xF8,0x3F,0xC0,0x07,0xF0,0x1F,0xC0,0x07,0xE0,0x0F,0xC0,0x07,0xE0,0x0F,0xC0,0x07,0xE0,0x0F,0xC0,0x07,0xE0,0x0F,0xC0,0x07,0xE0,0x0F,0xC0,0x07,0xF0,0x1F,0xC0,0x07,0xF8,0x3F,0xC0,0x07,0xFF,0xFF,0xC0,0x07,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // V +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xC0,0x00,0x00,0x30,0x30,0x00,0x00,0x40,0x08,0x00,0x00,0x83,0x04,0x00,0x01,0x03,0x02,0x00,0x01,0x03,0x02,0x00,0x02,0x03,0x01,0x00,0x02,0x03,0x01,0x00,0x02,0x03,0xF9,0x00,0x02,0x03,0xF9,0x00,0x02,0x00,0x01,0x00,0x02,0x00,0x01,0x00,0x01,0x00,0x02,0x00,0x01,0x00,0x02,0x00,0x00,0x80,0x04,0x00,0x00,0x40,0x08,0x00,0x00,0x30,0x30,0x00,0x00,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // W +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x10,0x80,0x00,0x00,0x10,0x80,0x03,0xC0,0x10,0x80,0x1F,0xE0,0x0F,0xF0,0x7F,0x00,0x00,0x3F,0xF8,0x00,0x00,0x1F,0xE0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x3F,0xF8,0x00,0x0F,0xF0,0x7F,0x00,0x10,0x80,0x1F,0xC0,0x10,0x80,0x03,0xE0,0x10,0x80,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // X +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xC0,0x00,0x00,0x18,0x30,0x00,0x00,0x33,0xD8,0x00,0x00,0x2C,0x68,0x00,0x00,0x50,0x14,0x00,0x00,0x50,0x14,0x00,0x00,0x50,0x14,0x00,0x00,0x50,0x14,0x00,0x00,0xFF,0xFE,0x00,0x00,0xFF,0xFE,0x00,0x00,0xFE,0xFE,0x00,0x00,0xFC,0x7E,0x00,0x00,0xFE,0xFE,0x00,0x00,0xFE,0xFE,0x00,0x00,0x7E,0xFC,0x00,0x00,0x3F,0xF8,0x00,0x00,0x1F,0xF0,0x00,0x00,0x07,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Y +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x01,0xFC,0x00,0x00,0x03,0xFE,0x00,0x00,0x07,0xC7,0x00,0x00,0x07,0xC7,0x00,0x00,0x07,0xC7,0x00,0x00,0x07,0xFF,0x00,0x00,0x0F,0xFF,0x00,0x00,0x0F,0xFE,0x00,0x00,0x0F,0xFC,0x00,0x00,0x3F,0xF8,0x00,0x00,0x3F,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF8,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Z +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xF0,0x00,0x00,0x20,0x10,0x00,0x00,0x40,0x08,0x00,0x00,0x40,0x08,0x00,0x00,0x40,0x08,0x00,0x00,0x80,0x04,0x00,0x01,0xFF,0xFF,0x00,0x03,0x9F,0xE7,0x00,0x03,0x0F,0xC3,0x00,0x03,0x0F,0xC3,0x00,0x03,0x9F,0xE7,0x00,0x03,0xFF,0xFF,0x00,0x00,0xE0,0x1C,0x00,0x00,0xE0,0x1C,0x00,0x00,0xE0,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,0x07,0x80,0x00,0x00,0x04,0x80,0x00,0x00,0x1F,0xE0,0x00,0x00,0x20,0x10,0x00,0x00,0x40,0x10,0x00,0x00,0x40,0x08,0x00,0x00,0x40,0x08,0x00,0x00,0x80,0x04,0x00,0x01,0xFF,0xFF,0x00,0x03,0x9F,0xE7,0x00,0x03,0x0F,0xC3,0x00,0x03,0x0F,0xC3,0x00,0x03,0x9F,0xE7,0x00,0x03,0xFF,0xFF,0x00,0x00,0xE0,0x1C,0x00,0x00,0xE0,0x1C,0x00,0x00,0xE0,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,0xFF,0xFC,0x00,0x00,0xE0,0x1C,0x00,0x01,0xE0,0x1E,0x00,0x01,0xFF,0xFE,0x00,0x01,0x00,0x02,0x00,0x01,0x00,0x02,0x00,0x01,0x00,0x02,0x00,0x01,0x00,0x02,0x00,0x01,0x00,0x02,0x00,0x01,0xFF,0xFE,0x00,0x01,0xCF,0xCE,0x00,0x01,0x87,0x86,0x00,0x01,0x87,0x86,0x00,0x01,0xCF,0xCE,0x00,0x01,0xFF,0xFE,0x00,0x00,0x70,0x38,0x00,0x00,0x70,0x38,0x00,0x00,0x70,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ] +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFC,0x00,0x00,0x7F,0xFC,0x00,0x00,0x40,0x04,0x00,0x00,0x40,0x04,0x00,0x00,0x40,0x04,0x00,0x00,0x40,0x04,0x00,0x00,0x40,0x04,0x00,0x00,0x40,0x04,0x00,0x00,0x40,0x04,0x00,0x00,0x7F,0xFC,0x00,0x00,0x47,0x8C,0x00,0x00,0x47,0x8C,0x00,0x00,0x47,0x8C,0x00,0x00,0x7F,0xFC,0x00,0x00,0x30,0x18,0x00,0x00,0x20,0x08,0x00,0x00,0x40,0x04,0x00,0x01,0x80,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,0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x07,0x80,0x00,0x01,0x07,0x80,0x00,0x01,0x87,0xC0,0x00,0x01,0x87,0xC0,0x00,0x01,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x80,0x01,0x87,0xC0,0x00,0x01,0x87,0x80,0x00,0x01,0x07,0x80,0x00,0x00,0x07,0x80,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x00,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,0x0F,0xFF,0xC0,0x00,0x0F,0xFF,0xC0,0x00,0x0F,0xFF,0xC0,0x00,0x0F,0xFF,0xFF,0x00,0x0F,0xFF,0xF8,0x80,0x0F,0xFF,0xF8,0x80,0x0F,0xFF,0xF8,0x80,0x0F,0xFF,0xF8,0x40,0x00,0x00,0x3F,0xC0,0x0F,0xFF,0xFF,0xC0,0x0F,0x01,0xF9,0xC0,0x0E,0xC6,0xF6,0xC0,0x0D,0xEF,0x6F,0x40,0x01,0xEF,0x0F,0x00,0x00,0xC6,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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,0xC0,0x00,0x00,0x06,0x60,0x00,0x00,0x08,0x20,0x00,0x00,0x1E,0x20,0x00,0x00,0x6E,0x40,0x00,0x00,0xB5,0x80,0x00,0x03,0x4B,0x00,0x00,0x04,0x94,0x00,0x00,0x1B,0x68,0x00,0x00,0x24,0xB0,0x00,0x00,0x5B,0x40,0x00,0x01,0xA5,0x80,0x00,0x01,0x5A,0x00,0x00,0x02,0x6C,0x00,0x00,0x04,0x50,0x00,0x00,0x0C,0xE0,0x00,0x00,0x0F,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // a +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x33,0x80,0x00,0x00,0x47,0x80,0x00,0x00,0x8E,0x63,0xF0,0x01,0x1C,0x1E,0x70,0x01,0x38,0x02,0x70,0x02,0x38,0x02,0x70,0x02,0x7B,0x02,0x70,0x04,0x7C,0x02,0x70,0x04,0x80,0x02,0x70,0x07,0x80,0x06,0x70,0x0B,0x7F,0xFB,0xF0,0x0A,0x00,0x00,0x70,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // b +0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x03,0xF8,0x00,0x00,0x03,0xF0,0x00,0x00,0x07,0xF0,0x00,0x00,0x05,0xF0,0x00,0x00,0x0F,0x60,0x00,0x00,0x0D,0xC0,0x00,0x00,0x0F,0x60,0x00,0x00,0x0B,0xC0,0x00,0x00,0x16,0x80,0x00,0x00,0x12,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // c +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFC,0x00,0x00,0x18,0x1C,0x00,0x00,0x3F,0xE4,0x00,0x00,0x20,0x24,0x00,0x00,0x27,0x24,0x00,0x00,0x20,0x24,0x00,0x00,0x20,0x24,0x00,0x00,0x20,0x24,0x00,0x00,0x20,0x24,0x00,0x00,0x20,0x24,0x00,0x00,0x3F,0xE4,0x00,0x00,0x20,0x24,0x00,0x00,0x27,0x24,0x00,0x00,0x20,0x24,0x00,0x00,0x20,0x24,0x00,0x00,0x20,0x28,0x00,0x00,0x20,0x30,0x00,0x00,0x3F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // d +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xE0,0x00,0x00,0x20,0x10,0x00,0x00,0x20,0x10,0x00,0x00,0x30,0x50,0x00,0x00,0x2F,0xD0,0x00,0x00,0x17,0xE0,0x00,0x00,0x13,0xA0,0x00,0x00,0x0B,0x40,0x00,0x00,0x05,0x80,0x00,0x00,0x05,0x80,0x00,0x00,0x09,0x40,0x00,0x00,0x11,0x20,0x00,0x00,0x11,0x20,0x00,0x00,0x21,0x10,0x00,0x00,0x27,0x90,0x00,0x00,0x2F,0xD0,0x00,0x00,0x2F,0xD0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // e +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFD,0xFF,0x00,0x0C,0x07,0x01,0x80,0x3C,0x02,0x01,0xE0,0x34,0x02,0x01,0x60,0x34,0x02,0x01,0x60,0x34,0x02,0x01,0x60,0x34,0x02,0x01,0x60,0x34,0x02,0x01,0x60,0x34,0x02,0x01,0x60,0x34,0x02,0x01,0x60,0x34,0x02,0x01,0x60,0x34,0x02,0x01,0x60,0x34,0x02,0x01,0x60,0x37,0xFA,0xFF,0x60,0x38,0x07,0x01,0x60,0x38,0x02,0x00,0xE0,0x3F,0xFA,0xFF,0xE0,0x00,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // f +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x00,0x80,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x80,0x3E,0x00,0x00,0x80,0x24,0x00,0x00,0x80,0x28,0x00,0x00,0x80,0x30,0x00,0x00,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // g +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x00,0x80,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0xBF,0x82,0x00,0x00,0x80,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0xBF,0xFA,0x00,0x00,0xBF,0xFA,0x00,0x00,0x80,0x02,0x00,0x00,0xBF,0xFA,0x00,0x00,0x80,0x02,0x00,0x00,0xBF,0xFA,0x00,0x00,0x80,0x02,0x00,0x00,0xBF,0xBE,0x00,0x00,0x80,0x24,0x00,0x00,0x80,0x28,0x00,0x00,0x80,0x30,0x00,0x00,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // h +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0x80,0x00,0x08,0x00,0x80,0x00,0x08,0x00,0x80,0x00,0x7F,0xFC,0x80,0x00,0x40,0x04,0x80,0x01,0xFF,0xF4,0x80,0x01,0x00,0x14,0x80,0x01,0x00,0x14,0x80,0x01,0x7F,0x94,0x80,0x01,0x00,0x14,0x80,0x01,0x7F,0x94,0x80,0x01,0x00,0x14,0x80,0x01,0x7F,0x94,0x80,0x01,0x00,0x14,0x80,0x01,0x00,0x14,0x80,0x01,0x7F,0x94,0x80,0x01,0x00,0x14,0x80,0x01,0x7F,0x97,0x80,0x01,0x00,0x14,0x00,0x01,0x7E,0x14,0x00,0x01,0x00,0x1C,0x00,0x01,0xFF,0xF0,0x00, // i +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xE0,0x08,0x00,0x00,0x20,0x08,0x00,0x03,0xA0,0x09,0xFC,0x03,0xA0,0x08,0x00,0x03,0xA0,0x09,0xFC,0x03,0xA0,0x08,0x00,0x03,0xA0,0x08,0x00,0x00,0x20,0x08,0x00,0x00,0x20,0x08,0x00,0x00,0x20,0x09,0xFF,0xF8,0x20,0x08,0x00,0x00,0x20,0x09,0xFF,0xF8,0x20,0x08,0x00,0x00,0x20,0x09,0xFF,0xF8,0x20,0x08,0x00,0x00,0x20,0x08,0x00,0x00,0x20,0x0F,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // j +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xE0,0x0C,0x00,0x00,0x60,0x0A,0x00,0x00,0xA0,0x09,0x00,0x01,0x20,0x08,0x80,0x02,0x20,0x08,0x40,0x04,0x20,0x08,0x20,0x08,0x20,0x08,0x10,0x10,0x20,0x08,0x08,0x20,0x20,0x08,0x0C,0x60,0x20,0x08,0x1A,0xB0,0x20,0x08,0x23,0x88,0x20,0x08,0x40,0x04,0x20,0x08,0x80,0x02,0x20,0x09,0x00,0x01,0x20,0x0A,0x00,0x00,0xA0,0x0C,0x00,0x00,0x60,0x0F,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // k +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFC,0x00,0x01,0xE0,0x1E,0x00,0x01,0xE0,0xDE,0x00,0x01,0xE0,0xDE,0x00,0x01,0xE0,0xDE,0x00,0x01,0xE0,0xDE,0x00,0x01,0xE0,0x1E,0x00,0x01,0xFF,0xFE,0x00,0x01,0x80,0x06,0x00,0x01,0x80,0x06,0x00,0x01,0x80,0x06,0x00,0x01,0x80,0x06,0x00,0x01,0x80,0x06,0x00,0x01,0x80,0x06,0x00,0x01,0x80,0x06,0x00,0x01,0x80,0x06,0x00,0x01,0x80,0x06,0x00,0x01,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // l +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xFF,0x00,0x02,0x00,0x03,0x00,0x02,0x00,0x03,0x00,0x02,0x00,0x03,0x00,0x02,0x00,0x02,0x00,0x03,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x00,0x03,0xF8,0xFF,0x00,0x03,0xF0,0x7F,0x00,0x03,0xF0,0x7F,0x00,0x03,0xF0,0x7F,0x00,0x03,0xF8,0xFF,0x00,0x03,0xFF,0xFF,0x00,0x03,0xFC,0xFF,0x00,0x03,0xFC,0xFF,0x00,0x03,0xFC,0xFF,0x00,0x03,0xFC,0xFF,0x00,0x03,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // m +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0x80,0x07,0xFF,0xFF,0x80,0x07,0xFF,0xFF,0x80,0x04,0xF8,0x7C,0x80,0x04,0x8C,0xC4,0x80,0x05,0x8C,0xC6,0x80,0x05,0x8C,0xC6,0x80,0x04,0xFC,0xFC,0x80,0x04,0xF8,0x7C,0x80,0x07,0xFF,0xFF,0x80,0x07,0xFF,0xFF,0x80,0x06,0xFF,0xFD,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // n +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3E,0x30,0x00,0x00,0x7E,0x08,0x00,0x00,0xFE,0x04,0x00,0x01,0x78,0x02,0x00,0x01,0xF7,0x82,0x00,0x02,0xF8,0x61,0x00,0x03,0xF0,0x31,0x00,0x03,0xE3,0x11,0x00,0x03,0xE3,0x1F,0x00,0x02,0x23,0x1F,0x00,0x02,0x10,0x3F,0x00,0x01,0x18,0x7E,0x00,0x01,0x07,0xFE,0x00,0x00,0x81,0xFC,0x00,0x00,0x41,0xF8,0x00,0x00,0x31,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // o + +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xC0,0x00,0x00,0x31,0xF0,0x00,0x00,0x5F,0xF8,0x00,0x00,0xA7,0xFC,0x00,0x01,0xD9,0xFE,0x00,0x01,0xA7,0xFE,0x00,0x01,0xD8,0x3E,0x00,0x03,0xA0,0x1F,0x00,0x03,0xA3,0x1F,0x00,0x03,0xE3,0x1F,0x00,0x03,0xE3,0x1D,0x00,0x01,0xE0,0x2E,0x00,0x01,0xF0,0x3A,0x00,0x01,0xFF,0xEA,0x00,0x00,0xFE,0x74,0x00,0x00,0x7F,0xC8,0x00,0x00,0x3E,0x30,0x00,0x00,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // p +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFE,0x00,0x01,0x00,0x02,0x00,0x01,0x7F,0xFE,0x00,0x01,0x40,0x06,0x00,0x01,0x40,0x06,0x00,0x01,0x40,0x06,0x00,0x01,0x40,0x06,0x00,0x01,0x40,0x06,0x00,0x01,0x40,0x06,0x00,0x01,0x40,0x06,0x00,0x01,0x7F,0xFE,0x00,0x01,0xFF,0xFE,0x00,0x01,0xFF,0xFF,0x00,0x01,0x00,0x01,0x00,0x03,0x6F,0x79,0x80,0x02,0xDF,0xBC,0x80,0x02,0x00,0x00,0x80,0x03,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // q +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xFE,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xC0,0x10,0x00,0x00,0x40,0x10,0x00,0x00,0x40,0x17,0xBD,0xED,0xC0,0x10,0x00,0x00,0x40,0x17,0xBD,0xED,0xC0,0x10,0x00,0x00,0x40,0x17,0x7E,0xED,0xC0,0x10,0x00,0x00,0x40,0x10,0x00,0x00,0x40,0x1F,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // r +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xF0,0x00,0x00,0x40,0x08,0x00,0x00,0x40,0x08,0x00,0x00,0x40,0x08,0x00,0x00,0x40,0x7F,0x00,0x00,0x40,0x89,0x80,0x00,0x40,0x88,0x80,0x03,0x80,0xFF,0x80,0x00,0x00,0x80,0x80,0x00,0x00,0x80,0x80,0x00,0x00,0x80,0x80,0x00,0x00,0x80,0x80,0x00,0x00,0x80,0x80,0x00,0x00,0x80,0x80,0x00,0x00,0xC1,0x80,0x00,0x00,0x63,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // s +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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,0xFF,0xFF,0x00,0x01,0x00,0x01,0x00,0x01,0x3F,0xF9,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x09,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // t +0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x07,0xC0,0x00,0x00,0x0B,0xA0,0x00,0x00,0x0B,0xA0,0x00,0x00,0x09,0x20,0x00,0x00,0x09,0x20,0x00,0x00,0x07,0xC0,0x00,0x00,0x05,0x20,0x00,0x00,0x1A,0x20,0x00,0x00,0x13,0x10,0x00,0x00,0x12,0x90,0x00,0x00,0x1C,0x78,0x00,0x00,0x1C,0x38,0x00,0x00,0x1C,0x38,0x00,0x00,0x1C,0x38,0x00,0x00,0x1C,0x38,0x00,0x00,0x0C,0x30,0x00,0x00,0x0E,0x70,0x00,0x00,0x06,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // u +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x70,0x00,0x00,0x25,0x78,0x00,0x00,0x27,0xF8,0x00,0x00,0x1F,0xF0,0x00,0x00,0x7F,0xE0,0x00,0x00,0xFF,0x80,0x00,0x01,0xFF,0x80,0x00,0x01,0xFC,0x80,0x00,0x00,0xF2,0x40,0x00,0x00,0xE2,0x20,0x00,0x00,0x01,0x20,0x00,0x00,0x01,0x10,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // v +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x47,0x80,0x00,0x00,0x88,0x00,0x00,0x03,0x07,0x80,0x01,0xEC,0x21,0x00,0x02,0x10,0xDE,0x00,0x07,0x83,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xC8,0x00,0x00,0x07,0x90,0x00,0x00,0x02,0x10,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // w +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x1F,0x80,0x00,0x00,0x3F,0x80,0x00,0x00,0x7F,0x80,0x00,0x00,0x7F,0x00,0x00,0x00,0x7E,0x00,0x00,0x01,0xFC,0x00,0x00,0x00,0xF8,0x00,0x00,0x01,0x60,0x00,0x00,0x02,0xA0,0x00,0x00,0x05,0x00,0x00,0x00,0x0A,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0xD0,0x00,0x00,0x01,0x20,0x00,0x00,0x02,0x20,0x00,0x00,0x02,0x40,0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // x +0x00,0x0F,0xFC,0x00,0x00,0x08,0x06,0x00,0x00,0x0B,0xF7,0x00,0x00,0x08,0x00,0x80,0x00,0x0B,0xFE,0x80,0x00,0x08,0x00,0x80,0x07,0xFB,0xFE,0xC0,0x06,0x48,0x00,0xC0,0x06,0x4B,0x80,0xC0,0x06,0x48,0x00,0xC0,0x06,0x5F,0xFF,0xC0,0x06,0x50,0x00,0x40,0x06,0x50,0x6F,0x40,0x06,0x50,0x6F,0x40,0x06,0x50,0x6F,0x40,0x06,0x57,0x6F,0x40,0x06,0x57,0x6F,0x40,0x06,0x57,0x6F,0x40,0x07,0xD0,0x00,0x40,0x07,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // y +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xF0,0x00,0x00,0x80,0x38,0x00,0x00,0x80,0x3C,0x00,0x00,0x80,0x3C,0x00,0x00,0x80,0x04,0x00,0x00,0x80,0x04,0x00,0x00,0x80,0x04,0x00,0x00,0x80,0x04,0x00,0x03,0xFF,0xFF,0x00,0x02,0x00,0x01,0x00,0x0F,0xFF,0xFF,0xC0,0x09,0x24,0x80,0x40,0x09,0x24,0x80,0x40,0x09,0xFF,0x80,0x40,0x08,0x00,0x00,0x40,0x08,0x00,0x00,0x40,0x0F,0xFF,0xFF,0xC0,0x03,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // z +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x7B,0xE0,0x00,0x00,0x7A,0x20,0x00,0x00,0x7A,0x20,0x00,0x00,0xFE,0x3C,0x00,0x00,0x80,0x04,0x00,0x03,0xBF,0x77,0x00,0x02,0x00,0x01,0x00,0x02,0x00,0x01,0x00,0x03,0xFF,0xFF,0x00,0x01,0xFF,0xFE,0x00,0x01,0xFF,0xFC,0x00,0x01,0xFF,0xFC,0x00,0x00,0xFF,0xF8,0x00,0x00,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,0x00,0x00,0x00,0x0D,0x80,0x00,0x00,0x1A,0xC0,0x00,0x00,0x15,0x40,0x00,0x00,0x17,0x40,0x00,0x00,0x12,0x40,0x00,0x00,0x67,0x30,0x00,0x00,0xD2,0x58,0x00,0x01,0x97,0x4C,0x00,0x02,0x17,0x42,0x00,0x02,0x12,0x42,0x00,0x02,0x18,0xC2,0x00,0x03,0xE7,0x3E,0x00,0x03,0xE7,0x3E,0x00,0x00,0x3D,0xE0,0x00,0x00,0x3D,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0xC0,0x00,0x00,0x3D,0xE0,0x00,0x00,0x0A,0x80,0x00,0x00,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,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x77,0xFF,0xC0,0x00,0x37,0xFD,0xC0,0x00,0x2F,0xF8,0x00,0x03,0xEF,0xE7,0x00,0x04,0x67,0xE8,0x80,0x08,0x93,0xD0,0x40,0x09,0x91,0xFE,0x40,0x0B,0xD0,0xFE,0x40,0x09,0x10,0x10,0x40,0x04,0x20,0x08,0x80,0x03,0xC0,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,0x0F,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x1F,0xF0,0x00,0x00,0x34,0x30,0x00,0x03,0xE4,0x4F,0x80,0x06,0x72,0x5C,0xC0,0x0C,0x5A,0x94,0x60,0x08,0xC9,0xA6,0x20,0x08,0x89,0xFE,0x20,0x08,0x08,0x20,0x20,0x0C,0x10,0x10,0x60,0x06,0x30,0x18,0xC0,0x03,0xE0,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ~ +}; diff --git a/libraries/UTFT_Buttons/hardware/arm/HW_ARM_defines.h b/libraries/UTFT_Buttons/hardware/arm/HW_ARM_defines.h new file mode 100644 index 0000000..d97e072 --- /dev/null +++ b/libraries/UTFT_Buttons/hardware/arm/HW_ARM_defines.h @@ -0,0 +1 @@ +#define bitmapdatatype unsigned short* diff --git a/libraries/UTFT_Buttons/hardware/avr/HW_AVR_defines.h b/libraries/UTFT_Buttons/hardware/avr/HW_AVR_defines.h new file mode 100644 index 0000000..767d242 --- /dev/null +++ b/libraries/UTFT_Buttons/hardware/avr/HW_AVR_defines.h @@ -0,0 +1 @@ +#define bitmapdatatype unsigned int* diff --git a/libraries/UTFT_Buttons/hardware/pic32/HW_PIC32_defines.h b/libraries/UTFT_Buttons/hardware/pic32/HW_PIC32_defines.h new file mode 100644 index 0000000..05a1580 --- /dev/null +++ b/libraries/UTFT_Buttons/hardware/pic32/HW_PIC32_defines.h @@ -0,0 +1,2 @@ +#define bitmapdatatype unsigned short* + diff --git a/libraries/UTFT_Buttons/keywords.txt b/libraries/UTFT_Buttons/keywords.txt new file mode 100644 index 0000000..31c2cbf --- /dev/null +++ b/libraries/UTFT_Buttons/keywords.txt @@ -0,0 +1,22 @@ +UTFT_Buttons KEYWORD1 + +addButton KEYWORD2 +drawButtons KEYWORD2 +drawButton KEYWORD2 +enableButton KEYWORD2 +disableButton KEYWORD2 +relabelButton KEYWORD2 +buttonEnabled KEYWORD2 +deleteButton KEYWORD2 +deleteAllButtons KEYWORD2 +checkButtons KEYWORD2 +setTextFont KEYWORD2 +setSymbolFont KEYWORD2 +setButtonColors KEYWORD2 + +BUTTON_DISABLED LITERAL1 +BUTTON_SYMBOL LITERAL1 +BUTTON_SYMBOL_REP_3X LITERAL1 +BUTTON_BITMAP LITERAL1 +BUTTON_NO_BORDER LITERAL1 +BUTTON_UNUSED LITERAL1 diff --git a/libraries/UTFT_Buttons/version.txt b/libraries/UTFT_Buttons/version.txt new file mode 100644 index 0000000..877994d --- /dev/null +++ b/libraries/UTFT_Buttons/version.txt @@ -0,0 +1,3 @@ +Version: + 1.0 24 May 2013 - initial release + 1.01 08 Sep 2014 - fixed compatibility-issues with Arduino 1.5.7 diff --git a/libraries/UTouch/License - CC BY-NC-SA 3.0 - Legal.pdf b/libraries/UTouch/License - CC BY-NC-SA 3.0 - Legal.pdf new file mode 100644 index 0000000..ed326c9 Binary files /dev/null and b/libraries/UTouch/License - CC BY-NC-SA 3.0 - Legal.pdf differ diff --git a/libraries/UTouch/License - CC BY-NC-SA 3.0 - Summary.pdf b/libraries/UTouch/License - CC BY-NC-SA 3.0 - Summary.pdf new file mode 100644 index 0000000..b35e677 Binary files /dev/null and b/libraries/UTouch/License - CC BY-NC-SA 3.0 - Summary.pdf differ diff --git a/libraries/UTouch/UTouch.cpp b/libraries/UTouch/UTouch.cpp new file mode 100644 index 0000000..f5aad74 --- /dev/null +++ b/libraries/UTouch/UTouch.cpp @@ -0,0 +1,262 @@ +/* + UTouch.cpp - Arduino/chipKit library support for Color TFT LCD Touch screens + Copyright (C)2010-2014 Henning Karlsen. All right reserved + + Basic functionality of this library are based on the demo-code provided by + ITead studio. You can find the latest version of the library at + http://www.henningkarlsen.com/electronics + + If you make any modifications or improvements to the code, I would appreciate + that you share the code with me so that I might include it in the next release. + I can be contacted through http://www.henningkarlsen.com/electronics/contact.php + + This library is free software; you can redistribute it and/or + modify it under the terms of the CC BY-NC-SA 3.0 license. + Please see the included documents for further information. + + Commercial use of this library requires you to buy a license that + will allow commercial use. This includes using the library, + modified or not, as a tool to sell products. + + The license applies to all part of the library including the + examples and tools supplied with the library. +*/ + +#include "UTouch.h" +#include "UTouchCD.h" + +#if defined(__AVR__) + #include "hardware/avr/HW_AVR.inc" +#elif defined(__PIC32MX__) + #include "hardware/pic32/HW_PIC32.inc" +#elif defined(__arm__) + #include "hardware/arm/HW_ARM.inc" +#endif + +UTouch::UTouch(byte tclk, byte tcs, byte din, byte dout, byte irq) +{ + T_CLK = tclk; + T_CS = tcs; + T_DIN = din; + T_DOUT = dout; + T_IRQ = irq; +} + +void UTouch::InitTouch(byte orientation) +{ + orient = orientation; + _default_orientation = CAL_S>>31; + touch_x_left = (CAL_X>>14) & 0x3FFF; + touch_x_right = CAL_X & 0x3FFF; + touch_y_top = (CAL_Y>>14) & 0x3FFF; + touch_y_bottom = CAL_Y & 0x3FFF; + disp_x_size = (CAL_S>>12) & 0x0FFF; + disp_y_size = CAL_S & 0x0FFF; + prec = 10; + + P_CLK = portOutputRegister(digitalPinToPort(T_CLK)); + B_CLK = digitalPinToBitMask(T_CLK); + P_CS = portOutputRegister(digitalPinToPort(T_CS)); + B_CS = digitalPinToBitMask(T_CS); + P_DIN = portOutputRegister(digitalPinToPort(T_DIN)); + B_DIN = digitalPinToBitMask(T_DIN); + P_DOUT = portInputRegister(digitalPinToPort(T_DOUT)); + B_DOUT = digitalPinToBitMask(T_DOUT); + P_IRQ = portInputRegister(digitalPinToPort(T_IRQ)); + B_IRQ = digitalPinToBitMask(T_IRQ); + + pinMode(T_CLK, OUTPUT); + pinMode(T_CS, OUTPUT); + pinMode(T_DIN, OUTPUT); + pinMode(T_DOUT, INPUT); + pinMode(T_IRQ, OUTPUT); + + sbi(P_CS, B_CS); + sbi(P_CLK, B_CLK); + sbi(P_DIN, B_DIN); + sbi(P_IRQ, B_IRQ); +} + +void UTouch::read() +{ + unsigned long tx=0, temp_x=0; + unsigned long ty=0, temp_y=0; + unsigned long minx=99999, maxx=0; + unsigned long miny=99999, maxy=0; + int datacount=0; + + cbi(P_CS, B_CS); + + pinMode(T_IRQ, INPUT); + for (int i=0; i0) and (temp_x<4096) and (temp_y>0) and (temp_y<4096)) + { + tx+=temp_x; + ty+=temp_y; + if (prec>5) + { + if (temp_xmaxx) + maxx=temp_x; + if (temp_ymaxy) + maxy=temp_y; + } + datacount++; + } + } + } + } + pinMode(T_IRQ, OUTPUT); + + if (prec>5) + { + tx = tx-(minx+maxx); + ty = ty-(miny+maxy); + datacount -= 2; + } + + sbi(P_CS, B_CS); + if ((datacount==(prec-2)) or (datacount==PREC_LOW)) + { + if (orient == _default_orientation) + { + TP_X=ty/datacount; + TP_Y=tx/datacount; + } + else + { + TP_X=tx/datacount; + TP_Y=ty/datacount; + } + } + else + { + TP_X=-1; + TP_Y=-1; + } +} + +bool UTouch::dataAvailable() +{ + bool avail; + pinMode(T_IRQ, INPUT); + avail = !(rbi(P_IRQ, B_IRQ)); + pinMode(T_IRQ, OUTPUT); + return avail; +} + +int16_t UTouch::getX() +{ + long c; + + if ((TP_X==-1) or (TP_Y==-1)) + return -1; + if (orient == _default_orientation) + { + c = long(long(TP_X - touch_x_left) * (disp_x_size)) / long(touch_x_right - touch_x_left); + if (c<0) + c = 0; + if (c>disp_x_size) + c = disp_x_size; + } + else + { + if (_default_orientation == PORTRAIT) + c = long(long(TP_X - touch_y_top) * (-disp_y_size)) / long(touch_y_bottom - touch_y_top) + long(disp_y_size); + else + c = long(long(TP_X - touch_y_top) * (disp_y_size)) / long(touch_y_bottom - touch_y_top); + if (c<0) + c = 0; + if (c>disp_y_size) + c = disp_y_size; + } + return c; +} + +int16_t UTouch::getY() +{ + int c; + + if ((TP_X==-1) or (TP_Y==-1)) + return -1; + if (orient == _default_orientation) + { + c = long(long(TP_Y - touch_y_top) * (disp_y_size)) / long(touch_y_bottom - touch_y_top); + if (c<0) + c = 0; + if (c>disp_y_size) + c = disp_y_size; + } + else + { + if (_default_orientation == PORTRAIT) + c = long(long(TP_Y - touch_x_left) * (disp_x_size)) / long(touch_x_right - touch_x_left); + else + c = long(long(TP_Y - touch_x_left) * (-disp_x_size)) / long(touch_x_right - touch_x_left) + long(disp_x_size); + if (c<0) + c = 0; + if (c>disp_x_size) + c = disp_x_size; + } + return c; +} + +void UTouch::setPrecision(byte precision) +{ + switch (precision) + { + case PREC_LOW: + prec=1; // DO NOT CHANGE! + break; + case PREC_MEDIUM: + prec=12; // Iterations + 2 + break; + case PREC_HI: + prec=27; // Iterations + 2 + break; + case PREC_EXTREME: + prec=102; // Iterations + 2 + break; + default: + prec=12; // Iterations + 2 + break; + } +} + +void UTouch::calibrateRead() +{ + unsigned long tx=0; + unsigned long ty=0; + + cbi(P_CS, B_CS); + + touch_WriteData(0x90); + pulse_high(P_CLK, B_CLK); + tx=touch_ReadData(); + + touch_WriteData(0xD0); + pulse_high(P_CLK, B_CLK); + ty=touch_ReadData(); + + sbi(P_CS, B_CS); + + TP_X=ty; + TP_Y=tx; +} + diff --git a/libraries/UTouch/UTouch.h b/libraries/UTouch/UTouch.h new file mode 100644 index 0000000..a087db7 --- /dev/null +++ b/libraries/UTouch/UTouch.h @@ -0,0 +1,80 @@ +/* + UTouch.h - Arduino/chipKit library support for Color TFT LCD Touch screens + Copyright (C)2010-2014 Henning Karlsen. All right reserved + + Basic functionality of this library are based on the demo-code provided by + ITead studio. You can find the latest version of the library at + http://www.henningkarlsen.com/electronics + + If you make any modifications or improvements to the code, I would appreciate + that you share the code with me so that I might include it in the next release. + I can be contacted through http://www.henningkarlsen.com/electronics/contact.php + + This library is free software; you can redistribute it and/or + modify it under the terms of the CC BY-NC-SA 3.0 license. + Please see the included documents for further information. + + Commercial use of this library requires you to buy a license that + will allow commercial use. This includes using the library, + modified or not, as a tool to sell products. + + The license applies to all part of the library including the + examples and tools supplied with the library. +*/ + +#ifndef UTouch_h +#define UTouch_h + +#define UTOUCH_VERSION 124 + +#if defined(__AVR__) + #include "Arduino.h" + #include "hardware/avr/HW_AVR_defines.h" +#elif defined(__PIC32MX__) + #include "WProgram.h" + #include "hardware/pic32/HW_PIC32_defines.h" +#elif defined(__arm__) + #include "Arduino.h" + #include "hardware/arm/HW_ARM_defines.h" +#endif + +#define PORTRAIT 0 +#define LANDSCAPE 1 + +#define PREC_LOW 1 +#define PREC_MEDIUM 2 +#define PREC_HI 3 +#define PREC_EXTREME 4 + +class UTouch +{ + public: + int16_t TP_X ,TP_Y; + + UTouch(byte tclk, byte tcs, byte tdin, byte dout, byte irq); + + void InitTouch(byte orientation = LANDSCAPE); + void read(); + bool dataAvailable(); + int16_t getX(); + int16_t getY(); + void setPrecision(byte precision); + + void calibrateRead(); + + private: + regtype *P_CLK, *P_CS, *P_DIN, *P_DOUT, *P_IRQ; + regsize B_CLK, B_CS, B_DIN, B_DOUT, B_IRQ; + byte T_CLK, T_CS, T_DIN, T_DOUT, T_IRQ; + long _default_orientation; + byte orient; + byte prec; + byte display_model; + long disp_x_size, disp_y_size, default_orientation; + long touch_x_left, touch_x_right, touch_y_top, touch_y_bottom; + + void touch_WriteData(byte data); + word touch_ReadData(); +}; + +#endif \ No newline at end of file diff --git a/libraries/UTouch/UTouch.pdf b/libraries/UTouch/UTouch.pdf new file mode 100644 index 0000000..9c25e83 Binary files /dev/null and b/libraries/UTouch/UTouch.pdf differ diff --git a/libraries/UTouch/UTouchCD.h b/libraries/UTouch/UTouchCD.h new file mode 100644 index 0000000..de55930 --- /dev/null +++ b/libraries/UTouch/UTouchCD.h @@ -0,0 +1,21 @@ +// UTouchCD.h +// ---------- +// +// Since there are slight deviations in all touch screens you should run a +// calibration on your display module. Run the UTouch_Calibration sketch +// that came with this library and follow the on-screen instructions to +// update this file. +// +// Remember that is you have multiple display modules they will probably +// require different calibration data so you should run the calibration +// every time you switch to another module. +// You can, of course, store calibration data for all your modules here +// and comment out the ones you dont need at the moment. +// + +// These calibration settings works with my ITDB02-3.2S. +// They MIGHT work on your display module, but you should run the +// calibration sketch anyway. +#define CAL_X 0x00378F66UL +#define CAL_Y 0x03C34155UL +#define CAL_S 0x000EF13FUL diff --git a/libraries/UTouch/UTouch_Supported_display_modules.pdf b/libraries/UTouch/UTouch_Supported_display_modules.pdf new file mode 100644 index 0000000..8f21b39 Binary files /dev/null and b/libraries/UTouch/UTouch_Supported_display_modules.pdf differ diff --git a/libraries/UTouch/examples/Arduino/UTouch_ButtonTest/UTouch_ButtonTest.ino b/libraries/UTouch/examples/Arduino/UTouch_ButtonTest/UTouch_ButtonTest.ino new file mode 100644 index 0000000..35b842c --- /dev/null +++ b/libraries/UTouch/examples/Arduino/UTouch_ButtonTest/UTouch_ButtonTest.ino @@ -0,0 +1,253 @@ +// UTouch_ButtonTest (C)2010-2014 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a quick demo of how create and use buttons. +// +// This program requires the UTFT library. +// +// It is assumed that the display module is connected to an +// appropriate shield or that you know how to change the pin +// numbers in the setup. +// + +#include +#include + +// Initialize display +// ------------------ +// Set the pins to the correct ones for your development board +// ----------------------------------------------------------- +// Standard Arduino Uno/2009 Shield : ,19,18,17,16 +// Standard Arduino Mega/Due shield : ,38,39,40,41 +// CTE TFT LCD/SD Shield for Arduino Due : ,25,26,27,28 +// Teensy 3.x TFT Test Board : ,23,22, 3, 4 +// ElecHouse TFT LCD/SD Shield for Arduino Due : ,22,23,31,33 +// +// Remember to change the model parameter to suit your display module! +UTFT myGLCD(ITDB32S,38,39,40,41); + +// Initialize touchscreen +// ---------------------- +// Set the pins to the correct ones for your development board +// ----------------------------------------------------------- +// Standard Arduino Uno/2009 Shield : 15,10,14, 9, 8 +// Standard Arduino Mega/Due shield : 6, 5, 4, 3, 2 +// CTE TFT LCD/SD Shield for Arduino Due : 6, 5, 4, 3, 2 +// Teensy 3.x TFT Test Board : 26,31,27,28,29 +// ElecHouse TFT LCD/SD Shield for Arduino Due : 25,26,27,29,30 +// +UTouch myTouch( 6, 5, 4, 3, 2); + +// Declare which fonts we will be using +extern uint8_t BigFont[]; + +int x, y; +char stCurrent[20]=""; +int stCurrentLen=0; +char stLast[20]=""; + +/************************* +** Custom functions ** +*************************/ + +void drawButtons() +{ +// Draw the upper row of buttons + for (x=0; x<5; x++) + { + myGLCD.setColor(0, 0, 255); + myGLCD.fillRoundRect (10+(x*60), 10, 60+(x*60), 60); + myGLCD.setColor(255, 255, 255); + myGLCD.drawRoundRect (10+(x*60), 10, 60+(x*60), 60); + myGLCD.printNumI(x+1, 27+(x*60), 27); + } +// Draw the center row of buttons + for (x=0; x<5; x++) + { + myGLCD.setColor(0, 0, 255); + myGLCD.fillRoundRect (10+(x*60), 70, 60+(x*60), 120); + myGLCD.setColor(255, 255, 255); + myGLCD.drawRoundRect (10+(x*60), 70, 60+(x*60), 120); + if (x<4) + myGLCD.printNumI(x+6, 27+(x*60), 87); + } + myGLCD.print("0", 267, 87); +// Draw the lower row of buttons + myGLCD.setColor(0, 0, 255); + myGLCD.fillRoundRect (10, 130, 150, 180); + myGLCD.setColor(255, 255, 255); + myGLCD.drawRoundRect (10, 130, 150, 180); + myGLCD.print("Clear", 40, 147); + myGLCD.setColor(0, 0, 255); + myGLCD.fillRoundRect (160, 130, 300, 180); + myGLCD.setColor(255, 255, 255); + myGLCD.drawRoundRect (160, 130, 300, 180); + myGLCD.print("Enter", 190, 147); + myGLCD.setBackColor (0, 0, 0); +} + +void updateStr(int val) +{ + if (stCurrentLen<20) + { + stCurrent[stCurrentLen]=val; + stCurrent[stCurrentLen+1]='\0'; + stCurrentLen++; + myGLCD.setColor(0, 255, 0); + myGLCD.print(stCurrent, LEFT, 224); + } + else + { + myGLCD.setColor(255, 0, 0); + myGLCD.print("BUFFER FULL!", CENTER, 192); + delay(500); + myGLCD.print(" ", CENTER, 192); + delay(500); + myGLCD.print("BUFFER FULL!", CENTER, 192); + delay(500); + myGLCD.print(" ", CENTER, 192); + myGLCD.setColor(0, 255, 0); + } +} + +// Draw a red frame while a button is touched +void waitForIt(int x1, int y1, int x2, int y2) +{ + myGLCD.setColor(255, 0, 0); + myGLCD.drawRoundRect (x1, y1, x2, y2); + while (myTouch.dataAvailable()) + myTouch.read(); + myGLCD.setColor(255, 255, 255); + myGLCD.drawRoundRect (x1, y1, x2, y2); +} + +/************************* +** Required functions ** +*************************/ + +void setup() +{ +// Initial setup + myGLCD.InitLCD(); + myGLCD.clrScr(); + + myTouch.InitTouch(); + myTouch.setPrecision(PREC_MEDIUM); + + myGLCD.setFont(BigFont); + myGLCD.setBackColor(0, 0, 255); + drawButtons(); +} + +void loop() +{ + while (true) + { + if (myTouch.dataAvailable()) + { + myTouch.read(); + x=myTouch.getX(); + y=myTouch.getY(); + + if ((y>=10) && (y<=60)) // Upper row + { + if ((x>=10) && (x<=60)) // Button: 1 + { + waitForIt(10, 10, 60, 60); + updateStr('1'); + } + if ((x>=70) && (x<=120)) // Button: 2 + { + waitForIt(70, 10, 120, 60); + updateStr('2'); + } + if ((x>=130) && (x<=180)) // Button: 3 + { + waitForIt(130, 10, 180, 60); + updateStr('3'); + } + if ((x>=190) && (x<=240)) // Button: 4 + { + waitForIt(190, 10, 240, 60); + updateStr('4'); + } + if ((x>=250) && (x<=300)) // Button: 5 + { + waitForIt(250, 10, 300, 60); + updateStr('5'); + } + } + + if ((y>=70) && (y<=120)) // Center row + { + if ((x>=10) && (x<=60)) // Button: 6 + { + waitForIt(10, 70, 60, 120); + updateStr('6'); + } + if ((x>=70) && (x<=120)) // Button: 7 + { + waitForIt(70, 70, 120, 120); + updateStr('7'); + } + if ((x>=130) && (x<=180)) // Button: 8 + { + waitForIt(130, 70, 180, 120); + updateStr('8'); + } + if ((x>=190) && (x<=240)) // Button: 9 + { + waitForIt(190, 70, 240, 120); + updateStr('9'); + } + if ((x>=250) && (x<=300)) // Button: 0 + { + waitForIt(250, 70, 300, 120); + updateStr('0'); + } + } + + if ((y>=130) && (y<=180)) // Upper row + { + if ((x>=10) && (x<=150)) // Button: Clear + { + waitForIt(10, 130, 150, 180); + stCurrent[0]='\0'; + stCurrentLen=0; + myGLCD.setColor(0, 0, 0); + myGLCD.fillRect(0, 224, 319, 239); + } + if ((x>=160) && (x<=300)) // Button: Enter + { + waitForIt(160, 130, 300, 180); + if (stCurrentLen>0) + { + for (x=0; x +#include + +// Define the orientation of the touch screen. Further +// information can be found in the instructions. +#define TOUCH_ORIENTATION PORTRAIT + +// Initialize display +// ------------------ +// Set the pins to the correct ones for your development board +// ----------------------------------------------------------- +// Standard Arduino Uno/2009 Shield : ,19,18,17,16 +// Standard Arduino Mega/Due shield : ,38,39,40,41 +// CTE TFT LCD/SD Shield for Arduino Due : ,25,26,27,28 +// Teensy 3.x TFT Test Board : ,23,22, 3, 4 +// ElecHouse TFT LCD/SD Shield for Arduino Due : ,22,23,31,33 +// +// Remember to change the model parameter to suit your display module! +UTFT myGLCD(ITDB32S,38,39,40,41); + +// Initialize touchscreen +// ---------------------- +// Set the pins to the correct ones for your development board +// ----------------------------------------------------------- +// Standard Arduino Uno/2009 Shield : 15,10,14, 9, 8 +// Standard Arduino Mega/Due shield : 6, 5, 4, 3, 2 +// CTE TFT LCD/SD Shield for Arduino Due : 6, 5, 4, 3, 2 +// Teensy 3.x TFT Test Board : 26,31,27,28,29 +// ElecHouse TFT LCD/SD Shield for Arduino Due : 25,26,27,29,30 +// +UTouch myTouch( 6, 5, 4, 3, 2); + +// ************************************ +// DO NOT EDIT ANYTHING BELOW THIS LINE +// ************************************ + +// Declare which fonts we will be using +extern uint8_t SmallFont[]; + +uint32_t cx, cy; +uint32_t rx[8], ry[8]; +uint32_t clx, crx, cty, cby; +float px, py; +int dispx, dispy, text_y_center; +uint32_t calx, caly, cals; +char buf[13]; + +void setup() +{ + myGLCD.InitLCD(); + myGLCD.clrScr(); + myGLCD.setFont(SmallFont); + + myTouch.InitTouch(TOUCH_ORIENTATION); + dispx=myGLCD.getDisplayXSize(); + dispy=myGLCD.getDisplayYSize(); + text_y_center=(dispy/2)-6; +} + +void drawCrossHair(int x, int y) +{ + myGLCD.drawRect(x-10, y-10, x+10, y+10); + myGLCD.drawLine(x-5, y, x+5, y); + myGLCD.drawLine(x, y-5, x, y+5); +} + +void readCoordinates() +{ + int iter = 5000; + int failcount = 0; + int cnt = 0; + uint32_t tx=0; + uint32_t ty=0; + boolean OK = false; + + while (OK == false) + { + myGLCD.setColor(255, 255, 255); + myGLCD.print("* PRESS *", CENTER, text_y_center); + while (myTouch.dataAvailable() == false) {} + myGLCD.print("* HOLD! *", CENTER, text_y_center); + while ((myTouch.dataAvailable() == true) && (cnt=iter) + { + OK = true; + } + else + { + tx = 0; + ty = 0; + cnt = 0; + } + if (failcount>=10000) + fail(); + } + + cx = tx / iter; + cy = ty / iter; +} + +void calibrate(int x, int y, int i) +{ + myGLCD.setColor(255, 255, 255); + drawCrossHair(x,y); + myGLCD.setBackColor(255, 0, 0); + readCoordinates(); + myGLCD.setColor(255, 255, 255); + myGLCD.print("* RELEASE *", CENTER, text_y_center); + myGLCD.setColor(80, 80, 80); + drawCrossHair(x,y); + rx[i]=cx; + ry[i]=cy; + while (myTouch.dataAvailable() == true) {} +} + +void waitForTouch() +{ + while (myTouch.dataAvailable() == true) {} + while (myTouch.dataAvailable() == false) {} + while (myTouch.dataAvailable() == true) {} +} + +void toHex(uint32_t num) +{ + buf[0] = '0'; + buf[1] = 'x'; + buf[10] = 'U'; + buf[11] = 'L'; + buf[12] = 0; + for (int zz=9; zz>1; zz--) + { + if ((num & 0xF) > 9) + buf[zz] = (num & 0xF) + 55; + else + buf[zz] = (num & 0xF) + 48; + num=num>>4; + } +} + +void startup() +{ + myGLCD.setColor(255, 0, 0); + myGLCD.fillRect(0, 0, dispx-1, 13); + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.drawLine(0, 14, dispx-1, 14); + myGLCD.print("UTouch Calibration", CENTER, 1); + myGLCD.setBackColor(0, 0, 0); + + if (dispx==220) + { + myGLCD.print("Use a stylus or something", LEFT, 30); + myGLCD.print("similar to touch as close", LEFT, 42); + myGLCD.print("to the center of the", LEFT, 54); + myGLCD.print("highlighted crosshair as", LEFT, 66); + myGLCD.print("possible. Keep as still as", LEFT, 78); + myGLCD.print("possible and keep holding", LEFT, 90); + myGLCD.print("until the highlight is", LEFT, 102); + myGLCD.print("removed. Repeat for all", LEFT, 114); + myGLCD.print("crosshairs in sequence.", LEFT, 126); + myGLCD.print("Touch screen to continue", CENTER, 162); + } + else + { + myGLCD.print("INSTRUCTIONS", CENTER, 30); + myGLCD.print("Use a stylus or something similar to", LEFT, 50); + myGLCD.print("touch as close to the center of the", LEFT, 62); + myGLCD.print("highlighted crosshair as possible. Keep", LEFT, 74); + myGLCD.print("as still as possible and keep holding", LEFT, 86); + myGLCD.print("until the highlight is removed. Repeat", LEFT, 98); + myGLCD.print("for all crosshairs in sequence.", LEFT, 110); + + myGLCD.print("Further instructions will be displayed", LEFT, 134); + myGLCD.print("when the calibration is complete.", LEFT, 146); + + myGLCD.print("Do NOT use your finger as a calibration", LEFT, 170); + myGLCD.print("stylus or the result WILL BE imprecise.", LEFT, 182); + + myGLCD.print("Touch screen to continue", CENTER, 226); + } + + waitForTouch(); + myGLCD.clrScr(); +} + +void done() +{ + myGLCD.clrScr(); + myGLCD.setColor(255, 0, 0); + myGLCD.fillRect(0, 0, dispx-1, 13); + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.drawLine(0, 14, dispx-1, 14); + myGLCD.print("UTouch Calibration", CENTER, 1); + myGLCD.setBackColor(0, 0, 0); + + if (dispx==220) + { + myGLCD.print("To use the new calibration", LEFT, 30); + myGLCD.print("settings you must edit the", LEFT, 42); + myGLCD.setColor(160, 160, 255); + myGLCD.print("UTouchCD.h", LEFT, 54); + myGLCD.setColor(255, 255, 255); + myGLCD.print("file and change", 88, 54); + myGLCD.print("the following values. The", LEFT, 66); + myGLCD.print("values are located right", LEFT, 78); + myGLCD.print("below the opening comment.", LEFT, 90); + myGLCD.print("CAL_X", LEFT, 110); + myGLCD.print("CAL_Y", LEFT, 122); + myGLCD.print("CAL_S", LEFT, 134); + toHex(calx); + myGLCD.print(buf, 75, 110); + toHex(caly); + myGLCD.print(buf, 75, 122); + toHex(cals); + myGLCD.print(buf, 75, 134); + } + else + { + myGLCD.print("CALIBRATION COMPLETE", CENTER, 30); + myGLCD.print("To use the new calibration", LEFT, 50); + myGLCD.print("settings you must edit the", LEFT, 62); + myGLCD.setColor(160, 160, 255); + myGLCD.print("UTouchCD.h", LEFT, 74); + myGLCD.setColor(255, 255, 255); + myGLCD.print("file and change", 88, 74); + myGLCD.print("the following values.", LEFT, 86); + myGLCD.print("The values are located right", LEFT, 98); + myGLCD.print("below the opening comment in", LEFT, 110); + myGLCD.print("the file.", LEFT, 122); + myGLCD.print("CAL_X", LEFT, 150); + myGLCD.print("CAL_Y", LEFT, 162); + myGLCD.print("CAL_S", LEFT, 174); + + toHex(calx); + myGLCD.print(buf, 75, 150); + toHex(caly); + myGLCD.print(buf, 75, 162); + toHex(cals); + myGLCD.print(buf, 75, 174); + } + +} + +void fail() +{ + myGLCD.clrScr(); + myGLCD.setColor(255, 0, 0); + myGLCD.fillRect(0, 0, dispx-1, 13); + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.drawLine(0, 14, dispx-1, 14); + myGLCD.print("UTouch Calibration FAILED", CENTER, 1); + myGLCD.setBackColor(0, 0, 0); + + myGLCD.print("Unable to read the position", LEFT, 30); + myGLCD.print("of the press. This is a", LEFT, 42); + myGLCD.print("hardware issue and can", 88, 54); + myGLCD.print("not be corrected in", LEFT, 66); + myGLCD.print("software.", LEFT, 78); + + while(true) {}; +} + +void loop() +{ + startup(); + + myGLCD.setColor(80, 80, 80); + drawCrossHair(dispx-11, 10); + drawCrossHair(dispx/2, 10); + drawCrossHair(10, 10); + drawCrossHair(dispx-11, dispy/2); + drawCrossHair(10, dispy/2); + drawCrossHair(dispx-11, dispy-11); + drawCrossHair(dispx/2, dispy-11); + drawCrossHair(10, dispy-11); + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("***********", CENTER, text_y_center-12); + myGLCD.print("***********", CENTER, text_y_center+12); + + calibrate(10, 10, 0); + calibrate(10, dispy/2, 1); + calibrate(10, dispy-11, 2); + calibrate(dispx/2, 10, 3); + calibrate(dispx/2, dispy-11, 4); + calibrate(dispx-11, 10, 5); + calibrate(dispx-11, dispy/2, 6); + calibrate(dispx-11, dispy-11, 7); + + if (TOUCH_ORIENTATION == LANDSCAPE) + cals=(long(dispx-1)<<12)+(dispy-1); + else + cals=(long(dispy-1)<<12)+(dispx-1); + + if (TOUCH_ORIENTATION == PORTRAIT) + px = abs(((float(rx[2]+rx[4]+rx[7])/3)-(float(rx[0]+rx[3]+rx[5])/3))/(dispy-20)); // PORTRAIT + else + px = abs(((float(rx[5]+rx[6]+rx[7])/3)-(float(rx[0]+rx[1]+rx[2])/3))/(dispy-20)); // LANDSCAPE + + if (TOUCH_ORIENTATION == PORTRAIT) + { + clx = (((rx[0]+rx[3]+rx[5])/3)); // PORTRAIT + crx = (((rx[2]+rx[4]+rx[7])/3)); // PORTRAIT + } + else + { + clx = (((rx[0]+rx[1]+rx[2])/3)); // LANDSCAPE + crx = (((rx[5]+rx[6]+rx[7])/3)); // LANDSCAPE + } + if (clx +#include + +// Initialize display +// ------------------ +// Set the pins to the correct ones for your development board +// ----------------------------------------------------------- +// Standard Arduino Uno/2009 Shield : ,19,18,17,16 +// Standard Arduino Mega/Due shield : ,38,39,40,41 +// CTE TFT LCD/SD Shield for Arduino Due : ,25,26,27,28 +// Teensy 3.x TFT Test Board : ,23,22, 3, 4 +// ElecHouse TFT LCD/SD Shield for Arduino Due : ,22,23,31,33 +// +// Remember to change the model parameter to suit your display module! +UTFT myGLCD(ITDB32S,38,39,40,41); + +// Initialize touchscreen +// ---------------------- +// Set the pins to the correct ones for your development board +// ----------------------------------------------------------- +// Standard Arduino Uno/2009 Shield : 15,10,14, 9, 8 +// Standard Arduino Mega/Due shield : 6, 5, 4, 3, 2 +// CTE TFT LCD/SD Shield for Arduino Due : 6, 5, 4, 3, 2 +// Teensy 3.x TFT Test Board : 26,31,27,28,29 +// ElecHouse TFT LCD/SD Shield for Arduino Due : 25,26,27,29,30 +// +UTouch myTouch( 6, 5, 4, 3, 2); + +void setup() +{ + myGLCD.InitLCD(); + myGLCD.clrScr(); + + myTouch.InitTouch(); + myTouch.setPrecision(PREC_MEDIUM); +} + +void loop() +{ + long x, y; + + while (myTouch.dataAvailable() == true) + { + myTouch.read(); + x = myTouch.getX(); + y = myTouch.getY(); + if ((x!=-1) and (y!=-1)) + { + myGLCD.drawPixel (x, y); + } + } +} + diff --git a/libraries/UTouch/examples/Arduino/UTouch_QuickPaint/UTouch_QuickPaint.ino b/libraries/UTouch/examples/Arduino/UTouch_QuickPaint/UTouch_QuickPaint.ino new file mode 100644 index 0000000..3ff70fc --- /dev/null +++ b/libraries/UTouch/examples/Arduino/UTouch_QuickPaint/UTouch_QuickPaint.ino @@ -0,0 +1,172 @@ +// UTouch_QuickPaint (C)2013-2014 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a quick demo of how to use the library. +// +// This program requires the UTFT library and a display +// module with at least 320x240 pixels resolution. +// +// It is assumed that the display module is connected to an +// appropriate shield or that you know how to change the pin +// numbers in the setup. +// + +#include +#include + +// Initialize display +// ------------------ +// Set the pins to the correct ones for your development board +// ----------------------------------------------------------- +// Standard Arduino Uno/2009 Shield : ,19,18,17,16 +// Standard Arduino Mega/Due shield : ,38,39,40,41 +// CTE TFT LCD/SD Shield for Arduino Due : ,25,26,27,28 +// Teensy 3.x TFT Test Board : ,23,22, 3, 4 +// ElecHouse TFT LCD/SD Shield for Arduino Due : ,22,23,31,33 +// +// Remember to change the model parameter to suit your display module! +UTFT myGLCD(ITDB32S,38,39,40,41); + +// Initialize touchscreen +// ---------------------- +// Set the pins to the correct ones for your development board +// ----------------------------------------------------------- +// Standard Arduino Uno/2009 Shield : 15,10,14, 9, 8 +// Standard Arduino Mega/Due shield : 6, 5, 4, 3, 2 +// CTE TFT LCD/SD Shield for Arduino Due : 6, 5, 4, 3, 2 +// Teensy 3.x TFT Test Board : 26,31,27,28,29 +// ElecHouse TFT LCD/SD Shield for Arduino Due : 25,26,27,29,30 +// +UTouch myTouch( 6, 5, 4, 3, 2); + +// Declare which fonts we will be using +extern uint8_t BigFont[]; + +int color = 0; +word colorlist[] = {VGA_WHITE, VGA_BLACK, VGA_RED, VGA_BLUE, VGA_GREEN, VGA_FUCHSIA, VGA_YELLOW, VGA_AQUA}; +int bsize = 4; + +void drawColorMarkerAndBrushSize(int col) +{ + myGLCD.setColor(VGA_BLACK); + myGLCD.fillRect(25, 0, 31, 239); + myGLCD.fillRect(myGLCD.getDisplayXSize()-31, 161, myGLCD.getDisplayXSize()-1, 191); + myGLCD.setColor(VGA_WHITE); + myGLCD.drawPixel(25, (col*30)+15); + for (int i=1; i<7; i++) + myGLCD.drawLine(25+i, ((col*30)+15)-i, 25+i, ((col*30)+15)+i); + + if (color==1) + myGLCD.setColor(VGA_WHITE); + else + myGLCD.setColor(colorlist[col]); + if (bsize==1) + myGLCD.drawPixel(myGLCD.getDisplayXSize()-15, 177); + else + myGLCD.fillCircle(myGLCD.getDisplayXSize()-15, 177, bsize); + + myGLCD.setColor(colorlist[col]); +} + +void setup() +{ + myGLCD.InitLCD(); + myGLCD.clrScr(); + myGLCD.setFont(BigFont); + + myTouch.InitTouch(); + myTouch.setPrecision(PREC_HI); + + myGLCD.setColor(VGA_WHITE); + myGLCD.drawLine(32,0,32,myGLCD.getDisplayYSize()-1); + myGLCD.drawLine(myGLCD.getDisplayXSize()-32,0,myGLCD.getDisplayXSize()-32,myGLCD.getDisplayYSize()-1); + myGLCD.print("C", myGLCD.getDisplayXSize()-24, 8); + myGLCD.print("L", myGLCD.getDisplayXSize()-24, 24); + myGLCD.print("E", myGLCD.getDisplayXSize()-24, 40); + myGLCD.print("A", myGLCD.getDisplayXSize()-24, 56); + myGLCD.print("R", myGLCD.getDisplayXSize()-24, 72); + myGLCD.print("+", myGLCD.getDisplayXSize()-24, 136); + myGLCD.print("-", myGLCD.getDisplayXSize()-24, 200); + myGLCD.fillRect(myGLCD.getDisplayXSize()-32,96,myGLCD.getDisplayXSize()-1,128); + myGLCD.drawLine(myGLCD.getDisplayXSize()-32,160,myGLCD.getDisplayXSize()-1,160); + myGLCD.drawLine(myGLCD.getDisplayXSize()-32,192,myGLCD.getDisplayXSize()-1,192); + myGLCD.drawLine(myGLCD.getDisplayXSize()-32,224,myGLCD.getDisplayXSize()-1,224); + for (int i=0; i<8; i++) + { + myGLCD.setColor(colorlist[i]); + myGLCD.fillRect(0, (i*30), 24, (((i+1)*30)-1)); + } + drawColorMarkerAndBrushSize(color); +} + +void loop() +{ + long x, y; + + while (myTouch.dataAvailable() == true) + { + myTouch.read(); + x = myTouch.getX(); + y = myTouch.getY(); + if ((x!=-1) and (y!=-1)) + { + if (x>(31+bsize) and (x128) and (y<160)) + { + if (bsize<7) + { + bsize++; + drawColorMarkerAndBrushSize(color); + while (myTouch.dataAvailable()) {}; + delay(50); + } + } + if ((y>160) and (y<192)) + { + bsize=4; + drawColorMarkerAndBrushSize(color); + while (myTouch.dataAvailable()) {}; + delay(50); + } + if ((y>192) and (y<224)) + { + if (bsize>1) + { + bsize--; + drawColorMarkerAndBrushSize(color); + while (myTouch.dataAvailable()) {}; + delay(50); + } + } + } + } + } + } +} + diff --git a/libraries/UTouch/examples/chipKit/UTouch_ButtonTest/UTouch_ButtonTest.pde b/libraries/UTouch/examples/chipKit/UTouch_ButtonTest/UTouch_ButtonTest.pde new file mode 100644 index 0000000..22ae1dd --- /dev/null +++ b/libraries/UTouch/examples/chipKit/UTouch_ButtonTest/UTouch_ButtonTest.pde @@ -0,0 +1,236 @@ +// UTouch_ButtonTest (C)2010-2012 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a quick demo of how create and use buttons. +// +// This program requires the UTFT library. +// +// It is assumed that the display module is connected to an +// appropriate shield or that you know how to change the pin +// numbers in the setup. +// + +#include +#include + +// Declare which fonts we will be using +extern uint8_t BigFont[]; + +// Uncomment the next line for chipKit Uno32 +//UTFT myGLCD(ITDB24D,34,35,36,37); // Remember to change the model parameter to suit your display module! +//UTouch myTouch(20,21,22,23,24); + +// Uncomment the next line for chipKit Max32 +UTFT myGLCD(ITDB32S,82,83,84,85); // Remember to change the model parameter to suit your display module! +UTouch myTouch(62,63,64,65,66); + +int x, y; +char stCurrent[20]=""; +int stCurrentLen=0; +char stLast[20]=""; + +/************************* +** Custom functions ** +*************************/ + +void drawButtons() +{ +// Draw the upper row of buttons + for (x=0; x<5; x++) + { + myGLCD.setColor(0, 0, 255); + myGLCD.fillRoundRect (10+(x*60), 10, 60+(x*60), 60); + myGLCD.setColor(255, 255, 255); + myGLCD.drawRoundRect (10+(x*60), 10, 60+(x*60), 60); + myGLCD.printNumI(x+1, 27+(x*60), 27); + } +// Draw the center row of buttons + for (x=0; x<5; x++) + { + myGLCD.setColor(0, 0, 255); + myGLCD.fillRoundRect (10+(x*60), 70, 60+(x*60), 120); + myGLCD.setColor(255, 255, 255); + myGLCD.drawRoundRect (10+(x*60), 70, 60+(x*60), 120); + if (x<4) + myGLCD.printNumI(x+6, 27+(x*60), 87); + } + myGLCD.print("0", 267, 87); +// Draw the lower row of buttons + myGLCD.setColor(0, 0, 255); + myGLCD.fillRoundRect (10, 130, 150, 180); + myGLCD.setColor(255, 255, 255); + myGLCD.drawRoundRect (10, 130, 150, 180); + myGLCD.print("Clear", 40, 147); + myGLCD.setColor(0, 0, 255); + myGLCD.fillRoundRect (160, 130, 300, 180); + myGLCD.setColor(255, 255, 255); + myGLCD.drawRoundRect (160, 130, 300, 180); + myGLCD.print("Enter", 190, 147); + myGLCD.setBackColor (0, 0, 0); +} + +void updateStr(int val) +{ + if (stCurrentLen<20) + { + stCurrent[stCurrentLen]=val; + stCurrent[stCurrentLen+1]='\0'; + stCurrentLen++; + myGLCD.setColor(0, 255, 0); + myGLCD.print(stCurrent, LEFT, 224); + } + else + { + myGLCD.setColor(255, 0, 0); + myGLCD.print("BUFFER FULL!", CENTER, 192); + delay(500); + myGLCD.print(" ", CENTER, 192); + delay(500); + myGLCD.print("BUFFER FULL!", CENTER, 192); + delay(500); + myGLCD.print(" ", CENTER, 192); + myGLCD.setColor(0, 255, 0); + } +} + +// Draw a red frame while a button is touched +void waitForIt(int x1, int y1, int x2, int y2) +{ + myGLCD.setColor(255, 0, 0); + myGLCD.drawRoundRect (x1, y1, x2, y2); + while (myTouch.dataAvailable()) + myTouch.read(); + myGLCD.setColor(255, 255, 255); + myGLCD.drawRoundRect (x1, y1, x2, y2); +} + +/************************* +** Required functions ** +*************************/ + +void setup() +{ +// Initial setup + myGLCD.InitLCD(); + myGLCD.clrScr(); + + myTouch.InitTouch(); + myTouch.setPrecision(PREC_MEDIUM); + + myGLCD.setFont(BigFont); + myGLCD.setBackColor(0, 0, 255); + drawButtons(); +} + +void loop() +{ + while (true) + { + if (myTouch.dataAvailable()) + { + myTouch.read(); + x=myTouch.getX(); + y=myTouch.getY(); + + if ((y>=10) && (y<=60)) // Upper row + { + if ((x>=10) && (x<=60)) // Button: 1 + { + waitForIt(10, 10, 60, 60); + updateStr('1'); + } + if ((x>=70) && (x<=120)) // Button: 2 + { + waitForIt(70, 10, 120, 60); + updateStr('2'); + } + if ((x>=130) && (x<=180)) // Button: 3 + { + waitForIt(130, 10, 180, 60); + updateStr('3'); + } + if ((x>=190) && (x<=240)) // Button: 4 + { + waitForIt(190, 10, 240, 60); + updateStr('4'); + } + if ((x>=250) && (x<=300)) // Button: 5 + { + waitForIt(250, 10, 300, 60); + updateStr('5'); + } + } + + if ((y>=70) && (y<=120)) // Center row + { + if ((x>=10) && (x<=60)) // Button: 6 + { + waitForIt(10, 70, 60, 120); + updateStr('6'); + } + if ((x>=70) && (x<=120)) // Button: 7 + { + waitForIt(70, 70, 120, 120); + updateStr('7'); + } + if ((x>=130) && (x<=180)) // Button: 8 + { + waitForIt(130, 70, 180, 120); + updateStr('8'); + } + if ((x>=190) && (x<=240)) // Button: 9 + { + waitForIt(190, 70, 240, 120); + updateStr('9'); + } + if ((x>=250) && (x<=300)) // Button: 0 + { + waitForIt(250, 70, 300, 120); + updateStr('0'); + } + } + + if ((y>=130) && (y<=180)) // Upper row + { + if ((x>=10) && (x<=150)) // Button: Clear + { + waitForIt(10, 130, 150, 180); + stCurrent[0]='\0'; + stCurrentLen=0; + myGLCD.setColor(0, 0, 0); + myGLCD.fillRect(0, 224, 319, 239); + } + if ((x>=160) && (x<=300)) // Button: Enter + { + waitForIt(160, 130, 300, 180); + if (stCurrentLen>0) + { + for (x=0; x +#include + +// Define the orientation of the touch screen. Further +// information can be found in the instructions. +#define TOUCH_ORIENTATION PORTRAIT + +// Declare which fonts we will be using +extern uint8_t SmallFont[]; + +// Uncomment the next line for chipKit Uno32 +//UTFT myGLCD(ITDB24D,34,35,36,37); // Remember to change the model parameter to suit your display module! +//UTouch myTouch(20,21,22,23,24); + +// Uncomment the next line for chipKit Max32 +UTFT myGLCD(ITDB32S,82,83,84,85); // Remember to change the model parameter to suit your display module! +UTouch myTouch(62,63,64,65,66); + +// ************************************ +// DO NOT EDIT ANYTHING BELOW THIS LINE +// ************************************ +uint32_t cx, cy; +uint32_t rx[8], ry[8]; +uint32_t clx, crx, cty, cby; +float px, py; +int dispx, dispy, text_y_center; +uint32_t calx, caly, cals; +char buf[13]; + +void setup() +{ + myGLCD.InitLCD(); + myGLCD.clrScr(); + myGLCD.setFont(SmallFont); + + myTouch.InitTouch(TOUCH_ORIENTATION); + dispx=myGLCD.getDisplayXSize(); + dispy=myGLCD.getDisplayYSize(); + text_y_center=(dispy/2)-6; +} + +void drawCrossHair(int x, int y) +{ + myGLCD.drawRect(x-10, y-10, x+10, y+10); + myGLCD.drawLine(x-5, y, x+5, y); + myGLCD.drawLine(x, y-5, x, y+5); +} + +void readCoordinates() +{ + int iter = 5000; + int failcount = 0; + int cnt = 0; + uint32_t tx=0; + uint32_t ty=0; + boolean OK = false; + + while (OK == false) + { + myGLCD.setColor(255, 255, 255); + myGLCD.print("* PRESS *", CENTER, text_y_center); + while (myTouch.dataAvailable() == false) {} + myGLCD.print("* HOLD! *", CENTER, text_y_center); + while ((myTouch.dataAvailable() == true) && (cnt=iter) + { + OK = true; + } + else + { + tx = 0; + ty = 0; + cnt = 0; + } + if (failcount>=10000) + fail(); + } + + cx = tx / iter; + cy = ty / iter; +} + +void calibrate(int x, int y, int i) +{ + myGLCD.setColor(255, 255, 255); + drawCrossHair(x,y); + myGLCD.setBackColor(255, 0, 0); + readCoordinates(); + myGLCD.setColor(255, 255, 255); + myGLCD.print("* RELEASE *", CENTER, text_y_center); + myGLCD.setColor(80, 80, 80); + drawCrossHair(x,y); + rx[i]=cx; + ry[i]=cy; + while (myTouch.dataAvailable() == true) {} +} + +void waitForTouch() +{ + while (myTouch.dataAvailable() == true) {} + while (myTouch.dataAvailable() == false) {} + while (myTouch.dataAvailable() == true) {} +} + +void toHex(uint32_t num) +{ + buf[0] = '0'; + buf[1] = 'x'; + buf[10] = 'U'; + buf[11] = 'L'; + buf[12] = 0; + for (int zz=9; zz>1; zz--) + { + if ((num & 0xF) > 9) + buf[zz] = (num & 0xF) + 55; + else + buf[zz] = (num & 0xF) + 48; + num=num>>4; + } +} + +void startup() +{ + myGLCD.setColor(255, 0, 0); + myGLCD.fillRect(0, 0, dispx-1, 13); + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.drawLine(0, 14, dispx-1, 14); + myGLCD.print("UTouch Calibration", CENTER, 1); + myGLCD.setBackColor(0, 0, 0); + + if (dispx==220) + { + myGLCD.print("Use a stylus or something", LEFT, 30); + myGLCD.print("similar to touch as close", LEFT, 42); + myGLCD.print("to the center of the", LEFT, 54); + myGLCD.print("highlighted crosshair as", LEFT, 66); + myGLCD.print("possible. Keep as still as", LEFT, 78); + myGLCD.print("possible and keep holding", LEFT, 90); + myGLCD.print("until the highlight is", LEFT, 102); + myGLCD.print("removed. Repeat for all", LEFT, 114); + myGLCD.print("crosshairs in sequence.", LEFT, 126); + myGLCD.print("Touch screen to continue", CENTER, 162); + } + else + { + myGLCD.print("INSTRUCTIONS", CENTER, 30); + myGLCD.print("Use a stylus or something similar to", LEFT, 50); + myGLCD.print("touch as close to the center of the", LEFT, 62); + myGLCD.print("highlighted crosshair as possible. Keep", LEFT, 74); + myGLCD.print("as still as possible and keep holding", LEFT, 86); + myGLCD.print("until the highlight is removed. Repeat", LEFT, 98); + myGLCD.print("for all crosshairs in sequence.", LEFT, 110); + + myGLCD.print("Further instructions will be displayed", LEFT, 134); + myGLCD.print("when the calibration is complete.", LEFT, 146); + + myGLCD.print("Do NOT use your finger as a calibration", LEFT, 170); + myGLCD.print("stylus or the result WILL BE imprecise.", LEFT, 182); + + myGLCD.print("Touch screen to continue", CENTER, 226); + } + + waitForTouch(); + myGLCD.clrScr(); +} + +void done() +{ + myGLCD.clrScr(); + myGLCD.setColor(255, 0, 0); + myGLCD.fillRect(0, 0, dispx-1, 13); + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.drawLine(0, 14, dispx-1, 14); + myGLCD.print("UTouch Calibration", CENTER, 1); + myGLCD.setBackColor(0, 0, 0); + + if (dispx==220) + { + myGLCD.print("To use the new calibration", LEFT, 30); + myGLCD.print("settings you must edit the", LEFT, 42); + myGLCD.setColor(160, 160, 255); + myGLCD.print("UTouchCD.h", LEFT, 54); + myGLCD.setColor(255, 255, 255); + myGLCD.print("file and change", 88, 54); + myGLCD.print("the following values. The", LEFT, 66); + myGLCD.print("values are located right", LEFT, 78); + myGLCD.print("below the opening comment.", LEFT, 90); + myGLCD.print("CAL_X", LEFT, 110); + myGLCD.print("CAL_Y", LEFT, 122); + myGLCD.print("CAL_S", LEFT, 134); + toHex(calx); + myGLCD.print(buf, 75, 110); + toHex(caly); + myGLCD.print(buf, 75, 122); + toHex(cals); + myGLCD.print(buf, 75, 134); + } + else + { + myGLCD.print("CALIBRATION COMPLETE", CENTER, 30); + myGLCD.print("To use the new calibration", LEFT, 50); + myGLCD.print("settings you must edit the", LEFT, 62); + myGLCD.setColor(160, 160, 255); + myGLCD.print("UTouchCD.h", LEFT, 74); + myGLCD.setColor(255, 255, 255); + myGLCD.print("file and change", 88, 74); + myGLCD.print("the following values.", LEFT, 86); + myGLCD.print("The values are located right", LEFT, 98); + myGLCD.print("below the opening comment in", LEFT, 110); + myGLCD.print("the file.", LEFT, 122); + myGLCD.print("CAL_X", LEFT, 150); + myGLCD.print("CAL_Y", LEFT, 162); + myGLCD.print("CAL_S", LEFT, 174); + + toHex(calx); + myGLCD.print(buf, 75, 150); + toHex(caly); + myGLCD.print(buf, 75, 162); + toHex(cals); + myGLCD.print(buf, 75, 174); + } + +} + +void fail() +{ + myGLCD.clrScr(); + myGLCD.setColor(255, 0, 0); + myGLCD.fillRect(0, 0, dispx-1, 13); + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.drawLine(0, 14, dispx-1, 14); + myGLCD.print("UTouch Calibration FAILED", CENTER, 1); + myGLCD.setBackColor(0, 0, 0); + + myGLCD.print("Unable to read the position", LEFT, 30); + myGLCD.print("of the press. This is a", LEFT, 42); + myGLCD.print("hardware issue and can", 88, 54); + myGLCD.print("not be corrected in", LEFT, 66); + myGLCD.print("software.", LEFT, 78); + + while(true) {}; +} + +void loop() +{ + startup(); + + myGLCD.setColor(80, 80, 80); + drawCrossHair(dispx-11, 10); + drawCrossHair(dispx/2, 10); + drawCrossHair(10, 10); + drawCrossHair(dispx-11, dispy/2); + drawCrossHair(10, dispy/2); + drawCrossHair(dispx-11, dispy-11); + drawCrossHair(dispx/2, dispy-11); + drawCrossHair(10, dispy-11); + myGLCD.setColor(255, 255, 255); + myGLCD.setBackColor(255, 0, 0); + myGLCD.print("***********", CENTER, text_y_center-12); + myGLCD.print("***********", CENTER, text_y_center+12); + + calibrate(10, 10, 0); + calibrate(10, dispy/2, 1); + calibrate(10, dispy-11, 2); + calibrate(dispx/2, 10, 3); + calibrate(dispx/2, dispy-11, 4); + calibrate(dispx-11, 10, 5); + calibrate(dispx-11, dispy/2, 6); + calibrate(dispx-11, dispy-11, 7); + + if (TOUCH_ORIENTATION == LANDSCAPE) + cals=(long(dispx-1)<<12)+(dispy-1); + else + cals=(long(dispy-1)<<12)+(dispx-1); + + if (TOUCH_ORIENTATION == PORTRAIT) + px = abs(((float(rx[2]+rx[4]+rx[7])/3)-(float(rx[0]+rx[3]+rx[5])/3))/(dispy-20)); // PORTRAIT + else + px = abs(((float(rx[5]+rx[6]+rx[7])/3)-(float(rx[0]+rx[1]+rx[2])/3))/(dispy-20)); // LANDSCAPE + + if (TOUCH_ORIENTATION == PORTRAIT) + { + clx = (((rx[0]+rx[3]+rx[5])/3)); // PORTRAIT + crx = (((rx[2]+rx[4]+rx[7])/3)); // PORTRAIT + } + else + { + clx = (((rx[0]+rx[1]+rx[2])/3)); // LANDSCAPE + crx = (((rx[5]+rx[6]+rx[7])/3)); // LANDSCAPE + } + if (clx +#include + +// Uncomment the next line for chipKit Uno32 +//UTFT myGLCD(ITDB24D,34,35,36,37); // Remember to change the model parameter to suit your display module! +//UTouch myTouch(20,21,22,23,24); + +// Uncomment the next line for chipKit Max32 +UTFT myGLCD(ITDB32S,82,83,84,85); // Remember to change the model parameter to suit your display module! +UTouch myTouch(62,63,64,65,66); + +void setup() +{ + myGLCD.InitLCD(); + myGLCD.clrScr(); + + myTouch.InitTouch(); + myTouch.setPrecision(PREC_MEDIUM); +} + +void loop() +{ + long x, y; + + while (myTouch.dataAvailable() == true) + { + myTouch.read(); + x = myTouch.getX(); + y = myTouch.getY(); + if ((x!=-1) and (y!=-1)) + myGLCD.drawPixel (x, y); + } +} + diff --git a/libraries/UTouch/examples/chipKit/UTouch_QuickPaint/UTouch_QuickPaint.pde b/libraries/UTouch/examples/chipKit/UTouch_QuickPaint/UTouch_QuickPaint.pde new file mode 100644 index 0000000..fa6ed09 --- /dev/null +++ b/libraries/UTouch/examples/chipKit/UTouch_QuickPaint/UTouch_QuickPaint.pde @@ -0,0 +1,155 @@ +// UTouch_QuickPaint (C)2013 Henning Karlsen +// web: http://www.henningkarlsen.com/electronics +// +// This program is a quick demo of how to use the library. +// +// This program requires the UTFT library and a display +// module with at least 320x240 pixels resolution. +// +// It is assumed that the display module is connected to an +// appropriate shield or that you know how to change the pin +// numbers in the setup. +// + +#include +#include + +// Declare which fonts we will be using +extern uint8_t BigFont[]; + +// Uncomment the next line for chipKit Uno32 +//UTFT myGLCD(ITDB24D,34,35,36,37); // Remember to change the model parameter to suit your display module! +//UTouch myTouch(20,21,22,23,24); + +// Uncomment the next line for chipKit Max32 +UTFT myGLCD(ITDB32S,82,83,84,85); // Remember to change the model parameter to suit your display module! +UTouch myTouch(62,63,64,65,66); + +int color = 0; +word colorlist[] = {VGA_WHITE, VGA_BLACK, VGA_RED, VGA_BLUE, VGA_GREEN, VGA_FUCHSIA, VGA_YELLOW, VGA_AQUA}; +int bsize = 4; + +void drawColorMarkerAndBrushSize(int col) +{ + myGLCD.setColor(VGA_BLACK); + myGLCD.fillRect(25, 0, 31, 239); + myGLCD.fillRect(myGLCD.getDisplayXSize()-31, 161, myGLCD.getDisplayXSize()-1, 191); + myGLCD.setColor(VGA_WHITE); + myGLCD.drawPixel(25, (col*30)+15); + for (int i=1; i<7; i++) + myGLCD.drawLine(25+i, ((col*30)+15)-i, 25+i, ((col*30)+15)+i); + + if (color==1) + myGLCD.setColor(VGA_WHITE); + else + myGLCD.setColor(colorlist[col]); + if (bsize==1) + myGLCD.drawPixel(myGLCD.getDisplayXSize()-15, 177); + else + myGLCD.fillCircle(myGLCD.getDisplayXSize()-15, 177, bsize); + + myGLCD.setColor(colorlist[col]); +} + +void setup() +{ + myGLCD.InitLCD(); + myGLCD.clrScr(); + myGLCD.setFont(BigFont); + + myTouch.InitTouch(); + myTouch.setPrecision(PREC_HI); + + myGLCD.setColor(VGA_WHITE); + myGLCD.drawLine(32,0,32,myGLCD.getDisplayYSize()-1); + myGLCD.drawLine(myGLCD.getDisplayXSize()-32,0,myGLCD.getDisplayXSize()-32,myGLCD.getDisplayYSize()-1); + myGLCD.print("C", myGLCD.getDisplayXSize()-24, 8); + myGLCD.print("L", myGLCD.getDisplayXSize()-24, 24); + myGLCD.print("E", myGLCD.getDisplayXSize()-24, 40); + myGLCD.print("A", myGLCD.getDisplayXSize()-24, 56); + myGLCD.print("R", myGLCD.getDisplayXSize()-24, 72); + myGLCD.print("+", myGLCD.getDisplayXSize()-24, 136); + myGLCD.print("-", myGLCD.getDisplayXSize()-24, 200); + myGLCD.fillRect(myGLCD.getDisplayXSize()-32,96,myGLCD.getDisplayXSize()-1,128); + myGLCD.drawLine(myGLCD.getDisplayXSize()-32,160,myGLCD.getDisplayXSize()-1,160); + myGLCD.drawLine(myGLCD.getDisplayXSize()-32,192,myGLCD.getDisplayXSize()-1,192); + myGLCD.drawLine(myGLCD.getDisplayXSize()-32,224,myGLCD.getDisplayXSize()-1,224); + for (int i=0; i<8; i++) + { + myGLCD.setColor(colorlist[i]); + myGLCD.fillRect(0, (i*30), 24, (((i+1)*30)-1)); + } + drawColorMarkerAndBrushSize(color); +} + +void loop() +{ + long x, y; + + while (myTouch.dataAvailable() == true) + { + myTouch.read(); + x = myTouch.getX(); + y = myTouch.getY(); + if ((x!=-1) and (y!=-1)) + { + if (x>(31+bsize) and (x128) and (y<160)) + { + if (bsize<7) + { + bsize++; + drawColorMarkerAndBrushSize(color); + while (myTouch.dataAvailable()) {}; + delay(50); + } + } + if ((y>160) and (y<192)) + { + bsize=4; + drawColorMarkerAndBrushSize(color); + while (myTouch.dataAvailable()) {}; + delay(50); + } + if ((y>192) and (y<224)) + { + if (bsize>1) + { + bsize--; + drawColorMarkerAndBrushSize(color); + while (myTouch.dataAvailable()) {}; + delay(50); + } + } + } + } + } + } +} + diff --git a/libraries/UTouch/hardware/arm/HW_ARM.inc b/libraries/UTouch/hardware/arm/HW_ARM.inc new file mode 100644 index 0000000..069ac43 --- /dev/null +++ b/libraries/UTouch/hardware/arm/HW_ARM.inc @@ -0,0 +1,36 @@ +// Results becomes inaccurate if direct port manipulation is used hence the use of digitalWrite() and digitalRead() + +void UTouch::touch_WriteData(byte data) +{ + byte temp; + + temp=data; + cbi(P_CLK, B_CLK); + + for(byte count=0; count<8; count++) + { + if(temp & 0x80) + digitalWrite(T_DIN, HIGH); + else + digitalWrite(T_DIN, LOW); + temp = temp << 1; + digitalWrite(T_CLK, LOW); + digitalWrite(T_CLK, HIGH); + } +} + +word UTouch::touch_ReadData() +{ + word data = 0; + + for(byte count=0; count<12; count++) + { + data <<= 1; + digitalWrite(T_CLK, HIGH); + digitalWrite(T_CLK, LOW); + if (digitalRead(T_DOUT)) + data++; + } + return(data); +} + diff --git a/libraries/UTouch/hardware/arm/HW_ARM_defines.h b/libraries/UTouch/hardware/arm/HW_ARM_defines.h new file mode 100644 index 0000000..f5f7465 --- /dev/null +++ b/libraries/UTouch/hardware/arm/HW_ARM_defines.h @@ -0,0 +1,17 @@ +// *** Hardwarespecific defines *** +#define cbi(reg, bitmask) *reg &= ~bitmask +#define sbi(reg, bitmask) *reg |= bitmask +#define rbi(reg, bitmask) ((*reg) & bitmask) + +#define pulse_high(reg, bitmask) sbi(reg, bitmask); cbi(reg, bitmask); +#define pulse_low(reg, bitmask) cbi(reg, bitmask); sbi(reg, bitmask); + +#define swap(type, i, j) {type t = i; i = j; j = t;} + +#if defined(TEENSYDUINO) && TEENSYDUINO >= 117 + #define regtype volatile uint8_t + #define regsize uint8_t +#else + #define regtype volatile uint32_t + #define regsize uint32_t +#endif diff --git a/libraries/UTouch/hardware/avr/HW_AVR.inc b/libraries/UTouch/hardware/avr/HW_AVR.inc new file mode 100644 index 0000000..1450b37 --- /dev/null +++ b/libraries/UTouch/hardware/avr/HW_AVR.inc @@ -0,0 +1,34 @@ +void UTouch::touch_WriteData(byte data) +{ + byte temp; + + temp=data; + cbi(P_CLK, B_CLK); + + for(byte count=0; count<8; count++) + { + if(temp & 0x80) + sbi(P_DIN, B_DIN); + else + cbi(P_DIN, B_DIN); + temp = temp << 1; + cbi(P_CLK, B_CLK); + sbi(P_CLK, B_CLK); + } +} + +word UTouch::touch_ReadData() +{ + word data = 0; + + for(byte count=0; count<12; count++) + { + data <<= 1; + sbi(P_CLK, B_CLK); + cbi(P_CLK, B_CLK); + if (rbi(P_DOUT, B_DOUT)) + data++; + } + return(data); +} + diff --git a/libraries/UTouch/hardware/avr/HW_AVR_defines.h b/libraries/UTouch/hardware/avr/HW_AVR_defines.h new file mode 100644 index 0000000..318bdd1 --- /dev/null +++ b/libraries/UTouch/hardware/avr/HW_AVR_defines.h @@ -0,0 +1,12 @@ +// *** Hardwarespecific defines *** +#define cbi(reg, bitmask) *reg &= ~bitmask +#define sbi(reg, bitmask) *reg |= bitmask +#define rbi(reg, bitmask) ((*reg) & bitmask) + +#define pulse_high(reg, bitmask) sbi(reg, bitmask); cbi(reg, bitmask); +#define pulse_low(reg, bitmask) cbi(reg, bitmask); sbi(reg, bitmask); + +#define swap(type, i, j) {type t = i; i = j; j = t;} + +#define regtype volatile uint8_t +#define regsize uint8_t diff --git a/libraries/UTouch/hardware/pic32/HW_PIC32.inc b/libraries/UTouch/hardware/pic32/HW_PIC32.inc new file mode 100644 index 0000000..58c1724 --- /dev/null +++ b/libraries/UTouch/hardware/pic32/HW_PIC32.inc @@ -0,0 +1,36 @@ +// Direct port manipulation does not work at the moment, hence the use of digitalWrite() and digitalRead() + +void UTouch::touch_WriteData(byte data) +{ + byte temp; + + temp=data; + cbi(P_CLK, B_CLK); + + for(byte count=0; count<8; count++) + { + if(temp & 0x80) + digitalWrite(T_DIN, HIGH); + else + digitalWrite(T_DIN, LOW); + temp = temp << 1; + digitalWrite(T_CLK, LOW); + digitalWrite(T_CLK, HIGH); + } +} + +word UTouch::touch_ReadData() +{ + word data = 0; + + for(byte count=0; count<12; count++) + { + data <<= 1; + digitalWrite(T_CLK, HIGH); + digitalWrite(T_CLK, LOW); + if (digitalRead(T_DOUT)) + data++; + } + return(data); +} + diff --git a/libraries/UTouch/hardware/pic32/HW_PIC32_defines.h b/libraries/UTouch/hardware/pic32/HW_PIC32_defines.h new file mode 100644 index 0000000..821e561 --- /dev/null +++ b/libraries/UTouch/hardware/pic32/HW_PIC32_defines.h @@ -0,0 +1,12 @@ +// *** Hardwarespecific defines *** +#define cbi(reg, bitmask) (*(reg + 1)) = bitmask +#define sbi(reg, bitmask) (*(reg + 2)) = bitmask +#define rbi(reg, bitmask) (*(reg) & bitmask) + +#define pulse_high(reg, bitmask) sbi(reg, bitmask); cbi(reg, bitmask); +#define pulse_low(reg, bitmask) cbi(reg, bitmask); sbi(reg, bitmask); + +#define swap(type, i, j) {type t = i; i = j; j = t;} + +#define regtype volatile uint32_t +#define regsize uint16_t diff --git a/libraries/UTouch/keywords.txt b/libraries/UTouch/keywords.txt new file mode 100644 index 0000000..a79eafe --- /dev/null +++ b/libraries/UTouch/keywords.txt @@ -0,0 +1,17 @@ +UTouch KEYWORD1 + +InitTouch KEYWORD2 +read KEYWORD2 +dataAvailable KEYWORD2 +getX KEYWORD2 +getY KEYWORD2 +setPrecision KEYWORD2 + +PREC_LOW LITERAL1 +PREC_MEDIUM LITERAL1 +PREC_HI LITERAL1 +PREC_EXTREME LITERAL1 +PORTRAIT LITERAL1 +LANDSCAPE LITERAL1 +TP_X LITERAL1 +TP_Y LITERAL1 diff --git a/libraries/UTouch/version.txt b/libraries/UTouch/version.txt new file mode 100644 index 0000000..476825a --- /dev/null +++ b/libraries/UTouch/version.txt @@ -0,0 +1,18 @@ +Version: + 1.0 1 Dec 2012 - initial release + 1.1 23 May 2013 - added support for more display modules + modified calibration to try to compensate for slight flaws in some (larger) touchscreens + changed license to CC BY-NC-SA 3.0 + 1.2 22 Sep 2013 - general optimization + fixed some issues with calibration + made modifications to reduce erroneous readings + added support for more display modules + added UTouch_QuickPaint example + 1.21 06 Dec 2013 - added support for ElecFreaks TFT01-4.3 + added support for Coldtears 3.5" and 4.0" modules + 1.22 18 Feb 2014 - added support for Teensy 3.x Boards + added support for three display modules from ElecHouse + made some modifications to improve accuracy when precision is set to medium or higher + 1.23 16 Mar 2014 - fixed a bug that were introduced in v1.22 + 1.24 05 May 2014 - added support for DisplayModule DM-TFT24-104 and DM-TFT28-103 + added support for Coldtears 5" and 7" CPLD modules