Merge pull request #248 from SSYYL/master

Added 4-color e-Paper support
This commit is contained in:
Wilson 2022-07-28 18:10:38 +08:00 committed by GitHub
commit 979184d047
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
112 changed files with 30796 additions and 1173 deletions

View file

@ -0,0 +1,266 @@
/**
* @filename : epd1in64g.cpp
* @brief : Implements for e-paper library
* @author : Waveshare
*
* Copyright (C) Waveshare 2022/7/22
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documnetation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include <stdlib.h>
#include "epd1in64g.h"
Epd::~Epd() {
};
Epd::Epd() {
reset_pin = RST_PIN;
dc_pin = DC_PIN;
cs_pin = CS_PIN;
busy_pin = BUSY_PIN;
WIDTH = EPD_WIDTH;
HEIGHT = EPD_HEIGHT;
};
int Epd::Init() {
/* this calls the peripheral hardware interface, see epdif */
if (IfInit() != 0) {
return -1;
}
Reset();
SendCommand(0x66);
SendData(0x49);
SendData(0x55);
SendData(0x13);
SendData(0x5D);
SendCommand(0x66);
SendData(0x49);
SendData(0x55);
SendCommand(0xB0);
SendData(0x03);//1 boost 20211113
SendCommand(0x00);
SendData(0x4F);
SendData(0x6B);
SendCommand(0x03);
SendData(0x00);
SendCommand(0xF0);
SendData(0xF6);
SendData(0x0D);
SendData(0x00);
SendData(0x00);
SendData(0x00);
//20220303
SendCommand(0x06);
SendData(0xCF);
SendData(0xDF);
SendData(0x0F);
SendCommand(0x41);
SendData(0x00);
SendCommand(0x50);
SendData(0x30);
SendCommand(0x60);
SendData(0x0C);
SendData(0x05);
SendCommand(0x61);
SendData(0xA8);
SendData(0x00);
SendData(0xA8);
SendCommand(0x84);
SendData(0x01);
return 0;
}
/**
* @brief: basic function for sending commands
*/
void Epd::SendCommand(unsigned char command) {
DigitalWrite(dc_pin, LOW);
SpiTransfer(command);
}
/**
* @brief: basic function for sending data
*/
void Epd::SendData(unsigned char data) {
DigitalWrite(dc_pin, HIGH);
SpiTransfer(data);
}
/**
* @brief: Wait until the busy_pin goes LOW
*/
void Epd::ReadBusyH(void) {
Serial.print("e-Paper busy H\r\n ");
while(DigitalRead(busy_pin) == LOW) { //LOW: busy, HIGH: idle
DelayMs(5);
}
Serial.print("e-Paper busy release H\r\n ");
}
void Epd::ReadBusyL(void) {
Serial.print("e-Paper busy L\r\n ");
while(DigitalRead(busy_pin) == HIGH) { //LOW: idle, HIGH: busy
DelayMs(5);
}
Serial.print("e-Paper busy release L\r\n ");
}
/**
* @brief: module reset.
* often used to awaken the module in deep sleep,
* see Epd::Sleep();
*/
void Epd::Reset(void) {
DigitalWrite(reset_pin, HIGH);
DelayMs(20);
DigitalWrite(reset_pin, LOW); //module reset
DelayMs(2);
DigitalWrite(reset_pin, HIGH);
DelayMs(20);
}
/******************************************************************************
function : Turn On Display
parameter:
******************************************************************************/
void Epd::TurnOnDisplay(void)
{
SendCommand(0x12); // DISPLAY_REFRESH
SendData(0x01);
ReadBusyH();
SendCommand(0x02); // POWER_OFF
SendData(0X00);
ReadBusyH();
}
/******************************************************************************
function : Clear screen
parameter:
******************************************************************************/
void Epd::Clear(UBYTE color)
{
UWORD Width, Height;
Width = (WIDTH % 4 == 0)? (WIDTH / 4 ): (WIDTH / 4 + 1);
Height = HEIGHT;
SendCommand(0x68);
SendData(0x01);
SendCommand(0x04);
ReadBusyH();
SendCommand(0x10);
for (UWORD j = 0; j < Height; j++) {
for (UWORD i = 0; i < Width; i++) {
for(UBYTE k = 0; k < 4; k++) {
SendData(color);
}
}
}
SendCommand(0x68);
SendData(0x00);
TurnOnDisplay();
}
/******************************************************************************
function : Sends the image buffer in RAM to e-Paper and displays
parameter:
******************************************************************************/
void Epd::Display(UBYTE *Image)
{
UWORD Width, Height;
Width = (WIDTH % 4 == 0)? (WIDTH / 4 ): (WIDTH / 4 + 1);
Height = HEIGHT;
SendCommand(0x68);
SendData(0x01);
SendCommand(0x04);
ReadBusyH();
SendCommand(0x10);
for (UWORD j = 0; j < Height; j++) {
for (UWORD i = 0; i < Width; i++) {
SendData(pgm_read_byte(&Image[i + j * Width]));
}
}
TurnOnDisplay();
}
void Epd::Display_part(UBYTE *Image, UWORD xstart, UWORD ystart, UWORD image_width, UWORD image_heigh)
{
UWORD Width, Height;
Width = (WIDTH % 4 == 0)? (WIDTH / 4 ): (WIDTH / 4 + 1);
Height = HEIGHT;
SendCommand(0x68);
SendData(0x01);
SendCommand(0x04);
ReadBusyH();
SendCommand(0x10);
for (UWORD i = 0; i < Height; i++) {
for (UWORD j = 0; j < Width; j++) {
if((j >= xstart/4) && (j < (image_width + xstart)/4) && (i >= ystart) && (i <= (ystart + image_heigh)) )
{
SendData(Image[(i-ystart) * image_width/4 + j - xstart/4]);
// Serial.print(Image[(i-ystart) * image_width/8 + j - xstart], HEX);
// Serial.print(" ");
}
else
{
SendData(0x55);
}
}
}
TurnOnDisplay();
}
/******************************************************************************
function : Enter sleep mode
parameter:
******************************************************************************/
void Epd::Sleep(void)
{
SendCommand(0x02); // POWER_OFF
SendData(0X00);
SendCommand(0x07); // DEEP_SLEEP
SendData(0XA5);
}
/* END OF FILE */

View file

@ -0,0 +1,75 @@
/**
* @filename : epd1in64g.h
* @brief : Header file for e-paper display library epd1in64g.cpp
* @author : Waveshare
*
* Copyright (C) Waveshare 2022/7/22
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documnetation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef EPD1IN64G_H
#define EPD1IN64G_H
#include "epdif.h"
// Display resolution
#define EPD_WIDTH 168
#define EPD_HEIGHT 168
//colour
#define black 0x00
#define white 0x55
#define yellow 0xAA
#define red 0xFF
#define UWORD unsigned int
#define UBYTE unsigned char
#define UDOUBLE unsigned long
class Epd : EpdIf {
public:
unsigned long WIDTH;
unsigned long HEIGHT;
Epd();
~Epd();
int Init();
void SendCommand(unsigned char command);
void SendData(unsigned char data);
void Reset(void);
void ReadBusyH(void);
void ReadBusyL(void);
void TurnOnDisplay(void);
void Clear(UBYTE color);
void Display(UBYTE *Image);
void Display_part(UBYTE *Image, UWORD xstart, UWORD ystart, UWORD image_width, UWORD image_heigh);
void Sleep(void);
private:
unsigned int reset_pin;
unsigned int dc_pin;
unsigned int cs_pin;
unsigned int busy_pin;
};
#endif /* EPD1IN54_H */
/* END OF FILE */

View file

@ -0,0 +1,60 @@
/**
* @filename : epd1in64g-demo.ino
* @brief : 1.64inch e-paper (G) display demo
* @author : Waveshare
*
* Copyright (C) Waveshare 2022/7/22
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documnetation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include <SPI.h>
#include "epd1in64g.h"
#include "imagedata.h"
Epd epd;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.print("e-Paper init ");
if (epd.Init() != 0) {
Serial.print("e-Paper init failed");
return;
}
Serial.print("While \r\n");
epd.Clear(white); // While
delay(2000);
epd.Display(IMAGE_DATA);
delay(2000);
Serial.print("Clear...\r\n");
epd.Clear(white);
delay(2000);
Serial.print("Goto Sleep...\r\n");
epd.Sleep();
}
void loop() {
}

View file

@ -0,0 +1,64 @@
/**
* @filename : epdif.cpp
* @brief : Implements EPD interface functions
* Users have to implement all the functions in epdif.cpp
* @author : Yehui from Waveshare
*
* Copyright (C) Waveshare August 10 2017
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documnetation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "epdif.h"
#include <spi.h>
EpdIf::EpdIf() {
};
EpdIf::~EpdIf() {
};
void EpdIf::DigitalWrite(int pin, int value) {
digitalWrite(pin, value);
}
int EpdIf::DigitalRead(int pin) {
return digitalRead(pin);
}
void EpdIf::DelayMs(unsigned int delaytime) {
delay(delaytime);
}
void EpdIf::SpiTransfer(unsigned char data) {
digitalWrite(CS_PIN, LOW);
SPI.transfer(data);
digitalWrite(CS_PIN, HIGH);
}
int EpdIf::IfInit(void) {
pinMode(CS_PIN, OUTPUT);
pinMode(RST_PIN, OUTPUT);
pinMode(DC_PIN, OUTPUT);
pinMode(BUSY_PIN, INPUT);
SPI.begin();
SPI.beginTransaction(SPISettings(2000000, MSBFIRST, SPI_MODE0));
return 0;
}

51
Arduino/epd1in64g/epdif.h Normal file
View file

@ -0,0 +1,51 @@
/**
* @filename : epdif.h
* @brief : Header file of epdif.cpp providing EPD interface functions
* Users have to implement all the functions in epdif.cpp
* @author : Yehui from Waveshare
*
* Copyright (C) Waveshare August 10 2017
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documnetation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef EPDIF_H
#define EPDIF_H
#include <arduino.h>
// Pin definition
#define RST_PIN 8
#define DC_PIN 9
#define CS_PIN 10
#define BUSY_PIN 7
class EpdIf {
public:
EpdIf(void);
~EpdIf(void);
static int IfInit(void);
static void DigitalWrite(int pin, int value);
static int DigitalRead(int pin);
static void DelayMs(unsigned int delaytime);
static void SpiTransfer(unsigned char data);
};
#endif

View file

@ -0,0 +1,473 @@
/**
* @filename : imagedata.cpp
* @brief : data file for epd demo
*
* Copyright (C) Waveshare 2022/7/22
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documnetation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "imagedata.h"
#include <avr/pgmspace.h>
const unsigned char IMAGE_DATA[] PROGMEM = {
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x01,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x55,0x55,0x55,0x50,0x05,0x55,0x54,
0x01,0x50,0x05,0x55,0x55,0x55,0x55,0x55,0x55,0x01,0x55,0x55,0x55,0x55,0x55,0x55,
0x54,0x00,0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x54,0x01,0x55,0x55,0x55,0x00,0x05,0x55,0x50,0x01,0x50,0x05,0x55,0x55,0x55,
0x55,0x55,0x55,0x01,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x00,0x00,0x05,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x01,0x55,0x55,0x54,
0x00,0x05,0x55,0x50,0x01,0x50,0x05,0x55,0x55,0x55,0x55,0x55,0x55,0x01,0x55,0x55,
0x55,0x55,0x55,0x55,0x54,0x00,0x00,0x05,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x00,0x01,0x55,0x55,0x54,0x01,0x55,0x55,0x40,0x01,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x01,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x01,
0x54,0x01,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x00,
0x01,0x55,0x55,0x50,0x05,0x55,0x55,0x00,0x01,0x50,0x05,0x40,0x40,0x05,0x54,0x00,
0x55,0x01,0x00,0x55,0x55,0x55,0x40,0x05,0x54,0x01,0x54,0x01,0x54,0x00,0x55,0x01,
0x00,0x55,0x55,0x00,0x15,0x50,0x10,0x15,0x55,0x14,0x01,0x55,0x55,0x50,0x15,0x55,
0x55,0x00,0x01,0x50,0x05,0x40,0x00,0x01,0x50,0x00,0x05,0x00,0x00,0x15,0x55,0x54,
0x00,0x01,0x54,0x01,0x54,0x01,0x50,0x00,0x05,0x00,0x00,0x15,0x50,0x00,0x05,0x50,
0x00,0x15,0x55,0x54,0x01,0x55,0x55,0x40,0x10,0x05,0x54,0x04,0x01,0x50,0x05,0x40,
0x00,0x01,0x40,0x00,0x05,0x00,0x00,0x05,0x55,0x54,0x00,0x00,0x54,0x01,0x54,0x01,
0x40,0x00,0x05,0x00,0x00,0x05,0x50,0x00,0x01,0x50,0x00,0x15,0x55,0x54,0x01,0x55,
0x55,0x40,0x00,0x01,0x54,0x04,0x01,0x50,0x05,0x40,0x14,0x01,0x40,0x14,0x01,0x00,
0x50,0x05,0x55,0x50,0x05,0x40,0x54,0x01,0x54,0x01,0x40,0x14,0x01,0x00,0x50,0x05,
0x40,0x15,0x01,0x50,0x00,0x15,0x55,0x54,0x01,0x55,0x55,0x40,0x00,0x00,0x50,0x14,
0x01,0x50,0x05,0x40,0x55,0x01,0x40,0x54,0x01,0x01,0x54,0x05,0x55,0x50,0x15,0x40,
0x54,0x00,0x00,0x01,0x55,0x54,0x01,0x01,0x54,0x05,0x40,0x55,0x01,0x50,0x05,0x55,
0x55,0x54,0x01,0x55,0x55,0x40,0x15,0x00,0x40,0x14,0x01,0x50,0x05,0x40,0x55,0x01,
0x00,0x55,0x55,0x01,0x54,0x05,0x55,0x50,0x00,0x00,0x54,0x00,0x00,0x05,0x54,0x00,
0x01,0x01,0x54,0x01,0x40,0x00,0x01,0x50,0x15,0x55,0x55,0x54,0x01,0x55,0x55,0x40,
0x15,0x00,0x40,0x00,0x00,0x50,0x05,0x40,0x55,0x01,0x00,0x55,0x55,0x01,0x54,0x05,
0x55,0x50,0x00,0x00,0x14,0x00,0x00,0x55,0x40,0x00,0x01,0x01,0x54,0x01,0x40,0x00,
0x00,0x50,0x15,0x55,0x55,0x54,0x01,0x55,0x55,0x40,0x15,0x40,0x40,0x00,0x00,0x50,
0x05,0x40,0x55,0x01,0x00,0x55,0x55,0x01,0x54,0x05,0x55,0x50,0x00,0x00,0x14,0x01,
0x55,0x55,0x40,0x00,0x01,0x01,0x54,0x01,0x40,0x00,0x00,0x50,0x15,0x55,0x55,0x54,
0x01,0x55,0x55,0x40,0x15,0x00,0x40,0x00,0x00,0x50,0x05,0x40,0x55,0x01,0x40,0x54,
0x01,0x01,0x54,0x05,0x55,0x50,0x15,0x55,0x54,0x01,0x55,0x55,0x40,0x54,0x01,0x01,
0x54,0x05,0x40,0x55,0x55,0x50,0x15,0x55,0x55,0x54,0x01,0x55,0x55,0x50,0x15,0x00,
0x55,0x54,0x01,0x50,0x05,0x40,0x55,0x01,0x40,0x14,0x01,0x01,0x54,0x05,0x55,0x50,
0x05,0x51,0x54,0x01,0x55,0x55,0x00,0x54,0x01,0x00,0x50,0x05,0x40,0x15,0x45,0x50,
0x15,0x55,0x55,0x54,0x01,0x54,0x05,0x50,0x00,0x01,0x55,0x54,0x01,0x50,0x05,0x40,
0x55,0x01,0x40,0x00,0x05,0x01,0x54,0x05,0x55,0x54,0x00,0x00,0x54,0x01,0x55,0x55,
0x40,0x00,0x01,0x00,0x00,0x05,0x50,0x00,0x01,0x50,0x15,0x55,0x55,0x54,0x01,0x50,
0x05,0x54,0x00,0x01,0x55,0x54,0x01,0x50,0x05,0x40,0x55,0x01,0x50,0x00,0x15,0x01,
0x54,0x05,0x55,0x55,0x00,0x00,0x54,0x01,0x55,0x55,0x40,0x00,0x01,0x00,0x00,0x15,
0x54,0x00,0x01,0x50,0x15,0x55,0x55,0x54,0x01,0x54,0x05,0x55,0x00,0x15,0x55,0x54,
0x01,0x50,0x05,0x40,0x55,0x01,0x54,0x00,0x55,0x01,0x54,0x05,0x55,0x55,0x40,0x05,
0x54,0x01,0x55,0x55,0x50,0x04,0x01,0x01,0x00,0x55,0x55,0x00,0x15,0x50,0x15,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x01,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x01,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x01,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x01,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x01,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xBF,0xFF,0xFF,0xFA,0xAF,0xFF,0xFE,0xAA,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xBF,0xFF,0xFF,0xEA,0xBF,0xFF,0xFE,0xAA,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xEA,0xBF,0xFF,0xFF,0xAA,0xAF,0xFF,0xEA,0xAA,0xAF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xEA,0xBF,0xFF,0xFE,0xAA,0xBF,0xFF,0xEA,0xAA,0xAF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFA,0xAA,0xBF,0xFF,0xFA,0xAA,0xAF,
0xFF,0xAA,0xAA,0xAB,0xFF,0xFF,0xFF,0xFF,0xFF,0xFA,0xAA,0xBF,0xFF,0xEA,0xAA,0xBF,
0xFF,0xAA,0xAA,0xAB,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xAA,0xAA,0xBF,0xFF,0xEA,0xAA,0xAF,0xFE,0xAA,0xAA,0xAA,0xFF,0xFF,
0xFF,0xFF,0xFF,0xAA,0xAA,0xBF,0xFF,0xAA,0xAA,0xBF,0xFE,0xAA,0xAA,0xAA,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xAA,0xAA,0xBF,
0xFF,0xEA,0xAB,0xFF,0xFE,0xAA,0xFE,0xAA,0xFF,0xFF,0xFF,0xFF,0xFF,0xAA,0xAA,0xBF,
0xFF,0xAA,0xAF,0xFF,0xFE,0xAA,0xFE,0xAA,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xAA,0xAA,0xBF,0xFF,0xAA,0xBF,0xFF,0xFE,0xAB,
0xFF,0xAA,0xFF,0xEF,0xFF,0xEF,0xFF,0xAA,0xAA,0xBF,0xFE,0xAA,0xFF,0xFF,0xFE,0xAB,
0xFF,0xAA,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xAF,0xEA,0xBF,0xFF,0xAA,0xFF,0xFF,0xFE,0xAB,0xFF,0xAA,0xFF,0xAB,0xFF,0xEB,
0xFF,0xAF,0xEA,0xBF,0xFE,0xAB,0xFF,0xFF,0xFE,0xAB,0xFF,0xAA,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xEA,0xBF,0xFE,0xAB,
0xFF,0xFF,0xFE,0xAB,0xFF,0xAA,0xFE,0xAA,0xFF,0xAA,0xFF,0xFF,0xEA,0xBF,0xFA,0xAF,
0xFF,0xFF,0xFE,0xAB,0xFF,0xAA,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xEA,0xBF,0xFE,0xAB,0xEA,0xBF,0xFE,0xAA,0xFE,0xAA,
0xFF,0xAA,0xFE,0xAA,0xFF,0xFF,0xEA,0xBF,0xFA,0xAF,0xAA,0xFF,0xFE,0xAA,0xFE,0xAA,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xEA,0xBF,0xFE,0xAA,0xAA,0xAB,0xFF,0xAA,0xAA,0xAB,0xFF,0xEA,0xBA,0xAB,0xFF,0xFF,
0xEA,0xBF,0xFA,0xAA,0xAA,0xAF,0xFF,0xAA,0xAA,0xAB,0xFF,0xFF,0xFF,0xFF,0xEA,0xFF,
0xFF,0xFF,0xFF,0xFF,0xEB,0xFF,0xFF,0xFF,0xFF,0xFF,0xEA,0xBF,0xFE,0xAA,0xAA,0xAA,
0xFF,0xEA,0xAA,0xAF,0xFF,0xEA,0xAA,0xAF,0xFF,0xFF,0xEA,0xBF,0xFA,0xAA,0xAA,0xAB,
0xFF,0xEA,0xAA,0xAF,0xFF,0xEA,0xAA,0xFF,0xEA,0xFF,0xFF,0xFF,0xFF,0xFF,0xEB,0xFF,
0xFF,0xFF,0xFF,0xFF,0xEA,0xBF,0xFE,0xAA,0xAA,0xAA,0xFF,0xEA,0xAA,0xAF,0xFF,0xFA,
0xAA,0xBF,0xFF,0xFF,0xEA,0xBF,0xFA,0xAA,0xAA,0xAB,0xFF,0xEA,0xAA,0xAF,0xFF,0xEA,
0xAA,0xBF,0xEA,0xFF,0xFF,0xFF,0xFF,0xFF,0xEB,0xFF,0xFF,0xFF,0xFF,0xFF,0xEA,0xBF,
0xFE,0xAA,0xFE,0xAA,0xFF,0xAA,0xAA,0xAB,0xFF,0xFE,0xAA,0xFF,0xFF,0xFF,0xEA,0xBF,
0xFA,0xAB,0xFA,0xAB,0xFF,0xAA,0xAA,0xAB,0xFF,0xEA,0xFE,0xAF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xEB,0xFF,0xFF,0xFF,0xFF,0xFF,0xEA,0xBF,0xFE,0xAB,0xFF,0xAA,0xBE,0xAA,
0xFE,0xAA,0xFF,0xFA,0xAA,0xBF,0xFF,0xFF,0xEA,0xBF,0xFA,0xAF,0xFE,0xAA,0xFE,0xAA,
0xFE,0xAA,0xFF,0xEA,0xFF,0xAF,0xEA,0xEA,0xFE,0xBF,0xEA,0xBF,0xEB,0xFA,0xAB,0xFF,
0xFF,0xFF,0xEA,0xBF,0xFE,0xAB,0xFF,0xEA,0xBE,0xAB,0xFF,0xAA,0xFF,0xEA,0xAA,0xAF,
0xFF,0xFF,0xEA,0xBF,0xFA,0xAF,0xFF,0xAA,0xFE,0xAB,0xFF,0xAA,0xFF,0xEA,0xFF,0xAF,
0xEA,0xFA,0xBA,0xBE,0xAA,0xAF,0xEB,0xEA,0xAA,0xFF,0xFF,0xFF,0xEA,0xBF,0xFE,0xAB,
0xFF,0xEA,0xBE,0xAB,0xFF,0xAA,0xFF,0xEA,0xBA,0xAB,0xFF,0xFF,0xEA,0xBF,0xFA,0xAF,
0xFF,0xAA,0xFE,0xAB,0xFF,0xAA,0xFF,0xEA,0xFE,0xAF,0xEA,0xFE,0xAA,0xFE,0xBF,0xAF,
0xEB,0xEB,0xFA,0xFF,0xFF,0xFF,0xEA,0xBF,0xFE,0xAB,0xFF,0xEA,0xBE,0xAB,0xFF,0xAA,
0xFF,0xAA,0xFE,0xAA,0xFF,0xFF,0xEA,0xBF,0xFA,0xAF,0xFF,0xAA,0xFE,0xAB,0xFF,0xAA,
0xFF,0xEA,0xAA,0xAF,0xEA,0xFE,0xAB,0xFE,0xAA,0xAB,0xEB,0xEA,0xFF,0xFF,0xFF,0xFF,
0xEA,0xBF,0xFE,0xAB,0xFF,0xAA,0xBE,0xAB,0xFF,0xAA,0xFE,0xAA,0xFF,0xAA,0xFF,0xFF,
0xEA,0xBF,0xFA,0xAF,0xFE,0xAA,0xFE,0xAB,0xFF,0xAA,0xFF,0xEA,0xAA,0xFF,0xEA,0xFF,
0xAB,0xFA,0xAA,0xAB,0xEB,0xFA,0xAB,0xFF,0xFF,0xFF,0xEA,0xBF,0xFE,0xAA,0xFE,0xAA,
0xFE,0xAA,0xFE,0xAA,0xFF,0xAB,0xFF,0xEB,0xFF,0xFF,0xEA,0xBF,0xFA,0xAB,0xFA,0xAB,
0xFE,0xAA,0xFE,0xAA,0xFF,0xEA,0xFF,0xFF,0xEA,0xFE,0xAB,0xFE,0xBF,0xFF,0xEB,0xFF,
0xEA,0xFF,0xFF,0xFF,0xEA,0xBF,0xFF,0xAA,0xAA,0xAA,0xFE,0xAA,0xAA,0xAA,0xFF,0xEF,
0xFF,0xEF,0xFF,0xFF,0xEA,0xBF,0xFE,0xAA,0xAA,0xAB,0xFE,0xAA,0xAA,0xAA,0xFF,0xEA,
0xFF,0xFF,0xEA,0xFE,0xBA,0xFE,0xAF,0xEF,0xEB,0xEB,0xFA,0xFF,0xFF,0xFF,0xEA,0xBF,
0xFF,0xEA,0xAA,0xAB,0xFF,0xAA,0xAA,0xAB,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xEA,0xBF,
0xFF,0xAA,0xAA,0xAF,0xFF,0xAA,0xAA,0xAB,0xFF,0xEA,0xFF,0xFF,0xEA,0xFA,0xBA,0xBE,
0xAA,0xAF,0xEB,0xEA,0xAA,0xFF,0xFF,0xFF,0xEA,0xBF,0xFF,0xFA,0xAA,0xAF,0xFF,0xEA,
0xAA,0xAF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xEA,0xBF,0xFF,0xEA,0xAA,0xBF,0xFF,0xEA,
0xAA,0xAF,0xFF,0xEA,0xFF,0xFF,0xEA,0xEA,0xFE,0xAF,0xEA,0xBF,0xEB,0xFA,0xAB,0xFF,
0xFF,0xFF,0xEA,0xBF,0xFF,0xFE,0xAA,0xBF,0xFF,0xFA,0xAA,0xBF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xEA,0xBF,0xFF,0xFA,0xAA,0xFF,0xFF,0xFA,0xAA,0xBF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x05,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x50,0x15,0x01,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x40,
0x55,0x55,0x01,0x55,0x55,0x55,0x55,0x55,0x54,0x05,0x55,0x55,0x55,0x40,0x00,0x15,
0x55,0x55,0x55,0x55,0x54,0x05,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x50,0x15,0x01,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x55,0x55,0x01,0x55,0x55,0x55,
0x55,0x55,0x54,0x05,0x55,0x55,0x55,0x40,0x00,0x05,0x55,0x55,0x55,0x55,0x54,0x05,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x50,0x15,0x01,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x40,0x55,0x55,0x01,0x55,0x55,0x55,0x55,0x55,0x54,0x05,0x55,0x55,
0x55,0x40,0x55,0x01,0x55,0x55,0x55,0x55,0x54,0x05,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x50,0x15,0x01,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x55,0x55,
0x01,0x55,0x55,0x55,0x55,0x55,0x54,0x05,0x55,0x55,0x55,0x40,0x55,0x01,0x55,0x55,
0x55,0x55,0x54,0x05,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x50,0x15,0x01,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x55,0x55,0x01,0x55,0x55,0x55,0x55,0x55,
0x54,0x05,0x55,0x55,0x55,0x40,0x55,0x01,0x54,0x01,0x55,0x54,0x04,0x05,0x55,0x55,
0x01,0x54,0x05,0x40,0x15,0x50,0x15,0x01,0x55,0x00,0x15,0x40,0x54,0x15,0x01,0x55,
0x55,0x40,0x40,0x55,0x01,0x55,0x00,0x55,0x54,0x01,0x54,0x05,0x00,0x55,0x55,0x40,
0x55,0x01,0x50,0x00,0x15,0x50,0x00,0x05,0x55,0x55,0x40,0x50,0x15,0x00,0x01,0x50,
0x15,0x01,0x54,0x00,0x05,0x50,0x54,0x15,0x05,0x55,0x55,0x40,0x00,0x15,0x01,0x50,
0x00,0x05,0x50,0x00,0x14,0x05,0x01,0x55,0x55,0x40,0x55,0x01,0x40,0x54,0x15,0x40,
0x54,0x05,0x55,0x55,0x40,0x50,0x14,0x05,0x41,0x50,0x15,0x01,0x50,0x15,0x01,0x50,
0x50,0x05,0x05,0x55,0x55,0x40,0x54,0x05,0x01,0x50,0x14,0x05,0x40,0x50,0x14,0x04,
0x05,0x55,0x55,0x40,0x00,0x05,0x41,0x54,0x05,0x40,0x54,0x05,0x55,0x55,0x40,0x50,
0x14,0x15,0x40,0x50,0x15,0x01,0x50,0x15,0x01,0x50,0x10,0x04,0x05,0x55,0x55,0x40,
0x54,0x05,0x01,0x55,0x54,0x05,0x40,0x54,0x14,0x00,0x15,0x55,0x55,0x40,0x00,0x15,
0x40,0x00,0x05,0x41,0x54,0x05,0x55,0x55,0x50,0x50,0x54,0x00,0x00,0x50,0x15,0x01,
0x50,0x55,0x41,0x50,0x10,0x04,0x05,0x55,0x55,0x40,0x55,0x05,0x01,0x55,0x00,0x05,
0x41,0x55,0x54,0x00,0x55,0x55,0x55,0x40,0x50,0x15,0x40,0x00,0x05,0x41,0x54,0x05,
0x55,0x55,0x50,0x00,0x54,0x00,0x00,0x50,0x15,0x01,0x50,0x55,0x41,0x54,0x10,0x04,
0x15,0x55,0x55,0x40,0x55,0x05,0x01,0x50,0x00,0x05,0x41,0x55,0x54,0x00,0x15,0x55,
0x55,0x40,0x54,0x05,0x41,0x55,0x55,0x41,0x54,0x05,0x55,0x55,0x50,0x00,0x54,0x15,
0x55,0x50,0x15,0x01,0x50,0x55,0x41,0x54,0x01,0x40,0x15,0x55,0x55,0x40,0x55,0x05,
0x01,0x50,0x14,0x05,0x41,0x55,0x54,0x00,0x05,0x55,0x55,0x40,0x54,0x05,0x40,0x54,
0x55,0x40,0x54,0x05,0x55,0x55,0x54,0x01,0x54,0x05,0x45,0x50,0x15,0x01,0x50,0x15,
0x01,0x54,0x01,0x40,0x15,0x55,0x55,0x40,0x54,0x05,0x01,0x50,0x54,0x05,0x40,0x54,
0x14,0x04,0x05,0x55,0x55,0x40,0x55,0x01,0x40,0x54,0x15,0x40,0x54,0x05,0x01,0x55,
0x54,0x01,0x54,0x05,0x41,0x50,0x15,0x01,0x50,0x15,0x01,0x54,0x01,0x40,0x15,0x01,
0x55,0x40,0x54,0x05,0x01,0x50,0x14,0x05,0x40,0x50,0x14,0x05,0x01,0x55,0x55,0x40,
0x55,0x01,0x50,0x00,0x15,0x50,0x00,0x05,0x01,0x55,0x54,0x01,0x55,0x00,0x01,0x50,
0x15,0x01,0x54,0x00,0x05,0x55,0x01,0x40,0x55,0x01,0x55,0x40,0x00,0x15,0x01,0x50,
0x00,0x05,0x50,0x00,0x14,0x05,0x01,0x55,0x55,0x40,0x55,0x00,0x54,0x00,0x55,0x54,
0x00,0x05,0x01,0x55,0x55,0x05,0x55,0x40,0x05,0x50,0x15,0x01,0x55,0x00,0x15,0x55,
0x05,0x50,0x55,0x01,0x55,0x40,0x00,0x55,0x01,0x54,0x01,0x01,0x54,0x01,0x54,0x05,
0x40,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x05,0x55,0x55,0x05,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x05,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x05,0x55,0x54,0x05,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x05,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x15,0x55,0x40,0x15,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x15,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x40,0x55,0x55,0x55,0x55,0x55,0x40,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x54,0x05,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x55,0x55,0x55,0x55,0x55,
0x40,0x55,0x55,0x40,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x54,
0x05,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x40,0x55,0x55,0x55,0x55,0x55,0x40,0x55,0x55,0x40,0x50,0x15,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x05,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x55,
0x55,0x55,0x55,0x55,0x40,0x55,0x55,0x40,0x50,0x15,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x54,0x05,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x55,0x55,0x55,0x55,0x55,0x40,0x55,
0x55,0x55,0x50,0x15,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x05,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x01,0x55,0x01,0x01,
0x55,0x40,0x40,0x55,0x50,0x15,0x05,0x40,0x40,0x40,0x55,0x40,0x40,0x01,0x55,0x00,
0x55,0x55,0x55,0x00,0x55,0x50,0x01,0x54,0x05,0x54,0x00,0x55,0x00,0x05,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x40,0x00,0x15,0x00,0x00,0x55,0x00,0x00,0x55,0x54,0x15,
0x05,0x41,0x40,0x00,0x15,0x40,0x40,0x01,0x54,0x00,0x05,0x55,0x54,0x00,0x05,0x40,
0x00,0x54,0x05,0x50,0x00,0x15,0x00,0x05,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x40,
0x50,0x15,0x01,0x50,0x14,0x05,0x40,0x55,0x54,0x14,0x01,0x41,0x40,0x54,0x05,0x40,
0x50,0x15,0x50,0x15,0x05,0x55,0x50,0x14,0x05,0x01,0x50,0x14,0x05,0x40,0x54,0x05,
0x01,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x50,0x15,0x01,0x50,0x14,0x05,
0x40,0x55,0x54,0x04,0x01,0x01,0x40,0x54,0x05,0x40,0x50,0x15,0x50,0x55,0x01,0x55,
0x50,0x15,0x05,0x01,0x50,0x14,0x05,0x40,0x54,0x05,0x01,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x54,0x00,0x15,0x01,0x50,0x14,0x15,0x40,0x55,0x54,0x04,0x01,0x01,
0x40,0x54,0x05,0x40,0x50,0x15,0x50,0x00,0x01,0x55,0x50,0x55,0x55,0x05,0x54,0x14,
0x05,0x41,0x55,0x05,0x01,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x00,0x15,
0x01,0x50,0x14,0x15,0x40,0x55,0x55,0x04,0x01,0x05,0x40,0x54,0x05,0x40,0x50,0x15,
0x50,0x00,0x01,0x55,0x50,0x55,0x55,0x05,0x54,0x14,0x05,0x41,0x55,0x05,0x01,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x50,0x15,0x01,0x50,0x14,0x15,0x40,0x55,
0x55,0x00,0x50,0x05,0x40,0x54,0x05,0x40,0x50,0x15,0x50,0x55,0x55,0x55,0x50,0x55,
0x55,0x05,0x54,0x14,0x05,0x41,0x55,0x05,0x01,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x41,0x50,0x15,0x01,0x50,0x14,0x05,0x40,0x55,0x55,0x00,0x50,0x05,0x40,0x54,
0x05,0x40,0x50,0x15,0x50,0x15,0x15,0x55,0x50,0x15,0x05,0x01,0x50,0x14,0x05,0x40,
0x54,0x05,0x01,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x50,0x15,0x01,0x50,
0x14,0x05,0x40,0x55,0x55,0x00,0x50,0x05,0x40,0x54,0x05,0x40,0x50,0x15,0x50,0x15,
0x05,0x55,0x50,0x14,0x05,0x01,0x50,0x14,0x05,0x40,0x54,0x05,0x01,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x40,0x00,0x15,0x01,0x50,0x15,0x00,0x00,0x55,0x55,0x40,
0x50,0x15,0x40,0x54,0x05,0x40,0x54,0x01,0x54,0x00,0x05,0x55,0x54,0x00,0x05,0x40,
0x00,0x54,0x05,0x50,0x00,0x15,0x01,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x50,
0x04,0x05,0x01,0x50,0x15,0x40,0x00,0x55,0x55,0x41,0x54,0x15,0x40,0x54,0x05,0x40,
0x54,0x01,0x55,0x00,0x15,0x55,0x55,0x00,0x55,0x50,0x01,0x54,0x05,0x54,0x00,0x55,
0x01,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
};

View file

@ -0,0 +1,30 @@
/**
* @filename : imagedata.h
* @brief : head file for imagedata.cpp
*
* Copyright (C) Waveshare 2022/7/22
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documnetation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
extern const unsigned char IMAGE_DATA[];
/* FILE END */

View file

@ -0,0 +1,259 @@
/**
* @filename : epd3in0g.cpp
* @brief : Implements for e-paper library
* @author : Waveshare
*
* Copyright (C) Waveshare 2022/7/22
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documnetation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include <stdlib.h>
#include "epd3in0g.h"
Epd::~Epd() {
};
Epd::Epd() {
reset_pin = RST_PIN;
dc_pin = DC_PIN;
cs_pin = CS_PIN;
busy_pin = BUSY_PIN;
WIDTH = EPD_WIDTH;
HEIGHT = EPD_HEIGHT;
};
int Epd::Init() {
/* this calls the peripheral hardware interface, see epdif */
if (IfInit() != 0) {
return -1;
}
Reset();
SendCommand(0x66);
SendData(0x49);
SendData(0x55);
SendData(0x13);
SendData(0x5D);
SendData(0x05);
SendData(0x10);
SendCommand(0xB0);
SendData(0x00);//1 boost
SendCommand(0x01);
SendData(0x0F);
SendData(0x00);
SendCommand(0x00);
SendData(0x4F);
SendData(0x6B);
SendCommand(0x06);
SendData(0xD7);
SendData(0xDE);
SendData(0x12);
SendCommand(0x61);
SendData(0x00);
SendData(0xA8);
SendData(0x01);
SendData(0x90);
SendCommand(0x50);
SendData(0x37);
SendCommand(0x60);
SendData(0x0C);
SendData(0x05);
SendCommand(0xE3);
SendData(0xFF);
SendCommand(0x84);
SendData(0x00);
return 0;
}
/**
* @brief: basic function for sending commands
*/
void Epd::SendCommand(unsigned char command) {
DigitalWrite(dc_pin, LOW);
SpiTransfer(command);
}
/**
* @brief: basic function for sending data
*/
void Epd::SendData(unsigned char data) {
DigitalWrite(dc_pin, HIGH);
SpiTransfer(data);
}
/**
* @brief: Wait until the busy_pin goes LOW
*/
void Epd::ReadBusyH(void) {
Serial.print("e-Paper busy H\r\n ");
while(DigitalRead(busy_pin) == LOW) { //LOW: busy, HIGH: idle
DelayMs(5);
}
Serial.print("e-Paper busy release H\r\n ");
}
void Epd::ReadBusyL(void) {
Serial.print("e-Paper busy L\r\n ");
while(DigitalRead(busy_pin) == HIGH) { //LOW: idle, HIGH: busy
DelayMs(5);
}
Serial.print("e-Paper busy release L\r\n ");
}
/**
* @brief: module reset.
* often used to awaken the module in deep sleep,
* see Epd::Sleep();
*/
void Epd::Reset(void) {
DigitalWrite(reset_pin, HIGH);
DelayMs(20);
DigitalWrite(reset_pin, LOW); //module reset
DelayMs(2);
DigitalWrite(reset_pin, HIGH);
DelayMs(20);
}
/******************************************************************************
function : Turn On Display
parameter:
******************************************************************************/
void Epd::TurnOnDisplay(void)
{
SendCommand(0x12); // DISPLAY_REFRESH
SendData(0x01);
ReadBusyH();
SendCommand(0x02); // POWER_OFF
SendData(0X00);
ReadBusyH();
}
/******************************************************************************
function : Clear screen
parameter:
******************************************************************************/
void Epd::Clear(UBYTE color)
{
UWORD Width, Height;
Width = (WIDTH % 4 == 0)? (WIDTH / 4 ): (WIDTH / 4 + 1);
Height = HEIGHT;
SendCommand(0x68);
SendData(0x01);
SendCommand(0x04);
ReadBusyH();
SendCommand(0x10);
for (UWORD j = 0; j < Height; j++) {
for (UWORD i = 0; i < Width; i++) {
for(UBYTE k = 0; k < 4; k++) {
SendData(color);
}
}
}
SendCommand(0x68);
SendData(0x00);
TurnOnDisplay();
}
/******************************************************************************
function : Sends the image buffer in RAM to e-Paper and displays
parameter:
******************************************************************************/
void Epd::Display(UBYTE *Image)
{
UWORD Width, Height;
Width = (WIDTH % 4 == 0)? (WIDTH / 4 ): (WIDTH / 4 + 1);
Height = HEIGHT;
SendCommand(0x68);
SendData(0x01);
SendCommand(0x04);
ReadBusyH();
SendCommand(0x10);
for (UWORD j = 0; j < Height; j++) {
for (UWORD i = 0; i < Width; i++) {
SendData(pgm_read_byte(&Image[i + j * Width]));
}
}
TurnOnDisplay();
}
void Epd::Display_part(UBYTE *Image, UWORD xstart, UWORD ystart, UWORD image_width, UWORD image_heigh)
{
UWORD Width, Height;
Width = (WIDTH % 4 == 0)? (WIDTH / 4 ): (WIDTH / 4 + 1);
Height = HEIGHT;
SendCommand(0x68);
SendData(0x01);
SendCommand(0x04);
ReadBusyH();
SendCommand(0x10);
for (UWORD j = 0; j < Height; j++) {
for (UWORD i = 0; i < Width; i++) {
if((j >= xstart/4) && (j < (image_width + xstart)/4) && (i >= ystart) && (i <= (ystart + image_heigh)) )
{
SendData(pgm_read_byte(&Image[(i-ystart) * image_width/4 + j - xstart/4]));
// Serial.print(Image[(i-ystart) * image_width/8 + j - xstart], HEX);
// Serial.print(" ");
}
else
{
SendData(0x55);
}
}
}
TurnOnDisplay();
}
/******************************************************************************
function : Enter sleep mode
parameter:
******************************************************************************/
void Epd::Sleep(void)
{
SendCommand(0x02); // POWER_OFF
SendData(0X00);
SendCommand(0x07); // DEEP_SLEEP
SendData(0XA5);
}
/* END OF FILE */

View file

@ -0,0 +1,74 @@
/**
* @filename : epd3in0g.h
* @brief : Header file for e-paper display library epd3in0g.cpp
* @author : Waveshare
*
* Copyright (C) Waveshare 2022/7/22
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documnetation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef EPD3IN0G_H
#define EPD3IN0G_H
#include "epdif.h"
// Display resolution
#define EPD_WIDTH 168
#define EPD_HEIGHT 400
//colour
#define black 0x00
#define white 0x55
#define yellow 0xAA
#define red 0xFF
#define UWORD unsigned int
#define UBYTE unsigned char
#define UDOUBLE unsigned long
class Epd : EpdIf {
public:
unsigned long WIDTH;
unsigned long HEIGHT;
Epd();
~Epd();
int Init();
void SendCommand(unsigned char command);
void SendData(unsigned char data);
void Reset(void);
void ReadBusyH(void);
void ReadBusyL(void);
void TurnOnDisplay(void);
void Clear(UBYTE color);
void Display(UBYTE *Image);
void Sleep(void);
private:
unsigned int reset_pin;
unsigned int dc_pin;
unsigned int cs_pin;
unsigned int busy_pin;
};
#endif /* EPD1IN54_H */
/* END OF FILE */

View file

@ -0,0 +1,62 @@
/**
* @filename : epd3in0g-demo.ino
* @brief : 3inch e-paper (G) display demo
* @author : Waveshare
*
* Copyright (C) Waveshare 2022/7/22
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documnetation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include <SPI.h>
#include "epd3in0g.h"
#include "imagedata.h"
Epd epd;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.print("e-Paper init ");
if (epd.Init() != 0) {
Serial.print("e-Paper init failed");
return;
}
Serial.print("While \r\n");
epd.Clear(white); // While
delay(2000);
epd.Init();
epd.Display(IMAGE_DATA);
delay(2000);
epd.Init();
Serial.print("Clear...\r\n");
epd.Clear(white);
delay(2000);
Serial.print("Goto Sleep...\r\n");
epd.Sleep();
}
void loop() {
}

View file

@ -0,0 +1,64 @@
/**
* @filename : epdif.cpp
* @brief : Implements EPD interface functions
* Users have to implement all the functions in epdif.cpp
* @author : Yehui from Waveshare
*
* Copyright (C) Waveshare August 10 2017
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documnetation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "epdif.h"
#include <spi.h>
EpdIf::EpdIf() {
};
EpdIf::~EpdIf() {
};
void EpdIf::DigitalWrite(int pin, int value) {
digitalWrite(pin, value);
}
int EpdIf::DigitalRead(int pin) {
return digitalRead(pin);
}
void EpdIf::DelayMs(unsigned int delaytime) {
delay(delaytime);
}
void EpdIf::SpiTransfer(unsigned char data) {
digitalWrite(CS_PIN, LOW);
SPI.transfer(data);
digitalWrite(CS_PIN, HIGH);
}
int EpdIf::IfInit(void) {
pinMode(CS_PIN, OUTPUT);
pinMode(RST_PIN, OUTPUT);
pinMode(DC_PIN, OUTPUT);
pinMode(BUSY_PIN, INPUT);
SPI.begin();
SPI.beginTransaction(SPISettings(2000000, MSBFIRST, SPI_MODE0));
return 0;
}

51
Arduino/epd3in0g/epdif.h Normal file
View file

@ -0,0 +1,51 @@
/**
* @filename : epdif.h
* @brief : Header file of epdif.cpp providing EPD interface functions
* Users have to implement all the functions in epdif.cpp
* @author : Yehui from Waveshare
*
* Copyright (C) Waveshare August 10 2017
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documnetation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef EPDIF_H
#define EPDIF_H
#include <arduino.h>
// Pin definition
#define RST_PIN 8
#define DC_PIN 9
#define CS_PIN 10
#define BUSY_PIN 7
class EpdIf {
public:
EpdIf(void);
~EpdIf(void);
static int IfInit(void);
static void DigitalWrite(int pin, int value);
static int DigitalRead(int pin);
static void DelayMs(unsigned int delaytime);
static void SpiTransfer(unsigned char data);
};
#endif

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,30 @@
/**
* @filename : imagedata.h
* @brief : head file for imagedata.cpp
*
* Copyright (C) Waveshare 2022/7/22
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documnetation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
extern const unsigned char IMAGE_DATA[];
/* FILE END */

View file

@ -0,0 +1,593 @@
/*****************************************************************************
* | File : EPD_3IN52.C
* | Author : Waveshare team
* | Function : 3.52inch e-paper
* | Info :
*----------------
* | This version: V1.0
* | Date : 2022-05-07
* | Info :
* -----------------------------------------------------------------------------
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documnetation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
******************************************************************************/
#include <stdlib.h>
#include "EPD_3in52.h"
#include "imagedata.h"
//GC 0.9S
static const UBYTE EPD_3IN52_lut_R20_GC[] =
{
0x01,0x0f,0x0f,0x0f,0x01,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
static const UBYTE EPD_3IN52_lut_R21_GC[] =
{
0x01,0x4f,0x8f,0x0f,0x01,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
static const UBYTE EPD_3IN52_lut_R22_GC[] =
{
0x01,0x0f,0x8f,0x0f,0x01,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
static const UBYTE EPD_3IN52_lut_R23_GC[] =
{
0x01,0x4f,0x8f,0x4f,0x01,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
static const UBYTE EPD_3IN52_lut_R24_GC[] =
{
0x01,0x0f,0x8f,0x4f,0x01,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
// DU 0.3s
static const UBYTE EPD_3IN52_lut_R20_DU[] =
{
0x01,0x0f,0x01,0x00,0x00,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
static const UBYTE EPD_3IN52_lut_R21_DU[] =
{
0x01,0x0f,0x01,0x00,0x00,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
static const UBYTE EPD_3IN52_lut_R22_DU[] =
{
0x01,0x8f,0x01,0x00,0x00,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
static const UBYTE EPD_3IN52_lut_R23_DU[] =
{
0x01,0x4f,0x01,0x00,0x00,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
static const UBYTE EPD_3IN52_lut_R24_DU[] =
{
0x01,0x0f,0x01,0x00,0x00,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
//
static const UBYTE EPD_3IN52_lut_vcom[] =
{
0x01,0x19,0x19,0x19,0x19,0x01,0x01,
0x01,0x19,0x19,0x19,0x01,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
static const UBYTE EPD_3IN52_lut_ww[] =
{
0x01,0x59,0x99,0x59,0x99,0x01,0x01,
0x01,0x59,0x99,0x19,0x01,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
static const UBYTE EPD_3IN52_lut_bw[] =
{
0x01,0x59,0x99,0x59,0x99,0x01,0x01,
0x01,0x59,0x99,0x19,0x01,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
static const UBYTE EPD_3IN52_lut_wb[] =
{
0x01,0x19,0x99,0x59,0x99,0x01,0x01,
0x01,0x59,0x99,0x59,0x01,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
static const UBYTE EPD_3IN52_lut_bb[] =
{
0x01,0x19,0x99,0x59,0x99,0x01,0x01,
0x01,0x59,0x99,0x59,0x01,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
Epd::~Epd() {
};
Epd::Epd() {
reset_pin = RST_PIN;
dc_pin = DC_PIN;
cs_pin = CS_PIN;
busy_pin = BUSY_PIN;
width = EPD_WIDTH;
height = EPD_HEIGHT;
EPD_3IN52_Flag = 0;
};
int Epd::Init(void) {
if (IfInit() != 0) {
return -1;
}
Reset();
EPD_3IN52_Flag = 0;
SendCommand(0x00); // panel setting PSR
SendData(0xFF); // RES1 RES0 REG KW/R UD SHL SHD_N RST_N
SendData(0x01); // x x x VCMZ TS_AUTO TIGE NORG VC_LUTZ
SendCommand(0x01); // POWER SETTING PWR
SendData(0x03); // x x x x x x VDS_EN VDG_EN
SendData(0x10); // x x x VCOM_SLWE VGH[3:0] VGH=20V, VGL=-20V
SendData(0x3F); // x x VSH[5:0] VSH = 15V
SendData(0x3F); // x x VSL[5:0] VSL=-15V
SendData(0x03); // OPTEN VDHR[6:0] VHDR=6.4V
// T_VDS_OFF[1:0] 00=1 frame; 01=2 frame; 10=3 frame; 11=4 frame
SendCommand(0x06); // booster soft start BTST
SendData(0x37); // BT_PHA[7:0]
SendData(0x3D); // BT_PHB[7:0]
SendData(0x3D); // x x BT_PHC[5:0]
SendCommand(0x60); // TCON setting TCON
SendData(0x22); // S2G[3:0] G2S[3:0] non-overlap = 12
SendCommand(0x82); // VCOM_DC setting VDCS
SendData(0x07); // x VDCS[6:0] VCOM_DC value= -1.9v 00~3f,0x12=-1.9v
SendCommand(0x30);
SendData(0x09);
SendCommand(0xe3); // power saving PWS
SendData(0x88); // VCOM_W[3:0] SD_W[3:0]
SendCommand(0x61); // resoultion setting
SendData(0xf0); // HRES[7:3] 0 0 0
SendData(0x01); // x x x x x x x VRES[8]
SendData(0x68); // VRES[7:0]
SendCommand(0x50);
SendData(0xB7);
return 0;
}
/**
* @brief: basic function for sending commands
*/
void Epd::SendCommand(unsigned char command) {
DigitalWrite(dc_pin, LOW);
SpiTransfer(command);
}
/**
* @brief: basic function for sending data
*/
void Epd::SendData(unsigned char data) {
DigitalWrite(dc_pin, HIGH);
SpiTransfer(data);
}
/**
* @brief: Wait until the busy_pin goes HIGH
*/
void Epd::ReadBusy(void) {
Serial.print("e-Paper busy \r\n ");
UBYTE busy;
do {
busy = DigitalRead(busy_pin);
} while(busy);
DelayMs(200);
Serial.print("e-Paper busy release \r\n ");
}
/**
* @brief: module reset.
* often used to awaken the module in deep sleep,
* see Epd::Sleep();
*/
void Epd::Reset(void) {
DigitalWrite(reset_pin, HIGH);
DelayMs(20);
DigitalWrite(reset_pin, LOW); //module reset
DelayMs(2);
DigitalWrite(reset_pin, HIGH);
DelayMs(20);
}
void Epd::lut(void)
{
UBYTE count;
SendCommand(0x20); // vcom
for(count = 0; count < 42 ; count++)
{
SendData(EPD_3IN52_lut_vcom[count]);
}
SendCommand(0x21); // ww --
for(count = 0; count < 42 ; count++)
{
SendData(EPD_3IN52_lut_ww[count]);
}
SendCommand(0x22); // bw r
for(count = 0; count < 42 ; count++)
{
SendData(EPD_3IN52_lut_bw[count]);
}
SendCommand(0x23); // wb w
for(count = 0; count < 42 ; count++)
{
SendData(EPD_3IN52_lut_bb[count]);
}
SendCommand(0x24); // bb b
for(count = 0; count < 42 ; count++)
{
SendData(EPD_3IN52_lut_wb[count]);
}
}
void Epd::refresh(void)
{
SendCommand(0x17);
SendData(0xA5);
ReadBusy();
DelayMs(200);
}
// LUT download
void Epd::lut_GC(void)
{
UBYTE count;
SendCommand(0x20); // vcom
for(count = 0; count < 56 ; count++)
{
SendData(EPD_3IN52_lut_R20_GC[count]);
}
SendCommand(0x21); // red not use
for(count = 0; count < 42 ; count++)
{
SendData(EPD_3IN52_lut_R21_GC[count]);
}
SendCommand(0x24); // bb b
for(count = 0; count < 42 ; count++)
{
SendData(EPD_3IN52_lut_R24_GC[count]);
}
if(EPD_3IN52_Flag == 0)
{
SendCommand(0x22); // bw r
for(count = 0; count < 56 ; count++)
{
SendData(EPD_3IN52_lut_R22_GC[count]);
}
SendCommand(0x23); // wb w
for(count = 0; count < 42 ; count++)
{
SendData(EPD_3IN52_lut_R23_GC[count]);
}
EPD_3IN52_Flag = 1;
}
else
{
SendCommand(0x22); // bw r
for(count = 0; count < 56 ; count++)
{
SendData(EPD_3IN52_lut_R23_GC[count]);
}
SendCommand(0x23); // wb w
for(count = 0; count < 42 ; count++)
{
SendData(EPD_3IN52_lut_R22_GC[count]);
}
EPD_3IN52_Flag = 0;
}
}
// LUT download
void Epd::lut_DU(void)
{
UBYTE count;
SendCommand(0x20); // vcom
for(count = 0; count < 56 ; count++)
{
SendData(EPD_3IN52_lut_R20_DU[count]);
}
SendCommand(0x21); // red not use
for(count = 0; count < 42 ; count++)
{
SendData(EPD_3IN52_lut_R21_DU[count]);
}
SendCommand(0x24); // bb b
for(count = 0; count < 42 ; count++)
{
SendData(EPD_3IN52_lut_R24_DU[count]);
}
if(EPD_3IN52_Flag == 0)
{
SendCommand(0x22); // bw r
for(count = 0; count < 56 ; count++)
{
SendData(EPD_3IN52_lut_R22_DU[count]);
}
SendCommand(0x23); // wb w
for(count = 0; count < 42 ; count++)
{
SendData(EPD_3IN52_lut_R23_DU[count]);
}
EPD_3IN52_Flag = 1;
}
else
{
SendCommand(0x22); // bw r
for(count = 0; count < 56 ; count++)
{
SendData(EPD_3IN52_lut_R23_DU[count]);
}
SendCommand(0x23); // wb w
for(count = 0; count < 42 ; count++)
{
SendData(EPD_3IN52_lut_R22_DU[count]);
}
EPD_3IN52_Flag = 0;
}
}
void Epd::display(UBYTE* picData)
{
UWORD i;
SendCommand(0x13); //Transfer new data
for(i=0;i<(width*height/8);i++)
{
SendData(pgm_read_byte(&picData[i]));
}
}
void Epd::display_part(UBYTE *Image, UWORD xstart, UWORD ystart, UWORD image_width, UWORD image_heigh)
{
UWORD i,j;
SendCommand(0x13); //Transfer new data
for(i=0; i<height; i++)
for(j=0; j<(width/8); j++)
{
if((j >= xstart/8) && (j < (image_width + xstart)/8) && (i >= ystart) && (i <= (ystart + image_heigh)) )
{
SendData(Image[(i-ystart) * image_width/8 + j - xstart/8]);
// Serial.print(Image[(i-ystart) * image_width/8 + j - xstart], HEX);
// Serial.print(" ");
}
else
{
SendData(0x00);
}
}
}
void Epd::display_NUM(UBYTE NUM)
{
UWORD row, column;
// UWORD pcnt = 0;
SendCommand(0x13); //Transfer new data
for(column=0; column<height; column++)
{
for(row=0; row<width/8; row++)
{
switch (NUM)
{
case EPD_3IN52_WHITE:
SendData(0xFF);
break;
case EPD_3IN52_BLACK:
SendData(0x00);
break;
case EPD_3IN52_Source_Line:
SendData(0xAA);
break;
case EPD_3IN52_Gate_Line:
if(column%2)
SendData(0xff); //An odd number of Gate line
else
SendData(0x00); //The even line Gate
break;
case EPD_3IN52_Chessboard:
if(row>=(width/8/2)&&column>=(height/2))
SendData(0xff);
else if(row<(width/8/2)&&column<(height/2))
SendData(0xff);
else
SendData(0x00);
break;
case EPD_3IN52_LEFT_BLACK_RIGHT_WHITE:
if(row>=(width/8/2))
SendData(0xff);
else
SendData(0x00);
break;
case EPD_3IN52_UP_BLACK_DOWN_WHITE:
if(column>=(height/2))
SendData(0xFF);
else
SendData(0x00);
break;
case EPD_3IN52_Frame:
if(column==0||column==(height-1))
SendData(0x00);
else if(row==0)
SendData(0x7F);
else if(row==(width/8-1))
SendData(0xFE);
else
SendData(0xFF);
break;
case EPD_3IN52_Crosstalk:
if((row>=(width/8/3)&&row<=(width/8/3*2)&&column<=(height/3))||(row>=(width/8/3)&&row<=(width/8/3*2)&&column>=(height/3*2)))
SendData(0x00);
else
SendData(0xFF);
break;
case EPD_3IN52_Image:
//SendData(gImage_1[pcnt++]);
break;
default:
break;
}
}
}
}
/******************************************************************************
function : Clear screen
parameter:
******************************************************************************/
void Epd::Clear(void)
{
UWORD i;
SendCommand(0x13); //Transfer new data
for(i=0;i<(width*height/8);i++)
{
SendData(0xFF);
}
lut_GC();
refresh();
}
/******************************************************************************
function : Enter sleep mode
parameter:
******************************************************************************/
void Epd::sleep(void)
{
SendCommand(0X07); //deep sleep
SendData(0xA5);
}

View file

@ -0,0 +1,89 @@
/*****************************************************************************
* | File : EPD_3IN52.h
* | Author : Waveshare team
* | Function : 3.52inch e-paper
* | Info :
*----------------
* | This version: V1.0
* | Date : 2022-05-07
* | Info :
* -----------------------------------------------------------------------------
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documnetation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
******************************************************************************/
#ifndef __EPD_3IN52_H_
#define __EPD_3IN52_H_
#include "epdif.h"
// Display resolution
#define EPD_WIDTH 240
#define EPD_HEIGHT 360
#define UWORD unsigned int
#define UBYTE unsigned char
#define UDOUBLE unsigned long
#define EPD_3IN52_WHITE 0xFF //
#define EPD_3IN52_BLACK 0x00 //
#define EPD_3IN52_Source_Line 0xAA //
#define EPD_3IN52_Gate_Line 0x55 //
#define EPD_3IN52_UP_BLACK_DOWN_WHITE 0xF0 //
#define EPD_3IN52_LEFT_BLACK_RIGHT_WHITE 0x0F //
#define EPD_3IN52_Frame 0x01 //
#define EPD_3IN52_Crosstalk 0x02 //
#define EPD_3IN52_Chessboard 0x03 //
#define EPD_3IN52_Image 0x04 //
extern unsigned char EPD_3IN52_Flag;
class Epd : EpdIf {
public:
Epd();
~Epd();
int Init(void);
void Reset(void);
void SendCommand(unsigned char command);
void SendData(unsigned char data);
void ReadBusy(void);
void lut(void);
void refresh(void);
void lut_GC(void);
void lut_DU(void);
void display(UBYTE* picData);
void display_part(UBYTE *Image, UWORD xstart, UWORD ystart, UWORD image_width, UWORD image_heigh);
void display_NUM(UBYTE NUM);
void Clear(void);
void sleep(void);
private:
unsigned int reset_pin;
unsigned int dc_pin;
unsigned int cs_pin;
unsigned int busy_pin;
unsigned long width;
unsigned long height;
unsigned char EPD_3IN52_Flag;
};
#endif

View file

@ -0,0 +1,84 @@
/**
@filename : epd3in52-demo.ino
@brief : 3.52inch e-paper display demo
@author : Waveshare
Copyright (C) Waveshare 2022/7/22
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documnetation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
#include <SPI.h>
#include "EPD_3in52.h"
#include "imagedata.h"
#include "epdpaint.h"
#define COLORED 0
#define UNCOLORED 1
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Epd epd;
if (epd.Init() != 0) {
Serial.print("e-Paper init failed");
return;
}
Serial.print("3.52inch e-paper demo\r\n ");
Serial.print("e-Paper Clear\r\n ");
epd.display_NUM(EPD_3IN52_WHITE);
epd.lut_GC();
epd.refresh();
epd.SendCommand(0x50);
epd.SendData(0x17);
delay(2000);
// UBYTE image[700];
// Paint paint(image, 200, 25); // width should be the multiple of 8
// paint.SetRotate(ROTATE_0);
// paint.Clear(COLORED);
// Serial.print("Drawing:BlackImage\r\n ");
// paint.DrawStringAt(0, 0, "e-Paper Demo", &Font24, UNCOLORED);
// epd.display_part(paint.GetImage(), 0, 0, paint.GetWidth(), paint.GetHeight());
// epd.lut_GC();
// epd.refresh();
// delay(2000);
epd.display(IMAGE_DATA);
epd.lut_GC();
epd.refresh();
delay(2000);
Serial.print("clear and sleep......\r\n ");
epd.Clear();
delay(2000);
epd.sleep();
Serial.print("end\r\n ");
}
void loop() {
// put your main code here, to run repeatedly:
}

View file

@ -0,0 +1,65 @@
/**
* @filename : epdif.cpp
* @brief : Implements EPD interface functions
* Users have to implement all the functions in epdif.cpp
* @author : Yehui from Waveshare
*
* Copyright (C) Waveshare August 10 2017
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documnetation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "epdif.h"
#include <spi.h>
EpdIf::EpdIf() {
};
EpdIf::~EpdIf() {
};
void EpdIf::DigitalWrite(int pin, int value) {
digitalWrite(pin, value);
}
int EpdIf::DigitalRead(int pin) {
return digitalRead(pin);
}
void EpdIf::DelayMs(unsigned int delaytime) {
delay(delaytime);
}
void EpdIf::SpiTransfer(unsigned char data) {
digitalWrite(CS_PIN, LOW);
SPI.transfer(data);
digitalWrite(CS_PIN, HIGH);
}
int EpdIf::IfInit(void) {
pinMode(CS_PIN, OUTPUT);
pinMode(RST_PIN, OUTPUT);
pinMode(DC_PIN, OUTPUT);
pinMode(BUSY_PIN, INPUT);
SPI.begin();
SPI.beginTransaction(SPISettings(2000000, MSBFIRST, SPI_MODE0));
return 0;
}

51
Arduino/epd3in52/epdif.h Normal file
View file

@ -0,0 +1,51 @@
/**
* @filename : epdif.h
* @brief : Header file of epdif.cpp providing EPD interface functions
* Users have to implement all the functions in epdif.cpp
* @author : Yehui from Waveshare
*
* Copyright (C) Waveshare August 10 2017
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documnetation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef EPDIF_H
#define EPDIF_H
#include <arduino.h>
// Pin definition
#define RST_PIN 8
#define DC_PIN 9
#define CS_PIN 10
#define BUSY_PIN 7
class EpdIf {
public:
EpdIf(void);
~EpdIf(void);
static int IfInit(void);
static void DigitalWrite(int pin, int value);
static int DigitalRead(int pin);
static void DelayMs(unsigned int delaytime);
static void SpiTransfer(unsigned char data);
};
#endif

View file

@ -0,0 +1,342 @@
/**
* @filename : epdpaint.cpp
* @brief : Paint tools
* @author : Yehui from Waveshare
*
* Copyright (C) Waveshare September 9 2017
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documnetation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include <avr/pgmspace.h>
#include "epdpaint.h"
Paint::Paint(unsigned char* image, int width, int height) {
this->rotate = ROTATE_0;
this->image = image;
/* 1 byte = 8 pixels, so the width should be the multiple of 8 */
this->width = width % 8 ? width + 8 - (width % 8) : width;
this->height = height;
}
Paint::~Paint() {
}
/**
* @brief: clear the image
*/
void Paint::Clear(int colored) {
for (int x = 0; x < this->width; x++) {
for (int y = 0; y < this->height; y++) {
DrawAbsolutePixel(x, y, colored);
}
}
}
/**
* @brief: this draws a pixel by absolute coordinates.
* this function won't be affected by the rotate parameter.
*/
void Paint::DrawAbsolutePixel(int x, int y, int colored) {
if (x < 0 || x >= this->width || y < 0 || y >= this->height) {
return;
}
if (IF_INVERT_COLOR) {
if (colored) {
image[(x + y * this->width) / 8] |= 0x80 >> (x % 8);
} else {
image[(x + y * this->width) / 8] &= ~(0x80 >> (x % 8));
}
} else {
if (colored) {
image[(x + y * this->width) / 8] &= ~(0x80 >> (x % 8));
} else {
image[(x + y * this->width) / 8] |= 0x80 >> (x % 8);
}
}
}
/**
* @brief: Getters and Setters
*/
unsigned char* Paint::GetImage(void) {
return this->image;
}
int Paint::GetWidth(void) {
return this->width;
}
void Paint::SetWidth(int width) {
this->width = width % 8 ? width + 8 - (width % 8) : width;
}
int Paint::GetHeight(void) {
return this->height;
}
void Paint::SetHeight(int height) {
this->height = height;
}
int Paint::GetRotate(void) {
return this->rotate;
}
void Paint::SetRotate(int rotate){
this->rotate = rotate;
}
/**
* @brief: this draws a pixel by the coordinates
*/
void Paint::DrawPixel(int x, int y, int colored) {
int point_temp;
if (this->rotate == ROTATE_0) {
if(x < 0 || x >= this->width || y < 0 || y >= this->height) {
return;
}
DrawAbsolutePixel(x, y, colored);
} else if (this->rotate == ROTATE_90) {
if(x < 0 || x >= this->height || y < 0 || y >= this->width) {
return;
}
point_temp = x;
x = this->width - y;
y = point_temp;
DrawAbsolutePixel(x, y, colored);
} else if (this->rotate == ROTATE_180) {
if(x < 0 || x >= this->width || y < 0 || y >= this->height) {
return;
}
x = this->width - x;
y = this->height - y;
DrawAbsolutePixel(x, y, colored);
} else if (this->rotate == ROTATE_270) {
if(x < 0 || x >= this->height || y < 0 || y >= this->width) {
return;
}
point_temp = x;
x = y;
y = this->height - point_temp;
DrawAbsolutePixel(x, y, colored);
}
}
/**
* @brief: this draws a charactor on the frame buffer but not refresh
*/
void Paint::DrawCharAt(int x, int y, char ascii_char, sFONT* font, int colored) {
int i, j;
unsigned int char_offset = (ascii_char - ' ') * font->Height * (font->Width / 8 + (font->Width % 8 ? 1 : 0));
const unsigned char* ptr = &font->table[char_offset];
for (j = 0; j < font->Height; j++) {
for (i = 0; i < font->Width; i++) {
if (pgm_read_byte(ptr) & (0x80 >> (i % 8))) {
DrawPixel(x + i, y + j, colored);
}
if (i % 8 == 7) {
ptr++;
}
}
if (font->Width % 8 != 0) {
ptr++;
}
}
}
/**
* @brief: this displays a string on the frame buffer but not refresh
*/
void Paint::DrawStringAt(int x, int y, const char* text, sFONT* font, int colored) {
const char* p_text = text;
unsigned int counter = 0;
int refcolumn = x;
/* Send the string character by character on EPD */
while (*p_text != 0) {
/* Display one character on EPD */
DrawCharAt(refcolumn, y, *p_text, font, colored);
/* Decrement the column position by 16 */
refcolumn += font->Width;
/* Point on the next character */
p_text++;
counter++;
}
}
/**
* @brief: this draws a line on the frame buffer
*/
void Paint::DrawLine(int x0, int y0, int x1, int y1, int colored) {
/* Bresenham algorithm */
int dx = x1 - x0 >= 0 ? x1 - x0 : x0 - x1;
int sx = x0 < x1 ? 1 : -1;
int dy = y1 - y0 <= 0 ? y1 - y0 : y0 - y1;
int sy = y0 < y1 ? 1 : -1;
int err = dx + dy;
while((x0 != x1) && (y0 != y1)) {
DrawPixel(x0, y0 , colored);
if (2 * err >= dy) {
err += dy;
x0 += sx;
}
if (2 * err <= dx) {
err += dx;
y0 += sy;
}
}
}
/**
* @brief: this draws a horizontal line on the frame buffer
*/
void Paint::DrawHorizontalLine(int x, int y, int line_width, int colored) {
int i;
for (i = x; i < x + line_width; i++) {
DrawPixel(i, y, colored);
}
}
/**
* @brief: this draws a vertical line on the frame buffer
*/
void Paint::DrawVerticalLine(int x, int y, int line_height, int colored) {
int i;
for (i = y; i < y + line_height; i++) {
DrawPixel(x, i, colored);
}
}
/**
* @brief: this draws a rectangle
*/
void Paint::DrawRectangle(int x0, int y0, int x1, int y1, int colored) {
int min_x, min_y, max_x, max_y;
min_x = x1 > x0 ? x0 : x1;
max_x = x1 > x0 ? x1 : x0;
min_y = y1 > y0 ? y0 : y1;
max_y = y1 > y0 ? y1 : y0;
DrawHorizontalLine(min_x, min_y, max_x - min_x + 1, colored);
DrawHorizontalLine(min_x, max_y, max_x - min_x + 1, colored);
DrawVerticalLine(min_x, min_y, max_y - min_y + 1, colored);
DrawVerticalLine(max_x, min_y, max_y - min_y + 1, colored);
}
/**
* @brief: this draws a filled rectangle
*/
void Paint::DrawFilledRectangle(int x0, int y0, int x1, int y1, int colored) {
int min_x, min_y, max_x, max_y;
int i;
min_x = x1 > x0 ? x0 : x1;
max_x = x1 > x0 ? x1 : x0;
min_y = y1 > y0 ? y0 : y1;
max_y = y1 > y0 ? y1 : y0;
for (i = min_x; i <= max_x; i++) {
DrawVerticalLine(i, min_y, max_y - min_y + 1, colored);
}
}
/**
* @brief: this draws a circle
*/
void Paint::DrawCircle(int x, int y, int radius, int colored) {
/* Bresenham algorithm */
int x_pos = -radius;
int y_pos = 0;
int err = 2 - 2 * radius;
int e2;
do {
DrawPixel(x - x_pos, y + y_pos, colored);
DrawPixel(x + x_pos, y + y_pos, colored);
DrawPixel(x + x_pos, y - y_pos, colored);
DrawPixel(x - x_pos, y - y_pos, colored);
e2 = err;
if (e2 <= y_pos) {
err += ++y_pos * 2 + 1;
if(-x_pos == y_pos && e2 <= x_pos) {
e2 = 0;
}
}
if (e2 > x_pos) {
err += ++x_pos * 2 + 1;
}
} while (x_pos <= 0);
}
/**
* @brief: this draws a filled circle
*/
void Paint::DrawFilledCircle(int x, int y, int radius, int colored) {
/* Bresenham algorithm */
int x_pos = -radius;
int y_pos = 0;
int err = 2 - 2 * radius;
int e2;
do {
DrawPixel(x - x_pos, y + y_pos, colored);
DrawPixel(x + x_pos, y + y_pos, colored);
DrawPixel(x + x_pos, y - y_pos, colored);
DrawPixel(x - x_pos, y - y_pos, colored);
DrawHorizontalLine(x + x_pos, y + y_pos, 2 * (-x_pos) + 1, colored);
DrawHorizontalLine(x + x_pos, y - y_pos, 2 * (-x_pos) + 1, colored);
e2 = err;
if (e2 <= y_pos) {
err += ++y_pos * 2 + 1;
if(-x_pos == y_pos && e2 <= x_pos) {
e2 = 0;
}
}
if(e2 > x_pos) {
err += ++x_pos * 2 + 1;
}
} while(x_pos <= 0);
}
/* END OF FILE */

View file

@ -0,0 +1,75 @@
/**
* @filename : epdpaint.h
* @brief : Header file for epdpaint.cpp
* @author : Yehui from Waveshare
*
* Copyright (C) Waveshare July 28 2017
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documnetation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef EPDPAINT_H
#define EPDPAINT_H
// Display orientation
#define ROTATE_0 0
#define ROTATE_90 1
#define ROTATE_180 2
#define ROTATE_270 3
// Color inverse. 1 or 0 = set or reset a bit if set a colored pixel
#define IF_INVERT_COLOR 1
#include "fonts.h"
class Paint {
public:
Paint(unsigned char* image, int width, int height);
~Paint();
void Clear(int colored);
int GetWidth(void);
void SetWidth(int width);
int GetHeight(void);
void SetHeight(int height);
int GetRotate(void);
void SetRotate(int rotate);
unsigned char* GetImage(void);
void DrawAbsolutePixel(int x, int y, int colored);
void DrawPixel(int x, int y, int colored);
void DrawCharAt(int x, int y, char ascii_char, sFONT* font, int colored);
void DrawStringAt(int x, int y, const char* text, sFONT* font, int colored);
void DrawLine(int x0, int y0, int x1, int y1, int colored);
void DrawHorizontalLine(int x, int y, int width, int colored);
void DrawVerticalLine(int x, int y, int height, int colored);
void DrawRectangle(int x0, int y0, int x1, int y1, int colored);
void DrawFilledRectangle(int x0, int y0, int x1, int y1, int colored);
void DrawCircle(int x, int y, int radius, int colored);
void DrawFilledCircle(int x, int y, int radius, int colored);
private:
unsigned char* image;
int width;
int height;
int rotate;
};
#endif
/* END OF FILE */

1385
Arduino/epd3in52/font12.cpp Normal file

File diff suppressed because it is too large Load diff

1765
Arduino/epd3in52/font16.cpp Normal file

File diff suppressed because it is too large Load diff

2143
Arduino/epd3in52/font20.cpp Normal file

File diff suppressed because it is too large Load diff

2521
Arduino/epd3in52/font24.cpp Normal file

File diff suppressed because it is too large Load diff

1005
Arduino/epd3in52/font8.cpp Normal file

File diff suppressed because it is too large Load diff

65
Arduino/epd3in52/fonts.h Normal file
View file

@ -0,0 +1,65 @@
/**
******************************************************************************
* @file fonts.h
* @author MCD Application Team
* @version V1.0.0
* @date 18-February-2014
* @brief Header for fonts.c file
******************************************************************************
* @attention
*
* <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of STMicroelectronics nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __FONTS_H
#define __FONTS_H
/* Max size of bitmap will based on a font24 (17x24) */
#define MAX_HEIGHT_FONT 24
#define MAX_WIDTH_FONT 17
#define OFFSET_BITMAP 54
/* Includes ------------------------------------------------------------------*/
#include <stdint.h>
struct sFONT {
const uint8_t *table;
uint16_t Width;
uint16_t Height;
};
extern sFONT Font24;
extern sFONT Font20;
extern sFONT Font16;
extern sFONT Font12;
extern sFONT Font8;
#endif /* __FONTS_H */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

View file

@ -0,0 +1,707 @@
/**
* @filename : imagedata.cpp
* @brief : data file for epd demo
*
* Copyright (C) Waveshare 2022/7/22
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documnetation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "imagedata.h"
#include <avr/pgmspace.h>
const unsigned char IMAGE_DATA[10800] PROGMEM = {
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X00,
0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XF0,0X00,0X00,0X00,
0X00,0X7F,0XFF,0XFF,0XFF,0XC0,0X7F,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X7F,
0XFF,0XFF,0XFF,0XC0,0X7F,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,
0XFF,0XC0,0X7F,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X70,0X7C,
0X00,0X00,0X00,0X3F,0XFF,0XFC,0X00,0X00,0X70,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XC0,
0X7F,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XF0,0XFE,0X00,0X00,
0X00,0X3F,0XFF,0XF0,0X00,0X01,0XFC,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XE0,0X7F,0XFF,
0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XF1,0XFF,0X00,0X00,0X00,0X3F,
0XFF,0XE0,0X00,0X07,0XFF,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XE0,0X3F,0XFF,0XFF,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XF3,0XFF,0X00,0X00,0X00,0X3F,0XFF,0XC0,
0X00,0X1F,0XFF,0X80,0X00,0X7F,0XFF,0XFF,0XFF,0XF0,0X1F,0XFF,0XFF,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X00,0X03,0XF3,0XEF,0X80,0X00,0X00,0X3F,0XFF,0X80,0X00,0X7F,
0XFF,0XEC,0X00,0X7F,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X00,0X03,0XC3,0XC7,0X80,0X00,0X00,0X3F,0XFF,0X00,0X01,0XFF,0XFF,0XFE,
0X00,0X7F,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X00,0X03,0XC3,0XC7,0X80,0X00,0X00,0X3F,0XFE,0X00,0X07,0XFF,0XFF,0XFE,0X00,0X7F,
0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X03,
0XC7,0X87,0X80,0X00,0X00,0X3F,0XFC,0X00,0X0F,0XFF,0X87,0XFF,0X00,0X7F,0XFF,0XFF,
0XFF,0XC0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XC7,0X87,
0X80,0X00,0X00,0X3F,0XFC,0X00,0X1F,0XFE,0X00,0XFF,0X80,0X7F,0XFF,0XFF,0XFF,0XC0,
0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0X8F,0X80,0X00,
0X00,0X3F,0XF8,0X00,0X1F,0XFE,0X00,0X7F,0XC0,0X7F,0XFF,0XFF,0XFF,0XC0,0X00,0X00,
0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0X1F,0X00,0X00,0X00,0X3F,
0XF8,0X00,0X1F,0XFF,0X80,0X7F,0XE0,0X7F,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X1F,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0X1F,0X00,0X00,0X00,0X3F,0XF0,0X00,
0X0F,0XFF,0XE0,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X1F,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0XFE,0X1E,0X00,0X00,0X00,0X3F,0XF0,0X00,0X01,0XFF,
0XFC,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X38,0X1C,0X00,0X00,0X00,0X3F,0XE0,0X00,0X00,0X7F,0XFF,0X00,
0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XE0,0X00,0X00,0X1F,0XFF,0X80,0X00,0X7F,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X3F,0XC0,0X00,0X00,0X07,0XFF,0X80,0X00,0X7F,0XFF,0XFF,
0XFF,0XFF,0XF0,0X7F,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X3F,0XC0,0X3F,0XF0,0X01,0XFF,0X80,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,
0X00,0X7D,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0X80,0X00,
0X00,0X3F,0XC0,0X1F,0XFC,0X07,0XFF,0X80,0X00,0X7F,0XFF,0XFF,0XFF,0XFC,0X00,0X78,
0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X3F,
0XC0,0X0F,0XFF,0X1F,0XFF,0X80,0X00,0X7F,0XFF,0XFF,0XFF,0XF8,0X00,0X70,0X7F,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X3F,0X80,0X07,
0XFF,0XE7,0XFE,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XF0,0X00,0X60,0X3F,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X3F,0X80,0X03,0XFF,0XF9,
0XE0,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XE0,0X00,0X70,0X3F,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X03,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X3F,0X80,0X01,0XFF,0XFF,0X00,0X00,
0X00,0X7F,0XFF,0XFF,0XFF,0XE0,0X00,0X70,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0X80,0X00,0XDF,0XFF,0XC0,0X00,0X00,0X7F,
0XFF,0XFF,0XFF,0XE0,0X00,0X78,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X3F,0X80,0X00,0X07,0XFF,0XF8,0X00,0X00,0X7F,0XFF,0XFF,
0XFF,0XC0,0X70,0X78,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X3F,0X80,0X00,0X00,0XFF,0XFE,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XC0,
0XF0,0X78,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XC2,0X00,0X00,
0X00,0X3F,0X80,0X00,0X00,0X3F,0XFF,0X80,0X00,0X7F,0XFF,0XFF,0XFF,0XC0,0XF0,0X78,
0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XC6,0X00,0X00,0X00,0X3F,
0X80,0X00,0X00,0X0F,0XFF,0X80,0X00,0X7F,0XFF,0XFF,0XFF,0XC0,0XF0,0X78,0X1F,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XCF,0X00,0X00,0X00,0X3F,0X80,0X00,
0X00,0X3F,0XFF,0X80,0X00,0X7F,0XFF,0XFF,0XFF,0XC0,0XF0,0X78,0X1F,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XCF,0X00,0X00,0X00,0X3F,0X80,0X00,0X00,0XFF,
0XFF,0X80,0X00,0X7F,0XFF,0XFF,0XFF,0XC0,0XF0,0X70,0X1F,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X00,0X03,0XF3,0XC7,0X80,0X00,0X00,0X3F,0X80,0X00,0X07,0XFF,0XFE,0X00,
0X00,0XFF,0XFF,0XFF,0XFF,0XC0,0X70,0X60,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X00,0X03,0XC3,0XC7,0X80,0X00,0X00,0X3F,0X80,0X00,0X1F,0XFF,0XF0,0X00,0X00,0XFF,
0XFF,0XFF,0XFF,0XC0,0X10,0X40,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X03,
0XC3,0XC7,0X80,0X00,0X00,0X3F,0X80,0X00,0X1F,0XFF,0X80,0X00,0X00,0XFF,0XFF,0XFF,
0XFF,0XE0,0X00,0X00,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XC3,0XC7,
0X80,0X00,0X00,0X3F,0X80,0X00,0X1F,0XFE,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XE0,
0X00,0X00,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XC3,0XC7,0X80,0X00,
0X00,0X3F,0X80,0X00,0X1F,0XFF,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,
0X7F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XE3,0XCF,0X80,0X00,0X00,0X3F,
0X80,0X00,0X0F,0XFF,0XC0,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0XFF,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0X00,0X00,0X00,0X3F,0X80,0X00,
0X03,0XFF,0XF8,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X01,0XFF,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0X00,0X00,0X00,0X3F,0X80,0X00,0X00,0X7F,
0XFF,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X03,0XFF,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0XFF,0XFE,0X00,0X00,0X00,0X3F,0X80,0X00,0X00,0X1F,0XFF,0X80,
0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X0F,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X3F,0XFC,0X00,0X00,0X00,0X3F,0X80,0X00,0X00,0X3F,0XFF,0X80,0X07,0XFF,
0XFF,0XFF,0XFF,0XFF,0XF8,0X7F,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X0F,0XE0,0X00,0X00,0X00,0X3F,0X80,0X00,0X01,0XFF,0XFF,0X80,0X0F,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X3F,0X80,0X00,0X0F,0XFF,0XFF,0X80,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,
0XC0,0X1F,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X02,0X00,0X00,0X80,0X00,
0X00,0X3F,0X80,0X00,0X0F,0XFF,0XFE,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X03,
0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X80,0X03,0X80,0X00,0X00,0X3F,
0X80,0X00,0X0F,0XFF,0XF0,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X01,0XFF,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XE0,0X0F,0X80,0X00,0X00,0X3F,0X80,0X00,
0X0F,0XFF,0X80,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X7F,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X00,0X03,0XF0,0X3F,0X80,0X00,0X00,0X3F,0X80,0X00,0X0F,0XFC,
0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X7F,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X00,0X03,0XFC,0XFF,0X80,0X00,0X00,0X3F,0X80,0X00,0X0F,0XE0,0X00,0X01,
0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X00,0X01,0XFF,0XFF,0X00,0X00,0X00,0X3F,0X80,0X00,0X0F,0X00,0X00,0X03,0XFF,0XFF,
0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X7F,0XFC,0X00,0X00,0X00,0X3F,0X80,0X00,0X08,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XC0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XF0,
0X00,0X00,0X00,0X3F,0X80,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,
0X3F,0XE0,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XF0,0X00,0X00,
0X00,0X3F,0X80,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X7F,0XF0,
0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFC,0X00,0X00,0X00,0X3F,
0X80,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0XFF,0XF8,0X1F,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0X00,0X00,0X00,0X3F,0X80,0X00,
0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0XFF,0XF8,0X1F,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X00,0X03,0XFC,0X7F,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0XFF,0XF8,0X1F,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X00,0X03,0XF0,0X1F,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0XFF,0XF8,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X00,0X03,0XC0,0X07,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XF0,0X7F,0XF0,0X7F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X03,
0X00,0X01,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XF8,0X00,0X00,0X00,0X07,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,
0X00,0X00,0X00,0X07,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,
0X00,0X07,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X07,
0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X40,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X07,0XFC,0X00,
0X00,0X00,0X00,0X00,0X01,0XF3,0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X07,0XFC,0X00,0X00,0X00,
0X00,0X00,0X01,0XF3,0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X07,0XFC,0X00,0X00,0X00,0X00,0X00,
0X01,0XF3,0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X07,0XFC,0X00,0X00,0X00,0X00,0X00,0X01,0XF3,
0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X87,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X40,0X00,0X00,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XC0,0X00,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XDF,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XF8,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X1F,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X00,0X3F,0XFC,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X00,0X3F,0XFE,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X00,0X7F,0XFE,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X7C,
0X3F,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XF8,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XE0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0XF8,0X1F,0X00,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XE0,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,
0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0XF0,0X0F,0X00,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XC0,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,
0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0XF0,0X0F,0X00,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0X80,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X7F,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0XF0,0X0F,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0X81,0XE0,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0XF0,0X78,0X7F,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X00,0XF0,0X0F,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X07,
0XF8,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XC1,0XF0,0X7C,0X3F,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X00,0XF0,0X0F,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,0XFC,0X3F,
0XFF,0XFF,0XFF,0XFF,0XFF,0XC1,0XF0,0X7C,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X00,0XF0,0X0F,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,0XFC,0X3F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XC1,0XF0,0X7C,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,
0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XC1,0XF0,0X7C,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,
0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X07,0XF8,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,
0X70,0X38,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0X80,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0X81,0XE0,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X30,0X00,
0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0X80,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X38,0X00,0X1F,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0XC0,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X38,0X00,0X1F,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XE0,
0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X38,0X00,0X3F,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XF8,0X07,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X3C,0X00,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XF8,0X3C,0X00,0X7F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFC,0X3E,0X00,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0X83,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X3F,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X1F,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XF0,0X00,0X0F,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XF8,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,
0XE0,0X00,0X07,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XE0,0X00,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XE0,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,
0X07,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFE,0X00,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XC0,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X03,0XFF,
0XFF,0XFF,0XFC,0X00,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0X80,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X03,0XFF,0XFF,0XFF,
0XFC,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0X81,0XE0,0X7F,0XFF,0XFF,0XFF,0XFF,0XC0,0X3E,0X01,0XFF,0XFF,0XFF,0XFC,0X00,
0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X07,
0XF8,0X3F,0XFF,0XFF,0XFF,0XFF,0X80,0XFF,0X01,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,
0X1F,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,0XFC,0X3F,
0XFF,0XFF,0XFF,0XFF,0X80,0XFF,0X81,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X3F,0XFF,
0XFF,0XFF,0XFF,0XFE,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,0XFC,0X3F,0XFF,0XFF,
0XFF,0XFF,0X81,0XFF,0X81,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,
0XFF,0XFF,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,
0X81,0XFF,0X81,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X07,0XF8,0X3F,0XFF,0XFF,0XFF,0XFF,0X81,0XFF,
0X81,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0XFF,0XFC,0X00,0X00,0X1F,0XFF,0X80,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0X81,0XE0,0X7F,0XFF,0XFF,0XFF,0XFF,0X81,0XFF,0X81,0XFF,
0XFF,0XFF,0XFC,0X00,0X00,0X00,0XFF,0XC0,0X00,0X00,0X01,0XFF,0X80,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0X80,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0X81,0XFF,0X81,0XFF,0XFF,0XFF,
0XFC,0X00,0X00,0X01,0XFF,0X80,0X00,0X00,0X00,0XFF,0XC0,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0XC0,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0X81,0XFF,0X81,0XFF,0XFF,0XFF,0XFC,0X00,
0X00,0X01,0XFF,0X00,0X00,0X00,0X00,0X7F,0XC0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XE0,
0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0X81,0XFF,0X81,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X01,
0XFE,0X00,0X00,0X00,0X00,0X3F,0XC0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XF8,0X07,0XFF,
0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X01,0XFE,0X00,
0X00,0X00,0X00,0X3F,0XC0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0X80,0X00,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X01,0XFE,0X00,0X00,0X00,
0X00,0X3F,0XC0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XF1,0XF3,0XFF,0XFF,0XFF,0XFF,0XFF,
0X80,0X00,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X01,0XFE,0X00,0X00,0X00,0X00,0X3F,
0XC0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XC1,0XF0,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,
0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X01,0XFE,0X00,0X00,0X00,0X00,0X3F,0XC0,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0X81,0XF0,0X7F,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,
0X1F,0XFF,0XFC,0X00,0X00,0X01,0XFF,0X00,0X00,0X00,0X00,0X7F,0XC0,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0X81,0XF0,0X7F,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X1F,0XFF,
0XFC,0X00,0X00,0X01,0XFF,0X80,0X00,0X00,0X00,0XFF,0XC0,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0X07,0XF8,0X3F,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X1F,0XFF,0XFC,0X00,
0X00,0X00,0XFF,0XC0,0X00,0X00,0X01,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,
0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,
0XFF,0XFC,0X00,0X00,0X1F,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,0XFC,0X3F,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X7F,0XFF,
0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,0XFC,0X3F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,
0XFF,0XFF,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X07,0XF8,0X3F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFE,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X81,0XE0,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0X80,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X7F,
0XFF,0XFF,0XFC,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0XC0,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X7D,0XFF,0XFF,
0XFC,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0XE0,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X78,0XFF,0XFF,0XFC,0X00,
0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFC,
0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X70,0X7F,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFE,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X60,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X03,
0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XE0,0X00,0X70,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XE0,0X00,0X70,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,
0X00,0X78,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X70,0X78,
0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0XF0,0X78,0X1F,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFC,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0XF0,0X78,0X1F,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X00,0X03,0XFC,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0XF0,0X78,0X1F,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X00,0X03,0XFC,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0XF0,0X78,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X00,0X03,0XFC,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XC0,0XF0,0X70,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X03,
0XFC,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XF0,0X3D,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XC0,0X70,0X60,0X1F,0XFF,0XFC,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XC0,0X38,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,
0X10,0X40,0X3F,0XFF,0XFC,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0X80,0X30,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,
0X3F,0XFF,0XFC,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0X80,0X38,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X3F,0XFF,
0XFC,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0X06,0X3C,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X7F,0XFF,0XFC,0X00,
0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0E,
0X3C,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0XFF,0XFF,0XFC,0X00,0X00,0X01,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0E,0X3C,0X3F,
0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X01,0XFF,0XFF,0XFC,0X00,0X00,0X01,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0E,0X3C,0X3F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFE,0X00,0X03,0XFF,0XFF,0XFC,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X06,0X38,0X3F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0X80,0X0F,0XFF,0XFF,0XFC,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X82,0X20,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XF8,0X7F,0XFF,0XFF,0XFC,0X00,0X00,0X01,0XFF,0XF8,0X00,0X03,0XFC,0X00,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0X80,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFC,0X00,0X00,0X00,0X7F,0XFE,0X00,0X03,0XFC,0X00,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0XC0,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFC,0X00,0X00,0X00,0X1F,0XFF,0X80,0X03,0XFC,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0XE0,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,
0X00,0X00,0X07,0XFF,0XC0,0X03,0XFC,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XF8,
0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,
0X03,0XFF,0XF0,0X03,0XFC,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0XFF,
0XFC,0X03,0XFC,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X3F,0XFE,0X03,
0XFC,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X1F,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X1F,0XFF,0X83,0XFC,0X00,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X1F,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X07,0XFF,0XE3,0XFC,0X00,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XF0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X01,0XFF,0XFB,0XFC,0X00,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XF0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XF0,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XF0,0X00,
0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X0F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XF0,0X00,0X03,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X03,0XFF,0XFC,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X1F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFC,0X00,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0X80,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFC,0X00,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,
0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFC,0X00,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0X83,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X1F,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFC,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0X83,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X1F,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0X83,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0X83,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X7F,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XC0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X7F,0X80,0X00,0X00,0X7F,
0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,
0X3F,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X03,0XFF,0XF0,0X00,0X00,0X7F,0X80,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XC0,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0XFF,0XFF,
0XFF,0XFF,0XFC,0X00,0X00,0X00,0X0F,0XFF,0XFC,0X00,0X00,0X7F,0X80,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0X80,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0XFF,0XFF,0XFF,0XFF,
0XFC,0X00,0X00,0X00,0X1F,0XFF,0XFF,0X00,0X00,0X7F,0X80,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,
0X00,0X00,0X3F,0XFF,0XFF,0X80,0X00,0X7F,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,
0X7F,0XFF,0XFF,0XC0,0X00,0X7F,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X07,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X7F,0XFF,
0XFF,0XF0,0X00,0X7F,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XF0,0X7F,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XF8,
0X00,0X7F,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0X00,0X00,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFC,0X00,0X7F,
0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X8F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,
0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0XFF,0XE0,0X7F,0XFE,0X00,0X7F,0X80,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XC7,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,
0X1F,0XFF,0XFC,0X00,0X00,0X01,0XFF,0X80,0X1F,0XFF,0X00,0X7F,0X80,0X00,0X00,0X3F,
0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X1F,0XFF,
0XFC,0X00,0X00,0X01,0XFF,0X00,0X07,0XFF,0X80,0X7F,0X80,0X00,0X00,0X3F,0XFF,0XFF,
0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFC,0X00,
0X00,0X01,0XFE,0X00,0X03,0XFF,0XE0,0X7F,0X80,0X00,0X00,0X3F,0XFF,0XFF,0X80,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X01,
0XFE,0X00,0X01,0XFF,0XF0,0X7F,0X80,0X00,0X00,0X3F,0XFF,0XFF,0X80,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X01,0XFE,0X00,
0X00,0X7F,0XF8,0X7F,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X01,0XFE,0X00,0X00,0X3F,
0XFC,0X7F,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X01,0XFE,0X00,0X00,0X1F,0XFE,0X7F,
0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X01,0XFE,0X00,0X00,0X0F,0XFF,0X7F,0X80,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFC,0X00,0X00,0X01,0XFF,0X00,0X00,0X07,0XFF,0XFF,0X80,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X0F,0XC7,0XFF,0XFF,
0XFC,0X00,0X00,0X00,0XFF,0X80,0X00,0X03,0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X0F,0XC1,0XFF,0XFF,0XFC,0X00,
0X00,0X00,0XFF,0XC0,0X00,0X00,0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X00,
0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X0F,0XC0,0XFF,0XFF,0XFC,0X00,0X00,0X00,
0XFF,0XF8,0X00,0X00,0X7F,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X0F,0XC0,0X7F,0XFF,0XFC,0X00,0X00,0X00,0X7F,0XFE,
0X00,0X00,0X3F,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XF8,0X00,0X3F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XE0,0X0F,0XC0,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X7F,0XFE,0X00,0X00,
0X1F,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XE0,0X3F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XE0,0X0F,0XC0,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X3F,0XFE,0X00,0X00,0X0F,0XFF,
0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,
0X0F,0XC0,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X1F,0XFE,0X00,0X00,0X07,0XFF,0X80,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XF0,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X3F,0XF0,
0X1F,0XFF,0XFC,0X00,0X00,0X00,0X0F,0XFE,0X00,0X00,0X03,0XFF,0X80,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X7F,0XF8,0X1F,0XFF,
0XFC,0X00,0X00,0X00,0X07,0XFE,0X00,0X00,0X00,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0XFF,0XF8,0X1F,0XFF,0XFC,0X00,
0X00,0X00,0X01,0XFE,0X00,0X00,0X00,0X7F,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X00,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0XFF,0XF8,0X1F,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X7E,0X00,0X00,0X00,0X3F,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X00,0X0F,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0XFF,0XF8,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X06,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XF0,0X00,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XC0,0X7F,0XF8,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XC0,0X3F,0XE0,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XE0,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,
0X00,0X00,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XFC,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,
0X3F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X3F,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X7F,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X00,
0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0XFF,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X01,0X00,0X00,0X08,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X07,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X01,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X07,
0X00,0X00,0X1C,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X7F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X00,0X07,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X0F,0X80,0X00,
0X3E,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XC0,0X1F,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X1F,0XC0,0X00,0X7F,0X00,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X3F,0XE0,0X00,0XFF,0X80,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X7F,0XF8,0X03,0XFF,0XC0,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X1F,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X3F,0XFC,0X07,0XFF,0X80,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X1F,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X1F,0XFE,0X0F,0XFF,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X0F,0XFF,0X1F,0XFE,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X07,
0XFF,0XBF,0XFC,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,
0XF8,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XC0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XE0,0X00,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,
0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XC0,0X00,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,
0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0X80,0X00,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X7F,0XFF,0XFF,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X1F,0XFF,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X87,
0XF8,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X3F,0XFF,0X80,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X8F,0XFC,0X3F,
0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X7F,0XFF,0XC0,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,0XFC,0X3F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XE0,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,
0XE0,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XE0,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0XF0,0X00,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X07,0XF8,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,
0X7F,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X03,0XFF,0XBF,0XF8,0X00,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0X01,0XE0,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,
0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X07,0XFF,0X1F,0XFC,0X00,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0X80,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X1F,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X1F,0XFE,0X0F,0XFF,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0X80,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X1F,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X3F,0XFC,0X07,0XFF,0X80,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XE0,
0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X7F,0XF8,0X03,0XFF,0XC0,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XF8,0X07,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X3F,
0XF0,0X01,0XFF,0X80,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X1F,0XE0,0X00,
0XFF,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XC0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X0F,0XC0,0X00,0X7E,0X00,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,
0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X07,0X00,0X00,0X1C,0X00,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XC0,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X02,0X00,0X00,0X08,0X00,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0X80,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X07,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,
0XE0,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0X03,0XC0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFE,0X00,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X8F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X01,0XC0,
0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0X87,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X01,0XC0,0X00,0X00,
0X1F,0XFF,0XFC,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFE,0X01,0XC0,0X00,0X00,0X1F,0XFF,
0XFC,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFE,0X01,0XC0,0X00,0X00,0X1F,0XFF,0XFC,0X00,
0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XFE,0X01,0XC0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,
0X3F,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0XFF,0X03,0XC0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X7F,0XFF,
0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0X87,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,
0XFF,0XFF,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0XFF,0XFC,0X00,0X00,0X1F,0XFF,
0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0XFF,0XC0,0X00,0X00,0X01,0XFF,0X80,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFE,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFC,0X00,0X00,0X01,0XFF,0X80,0X00,0X00,0X00,0XFF,0XC0,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0XE0,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFC,0X00,0X00,0X01,0XFF,0X00,0X00,0X00,0X00,0X7F,0XC0,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0X80,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X1F,0XFF,0XFC,0X00,
0X00,0X01,0XFE,0X00,0X00,0X00,0X00,0X3F,0XC0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X80,
0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFC,0X01,0XFF,0XF8,0X1F,0XFF,0XFC,0X00,0X00,0X01,
0XFE,0X00,0X00,0X00,0X00,0X3F,0XC0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X00,0X00,0X7F,
0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X7F,0XF8,0X1F,0XFF,0XFC,0X00,0X00,0X01,0XFE,0X00,
0X00,0X00,0X00,0X3F,0XC0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0E,0X38,0X7F,0XFF,0XFF,
0XFF,0XFF,0XE0,0X00,0X3F,0XF8,0X1F,0XFF,0XFC,0X00,0X00,0X01,0XFE,0X00,0X00,0X00,
0X00,0X3F,0XC0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0E,0X3C,0X3F,0XFF,0XFF,0XFF,0XFF,
0XE0,0X00,0X0F,0XF8,0X1F,0XFF,0XFC,0X00,0X00,0X01,0XFE,0X00,0X00,0X00,0X00,0X3F,
0XC0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0E,0X3C,0X3F,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,
0X07,0XF8,0X1F,0XFF,0XFC,0X00,0X00,0X01,0XFF,0X00,0X00,0X00,0X00,0X7F,0XC0,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0X0E,0X3C,0X3F,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X03,0XF8,
0X1F,0XFF,0XFC,0X00,0X00,0X01,0XFF,0X80,0X00,0X00,0X00,0XFF,0XC0,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0X06,0X18,0X3F,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X01,0XF8,0X1F,0XFF,
0XFC,0X00,0X00,0X00,0XFF,0XC0,0X00,0X00,0X01,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0X87,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0X80,0X30,0X00,0XF8,0X1F,0XFF,0XFC,0X00,
0X00,0X00,0XFF,0XFC,0X00,0X00,0X1F,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X87,
0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0X80,0XFE,0X00,0X78,0X1F,0XFF,0XFC,0X00,0X00,0X00,
0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XC7,0X80,0XFF,
0XFF,0XFF,0XFF,0XFF,0X81,0XFF,0X00,0X38,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X7F,0XFF,
0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XF7,0XC1,0XFF,0XFF,0XFF,
0XFF,0XFF,0X81,0XFF,0XC0,0X18,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,
0XFF,0XFE,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0X81,0XFF,0XE0,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFC,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X81,0XFF,
0XF0,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0XFF,0XF8,0X00,
0X1F,0XFF,0XFC,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X3F,0XFC,0X00,0X1F,0XFF,
0XFC,0X00,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X0F,0XFE,0X00,0X1F,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFE,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X0F,0XFF,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X03,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XE0,0X0F,0XFF,0X80,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XE0,0X0F,0XFF,0XC0,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XF0,0X0F,0XFF,0XE0,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X0F,
0XFF,0XF0,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0X7F,0XFF,0XBF,0XFF,0XFF,0XFF,0XFF,0XFE,0X0F,0XFF,0XF8,
0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XE0,0X00,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0X3F,0XFE,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0X1F,0XF8,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,
0XF0,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X07,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X03,0XC0,0X3F,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X0F,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X01,0X00,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XE0,0X1F,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,
0XFF,0XFC,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XC0,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,
0X81,0XFF,0X80,0X03,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFE,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XE0,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0X81,0XFE,
0X00,0X01,0XFF,0XFF,0XFC,0X00,0X00,0X01,0XFE,0X00,0X7F,0XFF,0XFF,0XFF,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XF0,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0X81,0XFC,0X00,0X00,
0XFF,0XFF,0XFC,0X00,0X00,0X01,0XFE,0X00,0X7F,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0XFC,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0X81,0XF8,0X00,0X00,0X7F,0XFF,
0XFC,0X00,0X00,0X01,0XFE,0X00,0X7F,0XFE,0X1F,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,
0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0X81,0XF8,0X00,0X00,0X3F,0XFF,0XFC,0X00,
0X00,0X01,0XFE,0X00,0XFF,0XF0,0X03,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0X80,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0X81,0XF8,0X00,0X00,0X3F,0XFF,0XFC,0X00,0X00,0X01,
0XFE,0X00,0XFF,0XC0,0X00,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0X80,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0XFF,0X81,0XF0,0X00,0X00,0X3F,0XFF,0XFC,0X00,0X00,0X01,0XFF,0X00,
0XFF,0X80,0X00,0X7F,0XC0,0X00,0X00,0X3F,0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0XFF,0X81,0XF0,0X1F,0XE0,0X1F,0XFF,0XFC,0X00,0X00,0X01,0XFF,0X00,0XFF,0X80,
0X00,0X7F,0XC0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0X81,0XF0,0X3F,0XF0,0X1F,0XFF,0XFC,0X00,0X00,0X00,0XFF,0X00,0XFF,0X00,0X00,0X3F,
0XC0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X81,0XF0,
0X7F,0XF8,0X1F,0XFF,0XFC,0X00,0X00,0X00,0XFF,0X80,0XFF,0X00,0X00,0X3F,0XC0,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XF1,0XF3,0XFF,0XFF,0XFF,0XFF,0XFF,0X81,0XF0,0X7F,0XF8,
0X1F,0XFF,0XFC,0X00,0X00,0X00,0XFF,0X80,0XFF,0X00,0X00,0X3F,0XC0,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0XC1,0XF0,0XFF,0XFF,0XFF,0XFF,0XFF,0X81,0XF0,0X7F,0XF8,0X1F,0XFF,
0XFC,0X00,0X00,0X00,0X7F,0XC0,0X7F,0X00,0X00,0X3F,0XC0,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0X81,0XF0,0X7F,0XFF,0XFF,0XFF,0XFF,0X81,0XF8,0X7F,0XF8,0X1F,0XFF,0XFC,0X00,
0X00,0X00,0X7F,0XE0,0X7F,0X00,0X00,0X7F,0XC0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X81,
0XF0,0X7F,0XFF,0XFF,0XFF,0XFF,0X80,0X78,0X7F,0XF0,0X1F,0XFF,0XFC,0X00,0X00,0X00,
0X3F,0XF0,0X3F,0X80,0X00,0X7F,0XC0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X07,0XF8,0X3F,
0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X3F,0X80,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X3F,0XFC,
0X3F,0XC0,0X00,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,0XFC,0X3F,0XFF,0XFF,
0XFF,0XFF,0X80,0X00,0X1F,0X80,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X1F,0XFF,0X1F,0XE0,
0X03,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,
0X80,0X00,0X1F,0X80,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XF0,0X3F,0XFF,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0X80,0X00,
0X3F,0X80,0X7F,0XFF,0XFC,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0X07,0XF8,0X3F,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X3F,0X80,
0XFF,0XFF,0XFC,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0X81,0XE0,0X7F,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X3F,0X81,0XFF,0XFF,
0XFC,0X00,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0X80,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X3F,0X83,0XFF,0XFF,0XFC,0X00,
0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XC0,
0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XBF,0X87,0XFF,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X7F,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XE0,0X01,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X1F,
0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFC,0X0F,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,
0XFF,0X80,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFE,0X00,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XC0,0X00,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFE,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0XE0,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X7F,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0X80,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X3F,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X80,
0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X1F,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X00,0X00,0X7F,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X7C,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0E,0X38,0X7F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X7F,0X80,0X03,
0XFF,0XC0,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0E,0X3C,0X3F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XE0,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X03,0XFF,0XE0,0X0F,0XFF,0XE0,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0E,0X3C,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XF0,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X07,0XFF,0XF0,0X1F,0XFF,0XF8,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0X0E,0X3C,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,
0X7F,0XFF,0XFC,0X00,0X00,0X00,0X1F,0XFF,0XF8,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0X06,0X18,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFC,0X00,0X00,0X00,0X3F,0XFF,0XFC,0X7F,0XFF,0XFE,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0X87,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,
0X00,0X00,0X3F,0XFF,0XFE,0XFF,0XFF,0XFE,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X87,
0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,
0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XC7,0X80,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X7F,0XFF,
0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XF7,0XC1,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,
0X87,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0X0F,0XF8,0X07,0XFF,0XFF,0XFC,0X00,0X00,0X00,0XFF,0XC0,0XFF,0XFE,0X01,0XFF,
0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X03,
0XF0,0X01,0XFF,0XFF,0XFC,0X00,0X00,0X00,0XFF,0X80,0X3F,0XFC,0X00,0X7F,0X80,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X01,0XE0,0X00,
0XFF,0XFF,0XFC,0X00,0X00,0X01,0XFF,0X00,0X1F,0XF8,0X00,0X7F,0XC0,0X00,0X00,0X3F,
0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0XC0,0X00,0XFF,0XFF,
0XFC,0X00,0X00,0X01,0XFE,0X00,0X1F,0XF0,0X00,0X3F,0XC0,0X00,0X00,0X3F,0XFF,0XFF,
0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X80,0X00,0X7F,0XFF,0XFC,0X00,
0X00,0X01,0XFE,0X00,0X0F,0XF0,0X00,0X3F,0XC0,0X00,0X00,0X3F,0XFF,0XFF,0X80,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X3F,0XFF,0XFC,0X00,0X00,0X01,
0XFE,0X00,0X0F,0XF0,0X00,0X3F,0XC0,0X00,0X00,0X3F,0XFF,0XFF,0X80,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X3F,0XFF,0XFC,0X00,0X00,0X01,0XFE,0X00,
0X0F,0XF0,0X00,0X3F,0XC0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XC0,0X00,0X00,0X80,0X3F,0XFF,0XFC,0X00,0X00,0X01,0XFE,0X00,0X0F,0XF0,
0X00,0X3F,0XC0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0X80,0X70,0X07,0XF0,0X1F,0XFF,0XFC,0X00,0X00,0X01,0XFE,0X00,0X0F,0XF0,0X00,0X3F,
0XC0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0XF8,
0X07,0XF0,0X1F,0XFF,0XFC,0X00,0X00,0X01,0XFF,0X00,0X0F,0XF0,0X00,0X7F,0XC0,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0X87,0XFF,0XFF,0XFF,0XFF,0XFF,0X81,0XFC,0X0F,0XF8,
0X1F,0XFF,0XFC,0X00,0X00,0X01,0XFF,0X80,0X0F,0XF0,0X00,0X7F,0XC0,0X00,0X00,0X3F,
0XFF,0XFF,0XF8,0X1C,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0X81,0XFC,0X0F,0XF8,0X1F,0XFF,
0XFC,0X00,0X00,0X00,0XFF,0XC0,0X0F,0XF0,0X00,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,
0XF0,0X08,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0X81,0XFC,0X0F,0XF8,0X1F,0XFF,0XFC,0X00,
0X00,0X00,0XFF,0XF8,0X00,0X00,0X03,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XE0,0X00,
0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0X81,0XFC,0X0F,0XF8,0X1F,0XFF,0XFC,0X00,0X00,0X00,
0XFF,0XF8,0X00,0X00,0X0F,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XE0,0X00,0X00,0X7F,
0XFF,0XFF,0XFF,0XFF,0X80,0XFC,0X0F,0XF0,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X7F,0XF8,
0X00,0X00,0X0F,0XFF,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XC1,0XC0,0XF8,0X3F,0XFF,0XFF,
0XFF,0XFF,0X80,0X7C,0X0F,0XE0,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X3F,0XF8,0X00,0X00,
0X0F,0XFF,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XC3,0XE1,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,
0XC0,0X3F,0XFF,0X80,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X3F,0XF8,0X00,0X00,0X0F,0XFE,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XC3,0XE1,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XC0,0X3F,
0XFF,0X80,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X1F,0XF8,0X00,0X00,0X0F,0XFC,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XC3,0XE1,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XC0,0X3F,0XFF,0X80,
0X3F,0XFF,0XFC,0X00,0X00,0X00,0X0F,0XF8,0X00,0X00,0X0F,0XF8,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XC3,0XE1,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XE0,0X3F,0XFF,0X80,0X7F,0XFF,
0XFC,0X00,0X00,0X00,0X03,0XF8,0X00,0X00,0X0F,0XF0,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XC3,0XE1,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XF0,0X3F,0XFF,0X80,0XFF,0XFF,0XFC,0X00,
0X00,0X00,0X00,0XF8,0X00,0X00,0X0F,0XC0,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XC3,0XE1,
0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XF8,0X3F,0XFF,0X80,0XFF,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X0E,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XC0,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0X83,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XC0,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XDF,0XFF,0X8F,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XC0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XC0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
};

View file

@ -0,0 +1,28 @@
/**
* @filename : imagedata.h
* @brief : head file for imagedata.cpp
*
* Copyright (C) Waveshare 2022/7/22
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documnetation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
extern const unsigned char IMAGE_DATA[];
/* FILE END */

4
Arduino/epd3in7/.vscode/arduino.json vendored Normal file
View file

@ -0,0 +1,4 @@
{
"board": "arduino:avr:uno",
"sketch": "epd3in7.ino"
}

View file

@ -0,0 +1,538 @@
{
"version": 4,
"configurations": [
{
"name": "Arduino",
"compilerPath": "D:\\Arduino\\az\\Arduino\\hardware\\tools\\avr\\bin\\avr-g++",
"compilerArgs": [
"-w",
"-std=gnu++11",
"-fpermissive",
"-fno-exceptions",
"-ffunction-sections",
"-fdata-sections",
"-fno-threadsafe-statics",
"-Wno-error=narrowing"
],
"intelliSenseMode": "gcc-x64",
"includePath": [
"D:\\Arduino\\az\\Arduino\\hardware\\arduino\\avr\\cores\\arduino",
"D:\\Arduino\\az\\Arduino\\hardware\\arduino\\avr\\variants\\standard",
"D:\\Arduino\\az\\Arduino\\hardware\\arduino\\avr\\libraries\\SPI\\src",
"d:\\arduino\\az\\arduino\\hardware\\tools\\avr\\lib\\gcc\\avr\\7.3.0\\include",
"d:\\arduino\\az\\arduino\\hardware\\tools\\avr\\lib\\gcc\\avr\\7.3.0\\include-fixed",
"d:\\arduino\\az\\arduino\\hardware\\tools\\avr\\avr\\include"
],
"forcedInclude": [
"D:\\Arduino\\az\\Arduino\\hardware\\arduino\\avr\\cores\\arduino\\Arduino.h"
],
"cStandard": "c11",
"cppStandard": "c++11",
"defines": [
"F_CPU=16000000L",
"ARDUINO=10818",
"ARDUINO_AVR_UNO",
"ARDUINO_ARCH_AVR",
"__DBL_MIN_EXP__=(-125)",
"__HQ_FBIT__=15",
"__cpp_attributes=200809",
"__UINT_LEAST16_MAX__=0xffffU",
"__ATOMIC_ACQUIRE=2",
"__SFRACT_IBIT__=0",
"__FLT_MIN__=1.17549435e-38F",
"__GCC_IEC_559_COMPLEX=0",
"__BUILTIN_AVR_SLEEP=1",
"__BUILTIN_AVR_COUNTLSULLK=1",
"__cpp_aggregate_nsdmi=201304",
"__BUILTIN_AVR_COUNTLSULLR=1",
"__UFRACT_MAX__=0XFFFFP-16UR",
"__UINT_LEAST8_TYPE__=unsigned char",
"__DQ_FBIT__=63",
"__INTMAX_C(c)=c ## LL",
"__ULFRACT_FBIT__=32",
"__SACCUM_EPSILON__=0x1P-7HK",
"__CHAR_BIT__=8",
"__USQ_IBIT__=0",
"__UINT8_MAX__=0xff",
"__ACCUM_FBIT__=15",
"__WINT_MAX__=0x7fff",
"__FLT32_MIN_EXP__=(-125)",
"__cpp_static_assert=200410",
"__USFRACT_FBIT__=8",
"__ORDER_LITTLE_ENDIAN__=1234",
"__SIZE_MAX__=0xffffU",
"__WCHAR_MAX__=0x7fff",
"__LACCUM_IBIT__=32",
"__DBL_DENORM_MIN__=double(1.40129846e-45L)",
"__GCC_ATOMIC_CHAR_LOCK_FREE=1",
"__GCC_IEC_559=0",
"__FLT_EVAL_METHOD__=0",
"__BUILTIN_AVR_LLKBITS=1",
"__cpp_binary_literals=201304",
"__LLACCUM_MAX__=0X7FFFFFFFFFFFFFFFP-47LLK",
"__GCC_ATOMIC_CHAR32_T_LOCK_FREE=1",
"__BUILTIN_AVR_HKBITS=1",
"__BUILTIN_AVR_BITSLLK=1",
"__FRACT_FBIT__=15",
"__BUILTIN_AVR_BITSLLR=1",
"__cpp_variadic_templates=200704",
"__UINT_FAST64_MAX__=0xffffffffffffffffULL",
"__SIG_ATOMIC_TYPE__=char",
"__BUILTIN_AVR_UHKBITS=1",
"__UACCUM_FBIT__=16",
"__DBL_MIN_10_EXP__=(-37)",
"__FINITE_MATH_ONLY__=0",
"__cpp_variable_templates=201304",
"__LFRACT_IBIT__=0",
"__GNUC_PATCHLEVEL__=0",
"__FLT32_HAS_DENORM__=1",
"__LFRACT_MAX__=0X7FFFFFFFP-31LR",
"__UINT_FAST8_MAX__=0xff",
"__has_include(STR)=__has_include__(STR)",
"__DEC64_MAX_EXP__=385",
"__INT8_C(c)=c",
"__INT_LEAST8_WIDTH__=8",
"__UINT_LEAST64_MAX__=0xffffffffffffffffULL",
"__SA_FBIT__=15",
"__SHRT_MAX__=0x7fff",
"__LDBL_MAX__=3.40282347e+38L",
"__FRACT_MAX__=0X7FFFP-15R",
"__UFRACT_FBIT__=16",
"__UFRACT_MIN__=0.0UR",
"__UINT_LEAST8_MAX__=0xff",
"__GCC_ATOMIC_BOOL_LOCK_FREE=1",
"__UINTMAX_TYPE__=long long unsigned int",
"__LLFRACT_EPSILON__=0x1P-63LLR",
"__BUILTIN_AVR_DELAY_CYCLES=1",
"__DEC32_EPSILON__=1E-6DF",
"__FLT_EVAL_METHOD_TS_18661_3__=0",
"__UINT32_MAX__=0xffffffffUL",
"__GXX_EXPERIMENTAL_CXX0X__=1",
"__ULFRACT_MAX__=0XFFFFFFFFP-32ULR",
"__TA_IBIT__=16",
"__LDBL_MAX_EXP__=128",
"__WINT_MIN__=(-__WINT_MAX__ - 1)",
"__INT_LEAST16_WIDTH__=16",
"__ULLFRACT_MIN__=0.0ULLR",
"__SCHAR_MAX__=0x7f",
"__WCHAR_MIN__=(-__WCHAR_MAX__ - 1)",
"__INT64_C(c)=c ## LL",
"__DBL_DIG__=6",
"__GCC_ATOMIC_POINTER_LOCK_FREE=1",
"__AVR_HAVE_SPH__=1",
"__LLACCUM_MIN__=(-0X1P15LLK-0X1P15LLK)",
"__BUILTIN_AVR_KBITS=1",
"__BUILTIN_AVR_ABSK=1",
"__BUILTIN_AVR_ABSR=1",
"__SIZEOF_INT__=2",
"__SIZEOF_POINTER__=2",
"__GCC_ATOMIC_CHAR16_T_LOCK_FREE=1",
"__USACCUM_IBIT__=8",
"__USER_LABEL_PREFIX__",
"__STDC_HOSTED__=1",
"__LDBL_HAS_INFINITY__=1",
"__LFRACT_MIN__=(-0.5LR-0.5LR)",
"__HA_IBIT__=8",
"__FLT32_DIG__=6",
"__TQ_IBIT__=0",
"__FLT_EPSILON__=1.19209290e-7F",
"__GXX_WEAK__=1",
"__SHRT_WIDTH__=16",
"__USFRACT_IBIT__=0",
"__LDBL_MIN__=1.17549435e-38L",
"__FRACT_MIN__=(-0.5R-0.5R)",
"__AVR_SFR_OFFSET__=0x20",
"__DEC32_MAX__=9.999999E96DF",
"__cpp_threadsafe_static_init=200806",
"__DA_IBIT__=32",
"__INT32_MAX__=0x7fffffffL",
"__UQQ_FBIT__=8",
"__INT_WIDTH__=16",
"__SIZEOF_LONG__=4",
"__UACCUM_MAX__=0XFFFFFFFFP-16UK",
"__UINT16_C(c)=c ## U",
"__PTRDIFF_WIDTH__=16",
"__DECIMAL_DIG__=9",
"__LFRACT_EPSILON__=0x1P-31LR",
"__AVR_2_BYTE_PC__=1",
"__ULFRACT_MIN__=0.0ULR",
"__INTMAX_WIDTH__=64",
"__has_include_next(STR)=__has_include_next__(STR)",
"__BUILTIN_AVR_ULLRBITS=1",
"__LDBL_HAS_QUIET_NAN__=1",
"__ULACCUM_IBIT__=32",
"__UACCUM_EPSILON__=0x1P-16UK",
"__BUILTIN_AVR_SEI=1",
"__GNUC__=7",
"__ULLACCUM_MAX__=0XFFFFFFFFFFFFFFFFP-48ULLK",
"__cpp_delegating_constructors=200604",
"__HQ_IBIT__=0",
"__BUILTIN_AVR_SWAP=1",
"__FLT_HAS_DENORM__=1",
"__SIZEOF_LONG_DOUBLE__=4",
"__BIGGEST_ALIGNMENT__=1",
"__STDC_UTF_16__=1",
"__UINT24_MAX__=16777215UL",
"__BUILTIN_AVR_NOP=1",
"__GNUC_STDC_INLINE__=1",
"__DQ_IBIT__=0",
"__FLT32_HAS_INFINITY__=1",
"__DBL_MAX__=double(3.40282347e+38L)",
"__ULFRACT_IBIT__=0",
"__cpp_raw_strings=200710",
"__INT_FAST32_MAX__=0x7fffffffL",
"__DBL_HAS_INFINITY__=1",
"__INT64_MAX__=0x7fffffffffffffffLL",
"__ACCUM_IBIT__=16",
"__DEC32_MIN_EXP__=(-94)",
"__BUILTIN_AVR_UKBITS=1",
"__INTPTR_WIDTH__=16",
"__BUILTIN_AVR_FMULSU=1",
"__LACCUM_MAX__=0X7FFFFFFFFFFFFFFFP-31LK",
"__INT_FAST16_TYPE__=int",
"__LDBL_HAS_DENORM__=1",
"__BUILTIN_AVR_BITSK=1",
"__BUILTIN_AVR_BITSR=1",
"__cplusplus=201402L",
"__cpp_ref_qualifiers=200710",
"__DEC128_MAX__=9.999999999999999999999999999999999E6144DL",
"__INT_LEAST32_MAX__=0x7fffffffL",
"__USING_SJLJ_EXCEPTIONS__=1",
"__DEC32_MIN__=1E-95DF",
"__ACCUM_MAX__=0X7FFFFFFFP-15K",
"__DEPRECATED=1",
"__cpp_rvalue_references=200610",
"__DBL_MAX_EXP__=128",
"__USACCUM_EPSILON__=0x1P-8UHK",
"__WCHAR_WIDTH__=16",
"__FLT32_MAX__=3.40282347e+38F32",
"__DEC128_EPSILON__=1E-33DL",
"__SFRACT_MAX__=0X7FP-7HR",
"__FRACT_IBIT__=0",
"__PTRDIFF_MAX__=0x7fff",
"__UACCUM_MIN__=0.0UK",
"__UACCUM_IBIT__=16",
"__BUILTIN_AVR_NOPS=1",
"__BUILTIN_AVR_WDR=1",
"__FLT32_HAS_QUIET_NAN__=1",
"__GNUG__=7",
"__LONG_LONG_MAX__=0x7fffffffffffffffLL",
"__SIZEOF_SIZE_T__=2",
"__ULACCUM_MAX__=0XFFFFFFFFFFFFFFFFP-32ULK",
"__cpp_rvalue_reference=200610",
"__cpp_nsdmi=200809",
"__SIZEOF_WINT_T__=2",
"__LONG_LONG_WIDTH__=64",
"__cpp_initializer_lists=200806",
"__FLT32_MAX_EXP__=128",
"__SA_IBIT__=16",
"__ULLACCUM_MIN__=0.0ULLK",
"__BUILTIN_AVR_ROUNDUHK=1",
"__BUILTIN_AVR_ROUNDUHR=1",
"__cpp_hex_float=201603",
"__GXX_ABI_VERSION=1011",
"__INT24_MAX__=8388607L",
"__UTA_FBIT__=48",
"__FLT_MIN_EXP__=(-125)",
"__USFRACT_MAX__=0XFFP-8UHR",
"__UFRACT_IBIT__=0",
"__BUILTIN_AVR_ROUNDFX=1",
"__BUILTIN_AVR_ROUNDULK=1",
"__BUILTIN_AVR_ROUNDULR=1",
"__cpp_lambdas=200907",
"__BUILTIN_AVR_COUNTLSLLK=1",
"__BUILTIN_AVR_COUNTLSLLR=1",
"__BUILTIN_AVR_ROUNDHK=1",
"__INT_FAST64_TYPE__=long long int",
"__BUILTIN_AVR_ROUNDHR=1",
"__DBL_MIN__=double(1.17549435e-38L)",
"__BUILTIN_AVR_COUNTLSK=1",
"__BUILTIN_AVR_ROUNDLK=1",
"__BUILTIN_AVR_COUNTLSR=1",
"__BUILTIN_AVR_ROUNDLR=1",
"__LACCUM_MIN__=(-0X1P31LK-0X1P31LK)",
"__ULLACCUM_FBIT__=48",
"__BUILTIN_AVR_LKBITS=1",
"__ULLFRACT_EPSILON__=0x1P-64ULLR",
"__DEC128_MIN__=1E-6143DL",
"__REGISTER_PREFIX__",
"__UINT16_MAX__=0xffffU",
"__DBL_HAS_DENORM__=1",
"__BUILTIN_AVR_ULKBITS=1",
"__ACCUM_MIN__=(-0X1P15K-0X1P15K)",
"__AVR_ARCH__=2",
"__SQ_IBIT__=0",
"__FLT32_MIN__=1.17549435e-38F32",
"__UINT8_TYPE__=unsigned char",
"__BUILTIN_AVR_ROUNDUK=1",
"__BUILTIN_AVR_ROUNDUR=1",
"__UHA_FBIT__=8",
"__NO_INLINE__=1",
"__SFRACT_MIN__=(-0.5HR-0.5HR)",
"__UTQ_FBIT__=128",
"__FLT_MANT_DIG__=24",
"__LDBL_DECIMAL_DIG__=9",
"__VERSION__=\"7.3.0\"",
"__UINT64_C(c)=c ## ULL",
"__ULLFRACT_FBIT__=64",
"__cpp_unicode_characters=200704",
"__FRACT_EPSILON__=0x1P-15R",
"__ULACCUM_MIN__=0.0ULK",
"__UDA_FBIT__=32",
"__cpp_decltype_auto=201304",
"__LLACCUM_EPSILON__=0x1P-47LLK",
"__GCC_ATOMIC_INT_LOCK_FREE=1",
"__FLT32_MANT_DIG__=24",
"__BUILTIN_AVR_BITSUHK=1",
"__BUILTIN_AVR_BITSUHR=1",
"__FLOAT_WORD_ORDER__=__ORDER_LITTLE_ENDIAN__",
"__USFRACT_MIN__=0.0UHR",
"__BUILTIN_AVR_BITSULK=1",
"__ULLACCUM_IBIT__=16",
"__BUILTIN_AVR_BITSULR=1",
"__UQQ_IBIT__=0",
"__BUILTIN_AVR_LLRBITS=1",
"__SCHAR_WIDTH__=8",
"__BUILTIN_AVR_BITSULLK=1",
"__BUILTIN_AVR_BITSULLR=1",
"__INT32_C(c)=c ## L",
"__DEC64_EPSILON__=1E-15DD",
"__ORDER_PDP_ENDIAN__=3412",
"__DEC128_MIN_EXP__=(-6142)",
"__UHQ_FBIT__=16",
"__LLACCUM_FBIT__=47",
"__FLT32_MAX_10_EXP__=38",
"__BUILTIN_AVR_ROUNDULLK=1",
"__BUILTIN_AVR_ROUNDULLR=1",
"__INT_FAST32_TYPE__=long int",
"__BUILTIN_AVR_HRBITS=1",
"__UINT_LEAST16_TYPE__=unsigned int",
"__BUILTIN_AVR_UHRBITS=1",
"__INT16_MAX__=0x7fff",
"__SIZE_TYPE__=unsigned int",
"__UINT64_MAX__=0xffffffffffffffffULL",
"__UDQ_FBIT__=64",
"__INT8_TYPE__=signed char",
"__cpp_digit_separators=201309",
"__ELF__=1",
"__ULFRACT_EPSILON__=0x1P-32ULR",
"__LLFRACT_FBIT__=63",
"__FLT_RADIX__=2",
"__INT_LEAST16_TYPE__=int",
"__BUILTIN_AVR_ABSFX=1",
"__LDBL_EPSILON__=1.19209290e-7L",
"__UINTMAX_C(c)=c ## ULL",
"__INT24_MIN__=(-__INT24_MAX__-1)",
"__SACCUM_MAX__=0X7FFFP-7HK",
"__BUILTIN_AVR_ABSHR=1",
"__SIG_ATOMIC_MAX__=0x7f",
"__GCC_ATOMIC_WCHAR_T_LOCK_FREE=1",
"__cpp_sized_deallocation=201309",
"__SIZEOF_PTRDIFF_T__=2",
"__AVR=1",
"__BUILTIN_AVR_ABSLK=1",
"__BUILTIN_AVR_ABSLR=1",
"__LACCUM_EPSILON__=0x1P-31LK",
"__DEC32_SUBNORMAL_MIN__=0.000001E-95DF",
"__INT_FAST16_MAX__=0x7fff",
"__UINT_FAST32_MAX__=0xffffffffUL",
"__UINT_LEAST64_TYPE__=long long unsigned int",
"__USACCUM_MAX__=0XFFFFP-8UHK",
"__SFRACT_EPSILON__=0x1P-7HR",
"__FLT_HAS_QUIET_NAN__=1",
"__FLT_MAX_10_EXP__=38",
"__LONG_MAX__=0x7fffffffL",
"__DEC128_SUBNORMAL_MIN__=0.000000000000000000000000000000001E-6143DL",
"__FLT_HAS_INFINITY__=1",
"__cpp_unicode_literals=200710",
"__USA_FBIT__=16",
"__UINT_FAST16_TYPE__=unsigned int",
"__DEC64_MAX__=9.999999999999999E384DD",
"__INT_FAST32_WIDTH__=32",
"__BUILTIN_AVR_RBITS=1",
"__CHAR16_TYPE__=unsigned int",
"__PRAGMA_REDEFINE_EXTNAME=1",
"__SIZE_WIDTH__=16",
"__INT_LEAST16_MAX__=0x7fff",
"__DEC64_MANT_DIG__=16",
"__UINT_LEAST32_MAX__=0xffffffffUL",
"__SACCUM_FBIT__=7",
"__FLT32_DENORM_MIN__=1.40129846e-45F32",
"__GCC_ATOMIC_LONG_LOCK_FREE=1",
"__SIG_ATOMIC_WIDTH__=8",
"__INT_LEAST64_TYPE__=long long int",
"__INT16_TYPE__=int",
"__INT_LEAST8_TYPE__=signed char",
"__SQ_FBIT__=31",
"__DEC32_MAX_EXP__=97",
"__INT_FAST8_MAX__=0x7f",
"__INTPTR_MAX__=0x7fff",
"__QQ_FBIT__=7",
"__cpp_range_based_for=200907",
"__UTA_IBIT__=16",
"__AVR_ERRATA_SKIP__=1",
"__FLT32_MIN_10_EXP__=(-37)",
"__LDBL_MANT_DIG__=24",
"__SFRACT_FBIT__=7",
"__SACCUM_MIN__=(-0X1P7HK-0X1P7HK)",
"__DBL_HAS_QUIET_NAN__=1",
"__SIG_ATOMIC_MIN__=(-__SIG_ATOMIC_MAX__ - 1)",
"AVR=1",
"__BUILTIN_AVR_FMULS=1",
"__cpp_return_type_deduction=201304",
"__INTPTR_TYPE__=int",
"__UINT16_TYPE__=unsigned int",
"__WCHAR_TYPE__=int",
"__SIZEOF_FLOAT__=4",
"__AVR__=1",
"__BUILTIN_AVR_INSERT_BITS=1",
"__USQ_FBIT__=32",
"__UINTPTR_MAX__=0xffffU",
"__INT_FAST64_WIDTH__=64",
"__DEC64_MIN_EXP__=(-382)",
"__cpp_decltype=200707",
"__FLT32_DECIMAL_DIG__=9",
"__INT_FAST64_MAX__=0x7fffffffffffffffLL",
"__GCC_ATOMIC_TEST_AND_SET_TRUEVAL=1",
"__FLT_DIG__=6",
"__UINT_FAST64_TYPE__=long long unsigned int",
"__BUILTIN_AVR_BITSHK=1",
"__BUILTIN_AVR_BITSHR=1",
"__INT_MAX__=0x7fff",
"__LACCUM_FBIT__=31",
"__USACCUM_MIN__=0.0UHK",
"__UHA_IBIT__=8",
"__INT64_TYPE__=long long int",
"__BUILTIN_AVR_BITSLK=1",
"__BUILTIN_AVR_BITSLR=1",
"__FLT_MAX_EXP__=128",
"__UTQ_IBIT__=0",
"__DBL_MANT_DIG__=24",
"__cpp_inheriting_constructors=201511",
"__BUILTIN_AVR_ULLKBITS=1",
"__INT_LEAST64_MAX__=0x7fffffffffffffffLL",
"__DEC64_MIN__=1E-383DD",
"__WINT_TYPE__=int",
"__UINT_LEAST32_TYPE__=long unsigned int",
"__SIZEOF_SHORT__=2",
"__ULLFRACT_IBIT__=0",
"__LDBL_MIN_EXP__=(-125)",
"__UDA_IBIT__=32",
"__WINT_WIDTH__=16",
"__INT_LEAST8_MAX__=0x7f",
"__LFRACT_FBIT__=31",
"__LDBL_MAX_10_EXP__=38",
"__ATOMIC_RELAXED=0",
"__DBL_EPSILON__=double(1.19209290e-7L)",
"__BUILTIN_AVR_BITSUK=1",
"__BUILTIN_AVR_BITSUR=1",
"__UINT8_C(c)=c",
"__INT_LEAST32_TYPE__=long int",
"__BUILTIN_AVR_URBITS=1",
"__SIZEOF_WCHAR_T__=2",
"__LLFRACT_MAX__=0X7FFFFFFFFFFFFFFFP-63LLR",
"__TQ_FBIT__=127",
"__INT_FAST8_TYPE__=signed char",
"__ULLACCUM_EPSILON__=0x1P-48ULLK",
"__BUILTIN_AVR_ROUNDK=1",
"__BUILTIN_AVR_ROUNDR=1",
"__UHQ_IBIT__=0",
"__LLACCUM_IBIT__=16",
"__FLT32_EPSILON__=1.19209290e-7F32",
"__DBL_DECIMAL_DIG__=9",
"__STDC_UTF_32__=1",
"__INT_FAST8_WIDTH__=8",
"__DEC_EVAL_METHOD__=2",
"__TA_FBIT__=47",
"__UDQ_IBIT__=0",
"__ORDER_BIG_ENDIAN__=4321",
"__cpp_runtime_arrays=198712",
"__WITH_AVRLIBC__=1",
"__UINT64_TYPE__=long long unsigned int",
"__ACCUM_EPSILON__=0x1P-15K",
"__UINT32_C(c)=c ## UL",
"__BUILTIN_AVR_COUNTLSUHK=1",
"__INTMAX_MAX__=0x7fffffffffffffffLL",
"__cpp_alias_templates=200704",
"__BUILTIN_AVR_COUNTLSUHR=1",
"__BYTE_ORDER__=__ORDER_LITTLE_ENDIAN__",
"__FLT_DENORM_MIN__=1.40129846e-45F",
"__LLFRACT_IBIT__=0",
"__INT8_MAX__=0x7f",
"__LONG_WIDTH__=32",
"__UINT_FAST32_TYPE__=long unsigned int",
"__CHAR32_TYPE__=long unsigned int",
"__BUILTIN_AVR_COUNTLSULK=1",
"__BUILTIN_AVR_COUNTLSULR=1",
"__FLT_MAX__=3.40282347e+38F",
"__cpp_constexpr=201304",
"__USACCUM_FBIT__=8",
"__BUILTIN_AVR_COUNTLSFX=1",
"__INT32_TYPE__=long int",
"__SIZEOF_DOUBLE__=4",
"__FLT_MIN_10_EXP__=(-37)",
"__UFRACT_EPSILON__=0x1P-16UR",
"__INT_LEAST32_WIDTH__=32",
"__BUILTIN_AVR_COUNTLSHK=1",
"__BUILTIN_AVR_COUNTLSHR=1",
"__INTMAX_TYPE__=long long int",
"__BUILTIN_AVR_ABSLLK=1",
"__BUILTIN_AVR_ABSLLR=1",
"__DEC128_MAX_EXP__=6145",
"__AVR_HAVE_16BIT_SP__=1",
"__ATOMIC_CONSUME=1",
"__GNUC_MINOR__=3",
"__INT_FAST16_WIDTH__=16",
"__UINTMAX_MAX__=0xffffffffffffffffULL",
"__DEC32_MANT_DIG__=7",
"__HA_FBIT__=7",
"__BUILTIN_AVR_COUNTLSLK=1",
"__BUILTIN_AVR_COUNTLSLR=1",
"__BUILTIN_AVR_CLI=1",
"__DBL_MAX_10_EXP__=38",
"__LDBL_DENORM_MIN__=1.40129846e-45L",
"__INT16_C(c)=c",
"__cpp_generic_lambdas=201304",
"__STDC__=1",
"__PTRDIFF_TYPE__=int",
"__LLFRACT_MIN__=(-0.5LLR-0.5LLR)",
"__BUILTIN_AVR_LRBITS=1",
"__ATOMIC_SEQ_CST=5",
"__DA_FBIT__=31",
"__UINT32_TYPE__=long unsigned int",
"__BUILTIN_AVR_ROUNDLLK=1",
"__UINTPTR_TYPE__=unsigned int",
"__BUILTIN_AVR_ROUNDLLR=1",
"__USA_IBIT__=16",
"__BUILTIN_AVR_ULRBITS=1",
"__DEC64_SUBNORMAL_MIN__=0.000000000000001E-383DD",
"__DEC128_MANT_DIG__=34",
"__LDBL_MIN_10_EXP__=(-37)",
"__BUILTIN_AVR_COUNTLSUK=1",
"__BUILTIN_AVR_COUNTLSUR=1",
"__SIZEOF_LONG_LONG__=8",
"__ULACCUM_EPSILON__=0x1P-32ULK",
"__cpp_user_defined_literals=200809",
"__SACCUM_IBIT__=8",
"__GCC_ATOMIC_LLONG_LOCK_FREE=1",
"__LDBL_DIG__=6",
"__FLT_DECIMAL_DIG__=9",
"__UINT_FAST16_MAX__=0xffffU",
"__GCC_ATOMIC_SHORT_LOCK_FREE=1",
"__BUILTIN_AVR_ABSHK=1",
"__BUILTIN_AVR_FLASH_SEGMENT=1",
"__INT_LEAST64_WIDTH__=64",
"__ULLFRACT_MAX__=0XFFFFFFFFFFFFFFFFP-64ULLR",
"__UINT_FAST8_TYPE__=unsigned char",
"__USFRACT_EPSILON__=0x1P-8UHR",
"__ULACCUM_FBIT__=32",
"__QQ_IBIT__=0",
"__cpp_init_captures=201304",
"__ATOMIC_ACQ_REL=4",
"__ATOMIC_RELEASE=3",
"__BUILTIN_AVR_FMUL=1",
"USBCON"
]
}
]
}

View file

@ -0,0 +1,286 @@
/**
* @filename : epd7in3g.cpp
* @brief : Implements for e-paper library
* @author : Waveshare
*
* Copyright (C) Waveshare 2022/7/22
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documnetation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include <stdlib.h>
#include "epd7in3g.h"
Epd::~Epd() {
};
Epd::Epd() {
reset_pin = RST_PIN;
dc_pin = DC_PIN;
cs_pin = CS_PIN;
busy_pin = BUSY_PIN;
WIDTH = EPD_WIDTH;
HEIGHT = EPD_HEIGHT;
};
int Epd::Init() {
/* this calls the peripheral hardware interface, see epdif */
if (IfInit() != 0) {
return -1;
}
Reset();
ReadBusyH();
DelayMs(30);
SendCommand(0xAA);
SendData(0x49);
SendData(0x55);
SendData(0x20);
SendData(0x08);
SendData(0x09);
SendData(0x18);
SendCommand(0x01);
SendData(0x3F);
SendCommand(0x00);
SendData(0x4F);
SendData(0x69);
SendCommand(0x05);
SendData(0x40);
SendData(0x1F);
SendData(0x1F);
SendData(0x2C);
SendCommand(0x08);
SendData(0x6F);
SendData(0x1F);
SendData(0x1F);
SendData(0x22);
//===================
//20211212
//First setting
SendCommand(0x06);
SendData(0x6F);
SendData(0x1F);
SendData(0x14);
SendData(0x14);
//===================
SendCommand(0x03);
SendData(0x00);
SendData(0x54);
SendData(0x00);
SendData(0x44);
SendCommand(0x60);
SendData(0x02);
SendData(0x00);
//Please notice that PLL must be set for version 2 IC
SendCommand(0x30);
SendData(0x08);
SendCommand(0x50);
SendData(0x3F);
SendCommand(0x61);
SendData(0x03);
SendData(0x20);
SendData(0x01);
SendData(0xE0);
SendCommand(0xE3);
SendData(0x2F);
SendCommand(0x84);
SendData(0x01);
return 0;
}
/**
* @brief: basic function for sending commands
*/
void Epd::SendCommand(unsigned char command) {
DigitalWrite(dc_pin, LOW);
SpiTransfer(command);
}
/**
* @brief: basic function for sending data
*/
void Epd::SendData(unsigned char data) {
DigitalWrite(dc_pin, HIGH);
SpiTransfer(data);
}
/**
* @brief: Wait until the busy_pin goes LOW
*/
void Epd::ReadBusyH(void) {
Serial.print("e-Paper busy H\r\n ");
while(DigitalRead(busy_pin) == LOW) { //LOW: busy, HIGH: idle
DelayMs(5);
}
Serial.print("e-Paper busy release H\r\n ");
}
void Epd::ReadBusyL(void) {
Serial.print("e-Paper busy L\r\n ");
while(DigitalRead(busy_pin) == HIGH) { //LOW: idle, HIGH: busy
DelayMs(5);
}
Serial.print("e-Paper busy release L\r\n ");
}
/**
* @brief: module reset.
* often used to awaken the module in deep sleep,
* see Epd::Sleep();
*/
void Epd::Reset(void) {
DigitalWrite(reset_pin, HIGH);
DelayMs(20);
DigitalWrite(reset_pin, LOW); //module reset
DelayMs(2);
DigitalWrite(reset_pin, HIGH);
DelayMs(20);
}
/******************************************************************************
function : Turn On Display
parameter:
******************************************************************************/
void Epd::TurnOnDisplay(void)
{
SendCommand(0x12); // DISPLAY_REFRESH
SendData(0x01);
ReadBusyH();
SendCommand(0x02); // POWER_OFF
SendData(0X00);
ReadBusyH();
}
/******************************************************************************
function : Clear screen
parameter:
******************************************************************************/
void Epd::Clear(UBYTE color)
{
UWORD Width, Height;
Width = (WIDTH % 4 == 0)? (WIDTH / 4 ): (WIDTH / 4 + 1);
Height = HEIGHT;
SendCommand(0x68);
SendData(0x01);
SendCommand(0x04);
ReadBusyH();
SendCommand(0x10);
for (UWORD j = 0; j < Height; j++) {
for (UWORD i = 0; i < Width; i++) {
for(UBYTE k = 0; k < 4; k++) {
SendData(color);
}
}
}
SendCommand(0x68);
SendData(0x00);
TurnOnDisplay();
}
/******************************************************************************
function : Sends the image buffer in RAM to e-Paper and displays
parameter:
******************************************************************************/
void Epd::Display(UBYTE *Image)
{
UWORD Width, Height;
Width = (WIDTH % 4 == 0)? (WIDTH / 4 ): (WIDTH / 4 + 1);
Height = HEIGHT;
SendCommand(0x68);
SendData(0x01);
SendCommand(0x04);
ReadBusyH();
SendCommand(0x10);
for (UWORD j = 0; j < Height; j++) {
for (UWORD i = 0; i < Width; i++) {
SendData(pgm_read_byte(&Image[i + j * Width]));
}
}
TurnOnDisplay();
}
void Epd::Display_part(UBYTE *Image, UWORD xstart, UWORD ystart, UWORD image_width, UWORD image_heigh)
{
UWORD Width, Height;
Width = (WIDTH % 4 == 0)? (WIDTH / 4 ): (WIDTH / 4 + 1);
Height = HEIGHT;
SendCommand(0x68);
SendData(0x01);
SendCommand(0x04);
ReadBusyH();
SendCommand(0x10);
for (UWORD i = 0; i < Height; i++) {
for (UWORD j = 0; j < Width; j++) {
if((j >= xstart/4) && (j < (image_width + xstart)/4) && (i >= ystart) && (i <= (ystart + image_heigh)) )
{
SendData(pgm_read_byte(&Image[(i-ystart) * image_width/4 + j - xstart/4]));
// Serial.print(Image[(i-ystart) * image_width/8 + j - xstart], HEX);
// Serial.print(" ");
}
else
{
SendData(0x55);
}
}
}
TurnOnDisplay();
}
/******************************************************************************
function : Enter sleep mode
parameter:
******************************************************************************/
void Epd::Sleep(void)
{
SendCommand(0x02); // POWER_OFF
SendData(0X00);
SendCommand(0x07); // DEEP_SLEEP
SendData(0XA5);
}
/* END OF FILE */

View file

@ -0,0 +1,75 @@
/**
* @filename : epd7in3g.h
* @brief : Header file for e-paper display library epd7in3g.cpp
* @author : Waveshare
*
* Copyright (C) Waveshare 2022/7/22
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documnetation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef EPD1IN64G_H
#define EPD1IN64G_H
#include "epdif.h"
// Display resolution
#define EPD_WIDTH 800
#define EPD_HEIGHT 480
//colour
#define black 0x00
#define white 0x55
#define yellow 0xAA
#define red 0xFF
#define UWORD unsigned int
#define UBYTE unsigned char
#define UDOUBLE unsigned long
class Epd : EpdIf {
public:
unsigned long WIDTH;
unsigned long HEIGHT;
Epd();
~Epd();
int Init();
void SendCommand(unsigned char command);
void SendData(unsigned char data);
void Reset(void);
void ReadBusyH(void);
void ReadBusyL(void);
void TurnOnDisplay(void);
void Clear(UBYTE color);
void Display(UBYTE *Image);
void Display_part(UBYTE *Image, UWORD xstart, UWORD ystart, UWORD image_width, UWORD image_heigh);
void Sleep(void);
private:
unsigned int reset_pin;
unsigned int dc_pin;
unsigned int cs_pin;
unsigned int busy_pin;
};
#endif /* EPD1IN54_H */
/* END OF FILE */

View file

@ -0,0 +1,60 @@
/**
* @filename : epd7in3g-demo.ino
* @brief : 7.3inch e-paper (G) display demo
* @author : Waveshare
*
* Copyright (C) Waveshare 2022/7/22
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documnetation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include <SPI.h>
#include "epd7in3g.h"
#include "imagedata.h"
Epd epd;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.print("e-Paper init ");
if (epd.Init() != 0) {
Serial.print("e-Paper init failed");
return;
}
Serial.print("While \r\n");
epd.Clear(white); // While
delay(2000);
epd.Display_part(IMAGE_DATA, 312, 162, 168, 168);
delay(2000);
Serial.print("Clear...\r\n");
epd.Clear(white);
delay(2000);
Serial.print("Goto Sleep...\r\n");
epd.Sleep();
}
void loop() {
}

View file

@ -0,0 +1,64 @@
/**
* @filename : epdif.cpp
* @brief : Implements EPD interface functions
* Users have to implement all the functions in epdif.cpp
* @author : Yehui from Waveshare
*
* Copyright (C) Waveshare August 10 2017
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documnetation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "epdif.h"
#include <spi.h>
EpdIf::EpdIf() {
};
EpdIf::~EpdIf() {
};
void EpdIf::DigitalWrite(int pin, int value) {
digitalWrite(pin, value);
}
int EpdIf::DigitalRead(int pin) {
return digitalRead(pin);
}
void EpdIf::DelayMs(unsigned int delaytime) {
delay(delaytime);
}
void EpdIf::SpiTransfer(unsigned char data) {
digitalWrite(CS_PIN, LOW);
SPI.transfer(data);
digitalWrite(CS_PIN, HIGH);
}
int EpdIf::IfInit(void) {
pinMode(CS_PIN, OUTPUT);
pinMode(RST_PIN, OUTPUT);
pinMode(DC_PIN, OUTPUT);
pinMode(BUSY_PIN, INPUT);
SPI.begin();
SPI.beginTransaction(SPISettings(2000000, MSBFIRST, SPI_MODE0));
return 0;
}

51
Arduino/epd7in3g/epdif.h Normal file
View file

@ -0,0 +1,51 @@
/**
* @filename : epdif.h
* @brief : Header file of epdif.cpp providing EPD interface functions
* Users have to implement all the functions in epdif.cpp
* @author : Yehui from Waveshare
*
* Copyright (C) Waveshare August 10 2017
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documnetation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef EPDIF_H
#define EPDIF_H
#include <arduino.h>
// Pin definition
#define RST_PIN 8
#define DC_PIN 9
#define CS_PIN 10
#define BUSY_PIN 7
class EpdIf {
public:
EpdIf(void);
~EpdIf(void);
static int IfInit(void);
static void DigitalWrite(int pin, int value);
static int DigitalRead(int pin);
static void DelayMs(unsigned int delaytime);
static void SpiTransfer(unsigned char data);
};
#endif

View file

@ -0,0 +1,471 @@
/**
* @filename : imagedata.cpp
* @brief : data file for epd demo
*
* Copyright (C) Waveshare 2022/7/22
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documnetation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "imagedata.h"
#include <avr/pgmspace.h>
const unsigned char IMAGE_DATA[] PROGMEM = {
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x00,0x01,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x00,0x00,0x00,0x00,0x01,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x40,0x00,0x00,0x45,0x55,0x55,0x55,0x40,0x00,
0x00,0x00,0x00,0x00,0x15,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x50,
0x00,0x00,0x00,0x00,0x00,0x05,0x55,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x15,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x15,0x55,
0x54,0x00,0x00,0x01,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x15,0x55,0x55,0x55,0x50,0x00,0x00,0x15,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x00,0x00,0x00,0x01,0x15,0x55,0x55,0x10,0x00,0x00,0x00,
0x01,0x55,0x55,0x55,0x55,0x55,0x00,0x00,0x05,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x50,0x00,
0x00,0x01,0x55,0x55,0x55,0x55,0x55,0x54,0x00,0x00,0x15,0x55,0x55,0x55,0x55,0x55,
0x50,0x00,0x01,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x00,0x01,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x50,0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x00,0x00,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x00,0x00,0x15,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x40,0x00,0x05,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x00,0x01,0x55,0x55,
0x56,0x6A,0xAA,0xAA,0x65,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x54,
0x00,0x01,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x50,0x00,0x15,0x55,0x56,0xAA,0xAA,0xAA,0xAA,0xAA,0xA5,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x00,0x00,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x40,
0x00,0x55,0x55,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x95,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x40,0x00,0x15,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x00,0x01,0x55,0x5A,0xAA,0xAA,0xAA,
0xAA,0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x00,
0x05,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x54,0x00,0x05,0x55,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x95,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x00,0x01,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x50,0x00,0x15,0x5A,
0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x40,0x01,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x50,0x00,0x55,0x6A,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,
0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x50,0x00,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x40,0x01,0x55,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x50,0x00,0x15,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x05,0x56,0xAA,0xAA,0xAA,
0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x54,0x00,0x05,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x00,0x05,0x56,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,
0xAA,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x00,0x01,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x00,0x15,
0x5A,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x01,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x00,0x15,0x6A,0xAA,0xAA,0xAA,0xAA,0xAA,
0xAA,0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x50,0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x54,0x00,0x55,0x6A,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x00,0x15,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x00,0x55,0xAA,0xAA,
0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x54,0x00,0x15,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x54,0x00,0x55,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,
0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x00,
0x05,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x54,
0x00,0x55,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x95,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x00,0x05,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x01,0x56,0xAA,0xAA,0xAA,0xAA,
0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x95,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x40,0x01,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x00,0x00,0x55,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,
0xAA,0x95,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x50,0x01,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x50,0x00,0x00,0x55,
0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x95,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x50,0x00,0x00,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x00,0x00,0x01,0x55,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,
0xAA,0xAA,0xAA,0xAA,0xAA,0x95,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x54,0x00,0x00,0x05,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x54,
0x00,0x00,0x15,0x55,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x95,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x00,0x00,0x00,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x00,0x01,0x55,0x55,0x6A,0xAA,
0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xA5,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x54,0x00,0x00,0x00,0x05,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x00,0x00,0x15,0x55,0x55,0x6A,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,
0xAA,0xAA,0xAA,0xA5,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x04,0x00,0x00,0x01,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x00,0x01,0x55,
0x55,0xD5,0x5A,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xA5,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x00,0x00,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x50,0x00,0x05,0x55,0x5F,0xF5,0x56,0xAA,0xAA,0xAA,
0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xA5,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x00,0x05,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x40,0x00,0x55,0x55,0xFF,0xFD,0x55,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,
0xAA,0xA5,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x54,0x00,0x01,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x00,0x01,0x55,0x5F,0xFF,0xFD,
0x55,0x6A,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xA9,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x51,0x55,0x55,0x00,0x01,0x55,0x55,0x55,
0x55,0x55,0x55,0x54,0x00,0x05,0x55,0xFF,0xFF,0xFF,0x55,0x5A,0xAA,0xAA,0xAA,0xAA,
0xAA,0xAA,0xAA,0xAA,0xAA,0xA5,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x50,0x00,0x05,0x55,0x40,0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x50,0x00,0x15,
0x57,0xFF,0xFF,0xFF,0xD5,0x55,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xA9,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x00,0x00,0x00,0x55,0x54,
0x00,0x15,0x55,0x55,0x55,0x55,0x55,0x40,0x00,0x55,0x5F,0xFF,0xFF,0xFF,0xF5,0x55,
0x6A,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xA9,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x54,0x00,0x00,0x00,0x05,0x55,0x00,0x05,0x55,0x55,0x55,0x55,
0x55,0x00,0x01,0x55,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x56,0xAA,0xAA,0xAA,0xAA,0xAA,
0xAA,0xAA,0xAA,0xA9,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x50,0x00,
0x00,0x00,0x01,0x55,0x00,0x01,0x55,0x55,0x55,0x55,0x54,0x00,0x05,0x57,0xFF,0xFF,
0xFF,0xFF,0xFF,0xD5,0x55,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xA9,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x00,0x00,0x00,0x00,0x55,0x40,0x01,
0x55,0x55,0x55,0x55,0x50,0x00,0x15,0x5F,0xFF,0xFF,0xFF,0xFF,0xFF,0xF5,0x55,0x5A,
0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xA9,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x00,0x00,0x00,0x00,0x00,0x15,0x50,0x00,0x55,0x55,0x55,0x55,0x40,0x00,
0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x56,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,
0xAA,0xA9,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x00,0x00,0x00,0x00,
0x00,0x05,0x54,0x00,0x55,0x55,0x55,0x55,0x40,0x01,0x55,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xF5,0x55,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xA9,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x54,0x00,0x00,0x00,0x00,0x00,0x05,0x54,0x00,0x15,0x55,
0x55,0x55,0x00,0x05,0x57,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0x55,0x5A,0xAA,
0xAA,0xAA,0xAA,0xAA,0xAA,0xA9,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x50,
0x00,0x00,0x00,0x00,0x00,0x01,0x55,0x00,0x15,0x55,0x55,0x54,0x00,0x15,0x57,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x56,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xA9,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x50,0x00,0x00,0x00,0x00,0x00,0x00,
0x55,0x00,0x15,0x55,0x55,0x54,0x00,0x15,0x5F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xF5,0x55,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xA9,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x00,0x05,0x55,0x55,0x50,
0x00,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0x55,0x6A,0xAA,0xAA,
0xAA,0xAA,0xAA,0xA9,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x15,0x40,0x05,0x55,0x55,0x50,0x01,0x55,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5A,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x15,0x40,
0x05,0x55,0x55,0x40,0x01,0x55,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xD5,0x56,0xAA,0xAA,0xAA,0xAA,0xAA,0xA9,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x15,0x40,0x01,0x55,0x55,0x40,0x05,0x57,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0x55,0x6A,0xAA,0xAA,0xAA,
0xAA,0xA9,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x50,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x05,0x50,0x01,0x55,0x55,0x00,0x05,0x5F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5A,0xAA,0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x50,0x01,0x55,
0x55,0x00,0x15,0x5F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xD5,
0x56,0xAA,0xAA,0xAA,0xAA,0xA9,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x50,0x01,0x55,0x54,0x00,0x15,0x7F,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF5,0x55,0xAA,0xAA,0xAA,0xAA,0xAA,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x05,0x50,0x01,0x55,0x54,0x00,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFD,0x55,0x6A,0xAA,0xAA,0xAA,0xA9,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x54,0x00,0x55,0x54,0x00,
0x55,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5A,
0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x50,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x01,0x54,0x00,0x55,0x54,0x00,0x55,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xD5,0x56,0xAA,0xAA,0xAA,0xA9,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x54,
0x00,0x55,0x50,0x01,0x55,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xF5,0x55,0xAA,0xAA,0xAA,0xA9,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x40,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x54,0x00,0x55,0x50,0x01,0x57,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0x55,0x6A,0xAA,
0xAA,0xAA,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x01,0x54,0x00,0x55,0x50,0x01,0x57,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x5A,0xAA,0xAA,0xA9,0x55,0x55,0x55,0x55,
0x55,0x55,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x54,0x00,0x55,
0x50,0x01,0x57,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xD5,0x56,0xAA,0xAA,0xA9,0x55,0x55,0x55,0x55,0x55,0x55,0x50,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x54,0x00,0x55,0x50,0x01,0x57,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF5,0x55,0xAA,0xAA,0xA9,
0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x54,0x00,0x55,0x50,0x01,0x57,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0x55,0xAA,0xAA,0xA9,0x55,0x55,0x55,0x55,0x55,0x55,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x54,0x00,0x55,0x50,0x01,
0x57,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x55,0x6A,0xAA,0xA9,0x55,0x55,0x55,0x55,0x55,0x54,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x01,0x54,0x00,0x55,0x50,0x01,0x57,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xD5,0x5A,0xAA,0xA9,0x55,0x55,
0x55,0x55,0x55,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x54,
0x00,0x55,0x50,0x01,0x57,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xF5,0x56,0xAA,0xA9,0x55,0x55,0x55,0x55,0x55,0x40,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x54,0x00,0x55,0x50,0x01,0x57,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0x55,
0xAA,0xA9,0x55,0x55,0x55,0x55,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x01,0x54,0x00,0x55,0x50,0x01,0x55,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0x55,0xAA,0xA5,0x55,0x55,0x55,0x55,
0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x54,0x00,0x55,
0x54,0x00,0x55,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x55,0x6A,0xA5,0x55,0x55,0x55,0x55,0x50,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x54,0x00,0x55,0x54,0x00,0x55,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xD5,0x5A,0xA5,
0x55,0x55,0x55,0x55,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x54,0x00,0x55,0x54,0x00,0x55,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF5,0x56,0xA5,0x55,0x55,0x55,0x55,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x50,0x01,0x55,0x54,0x00,
0x15,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xF5,0x55,0xA5,0x55,0x55,0x55,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x05,0x54,0x00,0x55,0x55,0x00,0x15,0x5F,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0x55,0x55,0x55,0x55,
0x55,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x50,
0x01,0x55,0x55,0x00,0x05,0x5F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xDD,0x55,0x55,0x55,
0x55,0x55,0x55,0x5F,0xFF,0xFD,0x55,0x55,0x55,0x55,0x55,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x50,0x01,0x55,0x55,0x00,0x05,0x55,
0xFF,0xFF,0xFF,0xFF,0xFD,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x05,0x50,0x01,0x55,0x55,0x40,0x01,0x55,0x5F,0xFF,0xFF,0xF5,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x50,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x15,0x40,0x05,0x55,
0x55,0x40,0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x50,0x01,0x55,0x55,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x15,0x40,0x05,0x55,0x55,0x50,0x00,0x15,0x55,0x55,
0x55,0x55,0x55,0x55,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x55,0x55,0x40,0x01,
0x55,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x15,0x40,0x05,0x55,0x55,0x54,0x00,0x15,0x55,0x55,0x55,0x55,0x54,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x00,0x00,0x55,0x50,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x40,0x05,0x55,0x55,0x54,
0x00,0x55,0x55,0x55,0x55,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x55,0x00,0x00,0x55,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x55,0x00,0x15,0x55,0x55,0x54,0x00,0x55,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x55,0x00,0x00,0x55,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x55,0x00,
0x15,0x55,0x55,0x50,0x00,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x01,0x55,0x00,0x00,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x54,0x00,0x15,0x55,0x55,0x50,0x01,0x55,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x15,0x55,
0x40,0x00,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x05,0x54,0x00,0x05,0x55,0x55,0x50,0x01,0x54,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x55,0x40,0x05,0x55,0x40,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x55,0x00,0x01,0x55,
0x55,0x50,0x01,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x01,0x55,0x55,0x55,0x55,0x55,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x15,0x55,0x40,0x01,0x55,0x55,0x40,0x05,0x54,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x15,0x55,0x55,0x55,0x55,
0x55,0x55,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,
0x55,0x50,0x00,0x55,0x55,0x40,0x05,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x55,0x55,0x55,0x55,0x55,0x75,0x55,0x55,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x55,0xD5,0x54,0x00,0x55,0x55,0x40,
0x05,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x55,
0x55,0x55,0x55,0x55,0x7F,0x55,0x55,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x05,0x55,0xF5,0x54,0x00,0x15,0x55,0x40,0x05,0x50,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x55,0x55,0x55,0x5A,0x55,0x5F,0xD5,
0x55,0x55,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x15,0x57,0xFD,0x55,
0x00,0x15,0x55,0x40,0x05,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x55,0x55,0x55,0x55,0x5A,0x95,0x5F,0xFF,0x55,0x55,0x55,0x54,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x5F,0xFF,0x55,0x00,0x15,0x55,0x00,0x15,0x50,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x55,0x55,0x55,
0x5A,0xA5,0x57,0xFF,0xFF,0x55,0x55,0x55,0x55,0x40,0x00,0x00,0x00,0x00,0x00,0x15,
0x55,0x7F,0xFF,0x55,0x00,0x15,0x55,0x40,0x05,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x05,0x55,0x55,0x55,0x55,0x5A,0xA9,0x55,0xFF,0xFF,0xFD,
0x55,0x55,0x55,0x55,0x51,0x00,0x00,0x00,0x05,0x55,0x55,0xFF,0xFF,0x55,0x40,0x05,
0x55,0x00,0x15,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x15,
0x55,0x55,0x55,0x55,0x5A,0xAA,0x55,0x7F,0xFF,0xFF,0xFD,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x5F,0xFF,0xFF,0xD5,0x40,0x05,0x55,0x00,0x15,0x40,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x55,0x55,0x55,0x55,0x6A,0xAA,
0x55,0x7F,0xFF,0xFF,0xFF,0xFD,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0xFF,
0xFF,0xD5,0x40,0x05,0x55,0x00,0x15,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x01,0x55,0x55,0x55,0x55,0x55,0x5A,0xAA,0x95,0x5F,0xFF,0xFF,0xFF,0xFF,
0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0x5F,0xFF,0xFF,0xFF,0xD5,0x40,0x05,0x55,0x00,
0x15,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x55,0x55,0x55,
0x55,0x55,0x6A,0xAA,0xA5,0x57,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0x55,0x55,0x55,
0x5F,0xFF,0xFF,0xFF,0xFF,0xD5,0x40,0x05,0x55,0x00,0x15,0x40,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x15,0x55,0x55,0x55,0x55,0x55,0x6A,0xAA,0xA9,0x55,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xD5,
0x40,0x05,0x55,0x00,0x15,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x15,0x55,0x55,0x55,0x55,0x55,0x6A,0xAA,0xAA,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xD5,0x40,0x05,0x55,0x00,0x15,0x40,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x55,0x55,0x55,0x55,0x55,0x55,
0x6A,0xAA,0xAA,0x55,0x5F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xD5,0x40,0x05,0x55,0x00,0x15,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0x55,0x55,0x55,0x55,0x55,0x55,0x6A,0xAA,0xAA,0x95,0x57,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xD5,0x40,0x05,
0x55,0x00,0x15,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x55,0x55,
0x55,0x55,0x55,0x55,0x6A,0xAA,0xAA,0xA5,0x55,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xD5,0x40,0x05,0x55,0x00,0x15,0x40,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x15,0x55,0x55,0x55,0x55,0x55,0x55,0x6A,0xAA,
0xAA,0xA9,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xD5,0x40,0x05,0x55,0x00,0x15,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x6A,0xAA,0xAA,0xAA,0x55,0x5F,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xD5,0x40,0x05,0x55,0x00,
0x15,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x6A,0xAA,0xAA,0xAA,0x95,0x57,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x00,0x15,0x55,0x40,0x05,0x50,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x05,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x6A,0xAA,0xAA,0xAA,
0xA5,0x55,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,
0x00,0x15,0x55,0x00,0x15,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x15,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x6A,0xAA,0xAA,0xAA,0xA9,0x55,0x7F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x00,0x15,0x55,0x40,0x05,0x50,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x15,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x6A,0xAA,0xAA,0xAA,0xAA,0x55,0x5F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFD,0x54,0x00,0x15,0x55,0x40,0x05,0x50,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x6A,0xAA,0xAA,0xAA,0xAA,0x95,
0x57,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0x54,0x00,0x55,
0x55,0x40,0x05,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x6A,0xAA,0xAA,0xAA,0xAA,0xA5,0x55,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF5,0x54,0x00,0x55,0x55,0x40,0x05,0x54,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x05,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x6A,0xAA,
0xAA,0xAA,0xAA,0xA9,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xD5,0x50,0x00,0x55,0x55,0x50,0x01,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x6A,0xAA,0xAA,0xAA,0xAA,0xAA,0x55,0x57,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xD5,0x50,0x01,0x55,0x55,0x50,
0x01,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x15,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x6A,0xAA,0xAA,0xAA,0xAA,0xAA,0xA5,0x55,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x55,0x40,0x01,0x55,0x55,0x50,0x01,0x55,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x6A,0xAA,0xAA,0xAA,
0xAA,0xAA,0xA9,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0x55,0x00,
0x05,0x55,0x55,0x50,0x00,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x6A,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x55,0x5F,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0x55,0x00,0x05,0x55,0x55,0x54,0x00,0x55,
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x6A,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x95,0x55,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xF5,0x54,0x00,0x15,0x55,0x55,0x54,0x00,0x55,0x40,0x00,0x00,0x00,0x00,0x00,
0x05,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x6A,0xAA,0xAA,0xAA,0xAA,0xAA,
0xAA,0xA5,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xD5,0x50,0x00,0x55,0x55,
0x55,0x54,0x00,0x15,0x50,0x00,0x00,0x00,0x00,0x00,0x05,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x6A,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x55,0x5F,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x40,0x00,0x55,0x55,0x55,0x55,0x00,0x05,0x50,0x00,
0x00,0x00,0x00,0x00,0x15,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x6A,0xAA,
0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x95,0x55,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0x55,
0x40,0x01,0x55,0x55,0x55,0x55,0x00,0x05,0x54,0x00,0x00,0x00,0x00,0x00,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x6A,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,
0xA5,0x55,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xF5,0x55,0x00,0x05,0x55,0x55,0x55,0x55,
0x40,0x01,0x55,0x00,0x00,0x00,0x00,0x01,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x6A,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x55,0x57,0xFF,0xFF,0xFF,
0xFF,0xFF,0xD5,0x54,0x00,0x05,0x55,0x55,0x55,0x55,0x40,0x01,0x55,0x40,0x00,0x00,
0x00,0x05,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x6A,0xAA,0xAA,0xAA,
0xAA,0xAA,0xAA,0xAA,0xAA,0x95,0x55,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x50,0x00,0x15,
0x55,0x55,0x55,0x55,0x50,0x00,0x55,0x50,0x00,0x00,0x00,0x15,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x5A,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xA9,
0x55,0x7F,0xFF,0xFF,0xFF,0xFD,0x55,0x40,0x00,0x55,0x55,0x55,0x55,0x55,0x54,0x00,
0x15,0x55,0x00,0x00,0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x6A,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x55,0x57,0xFF,0xFF,0xFF,0xD5,
0x55,0x00,0x01,0x55,0x55,0x55,0x55,0x55,0x54,0x00,0x01,0x55,0x50,0x00,0x05,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x5A,0xAA,0xAA,0xAA,0xAA,0xAA,
0xAA,0xAA,0xAA,0xAA,0xA5,0x55,0xFF,0xFF,0xFF,0x55,0x54,0x00,0x05,0x55,0x55,0x55,
0x55,0x55,0x55,0x00,0x00,0x55,0x55,0x01,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x5A,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xA9,0x55,
0x7F,0xFF,0xFD,0x55,0x40,0x00,0x15,0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x00,0x15,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x5A,0xAA,
0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x55,0x7F,0xFF,0xD5,0x55,0x00,0x00,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x50,0x00,0x01,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x5A,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,
0xAA,0xAA,0xAA,0x95,0x5F,0xFD,0x55,0x54,0x00,0x01,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x00,0x00,0x15,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x5A,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xA5,0x57,0xD5,
0x55,0x40,0x00,0x05,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x00,0x00,0x54,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x5A,0xAA,0xAA,0xAA,
0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xA9,0x55,0x55,0x55,0x00,0x00,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x50,0x00,0x00,0x00,0x15,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x56,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,
0xAA,0xA9,0x55,0x55,0x50,0x00,0x01,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x54,0x00,0x00,0x00,0x15,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x56,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x00,0x00,
0x05,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x00,0x00,0x05,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x56,0xAA,0xAA,0xAA,0xAA,0xAA,
0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x55,0x50,0x00,0x00,0x15,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x00,0x00,0x05,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x56,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,
0x95,0x00,0x00,0x01,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x00,0x05,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x56,0xAA,
0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x95,0x40,0x00,0x15,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x01,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,
0xAA,0xAA,0xAA,0xAA,0x55,0x40,0x01,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x50,0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x95,0x00,
0x05,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x50,
0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0xAA,0xAA,0xAA,
0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x55,0x40,0x15,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x00,0x15,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,
0xAA,0xAA,0x55,0x00,0x15,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x54,0x00,0x15,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x55,0x00,0x15,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x00,0x05,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0xAA,0xAA,0xAA,0xAA,0xAA,
0xAA,0xAA,0xAA,0xAA,0xAA,0xA9,0x54,0x00,0x15,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x01,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xA5,
0x54,0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x40,0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0xAA,
0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xA5,0x54,0x00,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x50,0x00,0x15,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,
0xAA,0xAA,0xAA,0x95,0x50,0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x00,0x15,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x55,0x40,0x01,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x00,0x05,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0xAA,0xAA,0xAA,
0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xA9,0x55,0x40,0x01,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x01,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,
0xA5,0x55,0x00,0x05,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x40,0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x95,0x54,0x00,0x15,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x50,
0x00,0x15,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0xAA,0xAA,0xAA,0xAA,0xAA,
0xAA,0xAA,0xAA,0xA9,0x55,0x50,0x00,0x15,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x00,0x01,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x5A,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x95,0x55,0x40,
0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x00,0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x6A,0xAA,0xAA,0xAA,0xAA,0xAA,0xA5,0x55,0x54,0x00,0x01,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x00,
0x15,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x5A,0xAA,0xAA,0xAA,0xA5,
0x55,0x55,0x50,0x00,0x05,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x50,0x00,0x05,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x41,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x00,0x00,0x15,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x00,0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x00,0x15,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x50,0x00,0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x00,0x05,
0x55,0x55,0x55,0x55,0x55,0x54,0x00,0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x50,0x00,
0x00,0x05,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x50,0x00,0x00,0x55,0x55,0x55,0x55,0x55,0x50,
0x00,0x00,0x00,0x05,0x55,0x55,0x55,0x44,0x00,0x00,0x00,0x15,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x54,0x00,0x00,0x05,0x55,0x55,0x55,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x01,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x00,0x00,0x15,
0x55,0x55,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x15,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x40,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x15,0x55,0x40,0x00,0x00,0x00,0x00,0x00,
0x01,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x50,0x00,0x00,0x00,0x00,
0x00,0x01,0x55,0x55,0x55,0x50,0x00,0x00,0x00,0x01,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x40,0x00,0x00,0x00,0x00,0x15,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x00,0x00,0x00,0x15,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
};

View file

@ -0,0 +1,30 @@
/**
* @filename : imagedata.h
* @brief : head file for imagedata.cpp
*
* Copyright (C) Waveshare 2022/7/22
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documnetation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
extern const unsigned char IMAGE_DATA[];
/* FILE END */

View file

@ -0,0 +1,169 @@
/*****************************************************************************
* | File : EPD_1in64g_test.c
* | Author : Waveshare team
* | Function : 1.64inch e-paper (G) test demo
* | Info :
*----------------
* | This version: V1.0
* | Date : 2022-07-22
* | Info :
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documnetation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
******************************************************************************/
#include "EPD_Test.h"
#include "EPD_1in64g.h"
#include "time.h"
int EPD_1in64g_test(void)
{
printf("EPD_1IN64G_test Demo\r\n");
if(DEV_Module_Init()!=0){
return -1;
}
printf("e-Paper Init and Clear...\r\n");
EPD_1IN64G_Init();
printf("Black \r\n");
struct timespec start={0,0}, finish={0,0};
clock_gettime(CLOCK_REALTIME, &start);
EPD_1IN64G_Clear(EPD_1IN64G_WHITE); // While
clock_gettime(CLOCK_REALTIME, &finish);
printf("%ld S\r\n", finish.tv_sec-start.tv_sec);
DEV_Delay_ms(2000);
//Create a new image cache
UBYTE *BlackImage;
UWORD Imagesize = ((EPD_1IN64G_WIDTH % 4 == 0)? (EPD_1IN64G_WIDTH / 4 ): (EPD_1IN64G_WIDTH / 4 + 1)) * EPD_1IN64G_HEIGHT;
if((BlackImage = (UBYTE *)malloc(Imagesize)) == NULL) {
printf("Failed to apply for black memory...\r\n");
return -1;
}
printf("Paint_NewImage\r\n");
Paint_NewImage(BlackImage, EPD_1IN64G_WIDTH, EPD_1IN64G_HEIGHT, 0, EPD_1IN64G_WHITE);
Paint_SetScale(4);
#if 1 // show bmp
printf("show BMP-----------------\r\n");
Paint_SelectImage(BlackImage);
GUI_ReadBmp_RGB_4Color("./pic/1.64inch-2.bmp", 0, 0);
EPD_1IN64G_Display(BlackImage);
DEV_Delay_ms(2000);
#endif
#if 1 // Drawing on the image
//1.Select Image
printf("SelectImage:BlackImage\r\n");
Paint_SelectImage(BlackImage);
Paint_Clear(0x55);
// 2.Drawing on the image
printf("Drawing:BlackImage\r\n");
Paint_DrawPoint(10, 80, Red_4Color, DOT_PIXEL_1X1, DOT_STYLE_DFT);
Paint_DrawPoint(10, 90, Yellow_4Color, DOT_PIXEL_2X2, DOT_STYLE_DFT);
Paint_DrawPoint(10, 100, Black_4Color, DOT_PIXEL_3X3, DOT_STYLE_DFT);
Paint_DrawLine(20, 70, 70, 120, Red_4Color, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
Paint_DrawLine(70, 70, 20, 120, Red_4Color, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
Paint_DrawRectangle(20, 70, 70, 120, Yellow_4Color, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
Paint_DrawRectangle(80, 70, 130, 120, Yellow_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawCircle(45, 95, 20, Black_4Color, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
Paint_DrawCircle(105, 95, 20, Black_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawLine(85, 95, 125, 95, Red_4Color, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
Paint_DrawLine(105, 75, 105, 115, Yellow_4Color, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
Paint_DrawString_EN(10, 0, "Red, yellow, white and black_4Color", &Font16, Red_4Color, Yellow_4Color);
Paint_DrawString_EN(10, 35, "Four color e-Paper", &Font12, Yellow_4Color, Black_4Color);
Paint_DrawString_CN(10, 125, "΢ѩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", &Font24CN, Red_4Color, White_4Color);
Paint_DrawNum(10, 50, 123456, &Font12, Red_4Color, White_4Color);
printf("EPD_Display\r\n");
EPD_1IN64G_Display(BlackImage);
DEV_Delay_ms(3000);
#endif
#if 1 // Drawing on the image
//1.Select Image
printf("SelectImage:BlackImage\r\n");
Paint_SelectImage(BlackImage);
Paint_Clear(0x55);
// 2.Drawing on the image
printf("Drawing:BlackImage\r\n");
Paint_DrawRectangle(1, 1, 168, 55, Red_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(1, 112, 167, 167, Yellow_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(59, 1, 109, 167, Black_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
printf("EPD_Display\r\n");
EPD_1IN64G_Display(BlackImage);
DEV_Delay_ms(3000);
#endif
#if 1 // Drawing on the image
//1.Select Image
printf("SelectImage:BlackImage\r\n");
Paint_SelectImage(BlackImage);
Paint_Clear(0x55);
int wNumber, lNumber;
wNumber = (EPD_1IN64G_WIDTH/80)==0 ? (EPD_1IN64G_WIDTH/80) : (EPD_1IN64G_WIDTH/80)+1;
lNumber = (EPD_1IN64G_HEIGHT/20)==0 ? (EPD_1IN64G_HEIGHT/20) : (EPD_1IN64G_HEIGHT/20)+1;
// 2.Drawing on the image
printf("Drawing:BlackImage\r\n");
for(int j=0; j<lNumber; j++) {
if(j%2 == 0) {
for(int i=0; i<wNumber; i++) {
Paint_DrawRectangle(1+i*80, 1+j*20, 20+i*80, 20+j*20, Black_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(21+i*80, 1+j*20, 40+i*80, 20+j*20, White_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(41+i*80, 1+j*20, 60+i*80, 20+j*20, Yellow_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(61+i*80, 1+j*20, 80+i*80, 20+j*20, Red_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
}
}
else {
for(int i=0; i<wNumber; i++) {
Paint_DrawRectangle(1+i*80, 1+j*20, 20+i*80, 20+j*20, Yellow_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(21+i*80, 1+j*20, 40+i*80, 20+j*20, Red_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(41+i*80, 1+j*20, 60+i*80, 20+j*20, Black_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(61+i*80, 1+j*20, 80+i*80, 20+j*20, White_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
}
}
}
printf("EPD_Display\r\n");
EPD_1IN64G_Display(BlackImage);
DEV_Delay_ms(3000);
#endif
printf("Clear...\r\n");
EPD_1IN64G_Clear(EPD_1IN64G_WHITE);
printf("Goto Sleep...\r\n");
EPD_1IN64G_Sleep();
free(BlackImage);
BlackImage = NULL;
DEV_Delay_ms(2000);//important, at least 2s
// close 5V
printf("close 5V, Module enters 0 power consumption ...\r\n");
DEV_Module_Exit();
return 0;
}

View file

@ -0,0 +1,175 @@
/*****************************************************************************
* | File : EPD_3in0g_test.c
* | Author : Waveshare team
* | Function : 3inch e-paper (G) test demo
* | Info :
*----------------
* | This version: V1.0
* | Date : 2022-07-15
* | Info :
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documnetation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
******************************************************************************/
#include "EPD_Test.h"
#include "EPD_3in0g.h"
#include "time.h"
int EPD_3in0g_test(void)
{
printf("EPD_3IN0G_test Demo\r\n");
if(DEV_Module_Init()!=0){
return -1;
}
printf("e-Paper Init and Clear...\r\n");
EPD_3IN0G_Init();
printf("Black \r\n");
struct timespec start={0,0}, finish={0,0};
clock_gettime(CLOCK_REALTIME, &start);
EPD_3IN0G_Clear(EPD_3IN0G_WHITE); // White
clock_gettime(CLOCK_REALTIME, &finish);
printf("%ld S\r\n", finish.tv_sec-start.tv_sec);
DEV_Delay_ms(2000);
//Create a new image cache
UBYTE *BlackImage;
UWORD Imagesize = ((EPD_3IN0G_WIDTH % 4 == 0)? (EPD_3IN0G_WIDTH / 4 ): (EPD_3IN0G_WIDTH / 4 + 1)) * EPD_3IN0G_HEIGHT;
if((BlackImage = (UBYTE *)malloc(Imagesize)) == NULL) {
printf("Failed to apply for black memory...\r\n");
return -1;
}
printf("Paint_NewImage\r\n");
Paint_NewImage(BlackImage, EPD_3IN0G_WIDTH, EPD_3IN0G_HEIGHT, 0, EPD_3IN0G_WHITE);
Paint_SetScale(4);
#if 1 // show bmp
printf("show BMP-----------------\r\n");
EPD_3IN0G_Init();
Paint_SelectImage(BlackImage);
GUI_ReadBmp_RGB_4Color("./pic/3inch-3.bmp", 0, 0);
EPD_3IN0G_Display(BlackImage);
DEV_Delay_ms(2000);
#endif
#if 1 // Drawing on the image
//1.Select Image
EPD_3IN0G_Init();
printf("SelectImage:BlackImage\r\n");
Paint_SelectImage(BlackImage);
Paint_Clear(0x55);
// 2.Drawing on the image
printf("Drawing:BlackImage\r\n");
Paint_DrawPoint(10, 80, Red_4Color, DOT_PIXEL_1X1, DOT_STYLE_DFT);
Paint_DrawPoint(10, 90, Yellow_4Color, DOT_PIXEL_2X2, DOT_STYLE_DFT);
Paint_DrawPoint(10, 100, Black_4Color, DOT_PIXEL_3X3, DOT_STYLE_DFT);
Paint_DrawLine(20, 70, 70, 120, Red_4Color, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
Paint_DrawLine(70, 70, 20, 120, Red_4Color, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
Paint_DrawRectangle(20, 70, 70, 120, Yellow_4Color, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
Paint_DrawRectangle(80, 70, 130, 120, Yellow_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawCircle(45, 95, 20, Black_4Color, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
Paint_DrawCircle(105, 95, 20, Black_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawLine(85, 95, 125, 95, Red_4Color, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
Paint_DrawLine(105, 75, 105, 115, Yellow_4Color, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
Paint_DrawString_EN(10, 0, "Red, yellow, white and black", &Font16, Red_4Color, Yellow_4Color);
Paint_DrawString_EN(10, 35, "Four color e-Paper", &Font12, Yellow_4Color, Black_4Color);
Paint_DrawString_CN(10, 125, "΢ѩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", &Font24CN, Red_4Color, White_4Color);
Paint_DrawNum(10, 50, 123456, &Font12, Red_4Color, White_4Color);
printf("EPD_Display\r\n");
EPD_3IN0G_Display(BlackImage);
DEV_Delay_ms(3000);
#endif
#if 1 // Drawing on the image
//1.Select Image
EPD_3IN0G_Init();
printf("SelectImage:BlackImage\r\n");
Paint_SelectImage(BlackImage);
Paint_Clear(0x55);
// 2.Drawing on the image
printf("Drawing:BlackImage\r\n");
Paint_DrawRectangle(1, 1, 167, 86, Red_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(1, 314, 167, 399, Yellow_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(59, 1, 109, 399, Black_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
printf("EPD_Display\r\n");
EPD_3IN0G_Display(BlackImage);
DEV_Delay_ms(3000);
#endif
#if 1 // Drawing on the image
//1.Select Image
EPD_3IN0G_Init();
printf("SelectImage:BlackImage\r\n");
Paint_SelectImage(BlackImage);
Paint_Clear(0x55);
int wNumber, lNumber;
wNumber = (EPD_3IN0G_WIDTH/80)==0 ? (EPD_3IN0G_WIDTH/80) : (EPD_3IN0G_WIDTH/80)+1;
lNumber = (EPD_3IN0G_HEIGHT/20)==0 ? (EPD_3IN0G_HEIGHT/20) : (EPD_3IN0G_HEIGHT/20)+1;
// 2.Drawing on the image
printf("Drawing:BlackImage\r\n");
for(int j=0; j<lNumber; j++) {
if(j%2 == 0) {
for(int i=0; i<wNumber; i++) {
Paint_DrawRectangle(1+i*80, 1+j*20, 20+i*80, 20+j*20, Red_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(21+i*80, 1+j*20, 40+i*80, 20+j*20, Yellow_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(41+i*80, 1+j*20, 60+i*80, 20+j*20, White_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(61+i*80, 1+j*20, 80+i*80, 20+j*20, Black_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
}
}
else {
for(int i=0; i<wNumber; i++) {
Paint_DrawRectangle(1+i*80, 1+j*20, 20+i*80, 20+j*20, White_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(21+i*80, 1+j*20, 40+i*80, 20+j*20, Black_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(41+i*80, 1+j*20, 60+i*80, 20+j*20, Red_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(61+i*80, 1+j*20, 80+i*80, 20+j*20, Yellow_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
}
}
}
printf("EPD_Display\r\n");
EPD_3IN0G_Display(BlackImage);
DEV_Delay_ms(3000);
#endif
EPD_3IN0G_Init();
printf("Clear...\r\n");
EPD_3IN0G_Clear(EPD_3IN0G_WHITE);
printf("Goto Sleep...\r\n");
EPD_3IN0G_Sleep();
free(BlackImage);
BlackImage = NULL;
DEV_Delay_ms(2000);//important, at least 2s
// close 5V
printf("close 5V, Module enters 0 power consumption ...\r\n");
DEV_Module_Exit();
return 0;
}

View file

@ -0,0 +1,151 @@
/*****************************************************************************
* | File : EPD_3IN52_test.c
* | Author : Waveshare team
* | Function : 3.52inch e-paper test demo
* | Info :
*----------------
* | This version: V1.0
* | Date : 2020-07-16
* | Info :
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documnetation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
******************************************************************************/
#include "EPD_Test.h"
#include "EPD_3in52.h"
#include <time.h>
int EPD_3in52_test(void)
{
printf("EPD_3IN52_test Demo\r\n");
if(DEV_Module_Init()!=0){
return -1;
}
printf("e-Paper Init and Clear...\r\n");
EPD_3IN52_Init();
struct timespec start={0,0}, finish={0,0};
clock_gettime(CLOCK_REALTIME,&start);
EPD_3IN52_display_NUM(EPD_3IN52_WHITE);
EPD_3IN52_lut_GC();
EPD_3IN52_refresh();
clock_gettime(CLOCK_REALTIME,&finish);
printf("%ld S\r\n",finish.tv_sec-start.tv_sec);
EPD_3IN52_SendCommand(0x50);
EPD_3IN52_SendData(0x17);
DEV_Delay_ms(500);
//Create a new image cache
UBYTE *BlackImage;
UWORD Imagesize = ((EPD_3IN52_WIDTH % 8 == 0)? (EPD_3IN52_WIDTH / 8 ): (EPD_3IN52_WIDTH / 8 + 1)) * EPD_3IN52_HEIGHT;
if((BlackImage = (UBYTE *)malloc(Imagesize)) == NULL) {
printf("Failed to apply for black memory...\r\n");
return -1;
}
printf("Paint_NewImage\r\n");
Paint_NewImage(BlackImage, EPD_3IN52_WIDTH, EPD_3IN52_HEIGHT, 270, WHITE);
Paint_Clear(WHITE);
#if 1 // GC waveform refresh
Paint_SelectImage(BlackImage);
Paint_Clear(WHITE);
GUI_ReadBmp("./pic/3in52-1.bmp", 0, 0);
EPD_3IN52_display(BlackImage);
EPD_3IN52_lut_GC();
EPD_3IN52_refresh();
DEV_Delay_ms(2000);
Paint_Clear(WHITE);
GUI_ReadBmp("./pic/3in52-2.bmp", 0, 0);
EPD_3IN52_display(BlackImage);
EPD_3IN52_lut_GC();
EPD_3IN52_refresh();
DEV_Delay_ms(2000);
#endif
#if 0 //DU waveform refresh
printf("Quick refresh is supported, but the refresh effect is not good, but it is not recommended\r\n");
Paint_SelectImage(BlackImage);
Paint_Clear(WHITE);
GUI_ReadBmp("./pic/3in52-3.bmp", 0, 0);
EPD_3IN52_display(BlackImage);
EPD_3IN52_lut_DU();
EPD_3IN52_refresh();
DEV_Delay_ms(2000);
Paint_Clear(WHITE);
GUI_ReadBmp("./pic/3in52-4.bmp", 0, 0);
EPD_3IN52_display(BlackImage);
EPD_3IN52_lut_DU();
EPD_3IN52_refresh();
DEV_Delay_ms(2000);
#endif
#if 1
printf("SelectImage:BlackImage\r\n");
Paint_SelectImage(BlackImage);
Paint_Clear(WHITE);
printf("Drawing:BlackImage\r\n");
Paint_DrawPoint(10, 80, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT);
Paint_DrawPoint(10, 90, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT);
Paint_DrawPoint(10, 100, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT);
Paint_DrawLine(20, 70, 70, 120, BLACK, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
Paint_DrawLine(70, 70, 20, 120, BLACK, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
Paint_DrawRectangle(20, 70, 70, 120, BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
Paint_DrawRectangle(80, 70, 130, 120, BLACK, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawCircle(45, 95, 20, BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
Paint_DrawCircle(105, 95, 20, WHITE, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawLine(85, 95, 125, 95, BLACK, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
Paint_DrawLine(105, 75, 105, 115, BLACK, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
Paint_DrawString_EN(10, 0, "waveshare", &Font16, BLACK, WHITE);
Paint_DrawString_EN(10, 20, "hello world", &Font12, WHITE, BLACK);
Paint_DrawNum(10, 33, 123456789, &Font12, BLACK, WHITE);
Paint_DrawNum(10, 50, 987654321, &Font16, WHITE, BLACK);
printf("EPD_Display\r\n");
EPD_3IN52_display(BlackImage);
EPD_3IN52_lut_GC();
EPD_3IN52_refresh();
DEV_Delay_ms(2000);
#endif
printf("Clear...\r\n");
EPD_3IN52_Clear();
// Sleep & close 5V
printf("Goto Sleep...\r\n");
EPD_3IN52_sleep();
free(BlackImage);
BlackImage = NULL;
DEV_Delay_ms(2000);//important, at least 2s
printf("close 5V, Module enters 0 power consumption ...\r\n");
DEV_Module_Exit();
return 0;
}

View file

@ -0,0 +1,178 @@
/*****************************************************************************
* | File : EPD_7in3g_test.c
* | Author : Waveshare team
* | Function : 7.3inch e-paper (G) test demo
* | Info :
*----------------
* | This version: V1.0
* | Date : 2022-07-22
* | Info :
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documnetation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
******************************************************************************/
#include "EPD_Test.h"
#include "EPD_7in3g.h"
#include "time.h"
int EPD_7in3g_test(void)
{
printf("EPD_7IN3G_test Demo\r\n");
if(DEV_Module_Init()!=0){
return -1;
}
printf("e-Paper Init and Clear...\r\n");
EPD_7IN3G_Init();
printf("Black \r\n");
struct timespec start={0,0}, finish={0,0};
clock_gettime(CLOCK_REALTIME, &start);
EPD_7IN3G_Clear(EPD_7IN3G_WHITE); // WHITE
clock_gettime(CLOCK_REALTIME, &finish);
printf("%ld S\r\n", finish.tv_sec-start.tv_sec);
DEV_Delay_ms(2000);
//Create a new image cache
UBYTE *BlackImage;
UDOUBLE Imagesize = ((EPD_7IN3G_WIDTH % 4 == 0)? (EPD_7IN3G_WIDTH / 4 ): (EPD_7IN3G_WIDTH / 4 + 1)) * EPD_7IN3G_HEIGHT;
if((BlackImage = (UBYTE *)malloc(Imagesize)) == NULL) {
printf("Failed to apply for black memory...\r\n");
return -1;
}
printf("Paint_NewImage\r\n");
Paint_NewImage(BlackImage, EPD_7IN3G_WIDTH, EPD_7IN3G_HEIGHT, 0, EPD_7IN3G_WHITE);
Paint_SetScale(4);
#if 1 // show bmp
printf("show BMP-----------------\r\n");
Paint_SelectImage(BlackImage);
GUI_ReadBmp_RGB_4Color("./pic/7.3inch-1.bmp", 0, 0);
EPD_7IN3G_Display(BlackImage);
DEV_Delay_ms(2000);
#endif
#if 1 // Drawing on the image
//1.Select Image
printf("SelectImage:BlackImage\r\n");
Paint_SelectImage(BlackImage);
Paint_Clear(0x55);
// 2.Drawing on the image
printf("Drawing:BlackImage\r\n");
Paint_DrawPoint(10, 80, Red_4Color, DOT_PIXEL_1X1, DOT_STYLE_DFT);
Paint_DrawPoint(10, 90, Yellow_4Color, DOT_PIXEL_2X2, DOT_STYLE_DFT);
Paint_DrawPoint(10, 100, Black_4Color, DOT_PIXEL_3X3, DOT_STYLE_DFT);
Paint_DrawLine(20, 70, 70, 120, Red_4Color, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
Paint_DrawLine(70, 70, 20, 120, Red_4Color, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
Paint_DrawRectangle(20, 70, 70, 120, Yellow_4Color, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
Paint_DrawRectangle(80, 70, 130, 120, Yellow_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawCircle(45, 95, 20, Black_4Color, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
Paint_DrawCircle(105, 95, 20, Black_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawLine(85, 95, 125, 95, Red_4Color, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
Paint_DrawLine(105, 75, 105, 115, Yellow_4Color, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
Paint_DrawString_EN(10, 0, "Red, yellow, white and black", &Font16, Red_4Color, Yellow_4Color);
Paint_DrawString_EN(10, 35, "Four color e-Paper", &Font12, Yellow_4Color, Black_4Color);
Paint_DrawString_CN(10, 125, "΢ѩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", &Font24CN, Red_4Color, White_4Color);
Paint_DrawNum(10, 50, 123456, &Font12, Red_4Color, White_4Color);
printf("EPD_Display\r\n");
EPD_7IN3G_Display(BlackImage);
DEV_Delay_ms(3000);
#endif
#if 1 // Drawing on the image
//1.Select Image
printf("SelectImage:BlackImage\r\n");
Paint_SelectImage(BlackImage);
Paint_Clear(0x55);
// 2.Drawing on the image
printf("Drawing:BlackImage\r\n");
// Paint_DrawRectangle(1, 1, 121, 368, Red_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
// Paint_DrawRectangle(392, 1, 512, 368, Yellow_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
// Paint_DrawRectangle(1, 112, 512, 256, Black_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
UBYTE iWidth = EPD_7IN3G_WIDTH/8;
UBYTE iHeight = EPD_7IN3G_HEIGHT/8;
for(UBYTE i=0; i<8; i++) {
if(i%2 == 0)
Paint_DrawRectangle(1, 1+(i*iHeight), 800, (i+1)*iHeight, Red_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
else
Paint_DrawRectangle(1+(i*iWidth), 1, (i+1)*iWidth, 480, Yellow_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
}
printf("EPD_Display\r\n");
EPD_7IN3G_Display(BlackImage);
DEV_Delay_ms(3000);
#endif
#if 1 // Drawing on the image
//1.Select Image
printf("SelectImage:BlackImage\r\n");
Paint_SelectImage(BlackImage);
Paint_Clear(0x55);
int wNumber, lNumber;
wNumber = (EPD_7IN3G_WIDTH/80)==0 ? (EPD_7IN3G_WIDTH/80) : (EPD_7IN3G_WIDTH/80)+1;
lNumber = (EPD_7IN3G_HEIGHT/20)==0 ? (EPD_7IN3G_HEIGHT/20) : (EPD_7IN3G_HEIGHT/20)+1;
// 2.Drawing on the image
printf("Drawing:BlackImage\r\n");
for(int j=0; j<lNumber; j++) {
if(j%2 == 0) {
for(int i=0; i<wNumber; i++) {
Paint_DrawRectangle(1+i*80, 1+j*20, 20+i*80, 20+j*20, Red_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(21+i*80, 1+j*20, 40+i*80, 20+j*20, Yellow_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(41+i*80, 1+j*20, 60+i*80, 20+j*20, White_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(61+i*80, 1+j*20, 80+i*80, 20+j*20, Black_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
}
}
else {
for(int i=0; i<wNumber; i++) {
Paint_DrawRectangle(1+i*80, 1+j*20, 20+i*80, 20+j*20, White_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(21+i*80, 1+j*20, 40+i*80, 20+j*20, Black_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(41+i*80, 1+j*20, 60+i*80, 20+j*20, Red_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(61+i*80, 1+j*20, 80+i*80, 20+j*20, Yellow_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
}
}
}
printf("EPD_Display\r\n");
EPD_7IN3G_Display(BlackImage);
DEV_Delay_ms(3000);
#endif
printf("Clear...\r\n");
EPD_7IN3G_Clear(EPD_7IN3G_WHITE);
printf("Goto Sleep...\r\n");
EPD_7IN3G_Sleep();
free(BlackImage);
BlackImage = NULL;
DEV_Delay_ms(2000);//important, at least 2s
// close 5V
printf("close 5V, Module enters 0 power consumption ...\r\n");
DEV_Module_Exit();
return 0;
}

View file

@ -1,11 +1,11 @@
/*****************************************************************************
* | File : EPD_Test.h
* | File : EPD_Test.h
* | Author : Waveshare team
* | Function : e-Paper test Demo
* | Info :
*----------------
* | This version: V1.0
* | Date : 2019-06-11
* | This version: V1.1
* | Date : 2022-07-28
* | Info :
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
@ -37,6 +37,10 @@
#include "Debug.h"
#include <stdlib.h> // malloc() free()
int EPD_1in64g_test(void);
int EPD_3in0g_test(void);
int EPD_7in3g_test(void);
int EPD_1in54_DES_test(void);
int EPD_2in13_DES_test(void);
int EPD_2in9_DES_test(void);
@ -70,6 +74,8 @@ int EPD_2in13b_V3_test(void);
int EPD_2in13b_V4_test(void);
int EPD_2in13d_test(void);
int EPD_3in52_test(void);
int EPD_3in7_test(void);
int EPD_4in01f_test(void);

View file

@ -16,6 +16,10 @@ int main(void)
// Exception handling:ctrl + c
signal(SIGINT, Handler);
// EPD_1in64g_test();
// EPD_3in0g_test();
// EPD_7in3g_test();
// EPD_1in54_DES_test();
// EPD_2in13_DES_test();
// EPD_2in9_DES_test();
@ -50,6 +54,7 @@ int main(void)
// EPD_2in13b_V4_test();
// EPD_2in13d_test();
// EPD_3in52_test();
// EPD_3in7_test();
// EPD_4in01f_test();

View file

@ -6,10 +6,12 @@
* Used to shield the underlying layers of each master
* and enhance portability
*----------------
* | This version: V2.2
* | Date : 2020-07-08
* | This version: V2.3
* | Date : 2022-07-27
* | Info :
* -----------------------------------------------------------------------------
* V2.3(2022-07-27):
* 1.Add GUI_ReadBmp_RGB_4Color()
* V2.2(2020-07-08):
* 1.Add GUI_ReadBmp_RGB_7Color()
* V2.1(2019-10-10):
@ -149,7 +151,7 @@ UBYTE GUI_ReadBmp_4Gray(const char *path, UWORD Xstart, UWORD Ystart)
Debug("Cann't open the file!\n");
exit(0);
}
// Set the file pointer from the beginning
fseek(fp, 0, SEEK_SET);
fread(&bmpFileHeader, sizeof(BMPFILEHEADER), 1, fp); //sizeof(BMPFILEHEADER) must be 14
@ -283,4 +285,76 @@ UBYTE GUI_ReadBmp_RGB_7Color(const char *path, UWORD Xstart, UWORD Ystart)
return 0;
}
UBYTE GUI_ReadBmp_RGB_4Color(const char *path, UWORD Xstart, UWORD Ystart)
{
FILE *fp; //Define a file pointer
BMPFILEHEADER bmpFileHeader; //Define a bmp file header structure
BMPINFOHEADER bmpInfoHeader; //Define a bmp info header structure
// Binary file open
if((fp = fopen(path, "rb")) == NULL) {
Debug("Cann't open the file!\n");
exit(0);
}
// Set the file pointer from the beginning
fseek(fp, 0, SEEK_SET);
fread(&bmpFileHeader, sizeof(BMPFILEHEADER), 1, fp); //sizeof(BMPFILEHEADER) must be 14
fread(&bmpInfoHeader, sizeof(BMPINFOHEADER), 1, fp); //sizeof(BMPFILEHEADER) must be 50
printf("pixel = %d * %d\r\n", bmpInfoHeader.biWidth, bmpInfoHeader.biHeight);
UDOUBLE Image_Byte = bmpInfoHeader.biWidth * bmpInfoHeader.biHeight * 3;
UBYTE Image[Image_Byte];
memset(Image, 0xFF, Image_Byte);
// Determine if it is a monochrome bitmap
int readbyte = bmpInfoHeader.biBitCount;
if(readbyte != 24){
Debug("Bmp image is not 24 bitmap!\n");
exit(0);
}
// Read image data into the cache
UWORD x, y;
UBYTE Rdata[3];
fseek(fp, bmpFileHeader.bOffset, SEEK_SET);
for(y = 0; y < bmpInfoHeader.biHeight; y++) {//Total display column
for(x = 0; x < bmpInfoHeader.biWidth ; x++) {//Show a line in the line
if(fread((char *)Rdata, 1, 1, fp) != 1) {
perror("get bmpdata:\r\n");
break;
}
if(fread((char *)Rdata+1, 1, 1, fp) != 1) {
perror("get bmpdata:\r\n");
break;
}
if(fread((char *)Rdata+2, 1, 1, fp) != 1) {
perror("get bmpdata:\r\n");
break;
}
if(Rdata[0] < 128 && Rdata[1] < 128 && Rdata[2] < 128){
Image[x+(y* bmpInfoHeader.biWidth )] = 0;//Black
}else if(Rdata[0] > 127 && Rdata[1] > 127 && Rdata[2] > 127){
Image[x+(y* bmpInfoHeader.biWidth )] = 1;//White
}else if(Rdata[0] < 128 && Rdata[1] > 127 && Rdata[2] > 127){
Image[x+(y* bmpInfoHeader.biWidth )] = 2;//Yellow
}else if(Rdata[0] < 128 && Rdata[1] < 128 && Rdata[2] > 127){
Image[x+(y* bmpInfoHeader.biWidth )] = 3;//Red
}
}
}
fclose(fp);
// Refresh the image to the display buffer based on the displayed orientation
for(y = 0; y < bmpInfoHeader.biHeight; y++) {
for(x = 0; x < bmpInfoHeader.biWidth; x++) {
if(x > Paint.Width || y > Paint.Height) {
break;
}
Paint_SetPixel(Xstart + x, Ystart + y, Image[bmpInfoHeader.biHeight * bmpInfoHeader.biWidth - 1 -(bmpInfoHeader.biWidth-x-1+(y* bmpInfoHeader.biWidth))]);
}
}
return 0;
}

View file

@ -6,10 +6,12 @@
* Used to shield the underlying layers of each master
* and enhance portability
*----------------
* | This version: V2.2
* | Date : 2020-07-08
* | This version: V2.3
* | Date : 2020-07-27
* | Info :
* -----------------------------------------------------------------------------
* V2.3(2022-07-27):
* 1.Add GUI_ReadBmp_RGB_4Color()
* V2.2(2020-07-08):
* 1.Add GUI_ReadBmp_RGB_7Color()
* V2.1(2019-10-10):
@ -85,5 +87,6 @@ typedef struct RGB_QUAD {
UBYTE GUI_ReadBmp(const char *path, UWORD Xstart, UWORD Ystart);
UBYTE GUI_ReadBmp_4Gray(const char *path, UWORD Xstart, UWORD Ystart);
UBYTE GUI_ReadBmp_RGB_4Color(const char *path, UWORD Xstart, UWORD Ystart);
UBYTE GUI_ReadBmp_RGB_7Color(const char *path, UWORD Xstart, UWORD Ystart);
#endif

View file

@ -126,6 +126,14 @@ typedef enum {
#define GRAY2 0x02
#define GRAY3 0x01 //gray
#define GRAY4 0x00 //white
//colour
#define Black_4Color 0x00
#define White_4Color 0x01
#define Yellow_4Color 0x02
#define Red_4Color 0x03
/**
* The size of the point
**/

View file

@ -0,0 +1,238 @@
/*****************************************************************************
* | File : EPD_1in64_g.c
* | Author : Waveshare team
* | Function : 1.64inch e-paper (G)
* | Info :
*----------------
* | This version: V1.0
* | Date : 2022-07-22
* | Info :
* -----------------------------------------------------------------------------
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documnetation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
******************************************************************************/
#include "EPD_1in64g.h"
#include "Debug.h"
/******************************************************************************
function : Software reset
parameter:
******************************************************************************/
static void EPD_1IN64G_Reset(void)
{
DEV_Digital_Write(EPD_RST_PIN, 1);
DEV_Delay_ms(20);
DEV_Digital_Write(EPD_RST_PIN, 0);
DEV_Delay_ms(1);
DEV_Digital_Write(EPD_RST_PIN, 1);
DEV_Delay_ms(20);
}
/******************************************************************************
function : send command
parameter:
Reg : Command register
******************************************************************************/
static void EPD_1IN64G_SendCommand(UBYTE Reg)
{
DEV_Digital_Write(EPD_DC_PIN, 0);
DEV_Digital_Write(EPD_CS_PIN, 0);
DEV_SPI_WriteByte(Reg);
DEV_Digital_Write(EPD_CS_PIN, 1);
}
/******************************************************************************
function : send data
parameter:
Data : Write data
******************************************************************************/
static void EPD_1IN64G_SendData(UBYTE Data)
{
DEV_Digital_Write(EPD_DC_PIN, 1);
DEV_Digital_Write(EPD_CS_PIN, 0);
DEV_SPI_WriteByte(Data);
DEV_Digital_Write(EPD_CS_PIN, 1);
}
/******************************************************************************
function : Wait until the busy_pin goes LOW
parameter:
******************************************************************************/
static void EPD_1IN64G_ReadBusyH(void)
{
Debug("e-Paper busy H\r\n");
while(!DEV_Digital_Read(EPD_BUSY_PIN)) { //LOW: idle, HIGH: busy
DEV_Delay_ms(5);
}
Debug("e-Paper busy H release\r\n");
}
static void EPD_1IN64G_ReadBusyL(void)
{
Debug("e-Paper busy L\r\n");
while(DEV_Digital_Read(EPD_BUSY_PIN)) { //LOW: idle, HIGH: busy
DEV_Delay_ms(5);
}
Debug("e-Paper busy L release\r\n");
}
/******************************************************************************
function : Turn On Display
parameter:
******************************************************************************/
static void EPD_1IN64G_TurnOnDisplay(void)
{
EPD_1IN64G_SendCommand(0x12); // DISPLAY_REFRESH
EPD_1IN64G_SendData(0x01);
EPD_1IN64G_ReadBusyH();
EPD_1IN64G_SendCommand(0x02); // POWER_OFF
EPD_1IN64G_SendData(0X00);
EPD_1IN64G_ReadBusyH();
}
/******************************************************************************
function : Initialize the e-Paper register
parameter:
******************************************************************************/
void EPD_1IN64G_Init(void)
{
EPD_1IN64G_Reset();
EPD_1IN64G_SendCommand(0x66);
EPD_1IN64G_SendData(0x49);
EPD_1IN64G_SendData(0x55);
EPD_1IN64G_SendData(0x13);
EPD_1IN64G_SendData(0x5D);
EPD_1IN64G_SendCommand(0x66);
EPD_1IN64G_SendData(0x49);
EPD_1IN64G_SendData(0x55);
EPD_1IN64G_SendCommand(0xB0);
EPD_1IN64G_SendData(0x03);//1 boost 20211113
EPD_1IN64G_SendCommand(0x00);
EPD_1IN64G_SendData(0x4F);
EPD_1IN64G_SendData(0x6B);
EPD_1IN64G_SendCommand(0x03);
EPD_1IN64G_SendData(0x00);
EPD_1IN64G_SendCommand(0xF0);
EPD_1IN64G_SendData(0xF6);
EPD_1IN64G_SendData(0x0D);
EPD_1IN64G_SendData(0x00);
EPD_1IN64G_SendData(0x00);
EPD_1IN64G_SendData(0x00);
//20220303
EPD_1IN64G_SendCommand(0x06);
EPD_1IN64G_SendData(0xCF);
EPD_1IN64G_SendData(0xDF);
EPD_1IN64G_SendData(0x0F);
EPD_1IN64G_SendCommand(0x41);
EPD_1IN64G_SendData(0x00);
EPD_1IN64G_SendCommand(0x50);
EPD_1IN64G_SendData(0x30);
EPD_1IN64G_SendCommand(0x60);
EPD_1IN64G_SendData(0x0C);
EPD_1IN64G_SendData(0x05);
EPD_1IN64G_SendCommand(0x61);
EPD_1IN64G_SendData(0xA8);
EPD_1IN64G_SendData(0x00);
EPD_1IN64G_SendData(0xA8);
EPD_1IN64G_SendCommand(0x84);
EPD_1IN64G_SendData(0x01);
}
/******************************************************************************
function : Clear screen
parameter:
******************************************************************************/
void EPD_1IN64G_Clear(UBYTE color)
{
UWORD Width, Height;
Width = (EPD_1IN64G_WIDTH % 4 == 0)? (EPD_1IN64G_WIDTH / 4 ): (EPD_1IN64G_WIDTH / 4 + 1);
Height = EPD_1IN64G_HEIGHT;
EPD_1IN64G_SendCommand(0x68);
EPD_1IN64G_SendData(0x01);
EPD_1IN64G_SendCommand(0x04);
EPD_1IN64G_ReadBusyH();
EPD_1IN64G_SendCommand(0x10);
for (UWORD j = 0; j < Height; j++) {
for (UWORD i = 0; i < Width; i++) {
for(UBYTE k = 0; k < 4; k++) {
EPD_1IN64G_SendData(color);
}
}
}
EPD_1IN64G_SendCommand(0x68);
EPD_1IN64G_SendData(0x00);
EPD_1IN64G_TurnOnDisplay();
}
/******************************************************************************
function : Sends the image buffer in RAM to e-Paper and displays
parameter:
******************************************************************************/
void EPD_1IN64G_Display(UBYTE *Image)
{
UWORD Width, Height;
Width = (EPD_1IN64G_WIDTH % 4 == 0)? (EPD_1IN64G_WIDTH / 4 ): (EPD_1IN64G_WIDTH / 4 + 1);
Height = EPD_1IN64G_HEIGHT;
EPD_1IN64G_SendCommand(0x68);
EPD_1IN64G_SendData(0x01);
EPD_1IN64G_SendCommand(0x04);
EPD_1IN64G_ReadBusyH();
EPD_1IN64G_SendCommand(0x10);
for (UWORD j = 0; j < Height; j++) {
for (UWORD i = 0; i < Width; i++) {
EPD_1IN64G_SendData(Image[i + j * Width]);
}
}
EPD_1IN64G_TurnOnDisplay();
}
/******************************************************************************
function : Enter sleep mode
parameter:
******************************************************************************/
void EPD_1IN64G_Sleep(void)
{
EPD_1IN64G_SendCommand(0x02); // POWER_OFF
EPD_1IN64G_SendData(0X00);
EPD_1IN64G_SendCommand(0x07); // DEEP_SLEEP
EPD_1IN64G_SendData(0XA5);
}

View file

@ -0,0 +1,32 @@
/*****************************************************************************
* | File : EPD_1in64g.h
* | Author : Waveshare team
* | Function : 1.64inch e-paper(G)
* | Info :
*----------------
* | This version: V1.0
* | Date : 2022-07-14
* | Info :
* -----------------------------------------------------------------------------
******************************************************************************/
#ifndef __EPD_1IN64G_H_
#define __EPD_1IN64G_H_
#include "DEV_Config.h"
// Display resolution
#define EPD_1IN64G_WIDTH 168
#define EPD_1IN64G_HEIGHT 168
//colour
#define EPD_1IN64G_BLACK 0x00
#define EPD_1IN64G_WHITE 0x55
#define EPD_1IN64G_YELLOW 0xAA
#define EPD_1IN64G_RED 0xFF
void EPD_1IN64G_Init(void);
void EPD_1IN64G_Clear(UBYTE color);
void EPD_1IN64G_Display(UBYTE *Image);
void EPD_1IN64G_Sleep(void);
#endif

View file

@ -0,0 +1,220 @@
/*****************************************************************************
* | File : EPD_3in0_g.c
* | Author : Waveshare team
* | Function : 3inch e-paper (G)
* | Info :
*----------------
* | This version: V1.0
* | Date : 2022-07-15
* | Info :
* -----------------------------------------------------------------------------
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documnetation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
******************************************************************************/
#include "EPD_3in0g.h"
#include "Debug.h"
/******************************************************************************
function : Software reset
parameter:
******************************************************************************/
static void EPD_3IN0G_Reset(void)
{
DEV_Digital_Write(EPD_RST_PIN, 1);
DEV_Delay_ms(20);
DEV_Digital_Write(EPD_RST_PIN, 0);
DEV_Delay_ms(2);
DEV_Digital_Write(EPD_RST_PIN, 1);
DEV_Delay_ms(20);
}
/******************************************************************************
function : send command
parameter:
Reg : Command register
******************************************************************************/
static void EPD_3IN0G_SendCommand(UBYTE Reg)
{
DEV_Digital_Write(EPD_DC_PIN, 0);
DEV_Digital_Write(EPD_CS_PIN, 0);
DEV_SPI_WriteByte(Reg);
DEV_Digital_Write(EPD_CS_PIN, 1);
}
/******************************************************************************
function : send data
parameter:
Data : Write data
******************************************************************************/
static void EPD_3IN0G_SendData(UBYTE Data)
{
DEV_Digital_Write(EPD_DC_PIN, 1);
DEV_Digital_Write(EPD_CS_PIN, 0);
DEV_SPI_WriteByte(Data);
DEV_Digital_Write(EPD_CS_PIN, 1);
}
/******************************************************************************
function : Wait until the busy_pin goes LOW
parameter:
******************************************************************************/
static void EPD_3IN0G_ReadBusyH(void)
{
Debug("e-Paper busy H\r\n");
while(!DEV_Digital_Read(EPD_BUSY_PIN)) { //LOW: idle, HIGH: busy
DEV_Delay_ms(5);
}
Debug("e-Paper busy H release\r\n");
}
static void EPD_3IN0G_ReadBusyL(void)
{
Debug("e-Paper busy L\r\n");
while(DEV_Digital_Read(EPD_BUSY_PIN)) { //LOW: idle, HIGH: busy
DEV_Delay_ms(5);
}
Debug("e-Paper busy L release\r\n");
}
/******************************************************************************
function : Turn On Display
parameter:
******************************************************************************/
static void EPD_3IN0G_TurnOnDisplay(void)
{
EPD_3IN0G_SendCommand(0x12); // DISPLAY_REFRESH
EPD_3IN0G_SendData(0x00);
EPD_3IN0G_ReadBusyH();
EPD_3IN0G_SendCommand(0x02); // POWER_OFF
EPD_3IN0G_SendData(0X00);
EPD_3IN0G_ReadBusyH();
}
/******************************************************************************
function : Initialize the e-Paper register
parameter:
******************************************************************************/
void EPD_3IN0G_Init(void)
{
EPD_3IN0G_Reset();
EPD_3IN0G_SendCommand(0x66);
EPD_3IN0G_SendData(0x49);
EPD_3IN0G_SendData(0x55);
EPD_3IN0G_SendData(0x13);
EPD_3IN0G_SendData(0x5D);
EPD_3IN0G_SendData(0x05);
EPD_3IN0G_SendData(0x10);
EPD_3IN0G_SendCommand(0xB0);
EPD_3IN0G_SendData(0x00);//1 boost
EPD_3IN0G_SendCommand(0x01);
EPD_3IN0G_SendData(0x0F);
EPD_3IN0G_SendData(0x00);
EPD_3IN0G_SendCommand(0x00);
EPD_3IN0G_SendData(0x4F);
EPD_3IN0G_SendData(0x6B);
EPD_3IN0G_SendCommand(0x06);
EPD_3IN0G_SendData(0xD7);
EPD_3IN0G_SendData(0xDE);
EPD_3IN0G_SendData(0x12);
EPD_3IN0G_SendCommand(0x61);
EPD_3IN0G_SendData(0x00);
EPD_3IN0G_SendData(0xA8);
EPD_3IN0G_SendData(0x01);
EPD_3IN0G_SendData(0x90);
EPD_3IN0G_SendCommand(0x50);
EPD_3IN0G_SendData(0x37);
EPD_3IN0G_SendCommand(0x60);
EPD_3IN0G_SendData(0x0C);
EPD_3IN0G_SendData(0x05);
EPD_3IN0G_SendCommand(0xE3);
EPD_3IN0G_SendData(0xFF);
EPD_3IN0G_SendCommand(0x84);
EPD_3IN0G_SendData(0x00);
}
/******************************************************************************
function : Clear screen
parameter:
******************************************************************************/
void EPD_3IN0G_Clear(UBYTE color)
{
UWORD Width, Height;
Width = (EPD_3IN0G_WIDTH % 4 == 0)? (EPD_3IN0G_WIDTH / 4 ): (EPD_3IN0G_WIDTH / 4 + 1);
Height = EPD_3IN0G_HEIGHT;
EPD_3IN0G_SendCommand(0x04);
EPD_3IN0G_ReadBusyH();
EPD_3IN0G_SendCommand(0x10);
for (UWORD j = 0; j < Height; j++) {
for (UWORD i = 0; i < Width; i++) {
EPD_3IN0G_SendData(color);
}
}
EPD_3IN0G_TurnOnDisplay();
}
/******************************************************************************
function : Sends the image buffer in RAM to e-Paper and displays
parameter:
******************************************************************************/
void EPD_3IN0G_Display(UBYTE *Image)
{
UWORD Width, Height;
Width = (EPD_3IN0G_WIDTH % 4 == 0)? (EPD_3IN0G_WIDTH / 4 ): (EPD_3IN0G_WIDTH / 4 + 1);
Height = EPD_3IN0G_HEIGHT;
EPD_3IN0G_SendCommand(0x04);
EPD_3IN0G_ReadBusyH();
EPD_3IN0G_SendCommand(0x10);
for (UWORD j = 0; j < Height; j++) {
for (UWORD i = 0; i < Width; i++) {
EPD_3IN0G_SendData(Image[i + j * Width]);
}
}
EPD_3IN0G_TurnOnDisplay();
}
/******************************************************************************
function : Enter sleep mode
parameter:
******************************************************************************/
void EPD_3IN0G_Sleep(void)
{
EPD_3IN0G_SendCommand(0x02); // POWER_OFF
EPD_3IN0G_SendData(0X00);
EPD_3IN0G_SendCommand(0x07); // DEEP_SLEEP
EPD_3IN0G_SendData(0XA5);
}

View file

@ -0,0 +1,32 @@
/*****************************************************************************
* | File : EPD_3in0g.h
* | Author : Waveshare team
* | Function : 3inch e-paper (G)
* | Info :
*----------------
* | This version: V1.0
* | Date : 2022-07-15
* | Info :
* -----------------------------------------------------------------------------
******************************************************************************/
#ifndef __EPD_3IN0G_H_
#define __EPD_3IN0G_H_
#include "DEV_Config.h"
// Display resolution
#define EPD_3IN0G_WIDTH 168
#define EPD_3IN0G_HEIGHT 400
//colour
#define EPD_3IN0G_BLACK 0x00
#define EPD_3IN0G_WHITE 0x55
#define EPD_3IN0G_YELLOW 0xAA
#define EPD_3IN0G_RED 0xFF
void EPD_3IN0G_Init(void);
void EPD_3IN0G_Clear(UBYTE color);
void EPD_3IN0G_Display(UBYTE *Image);
void EPD_3IN0G_Sleep(void);
#endif

View file

@ -0,0 +1,588 @@
/*****************************************************************************
* | File : EPD_3IN52.C
* | Author : Waveshare team
* | Function : 3.52inch e-paper
* | Info :
*----------------
* | This version: V1.0
* | Date : 2022-05-07
* | Info :
* -----------------------------------------------------------------------------
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documnetation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
******************************************************************************/
#include "EPD_3in52.h"
#include "Debug.h"
//GC 0.9S
static const UBYTE EPD_3IN52_lut_R20_GC[] =
{
0x01,0x0f,0x0f,0x0f,0x01,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
static const UBYTE EPD_3IN52_lut_R21_GC[] =
{
0x01,0x4f,0x8f,0x0f,0x01,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
static const UBYTE EPD_3IN52_lut_R22_GC[] =
{
0x01,0x0f,0x8f,0x0f,0x01,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
static const UBYTE EPD_3IN52_lut_R23_GC[] =
{
0x01,0x4f,0x8f,0x4f,0x01,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
static const UBYTE EPD_3IN52_lut_R24_GC[] =
{
0x01,0x0f,0x8f,0x4f,0x01,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
// DU 0.3s
static const UBYTE EPD_3IN52_lut_R20_DU[] =
{
0x01,0x0f,0x01,0x00,0x00,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
static const UBYTE EPD_3IN52_lut_R21_DU[] =
{
0x01,0x0f,0x01,0x00,0x00,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
static const UBYTE EPD_3IN52_lut_R22_DU[] =
{
0x01,0x8f,0x01,0x00,0x00,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
static const UBYTE EPD_3IN52_lut_R23_DU[] =
{
0x01,0x4f,0x01,0x00,0x00,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
static const UBYTE EPD_3IN52_lut_R24_DU[] =
{
0x01,0x0f,0x01,0x00,0x00,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
//
static const UBYTE EPD_3IN52_lut_vcom[] =
{
0x01,0x19,0x19,0x19,0x19,0x01,0x01,
0x01,0x19,0x19,0x19,0x01,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
static const UBYTE EPD_3IN52_lut_ww[] =
{
0x01,0x59,0x99,0x59,0x99,0x01,0x01,
0x01,0x59,0x99,0x19,0x01,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
static const UBYTE EPD_3IN52_lut_bw[] =
{
0x01,0x59,0x99,0x59,0x99,0x01,0x01,
0x01,0x59,0x99,0x19,0x01,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
static const UBYTE EPD_3IN52_lut_wb[] =
{
0x01,0x19,0x99,0x59,0x99,0x01,0x01,
0x01,0x59,0x99,0x59,0x01,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
static const UBYTE EPD_3IN52_lut_bb[] =
{
0x01,0x19,0x99,0x59,0x99,0x01,0x01,
0x01,0x59,0x99,0x59,0x01,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
unsigned char EPD_3IN52_Flag = 0;
/******************************************************************************
function : Software reset
parameter:
******************************************************************************/
void EPD_3IN52_Reset(void)
{
DEV_Digital_Write(EPD_RST_PIN, 1);
DEV_Delay_ms(200);
DEV_Digital_Write(EPD_RST_PIN, 0);
DEV_Delay_ms(2);
DEV_Digital_Write(EPD_RST_PIN, 1);
DEV_Delay_ms(200);
}
/******************************************************************************
function : send command
parameter:
Reg : Command register
******************************************************************************/
void EPD_3IN52_SendCommand(UBYTE Reg)
{
DEV_Digital_Write(EPD_DC_PIN, 0);
DEV_Digital_Write(EPD_CS_PIN, 0);
DEV_SPI_WriteByte(Reg);
DEV_Digital_Write(EPD_CS_PIN, 1);
}
/******************************************************************************
function : send data
parameter:
Data : Write data
******************************************************************************/
void EPD_3IN52_SendData(UBYTE Data)
{
DEV_Digital_Write(EPD_DC_PIN, 1);
DEV_Digital_Write(EPD_CS_PIN, 0);
DEV_SPI_WriteByte(Data);
DEV_Digital_Write(EPD_CS_PIN, 1);
}
/******************************************************************************
function : Read Busy
parameter:
******************************************************************************/
void EPD_3IN52_ReadBusy(void)
{
Debug("e-Paper busy\r\n");
UBYTE busy;
do {
busy = DEV_Digital_Read(EPD_BUSY_PIN);
} while(!busy);
DEV_Delay_ms(200);
Debug("e-Paper busy release\r\n");
}
/**
* @brief
*
*/
void EPD_3IN52_lut(void)
{
UBYTE count;
EPD_3IN52_SendCommand(0x20); // vcom
for(count = 0; count < 42 ; count++)
{
EPD_3IN52_SendData(EPD_3IN52_lut_vcom[count]);
}
EPD_3IN52_SendCommand(0x21); // ww --
for(count = 0; count < 42 ; count++)
{
EPD_3IN52_SendData(EPD_3IN52_lut_ww[count]);
}
EPD_3IN52_SendCommand(0x22); // bw r
for(count = 0; count < 42 ; count++)
{
EPD_3IN52_SendData(EPD_3IN52_lut_bw[count]);
}
EPD_3IN52_SendCommand(0x23); // wb w
for(count = 0; count < 42 ; count++)
{
EPD_3IN52_SendData(EPD_3IN52_lut_bb[count]);
}
EPD_3IN52_SendCommand(0x24); // bb b
for(count = 0; count < 42 ; count++)
{
EPD_3IN52_SendData(EPD_3IN52_lut_wb[count]);
}
}
/**
* @brief
*
*/
void EPD_3IN52_refresh(void)
{
EPD_3IN52_SendCommand(0x17);
EPD_3IN52_SendData(0xA5);
EPD_3IN52_ReadBusy();
DEV_Delay_ms(200);
}
// LUT download
void EPD_3IN52_lut_GC(void)
{
UBYTE count;
EPD_3IN52_SendCommand(0x20); // vcom
for(count = 0; count < 56 ; count++)
{
EPD_3IN52_SendData(EPD_3IN52_lut_R20_GC[count]);
}
EPD_3IN52_SendCommand(0x21); // red not use
for(count = 0; count < 42 ; count++)
{
EPD_3IN52_SendData(EPD_3IN52_lut_R21_GC[count]);
}
EPD_3IN52_SendCommand(0x24); // bb b
for(count = 0; count < 42 ; count++)
{
EPD_3IN52_SendData(EPD_3IN52_lut_R24_GC[count]);
}
if(EPD_3IN52_Flag == 0)
{
EPD_3IN52_SendCommand(0x22); // bw r
for(count = 0; count < 56 ; count++)
{
EPD_3IN52_SendData(EPD_3IN52_lut_R22_GC[count]);
}
EPD_3IN52_SendCommand(0x23); // wb w
for(count = 0; count < 42 ; count++)
{
EPD_3IN52_SendData(EPD_3IN52_lut_R23_GC[count]);
}
EPD_3IN52_Flag = 1;
}
else
{
EPD_3IN52_SendCommand(0x22); // bw r
for(count = 0; count < 56 ; count++)
{
EPD_3IN52_SendData(EPD_3IN52_lut_R23_GC[count]);
}
EPD_3IN52_SendCommand(0x23); // wb w
for(count = 0; count < 42 ; count++)
{
EPD_3IN52_SendData(EPD_3IN52_lut_R22_GC[count]);
}
EPD_3IN52_Flag = 0;
}
}
// LUT download
void EPD_3IN52_lut_DU(void)
{
UBYTE count;
EPD_3IN52_SendCommand(0x20); // vcom
for(count = 0; count < 56 ; count++)
{
EPD_3IN52_SendData(EPD_3IN52_lut_R20_DU[count]);
}
EPD_3IN52_SendCommand(0x21); // red not use
for(count = 0; count < 42 ; count++)
{
EPD_3IN52_SendData(EPD_3IN52_lut_R21_DU[count]);
}
EPD_3IN52_SendCommand(0x24); // bb b
for(count = 0; count < 42 ; count++)
{
EPD_3IN52_SendData(EPD_3IN52_lut_R24_DU[count]);
}
if(EPD_3IN52_Flag == 0)
{
EPD_3IN52_SendCommand(0x22); // bw r
for(count = 0; count < 56 ; count++)
{
EPD_3IN52_SendData(EPD_3IN52_lut_R22_DU[count]);
}
EPD_3IN52_SendCommand(0x23); // wb w
for(count = 0; count < 42 ; count++)
{
EPD_3IN52_SendData(EPD_3IN52_lut_R23_DU[count]);
}
EPD_3IN52_Flag = 1;
}
else
{
EPD_3IN52_SendCommand(0x22); // bw r
for(count = 0; count < 56 ; count++)
{
EPD_3IN52_SendData(EPD_3IN52_lut_R23_DU[count]);
}
EPD_3IN52_SendCommand(0x23); // wb w
for(count = 0; count < 42 ; count++)
{
EPD_3IN52_SendData(EPD_3IN52_lut_R22_DU[count]);
}
EPD_3IN52_Flag = 0;
}
}
/******************************************************************************
function : Initialize the e-Paper register
parameter:
******************************************************************************/
void EPD_3IN52_Init(void)
{
EPD_3IN52_Flag = 0;
EPD_3IN52_Reset();
EPD_3IN52_SendCommand(0x00); // panel setting PSR
EPD_3IN52_SendData(0xFF); // RES1 RES0 REG KW/R UD SHL SHD_N RST_N
EPD_3IN52_SendData(0x01); // x x x VCMZ TS_AUTO TIGE NORG VC_LUTZ
EPD_3IN52_SendCommand(0x01); // POWER SETTING PWR
EPD_3IN52_SendData(0x03); // x x x x x x VDS_EN VDG_EN
EPD_3IN52_SendData(0x10); // x x x VCOM_SLWE VGH[3:0] VGH=20V, VGL=-20V
EPD_3IN52_SendData(0x3F); // x x VSH[5:0] VSH = 15V
EPD_3IN52_SendData(0x3F); // x x VSL[5:0] VSL=-15V
EPD_3IN52_SendData(0x03); // OPTEN VDHR[6:0] VHDR=6.4V
// T_VDS_OFF[1:0] 00=1 frame; 01=2 frame; 10=3 frame; 11=4 frame
EPD_3IN52_SendCommand(0x06); // booster soft start BTST
EPD_3IN52_SendData(0x37); // BT_PHA[7:0]
EPD_3IN52_SendData(0x3D); // BT_PHB[7:0]
EPD_3IN52_SendData(0x3D); // x x BT_PHC[5:0]
EPD_3IN52_SendCommand(0x60); // TCON setting TCON
EPD_3IN52_SendData(0x22); // S2G[3:0] G2S[3:0] non-overlap = 12
EPD_3IN52_SendCommand(0x82); // VCOM_DC setting VDCS
EPD_3IN52_SendData(0x07); // x VDCS[6:0] VCOM_DC value= -1.9v 00~3f,0x12=-1.9v
EPD_3IN52_SendCommand(0x30);
EPD_3IN52_SendData(0x09);
EPD_3IN52_SendCommand(0xe3); // power saving PWS
EPD_3IN52_SendData(0x88); // VCOM_W[3:0] SD_W[3:0]
EPD_3IN52_SendCommand(0x61); // resoultion setting
EPD_3IN52_SendData(0xf0); // HRES[7:3] 0 0 0
EPD_3IN52_SendData(0x01); // x x x x x x x VRES[8]
EPD_3IN52_SendData(0x68); // VRES[7:0]
EPD_3IN52_SendCommand(0x50);
EPD_3IN52_SendData(0xB7);
}
void EPD_3IN52_display(UBYTE* picData)
{
UWORD i;
EPD_3IN52_SendCommand(0x13); //Transfer new data
for(i=0;i<(EPD_3IN52_WIDTH*EPD_3IN52_HEIGHT/8);i++)
{
EPD_3IN52_SendData(*picData);
picData++;
}
}
void EPD_3IN52_display_NUM(UBYTE NUM)
{
UWORD row, column;
// UWORD pcnt = 0;
EPD_3IN52_SendCommand(0x13); //Transfer new data
for(column=0; column<EPD_3IN52_HEIGHT; column++)
{
for(row=0; row<EPD_3IN52_WIDTH/8; row++)
{
switch (NUM)
{
case EPD_3IN52_WHITE:
EPD_3IN52_SendData(0xFF);
break;
case EPD_3IN52_BLACK:
EPD_3IN52_SendData(0x00);
break;
case EPD_3IN52_Source_Line:
EPD_3IN52_SendData(0xAA);
break;
case EPD_3IN52_Gate_Line:
if(column%2)
EPD_3IN52_SendData(0xff); //An odd number of Gate line
else
EPD_3IN52_SendData(0x00); //The even line Gate
break;
case EPD_3IN52_Chessboard:
if(row>=(EPD_3IN52_WIDTH/8/2)&&column>=(EPD_3IN52_HEIGHT/2))
EPD_3IN52_SendData(0xff);
else if(row<(EPD_3IN52_WIDTH/8/2)&&column<(EPD_3IN52_HEIGHT/2))
EPD_3IN52_SendData(0xff);
else
EPD_3IN52_SendData(0x00);
break;
case EPD_3IN52_LEFT_BLACK_RIGHT_WHITE:
if(row>=(EPD_3IN52_WIDTH/8/2))
EPD_3IN52_SendData(0xff);
else
EPD_3IN52_SendData(0x00);
break;
case EPD_3IN52_UP_BLACK_DOWN_WHITE:
if(column>=(EPD_3IN52_HEIGHT/2))
EPD_3IN52_SendData(0xFF);
else
EPD_3IN52_SendData(0x00);
break;
case EPD_3IN52_Frame:
if(column==0||column==(EPD_3IN52_HEIGHT-1))
EPD_3IN52_SendData(0x00);
else if(row==0)
EPD_3IN52_SendData(0x7F);
else if(row==(EPD_3IN52_WIDTH/8-1))
EPD_3IN52_SendData(0xFE);
else
EPD_3IN52_SendData(0xFF);
break;
case EPD_3IN52_Crosstalk:
if((row>=(EPD_3IN52_WIDTH/8/3)&&row<=(EPD_3IN52_WIDTH/8/3*2)&&column<=(EPD_3IN52_HEIGHT/3))||(row>=(EPD_3IN52_WIDTH/8/3)&&row<=(EPD_3IN52_WIDTH/8/3*2)&&column>=(EPD_3IN52_HEIGHT/3*2)))
EPD_3IN52_SendData(0x00);
else
EPD_3IN52_SendData(0xFF);
break;
case EPD_3IN52_Image:
//EPD_3IN52_SendData(gImage_1[pcnt++]);
break;
default:
break;
}
}
}
}
/******************************************************************************
function : Clear screen
parameter:
******************************************************************************/
void EPD_3IN52_Clear(void)
{
UWORD i;
EPD_3IN52_SendCommand(0x13); //Transfer new data
for(i=0;i<(EPD_3IN52_WIDTH*EPD_3IN52_HEIGHT/8);i++)
{
EPD_3IN52_SendData(0xFF);
}
EPD_3IN52_lut_GC();
EPD_3IN52_refresh();
}
/******************************************************************************
function : Enter sleep mode
parameter:
******************************************************************************/
void EPD_3IN52_sleep(void)
{
EPD_3IN52_SendCommand(0X07); //deep sleep
EPD_3IN52_SendData(0xA5);
}

View file

@ -0,0 +1,70 @@
/*****************************************************************************
* | File : EPD_3IN52.h
* | Author : Waveshare team
* | Function : 3.52inch e-paper
* | Info :
*----------------
* | This version: V1.0
* | Date : 2022-05-07
* | Info :
* -----------------------------------------------------------------------------
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documnetation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
******************************************************************************/
#ifndef __EPD_3IN52_H_
#define __EPD_3IN52_H_
#include "DEV_Config.h"
// Display resolution
#define EPD_3IN52_WIDTH 240
#define EPD_3IN52_HEIGHT 360
#define LUTGC_TEST //
#define LUTDU_TEST //
#define EPD_3IN52_WHITE 0xFF //
#define EPD_3IN52_BLACK 0x00 //
#define EPD_3IN52_Source_Line 0xAA //
#define EPD_3IN52_Gate_Line 0x55 //
#define EPD_3IN52_UP_BLACK_DOWN_WHITE 0xF0 //
#define EPD_3IN52_LEFT_BLACK_RIGHT_WHITE 0x0F //
#define EPD_3IN52_Frame 0x01 //
#define EPD_3IN52_Crosstalk 0x02 //
#define EPD_3IN52_Chessboard 0x03 //
#define EPD_3IN52_Image 0x04 //
extern unsigned char EPD_3IN52_Flag;
void EPD_3IN52_SendCommand(UBYTE Reg);
void EPD_3IN52_SendData(UBYTE Data);
void EPD_3IN52_refresh(void);
void EPD_3IN52_lut_GC(void);
void EPD_3IN52_lut_DU(void);
void EPD_3IN52_Init(void);
void EPD_3IN52_display(UBYTE* picData);
void EPD_3IN52_display_NUM(UBYTE NUM);
void EPD_3IN52_Clear(void);
void EPD_3IN52_sleep(void);
#endif

View file

@ -0,0 +1,246 @@
/*****************************************************************************
* | File : EPD_7in3g.c
* | Author : Waveshare team
* | Function : 7.3inch e-paper (G)
* | Info :
*----------------
* | This version: V1.0
* | Date : 2022-07-22
* | Info :
* -----------------------------------------------------------------------------
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documnetation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
******************************************************************************/
#include "EPD_7in3g.h"
#include "Debug.h"
/******************************************************************************
function : Software reset
parameter:
******************************************************************************/
static void EPD_7IN3G_Reset(void)
{
DEV_Digital_Write(EPD_RST_PIN, 1);
DEV_Delay_ms(20);
DEV_Digital_Write(EPD_RST_PIN, 0);
DEV_Delay_ms(2);
DEV_Digital_Write(EPD_RST_PIN, 1);
DEV_Delay_ms(20);
}
/******************************************************************************
function : send command
parameter:
Reg : Command register
******************************************************************************/
static void EPD_7IN3G_SendCommand(UBYTE Reg)
{
DEV_Digital_Write(EPD_DC_PIN, 0);
DEV_Digital_Write(EPD_CS_PIN, 0);
DEV_SPI_WriteByte(Reg);
DEV_Digital_Write(EPD_CS_PIN, 1);
}
/******************************************************************************
function : send data
parameter:
Data : Write data
******************************************************************************/
static void EPD_7IN3G_SendData(UBYTE Data)
{
DEV_Digital_Write(EPD_DC_PIN, 1);
DEV_Digital_Write(EPD_CS_PIN, 0);
DEV_SPI_WriteByte(Data);
DEV_Digital_Write(EPD_CS_PIN, 1);
}
/******************************************************************************
function : Wait until the busy_pin goes LOW
parameter:
******************************************************************************/
static void EPD_7IN3G_ReadBusyH(void)
{
Debug("e-Paper busy H\r\n");
while(!DEV_Digital_Read(EPD_BUSY_PIN)) { //LOW: idle, HIGH: busy
DEV_Delay_ms(5);
}
Debug("e-Paper busy H release\r\n");
}
static void EPD_7IN3G_ReadBusyL(void)
{
Debug("e-Paper busy L\r\n");
while(DEV_Digital_Read(EPD_BUSY_PIN)) { //LOW: idle, HIGH: busy
DEV_Delay_ms(5);
}
Debug("e-Paper busy L release\r\n");
}
/******************************************************************************
function : Turn On Display
parameter:
******************************************************************************/
static void EPD_7IN3G_TurnOnDisplay(void)
{
EPD_7IN3G_SendCommand(0x12); // DISPLAY_REFRESH
EPD_7IN3G_SendData(0x00);
EPD_7IN3G_ReadBusyH();
EPD_7IN3G_SendCommand(0x02); // POWER_OFF
EPD_7IN3G_SendData(0X00);
EPD_7IN3G_ReadBusyH();
}
/******************************************************************************
function : Initialize the e-Paper register
parameter:
******************************************************************************/
void EPD_7IN3G_Init(void)
{
EPD_7IN3G_Reset();
EPD_7IN3G_ReadBusyH();
DEV_Delay_ms(30);
EPD_7IN3G_SendCommand(0xAA);
EPD_7IN3G_SendData(0x49);
EPD_7IN3G_SendData(0x55);
EPD_7IN3G_SendData(0x20);
EPD_7IN3G_SendData(0x08);
EPD_7IN3G_SendData(0x09);
EPD_7IN3G_SendData(0x18);
EPD_7IN3G_SendCommand(0x01);
EPD_7IN3G_SendData(0x3F);
EPD_7IN3G_SendCommand(0x00);
EPD_7IN3G_SendData(0x4F);
EPD_7IN3G_SendData(0x69);
EPD_7IN3G_SendCommand(0x05);
EPD_7IN3G_SendData(0x40);
EPD_7IN3G_SendData(0x1F);
EPD_7IN3G_SendData(0x1F);
EPD_7IN3G_SendData(0x2C);
EPD_7IN3G_SendCommand(0x08);
EPD_7IN3G_SendData(0x6F);
EPD_7IN3G_SendData(0x1F);
EPD_7IN3G_SendData(0x1F);
EPD_7IN3G_SendData(0x22);
//===================
//20211212
//First setting
EPD_7IN3G_SendCommand(0x06);
EPD_7IN3G_SendData(0x6F);
EPD_7IN3G_SendData(0x1F);
EPD_7IN3G_SendData(0x14);
EPD_7IN3G_SendData(0x14);
//===================
EPD_7IN3G_SendCommand(0x03);
EPD_7IN3G_SendData(0x00);
EPD_7IN3G_SendData(0x54);
EPD_7IN3G_SendData(0x00);
EPD_7IN3G_SendData(0x44);
EPD_7IN3G_SendCommand(0x60);
EPD_7IN3G_SendData(0x02);
EPD_7IN3G_SendData(0x00);
//Please notice that PLL must be set for version 2 IC
EPD_7IN3G_SendCommand(0x30);
EPD_7IN3G_SendData(0x08);
EPD_7IN3G_SendCommand(0x50);
EPD_7IN3G_SendData(0x3F);
EPD_7IN3G_SendCommand(0x61);
EPD_7IN3G_SendData(0x03);
EPD_7IN3G_SendData(0x20);
EPD_7IN3G_SendData(0x01);
EPD_7IN3G_SendData(0xE0);
EPD_7IN3G_SendCommand(0xE3);
EPD_7IN3G_SendData(0x2F);
EPD_7IN3G_SendCommand(0x84);
EPD_7IN3G_SendData(0x01);
}
/******************************************************************************
function : Clear screen
parameter:
******************************************************************************/
void EPD_7IN3G_Clear(UBYTE color)
{
UWORD Width, Height;
Width = (EPD_7IN3G_WIDTH % 4 == 0)? (EPD_7IN3G_WIDTH / 4 ): (EPD_7IN3G_WIDTH / 4 + 1);
Height = EPD_7IN3G_HEIGHT;
EPD_7IN3G_SendCommand(0x04);
EPD_7IN3G_ReadBusyH();
EPD_7IN3G_SendCommand(0x10);
for (UWORD j = 0; j < Height; j++) {
for (UWORD i = 0; i < Width; i++) {
EPD_7IN3G_SendData(color);
}
}
EPD_7IN3G_TurnOnDisplay();
}
/******************************************************************************
function : Sends the image buffer in RAM to e-Paper and displays
parameter:
******************************************************************************/
void EPD_7IN3G_Display(UBYTE *Image)
{
UWORD Width, Height;
Width = (EPD_7IN3G_WIDTH % 4 == 0)? (EPD_7IN3G_WIDTH / 4 ): (EPD_7IN3G_WIDTH / 4 + 1);
Height = EPD_7IN3G_HEIGHT;
EPD_7IN3G_SendCommand(0x04);
EPD_7IN3G_ReadBusyH();
EPD_7IN3G_SendCommand(0x10);
for (UWORD j = 0; j < Height; j++) {
for (UWORD i = 0; i < Width; i++) {
EPD_7IN3G_SendData(Image[i + j * Width]);
}
}
EPD_7IN3G_TurnOnDisplay();
}
/******************************************************************************
function : Enter sleep mode
parameter:
******************************************************************************/
void EPD_7IN3G_Sleep(void)
{
EPD_7IN3G_SendCommand(0x02); // POWER_OFF
EPD_7IN3G_SendData(0X00);
EPD_7IN3G_SendCommand(0x07); // DEEP_SLEEP
EPD_7IN3G_SendData(0XA5);
}

View file

@ -0,0 +1,52 @@
/*****************************************************************************
* | File : EPD_7in3g.h
* | Author : Waveshare team
* | Function : 7.3inchg e-paper (G)
* | Info :
*----------------
* | This version: V1.0
* | Date : 2022-07-22
* | Info :
* -----------------------------------------------------------------------------
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documnetation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
******************************************************************************/
#ifndef __EPD_7IN3G_H_
#define __EPD_7IN3G_H_
#include "DEV_Config.h"
// Display resolution
#define EPD_7IN3G_WIDTH 800
#define EPD_7IN3G_HEIGHT 480
//colour
#define EPD_7IN3G_BLACK 0x00
#define EPD_7IN3G_WHITE 0x55
#define EPD_7IN3G_YELLOW 0xAA
#define EPD_7IN3G_RED 0xFF
void EPD_7IN3G_Init(void);
void EPD_7IN3G_Clear(UBYTE color);
void EPD_7IN3G_Display(UBYTE *Image);
void EPD_7IN3G_Sleep(void);
#endif

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

View file

@ -0,0 +1,74 @@
#!/usr/bin/python
# -*- coding:utf-8 -*-
import sys
import os
picdir = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'pic')
libdir = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'lib')
if os.path.exists(libdir):
sys.path.append(libdir)
import logging
from waveshare_epd import epd1in64g
import time
from PIL import Image,ImageDraw,ImageFont
import traceback
logging.basicConfig(level=logging.DEBUG)
try:
logging.info("epd1in64g Demo")
BLACK = 0x00
WHITE = 0x55
YELLOW = 0xAA
RED = 0xFF
epd = epd1in64g.EPD()
logging.info("init and Clear")
epd.init()
epd.Clear(WHITE)
font24 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 24)
font18 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 18)
font30 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 40)
# Drawing on the image
logging.info("1.Drawing on the image...")
Himage = Image.new('RGB', (epd.width, epd.height), 0xffffff)
draw = ImageDraw.Draw(Himage)
draw.text((5, 0), 'hello world', font = font18, fill = epd.RED)
draw.text((5, 20), '1.64inch e-Paper', font = font18, fill = epd.YELLOW)
draw.text((5, 40), u'微雪电子', font = font30, fill = epd.BLACK)
draw.line((5, 90, 45, 160), fill = epd.RED)
draw.line((45, 90, 5, 160), fill = epd.YELLOW)
draw.rectangle((5, 90, 45, 160), outline = epd.BLACK)
draw.rectangle((55, 90, 95, 160), fill = epd.BLACK)
draw.arc((115, 90, 150, 125), 0, 360, fill = epd.BLACK)
draw.chord((115, 130, 150, 165), 0, 360, fill = epd.BLACK)
epd.display(epd.getbuffer(Himage))
time.sleep(3)
# read bmp file
logging.info("3.read bmp file")
Himage = Image.open(os.path.join(picdir, '1.64inch-1.bmp'))
epd.display(epd.getbuffer(Himage))
time.sleep(3)
logging.info("3.read bmp file")
Himage = Image.open(os.path.join(picdir, '1.64inch-2.bmp'))
epd.display(epd.getbuffer(Himage))
time.sleep(3)
logging.info("Clear...")
epd.Clear(WHITE)
logging.info("Goto Sleep...")
epd.sleep()
except IOError as e:
logging.info(e)
except KeyboardInterrupt:
logging.info("ctrl + c:")
epd1in64g.epdconfig.module_exit()
exit()

View file

@ -0,0 +1,105 @@
#!/usr/bin/python
# -*- coding:utf-8 -*-
import sys
import os
picdir = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'pic')
libdir = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'lib')
if os.path.exists(libdir):
sys.path.append(libdir)
import logging
from waveshare_epd import epd3in0g
import time
from PIL import Image,ImageDraw,ImageFont
import traceback
logging.basicConfig(level=logging.DEBUG)
try:
logging.info("epd3in0g Demo")
BLACK = 0x00
WHITE = 0x55
YELLOW = 0xAA
RED = 0xFF
epd = epd3in0g.EPD()
logging.info("init and Clear")
epd.init()
epd.Clear(WHITE)
font24 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 24)
font18 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 18)
font30 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 40)
# Drawing on the image
epd.init()
logging.info("1.Drawing on the image...")
Himage = Image.new('RGB', (epd.width, epd.height), 0xffffff)
draw = ImageDraw.Draw(Himage)
draw.text((5, 0), 'hello world', font = font18, fill = epd.RED)
draw.text((5, 20), '3inch e-Paper', font = font24, fill = epd.YELLOW)
draw.text((5, 45), u'微雪电子', font = font30, fill = epd.BLACK)
draw.text((5, 85), u'微雪电子', font = font30, fill = epd.YELLOW)
draw.text((5, 125), u'微雪电子', font = font30, fill = epd.RED)
draw.line((5, 170, 80, 245), fill = epd.RED)
draw.line((80, 170, 5, 245), fill = epd.YELLOW)
draw.rectangle((5, 170, 80, 245), outline = epd.BLACK)
draw.rectangle((90, 170, 165, 245), fill = epd.YELLOW)
draw.arc((5, 250, 80, 325), 0, 360, fill = epd.BLACK)
draw.chord((90, 250, 165, 325), 0, 360, fill = epd.RED)
epd.display(epd.getbuffer(Himage))
time.sleep(3)
# Switch width and height for landscape display
epd.init()
logging.info("1.Drawing on the image...")
Himage = Image.new('RGB', (epd.height, epd.width), 0xffffff)
draw = ImageDraw.Draw(Himage)
draw.text((5, 0), 'hello world', font = font18, fill = epd.RED)
draw.text((5, 20), '3inch e-Paper', font = font24, fill = epd.YELLOW)
draw.text((5, 45), u'微雪电子', font = font30, fill = epd.BLACK)
draw.text((5, 85), u'微雪电子', font = font30, fill = epd.YELLOW)
draw.text((5, 125), u'微雪电子', font = font30, fill = epd.RED)
draw.line((205, 5, 295, 65), fill = epd.RED)
draw.line((295, 5, 205, 65), fill = epd.YELLOW)
draw.rectangle((205, 5, 295, 65), outline = epd.BLACK)
draw.rectangle((305, 5, 395, 65), fill = epd.RED)
draw.arc((205, 75, 295, 165), 0, 360, fill = epd.BLACK)
draw.chord((305, 75, 395, 165), 0, 360, fill = epd.YELLOW)
epd.display(epd.getbuffer(Himage))
time.sleep(3)
# read bmp file
epd.init()
logging.info("3.read bmp file")
Himage = Image.open(os.path.join(picdir, '3inch-1.bmp'))
epd.display(epd.getbuffer(Himage))
time.sleep(3)
epd.init()
logging.info("3.read bmp file")
Himage = Image.open(os.path.join(picdir, '3inch-2.bmp'))
epd.display(epd.getbuffer(Himage))
time.sleep(3)
epd.init()
logging.info("3.read bmp file")
Himage = Image.open(os.path.join(picdir, '3inch-3.bmp'))
epd.display(epd.getbuffer(Himage))
time.sleep(3)
epd.init()
logging.info("Clear...")
epd.Clear(WHITE)
logging.info("Goto Sleep...")
epd.sleep()
except IOError as e:
logging.info(e)
except KeyboardInterrupt:
logging.info("ctrl + c:")
epd3in0g.epdconfig.module_exit()
exit()

View file

@ -0,0 +1,119 @@
#!/usr/bin/python
# -*- coding:utf-8 -*-
import sys
import os
picdir = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'pic')
libdir = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'lib')
if os.path.exists(libdir):
sys.path.append(libdir)
import logging
from waveshare_epd import epd3in52
import time
from PIL import Image,ImageDraw,ImageFont
import traceback
logging.basicConfig(level=logging.DEBUG)
try:
logging.info("epd2in9 Demo")
epd = epd3in52.EPD()
logging.info("init and Clear")
epd.init()
epd.display_NUM(epd.WHITE)
epd.lut_GC()
epd.refresh()
epd.send_command(0x50)
epd.send_data(0x17)
time.sleep(2)
font24 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 24)
font18 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 18)
font30 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 40)
# Drawing on the Horizontal image
logging.info("1.Drawing on the Horizontal image...")
Himage = Image.new('1', (epd.height, epd.width), 255) # 255: clear the frame
draw = ImageDraw.Draw(Himage)
draw.text((10, 0), 'hello world', font = font24, fill = 0)
draw.text((10, 20), '3.52inch e-Paper', font = font24, fill = 0)
draw.text((150, 0), u'微雪电子', font = font24, fill = 0)
draw.line((20, 50, 70, 100), fill = 0)
draw.line((70, 50, 20, 100), fill = 0)
draw.rectangle((20, 50, 70, 100), outline = 0)
draw.line((165, 50, 165, 100), fill = 0)
draw.line((140, 75, 190, 75), fill = 0)
draw.arc((140, 50, 190, 100), 0, 360, fill = 0)
draw.rectangle((80, 50, 130, 100), fill = 0)
draw.chord((200, 50, 250, 100), 0, 360, fill = 0)
epd.display(epd.getbuffer(Himage))
epd.lut_GC()
epd.refresh()
time.sleep(2)
# Drawing on the Vertical image
logging.info("2.Drawing on the Vertical image...")
Limage = Image.new('1', (epd.width, epd.height), 255) # 255: clear the frame
draw = ImageDraw.Draw(Limage)
draw.text((2, 0), 'hello world', font = font18, fill = 0)
draw.text((2, 20), '3.52inch e-Paper', font = font18, fill = 0)
draw.text((20, 50), u'微雪电子', font = font18, fill = 0)
draw.line((10, 90, 60, 140), fill = 0)
draw.line((60, 90, 10, 140), fill = 0)
draw.rectangle((10, 90, 60, 140), outline = 0)
draw.line((95, 90, 95, 140), fill = 0)
draw.line((70, 115, 120, 115), fill = 0)
draw.arc((70, 90, 120, 140), 0, 360, fill = 0)
draw.rectangle((10, 150, 60, 200), fill = 0)
draw.chord((70, 150, 120, 200), 0, 360, fill = 0)
epd.display(epd.getbuffer(Limage))
epd.lut_GC()
epd.refresh()
time.sleep(2)
logging.info("3.read bmp file")
Himage = Image.open(os.path.join(picdir, '3in52-1.bmp'))
epd.display(epd.getbuffer(Himage))
epd.lut_GC()
epd.refresh()
time.sleep(2)
logging.info("4.read bmp file on window")
Himage2 = Image.new('1', (epd.height, epd.width), 255) # 255: clear the frame
bmp = Image.open(os.path.join(picdir, '100x100.bmp'))
Himage2.paste(bmp, (50,10))
epd.display(epd.getbuffer(Himage2))
epd.lut_GC()
epd.refresh()
time.sleep(2)
# print("Quick refresh is supported, but the refresh effect is not good, but it is not recommended")
# Himage = Image.open(os.path.join(picdir, '3in52-2.bmp'))
# epd.display(epd.getbuffer(Himage))
# epd.lut_DU()
# epd.refresh()
# time.sleep(2)
# Himage = Image.open(os.path.join(picdir, '3in52-3.bmp'))
# epd.display(epd.getbuffer(Himage))
# epd.lut_DU()
# epd.refresh()
# time.sleep(2)
logging.info("Clear...")
epd.Clear()
logging.info("Goto Sleep...")
epd.sleep()
except IOError as e:
logging.info(e)
except KeyboardInterrupt:
logging.info("ctrl + c:")
epd3in52.epdconfig.module_exit()
exit()

View file

@ -0,0 +1,81 @@
#!/usr/bin/python
# -*- coding:utf-8 -*-
import sys
import os
picdir = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'pic')
libdir = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'lib')
if os.path.exists(libdir):
sys.path.append(libdir)
import logging
from waveshare_epd import epd7in3g
import time
from PIL import Image,ImageDraw,ImageFont
import traceback
logging.basicConfig(level=logging.DEBUG)
try:
logging.info("epd1in64g Demo")
BLACK = 0x00
WHITE = 0x55
YELLOW = 0xAA
RED = 0xFF
epd = epd7in3g.EPD()
logging.info("init and Clear")
epd.init()
epd.Clear(WHITE)
font24 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 24)
font18 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 18)
font30 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 40)
# Drawing on the image
logging.info("1.Drawing on the image...")
Himage = Image.new('RGB', (epd.width, epd.height), 0xffffff) # 255: clear the frame
draw = ImageDraw.Draw(Himage)
draw.text((5, 0), 'hello world', font = font18, fill = epd.RED)
draw.text((5, 20), '7.3inch e-Paper', font = font24, fill = epd.YELLOW)
draw.text((5, 45), u'微雪电子', font = font30, fill = epd.BLACK)
draw.text((5, 85), u'微雪电子', font = font30, fill = epd.YELLOW)
draw.text((5, 125), u'微雪电子', font = font30, fill = epd.RED)
draw.line((5, 170, 80, 245), fill = epd.RED)
draw.line((80, 170, 5, 245), fill = epd.YELLOW)
draw.rectangle((5, 170, 80, 245), outline = epd.BLACK)
draw.rectangle((90, 170, 165, 245), fill = epd.YELLOW)
draw.arc((5, 250, 80, 325), 0, 360, fill = epd.BLACK)
draw.chord((90, 250, 165, 325), 0, 360, fill = epd.RED)
epd.display(epd.getbuffer(Himage))
time.sleep(3)
# read bmp file
logging.info("3.read bmp file")
Himage = Image.open(os.path.join(picdir, '7.3inch-1.bmp'))
epd.display(epd.getbuffer(Himage))
time.sleep(3)
logging.info("3.read bmp file")
Himage = Image.open(os.path.join(picdir, '7.3inch-2.bmp'))
epd.display(epd.getbuffer(Himage))
time.sleep(3)
logging.info("3.read bmp file")
Himage = Image.open(os.path.join(picdir, '7.3inch-3.bmp'))
epd.display(epd.getbuffer(Himage))
time.sleep(3)
logging.info("Clear...")
epd.Clear(WHITE)
logging.info("Goto Sleep...")
epd.sleep()
except IOError as e:
logging.info(e)
except KeyboardInterrupt:
logging.info("ctrl + c:")
epd7in3g.epdconfig.module_exit()
exit()

View file

@ -0,0 +1,242 @@
# *****************************************************************************
# * | File : epd1in64g.py
# * | Author : Waveshare team
# * | Function : Electronic paper driver
# * | Info :
# *----------------
# * | This version: V1
# * | Date : 2022-07-20
# # | Info : python demo
# -----------------------------------------------------------------------------
# ******************************************************************************/
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documnetation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
import logging
from . import epdconfig
import PIL
from PIL import Image
import io
# Display resolution
EPD_WIDTH = 168
EPD_HEIGHT = 168
logger = logging.getLogger(__name__)
class EPD:
def __init__(self):
self.reset_pin = epdconfig.RST_PIN
self.dc_pin = epdconfig.DC_PIN
self.busy_pin = epdconfig.BUSY_PIN
self.cs_pin = epdconfig.CS_PIN
self.width = EPD_WIDTH
self.height = EPD_HEIGHT
self.BLACK = 0x000000 # 00 BGR
self.WHITE = 0xffffff # 01
self.YELLOW = 0x00ffff # 10
self.RED = 0x0000ff # 11
# Hardware reset
def reset(self):
epdconfig.digital_write(self.reset_pin, 1)
epdconfig.delay_ms(200)
epdconfig.digital_write(self.reset_pin, 0) # module reset
epdconfig.delay_ms(2)
epdconfig.digital_write(self.reset_pin, 1)
epdconfig.delay_ms(200)
def send_command(self, command):
epdconfig.digital_write(self.dc_pin, 0)
epdconfig.digital_write(self.cs_pin, 0)
epdconfig.spi_writebyte([command])
epdconfig.digital_write(self.cs_pin, 1)
def send_data(self, data):
epdconfig.digital_write(self.dc_pin, 1)
epdconfig.digital_write(self.cs_pin, 0)
epdconfig.spi_writebyte([data])
epdconfig.digital_write(self.cs_pin, 1)
def ReadBusyH(self):
logger.debug("e-Paper busy H")
while(epdconfig.digital_read(self.busy_pin) == 0): # 0: idle, 1: busy
epdconfig.delay_ms(5)
logger.debug("e-Paper busy H release")
def ReadBusyL(self):
logger.debug("e-Paper busy L")
while(epdconfig.digital_read(self.busy_pin) == 1): # 0: busy, 1: idle
epdconfig.delay_ms(5)
logger.debug("e-Paper busy L release")
def TurnOnDisplay(self):
self.send_command(0x12) # DISPLAY_REFRESH
self.send_data(0x01)
self.ReadBusyH()
self.send_command(0x02) # POWER_OFF
self.send_data(0X00)
self.ReadBusyH()
def init(self):
if (epdconfig.module_init() != 0):
return -1
# EPD hardware init start
self.reset()
self.send_command(0x66)
self.send_data(0x49)
self.send_data(0x55)
self.send_data(0x13)
self.send_data(0x5D)
self.send_command(0x66)
self.send_data(0x49)
self.send_data(0x55)
self.send_command(0xB0)
self.send_data(0x03)
self.send_command(0x00)
self.send_data(0x4F)
self.send_data(0x6B)
self.send_command(0x03)
self.send_data(0x00)
self.send_command(0xF0)
self.send_data(0xF6)
self.send_data(0x0D)
self.send_data(0x00)
self.send_data(0x00)
self.send_data(0x00)
self.send_command(0x06)
self.send_data(0xCF)
self.send_data(0xDF)
self.send_data(0x0F)
self.send_command(0x41)
self.send_data(0x00)
self.send_command(0x50)
self.send_data(0x30)
self.send_command(0x60)
self.send_data(0x0C)
self.send_data(0x05)
self.send_command(0x61)
self.send_data(0xA8)
self.send_data(0x00)
self.send_data(0xA8)
self.send_command(0x84)
self.send_data(0x01)
return 0
def getbuffer(self, image):
# Create a pallette with the 4 colors supported by the panel
pal_image = Image.new("P", (1,1))
pal_image.putpalette( (0,0,0, 255,255,255, 255,255,0, 255,0,0) + (0,0,0)*252)
# Check if we need to rotate the image
imwidth, imheight = image.size
if(imwidth == self.width and imheight == self.height):
image_temp = image
elif(imwidth == self.height and imheight == self.width):
image_temp = image.rotate(90, expand=True)
else:
logger.warning("Invalid image dimensions: %d x %d, expected %d x %d" % (imwidth, imheight, self.width, self.height))
# Convert the soruce image to the 4 colors, dithering if needed
image_4color = image_temp.convert("RGB").quantize(palette=pal_image)
buf_4color = bytearray(image_4color.tobytes('raw'))
# into a single byte to transfer to the panel
buf = [0x00] * int(self.width * self.height / 4)
idx = 0
for i in range(0, len(buf_4color), 4):
buf[idx] = (buf_4color[i] << 6) + (buf_4color[i+1] << 4) + (buf_4color[i+2] << 2) + buf_4color[i+3]
idx += 1
return buf
def display(self, image):
if self.width % 4 == 0 :
Width = self.width // 4
else :
Width = self.width // 4 + 1
Height = self.height
self.send_command(0x68)
self.send_data(0x01)
self.send_command(0x04)
self.ReadBusyH()
self.send_command(0x10)
for j in range(0, Height):
for i in range(0, Width):
self.send_data(image[i + j * Width])
self.TurnOnDisplay()
def Clear(self, color):
if self.width % 4 == 0 :
Width = self.width // 4
else :
Width = self.width // 4 + 1
Height = self.height
self.send_command(0x68)
self.send_data(0x01)
self.send_command(0x04)
self.ReadBusyH()
self.send_command(0x10)
for j in range(0, Height):
for i in range(0, Width):
for k in range(0, 4):
self.send_data(color)
self.send_command(0x68)
self.send_data(0x00)
self.TurnOnDisplay()
def sleep(self):
self.send_command(0x02) # POWER_OFF
self.send_data(0x00)
self.send_command(0x07) # DEEP_SLEEP
self.send_data(0XA5)
epdconfig.delay_ms(2000)
epdconfig.module_exit()
### END OF FILE ###

View file

@ -0,0 +1,236 @@
# *****************************************************************************
# * | File : epd3in0g.py
# * | Author : Waveshare team
# * | Function : Electronic paper driver
# * | Info :
# *----------------
# * | This version: V1
# * | Date : 2022-07-20
# # | Info : python demo
# -----------------------------------------------------------------------------
# ******************************************************************************/
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documnetation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
import logging
from . import epdconfig
import PIL
from PIL import Image
import io
# Display resolution
EPD_WIDTH = 168
EPD_HEIGHT = 400
logger = logging.getLogger(__name__)
class EPD:
def __init__(self):
self.reset_pin = epdconfig.RST_PIN
self.dc_pin = epdconfig.DC_PIN
self.busy_pin = epdconfig.BUSY_PIN
self.cs_pin = epdconfig.CS_PIN
self.width = EPD_WIDTH
self.height = EPD_HEIGHT
self.BLACK = 0x000000 # 00 BGR
self.WHITE = 0xffffff # 01
self.YELLOW = 0x00ffff # 10
self.RED = 0x0000ff # 11
# Hardware reset
def reset(self):
epdconfig.digital_write(self.reset_pin, 1)
epdconfig.delay_ms(200)
epdconfig.digital_write(self.reset_pin, 0) # module reset
epdconfig.delay_ms(2)
epdconfig.digital_write(self.reset_pin, 1)
epdconfig.delay_ms(200)
def send_command(self, command):
epdconfig.digital_write(self.dc_pin, 0)
epdconfig.digital_write(self.cs_pin, 0)
epdconfig.spi_writebyte([command])
epdconfig.digital_write(self.cs_pin, 1)
def send_data(self, data):
epdconfig.digital_write(self.dc_pin, 1)
epdconfig.digital_write(self.cs_pin, 0)
epdconfig.spi_writebyte([data])
epdconfig.digital_write(self.cs_pin, 1)
def ReadBusyH(self):
logger.debug("e-Paper busy H")
while(epdconfig.digital_read(self.busy_pin) == 0): # 0: idle, 1: busy
epdconfig.delay_ms(5)
logger.debug("e-Paper busy H release")
def ReadBusyL(self):
logger.debug("e-Paper busy L")
while(epdconfig.digital_read(self.busy_pin) == 1): # 0: busy, 1: idle
epdconfig.delay_ms(5)
logger.debug("e-Paper busy L release")
def TurnOnDisplay(self):
self.send_command(0x12) # DISPLAY_REFRESH
self.send_data(0x01)
self.ReadBusyH()
self.send_command(0x02) # POWER_OFF
self.send_data(0X00)
self.ReadBusyH()
def init(self):
if (epdconfig.module_init() != 0):
return -1
# EPD hardware init start
self.reset()
self.send_command(0x66)
self.send_data(0x49)
self.send_data(0x55)
self.send_data(0x13)
self.send_data(0x5D)
self.send_data(0x05)
self.send_data(0x10)
self.send_command(0xB0)
self.send_data(0x00) # 1 boost
self.send_command(0x01)
self.send_data(0x0F)
self.send_data(0x00)
self.send_command(0x00)
self.send_data(0x4F)
self.send_data(0x6B)
self.send_command(0x06)
self.send_data(0xD7)
self.send_data(0xDE)
self.send_data(0x12)
self.send_command(0x61)
self.send_data(0x00)
self.send_data(0xA8)
self.send_data(0x01)
self.send_data(0x90)
self.send_command(0x50)
self.send_data(0x37)
self.send_command(0x60)
self.send_data(0x0C)
self.send_data(0x05)
self.send_command(0xE3)
self.send_data(0xFF)
self.send_command(0x84)
self.send_data(0x00)
return 0
def getbuffer(self, image):
# Create a pallette with the 4 colors supported by the panel
pal_image = Image.new("P", (1,1))
pal_image.putpalette( (0,0,0, 255,255,255, 255,255,0, 255,0,0) + (0,0,0)*252)
# Check if we need to rotate the image
imwidth, imheight = image.size
if(imwidth == self.width and imheight == self.height):
image_temp = image
elif(imwidth == self.height and imheight == self.width):
image_temp = image.rotate(90, expand=True)
else:
logger.warning("Invalid image dimensions: %d x %d, expected %d x %d" % (imwidth, imheight, self.width, self.height))
# Convert the soruce image to the 7 colors, dithering if needed
image_4color = image_temp.convert("RGB").quantize(palette=pal_image)
buf_4color = bytearray(image_4color.tobytes('raw'))
# into a single byte to transfer to the panel
buf = [0x00] * int(self.width * self.height / 4)
idx = 0
for i in range(0, len(buf_4color), 4):
buf[idx] = (buf_4color[i] << 6) + (buf_4color[i+1] << 4) + (buf_4color[i+2] << 2) + buf_4color[i+3]
idx += 1
return buf
def display(self, image):
if self.width % 4 == 0 :
Width = self.width // 4
else :
Width = self.width // 4 + 1
Height = self.height
self.send_command(0x68)
self.send_data(0x01)
self.send_command(0x04)
self.ReadBusyH()
self.send_command(0x10)
for j in range(0, Height):
for i in range(0, Width):
self.send_data(image[i + j * Width])
self.TurnOnDisplay()
def Clear(self, color):
if self.width % 4 == 0 :
Width = self.width // 4
else :
Width = self.width // 4 + 1
Height = self.height
self.send_command(0x68)
self.send_data(0x01)
self.send_command(0x04)
self.ReadBusyH()
self.send_command(0x10)
for j in range(0, Height):
for i in range(0, Width):
for k in range(0, 4):
self.send_data(color)
self.send_command(0x68)
self.send_data(0x00)
self.TurnOnDisplay()
def sleep(self):
self.send_command(0x02) # POWER_OFF
self.send_data(0x00)
self.send_command(0x07) # DEEP_SLEEP
self.send_data(0XA5)
epdconfig.delay_ms(2000)
epdconfig.module_exit()
### END OF FILE ###

View file

@ -0,0 +1,473 @@
# *****************************************************************************
# * | File : epd3in52.py
# * | Author : Waveshare team
# * | Function : Electronic paper driver
# * | Info :
# *----------------
# * | This version: V1.0
# * | Date : 2022-07-20
# # | Info : python demo
# -----------------------------------------------------------------------------
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documnetation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
import logging
from multiprocessing.reduction import recv_handle
from . import epdconfig
# Display resolution
EPD_width = 240
EPD_height = 360
logger = logging.getLogger(__name__)
class EPD:
def __init__(self):
self.reset_pin = epdconfig.RST_PIN
self.dc_pin = epdconfig.DC_PIN
self.busy_pin = epdconfig.BUSY_PIN
self.cs_pin = epdconfig.CS_PIN
self.width = EPD_width
self.height = EPD_height
self.Flag = 0
self.WHITE = 0xFF
self.BLACK = 0x00
self.Source_Line = 0xAA
self.Gate_Line = 0x55
self.UP_BLACK_DOWN_WHITE = 0xF0
self.LEFT_BLACK_RIGHT_WHITE = 0x0F
self.Frame = 0x01
self.Crosstalk = 0x02
self.Chessboard = 0x03
self.Image = 0x04
# GC 0.9S
lut_R20_GC = [
0x01,0x0f,0x0f,0x0f,0x01,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
]
lut_R21_GC = [
0x01,0x4f,0x8f,0x0f,0x01,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
]
lut_R22_GC = [
0x01,0x0f,0x8f,0x0f,0x01,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
]
lut_R23_GC = [
0x01,0x4f,0x8f,0x4f,0x01,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
]
lut_R24_GC = [
0x01,0x0f,0x8f,0x4f,0x01,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
]
# DU 0.3s
lut_R20_DU = [
0x01,0x0f,0x01,0x00,0x00,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
]
lut_R21_DU = [
0x01,0x0f,0x01,0x00,0x00,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
]
lut_R22_DU = [
0x01,0x8f,0x01,0x00,0x00,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
]
lut_R23_DU = [
0x01,0x4f,0x01,0x00,0x00,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
]
lut_R24_DU = [
0x01,0x0f,0x01,0x00,0x00,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
]
lut_vcom = [
0x01,0x19,0x19,0x19,0x19,0x01,0x01,
0x01,0x19,0x19,0x19,0x01,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
]
lut_ww = [
0x01,0x59,0x99,0x59,0x99,0x01,0x01,
0x01,0x59,0x99,0x19,0x01,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
]
lut_bw = [
0x01,0x59,0x99,0x59,0x99,0x01,0x01,
0x01,0x59,0x99,0x19,0x01,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
]
lut_wb = [
0x01,0x19,0x99,0x59,0x99,0x01,0x01,
0x01,0x59,0x99,0x59,0x01,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
]
lut_bb = [
0x01,0x19,0x99,0x59,0x99,0x01,0x01,
0x01,0x59,0x99,0x59,0x01,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00
]
# Hardware reset
def reset(self):
epdconfig.digital_write(self.reset_pin, 1)
epdconfig.delay_ms(200)
epdconfig.digital_write(self.reset_pin, 0)
epdconfig.delay_ms(5)
epdconfig.digital_write(self.reset_pin, 1)
epdconfig.delay_ms(200)
def send_command(self, command):
epdconfig.digital_write(self.dc_pin, 0)
epdconfig.digital_write(self.cs_pin, 0)
epdconfig.spi_writebyte([command])
epdconfig.digital_write(self.cs_pin, 1)
def send_data(self, data):
epdconfig.digital_write(self.dc_pin, 1)
epdconfig.digital_write(self.cs_pin, 0)
epdconfig.spi_writebyte([data])
epdconfig.digital_write(self.cs_pin, 1)
def ReadBusy(self):
logger.debug("e-Paper busy")
while(epdconfig.digital_read(self.busy_pin) == 0): # 0: busy, 1: idle
epdconfig.delay_ms(5)
logger.debug("e-Paper busy release")
def lut(self) :
self.send_command(0x20) # vcom
for count in range(0 ,42):
self.send_data(self.lut_vcom[count])
self.send_command(0x21) # ww --
for count in range(0 ,42):
self.send_data(self.lut_ww[count])
self.send_command(0x22) # bw r
for count in range(0 ,42):
self.send_data(self.lut_bw[count])
self.send_command(0x23) # wb w
for count in range(0 ,42):
self.send_data(self.lut_bb[count])
self.send_command(0x24) # bb b
for count in range(0 ,42):
self.send_data(self.lut_wb[count])
def refresh(self):
self.send_command(0x17)
self.send_data(0xA5)
self.ReadBusy()
epdconfig.delay_ms(200)
# LUT download
def lut_GC(self):
self.send_command(0x20); # vcom
for count in range(0 ,56):
self.send_data(self.lut_R20_GC[count])
self.send_command(0x21); # red not use
for count in range(0 ,42):
self.send_data(self.lut_R21_GC[count])
self.send_command(0x24); # bb b
for count in range(0 ,42):
self.send_data(self.lut_R24_GC[count])
if(self.Flag == 0) :
self.send_command(0x22); # bw r
for count in range(0 ,56):
self.send_data(self.lut_R22_GC[count])
self.send_command(0x23); # wb w
for count in range(0 ,42):
self.send_data(self.lut_R23_GC[count])
self.Flag = 1
else :
self.send_command(0x22); # bw r
for count in range(0 ,56):
self.send_data(self.lut_R23_GC[count])
self.send_command(0x23); # wb w
for count in range(0 ,42):
self.send_data(self.lut_R22_GC[count])
self.Flag = 0
# LUT download
def lut_DU(self):
self.send_command(0x20); # vcom
for count in range(0 ,56):
self.send_data(self.lut_R20_DU[count])
self.send_command(0x21); # red not use
for count in range(0 ,42):
self.send_data(self.lut_R21_DU[count])
self.send_command(0x24); # bb b
for count in range(0 ,42):
self.send_data(self.lut_R24_DU[count])
if(self.Flag == 0) :
self.send_command(0x22); # bw r
for count in range(0 ,56):
self.send_data(self.lut_R22_DU[count])
self.send_command(0x23); # wb w
for count in range(0 ,42):
self.send_data(self.lut_R23_DU[count])
self.Flag = 1
else :
self.send_command(0x22); # bw r
for count in range(0 ,56):
self.send_data(self.lut_R23_DU[count])
self.send_command(0x23); # wb w
for count in range(0 ,42):
self.send_data(self.lut_R22_DU[count])
self.Flag = 0
def init(self):
if (epdconfig.module_init() != 0):
return -1
# EPD hardware init start
self.Flag = 0
self.reset()
self.send_command(0x00) # panel setting PSR
self.send_data(0xFF) # RES1 RES0 REG KW/R UD SHL SHD_N RST_N
self.send_data(0x01) # x x x VCMZ TS_AUTO TIGE NORG VC_LUTZ
self.send_command(0x01) # POWER SETTING PWR
self.send_data(0x03) # x x x x x x VDS_EN VDG_EN
self.send_data(0x10) # x x x VCOM_SLWE VGH[3:0] VGH=20V, VGL=-20V
self.send_data(0x3F) # x x VSH[5:0] VSH = 15V
self.send_data(0x3F) # x x VSL[5:0] VSL=-15V
self.send_data(0x03) # OPTEN VDHR[6:0] VHDR=6.4V
# T_VDS_OFF[1:0] 00=1 frame; 01=2 frame; 10=3 frame; 11=4 frame
self.send_command(0x06) # booster soft start BTST
self.send_data(0x37) # BT_PHA[7:0]
self.send_data(0x3D) # BT_PHB[7:0]
self.send_data(0x3D) # x x BT_PHC[5:0]
self.send_command(0x60) # TCON setting TCON
self.send_data(0x22) # S2G[3:0] G2S[3:0] non-overlap = 12
self.send_command(0x82) # VCOM_DC setting VDCS
self.send_data(0x07) # x VDCS[6:0] VCOM_DC value= -1.9v 00~3f,0x12=-1.9v
self.send_command(0x30)
self.send_data(0x09)
self.send_command(0xe3) # power saving PWS
self.send_data(0x88) # VCOM_W[3:0] SD_W[3:0]
self.send_command(0x61) # resoultion setting
self.send_data(0xf0) # HRES[7:3] 0 0 0
self.send_data(0x01) # x x x x x x x VRES[8]
self.send_data(0x68) # VRES[7:0]
self.send_command(0x50);
self.send_data(0xB7);
return 0
def getbuffer(self, image):
# logger.debug("bufsiz = ",int(self.width/8) * self.height)
buf = [0xFF] * (int(self.width/8) * self.height)
image_monocolor = image.convert('1')
imwidth, imheight = image_monocolor.size
pixels = image_monocolor.load()
# logger.debug("imwidth = %d, imheight = %d",imwidth,imheight)
if(imwidth == self.width and imheight == self.height):
logger.debug("Vertical")
for y in range(imheight):
for x in range(imwidth):
# Set the bits for the column of pixels at the current position.
if pixels[x, y] == 0:
buf[int((x + y * self.width) / 8)] &= ~(0x80 >> (x % 8))
elif(imwidth == self.height and imheight == self.width):
logger.debug("Horizontal")
for y in range(imheight):
for x in range(imwidth):
newx = y
newy = self.height - x - 1
if pixels[x, y] == 0:
buf[int((newx + newy*self.width) / 8)] &= ~(0x80 >> (y % 8))
return buf
def display(self, image):
if (image == None):
return
self.send_command(0x13); # Transfer new data
for i in range(0, self.width * self.height / 8) :
self.send_data(image[i])
def display_NUM(self, NUM):
# pcnt = 0
self.send_command(0x13); #Transfer new data
for column in range(0, self.height):
for row in range(0, self.width/8):
if NUM == self.WHITE:
self.send_data(0xFF)
elif NUM == self.BLACK:
self.send_data(0x00)
elif NUM == self.Source_Line:
self.send_data(0xAA)
elif NUM == self.Gate_Line:
if(column%2):
self.send_data(0xff) # An odd number of Gate line
else:
self.send_data(0x00) # The even line Gate
elif NUM == self.Chessboard:
if(row>=(self.width/8/2) and column>=(self.height/2)):
self.send_data(0xff)
elif(row<(self.width/8/2) and column<(self.height/2)):
self.send_data(0xff)
else:
self.send_data(0x00)
elif NUM == self.LEFT_BLACK_RIGHT_WHITE:
if(row>=(self.width/8/2)):
self.send_data(0xff)
else:
self.send_data(0x00)
elif NUM == self.UP_BLACK_DOWN_WHITE:
if(column>=(self.height/2)):
self.send_data(0xFF)
else:
self.send_data(0x00)
elif NUM == self.Frame:
if(column==0 or column==(self.height-1)):
self.send_data(0x00)
elif(row==0):
self.send_data(0x7F)
elif(row==(self.width/8-1)):
self.send_data(0xFE);
else:
self.send_data(0xFF);
elif NUM == self.Crosstalk:
if((row>=(self.width/8/3) and row<=(self.width/8/3*2) and column<=(self.height/3)) or (row>=(self.width/8/3) and row<=(self.width/8/3*2) and column>=(self.height/3*2))):
self.send_data(0x00)
else:
self.send_data(0xFF)
elif NUM == self.Image:
epdconfig.delay_ms(1)
# self.send_data(gImage_1[pcnt++])
def Clear(self):
self.send_command(0x13); # Transfer new data
for i in range(0, self.width * self.height / 8) :
self.send_data(0xFF)
self.lut_GC()
self.refresh()
def sleep(self):
self.send_command(0X07) # DEEP_SLEEP_MODE
self.send_data(0xA5)
epdconfig.delay_ms(2000)
epdconfig.module_exit()
### END OF FILE ###

View file

@ -0,0 +1,263 @@
# *****************************************************************************
# * | File : epd7in3g.py
# * | Author : Waveshare team
# * | Function : Electronic paper driver
# * | Info :
# *----------------
# * | This version: V1
# * | Date : 2022-07-20
# # | Info : python demo
# -----------------------------------------------------------------------------
# ******************************************************************************/
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documnetation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
import logging
from . import epdconfig
import PIL
from PIL import Image
import io
# Display resolution
EPD_WIDTH = 800
EPD_HEIGHT = 480
logger = logging.getLogger(__name__)
class EPD:
def __init__(self):
self.reset_pin = epdconfig.RST_PIN
self.dc_pin = epdconfig.DC_PIN
self.busy_pin = epdconfig.BUSY_PIN
self.cs_pin = epdconfig.CS_PIN
self.width = EPD_WIDTH
self.height = EPD_HEIGHT
self.BLACK = 0x000000 # 00 BGR
self.WHITE = 0xffffff # 01
self.YELLOW = 0x00ffff # 10
self.RED = 0x0000ff # 11
# Hardware reset
def reset(self):
epdconfig.digital_write(self.reset_pin, 1)
epdconfig.delay_ms(200)
epdconfig.digital_write(self.reset_pin, 0) # module reset
epdconfig.delay_ms(2)
epdconfig.digital_write(self.reset_pin, 1)
epdconfig.delay_ms(200)
def send_command(self, command):
epdconfig.digital_write(self.dc_pin, 0)
epdconfig.digital_write(self.cs_pin, 0)
epdconfig.spi_writebyte([command])
epdconfig.digital_write(self.cs_pin, 1)
def send_data(self, data):
epdconfig.digital_write(self.dc_pin, 1)
epdconfig.digital_write(self.cs_pin, 0)
epdconfig.spi_writebyte([data])
epdconfig.digital_write(self.cs_pin, 1)
def ReadBusyH(self):
logger.debug("e-Paper busy H")
while(epdconfig.digital_read(self.busy_pin) == 0): # 0: idle, 1: busy
epdconfig.delay_ms(5)
logger.debug("e-Paper busy H release")
def ReadBusyL(self):
logger.debug("e-Paper busy L")
while(epdconfig.digital_read(self.busy_pin) == 1): # 0: busy, 1: idle
epdconfig.delay_ms(5)
logger.debug("e-Paper busy L release")
def TurnOnDisplay(self):
self.send_command(0x12) # DISPLAY_REFRESH
self.send_data(0x01)
self.ReadBusyH()
self.send_command(0x02) # POWER_OFF
self.send_data(0X00)
self.ReadBusyH()
def init(self):
if (epdconfig.module_init() != 0):
return -1
# EPD hardware init start
self.reset()
self.ReadBusyH()
epdconfig.delay_ms(30)
self.send_command(0xAA)
self.send_data(0x49)
self.send_data(0x55)
self.send_data(0x20)
self.send_data(0x08)
self.send_data(0x09)
self.send_data(0x18)
self.send_command(0x01)
self.send_data(0x3F)
self.send_command(0x00)
self.send_data(0x4F)
self.send_data(0x69)
self.send_command(0x05)
self.send_data(0x40)
self.send_data(0x1F)
self.send_data(0x1F)
self.send_data(0x2C)
self.send_command(0x08)
self.send_data(0x6F)
self.send_data(0x1F)
self.send_data(0x1F)
self.send_data(0x22)
# ===================
# 20211212
# First setting
self.send_command(0x06)
self.send_data(0x6F)
self.send_data(0x1F)
self.send_data(0x14)
self.send_data(0x14)
# ===================
self.send_command(0x03)
self.send_data(0x00)
self.send_data(0x54)
self.send_data(0x00)
self.send_data(0x44)
self.send_command(0x60)
self.send_data(0x02)
self.send_data(0x00)
# Please notice that PLL must be set for version 2 IC
self.send_command(0x30)
self.send_data(0x08)
self.send_command(0x50)
self.send_data(0x3F)
self.send_command(0x61)
self.send_data(0x03)
self.send_data(0x20)
self.send_data(0x01)
self.send_data(0xE0)
self.send_command(0xE3)
self.send_data(0x2F)
self.send_command(0x84)
self.send_data(0x01)
return 0
def getbuffer(self, image):
# Create a pallette with the 4 colors supported by the panel
pal_image = Image.new("P", (1,1))
pal_image.putpalette( (0,0,0, 255,255,255, 255,255,0, 255,0,0) + (0,0,0)*252)
# Check if we need to rotate the image
imwidth, imheight = image.size
if(imwidth == self.width and imheight == self.height):
image_temp = image
elif(imwidth == self.height and imheight == self.width):
image_temp = image.rotate(90, expand=True)
else:
logger.warning("Invalid image dimensions: %d x %d, expected %d x %d" % (imwidth, imheight, self.width, self.height))
# Convert the soruce image to the 4 colors, dithering if needed
image_4color = image_temp.convert("RGB").quantize(palette=pal_image)
buf_4color = bytearray(image_4color.tobytes('raw'))
# into a single byte to transfer to the panel
buf = [0x00] * int(self.width * self.height / 4)
idx = 0
for i in range(0, len(buf_4color), 4):
buf[idx] = (buf_4color[i] << 6) + (buf_4color[i+1] << 4) + (buf_4color[i+2] << 2) + buf_4color[i+3]
idx += 1
return buf
def display(self, image):
if self.width % 4 == 0 :
Width = self.width // 4
else :
Width = self.width // 4 + 1
Height = self.height
self.send_command(0x68)
self.send_data(0x01)
self.send_command(0x04)
self.ReadBusyH()
self.send_command(0x10)
for j in range(0, Height):
for i in range(0, Width):
self.send_data(image[i + j * Width])
self.TurnOnDisplay()
def Clear(self, color):
if self.width % 4 == 0 :
Width = self.width // 4
else :
Width = self.width // 4 + 1
Height = self.height
self.send_command(0x68)
self.send_data(0x01)
self.send_command(0x04)
self.ReadBusyH()
self.send_command(0x10)
for j in range(0, Height):
for i in range(0, Width):
for k in range(0, 4):
self.send_data(color)
self.send_command(0x68)
self.send_data(0x00)
self.TurnOnDisplay()
def sleep(self):
self.send_command(0x02) # POWER_OFF
self.send_data(0x00)
self.send_command(0x07) # DEEP_SLEEP
self.send_data(0XA5)
epdconfig.delay_ms(2000)
epdconfig.module_exit()
### END OF FILE ###

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

File diff suppressed because one or more lines are too long

View file

@ -234,6 +234,7 @@
<pMultCmdsp></pMultCmdsp>
<DebugDescription>
<Enable>1</Enable>
<EnableFlashSeq>0</EnableFlashSeq>
<EnableLog>0</EnableLog>
<Protocol>2</Protocol>
<DbgClock>10000000</DbgClock>
@ -263,7 +264,7 @@
<Group>
<GroupName>Application/User</GroupName>
<tvExp>0</tvExp>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
@ -343,7 +344,7 @@
<Group>
<GroupName>Examples</GroupName>
<tvExp>0</tvExp>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
@ -839,17 +840,65 @@
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>49</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\User\Examples\EPD_1in64g_test.c</PathWithFileName>
<FilenameWithoutPath>EPD_1in64g_test.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>50</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\User\Examples\EPD_3in0g_test.c</PathWithFileName>
<FilenameWithoutPath>EPD_3in0g_test.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>51</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\User\Examples\EPD_3in52_test.c</PathWithFileName>
<FilenameWithoutPath>EPD_3in52_test.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>52</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\User\Examples\EPD_7in3g_test.c</PathWithFileName>
<FilenameWithoutPath>EPD_7in3g_test.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>e-Paper</GroupName>
<tvExp>1</tvExp>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>49</FileNumber>
<FileNumber>53</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -861,7 +910,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>50</FileNumber>
<FileNumber>54</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -873,7 +922,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>51</FileNumber>
<FileNumber>55</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -885,7 +934,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>52</FileNumber>
<FileNumber>56</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -897,7 +946,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>53</FileNumber>
<FileNumber>57</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -909,7 +958,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>54</FileNumber>
<FileNumber>58</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -921,7 +970,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>55</FileNumber>
<FileNumber>59</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -933,7 +982,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>56</FileNumber>
<FileNumber>60</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -945,7 +994,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>57</FileNumber>
<FileNumber>61</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -957,7 +1006,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>58</FileNumber>
<FileNumber>62</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -969,7 +1018,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>59</FileNumber>
<FileNumber>63</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -981,7 +1030,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>60</FileNumber>
<FileNumber>64</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -993,7 +1042,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>61</FileNumber>
<FileNumber>65</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1005,7 +1054,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>62</FileNumber>
<FileNumber>66</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1017,7 +1066,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>63</FileNumber>
<FileNumber>67</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1029,7 +1078,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>64</FileNumber>
<FileNumber>68</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1041,7 +1090,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>65</FileNumber>
<FileNumber>69</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1053,7 +1102,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>66</FileNumber>
<FileNumber>70</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1065,7 +1114,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>67</FileNumber>
<FileNumber>71</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1077,7 +1126,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>68</FileNumber>
<FileNumber>72</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1089,7 +1138,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>69</FileNumber>
<FileNumber>73</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1101,7 +1150,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>70</FileNumber>
<FileNumber>74</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1113,7 +1162,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>71</FileNumber>
<FileNumber>75</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1125,7 +1174,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>72</FileNumber>
<FileNumber>76</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1137,7 +1186,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>73</FileNumber>
<FileNumber>77</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1149,7 +1198,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>74</FileNumber>
<FileNumber>78</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1161,7 +1210,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>75</FileNumber>
<FileNumber>79</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1173,7 +1222,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>76</FileNumber>
<FileNumber>80</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1185,7 +1234,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>77</FileNumber>
<FileNumber>81</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1197,7 +1246,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>78</FileNumber>
<FileNumber>82</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1209,7 +1258,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>79</FileNumber>
<FileNumber>83</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1221,7 +1270,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>80</FileNumber>
<FileNumber>84</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1233,7 +1282,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>81</FileNumber>
<FileNumber>85</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1245,7 +1294,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>82</FileNumber>
<FileNumber>86</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1257,7 +1306,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>83</FileNumber>
<FileNumber>87</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1269,7 +1318,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>84</FileNumber>
<FileNumber>88</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1281,7 +1330,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>85</FileNumber>
<FileNumber>89</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1293,7 +1342,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>86</FileNumber>
<FileNumber>90</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1305,7 +1354,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>87</FileNumber>
<FileNumber>91</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1315,6 +1364,54 @@
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>92</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\User\e-Paper\EPD_1in64g.c</PathWithFileName>
<FilenameWithoutPath>EPD_1in64g.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>93</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\User\e-Paper\EPD_3in0g.c</PathWithFileName>
<FilenameWithoutPath>EPD_3in0g.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>94</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\User\e-Paper\EPD_3in52.c</PathWithFileName>
<FilenameWithoutPath>EPD_3in52.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>95</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\User\e-Paper\EPD_7in3g.c</PathWithFileName>
<FilenameWithoutPath>EPD_7in3g.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
@ -1325,7 +1422,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>88</FileNumber>
<FileNumber>96</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1345,7 +1442,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>89</FileNumber>
<FileNumber>97</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1365,7 +1462,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>90</FileNumber>
<FileNumber>98</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1377,7 +1474,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>91</FileNumber>
<FileNumber>99</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1389,7 +1486,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>92</FileNumber>
<FileNumber>100</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1401,7 +1498,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>93</FileNumber>
<FileNumber>101</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1413,7 +1510,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>94</FileNumber>
<FileNumber>102</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1425,7 +1522,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>95</FileNumber>
<FileNumber>103</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1437,7 +1534,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>96</FileNumber>
<FileNumber>104</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1457,7 +1554,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>97</FileNumber>
<FileNumber>105</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1469,7 +1566,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>98</FileNumber>
<FileNumber>106</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1489,7 +1586,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>99</FileNumber>
<FileNumber>107</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1509,7 +1606,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>100</FileNumber>
<FileNumber>108</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1521,7 +1618,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>101</FileNumber>
<FileNumber>109</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1533,7 +1630,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>102</FileNumber>
<FileNumber>110</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1545,7 +1642,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>103</FileNumber>
<FileNumber>111</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1557,7 +1654,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>104</FileNumber>
<FileNumber>112</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1569,7 +1666,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>105</FileNumber>
<FileNumber>113</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1581,7 +1678,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>106</FileNumber>
<FileNumber>114</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1593,7 +1690,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>107</FileNumber>
<FileNumber>115</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1605,7 +1702,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>108</FileNumber>
<FileNumber>116</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1617,7 +1714,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>109</FileNumber>
<FileNumber>117</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1629,7 +1726,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>110</FileNumber>
<FileNumber>118</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1641,7 +1738,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>111</FileNumber>
<FileNumber>119</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1653,7 +1750,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>112</FileNumber>
<FileNumber>120</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1665,7 +1762,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>113</FileNumber>
<FileNumber>121</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1677,7 +1774,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>114</FileNumber>
<FileNumber>122</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>

View file

@ -16,7 +16,7 @@
<TargetCommonOption>
<Device>STM32F103ZE</Device>
<Vendor>STMicroelectronics</Vendor>
<PackID>Keil.STM32F1xx_DFP.2.3.0</PackID>
<PackID>Keil.STM32F1xx_DFP.2.1.0</PackID>
<PackURL>http://www.keil.com/pack/</PackURL>
<Cpu>IRAM(0x20000000-0x2000FFFF) IROM(0x8000000-0x807FFFF) CLOCK(8000000) CPUTYPE("Cortex-M3")</Cpu>
<FlashUtilSpec></FlashUtilSpec>
@ -184,6 +184,7 @@
<hadXRAM>0</hadXRAM>
<uocXRam>0</uocXRam>
<RvdsVP>0</RvdsVP>
<RvdsMve>0</RvdsMve>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
@ -631,6 +632,26 @@
<FileType>1</FileType>
<FilePath>..\User\Examples\EPD_7in5_HD_test.c</FilePath>
</File>
<File>
<FileName>EPD_1in64g_test.c</FileName>
<FileType>1</FileType>
<FilePath>..\User\Examples\EPD_1in64g_test.c</FilePath>
</File>
<File>
<FileName>EPD_3in0g_test.c</FileName>
<FileType>1</FileType>
<FilePath>..\User\Examples\EPD_3in0g_test.c</FilePath>
</File>
<File>
<FileName>EPD_3in52_test.c</FileName>
<FileType>1</FileType>
<FilePath>..\User\Examples\EPD_3in52_test.c</FilePath>
</File>
<File>
<FileName>EPD_7in3g_test.c</FileName>
<FileType>1</FileType>
<FilePath>..\User\Examples\EPD_7in3g_test.c</FilePath>
</File>
</Files>
</Group>
<Group>
@ -831,6 +852,26 @@
<FileType>1</FileType>
<FilePath>..\User\e-Paper\EPD_7in5b_HD.c</FilePath>
</File>
<File>
<FileName>EPD_1in64g.c</FileName>
<FileType>1</FileType>
<FilePath>..\User\e-Paper\EPD_1in64g.c</FilePath>
</File>
<File>
<FileName>EPD_3in0g.c</FileName>
<FileType>1</FileType>
<FilePath>..\User\e-Paper\EPD_3in0g.c</FilePath>
</File>
<File>
<FileName>EPD_3in52.c</FileName>
<FileType>1</FileType>
<FilePath>..\User\e-Paper\EPD_3in52.c</FilePath>
</File>
<File>
<FileName>EPD_7in3g.c</FileName>
<FileType>1</FileType>
<FilePath>..\User\e-Paper\EPD_7in3g.c</FilePath>
</File>
</Files>
</Group>
<Group>

View file

@ -3,58 +3,189 @@
<pre>
<h1>µVision Build Log</h1>
<h2>Tool Versions:</h2>
IDE-Version: ¦ÌVision V5.25.2.0
IDE-Version: ¦ÌVision V5.26.2.0
Copyright (C) 2018 ARM Ltd and ARM Germany GmbH. All rights reserved.
License Information: ass ass, ass, LIC=JL2UH-W872P-CJR6Z-JYZTW-ESB48-R6YF4
License Information: , , LIC=RC93N-YLJYL-JJH6S-LI3Z1-D1AV2-99PL8
Tool Versions:
Toolchain: MDK-ARM Plus Version: 5.25.2.0
Toolchain Path: D:\Program Files\keil5\ARM\ARMCC\Bin
Toolchain: MDK-ARM Plus Version: 5.26.2.0
Toolchain Path: D:\KEIL\azwz\ARM\ARMCC\Bin
C Compiler: Armcc.exe V5.06 update 6 (build 750)
Assembler: Armasm.exe V5.06 update 6 (build 750)
Linker/Locator: ArmLink.exe V5.06 update 6 (build 750)
Library Manager: ArmAr.exe V5.06 update 6 (build 750)
Hex Converter: FromElf.exe V5.06 update 6 (build 750)
CPU DLL: SARMCM3.DLL V5.25.2.0
Dialog DLL: DCM.DLL V1.17.1.0
Target DLL: STLink\ST-LINKIII-KEIL_SWO.dll V3.0.1.0
Dialog DLL: TCM.DLL V1.35.1.0
CPU DLL: SARMCM3.DLL V5.26.2.0
Dialog DLL: DCM.DLL V1.17.2.0
Target DLL: STLink\ST-LINKIII-KEIL_SWO.dll V3.0.5.0
Dialog DLL: TCM.DLL V1.36.1.0
<h2>Project:</h2>
E:\github\E-Paper_code\STM32\STM32-F103ZET6\MDK-ARM\epd-demo.uvprojx
Project File Date: 04/26/2022
E:\ÏîÄ¿\e-Paper\Code\E-Paper_code\STM32\STM32-F103ZET6\MDK-ARM\epd-demo.uvprojx
Project File Date: 07/22/2022
<h2>Output:</h2>
*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'D:\Program Files\keil5\ARM\ARMCC\Bin'
*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'D:\KEIL\azwz\ARM\ARMCC\Bin'
Build target 'epd-demo'
assembling startup_stm32f103xe.s...
compiling usart.c...
compiling gpio.c...
compiling spi.c...
compiling stm32f1xx_it.c...
compiling main.c...
compiling ImageData2.c...
compiling ImageData.c...
compiling stm32f1xx_hal_msp.c...
compiling EPD_1in54b_test.c...
compiling EPD_1in54_test.c...
compiling EPD_1in02_test.c...
compiling EPD_1in54_V2_test.c...
compiling EPD_2in7b_V2_test.c...
compiling EPD_2in7b_test.c...
compiling EPD_1in54b_V2_test.c...
compiling EPD_1in54c_test.c...
compiling EPD_2in7_test.c...
compiling EPD_2in9bc_test.c...
compiling EPD_2in9d_test.c...
compiling EPD_2in9b_V3_test.c...
compiling EPD_2in9_test.c...
compiling EPD_2in9_V2_test.c...
compiling EPD_2in13b_V4_test.c...
compiling EPD_2in13_test.c...
compiling EPD_2in13b_V3_test.c...
compiling EPD_2in13_V3_test.c...
compiling EPD_2in13_V2_test.c...
compiling EPD_2in13bc_test.c...
compiling EPD_3in7_test.c...
compiling EPD_2in13d_test.c...
compiling EPD_2in66b_test.c...
compiling EPD_2in66_test.c...
compiling EPD_4in2_test.c...
compiling EPD_4in01f_test.c...
compiling EPD_4in2b_V2_test.c...
compiling EPD_4in2bc_test.c...
compiling EPD_5in65f_test.c...
compiling EPD_5in83_V2_test.c...
compiling EPD_7in5_test.c...
compiling EPD_5in83b_V2_test.c...
compiling EPD_5in83bc_test.c...
compiling EPD_5in83_test.c...
compiling EPD_7in5b_V2_test.c...
compiling EPD_7in5b_HD_test.c...
compiling EPD_7in5bc_test.c...
compiling EPD_7in5_V2_test.c...
compiling EPD_7in5_HD_test.c...
compiling EPD_3in52_test.c...
compiling EPD_7in3g_test.c...
compiling EPD_3in0g_test.c...
compiling EPD_1in02d.c...
compiling EPD_1in64g_test.c...
compiling EPD_1in54c.c...
compiling EPD_1in54_V2.c...
compiling EPD_1in54b.c...
compiling EPD_1in54b_V2.c...
compiling EPD_1in54.c...
compiling EPD_2in7b_V2.c...
compiling EPD_2in9.c...
compiling EPD_2in7.c...
compiling EPD_2in7b.c...
compiling EPD_2in9_V2.c...
compiling EPD_2in9b_V3.c...
compiling EPD_2in9bc.c...
compiling EPD_2in9d.c...
compiling EPD_2in13.c...
compiling EPD_2in13_V2.c...
compiling EPD_2in13b_V3.c...
compiling EPD_2in13_V3.c...
compiling EPD_2in13d.c...
compiling EPD_2in13b_V4.c...
compiling EPD_2in13bc.c...
compiling EPD_3in7.c...
compiling EPD_2in66b.c...
compiling EPD_4in01f.c...
compiling EPD_2in66.c...
compiling EPD_4in2.c...
..\User\e-Paper\EPD_4in2.c(612): warning: #550-D: variable "Height" was set but never used
UWORD Width, Height;
..\User\e-Paper\EPD_4in2.c: 1 warning, 0 errors
compiling EPD_5in83_V2.c...
compiling EPD_5in65f.c...
compiling EPD_4in2b_V2.c...
compiling EPD_4in2bc.c...
compiling EPD_5in83.c...
compiling EPD_7in5_V2.c...
compiling EPD_7in5_HD.c...
compiling EPD_7in5.c...
compiling EPD_5in83bc.c...
compiling EPD_5in83b_V2.c...
compiling EPD_3in0g.c...
..\User\e-Paper\EPD_3in0g.c(86): warning: #177-D: function "EPD_3IN0G_ReadBusyL" was declared but never referenced
static void EPD_3IN0G_ReadBusyL(void)
..\User\e-Paper\EPD_3in0g.c: 1 warning, 0 errors
compiling EPD_7in5bc.c...
compiling EPD_7in5b_HD.c...
compiling EPD_1in64g.c...
..\User\e-Paper\EPD_1in64g.c(90): warning: #177-D: function "EPD_1IN64G_ReadBusyL" was declared but never referenced
static void EPD_1IN64G_ReadBusyL(void)
..\User\e-Paper\EPD_1in64g.c: 1 warning, 0 errors
compiling EPD_7in5b_V2.c...
compiling font8.c...
compiling font12.c...
compiling font12CN.c...
compiling font16.c...
compiling font20.c...
compiling font24.c...
compiling font24CN.c...
compiling DEV_Config.c...
compiling EPD_3in52.c...
compiling EPD_7in3g.c...
..\User\e-Paper\EPD_7in3g.c(86): warning: #177-D: function "EPD_7IN3G_ReadBusyL" was declared but never referenced
static void EPD_7IN3G_ReadBusyL(void)
..\User\e-Paper\EPD_7in3g.c: 1 warning, 0 errors
compiling GUI_Paint.c...
compiling system_stm32f1xx.c...
compiling stm32f1xx_hal_rcc_ex.c...
compiling stm32f1xx_hal_spi.c...
compiling stm32f1xx_hal.c...
compiling stm32f1xx_hal_rcc.c...
compiling stm32f1xx_hal_gpio_ex.c...
compiling stm32f1xx_hal_pwr.c...
compiling stm32f1xx_hal_flash.c...
compiling stm32f1xx_hal_gpio.c...
compiling stm32f1xx_hal_dma.c...
compiling stm32f1xx_hal_cortex.c...
compiling stm32f1xx_hal_tim_ex.c...
compiling stm32f1xx_hal_exti.c...
compiling stm32f1xx_hal_tim.c...
compiling stm32f1xx_hal_uart.c...
compiling stm32f1xx_hal_flash_ex.c...
linking...
Program Size: Code=24104 RO-data=14272 RW-data=56 ZI-data=41136
Program Size: Code=24300 RO-data=9260 RW-data=56 ZI-data=41136
FromELF: creating hex file...
"epd-demo\epd-demo.axf" - 0 Error(s), 0 Warning(s).
"epd-demo\epd-demo.axf" - 0 Error(s), 4 Warning(s).
<h2>Software Packages used:</h2>
Package Vendor: ARM
http://www.keil.com/pack/ARM.CMSIS.5.7.0.pack
ARM.CMSIS.5.7.0
CMSIS (Cortex Microcontroller Software Interface Standard)
* Component: CORE Version: 5.4.0
http://www.keil.com/pack/ARM.CMSIS.5.9.0.pack
ARM.CMSIS.5.9.0
CMSIS (Common Microcontroller Software Interface Standard)
* Component: CORE Version: 5.6.0
Package Vendor: Keil
http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.3.0.pack
Keil.STM32F1xx_DFP.2.3.0
http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.1.0.pack
Keil.STM32F1xx_DFP.2.1.0
STMicroelectronics STM32F1 Series Device Support, Drivers and Examples
<h2>Collection of Component include folders:</h2>
.\RTE\_epd-demo
D:\Program Files\keil5\ARM\PACK\ARM\CMSIS\5.7.0\CMSIS\Core\Include
D:\Program Files\keil5\ARM\PACK\Keil\STM32F1xx_DFP\2.3.0\Device\Include
D:\KEIL\azwz\ARM\PACK\ARM\CMSIS\5.9.0\CMSIS\Core\Include
D:\KEIL\azwz\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include
<h2>Collection of Component Files used:</h2>
* Component: ARM::CMSIS:CORE:5.4.0
Build Time Elapsed: 00:00:03
* Component: ARM::CMSIS:CORE:5.6.0
Build Time Elapsed: 00:00:47
</pre>
</body>
</html>

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -580,17 +580,17 @@ ARM Macro Assembler Page 9
00000000
Command Line: --debug --xref --diag_suppress=9931 --cpu=Cortex-M3 --apcs=interw
ork --depend=epd-demo\startup_stm32f103xe.d -oepd-demo\startup_stm32f103xe.o -I
.\RTE\_epd-demo -I"D:\Program Files\keil5\ARM\PACK\ARM\CMSIS\5.7.0\CMSIS\Core\I
nclude" -I"D:\Program Files\keil5\ARM\PACK\Keil\STM32F1xx_DFP\2.3.0\Device\Incl
ude" --predefine="__MICROLIB SETA 1" --predefine="__UVISION_VERSION SETA 525" -
.\RTE\_epd-demo -ID:\KEIL\azwz\ARM\PACK\ARM\CMSIS\5.9.0\CMSIS\Core\Include -ID:
\KEIL\azwz\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include --predefine="__MICR
OLIB SETA 1" --predefine="__UVISION_VERSION SETA 526" --predefine="_RTE_ SETA 1
ARM Macro Assembler Page 10
-predefine="_RTE_ SETA 1" --predefine="STM32F10X_HD SETA 1" --list=startup_stm3
2f103xe.lst startup_stm32f103xe.s
" --predefine="STM32F10X_HD SETA 1" --list=startup_stm32f103xe.lst startup_stm3
2f103xe.s

View file

@ -93,6 +93,10 @@ int main(void)
MX_USART1_UART_Init();
MX_SPI1_Init();
/* USER CODE BEGIN 2 */
// EPD_1in64g_test();
// EPD_3in0g_test();
// EPD_7in3g_test();
// EPD_1in02d_test();
@ -117,12 +121,13 @@ int main(void)
// EPD_2in13_V3_test();
// EPD_2in13bc_test();
// EPD_2in13b_V3_test();
EPD_2in13b_V4_test();
// EPD_2in13b_V4_test();
// EPD_2in13d_test();
// EPD_2in66_test();
// EPD_2in66b_test();
// EPD_3in52_test();
// EPD_3in7_test();
// EPD_4in01f_test();

View file

@ -0,0 +1,168 @@
/*****************************************************************************
* | File : EPD_1in64g_test.c
* | Author : Waveshare team
* | Function : 1.64inch e-paper (G) test demo
* | Info :
*----------------
* | This version: V1.0
* | Date : 2022-07-22
* | Info :
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documnetation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
******************************************************************************/
#include "EPD_Test.h"
#include "EPD_1in64g.h"
#include "time.h"
int EPD_1in64g_test(void)
{
printf("EPD_1IN64G_test Demo\r\n");
if(DEV_Module_Init()!=0){
return -1;
}
printf("e-Paper Init and Clear...\r\n");
EPD_1IN64G_Init();
printf("White \r\n");
EPD_1IN64G_Clear(EPD_1IN64G_WHITE); // While
DEV_Delay_ms(2000);
//Create a new image cache
UBYTE *BlackImage;
/* you have to edit the startup_stm32fxxx.s file and set a big enough heap size */
UWORD Imagesize = ((EPD_1IN64G_WIDTH % 4 == 0)? (EPD_1IN64G_WIDTH / 4 ): (EPD_1IN64G_WIDTH / 4 + 1)) * EPD_1IN64G_HEIGHT;
if((BlackImage = (UBYTE *)malloc(Imagesize)) == NULL) {
printf("Failed to apply for black memory...\r\n");
return -1;
}
printf("Paint_NewImage\r\n");
Paint_NewImage(BlackImage, EPD_1IN64G_WIDTH, EPD_1IN64G_HEIGHT, 0, EPD_1IN64G_WHITE);
Paint_SetScale(4);
#if 1 // show bmp
printf("show BMP-----------------\r\n");
Paint_SelectImage(BlackImage);
Paint_Clear(WHITE);
Paint_DrawBitMap(gImage_1in64g);
EPD_1IN64G_Display(BlackImage);
DEV_Delay_ms(2000);
#endif
#if 1 // Drawing on the image
//1.Select Image
printf("SelectImage:BlackImage\r\n");
Paint_SelectImage(BlackImage);
Paint_Clear(0x55);
// 2.Drawing on the image
printf("Drawing:BlackImage\r\n");
Paint_DrawPoint(10, 80, Red_4Color, DOT_PIXEL_1X1, DOT_STYLE_DFT);
Paint_DrawPoint(10, 90, Yellow_4Color, DOT_PIXEL_2X2, DOT_STYLE_DFT);
Paint_DrawPoint(10, 100, Black_4Color, DOT_PIXEL_3X3, DOT_STYLE_DFT);
Paint_DrawLine(20, 70, 70, 120, Red_4Color, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
Paint_DrawLine(70, 70, 20, 120, Red_4Color, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
Paint_DrawRectangle(20, 70, 70, 120, Yellow_4Color, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
Paint_DrawRectangle(80, 70, 130, 120, Yellow_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawCircle(45, 95, 20, Black_4Color, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
Paint_DrawCircle(105, 95, 20, Black_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawLine(85, 95, 125, 95, Red_4Color, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
Paint_DrawLine(105, 75, 105, 115, Yellow_4Color, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
Paint_DrawString_EN(10, 0, "Red, yellow, white and black", &Font16, Red_4Color, Yellow_4Color);
Paint_DrawString_EN(10, 35, "Four color e-Paper", &Font12, Yellow_4Color, Black_4Color);
Paint_DrawString_CN(10, 125, "微雪电子", &Font24CN, Red_4Color, White_4Color);
Paint_DrawNum(10, 50, 123456, &Font12, Red_4Color, White_4Color);
printf("EPD_Display\r\n");
EPD_1IN64G_Display(BlackImage);
DEV_Delay_ms(3000);
#endif
#if 1 // Drawing on the image
//1.Select Image
printf("SelectImage:BlackImage\r\n");
Paint_SelectImage(BlackImage);
Paint_Clear(0x55);
// 2.Drawing on the image
printf("Drawing:BlackImage\r\n");
Paint_DrawRectangle(1, 1, 168, 55, Red_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(1, 112, 167, 167, Yellow_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(59, 1, 109, 167, Black_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
printf("EPD_Display\r\n");
EPD_1IN64G_Display(BlackImage);
DEV_Delay_ms(3000);
#endif
#if 1 // Drawing on the image
//1.Select Image
printf("SelectImage:BlackImage\r\n");
Paint_SelectImage(BlackImage);
Paint_Clear(0x55);
int wNumber, lNumber;
wNumber = (EPD_1IN64G_WIDTH/80)==0 ? (EPD_1IN64G_WIDTH/80) : (EPD_1IN64G_WIDTH/80)+1;
lNumber = (EPD_1IN64G_HEIGHT/20)==0 ? (EPD_1IN64G_HEIGHT/20) : (EPD_1IN64G_HEIGHT/20)+1;
// 2.Drawing on the image
printf("Drawing:BlackImage\r\n");
for(int j=0; j<lNumber; j++) {
if(j%2 == 0) {
for(int i=0; i<wNumber; i++) {
Paint_DrawRectangle(1+i*80, 1+j*20, 20+i*80, 20+j*20, Black_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(21+i*80, 1+j*20, 40+i*80, 20+j*20, White_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(41+i*80, 1+j*20, 60+i*80, 20+j*20, Yellow_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(61+i*80, 1+j*20, 80+i*80, 20+j*20, Red_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
}
}
else {
for(int i=0; i<wNumber; i++) {
Paint_DrawRectangle(1+i*80, 1+j*20, 20+i*80, 20+j*20, Yellow_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(21+i*80, 1+j*20, 40+i*80, 20+j*20, Red_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(41+i*80, 1+j*20, 60+i*80, 20+j*20, Black_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(61+i*80, 1+j*20, 80+i*80, 20+j*20, White_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
}
}
}
printf("EPD_Display\r\n");
EPD_1IN64G_Display(BlackImage);
DEV_Delay_ms(3000);
#endif
printf("Clear...\r\n");
EPD_1IN64G_Clear(EPD_1IN64G_WHITE);
printf("Goto Sleep...\r\n");
EPD_1IN64G_Sleep();
free(BlackImage);
BlackImage = NULL;
DEV_Delay_ms(2000);//important, at least 2s
// close 5V
printf("close 5V, Module enters 0 power consumption ...\r\n");
DEV_Module_Exit();
return 0;
}

View file

@ -0,0 +1,172 @@
/*****************************************************************************
* | File : EPD_3in0g_test.c
* | Author : Waveshare team
* | Function : 3inch e-paper (G) test demo
* | Info :
*----------------
* | This version: V1.0
* | Date : 2022-07-15
* | Info :
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documnetation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
******************************************************************************/
#include "EPD_Test.h"
#include "EPD_3in0g.h"
#include "time.h"
int EPD_3in0g_test(void)
{
printf("EPD_3IN0G_test Demo\r\n");
if(DEV_Module_Init()!=0){
return -1;
}
printf("e-Paper Init and Clear...\r\n");
EPD_3IN0G_Init();
printf("Black \r\n");
EPD_3IN0G_Clear(EPD_3IN0G_WHITE); // WHITE
DEV_Delay_ms(2000);
//Create a new image cache
UBYTE *BlackImage;
/* you have to edit the startup_stm32fxxx.s file and set a big enough heap size */
UWORD Imagesize = ((EPD_3IN0G_WIDTH % 4 == 0)? (EPD_3IN0G_WIDTH / 4 ): (EPD_3IN0G_WIDTH / 4 + 1)) * EPD_3IN0G_HEIGHT;
if((BlackImage = (UBYTE *)malloc(Imagesize)) == NULL) {
printf("Failed to apply for black memory...\r\n");
return -1;
}
printf("Paint_NewImage\r\n");
Paint_NewImage(BlackImage, EPD_3IN0G_WIDTH, EPD_3IN0G_HEIGHT, 0, EPD_3IN0G_WHITE);
Paint_SetScale(4);
#if 1 // show bmp
printf("show BMP-----------------\r\n");
EPD_3IN0G_Init();
Paint_SelectImage(BlackImage);
Paint_Clear(WHITE);
Paint_DrawBitMap(gImage_3in0g);
EPD_3IN0G_Display(BlackImage);
DEV_Delay_ms(2000);
#endif
#if 1 // Drawing on the image
//1.Select Image
EPD_3IN0G_Init();
printf("SelectImage:BlackImage\r\n");
Paint_SelectImage(BlackImage);
Paint_Clear(0x55);
// 2.Drawing on the image
printf("Drawing:BlackImage\r\n");
Paint_DrawPoint(10, 80, Red_4Color, DOT_PIXEL_1X1, DOT_STYLE_DFT);
Paint_DrawPoint(10, 90, Yellow_4Color, DOT_PIXEL_2X2, DOT_STYLE_DFT);
Paint_DrawPoint(10, 100, Black_4Color, DOT_PIXEL_3X3, DOT_STYLE_DFT);
Paint_DrawLine(20, 70, 70, 120, Red_4Color, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
Paint_DrawLine(70, 70, 20, 120, Red_4Color, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
Paint_DrawRectangle(20, 70, 70, 120, Yellow_4Color, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
Paint_DrawRectangle(80, 70, 130, 120, Yellow_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawCircle(45, 95, 20, Black_4Color, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
Paint_DrawCircle(105, 95, 20, Black_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawLine(85, 95, 125, 95, Red_4Color, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
Paint_DrawLine(105, 75, 105, 115, Yellow_4Color, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
Paint_DrawString_EN(10, 0, "Red, yellow, white and black", &Font16, Red_4Color, Yellow_4Color);
Paint_DrawString_EN(10, 35, "Four color e-Paper", &Font12, Yellow_4Color, Black_4Color);
Paint_DrawString_CN(10, 125, "΢ѩµç×Ó", &Font24CN, Red_4Color, White_4Color);
Paint_DrawNum(10, 50, 123456, &Font12, Red_4Color, White_4Color);
printf("EPD_Display\r\n");
EPD_3IN0G_Display(BlackImage);
DEV_Delay_ms(3000);
#endif
#if 1 // Drawing on the image
//1.Select Image
EPD_3IN0G_Init();
printf("SelectImage:BlackImage\r\n");
Paint_SelectImage(BlackImage);
Paint_Clear(0x55);
// 2.Drawing on the image
printf("Drawing:BlackImage\r\n");
Paint_DrawRectangle(1, 1, 167, 86, Red_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(1, 314, 167, 399, Yellow_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(59, 1, 109, 399, Black_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
printf("EPD_Display\r\n");
EPD_3IN0G_Display(BlackImage);
DEV_Delay_ms(3000);
#endif
#if 1 // Drawing on the image
//1.Select Image
EPD_3IN0G_Init();
printf("SelectImage:BlackImage\r\n");
Paint_SelectImage(BlackImage);
Paint_Clear(0x55);
int wNumber, lNumber;
wNumber = (EPD_3IN0G_WIDTH/80)==0 ? (EPD_3IN0G_WIDTH/80) : (EPD_3IN0G_WIDTH/80)+1;
lNumber = (EPD_3IN0G_HEIGHT/20)==0 ? (EPD_3IN0G_HEIGHT/20) : (EPD_3IN0G_HEIGHT/20)+1;
// 2.Drawing on the image
printf("Drawing:BlackImage\r\n");
for(int j=0; j<lNumber; j++) {
if(j%2 == 0) {
for(int i=0; i<wNumber; i++) {
Paint_DrawRectangle(1+i*80, 1+j*20, 20+i*80, 20+j*20, Red_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(21+i*80, 1+j*20, 40+i*80, 20+j*20, Yellow_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(41+i*80, 1+j*20, 60+i*80, 20+j*20, White_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(61+i*80, 1+j*20, 80+i*80, 20+j*20, Black_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
}
}
else {
for(int i=0; i<wNumber; i++) {
Paint_DrawRectangle(1+i*80, 1+j*20, 20+i*80, 20+j*20, White_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(21+i*80, 1+j*20, 40+i*80, 20+j*20, Black_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(41+i*80, 1+j*20, 60+i*80, 20+j*20, Red_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawRectangle(61+i*80, 1+j*20, 80+i*80, 20+j*20, Yellow_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
}
}
}
printf("EPD_Display\r\n");
EPD_3IN0G_Display(BlackImage);
DEV_Delay_ms(3000);
#endif
EPD_3IN0G_Init();
printf("Clear...\r\n");
EPD_3IN0G_Clear(EPD_3IN0G_WHITE);
printf("Goto Sleep...\r\n");
EPD_3IN0G_Sleep();
free(BlackImage);
BlackImage = NULL;
DEV_Delay_ms(2000);//important, at least 2s
// close 5V
printf("close 5V, Module enters 0 power consumption ...\r\n");
DEV_Module_Exit();
return 0;
}

View file

@ -0,0 +1,135 @@
/*****************************************************************************
* | File : EPD_3IN52_test.c
* | Author : Waveshare team
* | Function : 3.52inch e-paper test demo
* | Info :
*----------------
* | This version: V1.0
* | Date : 2020-07-16
* | Info :
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documnetation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
******************************************************************************/
#include "EPD_Test.h"
#include "EPD_3in52.h"
#include <time.h>
int EPD_3in52_test(void)
{
printf("EPD_3IN52_test Demo\r\n");
if(DEV_Module_Init()!=0){
return -1;
}
printf("e-Paper Init and Clear...\r\n");
EPD_3IN52_Init();
EPD_3IN52_display_NUM(EPD_3IN52_WHITE);
EPD_3IN52_lut_GC();
EPD_3IN52_refresh();
EPD_3IN52_SendCommand(0x50);
EPD_3IN52_SendData(0x17);
DEV_Delay_ms(500);
//Create a new image cache
UBYTE *BlackImage;
/* you have to edit the startup_stm32fxxx.s file and set a big enough heap size */
UWORD Imagesize = ((EPD_3IN52_WIDTH % 8 == 0)? (EPD_3IN52_WIDTH / 8 ): (EPD_3IN52_WIDTH / 8 + 1)) * EPD_3IN52_HEIGHT;
if((BlackImage = (UBYTE *)malloc(Imagesize)) == NULL) {
printf("Failed to apply for black memory...\r\n");
return -1;
}
printf("Paint_NewImage\r\n");
Paint_NewImage(BlackImage, EPD_3IN52_WIDTH, EPD_3IN52_HEIGHT, 270, WHITE);
Paint_Clear(WHITE);
#if 1 // GC waveform refresh
Paint_SelectImage(BlackImage);
Paint_Clear(WHITE);
Paint_DrawBitMap(gImage_3in52);
EPD_3IN52_display(BlackImage);
EPD_3IN52_lut_GC();
EPD_3IN52_refresh();
DEV_Delay_ms(2000);
#endif
#if 0 //DU waveform refresh
printf("Quick refresh is supported, but the refresh effect is not good, but it is not recommended\r\n");
Paint_SelectImage(BlackImage);
Paint_Clear(WHITE);
Paint_DrawBitMap(gImage_3in52);
EPD_3IN52_display(BlackImage);
EPD_3IN52_lut_DU();
EPD_3IN52_refresh();
DEV_Delay_ms(2000);
#endif
#if 1
printf("SelectImage:BlackImage\r\n");
Paint_SelectImage(BlackImage);
Paint_Clear(WHITE);
printf("Drawing:BlackImage\r\n");
Paint_DrawPoint(10, 80, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT);
Paint_DrawPoint(10, 90, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT);
Paint_DrawPoint(10, 100, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT);
Paint_DrawLine(20, 70, 70, 120, BLACK, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
Paint_DrawLine(70, 70, 20, 120, BLACK, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
Paint_DrawRectangle(20, 70, 70, 120, BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
Paint_DrawRectangle(80, 70, 130, 120, BLACK, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawCircle(45, 95, 20, BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
Paint_DrawCircle(105, 95, 20, WHITE, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawLine(85, 95, 125, 95, BLACK, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
Paint_DrawLine(105, 75, 105, 115, BLACK, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
Paint_DrawString_EN(10, 0, "waveshare", &Font16, BLACK, WHITE);
Paint_DrawString_EN(10, 20, "hello world", &Font12, WHITE, BLACK);
Paint_DrawNum(10, 33, 123456789, &Font12, BLACK, WHITE);
Paint_DrawNum(10, 50, 987654321, &Font16, WHITE, BLACK);
printf("EPD_Display\r\n");
EPD_3IN52_display(BlackImage);
EPD_3IN52_lut_GC();
EPD_3IN52_refresh();
DEV_Delay_ms(2000);
#endif
printf("Clear...\r\n");
EPD_3IN52_Clear();
// Sleep & close 5V
printf("Goto Sleep...\r\n");
EPD_3IN52_sleep();
free(BlackImage);
BlackImage = NULL;
DEV_Delay_ms(2000);//important, at least 2s
printf("close 5V, Module enters 0 power consumption ...\r\n");
DEV_Module_Exit();
return 0;
}

View file

@ -0,0 +1,118 @@
/*****************************************************************************
* | File : EPD_7in3g_test.c
* | Author : Waveshare team
* | Function : 7.3inch e-paper (G) test demo
* | Info :
*----------------
* | This version: V1.0
* | Date : 2022-07-22
* | Info :
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documnetation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
******************************************************************************/
#include "EPD_Test.h"
#include "EPD_7in3g.h"
#include "time.h"
int EPD_7in3g_test(void)
{
printf("EPD_7IN3G_test Demo\r\n");
if(DEV_Module_Init()!=0){
return -1;
}
printf("e-Paper Init and Clear...\r\n");
EPD_7IN3G_Init();
printf("Black \r\n");
EPD_7IN3G_Clear(EPD_7IN3G_WHITE); // WHITE
DEV_Delay_ms(2000);
//Create a new image cache
UBYTE *BlackImage;
/* you have to edit the startup_stm32fxxx.s file and set a big enough heap size */
UDOUBLE Imagesize = ((EPD_7IN3G_WIDTH % 4 == 0)? (EPD_7IN3G_WIDTH / 4 ): (EPD_7IN3G_WIDTH / 4 + 1)) * EPD_7IN3G_HEIGHT;
Imagesize = Imagesize/4;
printf("Not enough memory, only part of the window is displayed\r\n");
if((BlackImage = (UBYTE *)malloc(Imagesize)) == NULL) {
printf("Failed to apply for black memory...\r\n");
return -1;
}
printf("Paint_NewImage\r\n");
Paint_NewImage(BlackImage, EPD_7IN3G_WIDTH/2, EPD_7IN3G_HEIGHT/2 , 0, EPD_7IN3G_WHITE);
Paint_SetScale(4);
#if 0 // show bmp
//Not enough memory,Not supported
printf("show BMP-----------------\r\n");
Paint_SelectImage(BlackImage);
Paint_Clear(WHITE);
Paint_DrawBitMap(gImage_7in3g);
EPD_7IN3G_Display(BlackImage);
DEV_Delay_ms(2000);
#endif
#if 1 // Drawing on the image
//1.Select Image
printf("SelectImage:BlackImage\r\n");
Paint_SelectImage(BlackImage);
Paint_Clear(0x55);
// 2.Drawing on the image
printf("Drawing:BlackImage\r\n");
Paint_DrawPoint(10, 80, Red_4Color, DOT_PIXEL_1X1, DOT_STYLE_DFT);
Paint_DrawPoint(10, 90, Yellow_4Color, DOT_PIXEL_2X2, DOT_STYLE_DFT);
Paint_DrawPoint(10, 100, Black_4Color, DOT_PIXEL_3X3, DOT_STYLE_DFT);
Paint_DrawLine(20, 70, 70, 120, Red_4Color, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
Paint_DrawLine(70, 70, 20, 120, Red_4Color, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
Paint_DrawRectangle(20, 70, 70, 120, Yellow_4Color, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
Paint_DrawRectangle(80, 70, 130, 120, Yellow_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawCircle(45, 95, 20, Black_4Color, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
Paint_DrawCircle(105, 95, 20, Black_4Color, DOT_PIXEL_1X1, DRAW_FILL_FULL);
Paint_DrawLine(85, 95, 125, 95, Red_4Color, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
Paint_DrawLine(105, 75, 105, 115, Yellow_4Color, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
Paint_DrawString_EN(10, 0, "Red, yellow, white and black", &Font16, Red_4Color, Yellow_4Color);
Paint_DrawString_EN(10, 35, "Four color e-Paper", &Font12, Yellow_4Color, Black_4Color);
Paint_DrawString_CN(10, 125, "΢ѩµç×Ó", &Font24CN, Red_4Color, White_4Color);
Paint_DrawNum(10, 50, 123456, &Font12, Red_4Color, White_4Color);
printf("EPD_Display\r\n");
EPD_7IN3G_Display_part(BlackImage, 0, 0, 400, 240);
DEV_Delay_ms(3000);
#endif
printf("Clear...\r\n");
EPD_7IN3G_Clear(EPD_7IN3G_WHITE);
printf("Goto Sleep...\r\n");
EPD_7IN3G_Sleep();
free(BlackImage);
BlackImage = NULL;
DEV_Delay_ms(2000);//important, at least 2s
// close 5V
printf("close 5V, Module enters 0 power consumption ...\r\n");
DEV_Module_Exit();
return 0;
}

View file

@ -36,6 +36,10 @@
#include "Debug.h"
#include <stdlib.h> // malloc() free()
int EPD_1in64g_test(void);
int EPD_3in0g_test(void);
int EPD_7in3g_test(void);
int EPD_1in02d_test(void);
int EPD_1in54_test(void);
@ -65,6 +69,7 @@ int EPD_2in13d_test(void);
int EPD_2in66_test(void);
int EPD_2in66b_test(void);
int EPD_3in52_test(void);
int EPD_3in7_test(void);
int EPD_4in01f_test(void);

View file

@ -7223,6 +7223,683 @@ const unsigned char gImage_2in66bb[5630] = { /*0X00,0X01,0X98,0X00,0X28,0X01,*/
const unsigned char gImage_3in52[10800] = { /* 0X81,0X01,0X68,0X01,0XF0,0X00, */
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X00,
0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XF0,0X00,0X00,0X00,
0X00,0X7F,0XFF,0XFF,0XFF,0XC0,0X7F,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X7F,
0XFF,0XFF,0XFF,0XC0,0X7F,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,
0XFF,0XC0,0X7F,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X70,0X7C,
0X00,0X00,0X00,0X3F,0XFF,0XFC,0X00,0X00,0X70,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XC0,
0X7F,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XF0,0XFE,0X00,0X00,
0X00,0X3F,0XFF,0XF0,0X00,0X01,0XFC,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XE0,0X7F,0XFF,
0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XF1,0XFF,0X00,0X00,0X00,0X3F,
0XFF,0XE0,0X00,0X07,0XFF,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XE0,0X3F,0XFF,0XFF,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XF3,0XFF,0X00,0X00,0X00,0X3F,0XFF,0XC0,
0X00,0X1F,0XFF,0X80,0X00,0X7F,0XFF,0XFF,0XFF,0XF0,0X1F,0XFF,0XFF,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X00,0X03,0XF3,0XEF,0X80,0X00,0X00,0X3F,0XFF,0X80,0X00,0X7F,
0XFF,0XEC,0X00,0X7F,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X00,0X03,0XC3,0XC7,0X80,0X00,0X00,0X3F,0XFF,0X00,0X01,0XFF,0XFF,0XFE,
0X00,0X7F,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X00,0X03,0XC3,0XC7,0X80,0X00,0X00,0X3F,0XFE,0X00,0X07,0XFF,0XFF,0XFE,0X00,0X7F,
0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X03,
0XC7,0X87,0X80,0X00,0X00,0X3F,0XFC,0X00,0X0F,0XFF,0X87,0XFF,0X00,0X7F,0XFF,0XFF,
0XFF,0XC0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XC7,0X87,
0X80,0X00,0X00,0X3F,0XFC,0X00,0X1F,0XFE,0X00,0XFF,0X80,0X7F,0XFF,0XFF,0XFF,0XC0,
0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0X8F,0X80,0X00,
0X00,0X3F,0XF8,0X00,0X1F,0XFE,0X00,0X7F,0XC0,0X7F,0XFF,0XFF,0XFF,0XC0,0X00,0X00,
0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0X1F,0X00,0X00,0X00,0X3F,
0XF8,0X00,0X1F,0XFF,0X80,0X7F,0XE0,0X7F,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X1F,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0X1F,0X00,0X00,0X00,0X3F,0XF0,0X00,
0X0F,0XFF,0XE0,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X1F,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0XFE,0X1E,0X00,0X00,0X00,0X3F,0XF0,0X00,0X01,0XFF,
0XFC,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X38,0X1C,0X00,0X00,0X00,0X3F,0XE0,0X00,0X00,0X7F,0XFF,0X00,
0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XE0,0X00,0X00,0X1F,0XFF,0X80,0X00,0X7F,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X3F,0XC0,0X00,0X00,0X07,0XFF,0X80,0X00,0X7F,0XFF,0XFF,
0XFF,0XFF,0XF0,0X7F,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X3F,0XC0,0X3F,0XF0,0X01,0XFF,0X80,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,
0X00,0X7D,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0X80,0X00,
0X00,0X3F,0XC0,0X1F,0XFC,0X07,0XFF,0X80,0X00,0X7F,0XFF,0XFF,0XFF,0XFC,0X00,0X78,
0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X3F,
0XC0,0X0F,0XFF,0X1F,0XFF,0X80,0X00,0X7F,0XFF,0XFF,0XFF,0XF8,0X00,0X70,0X7F,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X3F,0X80,0X07,
0XFF,0XE7,0XFE,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XF0,0X00,0X60,0X3F,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X3F,0X80,0X03,0XFF,0XF9,
0XE0,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XE0,0X00,0X70,0X3F,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X03,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X3F,0X80,0X01,0XFF,0XFF,0X00,0X00,
0X00,0X7F,0XFF,0XFF,0XFF,0XE0,0X00,0X70,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0X80,0X00,0XDF,0XFF,0XC0,0X00,0X00,0X7F,
0XFF,0XFF,0XFF,0XE0,0X00,0X78,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X3F,0X80,0X00,0X07,0XFF,0XF8,0X00,0X00,0X7F,0XFF,0XFF,
0XFF,0XC0,0X70,0X78,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X3F,0X80,0X00,0X00,0XFF,0XFE,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XC0,
0XF0,0X78,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XC2,0X00,0X00,
0X00,0X3F,0X80,0X00,0X00,0X3F,0XFF,0X80,0X00,0X7F,0XFF,0XFF,0XFF,0XC0,0XF0,0X78,
0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XC6,0X00,0X00,0X00,0X3F,
0X80,0X00,0X00,0X0F,0XFF,0X80,0X00,0X7F,0XFF,0XFF,0XFF,0XC0,0XF0,0X78,0X1F,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XCF,0X00,0X00,0X00,0X3F,0X80,0X00,
0X00,0X3F,0XFF,0X80,0X00,0X7F,0XFF,0XFF,0XFF,0XC0,0XF0,0X78,0X1F,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XCF,0X00,0X00,0X00,0X3F,0X80,0X00,0X00,0XFF,
0XFF,0X80,0X00,0X7F,0XFF,0XFF,0XFF,0XC0,0XF0,0X70,0X1F,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X00,0X03,0XF3,0XC7,0X80,0X00,0X00,0X3F,0X80,0X00,0X07,0XFF,0XFE,0X00,
0X00,0XFF,0XFF,0XFF,0XFF,0XC0,0X70,0X60,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X00,0X03,0XC3,0XC7,0X80,0X00,0X00,0X3F,0X80,0X00,0X1F,0XFF,0XF0,0X00,0X00,0XFF,
0XFF,0XFF,0XFF,0XC0,0X10,0X40,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X03,
0XC3,0XC7,0X80,0X00,0X00,0X3F,0X80,0X00,0X1F,0XFF,0X80,0X00,0X00,0XFF,0XFF,0XFF,
0XFF,0XE0,0X00,0X00,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XC3,0XC7,
0X80,0X00,0X00,0X3F,0X80,0X00,0X1F,0XFE,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XE0,
0X00,0X00,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XC3,0XC7,0X80,0X00,
0X00,0X3F,0X80,0X00,0X1F,0XFF,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,
0X7F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XE3,0XCF,0X80,0X00,0X00,0X3F,
0X80,0X00,0X0F,0XFF,0XC0,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0XFF,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0X00,0X00,0X00,0X3F,0X80,0X00,
0X03,0XFF,0XF8,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X01,0XFF,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0X00,0X00,0X00,0X3F,0X80,0X00,0X00,0X7F,
0XFF,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X03,0XFF,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0XFF,0XFE,0X00,0X00,0X00,0X3F,0X80,0X00,0X00,0X1F,0XFF,0X80,
0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X0F,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X3F,0XFC,0X00,0X00,0X00,0X3F,0X80,0X00,0X00,0X3F,0XFF,0X80,0X07,0XFF,
0XFF,0XFF,0XFF,0XFF,0XF8,0X7F,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X0F,0XE0,0X00,0X00,0X00,0X3F,0X80,0X00,0X01,0XFF,0XFF,0X80,0X0F,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X3F,0X80,0X00,0X0F,0XFF,0XFF,0X80,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,
0XC0,0X1F,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X02,0X00,0X00,0X80,0X00,
0X00,0X3F,0X80,0X00,0X0F,0XFF,0XFE,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X03,
0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X80,0X03,0X80,0X00,0X00,0X3F,
0X80,0X00,0X0F,0XFF,0XF0,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X01,0XFF,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XE0,0X0F,0X80,0X00,0X00,0X3F,0X80,0X00,
0X0F,0XFF,0X80,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X7F,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X00,0X03,0XF0,0X3F,0X80,0X00,0X00,0X3F,0X80,0X00,0X0F,0XFC,
0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X7F,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X00,0X03,0XFC,0XFF,0X80,0X00,0X00,0X3F,0X80,0X00,0X0F,0XE0,0X00,0X01,
0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X00,0X01,0XFF,0XFF,0X00,0X00,0X00,0X3F,0X80,0X00,0X0F,0X00,0X00,0X03,0XFF,0XFF,
0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X7F,0XFC,0X00,0X00,0X00,0X3F,0X80,0X00,0X08,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XC0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XF0,
0X00,0X00,0X00,0X3F,0X80,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,
0X3F,0XE0,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XF0,0X00,0X00,
0X00,0X3F,0X80,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X7F,0XF0,
0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFC,0X00,0X00,0X00,0X3F,
0X80,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0XFF,0XF8,0X1F,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0X00,0X00,0X00,0X3F,0X80,0X00,
0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0XFF,0XF8,0X1F,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X00,0X03,0XFC,0X7F,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0XFF,0XF8,0X1F,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X00,0X03,0XF0,0X1F,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0XFF,0XF8,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X00,0X03,0XC0,0X07,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XF0,0X7F,0XF0,0X7F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X03,
0X00,0X01,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XF8,0X00,0X00,0X00,0X07,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,
0X00,0X00,0X00,0X07,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,
0X00,0X07,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X07,
0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X40,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X07,0XFC,0X00,
0X00,0X00,0X00,0X00,0X01,0XF3,0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X07,0XFC,0X00,0X00,0X00,
0X00,0X00,0X01,0XF3,0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X07,0XFC,0X00,0X00,0X00,0X00,0X00,
0X01,0XF3,0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X07,0XFC,0X00,0X00,0X00,0X00,0X00,0X01,0XF3,
0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X87,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X40,0X00,0X00,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XC0,0X00,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XDF,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XF8,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X1F,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X00,0X3F,0XFC,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X00,0X3F,0XFE,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X00,0X7F,0XFE,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X7C,
0X3F,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XF8,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XE0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0XF8,0X1F,0X00,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XE0,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,
0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0XF0,0X0F,0X00,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XC0,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,
0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0XF0,0X0F,0X00,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0X80,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X7F,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0XF0,0X0F,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0X81,0XE0,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0XF0,0X78,0X7F,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X00,0XF0,0X0F,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X07,
0XF8,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XC1,0XF0,0X7C,0X3F,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X00,0XF0,0X0F,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,0XFC,0X3F,
0XFF,0XFF,0XFF,0XFF,0XFF,0XC1,0XF0,0X7C,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X00,0XF0,0X0F,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,0XFC,0X3F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XC1,0XF0,0X7C,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,
0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XC1,0XF0,0X7C,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,
0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X07,0XF8,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,
0X70,0X38,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0X80,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0X81,0XE0,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X30,0X00,
0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0X80,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X38,0X00,0X1F,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0XC0,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X38,0X00,0X1F,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XE0,
0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X38,0X00,0X3F,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XF8,0X07,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X3C,0X00,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XF8,0X3C,0X00,0X7F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFC,0X3E,0X00,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0X83,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X3F,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X1F,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XF0,0X00,0X0F,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XF8,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,
0XE0,0X00,0X07,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XE0,0X00,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XE0,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,
0X07,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFE,0X00,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XC0,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X03,0XFF,
0XFF,0XFF,0XFC,0X00,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0X80,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X03,0XFF,0XFF,0XFF,
0XFC,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0X81,0XE0,0X7F,0XFF,0XFF,0XFF,0XFF,0XC0,0X3E,0X01,0XFF,0XFF,0XFF,0XFC,0X00,
0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X07,
0XF8,0X3F,0XFF,0XFF,0XFF,0XFF,0X80,0XFF,0X01,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,
0X1F,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,0XFC,0X3F,
0XFF,0XFF,0XFF,0XFF,0X80,0XFF,0X81,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X3F,0XFF,
0XFF,0XFF,0XFF,0XFE,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,0XFC,0X3F,0XFF,0XFF,
0XFF,0XFF,0X81,0XFF,0X81,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,
0XFF,0XFF,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,
0X81,0XFF,0X81,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X07,0XF8,0X3F,0XFF,0XFF,0XFF,0XFF,0X81,0XFF,
0X81,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0XFF,0XFC,0X00,0X00,0X1F,0XFF,0X80,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0X81,0XE0,0X7F,0XFF,0XFF,0XFF,0XFF,0X81,0XFF,0X81,0XFF,
0XFF,0XFF,0XFC,0X00,0X00,0X00,0XFF,0XC0,0X00,0X00,0X01,0XFF,0X80,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0X80,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0X81,0XFF,0X81,0XFF,0XFF,0XFF,
0XFC,0X00,0X00,0X01,0XFF,0X80,0X00,0X00,0X00,0XFF,0XC0,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0XC0,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0X81,0XFF,0X81,0XFF,0XFF,0XFF,0XFC,0X00,
0X00,0X01,0XFF,0X00,0X00,0X00,0X00,0X7F,0XC0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XE0,
0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0X81,0XFF,0X81,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X01,
0XFE,0X00,0X00,0X00,0X00,0X3F,0XC0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XF8,0X07,0XFF,
0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X01,0XFE,0X00,
0X00,0X00,0X00,0X3F,0XC0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0X80,0X00,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X01,0XFE,0X00,0X00,0X00,
0X00,0X3F,0XC0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XF1,0XF3,0XFF,0XFF,0XFF,0XFF,0XFF,
0X80,0X00,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X01,0XFE,0X00,0X00,0X00,0X00,0X3F,
0XC0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XC1,0XF0,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,
0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X01,0XFE,0X00,0X00,0X00,0X00,0X3F,0XC0,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0X81,0XF0,0X7F,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,
0X1F,0XFF,0XFC,0X00,0X00,0X01,0XFF,0X00,0X00,0X00,0X00,0X7F,0XC0,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0X81,0XF0,0X7F,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X1F,0XFF,
0XFC,0X00,0X00,0X01,0XFF,0X80,0X00,0X00,0X00,0XFF,0XC0,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0X07,0XF8,0X3F,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X1F,0XFF,0XFC,0X00,
0X00,0X00,0XFF,0XC0,0X00,0X00,0X01,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,
0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,
0XFF,0XFC,0X00,0X00,0X1F,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,0XFC,0X3F,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X7F,0XFF,
0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,0XFC,0X3F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,
0XFF,0XFF,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X07,0XF8,0X3F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFE,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X81,0XE0,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0X80,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X7F,
0XFF,0XFF,0XFC,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0XC0,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X7D,0XFF,0XFF,
0XFC,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0XE0,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X78,0XFF,0XFF,0XFC,0X00,
0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFC,
0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X70,0X7F,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFE,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X60,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X03,
0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XE0,0X00,0X70,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XE0,0X00,0X70,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,
0X00,0X78,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X70,0X78,
0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0XF0,0X78,0X1F,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFC,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0XF0,0X78,0X1F,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X00,0X03,0XFC,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0XF0,0X78,0X1F,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X00,0X03,0XFC,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0XF0,0X78,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X00,0X03,0XFC,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XC0,0XF0,0X70,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X03,
0XFC,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XF0,0X3D,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XC0,0X70,0X60,0X1F,0XFF,0XFC,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XC0,0X38,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,
0X10,0X40,0X3F,0XFF,0XFC,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0X80,0X30,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,
0X3F,0XFF,0XFC,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0X80,0X38,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X3F,0XFF,
0XFC,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0X06,0X3C,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X7F,0XFF,0XFC,0X00,
0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0E,
0X3C,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0XFF,0XFF,0XFC,0X00,0X00,0X01,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0E,0X3C,0X3F,
0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X01,0XFF,0XFF,0XFC,0X00,0X00,0X01,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0E,0X3C,0X3F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFE,0X00,0X03,0XFF,0XFF,0XFC,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X06,0X38,0X3F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0X80,0X0F,0XFF,0XFF,0XFC,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X82,0X20,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XF8,0X7F,0XFF,0XFF,0XFC,0X00,0X00,0X01,0XFF,0XF8,0X00,0X03,0XFC,0X00,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0X80,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFC,0X00,0X00,0X00,0X7F,0XFE,0X00,0X03,0XFC,0X00,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0XC0,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFC,0X00,0X00,0X00,0X1F,0XFF,0X80,0X03,0XFC,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0XE0,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,
0X00,0X00,0X07,0XFF,0XC0,0X03,0XFC,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XF8,
0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,
0X03,0XFF,0XF0,0X03,0XFC,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0XFF,
0XFC,0X03,0XFC,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X3F,0XFE,0X03,
0XFC,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X1F,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X1F,0XFF,0X83,0XFC,0X00,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X1F,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X07,0XFF,0XE3,0XFC,0X00,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XF0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X01,0XFF,0XFB,0XFC,0X00,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XF0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XF0,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XF0,0X00,
0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X0F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XF0,0X00,0X03,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X03,0XFF,0XFC,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X1F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFC,0X00,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0X80,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFC,0X00,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,
0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFC,0X00,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0X83,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X1F,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFC,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0X83,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X1F,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0X83,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0X83,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X7F,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XC0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X7F,0X80,0X00,0X00,0X7F,
0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,
0X3F,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X03,0XFF,0XF0,0X00,0X00,0X7F,0X80,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XC0,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0XFF,0XFF,
0XFF,0XFF,0XFC,0X00,0X00,0X00,0X0F,0XFF,0XFC,0X00,0X00,0X7F,0X80,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0X80,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0XFF,0XFF,0XFF,0XFF,
0XFC,0X00,0X00,0X00,0X1F,0XFF,0XFF,0X00,0X00,0X7F,0X80,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,
0X00,0X00,0X3F,0XFF,0XFF,0X80,0X00,0X7F,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,
0X7F,0XFF,0XFF,0XC0,0X00,0X7F,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X07,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X7F,0XFF,
0XFF,0XF0,0X00,0X7F,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XF0,0X7F,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XF8,
0X00,0X7F,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0X00,0X00,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFC,0X00,0X7F,
0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X8F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,
0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0XFF,0XE0,0X7F,0XFE,0X00,0X7F,0X80,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XC7,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,
0X1F,0XFF,0XFC,0X00,0X00,0X01,0XFF,0X80,0X1F,0XFF,0X00,0X7F,0X80,0X00,0X00,0X3F,
0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X1F,0XFF,
0XFC,0X00,0X00,0X01,0XFF,0X00,0X07,0XFF,0X80,0X7F,0X80,0X00,0X00,0X3F,0XFF,0XFF,
0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFC,0X00,
0X00,0X01,0XFE,0X00,0X03,0XFF,0XE0,0X7F,0X80,0X00,0X00,0X3F,0XFF,0XFF,0X80,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X01,
0XFE,0X00,0X01,0XFF,0XF0,0X7F,0X80,0X00,0X00,0X3F,0XFF,0XFF,0X80,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X01,0XFE,0X00,
0X00,0X7F,0XF8,0X7F,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X01,0XFE,0X00,0X00,0X3F,
0XFC,0X7F,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X01,0XFE,0X00,0X00,0X1F,0XFE,0X7F,
0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X01,0XFE,0X00,0X00,0X0F,0XFF,0X7F,0X80,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFC,0X00,0X00,0X01,0XFF,0X00,0X00,0X07,0XFF,0XFF,0X80,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X0F,0XC7,0XFF,0XFF,
0XFC,0X00,0X00,0X00,0XFF,0X80,0X00,0X03,0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X0F,0XC1,0XFF,0XFF,0XFC,0X00,
0X00,0X00,0XFF,0XC0,0X00,0X00,0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X00,
0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X0F,0XC0,0XFF,0XFF,0XFC,0X00,0X00,0X00,
0XFF,0XF8,0X00,0X00,0X7F,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X0F,0XC0,0X7F,0XFF,0XFC,0X00,0X00,0X00,0X7F,0XFE,
0X00,0X00,0X3F,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XF8,0X00,0X3F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XE0,0X0F,0XC0,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X7F,0XFE,0X00,0X00,
0X1F,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XE0,0X3F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XE0,0X0F,0XC0,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X3F,0XFE,0X00,0X00,0X0F,0XFF,
0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,
0X0F,0XC0,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X1F,0XFE,0X00,0X00,0X07,0XFF,0X80,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XF0,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X3F,0XF0,
0X1F,0XFF,0XFC,0X00,0X00,0X00,0X0F,0XFE,0X00,0X00,0X03,0XFF,0X80,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X7F,0XF8,0X1F,0XFF,
0XFC,0X00,0X00,0X00,0X07,0XFE,0X00,0X00,0X00,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0XFF,0XF8,0X1F,0XFF,0XFC,0X00,
0X00,0X00,0X01,0XFE,0X00,0X00,0X00,0X7F,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X00,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0XFF,0XF8,0X1F,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X7E,0X00,0X00,0X00,0X3F,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X00,0X0F,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0XFF,0XF8,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X06,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XF0,0X00,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XC0,0X7F,0XF8,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XC0,0X3F,0XE0,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XE0,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,
0X00,0X00,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XFC,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,
0X3F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X3F,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X7F,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X00,
0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0XFF,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X01,0X00,0X00,0X08,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X07,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X01,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X07,
0X00,0X00,0X1C,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X7F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X00,0X07,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X0F,0X80,0X00,
0X3E,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XC0,0X1F,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X1F,0XC0,0X00,0X7F,0X00,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X3F,0XE0,0X00,0XFF,0X80,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X7F,0XF8,0X03,0XFF,0XC0,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X1F,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X3F,0XFC,0X07,0XFF,0X80,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X1F,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X1F,0XFE,0X0F,0XFF,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X0F,0XFF,0X1F,0XFE,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X07,
0XFF,0XBF,0XFC,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,
0XF8,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XC0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XE0,0X00,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,
0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XC0,0X00,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,
0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0X80,0X00,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X7F,0XFF,0XFF,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X1F,0XFF,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X87,
0XF8,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X3F,0XFF,0X80,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X8F,0XFC,0X3F,
0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X7F,0XFF,0XC0,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,0XFC,0X3F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XE0,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,
0XE0,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XE0,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0XF0,0X00,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X07,0XF8,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,
0X7F,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X03,0XFF,0XBF,0XF8,0X00,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0X01,0XE0,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,
0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X07,0XFF,0X1F,0XFC,0X00,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0X80,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X1F,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X1F,0XFE,0X0F,0XFF,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0X80,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X1F,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X3F,0XFC,0X07,0XFF,0X80,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XE0,
0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X7F,0XF8,0X03,0XFF,0XC0,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XF8,0X07,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X3F,
0XF0,0X01,0XFF,0X80,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X1F,0XE0,0X00,
0XFF,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XC0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X0F,0XC0,0X00,0X7E,0X00,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,
0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X07,0X00,0X00,0X1C,0X00,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XC0,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X02,0X00,0X00,0X08,0X00,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0X80,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X07,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,
0XE0,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0X03,0XC0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFE,0X00,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X8F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X01,0XC0,
0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0X87,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X01,0XC0,0X00,0X00,
0X1F,0XFF,0XFC,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFE,0X01,0XC0,0X00,0X00,0X1F,0XFF,
0XFC,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFE,0X01,0XC0,0X00,0X00,0X1F,0XFF,0XFC,0X00,
0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XFE,0X01,0XC0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,
0X3F,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0XFF,0X03,0XC0,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X7F,0XFF,
0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0X87,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,
0XFF,0XFF,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0XFF,0XFC,0X00,0X00,0X1F,0XFF,
0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0XFF,0XC0,0X00,0X00,0X01,0XFF,0X80,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFE,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFC,0X00,0X00,0X01,0XFF,0X80,0X00,0X00,0X00,0XFF,0XC0,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0XE0,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFC,0X00,0X00,0X01,0XFF,0X00,0X00,0X00,0X00,0X7F,0XC0,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0X80,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X1F,0XFF,0XFC,0X00,
0X00,0X01,0XFE,0X00,0X00,0X00,0X00,0X3F,0XC0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X80,
0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFC,0X01,0XFF,0XF8,0X1F,0XFF,0XFC,0X00,0X00,0X01,
0XFE,0X00,0X00,0X00,0X00,0X3F,0XC0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X00,0X00,0X7F,
0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X7F,0XF8,0X1F,0XFF,0XFC,0X00,0X00,0X01,0XFE,0X00,
0X00,0X00,0X00,0X3F,0XC0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0E,0X38,0X7F,0XFF,0XFF,
0XFF,0XFF,0XE0,0X00,0X3F,0XF8,0X1F,0XFF,0XFC,0X00,0X00,0X01,0XFE,0X00,0X00,0X00,
0X00,0X3F,0XC0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0E,0X3C,0X3F,0XFF,0XFF,0XFF,0XFF,
0XE0,0X00,0X0F,0XF8,0X1F,0XFF,0XFC,0X00,0X00,0X01,0XFE,0X00,0X00,0X00,0X00,0X3F,
0XC0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0E,0X3C,0X3F,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,
0X07,0XF8,0X1F,0XFF,0XFC,0X00,0X00,0X01,0XFF,0X00,0X00,0X00,0X00,0X7F,0XC0,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0X0E,0X3C,0X3F,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X03,0XF8,
0X1F,0XFF,0XFC,0X00,0X00,0X01,0XFF,0X80,0X00,0X00,0X00,0XFF,0XC0,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0X06,0X18,0X3F,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X01,0XF8,0X1F,0XFF,
0XFC,0X00,0X00,0X00,0XFF,0XC0,0X00,0X00,0X01,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0X87,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0X80,0X30,0X00,0XF8,0X1F,0XFF,0XFC,0X00,
0X00,0X00,0XFF,0XFC,0X00,0X00,0X1F,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X87,
0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0X80,0XFE,0X00,0X78,0X1F,0XFF,0XFC,0X00,0X00,0X00,
0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XC7,0X80,0XFF,
0XFF,0XFF,0XFF,0XFF,0X81,0XFF,0X00,0X38,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X7F,0XFF,
0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XF7,0XC1,0XFF,0XFF,0XFF,
0XFF,0XFF,0X81,0XFF,0XC0,0X18,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,
0XFF,0XFE,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0X81,0XFF,0XE0,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFC,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X81,0XFF,
0XF0,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0XFF,0XF8,0X00,
0X1F,0XFF,0XFC,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X3F,0XFC,0X00,0X1F,0XFF,
0XFC,0X00,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X0F,0XFE,0X00,0X1F,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFE,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X0F,0XFF,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X03,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XE0,0X0F,0XFF,0X80,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XE0,0X0F,0XFF,0XC0,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XF0,0X0F,0XFF,0XE0,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X0F,
0XFF,0XF0,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0X7F,0XFF,0XBF,0XFF,0XFF,0XFF,0XFF,0XFE,0X0F,0XFF,0XF8,
0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XE0,0X00,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0X3F,0XFE,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0X1F,0XF8,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,
0XF0,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X07,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X03,0XC0,0X3F,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X0F,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X01,0X00,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XE0,0X1F,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,
0XFF,0XFC,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XC0,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,
0X81,0XFF,0X80,0X03,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFE,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XE0,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0X81,0XFE,
0X00,0X01,0XFF,0XFF,0XFC,0X00,0X00,0X01,0XFE,0X00,0X7F,0XFF,0XFF,0XFF,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XF0,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0X81,0XFC,0X00,0X00,
0XFF,0XFF,0XFC,0X00,0X00,0X01,0XFE,0X00,0X7F,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0XFC,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0X81,0XF8,0X00,0X00,0X7F,0XFF,
0XFC,0X00,0X00,0X01,0XFE,0X00,0X7F,0XFE,0X1F,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,
0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0X81,0XF8,0X00,0X00,0X3F,0XFF,0XFC,0X00,
0X00,0X01,0XFE,0X00,0XFF,0XF0,0X03,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0X80,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0X81,0XF8,0X00,0X00,0X3F,0XFF,0XFC,0X00,0X00,0X01,
0XFE,0X00,0XFF,0XC0,0X00,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0X80,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0XFF,0X81,0XF0,0X00,0X00,0X3F,0XFF,0XFC,0X00,0X00,0X01,0XFF,0X00,
0XFF,0X80,0X00,0X7F,0XC0,0X00,0X00,0X3F,0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0XFF,0X81,0XF0,0X1F,0XE0,0X1F,0XFF,0XFC,0X00,0X00,0X01,0XFF,0X00,0XFF,0X80,
0X00,0X7F,0XC0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0X81,0XF0,0X3F,0XF0,0X1F,0XFF,0XFC,0X00,0X00,0X00,0XFF,0X00,0XFF,0X00,0X00,0X3F,
0XC0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X81,0XF0,
0X7F,0XF8,0X1F,0XFF,0XFC,0X00,0X00,0X00,0XFF,0X80,0XFF,0X00,0X00,0X3F,0XC0,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XF1,0XF3,0XFF,0XFF,0XFF,0XFF,0XFF,0X81,0XF0,0X7F,0XF8,
0X1F,0XFF,0XFC,0X00,0X00,0X00,0XFF,0X80,0XFF,0X00,0X00,0X3F,0XC0,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0XC1,0XF0,0XFF,0XFF,0XFF,0XFF,0XFF,0X81,0XF0,0X7F,0XF8,0X1F,0XFF,
0XFC,0X00,0X00,0X00,0X7F,0XC0,0X7F,0X00,0X00,0X3F,0XC0,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0X81,0XF0,0X7F,0XFF,0XFF,0XFF,0XFF,0X81,0XF8,0X7F,0XF8,0X1F,0XFF,0XFC,0X00,
0X00,0X00,0X7F,0XE0,0X7F,0X00,0X00,0X7F,0XC0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X81,
0XF0,0X7F,0XFF,0XFF,0XFF,0XFF,0X80,0X78,0X7F,0XF0,0X1F,0XFF,0XFC,0X00,0X00,0X00,
0X3F,0XF0,0X3F,0X80,0X00,0X7F,0XC0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X07,0XF8,0X3F,
0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X3F,0X80,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X3F,0XFC,
0X3F,0XC0,0X00,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,0XFC,0X3F,0XFF,0XFF,
0XFF,0XFF,0X80,0X00,0X1F,0X80,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X1F,0XFF,0X1F,0XE0,
0X03,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,
0X80,0X00,0X1F,0X80,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XF0,0X3F,0XFF,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0F,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0X80,0X00,
0X3F,0X80,0X7F,0XFF,0XFC,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0X07,0XF8,0X3F,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X3F,0X80,
0XFF,0XFF,0XFC,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0X81,0XE0,0X7F,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X3F,0X81,0XFF,0XFF,
0XFC,0X00,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0X80,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X3F,0X83,0XFF,0XFF,0XFC,0X00,
0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XC0,
0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XBF,0X87,0XFF,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X7F,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XE0,0X01,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X1F,
0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFC,0X0F,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,
0XFF,0X80,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFE,0X00,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XC0,0X00,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFE,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0XE0,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X7F,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0X80,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X3F,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X80,
0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X1F,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X00,0X00,0X7F,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X7C,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0E,0X38,0X7F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X7F,0X80,0X03,
0XFF,0XC0,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0E,0X3C,0X3F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XE0,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X03,0XFF,0XE0,0X0F,0XFF,0XE0,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X0E,0X3C,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XF0,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X07,0XFF,0XF0,0X1F,0XFF,0XF8,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0X0E,0X3C,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,
0X7F,0XFF,0XFC,0X00,0X00,0X00,0X1F,0XFF,0XF8,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0X06,0X18,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFC,0X00,0X00,0X00,0X3F,0XFF,0XFC,0X7F,0XFF,0XFE,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0X87,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,
0X00,0X00,0X3F,0XFF,0XFE,0XFF,0XFF,0XFE,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X87,
0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,
0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XC7,0X80,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X7F,0XFF,
0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XF7,0XC1,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,
0X87,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0X0F,0XF8,0X07,0XFF,0XFF,0XFC,0X00,0X00,0X00,0XFF,0XC0,0XFF,0XFE,0X01,0XFF,
0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X03,
0XF0,0X01,0XFF,0XFF,0XFC,0X00,0X00,0X00,0XFF,0X80,0X3F,0XFC,0X00,0X7F,0X80,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X01,0XE0,0X00,
0XFF,0XFF,0XFC,0X00,0X00,0X01,0XFF,0X00,0X1F,0XF8,0X00,0X7F,0XC0,0X00,0X00,0X3F,
0XFF,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0XC0,0X00,0XFF,0XFF,
0XFC,0X00,0X00,0X01,0XFE,0X00,0X1F,0XF0,0X00,0X3F,0XC0,0X00,0X00,0X3F,0XFF,0XFF,
0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X80,0X00,0X7F,0XFF,0XFC,0X00,
0X00,0X01,0XFE,0X00,0X0F,0XF0,0X00,0X3F,0XC0,0X00,0X00,0X3F,0XFF,0XFF,0X80,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X3F,0XFF,0XFC,0X00,0X00,0X01,
0XFE,0X00,0X0F,0XF0,0X00,0X3F,0XC0,0X00,0X00,0X3F,0XFF,0XFF,0X80,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X3F,0XFF,0XFC,0X00,0X00,0X01,0XFE,0X00,
0X0F,0XF0,0X00,0X3F,0XC0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XC0,0X00,0X00,0X80,0X3F,0XFF,0XFC,0X00,0X00,0X01,0XFE,0X00,0X0F,0XF0,
0X00,0X3F,0XC0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0X80,0X70,0X07,0XF0,0X1F,0XFF,0XFC,0X00,0X00,0X01,0XFE,0X00,0X0F,0XF0,0X00,0X3F,
0XC0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0XF8,
0X07,0XF0,0X1F,0XFF,0XFC,0X00,0X00,0X01,0XFF,0X00,0X0F,0XF0,0X00,0X7F,0XC0,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0X87,0XFF,0XFF,0XFF,0XFF,0XFF,0X81,0XFC,0X0F,0XF8,
0X1F,0XFF,0XFC,0X00,0X00,0X01,0XFF,0X80,0X0F,0XF0,0X00,0X7F,0XC0,0X00,0X00,0X3F,
0XFF,0XFF,0XF8,0X1C,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0X81,0XFC,0X0F,0XF8,0X1F,0XFF,
0XFC,0X00,0X00,0X00,0XFF,0XC0,0X0F,0XF0,0X00,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,
0XF0,0X08,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0X81,0XFC,0X0F,0XF8,0X1F,0XFF,0XFC,0X00,
0X00,0X00,0XFF,0XF8,0X00,0X00,0X03,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XE0,0X00,
0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0X81,0XFC,0X0F,0XF8,0X1F,0XFF,0XFC,0X00,0X00,0X00,
0XFF,0XF8,0X00,0X00,0X0F,0XFF,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XE0,0X00,0X00,0X7F,
0XFF,0XFF,0XFF,0XFF,0X80,0XFC,0X0F,0XF0,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X7F,0XF8,
0X00,0X00,0X0F,0XFF,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XC1,0XC0,0XF8,0X3F,0XFF,0XFF,
0XFF,0XFF,0X80,0X7C,0X0F,0XE0,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X3F,0XF8,0X00,0X00,
0X0F,0XFF,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XC3,0XE1,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,
0XC0,0X3F,0XFF,0X80,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X3F,0XF8,0X00,0X00,0X0F,0XFE,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XC3,0XE1,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XC0,0X3F,
0XFF,0X80,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X1F,0XF8,0X00,0X00,0X0F,0XFC,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XC3,0XE1,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XC0,0X3F,0XFF,0X80,
0X3F,0XFF,0XFC,0X00,0X00,0X00,0X0F,0XF8,0X00,0X00,0X0F,0XF8,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XC3,0XE1,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XE0,0X3F,0XFF,0X80,0X7F,0XFF,
0XFC,0X00,0X00,0X00,0X03,0XF8,0X00,0X00,0X0F,0XF0,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XC3,0XE1,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XF0,0X3F,0XFF,0X80,0XFF,0XFF,0XFC,0X00,
0X00,0X00,0X00,0XF8,0X00,0X00,0X0F,0XC0,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XC3,0XE1,
0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XF8,0X3F,0XFF,0X80,0XFF,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X0E,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XC0,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0X83,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XC0,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XDF,0XFF,0X8F,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XC0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X3F,0XFF,0XFF,0XC0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
};
const unsigned char gImage_3in7[33606] = { /*0X00,0X02,0X18,0X01,0XE0,0X01,*/
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,

View file

@ -32,6 +32,11 @@
#ifndef _IMAGEDATA_H_
#define _IMAGEDATA_H_
// colour_4
extern const unsigned char gImage_1in64g[];
extern const unsigned char gImage_3in0g[];
extern const unsigned char gImage_7in3g[];
// ImageData2.c
extern const unsigned char gImage_2in13b_V4b[];
extern const unsigned char gImage_2in13b_V4r[];
@ -72,6 +77,7 @@ extern const unsigned char gImage_2in66[];
extern const unsigned char gImage_2in66bb[];
extern const unsigned char gImage_2in66br[];
extern const unsigned char gImage_3in52[];
extern const unsigned char gImage_3in7[]; //4 Gray
extern const unsigned char gImage_4in01[];

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