From ef14938dbe02ff995688ce65333d4d0cd5f935c6 Mon Sep 17 00:00:00 2001 From: e2002 Date: Mon, 31 Oct 2022 10:15:17 +0300 Subject: [PATCH] v0.8.03b --- Images.md | 4 +- README.md | 14 +- exsamples/myoptions.h | 51 ++- images/img29.jpg | Bin 0 -> 207148 bytes .../Adafruit_ST7796S/Adafruit_ST7796S_kbv.cpp | 341 ++++++++++++++++++ .../Adafruit_ST7796S/Adafruit_ST7796S_kbv.h | 129 +++++++ yoRadio/src/GT911_Touchscreen/TAMC_GT911.cpp | 168 +++++++++ yoRadio/src/GT911_Touchscreen/TAMC_GT911.h | 189 ++++++++++ yoRadio/src/core/config.cpp | 4 + yoRadio/src/core/config.h | 5 + yoRadio/src/core/controls.cpp | 138 +------ yoRadio/src/core/controls.h | 6 +- yoRadio/src/core/display.cpp | 7 + yoRadio/src/core/display.h | 1 + yoRadio/src/core/netserver.cpp | 2 +- yoRadio/src/core/network.cpp | 4 +- yoRadio/src/core/options.h | 50 ++- yoRadio/src/core/player.cpp | 10 +- yoRadio/src/core/touchscreen.cpp | 196 ++++++++++ yoRadio/src/core/touchscreen.h | 23 ++ yoRadio/src/displays/conf/displayST7789conf.h | 2 +- yoRadio/src/displays/conf/displayST7796conf.h | 68 ++++ yoRadio/src/displays/displayGC9106.cpp | 6 +- yoRadio/src/displays/displayILI9225.cpp | 9 +- yoRadio/src/displays/displayILI9341.cpp | 8 +- yoRadio/src/displays/displayN5110.cpp | 8 +- yoRadio/src/displays/displaySSD1305.cpp | 8 +- yoRadio/src/displays/displayST7735.cpp | 8 +- yoRadio/src/displays/displayST7789.cpp | 4 + yoRadio/src/displays/displayST7796.cpp | 216 +++++++++++ yoRadio/src/displays/displayST7796.h | 35 ++ yoRadio/src/displays/dspcore.h | 2 + yoRadio/src/displays/fonts/DS_DIGI56pt7b.h | 320 ++++++++++++++++ 33 files changed, 1860 insertions(+), 176 deletions(-) create mode 100644 images/img29.jpg create mode 100644 yoRadio/src/Adafruit_ST7796S/Adafruit_ST7796S_kbv.cpp create mode 100644 yoRadio/src/Adafruit_ST7796S/Adafruit_ST7796S_kbv.h create mode 100644 yoRadio/src/GT911_Touchscreen/TAMC_GT911.cpp create mode 100644 yoRadio/src/GT911_Touchscreen/TAMC_GT911.h create mode 100644 yoRadio/src/core/touchscreen.cpp create mode 100644 yoRadio/src/core/touchscreen.h create mode 100644 yoRadio/src/displays/conf/displayST7796conf.h create mode 100644 yoRadio/src/displays/displayST7796.cpp create mode 100644 yoRadio/src/displays/displayST7796.h create mode 100644 yoRadio/src/displays/fonts/DS_DIGI56pt7b.h diff --git a/Images.md b/Images.md index 36c634f..5213c3a 100644 --- a/Images.md +++ b/Images.md @@ -57,4 +57,6 @@ \ ![ёRadio](images/img27.jpg)\ \ -![ёRadio](images/img28.jpg) +![ёRadio](images/img28.jpg)\ +\ +![ёRadio](images/img29.jpg) diff --git a/README.md b/README.md index ff2d72d..6a363cf 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,8 @@ https://aliexpress.com/item/32965676064.html - or **LCD1602** 16x2 I2C https://aliexpress.com/item/32305776560.html - or **LCD1602** 16x2 without I2C https://aliexpress.com/item/32305776560.html - or **SSD1327** 1.5' 128x128 I2C https://aliexpress.com/item/1005001414175498.html -- or **ILI9341** 3.2'320x240 SPI https://aliexpress.com/item/33048191074.html +- or **ILI9341** 3.2' 320x240 SPI https://aliexpress.com/item/33048191074.html +- or **ILI9341** 2.8' 320x240 SPI https://aliexpress.com/item/1005004502250619.html - or **SSD1305 (SSD1309)** 2.4' 128x64 SPI/I2C https://aliexpress.com/item/32950307344.html - or **SH1107** 0.96' 128x64 I2C https://aliexpress.com/item/4000551696674.html - or **GC9106** 0.96' 160x80 SPI (looks like ST7735S, but it's not him) https://aliexpress.com/item/32947890530.html @@ -53,6 +54,7 @@ https://aliexpress.com/item/32965676064.html - or **LCD2004** 20x4 without I2C https://aliexpress.com/item/32783128355.html - or **ILI9225** 2.0' 220x176 SPI https://aliexpress.com/item/32952021835.html - or **Nextion displays** - [more info](https://github.com/e2002/yoradio/tree/main/nextion) +- or **ST7796** 3.5' 480x320 SPI https://aliexpress.com/item/1005004632953455.html?sku_id=12000029911293172 ##### Controls - Three tact buttons https://www.aliexpress.com/item/32907144687.html @@ -299,6 +301,16 @@ Work is in progress... --- ## Version history +#### v0.8.03b +- added support for ST7796 display +- added support for capacitive touch GT911 +- HSPI bus support added - DSP_HSPI, VS_HSPI, TS_HSPI options More details in examples/myoptions.h +- changed the method of connecting the touchscreen in myoptions.h Now instead of specifying TS_CS, you must specify TS_MODEL (by default TS_MODEL_UNDEFINED) More details in examples/myoptions.h +- new parameters TS_SDA, TS_SCL, TS_INT, TS_RST for GT911 touchscreen +- new parameters LIGHT_SENSOR and AUTOBACKLIGHT - to automatically adjust the brightness of the display. More details in examples/myoptions.h +- new parameter LED_INVERT (true/false) - to invert the behavior of the built-in LED +- fixed bug with extra sign } in humidity value + #### v0.8.02b - fixed artifacts when displaying the volume level - changes in mytheme.h . Added colors COLOR_PL_CURRENT, COLOR_PL_CURRENT_BG, COLOR_PL_CURRENT_FILL. Details in [exsamples/mytheme.h](exsamples/mytheme.h) diff --git a/exsamples/myoptions.h b/exsamples/myoptions.h index 7b14a93..36eee34 100644 --- a/exsamples/myoptions.h +++ b/exsamples/myoptions.h @@ -10,6 +10,7 @@ The connection tables are located here https://github.com/e2002/yoradio#connecti ********************************************************/ #define LED_BUILTIN 2 /* Onboard LED Pin */ +//#define LED_INVERT false /* Invert Onboard LED? */ #define L10N_LANGUAGE EN /* Language (EN, RU). More info in yoRadio/locale/displayL10n_(en|ru).h /* DSP_MODEL. See description/available values in https://github.com/e2002/yoradio/wiki/Available-display-models */ @@ -25,11 +26,14 @@ The connection tables are located here https://github.com/e2002/yoradio#connecti */ /******************************************/ -/* SPI PINS. SCL(SCK, CLK) must be connected to pin 18 - SDA(MOSI, DIN, SDI) must be connected to pin 23 */ +/* VSPI PINS. SCL(SCK, CLK) must be connected to pin 18 + SDA(MOSI, DIN, SDI) must be connected to pin 23 */ //#define TFT_CS 5 /* SPI CS pin */ //#define TFT_RST 15 /* SPI RST pin. set to -1 and connect to Esp EN pin */ //#define TFT_DC 4 /* SPI DC/RS pin */ +/* HSPI PINS. SCL(SCK, CLK) must be connected to pin 14 + SDA(MOSI, DIN, SDI) must be connected to pin 13 */ +//#define DSP_HSPI false /* Use HSPI for display */ /******************************************/ /* NEXTION */ @@ -47,13 +51,17 @@ The connection tables are located here https://github.com/e2002/yoradio#connecti //#define I2S_LRC 25 /* WSEL Left Right Clock */ /******************************************/ -/* VS1053 PINS. VS1053 SCK must be connected to pin 18 - VS1053 MISO must be connected to pin 19 - VS1053 MOSI must be connected to pin 23 */ +/* VS1053 VSPI PINS. VS1053 SCK must be connected to pin 18 + VS1053 MISO must be connected to pin 19 + VS1053 MOSI must be connected to pin 23 */ //#define VS1053_CS 255 /* XCS pin. Should be set to 255 if the board is not used */ //#define VS1053_DCS 25 /* XDCS pin. */ //#define VS1053_DREQ 26 /* DREQ pin. */ //#define VS1053_RST -1 /* XRESET pin. Set to -1 if connected to Esp EN pin */ +/* VS1053 HSPI PINS. VS1053 SCK must be connected to pin 14 + VS1053 MISO must be connected to pin 12 + VS1053 MOSI must be connected to pin 13 */ +//#define VS_HSPI false /* Use HSPI for VS */ /******************************************/ /* ENCODER */ @@ -94,11 +102,25 @@ The connection tables are located here https://github.com/e2002/yoradio#connecti /******************************************/ /* TOUCHSCREEN */ -/* SPI PINS. CLK must be connected to pin 18 - DIN must be connected to pin 23 - DO must be connected to pin 19 - IRQ - not connected */ -//#define TS_CS 255 /* Touch screen CS pin +//#define TS_MODEL TS_MODEL_UNDEFINED /* See description/available values in yoRadio/src/core/options.h */ + +/* Resistive SPI touch screen */ +/* TS VSPI PINS. CLK must be connected to pin 18 + DIN must be connected to pin 23 + DO must be connected to pin 19 + IRQ - not connected */ +//#define TS_CS 255 /* Touch screen CS pin */ +/* TS HSPI PINS. CLK must be connected to pin 14 + DIN must be connected to pin 13 + DO must be connected to pin 12 + IRQ - not connected */ +//#define TS_HSPI false /* Use HSPI for Touch screen */ + +/* Capacitive I2C touch screen */ +//#define TS_SDA 33 +//#define TS_SCL 32 +//#define TS_INT 21 +//#define TS_RST 25 /******************************************/ /* Other settings. */ @@ -118,12 +140,9 @@ The connection tables are located here https://github.com/e2002/yoradio#connecti //#define ROTATE_90 false /* Optional 90 degree rotation for square displays */ //#define WAKE_PIN 255 /* Wake Pin (for manual wakeup from sleep mode. can match with BTN_XXXX, ENC_BTNB, ENC2_BTNB. must be one of: 0,2,4,12,13,14,15,25,26,27,32,33,34,35,36,39) */ /* For sample #define ENC_BTNB 36 - next line - #define WAKE_PIN ENC_BTNB */ -/* VU settings. See the default settings for your display in file yoRadio/display_vu.h */ -/************************************************************************************************************************************************************************************/ -/* vu left | vu top | band width | band height | band space | num of bands | fade speed | horisontal | Max Bands Color | Min Bands Color */ -/************************************************************************************************************************************************************************************/ -//#define VU_PARAMS2 { VU_X = 4, VU_Y = 60, VU_BW = 10, VU_BH = 34, VU_BS = 2, VU_NB = 8, VU_FS = 2, VU_HOR = 0, VU_COLOR_MAX = TFT_LOGO, VU_COLOR_MIN = SILVER } -/************************************************************************************************************************************************************************************/ +//#define LIGHT_SENSOR 255 /* Light sensor */ +//#define AUTOBACKLIGHT(x) *function* /* Autobacklight function. See options.h for exsample */ +/******************************************/ /* IR control */ //#define IR_PIN 255 diff --git a/images/img29.jpg b/images/img29.jpg new file mode 100644 index 0000000000000000000000000000000000000000..be19392b8c27c207b47fb5501f9924d925764f4e GIT binary patch literal 207148 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
)+VFZ46nt?V}Lc8#h0lhE?1m4l` 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

Iju^;hP)b`}oSLA)8>~8=_e&yaypr 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 V-GkzmU~Pxn0qZ><{{YnA|Jf#p + * Adafruit_GFX being present on your system. Please make sure you have + * installed the latest version before using this library. + * + * @section author Author + * + * Written by Limor "ladyada" Fried for Adafruit Industries. + * + * @section license License + * + * BSD license, all text here must be included in any redistribution. + * + */ + +#include "Adafruit_ST7796S_kbv.h" +#ifndef ARDUINO_STM32_FEATHER +#include "pins_arduino.h" +#ifndef RASPI +#include "wiring_private.h" +#endif +#endif +#include + +#if defined(ARDUINO_ARCH_ARC32) || defined(ARDUINO_MAXIM) +#define SPI_DEFAULT_FREQ 16000000 +// Teensy 3.0, 3.1/3.2, 3.5, 3.6 +#elif defined(__MK20DX128__) || defined(__MK20DX256__) || \ + defined(__MK64FX512__) || defined(__MK66FX1M0__) +#define SPI_DEFAULT_FREQ 40000000 +#elif defined(__AVR__) || defined(TEENSYDUINO) +#define SPI_DEFAULT_FREQ 8000000 +#elif defined(ESP8266) || defined(ESP32) +#define SPI_DEFAULT_FREQ 40000000 +#elif defined(RASPI) +#define SPI_DEFAULT_FREQ 80000000 +#elif defined(ARDUINO_ARCH_STM32F1) +#define SPI_DEFAULT_FREQ 36000000 +#else +#define SPI_DEFAULT_FREQ 24000000 ///< Default SPI data clock frequency +#endif + +#define MADCTL_MY 0x80 ///< Bottom to top +#define MADCTL_MX 0x40 ///< Right to left +#define MADCTL_MV 0x20 ///< Reverse Mode +#define MADCTL_ML 0x10 ///< LCD refresh Bottom to top +#define MADCTL_RGB 0x00 ///< Red-Green-Blue pixel order +#define MADCTL_BGR 0x08 ///< Blue-Green-Red pixel order +#define MADCTL_MH 0x04 ///< LCD refresh right to left + +/**************************************************************************/ +/*! + @brief Instantiate Adafruit ST7796S driver with software SPI + @param cs Chip select pin # + @param dc Data/Command pin # + @param mosi SPI MOSI pin # + @param sclk SPI Clock pin # + @param rst Reset pin # (optional, pass -1 if unused) + @param miso SPI MISO pin # (optional, pass -1 if unused) +*/ +/**************************************************************************/ +Adafruit_ST7796S_kbv::Adafruit_ST7796S_kbv(int8_t cs, int8_t dc, int8_t mosi, + int8_t sclk, int8_t rst, int8_t miso) + : Adafruit_SPITFT(ST7796S_TFTWIDTH, ST7796S_TFTHEIGHT, cs, dc, mosi, sclk, + rst, miso) {} + +/**************************************************************************/ +/*! + @brief Instantiate Adafruit ST7796S driver with hardware SPI using the + default SPI peripheral. + @param cs Chip select pin # (OK to pass -1 if CS tied to GND). + @param dc Data/Command pin # (required). + @param rst Reset pin # (optional, pass -1 if unused). +*/ +/**************************************************************************/ +Adafruit_ST7796S_kbv::Adafruit_ST7796S_kbv(int8_t cs, int8_t dc, int8_t rst) + : Adafruit_SPITFT(ST7796S_TFTWIDTH, ST7796S_TFTHEIGHT, cs, dc, rst) {} + +#if !defined(ESP8266) +/**************************************************************************/ +/*! + @brief Instantiate Adafruit ST7796S driver with hardware SPI using + a specific SPI peripheral (not necessarily default). + @param spiClass Pointer to SPI peripheral (e.g. &SPI or &SPI1). + @param dc Data/Command pin # (required). + @param cs Chip select pin # (optional, pass -1 if unused and + CS is tied to GND). + @param rst Reset pin # (optional, pass -1 if unused). +*/ +/**************************************************************************/ +Adafruit_ST7796S_kbv::Adafruit_ST7796S_kbv(SPIClass *spiClass, int8_t dc, int8_t cs, + int8_t rst) + : Adafruit_SPITFT(ST7796S_TFTWIDTH, ST7796S_TFTHEIGHT, spiClass, cs, dc, + rst) {} +#endif // end !ESP8266 + +/**************************************************************************/ +/*! + @brief Instantiate Adafruit ST7796S driver using parallel interface. + @param busWidth If tft16 (enumeration in Adafruit_SPITFT.h), is a + 16-bit interface, else 8-bit. + @param d0 Data pin 0 (MUST be a byte- or word-aligned LSB of a + PORT register -- pins 1-n are extrapolated from this). + @param wr Write strobe pin # (required). + @param dc Data/Command pin # (required). + @param cs Chip select pin # (optional, pass -1 if unused and CS + is tied to GND). + @param rst Reset pin # (optional, pass -1 if unused). + @param rd Read strobe pin # (optional, pass -1 if unused). +*/ +/**************************************************************************/ +Adafruit_ST7796S_kbv::Adafruit_ST7796S_kbv(tftBusWidth busWidth, int8_t d0, int8_t wr, + int8_t dc, int8_t cs, int8_t rst, int8_t rd) + : Adafruit_SPITFT(ST7796S_TFTWIDTH, ST7796S_TFTHEIGHT, busWidth, d0, wr, dc, + cs, rst, rd) {} + +// clang-format off +static const uint8_t PROGMEM initcmd[] = { + // (COMMAND_BYTE), n, data_bytes.... + 0x01, 0x80, // Soft reset, then delay 150 ms + 0xF0, 1, 0xC3, // ?? Unlock Manufacturer + 0xF0, 1, 0x96, +#if 0 +#elif 0 //LCDWIKI + 0x36, 1, 0x68, + 0x3A, 1, 0x05, + 0 0xB0, 1, 0x80, + 0xB6, 2, 0x00, 0x02, + 0xB5, 4, 0x02, 0x03, 0x00, 0x04, + 0xB1, 2, 0x80, 0x10, + 0xB4, 1, 0x00, + 0xB7, 1, 0xC6, + 0xC5, 1, 0x24, + 0xE4, 1, 0x31, + 0xE8, 8, 0x40, 0x8A, 0x00, 0x00, 0x29, 0x19, 0xA5, 0x33, + 0xC2, 1, 0xA7, + 0xE0, 14, 0xF0, 0x09, 0x13, 0x12, 0x12, 0x2B, 0x3C, 0x44, 0x4B, 0x1B, 0x18, 0x17, 0x1D, 0x21, + 0xE1, 14, 0xF0, 0x09, 0x13, 0x0C, 0x0D, 0x27, 0x3B, 0x44, 0x4D, 0x0B, 0x17 ,0x17, 0x1D, 0x21, + 0x36, 1, 0x48, + +#elif 0 //TFT_eSPI + 0x36, 1, 0x48, + 0x3A, 1, 0x05, //Interlace Pixel Format [XX] + 0xB4, 1, 0x01, //Inversion Control [01] + 0xB6, 3, 0x80, 0x02, 0x3B, // Display Function Control [80 02 3B] + 0xE8, 8, 0x40, 0x8A, 0x00, 0x00, 0x29, 0x19, 0xA5, 0x33, //Adjustment Control 3 [40 8A 00 00 25 0A 38 33] + 0xC1, 1, 0x06, //Power Control 2 [13] + 0xC2, 1, 0xA7, //Power Control 3 [A?] + 0xC5, 1, 0x18, //VCOM=0.9 [1C] + //0x11, 0x80, //delay 150 ms + (0xE0), 14, 0xF0, 0x09, 0x0B, 0x06, 0x04, 0x15, 0x2F, 0x54, 0x42, 0x3C, 0x17, 0x14, 0x18, 0x1B, //PVGAMCTRL: Positive Voltage Gamma control + (0xE1), 14, 0xE0, 0x09, 0x0B, 0x06, 0x04, 0x03, 0x2B, 0x43, 0x42, 0x3B, 0x16, 0x14, 0x17, 0x1B, //NVGAMCTRL: Negative Voltage Gamma control +#else +// 0xC0, 2, 0x10, 0x10, //Power Control 1 [80 25] +// 0xC1, 1, 0x41, //Power Control 2 [13] + 0xC5, 1, 0x1C, //VCOM Control 1 [1C] + 0x36, 1, 0x48, //Memory Access [00] + 0x3A, 1, 0x55, //565 + 0xB0, 1, 0x80, //Interface [00] + //0xB1, 2, 0xB0, 0x11, //Frame Rate Control [A0 10] + 0xB4, 1, 0x01, //Inversion Control [01] + 0xB6, 3, 0x80, 0x02, 0x3B, // Display Function Control [80 02 3B] .kbv SS=1, NL=480 + 0xB7, 1, 0xC6, //Entry Mode [06] +// 0x3A, 1, 0x66, //Interlace Pixel Format [XX] +// 0xF7, 4, 0xA9, 0x51, 0x2C, 0x82, //Adjustment Control 3 [A9 51 2C 82] +#endif + 0xF0, 1, 0x69, //?? lock manufacturer commands + 0xF0, 1, 0x3C, // + 0x11, 0x80, // Exit Sleep, then delay 150 ms + 0x29, 0x80, // Main screen turn on, delay 150 ms + 0x00 // End of list +}; +// clang-format on + +/**************************************************************************/ +/*! + @brief Initialize ST7796S chip + Connects to the ST7796S over SPI and sends initialization procedure commands + @param freq Desired SPI clock frequency +*/ +/**************************************************************************/ +void Adafruit_ST7796S_kbv::begin(uint32_t freq) { + + if (!freq) + freq = SPI_DEFAULT_FREQ; + initSPI(freq); + + if (_rst < 0) { // If no hardware reset pin... + sendCommand(ST7796S_SWRESET); // Engage software reset + delay(150); + } + + uint8_t cmd, x, numArgs; + const uint8_t *addr = initcmd; + while ((cmd = pgm_read_byte(addr++)) > 0) { + x = pgm_read_byte(addr++); + numArgs = x & 0x7F; + sendCommand(cmd, addr, numArgs); + addr += numArgs; + if (x & 0x80) + delay(150); + } + + _width = ST7796S_TFTWIDTH; + _height = ST7796S_TFTHEIGHT; +} + +/**************************************************************************/ +/*! + @brief Set origin of (0,0) and orientation of TFT display + @param m The index for rotation, from 0-3 inclusive +*/ +/**************************************************************************/ +void Adafruit_ST7796S_kbv::setRotation(uint8_t m) { + rotation = m % 4; // can't be higher than 3 + switch (rotation) { + case 0: + m = (MADCTL_MX | MADCTL_BGR); + _width = ST7796S_TFTWIDTH; + _height = ST7796S_TFTHEIGHT; + break; + case 1: + m = (MADCTL_MV | MADCTL_BGR); + _width = ST7796S_TFTHEIGHT; + _height = ST7796S_TFTWIDTH; + break; + case 2: + m = (MADCTL_MY | MADCTL_ML | MADCTL_BGR); + _width = ST7796S_TFTWIDTH; + _height = ST7796S_TFTHEIGHT; + break; + case 3: + m = (MADCTL_MX | MADCTL_MY | MADCTL_MV | MADCTL_ML | MADCTL_BGR); + _width = ST7796S_TFTHEIGHT; + _height = ST7796S_TFTWIDTH; + break; + } + + sendCommand(ST7796S_MADCTL, &m, 1); + setScrollMargins(0, 0); //.kbv + scrollTo(0); +} + +/**************************************************************************/ +/*! + @brief Enable/Disable display color inversion + @param invert True to invert, False to have normal color +*/ +/**************************************************************************/ +void Adafruit_ST7796S_kbv::invertDisplay(bool invert) { + sendCommand(invert ? ST7796S_INVON : ST7796S_INVOFF); +} + +/**************************************************************************/ +/*! + @brief Scroll display memory + @param y How many pixels to scroll display by +*/ +/**************************************************************************/ +void Adafruit_ST7796S_kbv::scrollTo(uint16_t y) { + uint8_t data[2]; + data[0] = y >> 8; + data[1] = y & 0xff; + sendCommand(ST7796S_VSCRSADD, (uint8_t *)data, 2); +} + +/**************************************************************************/ +/*! + @brief Set the height of the Top and Bottom Scroll Margins + @param top The height of the Top scroll margin + @param bottom The height of the Bottom scroll margin + */ +/**************************************************************************/ +void Adafruit_ST7796S_kbv::setScrollMargins(uint16_t top, uint16_t bottom) { + // TFA+VSA+BFA must equal 480 + if (top + bottom <= ST7796S_TFTHEIGHT) { + uint16_t middle = ST7796S_TFTHEIGHT - top - bottom; + uint8_t data[6]; + data[0] = top >> 8; + data[1] = top & 0xff; + data[2] = middle >> 8; + data[3] = middle & 0xff; + data[4] = bottom >> 8; + data[5] = bottom & 0xff; + sendCommand(ST7796S_VSCRDEF, (uint8_t *)data, 6); + } +} + +/**************************************************************************/ +/*! + @brief Set the "address window" - the rectangle we will write to RAM with + the next chunk of SPI data writes. The ST7796S will automatically wrap + the data as each row is filled + @param x1 TFT memory 'x' origin + @param y1 TFT memory 'y' origin + @param w Width of rectangle + @param h Height of rectangle +*/ +/**************************************************************************/ +void Adafruit_ST7796S_kbv::setAddrWindow(uint16_t x1, uint16_t y1, uint16_t w, + uint16_t h) { + uint16_t x2 = (x1 + w - 1), y2 = (y1 + h - 1); + writeCommand(ST7796S_CASET); // Column address set + SPI_WRITE16(x1); + SPI_WRITE16(x2); + writeCommand(ST7796S_PASET); // Row address set + SPI_WRITE16(y1); + SPI_WRITE16(y2); + writeCommand(ST7796S_RAMWR); // Write to RAM +} + +/**************************************************************************/ +/*! + @brief Read 8 bits of data from ST7796S configuration memory. NOT from RAM! + This is highly undocumented/supported, it's really a hack but kinda + works? + @param commandByte The command register to read data from + @param index The byte index into the command to read from + @return Unsigned 8-bit data read from ST7796S register + */ +/**************************************************************************/ +uint8_t Adafruit_ST7796S_kbv::readcommand8(uint8_t commandByte, uint8_t index) { + uint8_t data = 0x10 + index, ret; + sendCommand(0xFB, &data, 1); // Set Index Register + ret = Adafruit_SPITFT::readcommand8(commandByte); + data = 0x00; + sendCommand(0xFB, &data, 1); // Set Index Register + return ret; +} +#endif diff --git a/yoRadio/src/Adafruit_ST7796S/Adafruit_ST7796S_kbv.h b/yoRadio/src/Adafruit_ST7796S/Adafruit_ST7796S_kbv.h new file mode 100644 index 0000000..baf210b --- /dev/null +++ b/yoRadio/src/Adafruit_ST7796S/Adafruit_ST7796S_kbv.h @@ -0,0 +1,129 @@ +/* + * Adafruit_ST7796S_kbv class inherits from Adafruit_GFX, Adafruit_SPITFT class and the Arduino Print class. + * Adafruit_ST7796S_kbv written by David Prentice + * + * Any use of Adafruit_ST7796S_kbv class and examples is dependent on Adafruit and Arduino licenses + * The license texts are in the accompanying license.txt file + */ + +/*! + * @file Adafruit_ST7796S_kbv.h + * + * These displays use SPI to communicate, 4 or 5 pins are required + * to interface (RST is optional IF YOU ADD A PULLUP RESISTOR). + * + * Adafruit invests time and resources providing this open source code, + * please support Adafruit and open-source hardware by purchasing + * products from Adafruit! + * + * + * This library depends on + * Adafruit_GFX being present on your system. Please make sure you have + * installed the latest version before using this library. + * + * Adafruit_GFX, Adafruit_SPITFT written by Limor "ladyada" Fried for Adafruit Industries. + * + * BSD license, all text here must be included in any redistribution. + * + */ + + +#ifndef _ADAFRUIT_ST7796S_KBV_H_ +#define _ADAFRUIT_ST7796S_KBV_H_ + +#include "Adafruit_GFX.h" +#include "Arduino.h" +#include "Print.h" +#include +#include +#include + +#define ST7796S_TFTWIDTH 320 ///< ST7796S max TFT width +#define ST7796S_TFTHEIGHT 480 ///< ST7796S max TFT height + +#define ST7796S_NOP 0x00 ///< No-op register +#define ST7796S_SWRESET 0x01 ///< Software reset register +#define ST7796S_RDDID 0x04 ///< Read display identification information +#define ST7796S_RDDST 0x09 ///< Read Display Status + +#define ST7796S_SLPIN 0x10 ///< Enter Sleep Mode +#define ST7796S_SLPOUT 0x11 ///< Sleep Out +#define ST7796S_PTLON 0x12 ///< Partial Mode ON +#define ST7796S_NORON 0x13 ///< Normal Display Mode ON + +#define ST7796S_RDMODE 0x0A ///< Read Display Power Mode +#define ST7796S_RDMADCTL 0x0B ///< Read Display MADCTL +#define ST7796S_RDPIXFMT 0x0C ///< Read Display Pixel Format +#define ST7796S_RDIMGFMT 0x0D ///< Read Display Image Format +#define ST7796S_RDSELFDIAG 0x0F ///< Read Display Self-Diagnostic Result + +#define ST7796S_INVOFF 0x20 ///< Display Inversion OFF +#define ST7796S_INVON 0x21 ///< Display Inversion ON +#define ST7796S_GAMMASET 0x26 ///< Gamma Set +#define ST7796S_DISPOFF 0x28 ///< Display OFF +#define ST7796S_DISPON 0x29 ///< Display ON + +#define ST7796S_CASET 0x2A ///< Column Address Set +#define ST7796S_PASET 0x2B ///< Page Address Set +#define ST7796S_RAMWR 0x2C ///< Memory Write +#define ST7796S_RAMRD 0x2E ///< Memory Read + +#define ST7796S_PTLAR 0x30 ///< Partial Area +#define ST7796S_VSCRDEF 0x33 ///< Vertical Scrolling Definition +#define ST7796S_MADCTL 0x36 ///< Memory Access Control +#define ST7796S_VSCRSADD 0x37 ///< Vertical Scrolling Start Address +#define ST7796S_PIXFMT 0x3A ///< COLMOD: Pixel Format Set + + +// Color definitions +#define ST7796S_BLACK 0x0000 ///< 0, 0, 0 +#define ST7796S_NAVY 0x000F ///< 0, 0, 123 +#define ST7796S_DARKGREEN 0x03E0 ///< 0, 125, 0 +#define ST7796S_DARKCYAN 0x03EF ///< 0, 125, 123 +#define ST7796S_MAROON 0x7800 ///< 123, 0, 0 +#define ST7796S_PURPLE 0x780F ///< 123, 0, 123 +#define ST7796S_OLIVE 0x7BE0 ///< 123, 125, 0 +#define ST7796S_LIGHTGREY 0xC618 ///< 198, 195, 198 +#define ST7796S_DARKGREY 0x7BEF ///< 123, 125, 123 +#define ST7796S_BLUE 0x001F ///< 0, 0, 255 +#define ST7796S_GREEN 0x07E0 ///< 0, 255, 0 +#define ST7796S_CYAN 0x07FF ///< 0, 255, 255 +#define ST7796S_RED 0xF800 ///< 255, 0, 0 +#define ST7796S_MAGENTA 0xF81F ///< 255, 0, 255 +#define ST7796S_YELLOW 0xFFE0 ///< 255, 255, 0 +#define ST7796S_WHITE 0xFFFF ///< 255, 255, 255 +#define ST7796S_ORANGE 0xFD20 ///< 255, 165, 0 +#define ST7796S_GREENYELLOW 0xAFE5 ///< 173, 255, 41 +#define ST7796S_PINK 0xFC18 ///< 255, 130, 198 + +/**************************************************************************/ +/*! +@brief Class to manage hardware interface with ST7796S chipset +*/ +/**************************************************************************/ + +class Adafruit_ST7796S_kbv : public Adafruit_SPITFT { +public: + Adafruit_ST7796S_kbv(int8_t _CS, int8_t _DC, int8_t _MOSI, int8_t _SCLK, + int8_t _RST = -1, int8_t _MISO = -1); + Adafruit_ST7796S_kbv(int8_t _CS, int8_t _DC, int8_t _RST = -1); +#if !defined(ESP8266) + Adafruit_ST7796S_kbv(SPIClass *spiClass, int8_t dc, int8_t cs = -1, + int8_t rst = -1); +#endif // end !ESP8266 + Adafruit_ST7796S_kbv(tftBusWidth busWidth, int8_t d0, int8_t wr, int8_t dc, + int8_t cs = -1, int8_t rst = -1, int8_t rd = -1); + + void begin(uint32_t freq = 0); + void setRotation(uint8_t r); + void invertDisplay(bool i); + void scrollTo(uint16_t y); + void setScrollMargins(uint16_t top, uint16_t bottom); + + // Transaction API not used by GFX + void setAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h); + + uint8_t readcommand8(uint8_t reg, uint8_t index = 0); +}; + +#endif // _ADAFRUIT_ST7796SH_ diff --git a/yoRadio/src/GT911_Touchscreen/TAMC_GT911.cpp b/yoRadio/src/GT911_Touchscreen/TAMC_GT911.cpp new file mode 100644 index 0000000..38892a4 --- /dev/null +++ b/yoRadio/src/GT911_Touchscreen/TAMC_GT911.cpp @@ -0,0 +1,168 @@ +#if TS_MODEL==TS_MODEL_GT911 +#include "Arduino.h" +#include "TAMC_GT911.h" +#include + +TAMC_GT911::TAMC_GT911(uint8_t _sda, uint8_t _scl, uint8_t _int, uint8_t _rst, uint16_t _width, uint16_t _height) : + pinSda(_sda), pinScl(_scl), pinInt(_int), pinRst(_rst), width(_width), height(_height) { + +} + +void TAMC_GT911::begin(uint8_t _addr) { + addr = _addr; + Wire.begin(pinSda, pinScl); + reset(); +} +void TAMC_GT911::reset() { + pinMode(pinInt, OUTPUT); + pinMode(pinRst, OUTPUT); + digitalWrite(pinInt, 0); + digitalWrite(pinRst, 0); + delay(10); + digitalWrite(pinInt, addr==GT911_ADDR2); + delay(1); + digitalWrite(pinRst, 1); + delay(5); + digitalWrite(pinInt, 0); + delay(50); + pinMode(pinInt, INPUT); + // attachInterrupt(pinInt, TAMC_GT911::onInterrupt, RISING); + delay(50); + readBlockData(configBuf, GT911_CONFIG_START, GT911_CONFIG_SIZE); + setResolution(width, height); +} +void TAMC_GT911::calculateChecksum() { + uint8_t checksum = 0; + for (uint8_t i=0; i> 7 & 1; + isLargeDetect = pointInfo >> 6 & 1; + touches = pointInfo & 0xF; + // Serial.print("bufferStatus: ");Serial.println(bufferStatus); + // Serial.print("largeDetect: ");Serial.println(isLargeDetect); + // Serial.print("proximityValid: ");Serial.println(proximityValid); + // Serial.print("haveKey: ");Serial.println(haveKey); + // Serial.print("touches: ");Serial.println(touches); + isTouched = touches > 0; + if (bufferStatus == 1 && isTouched) { + for (uint8_t i=0; i + +#define GT911_ADDR1 (uint8_t)0x5D +#define GT911_ADDR2 (uint8_t)0x14 + +#define ROTATION_LEFT (uint8_t)0 +#define ROTATION_INVERTED (uint8_t)1 +#define ROTATION_RIGHT (uint8_t)2 +#define ROTATION_NORMAL (uint8_t)3 + + +// Real-time command (Write only) +#define GT911_COMMAND (uint16_t)0x8040 +#define GT911_ESD_CHECK (uint16_t)0x8041 +#define GT911_COMMAND_CHECK (uint16_t)0x8046 + +// Configuration information (R/W) +#define GT911_CONFIG_START (uint16_t)0x8047 +#define GT911_CONFIG_VERSION (uint16_t)0x8047 +#define GT911_X_OUTPUT_MAX_LOW (uint16_t)0x8048 +#define GT911_X_OUTPUT_MAX_HIGH (uint16_t)0x8049 +#define GT911_Y_OUTPUT_MAX_LOW (uint16_t)0x804A +#define GT911_Y_OUTPUT_MAX_HIGH (uint16_t)0x804B +#define GT911_TOUCH_NUMBER (uint16_t)0x804C +#define GT911_MODULE_SWITCH_1 (uint16_t)0x804D +#define GT911_MODULE_SWITCH_2 (uint16_t)0x804E +#define GT911_SHAKE_COUNT (uint16_t)0x804F +#define GT911_FILTER (uint16_t)0x8050 +#define GT911_LARGE_TOUCH (uint16_t)0x8051 +#define GT911_NOISE_REDUCTION (uint16_t)0x8052 +#define GT911_SCREEN_TOUCH_LEVEL (uint16_t)0x8053 +#define GT911_SCREEN_RELEASE_LEVEL (uint16_t)0x8054 +#define GT911_LOW_POWER_CONTROL (uint16_t)0x8055 +#define GT911_REFRESH_RATE (uint16_t)0x8056 +#define GT911_X_THRESHOLD (uint16_t)0x8057 +#define GT911_Y_THRESHOLD (uint16_t)0x8058 +#define GT911_X_SPEED_LIMIT (uint16_t)0x8059 //Reserve +#define GT911_Y_SPEED_LIMIT (uint16_t)0x805A //Reserve +#define GT911_SPACE_TOP_BOTTOM (uint16_t)0x805B +#define GT911_SPACE_LEFT_RIGHT (uint16_t)0x805C +#define GT911_MINI_FILTER (uint16_t)0x805D +#define GT911_STRETCH_R0 (uint16_t)0x805E +#define GT911_STRETCH_R1 (uint16_t)0x805F +#define GT911_STRETCH_R2 (uint16_t)0x8060 +#define GT911_STRETCH_RM (uint16_t)0x8061 +#define GT911_DRV_GROUPA_NUM (uint16_t)0x8062 +#define GT911_DRV_GROUPB_NUM (uint16_t)0x8063 +#define GT911_SENSOR_NUM (uint16_t)0x8064 +#define GT911_FREQ_A_FACTOR (uint16_t)0x8065 +#define GT911_FREQ_B_FACTOR (uint16_t)0x8066 +#define GT911_PANEL_BIT_FREQ_L (uint16_t)0x8067 +#define GT911_PANEL_BIT_FREQ_H (uint16_t)0x8068 +#define GT911_PANEL_SENSOR_TIME_L (uint16_t)0x8069 //Reserve +#define GT911_PANEL_SENSOR_TIME_H (uint16_t)0x806A +#define GT911_PANEL_TX_GAIN (uint16_t)0x806B +#define GT911_PANEL_RX_GAIN (uint16_t)0x806C +#define GT911_PANEL_DUMP_SHIFT (uint16_t)0x806D +#define GT911_DRV_FRAME_CONTROL (uint16_t)0x806E +#define GT911_CHARGING_LEVEL_UP (uint16_t)0x806F +#define GT911_MODULE_SWITCH3 (uint16_t)0x8070 +#define GT911_GESTURE_DIS (uint16_t)0X8071 +#define GT911_GESTURE_LONG_PRESS_TIME (uint16_t)0x8072 +#define GT911_X_Y_SLOPE_ADJUST (uint16_t)0X8073 +#define GT911_GESTURE_CONTROL (uint16_t)0X8074 +#define GT911_GESTURE_SWITCH1 (uint16_t)0X8075 +#define GT911_GESTURE_SWITCH2 (uint16_t)0X8076 +#define GT911_GESTURE_REFRESH_RATE (uint16_t)0x8077 +#define GT911_GESTURE_TOUCH_LEVEL (uint16_t)0x8078 +#define GT911_NEWGREENWAKEUPLEVEL (uint16_t)0x8079 +#define GT911_FREQ_HOPPING_START (uint16_t)0x807A +#define GT911_FREQ_HOPPING_END (uint16_t)0X807B +#define GT911_NOISE_DETECT_TIMES (uint16_t)0x807C +#define GT911_HOPPING_FLAG (uint16_t)0X807D +#define GT911_HOPPING_THRESHOLD (uint16_t)0X807E +#define GT911_NOISE_THRESHOLD (uint16_t)0X807F //Reserve +#define GT911_NOISE_MIN_THRESHOLD (uint16_t)0X8080 +#define GT911_HOPPING_SENSOR_GROUP (uint16_t)0X8082 +#define GT911_HOPPING_SEG1_NORMALIZE (uint16_t)0X8083 +#define GT911_HOPPING_SEG1_FACTOR (uint16_t)0X8084 +#define GT911_MAIN_CLOCK_AJDUST (uint16_t)0X8085 +#define GT911_HOPPING_SEG2_NORMALIZE (uint16_t)0X8086 +#define GT911_HOPPING_SEG2_FACTOR (uint16_t)0X8087 +#define GT911_HOPPING_SEG3_NORMALIZE (uint16_t)0X8089 +#define GT911_HOPPING_SEG3_FACTOR (uint16_t)0X808A +#define GT911_HOPPING_SEG4_NORMALIZE (uint16_t)0X808C +#define GT911_HOPPING_SEG4_FACTOR (uint16_t)0X808D +#define GT911_HOPPING_SEG5_NORMALIZE (uint16_t)0X808F +#define GT911_HOPPING_SEG5_FACTOR (uint16_t)0X8090 +#define GT911_HOPPING_SEG6_NORMALIZE (uint16_t)0X8092 +#define GT911_KEY_1 (uint16_t)0X8093 +#define GT911_KEY_2 (uint16_t)0X8094 +#define GT911_KEY_3 (uint16_t)0X8095 +#define GT911_KEY_4 (uint16_t)0X8096 +#define GT911_KEY_AREA (uint16_t)0X8097 +#define GT911_KEY_TOUCH_LEVEL (uint16_t)0X8098 +#define GT911_KEY_LEAVE_LEVEL (uint16_t)0X8099 +#define GT911_KEY_SENS_1_2 (uint16_t)0X809A +#define GT911_KEY_SENS_3_4 (uint16_t)0X809B +#define GT911_KEY_RESTRAIN (uint16_t)0X809C +#define GT911_KEY_RESTRAIN_TIME (uint16_t)0X809D +#define GT911_GESTURE_LARGE_TOUCH (uint16_t)0X809E +#define GT911_HOTKNOT_NOISE_MAP (uint16_t)0X80A1 +#define GT911_LINK_THRESHOLD (uint16_t)0X80A2 +#define GT911_PXY_THRESHOLD (uint16_t)0X80A3 +#define GT911_GHOT_DUMP_SHIFT (uint16_t)0X80A4 +#define GT911_GHOT_RX_GAIN (uint16_t)0X80A5 +#define GT911_FREQ_GAIN0 (uint16_t)0X80A6 +#define GT911_FREQ_GAIN1 (uint16_t)0X80A7 +#define GT911_FREQ_GAIN2 (uint16_t)0X80A8 +#define GT911_FREQ_GAIN3 (uint16_t)0X80A9 +#define GT911_COMBINE_DIS (uint16_t)0X80B3 +#define GT911_SPLIT_SET (uint16_t)0X80B4 +#define GT911_SENSOR_CH0 (uint16_t)0X80B7 +#define GT911_DRIVER_CH0 (uint16_t)0X80D5 +#define GT911_CONFIG_CHKSUM (uint16_t)0X80FF +#define GT911_CONFIG_FRESH (uint16_t)0X8100 +#define GT911_CONFIG_SIZE (uint16_t)0xFF-0x46 +// Coordinate information +#define GT911_PRODUCT_ID (uint16_t)0X8140 +#define GT911_FIRMWARE_VERSION (uint16_t)0X8140 +#define GT911_RESOLUTION (uint16_t)0X8140 +#define GT911_VENDOR_ID (uint16_t)0X8140 +#define GT911_IMFORMATION (uint16_t)0X8140 +#define GT911_POINT_INFO (uint16_t)0X814E +#define GT911_POINT_1 (uint16_t)0X814F +#define GT911_POINT_2 (uint16_t)0X8157 +#define GT911_POINT_3 (uint16_t)0X815F +#define GT911_POINT_4 (uint16_t)0X8167 +#define GT911_POINT_5 (uint16_t)0X816F +#define GT911_POINTS_REG {GT911_POINT_1, GT911_POINT_2, GT911_POINT_3, GT911_POINT_4, GT911_POINT_5} + +class TP_Point { + public: + TP_Point(void); + TP_Point(uint8_t id, uint16_t x, uint16_t y, uint16_t size); + + bool operator==(TP_Point); + bool operator!=(TP_Point); + + uint8_t id; + uint16_t x; + uint16_t y; + uint8_t size; +}; + +class TAMC_GT911 { + public: + TAMC_GT911(uint8_t _sda, uint8_t _scl, uint8_t _int, uint8_t _rst, uint16_t _width, uint16_t _height); + void begin(uint8_t _addr=GT911_ADDR1); + void reset(); + void setRotation(uint8_t rot); + void setResolution(uint16_t _width, uint16_t _height); + // void setOnRead(void (*isr)()); + uint8_t getGesture(void); + void read(void); + uint8_t isLargeDetect; + uint8_t touches = 0; + bool isTouched = false; + // uint8_t gesture = NO_GESTURE; + TP_Point points[5]; + + private: + void calculateChecksum(); + void reflashConfig(); + // static void ARDUINO_ISR_ATTR onInterrupt(); + TP_Point readPoint(uint8_t *data); + // void (*onRead)(); + void writeByteData(uint16_t reg, uint8_t val); + uint8_t readByteData(uint16_t reg); + void writeBlockData(uint16_t reg, uint8_t *val, uint8_t size); + void readBlockData(uint8_t *buf, uint16_t reg, uint8_t size); + uint8_t rotation = ROTATION_NORMAL; + uint8_t addr; + uint8_t pinSda; + uint8_t pinScl; + uint8_t pinInt; + uint8_t pinRst; + uint16_t width; + uint16_t height; + uint8_t configBuf[GT911_CONFIG_SIZE]; + // uint8_t *configBuf; +}; + +#endif // TAMC_GT911_H diff --git a/yoRadio/src/core/config.cpp b/yoRadio/src/core/config.cpp index 30ecee8..714c0ef 100644 --- a/yoRadio/src/core/config.cpp +++ b/yoRadio/src/core/config.cpp @@ -6,6 +6,10 @@ Config config; +#if DSP_HSPI || TS_HSPI || VS_HSPI +SPIClass SPI2(HSPI); +#endif + void u8fix(char *src){ char last = src[strlen(src)-1]; if ((uint8_t)last >= 0xC2) src[strlen(src)-1]='\0'; diff --git a/yoRadio/src/core/config.h b/yoRadio/src/core/config.h index 10f1a48..671b1f3 100644 --- a/yoRadio/src/core/config.h +++ b/yoRadio/src/core/config.h @@ -2,6 +2,7 @@ #define config_h #include "Arduino.h" #include +#include #include "options.h" #define EEPROM_SIZE 768 @@ -184,5 +185,9 @@ class Config { }; extern Config config; +#if DSP_HSPI || TS_HSPI || VS_HSPI +extern SPIClass SPI2; +#endif + #endif diff --git a/yoRadio/src/core/controls.cpp b/yoRadio/src/core/controls.cpp index ce590a7..77ff705 100644 --- a/yoRadio/src/core/controls.cpp +++ b/yoRadio/src/core/controls.cpp @@ -42,9 +42,9 @@ yoEncoder encoder2 = yoEncoder(ENC2_BTNL, ENC2_BTNR, ENCODER2_STEPS, ENC2_INTERN #endif #endif -#if TS_CS!=255 -#include -XPT2046_Touchscreen ts(TS_CS); +#if TS_MODEL!=TS_MODEL_UNDEFINED + #include "touchscreen.h" + TouchScreen touchscreen; #endif #if IR_PIN!=255 @@ -113,9 +113,8 @@ void initControls() { button[i].setPressTicks(BTN_PRESS_TICKS); } #endif -#if TS_CS!=255 - ts.begin(); - ts.setRotation(config.store.fliptouch?3:1); +#if TS_MODEL!=TS_MODEL_UNDEFINED + touchscreen.init(); #endif #if IR_PIN!=255 pinMode(IR_PIN, INPUT); @@ -145,18 +144,15 @@ void loopControls() { if (lpId >= 0) { if (DSP_MODEL == DSP_DUMMY && (lpId == 4 || lpId == 5)) continue; onBtnDuringLongPress(lpId); - yield(); } - yield(); } #endif #if IR_PIN!=255 irLoop(); #endif -#if TS_CS!=255 - touchLoop(); +#if TS_MODEL!=TS_MODEL_UNDEFINED + touchscreen.loop(); #endif - yield(); } #if ENC_BTNL!=255 @@ -326,122 +322,6 @@ void irLoop() { } #endif // if IR_PIN!=255 -#if TS_CS!=255 -#ifndef TS_X_MIN - #define TS_X_MIN 400 -#endif -#ifndef TS_X_MAX - #define TS_X_MAX 3800 -#endif -#ifndef TS_Y_MIN - #define TS_Y_MIN 260 -#endif -#ifndef TS_Y_MAX - #define TS_Y_MAX 3800 -#endif -#ifndef TS_STEPS - #define TS_STEPS 40 -#endif - -boolean wastouched = true; -unsigned long touchdelay; -uint16_t touchVol, touchStation; -uint16_t oldTouchP[2]; -tsDirection_e direct; -unsigned long touchLongPress; - -tsDirection_e tsDirection(uint16_t x, uint16_t y) { - int16_t dX = x - oldTouchP[0]; - int16_t dY = y - oldTouchP[1]; - if (abs(dX) > 20 || abs(dY) > 20) { - if (abs(dX) > abs(dY)) { - if (dX > 0) { - return TSD_RIGHT; - } else { - return TSD_LEFT; - } - } else { - if (dY > 0) { - return TSD_DOWN; - } else { - return TSD_UP; - } - } - } else { - return TDS_REQUEST; - } -} - -void touchLoop() { - if (!checklpdelay(100, touchdelay)) return; - boolean istouched = ts.touched(); - if (istouched) { - TS_Point p = ts.getPoint(); - uint16_t touchX = map(p.x, TS_X_MIN, TS_X_MAX, 0, dsp.width()); - uint16_t touchY = map(p.y, TS_Y_MIN, TS_Y_MAX, 0, dsp.height()); - if (!wastouched) { /* START TOUCH */ - oldTouchP[0] = touchX; - oldTouchP[1] = touchY; - touchVol = touchX; - touchStation = touchY; - direct = TDS_REQUEST; - touchLongPress=millis(); - } else { /* SWIPE TOUCH */ - direct = tsDirection(touchX, touchY); - switch (direct) { - case TSD_LEFT: - case TSD_RIGHT: { - touchLongPress=millis(); - if(display.mode()==PLAYER || display.mode()==VOL){ - int16_t xDelta = map(abs(touchVol - touchX), 0, dsp.width(), 0, TS_STEPS); - display.putRequest(NEWMODE, VOL); - if (xDelta>1) { - controlsEvent((touchVol - touchX)<0); - touchVol = touchX; - } - } - break; - } - case TSD_UP: - case TSD_DOWN: { - touchLongPress=millis(); - if(display.mode()==PLAYER || display.mode()==STATIONS){ - int16_t yDelta = map(abs(touchStation - touchY), 0, dsp.height(), 0, TS_STEPS); - display.putRequest(NEWMODE, STATIONS); - if (yDelta>1) { - controlsEvent((touchStation - touchY)<0); - touchStation = touchY; - } - } - break; - } - default: - break; - } - } - if (config.store.dbgtouch) { - Serial.print(", x = "); - Serial.print(p.x); - Serial.print(", y = "); - Serial.println(p.y); - } - } else { - if (wastouched) {/* END TOUCH */ - if (direct == TDS_REQUEST) { - uint32_t pressTicks = millis()-touchLongPress; - if( pressTicks < BTN_PRESS_TICKS*2){ - if(pressTicks > 50) onBtnClick(EVT_BTNCENTER); - }else{ - display.putRequest(NEWMODE, display.mode() == PLAYER ? STATIONS : PLAYER); - } - } - direct = TSD_STAY; - } - } - wastouched = istouched; -} -#endif // if TS_CS!=255 - void onBtnLongPressStart(int id) { switch ((controlEvt_e)id) { case EVT_BTNLEFT: @@ -629,7 +509,7 @@ void setEncAcceleration(uint16_t acc){ #endif } void flipTS(){ -#if TS_CS!=255 - ts.setRotation(config.store.fliptouch?3:1); +#if TS_MODEL!=TS_MODEL_UNDEFINED + touchscreen.flip(); #endif } diff --git a/yoRadio/src/core/controls.h b/yoRadio/src/core/controls.h index 84a76d1..c44bb92 100644 --- a/yoRadio/src/core/controls.h +++ b/yoRadio/src/core/controls.h @@ -4,7 +4,7 @@ enum controlEvt_e { EVT_BTNLEFT, EVT_BTNCENTER, EVT_BTNRIGHT, EVT_ENCBTNB, EVT_BTNUP, EVT_BTNDOWN, EVT_ENC2BTNB }; -enum tsDirection_e { TSD_STAY, TSD_LEFT, TSD_RIGHT, TSD_UP, TSD_DOWN, TDS_REQUEST }; +//enum tsDirection_e { TSD_STAY, TSD_LEFT, TSD_RIGHT, TSD_UP, TSD_DOWN, TDS_REQUEST }; #if IR_PIN!=255 enum : uint8_t { IR_UP=0, IR_PREV=1, IR_PLAY=2, IR_NEXT=3, IR_DOWN=4, IR_1=5, IR_2=6, IR_3=7, IR_4=8, IR_5=9, IR_6=10, IR_7=11, IR_8=12, IR_9=13, IR_AST=14, IR_0=15, IR_HASH=16 }; @@ -17,7 +17,7 @@ void loopControls(); void encoderLoop(); void encoder2Loop(); void irLoop(); -void touchLoop(); +//void touchLoop(); void irNum(byte num); void irBlink(); void controlsEvent(bool toRight, int8_t volDelta = 0); @@ -27,7 +27,7 @@ void onBtnDoubleClick(int id); void onBtnDuringLongPress(int id); void onBtnLongPressStart(int id); void onBtnLongPressStop(int id); -tsDirection_e tsDirection(uint16_t x, uint16_t y); +//tsDirection_e tsDirection(uint16_t x, uint16_t y); void setIRTolerance(uint8_t tl); void setEncAcceleration(uint16_t acc); diff --git a/yoRadio/src/core/display.cpp b/yoRadio/src/core/display.cpp index db5e3fa..d381b9c 100644 --- a/yoRadio/src/core/display.cpp +++ b/yoRadio/src/core/display.cpp @@ -49,6 +49,9 @@ void loopDspTask(void * pvParameters){ void Display::init() { #ifdef USE_NEXTION nextion.begin(); +#endif +#if LIGHT_SENSOR!=255 + analogSetAttenuation(ADC_0db); #endif _bootStep = 0; dsp.initDisplay(); @@ -442,6 +445,10 @@ void Display::_title() { } void Display::_time(bool redraw) { +#if LIGHT_SENSOR!=255 + config.store.brightness = AUTOBACKLIGHT(analogRead(LIGHT_SENSOR)); + config.setBrightness(); +#endif _clock.draw(); /*#ifdef USE_NEXTION nextion.printClock(network.timeinfo); diff --git a/yoRadio/src/core/display.h b/yoRadio/src/core/display.h index f98aa53..18c9f0a 100644 --- a/yoRadio/src/core/display.h +++ b/yoRadio/src/core/display.h @@ -110,4 +110,5 @@ class Display { extern Display display; + #endif diff --git a/yoRadio/src/core/netserver.cpp b/yoRadio/src/core/netserver.cpp index 4e0f099..a9257d5 100644 --- a/yoRadio/src/core/netserver.cpp +++ b/yoRadio/src/core/netserver.cpp @@ -557,7 +557,7 @@ void NetServer::requestOnChange(requestType_e request, uint8_t clientId) { #endif if (BRIGHTNESS_PIN != 255 || nxtn || dbgact) act += F("\"group_brightness\","); if (DSP_CAN_FLIPPED || dbgact) act += F("\"group_tft\","); - if (TS_CS != 255 || dbgact) act += F("\"group_touch\","); + if (TS_MODEL != TS_MODEL_UNDEFINED || dbgact) act += F("\"group_touch\","); if (DSP_MODEL == DSP_NOKIA5110) act += F("\"group_nokia\","); act += F("\"group_timezone\","); if (SHOW_WEATHER || dbgact) act += F("\"group_weather\","); diff --git a/yoRadio/src/core/network.cpp b/yoRadio/src/core/network.cpp index ea13e1e..6122c60 100644 --- a/yoRadio/src/core/network.cpp +++ b/yoRadio/src/core/network.cpp @@ -209,6 +209,7 @@ bool getWeather(char *wstr) { } char *tmpe; char *tmps; + char *tmpc; const char* cursor = line.c_str(); char desc[120], temp[20], hum[20], press[20], icon[5]; @@ -251,8 +252,9 @@ bool getWeather(char *wstr) { if (tmps == NULL) { Serial.println("## OPENWEATHERMAP ###: humidity not found !"); return false;} tmps += 10; tmpe = strstr(tmps, ",\""); + tmpc = strstr(tmps, "}"); if (tmpe == NULL) { Serial.println("## OPENWEATHERMAP ###: humidity not found !"); return false;} - strlcpy(hum, tmps, tmpe - tmps + 1); + strlcpy(hum, tmps, tmpe - tmps + (tmpc>tmpe?1:0)); #ifdef USE_NEXTION nextion.putcmdf("press_txt.txt=\"%dmm\"", pressi); diff --git a/yoRadio/src/core/options.h b/yoRadio/src/core/options.h index cb4b9f9..2d18829 100644 --- a/yoRadio/src/core/options.h +++ b/yoRadio/src/core/options.h @@ -1,7 +1,7 @@ #ifndef options_h #define options_h -#define VERSION "0.8.02b" +#define VERSION "0.8.03b" /******************************************************* DO NOT EDIT THIS FILE. @@ -41,6 +41,7 @@ The connection tables are located here https://github.com/e2002/yoradio#connecti #define DSP_SSD1305I2C 16 // 128x64 2.4' SSD1305 and SSD1309 I2C https://aliexpress.com/item/32950307344.html #define DSP_ILI9225 17 // 220x176 2.0' https://aliexpress.com/item/32952021835.html #define DSP_ST7789_240 18 // 240x240 1.3' https://aliexpress.com/item/32996979276.html +#define DSP_ST7796 19 /* !!! DSP_ST7789_240 requires further development when used in conjunction with the VS1053 module !!! See the link https://www.instructables.com/Adding-CS-Pin-to-13-LCD/ */ #define DSP_CUSTOM 101 // your display @@ -48,6 +49,12 @@ The connection tables are located here https://github.com/e2002/yoradio#connecti #ifndef DSP_MODEL #define DSP_MODEL DSP_DUMMY #endif +#ifndef DSP_HSPI + #define DSP_HSPI false // use HSPI for displays (miso=12, mosi=13, clk=14) instead of VSPI (by default) +#endif +#ifndef LED_INVERT + #define LED_INVERT false // invert onboard LED? +#endif /* TFT DISPLAY */ #ifndef TFT_CS @@ -92,6 +99,9 @@ The connection tables are located here https://github.com/e2002/yoradio#connecti #ifndef VS1053_RST #define VS1053_RST -1 // set to -1 if connected to Esp EN pin #endif +#ifndef VS_HSPI + #define VS_HSPI false // use HSPI for VS1053 (miso=12, mosi=13, clk=14) instead of VSPI (by default) +#endif /* I2S DAC */ #ifndef I2S_DOUT @@ -167,8 +177,32 @@ The connection tables are located here https://github.com/e2002/yoradio#connecti #endif /* TOUCH SCREEN */ +#define TS_MODEL_UNDEFINED 0 +#define TS_MODEL_XPT2046 1 +#define TS_MODEL_GT911 2 + +#ifndef TS_MODEL + #define TS_MODEL TS_MODEL_UNDEFINED +#endif + #ifndef TS_CS - #define TS_CS 255 + #define TS_CS 13 +#endif +#ifndef TS_SDA + #define TS_SDA 33 +#endif +#ifndef TS_SCL + #define TS_SCL 32 +#endif +#ifndef TS_INT + #define TS_INT 21 +#endif +#ifndef TS_RST + #define TS_RST 25 +#endif + +#ifndef TS_HSPI + #define TS_HSPI false // use HSPI for touchscreen (miso=12, mosi=13, clk=14) instead of VSPI (by default) #endif /* LCD DISPLAY */ @@ -218,6 +252,18 @@ The connection tables are located here https://github.com/e2002/yoradio#connecti #ifndef WAKE_PIN #define WAKE_PIN 255 // Wake Pin (for manual wakeup from sleep mode. can match with BTN_XXXX, ENC_BTNB, ENC2_BTNB. must be one of: 0,2,4,12,13,14,15,25,26,27,32,33,34,35,36,39) #endif +#ifndef LIGHT_SENSOR + #define LIGHT_SENSOR 255 // Light sensor +#endif +#ifndef AUTOBACKLIGHT + #ifndef AUTOBACKLIGHT_MAX + #define AUTOBACKLIGHT_MAX 2500 + #endif + #ifndef AUTOBACKLIGHT_MIN + #define AUTOBACKLIGHT_MIN 12 + #endif + #define AUTOBACKLIGHT(x) ({uint16_t _lh=(x>AUTOBACKLIGHT_MAX?AUTOBACKLIGHT_MAX:x); map(_lh, AUTOBACKLIGHT_MAX, 0, AUTOBACKLIGHT_MIN, 100);}) // autobacklight function +#endif /* *** ST7735 display submodel *** INITR_BLACKTAB // 1.8' https://aliexpress.ru/item/1005002822797745.html diff --git a/yoRadio/src/core/player.cpp b/yoRadio/src/core/player.cpp index c812178..728a34f 100644 --- a/yoRadio/src/core/player.cpp +++ b/yoRadio/src/core/player.cpp @@ -11,9 +11,11 @@ Player player; #if VS1053_CS!=255 && !I2S_INTERNAL - Player::Player(): Audio(VS1053_CS, VS1053_DCS, VS1053_DREQ) { - - } + #if VS_HSPI + Player::Player(): Audio(VS1053_CS, VS1053_DCS, VS1053_DREQ, HSPI, 13, 12, 14) {} + #else + Player::Player(): Audio(VS1053_CS, VS1053_DCS, VS1053_DREQ) {} + #endif void ResetChip(){ pinMode(VS1053_RST, OUTPUT); digitalWrite(VS1053_RST, LOW); @@ -116,7 +118,7 @@ void Player::zeroRequest() { } void Player::setOutputPins(bool isPlaying) { - digitalWrite(LED_BUILTIN, isPlaying); + digitalWrite(LED_BUILTIN, LED_INVERT?!isPlaying:isPlaying); if(MUTE_PIN!=255) digitalWrite(MUTE_PIN, isPlaying?!MUTE_VAL:MUTE_VAL); } diff --git a/yoRadio/src/core/touchscreen.cpp b/yoRadio/src/core/touchscreen.cpp new file mode 100644 index 0000000..b401d99 --- /dev/null +++ b/yoRadio/src/core/touchscreen.cpp @@ -0,0 +1,196 @@ +#include "options.h" +#if TS_MODEL!=TS_MODEL_UNDEFINED + +#include "touchscreen.h" +#include "config.h" +#include "controls.h" +#include "display.h" +#include "player.h" + +#ifndef TS_X_MIN + #define TS_X_MIN 400 +#endif +#ifndef TS_X_MAX + #define TS_X_MAX 3800 +#endif +#ifndef TS_Y_MIN + #define TS_Y_MIN 260 +#endif +#ifndef TS_Y_MAX + #define TS_Y_MAX 3800 +#endif +#ifndef TS_STEPS + #define TS_STEPS 40 +#endif + +#if TS_MODEL==TS_MODEL_XPT2046 + #ifdef TS_SPIPINS + SPIClass TSSPI(HSPI); + #endif + #include + XPT2046_Touchscreen ts(TS_CS); + typedef TS_Point TSPoint; +#elif TS_MODEL==TS_MODEL_GT911 + #include "../GT911_Touchscreen/TAMC_GT911.h" + TAMC_GT911 ts = TAMC_GT911(TS_SDA, TS_SCL, TS_INT, TS_RST, 0, 0); + typedef TP_Point TSPoint; +#endif + +void TouchScreen::init(){ + +#if TS_MODEL==TS_MODEL_XPT2046 + #ifdef TS_SPIPINS + TSSPI.begin(TS_SPIPINS); + ts.begin(TSSPI); + #else + #if TS_HSPI + ts.begin(SPI2); + #else + ts.begin(); + #endif + #endif + ts.setRotation(config.store.fliptouch?3:1); +#endif +#if TS_MODEL==TS_MODEL_GT911 + ts.begin(); + ts.setRotation(config.store.fliptouch?0:2); +#endif + _width = dsp.width(); + _height = dsp.height(); +#if TS_MODEL==TS_MODEL_GT911 + ts.setResolution(_width, _height); +#endif +} + +tsDirection_e TouchScreen::_tsDirection(uint16_t x, uint16_t y) { + int16_t dX = x - _oldTouchX; + int16_t dY = y - _oldTouchY; + if (abs(dX) > 20 || abs(dY) > 20) { + if (abs(dX) > abs(dY)) { + if (dX > 0) { + return TSD_RIGHT; + } else { + return TSD_LEFT; + } + } else { + if (dY > 0) { + return TSD_DOWN; + } else { + return TSD_UP; + } + } + } else { + return TDS_REQUEST; + } +} + +void TouchScreen::flip(){ +#if TS_MODEL==TS_MODEL_XPT2046 + ts.setRotation(config.store.fliptouch?3:1); +#endif +#if TS_MODEL==TS_MODEL_GT911 + ts.setRotation(config.store.fliptouch?0:2); +#endif +} + +void TouchScreen::loop(){ + uint16_t touchX, touchY; + static bool wastouched = true; + static uint32_t touchLongPress; + static tsDirection_e direct; + static uint16_t touchVol, touchStation; + if (!_checklpdelay(20, _touchdelay)) return; +#if TS_MODEL==TS_MODEL_GT911 + ts.read(); +#endif + bool istouched = _istouched(); + if(istouched){ + #if TS_MODEL==TS_MODEL_XPT2046 + TSPoint p = ts.getPoint(); + touchX = map(p.x, TS_X_MIN, TS_X_MAX, 0, _width); + touchY = map(p.y, TS_Y_MIN, TS_Y_MAX, 0, _height); + #elif TS_MODEL==TS_MODEL_GT911 + TSPoint p = ts.points[0]; + touchX = p.x; + touchY = p.y; + #endif + if (!wastouched) { /* START TOUCH */ + _oldTouchX = touchX; + _oldTouchY = touchY; + touchVol = touchX; + touchStation = touchY; + direct = TDS_REQUEST; + touchLongPress=millis(); + } else { /* SWIPE TOUCH */ + direct = _tsDirection(touchX, touchY); + switch (direct) { + case TSD_LEFT: + case TSD_RIGHT: { + touchLongPress=millis(); + if(display.mode()==PLAYER || display.mode()==VOL){ + int16_t xDelta = map(abs(touchVol - touchX), 0, _width, 0, TS_STEPS); + display.putRequest(NEWMODE, VOL); + if (xDelta>1) { + controlsEvent((touchVol - touchX)<0); + touchVol = touchX; + } + } + break; + } + case TSD_UP: + case TSD_DOWN: { + touchLongPress=millis(); + if(display.mode()==PLAYER || display.mode()==STATIONS){ + int16_t yDelta = map(abs(touchStation - touchY), 0, _height, 0, TS_STEPS); + display.putRequest(NEWMODE, STATIONS); + if (yDelta>1) { + controlsEvent((touchStation - touchY)<0); + touchStation = touchY; + } + } + break; + } + default: + break; + } + } + if (config.store.dbgtouch) { + Serial.print(", x = "); + Serial.print(p.x); + Serial.print(", y = "); + Serial.println(p.y); + } + }else{ + if (wastouched) {/* END TOUCH */ + if (direct == TDS_REQUEST) { + uint32_t pressTicks = millis()-touchLongPress; + if( pressTicks < BTN_PRESS_TICKS*2){ + if(pressTicks > 50) onBtnClick(EVT_BTNCENTER); + }else{ + display.putRequest(NEWMODE, display.mode() == PLAYER ? STATIONS : PLAYER); + } + } + direct = TSD_STAY; + } + } + wastouched = istouched; +} + +bool TouchScreen::_checklpdelay(int m, uint32_t &tstamp) { + if (millis() - tstamp > m) { + tstamp = millis(); + return true; + } else { + return false; + } +} + +bool TouchScreen::_istouched(){ +#if TS_MODEL==TS_MODEL_XPT2046 + return ts.touched(); +#elif TS_MODEL==TS_MODEL_GT911 + return ts.isTouched; +#endif +} + +#endif // TS_MODEL!=TS_MODEL_UNDEFINED diff --git a/yoRadio/src/core/touchscreen.h b/yoRadio/src/core/touchscreen.h new file mode 100644 index 0000000..23233cd --- /dev/null +++ b/yoRadio/src/core/touchscreen.h @@ -0,0 +1,23 @@ +#ifndef touchscreen_h +#define touchscreen_h +#include "Arduino.h" + +enum tsDirection_e { TSD_STAY, TSD_LEFT, TSD_RIGHT, TSD_UP, TSD_DOWN, TDS_REQUEST }; + +class TouchScreen { + public: + TouchScreen() {} + void init(); + void loop(); + void flip(); + private: + uint16_t _oldTouchX, _oldTouchY, _width, _height; + uint32_t _touchdelay; + bool _checklpdelay(int m, uint32_t &tstamp); + tsDirection_e _tsDirection(uint16_t x, uint16_t y); + bool _istouched(); +}; + +extern TouchScreen touchscreen; + +#endif diff --git a/yoRadio/src/displays/conf/displayST7789conf.h b/yoRadio/src/displays/conf/displayST7789conf.h index 657b133..fa7bcd3 100644 --- a/yoRadio/src/displays/conf/displayST7789conf.h +++ b/yoRadio/src/displays/conf/displayST7789conf.h @@ -21,7 +21,7 @@ const ScrollConfig metaConf PROGMEM = {{ TFT_FRAMEWDT, TFT_FRAMEWDT, 3, WA_LEFT }, 140, true, MAX_WIDTH, 5000, 5, 30 }; const ScrollConfig title1Conf PROGMEM = {{ TFT_FRAMEWDT, 50, 2, WA_LEFT }, 140, true, MAX_WIDTH, 5000, 4, 30 }; const ScrollConfig title2Conf PROGMEM = {{ TFT_FRAMEWDT, 70, 2, WA_LEFT }, 140, true, MAX_WIDTH, 5000, 4, 30 }; -const ScrollConfig playlistConf PROGMEM = {{ TFT_FRAMEWDT, 112, 2, WA_LEFT }, 140, true, MAX_WIDTH, 0, 2, 30 }; +const ScrollConfig playlistConf PROGMEM = {{ TFT_FRAMEWDT, 112, 2, WA_LEFT }, 140, true, MAX_WIDTH, 1000, 2, 30 }; const ScrollConfig apTitleConf PROGMEM = {{ TFT_FRAMEWDT, TFT_FRAMEWDT, 3, WA_CENTER }, 140, false, MAX_WIDTH, 0, 4, 20 }; const ScrollConfig apSettConf PROGMEM = {{ TFT_FRAMEWDT, 240-TFT_FRAMEWDT-16, 2, WA_LEFT }, 140, false, MAX_WIDTH, 0, 4, 30 }; const ScrollConfig weatherConf PROGMEM = {{ 8, 87, 2, WA_LEFT }, 140, true, MAX_WIDTH, 0, 4, 30 }; diff --git a/yoRadio/src/displays/conf/displayST7796conf.h b/yoRadio/src/displays/conf/displayST7796conf.h new file mode 100644 index 0000000..ccdd8dd --- /dev/null +++ b/yoRadio/src/displays/conf/displayST7796conf.h @@ -0,0 +1,68 @@ +/************************************************************************************* + ST7796 480X320 displays configuration file. + Copy this file to yoRadio/src/displays/conf/displayST7789conf_custom.h + and modify it + More info on https://github.com/e2002/yoradio/wiki/Widgets#widgets-description +*************************************************************************************/ + +#ifndef displayST7789conf_h +#define displayST7789conf_h + +#define DSP_WIDTH 480 +#define DSP_HEIGHT 320 +#define TFT_FRAMEWDT 10 +#define MAX_WIDTH DSP_WIDTH-TFT_FRAMEWDT*2 +#define PLMITEMS 11 +#define PLMITEMLENGHT 40 +#define PLMITEMHEIGHT 32 + +#define bootLogoTop 110 + +/* SROLLS */ /* {{ left, top, fontsize, align }, buffsize, uppercase, width, scrolldelay, scrolldelta, scrolltime } */ +const ScrollConfig metaConf PROGMEM = {{ TFT_FRAMEWDT, TFT_FRAMEWDT, 4, WA_LEFT }, 140, true, MAX_WIDTH, 5000, 7, 40 }; +const ScrollConfig title1Conf PROGMEM = {{ TFT_FRAMEWDT, 62, 2, WA_LEFT }, 140, true, MAX_WIDTH-6*2*7-6, 5000, 7, 40 }; +const ScrollConfig title2Conf PROGMEM = {{ TFT_FRAMEWDT, 86, 2, WA_LEFT }, 140, true, MAX_WIDTH, 5000, 7, 40 }; +const ScrollConfig playlistConf PROGMEM = {{ TFT_FRAMEWDT, 146, 3, WA_LEFT }, 140, true, MAX_WIDTH, 1000, 7, 40 }; +const ScrollConfig apTitleConf PROGMEM = {{ TFT_FRAMEWDT, TFT_FRAMEWDT, 4, WA_CENTER }, 140, false, MAX_WIDTH, 0, 7, 40 }; +const ScrollConfig apSettConf PROGMEM = {{ TFT_FRAMEWDT, 320-TFT_FRAMEWDT-16, 2, WA_LEFT }, 140, false, MAX_WIDTH, 0, 7, 40 }; +const ScrollConfig weatherConf PROGMEM = {{ TFT_FRAMEWDT, 116, 2, WA_LEFT }, 140, true, MAX_WIDTH, 0, 7, 40 }; + +/* BACKGROUNDS */ /* {{ left, top, fontsize, align }, width, height, outlined } */ +const FillConfig metaBGConf PROGMEM = {{ 0, 0, 0, WA_LEFT }, DSP_WIDTH, 50, false }; +const FillConfig volbarConf PROGMEM = {{ TFT_FRAMEWDT, DSP_HEIGHT-TFT_FRAMEWDT-8, 0, WA_LEFT }, MAX_WIDTH, 8, true }; +const FillConfig playlBGConf PROGMEM = {{ 0, 138, 0, WA_LEFT }, DSP_WIDTH, 36, false }; +const FillConfig heapbarConf PROGMEM = {{ 0, DSP_HEIGHT-2, 0, WA_LEFT }, DSP_WIDTH, 2, false }; + +/* WIDGETS */ /* { left, top, fontsize, align } */ +const WidgetConfig bootstrConf PROGMEM = { 0, 243, 1, WA_CENTER }; +const WidgetConfig bitrateConf PROGMEM = { 6, 62, 2, WA_RIGHT }; +const WidgetConfig voltxtConf PROGMEM = { 0, DSP_HEIGHT-38, 2, WA_CENTER }; +const WidgetConfig iptxtConf PROGMEM = { TFT_FRAMEWDT, DSP_HEIGHT-38, 2, WA_LEFT }; +const WidgetConfig rssiConf PROGMEM = { TFT_FRAMEWDT, DSP_HEIGHT-38, 2, WA_RIGHT }; +const WidgetConfig numConf PROGMEM = { 0, 200, 70, WA_CENTER }; +const WidgetConfig apNameConf PROGMEM = { TFT_FRAMEWDT, 88, 3, WA_CENTER }; +const WidgetConfig apName2Conf PROGMEM = { TFT_FRAMEWDT, 120, 3, WA_CENTER }; +const WidgetConfig apPassConf PROGMEM = { TFT_FRAMEWDT, 173, 3, WA_CENTER }; +const WidgetConfig apPass2Conf PROGMEM = { TFT_FRAMEWDT, 205, 3, WA_CENTER }; +const WidgetConfig clockConf PROGMEM = { 16, 224, 70, WA_RIGHT }; /* 52 is a fixed font size. do not change */ +const WidgetConfig vuConf PROGMEM = { TFT_FRAMEWDT, 136, 1, WA_LEFT }; + +const WidgetConfig bootWdtConf PROGMEM = { 0, 216, 1, WA_CENTER }; +const ProgressConfig bootPrgConf PROGMEM = { 90, 14, 4 }; + +/* BANDS */ /* { onebandwidth, onebandheight, bandsHspace, bandsVspace, numofbands, fadespeed } */ +const VUBandsConfig bandsConf PROGMEM = { 32, 130, 4, 2, 10, 6 }; + +/* STRINGS */ +const char numtxtFmt[] PROGMEM = "%d"; +const char rssiFmt[] PROGMEM = "WiFi %d"; +const char iptxtFmt[] PROGMEM = "%s"; +const char voltxtFmt[] PROGMEM = "%d"; +const char bitrateFmt[] PROGMEM = "%d kBs"; + +/* MOVES */ /* { left, top, width } */ +const MoveConfig clockMove PROGMEM = { 0, 176, -1 }; +const MoveConfig weatherMove PROGMEM = { 8, 120, MAX_WIDTH }; +const MoveConfig weatherMoveVU PROGMEM = { 89, 120, 381 }; + +#endif diff --git a/yoRadio/src/displays/displayGC9106.cpp b/yoRadio/src/displays/displayGC9106.cpp index 368fe53..e8d26d4 100644 --- a/yoRadio/src/displays/displayGC9106.cpp +++ b/yoRadio/src/displays/displayGC9106.cpp @@ -14,7 +14,11 @@ #define TAKE_MUTEX() if(player.mutex_pl) xSemaphoreTake(player.mutex_pl, portMAX_DELAY) #define GIVE_MUTEX() if(player.mutex_pl) xSemaphoreGive(player.mutex_pl) -DspCore::DspCore(): Adafruit_GC9106Ex(TFT_CS, TFT_DC, TFT_RST) { } +#if DSP_HSPI +DspCore::DspCore(): Adafruit_GC9106Ex(&SPI2, TFT_DC, TFT_CS, TFT_RST) {} +#else +DspCore::DspCore(): Adafruit_GC9106Ex(TFT_CS, TFT_DC, TFT_RST) {} +#endif #include "tools/utf8RusGFX.h" diff --git a/yoRadio/src/displays/displayILI9225.cpp b/yoRadio/src/displays/displayILI9225.cpp index 0b0c6f1..1662291 100644 --- a/yoRadio/src/displays/displayILI9225.cpp +++ b/yoRadio/src/displays/displayILI9225.cpp @@ -13,11 +13,8 @@ extern unsigned char yofont10x14[]; #define TAKE_MUTEX() if(player.mutex_pl) xSemaphoreTake(player.mutex_pl, portMAX_DELAY) #define GIVE_MUTEX() if(player.mutex_pl) xSemaphoreGive(player.mutex_pl) -//SPIClass hspi(VSPI); -DspCore::DspCore(): TFT_22_ILI9225(TFT_RST, TFT_DC, TFT_CS, 0) { - -} +DspCore::DspCore(): TFT_22_ILI9225(TFT_RST, TFT_DC, TFT_CS, 0) {} #include "tools/utf8RusGFX.h" @@ -97,7 +94,11 @@ void DspCore::drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color){ void DspCore::initDisplay() { TAKE_MUTEX(); +#if DSP_HSPI + begin(SPI2); +#else begin(); +#endif invert(); flip(); setTextSize(1); diff --git a/yoRadio/src/displays/displayILI9341.cpp b/yoRadio/src/displays/displayILI9341.cpp index c75af0f..71ded06 100644 --- a/yoRadio/src/displays/displayILI9341.cpp +++ b/yoRadio/src/displays/displayILI9341.cpp @@ -10,9 +10,11 @@ #define TAKE_MUTEX() if(player.mutex_pl) xSemaphoreTake(player.mutex_pl, portMAX_DELAY) #define GIVE_MUTEX() if(player.mutex_pl) xSemaphoreGive(player.mutex_pl) -DspCore::DspCore(): Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST) { - -} +#if DSP_HSPI +DspCore::DspCore(): Adafruit_ILI9341(&SPI2, TFT_DC, TFT_CS, TFT_RST) {} +#else +DspCore::DspCore(): Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST) {} +#endif #include "tools/utf8RusGFX.h" diff --git a/yoRadio/src/displays/displayN5110.cpp b/yoRadio/src/displays/displayN5110.cpp index 935dd3b..01aeead 100644 --- a/yoRadio/src/displays/displayN5110.cpp +++ b/yoRadio/src/displays/displayN5110.cpp @@ -23,9 +23,11 @@ const unsigned char logo [] PROGMEM= 0xe0, 0x01, 0xff, 0xc0 }; -DspCore::DspCore(): Adafruit_PCD8544(TFT_DC, TFT_CS, TFT_RST) { - -} +#if DSP_HSPI +DspCore::DspCore(): Adafruit_PCD8544(TFT_DC, TFT_CS, TFT_RST, &SPI2) {} +#else +DspCore::DspCore(): Adafruit_PCD8544(TFT_DC, TFT_CS, TFT_RST) {} +#endif #include "tools/utf8RusGFX.h" diff --git a/yoRadio/src/displays/displaySSD1305.cpp b/yoRadio/src/displays/displaySSD1305.cpp index f5a80fd..90981f8 100644 --- a/yoRadio/src/displays/displaySSD1305.cpp +++ b/yoRadio/src/displays/displaySSD1305.cpp @@ -30,9 +30,11 @@ const unsigned char logo [] PROGMEM= }; #if DSP_MODEL==DSP_SSD1305 -DspCore::DspCore(): Adafruit_SSD1305(128, 64, &SPI, TFT_DC, TFT_RST, TFT_CS, DEF_SPI_FREQ) { - -} + #if DSP_HSPI + DspCore::DspCore(): Adafruit_SSD1305(128, 64, &SPI2, TFT_DC, TFT_RST, TFT_CS, DEF_SPI_FREQ) {} + #else + DspCore::DspCore(): Adafruit_SSD1305(128, 64, &SPI, TFT_DC, TFT_RST, TFT_CS, DEF_SPI_FREQ) {} + #endif #else #include TwoWire I2CSSD1305 = TwoWire(0); diff --git a/yoRadio/src/displays/displayST7735.cpp b/yoRadio/src/displays/displayST7735.cpp index 0179604..ca2ed6d 100644 --- a/yoRadio/src/displays/displayST7735.cpp +++ b/yoRadio/src/displays/displayST7735.cpp @@ -14,9 +14,11 @@ #define TAKE_MUTEX() if(player.mutex_pl) xSemaphoreTake(player.mutex_pl, portMAX_DELAY) #define GIVE_MUTEX() if(player.mutex_pl) xSemaphoreGive(player.mutex_pl) -DspCore::DspCore(): Adafruit_ST7735(&SPI, TFT_CS, TFT_DC, TFT_RST) { - -} +#if DSP_HSPI +DspCore::DspCore(): Adafruit_ST7735(&SPI2, TFT_CS, TFT_DC, TFT_RST) {} +#else +DspCore::DspCore(): Adafruit_ST7735(&SPI, TFT_CS, TFT_DC, TFT_RST) {} +#endif #include "tools/utf8RusGFX.h" diff --git a/yoRadio/src/displays/displayST7789.cpp b/yoRadio/src/displays/displayST7789.cpp index 8da1a0b..baf8d97 100644 --- a/yoRadio/src/displays/displayST7789.cpp +++ b/yoRadio/src/displays/displayST7789.cpp @@ -15,7 +15,11 @@ #define TAKE_MUTEX() if(player.mutex_pl) xSemaphoreTake(player.mutex_pl, portMAX_DELAY) #define GIVE_MUTEX() if(player.mutex_pl) xSemaphoreGive(player.mutex_pl) +#if DSP_HSPI +DspCore::DspCore(): Adafruit_ST7789(&SPI2, TFT_CS, TFT_DC, TFT_RST) {} +#else DspCore::DspCore(): Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST) {} +#endif #include "tools/utf8RusGFX.h" diff --git a/yoRadio/src/displays/displayST7796.cpp b/yoRadio/src/displays/displayST7796.cpp new file mode 100644 index 0000000..7aff7ad --- /dev/null +++ b/yoRadio/src/displays/displayST7796.cpp @@ -0,0 +1,216 @@ +#include "../core/options.h" +#if DSP_MODEL==DSP_ST7796 + +#include "displayST7796.h" +//#include +#include "fonts/bootlogo.h" +#include "../core/player.h" +#include "../core/config.h" +#include "../core/network.h" + +#ifndef DEF_SPI_FREQ + #define DEF_SPI_FREQ 40000000UL /* set it to 0 for system default */ +#endif + +#define TAKE_MUTEX() if(player.mutex_pl) xSemaphoreTake(player.mutex_pl, portMAX_DELAY) +#define GIVE_MUTEX() if(player.mutex_pl) xSemaphoreGive(player.mutex_pl) + +#if DSP_HSPI +DspCore::DspCore(): Adafruit_ST7796S_kbv(&SPI2, TFT_DC, TFT_CS, TFT_RST) {} +#else +DspCore::DspCore(): Adafruit_ST7796S_kbv(TFT_CS, TFT_DC, TFT_RST) {} +#endif + +#include "tools/utf8RusGFX.h" + +void DspCore::initDisplay() { + begin(); + if(DEF_SPI_FREQ > 0) setSPISpeed(DEF_SPI_FREQ); + invert(); + cp437(true); + flip(); + setTextWrap(false); + setTextSize(1); + fillScreen(0x0000); +} + +void DspCore::drawLogo(uint16_t top) { drawRGBBitmap((width() - 99) / 2, top, bootlogo2, 99, 64); } + +void DspCore::drawPlaylist(uint16_t currentItem, char* currentItemText) { + for (byte i = 0; i < PLMITEMS; i++) { + plMenu[i][0] = '\0'; + } + config.fillPlMenu(plMenu, currentItem - 5, PLMITEMS); + setTextSize(3); + int yStart = (height() / 2 - PLMITEMHEIGHT / 2) - PLMITEMHEIGHT * (PLMITEMS - 1) / 2 + 3; + + for (byte i = 0; i < PLMITEMS; i++) { + if (i == 5) { + strlcpy(currentItemText, plMenu[i], PLMITEMLENGHT - 1); + } else { + setTextColor(config.theme.playlist[abs(i - 5)-1], config.theme.background); + setCursor(TFT_FRAMEWDT, yStart + i * PLMITEMHEIGHT); + fillRect(0, yStart + i * PLMITEMHEIGHT - 1, width(), PLMITEMHEIGHT - 6, config.theme.background); + print(utf8Rus(plMenu[i], true)); + } + } +} + +void DspCore::clearDsp(bool black) { fillScreen(black?0:config.theme.background); } + +GFXglyph *pgm_read_glyph_ptr(const GFXfont *gfxFont, uint8_t c) { + return gfxFont->glyph + c; +} + +uint8_t DspCore::_charWidth(unsigned char c){ + GFXglyph *glyph = pgm_read_glyph_ptr(&DS_DIGI56pt7b, c - 0x20); + return pgm_read_byte(&glyph->xAdvance); +} + +uint16_t DspCore::textWidth(const char *txt){ + uint16_t w = 0, l=strlen(txt); + for(uint16_t c=0;c0) + dsp.fillRect(_olddateleft, clockTop+10, _olddatewidth, CHARHEIGHT, config.theme.background); + setTextColor(config.theme.date, config.theme.background); + setCursor(_dateleft, clockTop+15); + setTextSize(2); + print(_dateBuf); /* print date */ + strlcpy(_oldDateBuf, _dateBuf, sizeof(_dateBuf)); + _olddatewidth = _datewidth; + _olddateleft = _dateleft; + setTextSize(4); + setTextColor(config.theme.dow, config.theme.background); + setCursor(width() - 8 - clockRightSpace - CHARWIDTH*4*2, clockTop-CHARHEIGHT*4+4); + print(utf8Rus(dow[network.timeinfo.tm_wday], false)); /* print dow */ +} + +void DspCore::_clockTime(){ + if(_oldtimeleft>0) dsp.fillRect(_oldtimeleft, clockTop-clockTimeHeight+1, _oldtimewidth, clockTimeHeight, config.theme.background); + _timeleft = width()-clockRightSpace-CHARWIDTH*4*2-24-_timewidth; + setTextSize(1); + setFont(&DS_DIGI56pt7b); + setTextColor(config.theme.clock, config.theme.background); + setCursor(_timeleft, clockTop); + print(_timeBuf); + setFont(); + strlcpy(_oldTimeBuf, _timeBuf, sizeof(_timeBuf)); + _oldtimewidth = _timewidth; + _oldtimeleft = _timeleft; + drawFastVLine(width()-clockRightSpace-CHARWIDTH*4*2-18, clockTop-clockTimeHeight, clockTimeHeight+4, config.theme.div); /*divider vert*/ + drawFastHLine(width()-clockRightSpace-CHARWIDTH*4*2-18, clockTop-clockTimeHeight+37, 59, config.theme.div); /*divider hor*/ + sprintf(_buffordate, "%2d %s %d", network.timeinfo.tm_mday,mnths[network.timeinfo.tm_mon], network.timeinfo.tm_year+1900); + strlcpy(_dateBuf, utf8Rus(_buffordate, true), sizeof(_dateBuf)); + _datewidth = strlen(_dateBuf) * CHARWIDTH*2; + _dateleft = width() - 10 - clockRightSpace - _datewidth; +} + +void DspCore::printClock(uint16_t top, uint16_t rightspace, uint16_t timeheight, bool redraw){ + clockTop = top; + clockRightSpace = rightspace; + clockTimeHeight = timeheight; + strftime(_timeBuf, sizeof(_timeBuf), "%H:%M", &network.timeinfo); + if(strcmp(_oldTimeBuf, _timeBuf)!=0 || redraw){ + _getTimeBounds(); + _clockTime(); + if(strcmp(_oldDateBuf, _dateBuf)!=0 || redraw) _clockDate(); + } + _clockSeconds(); +} + +void DspCore::clearClock(){ + dsp.fillRect(_timeleft, clockTop-clockTimeHeight, _timewidth+CHARWIDTH*3*2+24, clockTimeHeight+12+CHARHEIGHT, config.theme.background); +} + +void DspCore::startWrite(void) { + TAKE_MUTEX(); + Adafruit_ST7796S_kbv::startWrite(); +} + +void DspCore::endWrite(void) { + Adafruit_ST7796S_kbv::endWrite(); + GIVE_MUTEX(); +} + +void DspCore::loop(bool force) { + +} + +void DspCore::charSize(uint8_t textsize, uint8_t& width, uint16_t& height){ + width = textsize * CHARWIDTH; + height = textsize * CHARHEIGHT; +} + +void DspCore::setTextSize(uint8_t s){ + Adafruit_GFX::setTextSize(s); +} + +void DspCore::flip(){ + setRotation(config.store.flipscreen?3:1); +} + +void DspCore::invert(){ + invertDisplay(config.store.invertdisplay); +} + +void DspCore::sleep(void) { + sendCommand(ST7796S_SLPIN); delay(150); sendCommand(ST7796S_DISPOFF); delay(150); +} + +void DspCore::wake(void) { + sendCommand(ST7796S_DISPON); delay(150); sendCommand(ST7796S_SLPOUT); delay(150); +} + +void DspCore::writePixel(int16_t x, int16_t y, uint16_t color) { + if(_clipping){ + if ((x < _cliparea.left) || (x > _cliparea.left+_cliparea.width) || (y < _cliparea.top) || (y > _cliparea.top + _cliparea.height)) return; + } + Adafruit_ST7796S_kbv::writePixel(x, y, color); +} + +void DspCore::writeFillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) { + if(_clipping){ + if ((x < _cliparea.left) || (x >= _cliparea.left+_cliparea.width) || (y < _cliparea.top) || (y > _cliparea.top + _cliparea.height)) return; + } + Adafruit_ST7796S_kbv::writeFillRect(x, y, w, h, color); +} + +void DspCore::setClipping(clipArea ca){ + _cliparea = ca; + _clipping = true; +} + +void DspCore::clearClipping(){ + _clipping = false; +} + +void DspCore::setNumFont(){ + setFont(&DS_DIGI56pt7b); + setTextSize(1); +} +#endif diff --git a/yoRadio/src/displays/displayST7796.h b/yoRadio/src/displays/displayST7796.h new file mode 100644 index 0000000..586f85b --- /dev/null +++ b/yoRadio/src/displays/displayST7796.h @@ -0,0 +1,35 @@ +#ifndef displayST7789_h +#define displayST7789_h +#include "../core/options.h" + +#include "Arduino.h" +#include +//#include +#include "../Adafruit_ST7796S/Adafruit_ST7796S_kbv.h" +#include "fonts/DS_DIGI56pt7b.h" // https://tchapi.github.io/Adafruit-GFX-Font-Customiser/ +#include "tools/l10n.h" + +#define CHARWIDTH 6 +#define CHARHEIGHT 8 + +typedef GFXcanvas16 Canvas; +#include "widgets/widgets.h" +#include "widgets/pages.h" + +#if __has_include("conf/displayST7796conf_custom.h") + #include "conf/displayST7796conf_custom.h" +#else + #include "conf/displayST7796conf.h" +#endif + +#define BOOT_PRG_COLOR 0xE68B +#define BOOT_TXT_COLOR 0xFFFF +#define PINK 0xF97F + +class DspCore: public Adafruit_ST7796S_kbv { +#include "tools/commongfx.h" +}; + +extern DspCore dsp; + +#endif diff --git a/yoRadio/src/displays/dspcore.h b/yoRadio/src/displays/dspcore.h index 18b7fa6..769ae03 100644 --- a/yoRadio/src/displays/dspcore.h +++ b/yoRadio/src/displays/dspcore.h @@ -34,6 +34,8 @@ #include "displayCustom.h" #elif DSP_MODEL==DSP_ILI9225 #include "displayILI9225.h" +#elif DSP_MODEL==DSP_ST7796 + #include "displayST7796.h" #endif //extern DspCore dsp; diff --git a/yoRadio/src/displays/fonts/DS_DIGI56pt7b.h b/yoRadio/src/displays/fonts/DS_DIGI56pt7b.h new file mode 100644 index 0000000..cd19b37 --- /dev/null +++ b/yoRadio/src/displays/fonts/DS_DIGI56pt7b.h @@ -0,0 +1,320 @@ +const uint8_t DS_DIGI56pt7bBitmaps[] PROGMEM = { + 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0x88, 0xFF, + 0xFF, 0xFF, 0xFF, 0xC7, 0x1F, 0xFF, 0xFF, 0xFF, 0xE3, 0xE3, 0xFF, 0xFF, + 0xFF, 0xF1, 0xFC, 0x7F, 0xFF, 0xFF, 0xF8, 0xFF, 0x8F, 0xFF, 0xFF, 0xFC, + 0x7F, 0xF0, 0x00, 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xFF, + 0x80, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0x00, + 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x00, + 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x7F, + 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x00, 0x07, 0xFF, 0xE0, + 0x00, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, + 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x01, + 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xFF, + 0x80, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0x00, + 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x00, + 0x03, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x7D, 0xC0, 0x00, 0x00, 0x00, 0x0E, + 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, + 0x00, 0x01, 0x1C, 0x00, 0x00, 0x00, 0x00, 0xEF, 0x80, 0x00, 0x00, 0x00, + 0x7F, 0xF0, 0x00, 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xFF, + 0x80, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0x00, + 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x00, + 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x7F, + 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x00, 0x07, 0xFF, 0xE0, + 0x00, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, + 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x01, + 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xFF, + 0x80, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0x00, + 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x00, + 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0xFF, 0xE3, 0xFF, 0xFF, 0xFF, 0x1F, + 0xF1, 0xFF, 0xFF, 0xFF, 0xE3, 0xF8, 0xFF, 0xFF, 0xFF, 0xFC, 0x7C, 0x7F, + 0xFF, 0xFF, 0xFF, 0x8E, 0x3F, 0xFF, 0xFF, 0xFF, 0xF1, 0x1F, 0xFF, 0xFF, + 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x04, 0x18, 0x71, + 0xE7, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xCF, 0x8E, + 0x08, 0x00, 0x00, 0x00, 0x83, 0x8F, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xEF, 0xCF, 0x8F, 0x0E, 0x0C, 0x08, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, + 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xC4, + 0x1F, 0xFF, 0xFF, 0xFF, 0xE3, 0x03, 0xFF, 0xFF, 0xFF, 0xF1, 0xC0, 0x7F, + 0xFF, 0xFF, 0xF8, 0xF0, 0x0F, 0xFF, 0xFF, 0xFC, 0x7C, 0x00, 0x00, 0x00, + 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x07, + 0xF0, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, + 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, + 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, + 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x01, 0xFC, + 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, + 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, + 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x07, + 0xF0, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, + 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, + 0x00, 0x00, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0x1F, 0x03, 0xFF, 0xFF, 0xFF, + 0xE3, 0x81, 0xFF, 0xFF, 0xFF, 0xFC, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, + 0x1F, 0xFF, 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0xFF, 0xE0, 0x08, 0x7F, + 0xFF, 0xFF, 0xF0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, + 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, + 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xFE, + 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, + 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, + 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x03, + 0xF8, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, + 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, + 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, + 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xFE, + 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, + 0x00, 0x00, 0x03, 0xE3, 0xFF, 0xFF, 0xFF, 0x00, 0xF1, 0xFF, 0xFF, 0xFF, + 0xE0, 0x38, 0xFF, 0xFF, 0xFF, 0xFC, 0x0C, 0x7F, 0xFF, 0xFF, 0xFF, 0x82, + 0x3F, 0xFF, 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, + 0xFF, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFF, 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, + 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xFF, 0xE1, + 0x07, 0xFF, 0xFF, 0xFF, 0xC3, 0x03, 0xFF, 0xFF, 0xFF, 0x87, 0x01, 0xFF, + 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, + 0x3F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, + 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, + 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, + 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, + 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, + 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, + 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, + 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, + 0x00, 0x00, 0x3F, 0x03, 0xFF, 0xFF, 0xFF, 0x1F, 0x07, 0xFF, 0xFF, 0xFF, + 0x8E, 0x0F, 0xFF, 0xFF, 0xFF, 0xC4, 0x1F, 0xFF, 0xFF, 0xFF, 0xE0, 0x0F, + 0xFF, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xFF, + 0xFF, 0x04, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x1F, + 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, + 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, + 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, + 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, + 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, + 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, + 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, + 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x01, 0xFF, 0xFF, 0xFF, 0x1F, + 0x03, 0xFF, 0xFF, 0xFF, 0x8F, 0x07, 0xFF, 0xFF, 0xFF, 0xC7, 0x0F, 0xFF, + 0xFF, 0xFF, 0xE3, 0x1F, 0xFF, 0xFF, 0xFF, 0xF1, 0x3F, 0xFF, 0xFF, 0xFF, + 0xF8, 0x7F, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x00, 0x3F, + 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x00, 0x07, 0xFF, 0xE0, + 0x00, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, + 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x01, + 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xFF, + 0x80, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0x00, + 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x00, + 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x7F, + 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x00, 0x07, 0xFF, 0xE0, + 0x00, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, + 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x00, 0x03, 0xFF, 0x9F, 0xFF, 0xFF, 0xFE, + 0x7D, 0xCF, 0xFF, 0xFF, 0xFF, 0xCE, 0x27, 0xFF, 0xFF, 0xFF, 0xF9, 0x03, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x80, 0x0F, 0xFF, + 0xFF, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0xFF, 0xE1, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x3F, + 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, + 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, + 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x01, + 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, + 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, + 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, + 0x07, 0xF0, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7F, + 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, + 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, + 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, + 0x7C, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x01, 0xC0, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, + 0xFF, 0x88, 0xFF, 0xFF, 0xFF, 0xFF, 0xC3, 0x1F, 0xFF, 0xFF, 0xFF, 0xE0, + 0xE3, 0xFF, 0xFF, 0xFF, 0xF0, 0x3C, 0x7F, 0xFF, 0xFF, 0xF8, 0x0F, 0x8F, + 0xFF, 0xFF, 0xFC, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, + 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x00, + 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x3F, + 0x80, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x00, + 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, + 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, + 0xFE, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x0F, 0xE0, + 0x00, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, + 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x00, + 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x3F, + 0x80, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x03, 0xE7, 0xFF, + 0xFF, 0xFF, 0x80, 0x73, 0xFF, 0xFF, 0xFF, 0xF0, 0x09, 0xFF, 0xFF, 0xFF, + 0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x1F, 0xFF, 0xFF, 0xFF, 0xE0, + 0x03, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0xFF, 0xF8, 0x40, 0x00, + 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, + 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x01, + 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, + 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, + 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, + 0x07, 0xF0, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7F, + 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, + 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, + 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x01, + 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, + 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x03, 0xFF, + 0xFF, 0xFF, 0x1F, 0x01, 0xFF, 0xFF, 0xFF, 0xE3, 0xC0, 0xFF, 0xFF, 0xFF, + 0xFC, 0x70, 0x7F, 0xFF, 0xFF, 0xFF, 0x8C, 0x3F, 0xFF, 0xFF, 0xFF, 0xF1, + 0x1F, 0xFF, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x3F, + 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0x88, 0xFF, 0xFF, + 0xFF, 0xFF, 0xC3, 0x1F, 0xFF, 0xFF, 0xFF, 0xE0, 0xE3, 0xFF, 0xFF, 0xFF, + 0xF0, 0x3C, 0x7F, 0xFF, 0xFF, 0xF8, 0x0F, 0x8F, 0xFF, 0xFF, 0xFC, 0x03, + 0xF0, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, + 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, + 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, + 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xFE, + 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, + 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, + 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x03, + 0xF8, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, + 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, + 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, + 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x03, 0xE7, 0xFF, 0xFF, 0xFF, 0x80, 0x73, + 0xFF, 0xFF, 0xFF, 0xF0, 0x09, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xC0, 0x1F, 0xFF, 0xFF, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0xFF, + 0xF0, 0x08, 0x7F, 0xFF, 0xFF, 0xF8, 0x47, 0x00, 0x00, 0x00, 0x00, 0x3B, + 0xE0, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x80, + 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x00, + 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x00, 0x07, + 0xFF, 0xE0, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0xFE, + 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, + 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, + 0x1F, 0xFF, 0x80, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x01, 0xFF, + 0xF8, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x80, + 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x00, + 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x00, 0x07, + 0xFF, 0xC0, 0x00, 0x00, 0x00, 0xFF, 0xE3, 0xFF, 0xFF, 0xFF, 0x1F, 0xF1, + 0xFF, 0xFF, 0xFF, 0xE3, 0xF8, 0xFF, 0xFF, 0xFF, 0xFC, 0x7C, 0x7F, 0xFF, + 0xFF, 0xFF, 0x8E, 0x3F, 0xFF, 0xFF, 0xFF, 0xF1, 0x1F, 0xFF, 0xFF, 0xFF, + 0xFE, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x3F, 0xFF, 0xFF, 0xFF, 0xFC, + 0x1F, 0xFF, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xFF, 0xF1, 0x07, 0xFF, + 0xFF, 0xFF, 0xE3, 0x03, 0xFF, 0xFF, 0xFF, 0xC7, 0x01, 0xFF, 0xFF, 0xFF, + 0x8F, 0x00, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, + 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, + 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, + 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, + 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, + 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, + 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, + 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, + 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, + 0x3F, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, + 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, + 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, + 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, + 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, + 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, + 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, + 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, + 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, + 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, + 0xFF, 0xFF, 0x88, 0xFF, 0xFF, 0xFF, 0xFF, 0xC7, 0x1F, 0xFF, 0xFF, 0xFF, + 0xE3, 0xE3, 0xFF, 0xFF, 0xFF, 0xF1, 0xFC, 0x7F, 0xFF, 0xFF, 0xF8, 0xFF, + 0x8F, 0xFF, 0xFF, 0xFC, 0x7F, 0xF0, 0x00, 0x00, 0x00, 0x3F, 0xFE, 0x00, + 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, + 0x01, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x1F, + 0xFF, 0x80, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x01, 0xFF, 0xF8, + 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, + 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x00, 0x00, + 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x00, 0x07, 0xFF, + 0xE0, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, + 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, + 0x01, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x1F, + 0xFF, 0x80, 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0xFF, 0xE7, + 0xFF, 0xFF, 0xFF, 0x9F, 0x73, 0xFF, 0xFF, 0xFF, 0xF3, 0x89, 0xFF, 0xFF, + 0xFF, 0xFE, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x1F, 0xFF, 0xFF, 0xFF, + 0xE0, 0x03, 0xFF, 0xFF, 0xFF, 0xF0, 0x08, 0x7F, 0xFF, 0xFF, 0xF8, 0x47, + 0x00, 0x00, 0x00, 0x00, 0x3B, 0xE0, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, + 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, + 0x01, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x1F, + 0xFF, 0x80, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x01, 0xFF, 0xF8, + 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, + 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x00, 0x00, + 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x00, 0x07, 0xFF, + 0xE0, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, + 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, + 0x01, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x1F, + 0xFF, 0x80, 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0xFF, 0xE3, + 0xFF, 0xFF, 0xFF, 0x1F, 0xF1, 0xFF, 0xFF, 0xFF, 0xE3, 0xF8, 0xFF, 0xFF, + 0xFF, 0xFC, 0x7C, 0x7F, 0xFF, 0xFF, 0xFF, 0x8E, 0x3F, 0xFF, 0xFF, 0xFF, + 0xF1, 0x1F, 0xFF, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, + 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0x88, 0xFF, + 0xFF, 0xFF, 0xFF, 0xC7, 0x1F, 0xFF, 0xFF, 0xFF, 0xE3, 0xE3, 0xFF, 0xFF, + 0xFF, 0xF1, 0xFC, 0x7F, 0xFF, 0xFF, 0xF8, 0xFF, 0x8F, 0xFF, 0xFF, 0xFC, + 0x7F, 0xF0, 0x00, 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xFF, + 0x80, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0x00, + 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x00, + 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x7F, + 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x00, 0x07, 0xFF, 0xE0, + 0x00, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, + 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x01, + 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xFF, + 0x80, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0x00, + 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x00, + 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0x9F, + 0x73, 0xFF, 0xFF, 0xFF, 0xF3, 0x89, 0xFF, 0xFF, 0xFF, 0xFE, 0x40, 0xFF, + 0xFF, 0xFF, 0xFF, 0xC0, 0x1F, 0xFF, 0xFF, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, + 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0xFF, 0xF8, 0x40, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, + 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, + 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, + 0x07, 0xF0, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7F, + 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, + 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, + 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x01, + 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, + 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, + 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, + 0x07, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x03, 0xFF, 0xFF, 0xFF, 0x1F, + 0x01, 0xFF, 0xFF, 0xFF, 0xE3, 0xC0, 0xFF, 0xFF, 0xFF, 0xFC, 0x70, 0x7F, + 0xFF, 0xFF, 0xFF, 0x8C, 0x3F, 0xFF, 0xFF, 0xFF, 0xF1, 0x1F, 0xFF, 0xFF, + 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, + 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, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00 +}; + +const GFXglyph DS_DIGI56pt7bGlyphs[] PROGMEM = { + { 0, 0, 0, 24, 0, 1 }, // 0x20 ' ' + { 0, 0, 0, 0, 0, 0 }, // 0x21 '!' + { 0, 0, 0, 0, 0, 0 }, // 0x22 '"' + { 0, 0, 0, 0, 0, 0 }, // 0x23 '#' + { 0, 0, 0, 0, 0, 0 }, // 0x24 '$' + { 0, 0, 0, 0, 0, 0 }, // 0x25 '%' + { 0, 0, 0, 0, 0, 0 }, // 0x26 '&' + { 0, 0, 0, 0, 0, 0 }, // 0x27 ''' + { 0, 0, 0, 0, 0, 0 }, // 0x28 '(' + { 0, 0, 0, 0, 0, 0 }, // 0x29 ')' + { 0, 0, 0, 0, 0, 0 }, // 0x2A '*' + { 0, 0, 0, 0, 0, 0 }, // 0x2B '+' + { 0, 0, 0, 0, 0, 0 }, // 0x2C ',' + { 0, 0, 0, 0, 0, 0 }, // 0x2D '-' + { 0, 0, 0, 0, 0, 0 }, // 0x2E '.' + { 0, 0, 0, 0, 0, 0 }, // 0x2F '/' + { 0, 42, 70, 54, 6, -69 }, // 0x30 '0' + { 368, 7, 68, 29, 10, -68 }, // 0x31 '1' + { 428, 42, 70, 54, 6, -69 }, // 0x32 '2' + { 796, 40, 70, 54, 7, -69 }, // 0x33 '3' + { 1146, 42, 68, 54, 6, -68 }, // 0x34 '4' + { 1503, 42, 70, 54, 6, -69 }, // 0x35 '5' + { 1871, 42, 70, 54, 6, -69 }, // 0x36 '6' + { 2239, 40, 69, 54, 7, -69 }, // 0x37 '7' + { 2584, 42, 70, 54, 6, -69 }, // 0x38 '8' + { 2952, 42, 70, 54, 6, -69 }, // 0x39 '9' + { 3320, 7, 59, 24, 8, -58 } // 0x3A ':' +}; + +const GFXfont DS_DIGI56pt7b PROGMEM = { + (uint8_t *)DS_DIGI56pt7bBitmaps, + (GFXglyph *)DS_DIGI56pt7bGlyphs, 0x20, 0x3A, 110 }; + +// Approx. 6564 bytes