You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

598 lines
21 KiB
C

/**
******************************************************************************
* @file epd.h
* @author Waveshare Team
* @version V1.0.0
* @date 23-January-2018
* @brief This file provides e-Paper driver functions
* void EPD_SendCommand(byte command);
* void EPD_SendData(byte data);
* void EPD_WaitUntilIdle();
* void EPD_Send_1(byte c, byte v1);
* void EPD_Send_2(byte c, byte v1, byte v2);
* void EPD_Send_3(byte c, byte v1, byte v2, byte v3);
* void EPD_Send_4(byte c, byte v1, byte v2, byte v3, byte v4);
* void EPD_Send_5(byte c, byte v1, byte v2, byte v3, byte v4, byte v5);
* void EPD_Reset();
* void EPD_dispInit();
*
* varualbes:
* EPD_dispLoad; - pointer on current loading function
* EPD_dispIndex; - index of current e-Paper
* EPD_dispInfo EPD_dispMass[]; - array of e-Paper properties
*
******************************************************************************
*/
/* SPI pin definition --------------------------------------------------------*/
#define PIN_SPI_SCK 13
#define PIN_SPI_DIN 14
#define PIN_SPI_CS 15
#define PIN_SPI_BUSY 25//19
#define PIN_SPI_RST 26//21
#define PIN_SPI_DC 27//22
/* Pin level definition ------------------------------------------------------*/
#define LOW 0
#define HIGH 1
#define GPIO_PIN_SET 1
#define GPIO_PIN_RESET 0
#define UBYTE uint8_t
#define UWORD uint16_t
#define UDOUBLE uint32_t
void EPD_initSPI()
{
//Serial.println(SPI._spi_num);
//Serial.println(SPI.get);
pinMode(PIN_SPI_BUSY, INPUT);
pinMode(PIN_SPI_RST , OUTPUT);
pinMode(PIN_SPI_DC , OUTPUT);
pinMode(PIN_SPI_SCK, OUTPUT);
pinMode(PIN_SPI_DIN, OUTPUT);
pinMode(PIN_SPI_CS , OUTPUT);
digitalWrite(PIN_SPI_CS , HIGH);
digitalWrite(PIN_SPI_SCK, LOW);
//SPI.begin();
}
/* Lut mono ------------------------------------------------------------------*/
byte lut_full_mono[] =
{
0x02, 0x02, 0x01, 0x11, 0x12, 0x12, 0x22, 0x22,
0x66, 0x69, 0x69, 0x59, 0x58, 0x99, 0x99, 0x88,
0x00, 0x00, 0x00, 0x00, 0xF8, 0xB4, 0x13, 0x51,
0x35, 0x51, 0x51, 0x19, 0x01, 0x00
};
byte lut_partial_mono[] =
{
0x10, 0x18, 0x18, 0x08, 0x18, 0x18, 0x08, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x13, 0x14, 0x44, 0x12,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
/* The procedure of sending a byte to e-Paper by SPI -------------------------*/
void EpdSpiTransferCallback(byte data)
{
//SPI.beginTransaction(spi_settings);
digitalWrite(PIN_SPI_CS, GPIO_PIN_RESET);
for (int i = 0; i < 8; i++)
{
if ((data & 0x80) == 0) digitalWrite(PIN_SPI_DIN, GPIO_PIN_RESET);
else digitalWrite(PIN_SPI_DIN, GPIO_PIN_SET);
data <<= 1;
digitalWrite(PIN_SPI_SCK, GPIO_PIN_SET);
digitalWrite(PIN_SPI_SCK, GPIO_PIN_RESET);
}
//SPI.transfer(data);
digitalWrite(PIN_SPI_CS, GPIO_PIN_SET);
//SPI.endTransaction();
}
byte lut_vcom0[] = { 15, 0x0E, 0x14, 0x01, 0x0A, 0x06, 0x04, 0x0A, 0x0A, 0x0F, 0x03, 0x03, 0x0C, 0x06, 0x0A, 0x00 };
byte lut_w [] = { 15, 0x0E, 0x14, 0x01, 0x0A, 0x46, 0x04, 0x8A, 0x4A, 0x0F, 0x83, 0x43, 0x0C, 0x86, 0x0A, 0x04 };
byte lut_b [] = { 15, 0x0E, 0x14, 0x01, 0x8A, 0x06, 0x04, 0x8A, 0x4A, 0x0F, 0x83, 0x43, 0x0C, 0x06, 0x4A, 0x04 };
byte lut_g1 [] = { 15, 0x8E, 0x94, 0x01, 0x8A, 0x06, 0x04, 0x8A, 0x4A, 0x0F, 0x83, 0x43, 0x0C, 0x06, 0x0A, 0x04 };
byte lut_g2 [] = { 15, 0x8E, 0x94, 0x01, 0x8A, 0x06, 0x04, 0x8A, 0x4A, 0x0F, 0x83, 0x43, 0x0C, 0x06, 0x0A, 0x04 };
byte lut_vcom1[] = { 15, 0x03, 0x1D, 0x01, 0x01, 0x08, 0x23, 0x37, 0x37, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
byte lut_red0 [] = { 15, 0x83, 0x5D, 0x01, 0x81, 0x48, 0x23, 0x77, 0x77, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
byte lut_red1 [] = { 15, 0x03, 0x1D, 0x01, 0x01, 0x08, 0x23, 0x37, 0x37, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
/* Sending a byte as a command -----------------------------------------------*/
void EPD_SendCommand(byte command)
{
digitalWrite(PIN_SPI_DC, LOW);
EpdSpiTransferCallback(command);
}
/* Sending a byte as a data --------------------------------------------------*/
void EPD_SendData(byte data)
{
digitalWrite(PIN_SPI_DC, HIGH);
EpdSpiTransferCallback(data);
}
/* Waiting the e-Paper is ready for further instructions ---------------------*/
void EPD_WaitUntilIdle()
{
//0: busy, 1: idle
while(digitalRead(PIN_SPI_BUSY) == 0) delay(100);
}
/* Waiting the e-Paper is ready for further instructions ---------------------*/
void EPD_WaitUntilIdle_high()
{
//1: busy, 0: idle
while(digitalRead(PIN_SPI_BUSY) == 1) delay(100);
}
/* Send a one-argument command -----------------------------------------------*/
void EPD_Send_1(byte c, byte v1)
{
EPD_SendCommand(c);
EPD_SendData(v1);
}
/* Send a two-arguments command ----------------------------------------------*/
void EPD_Send_2(byte c, byte v1, byte v2)
{
EPD_SendCommand(c);
EPD_SendData(v1);
EPD_SendData(v2);
}
/* Send a three-arguments command --------------------------------------------*/
void EPD_Send_3(byte c, byte v1, byte v2, byte v3)
{
EPD_SendCommand(c);
EPD_SendData(v1);
EPD_SendData(v2);
EPD_SendData(v3);
}
/* Send a four-arguments command ---------------------------------------------*/
void EPD_Send_4(byte c, byte v1, byte v2, byte v3, byte v4)
{
EPD_SendCommand(c);
EPD_SendData(v1);
EPD_SendData(v2);
EPD_SendData(v3);
EPD_SendData(v4);
}
/* Send a five-arguments command ---------------------------------------------*/
void EPD_Send_5(byte c, byte v1, byte v2, byte v3, byte v4, byte v5)
{
EPD_SendCommand(c);
EPD_SendData(v1);
EPD_SendData(v2);
EPD_SendData(v3);
EPD_SendData(v4);
EPD_SendData(v5);
}
/* Writting lut-data into the e-Paper ----------------------------------------*/
void EPD_lut(byte c, byte l, byte*p)
{
// lut-data writting initialization
EPD_SendCommand(c);
// lut-data writting doing
for (int i = 0; i < l; i++, p++) EPD_SendData(*p);
}
/* Writting lut-data of the black-white channel ------------------------------*/
void EPD_SetLutBw(byte*c20, byte*c21, byte*c22, byte*c23, byte*c24)
{
EPD_lut(0x20, *c20, c20 + 1);//g vcom
EPD_lut(0x21, *c21, c21 + 1);//g ww --
EPD_lut(0x22, *c22, c22 + 1);//g bw r
EPD_lut(0x23, *c23, c23 + 1);//g wb w
EPD_lut(0x24, *c24, c24 + 1);//g bb b
}
/* Writting lut-data of the red channel --------------------------------------*/
void EPD_SetLutRed(byte*c25, byte*c26, byte*c27)
{
EPD_lut(0x25, *c25, c25 + 1);
EPD_lut(0x26, *c26, c26 + 1);
EPD_lut(0x27, *c27, c27 + 1);
}
/* This function is used to 'wake up" the e-Paper from the deep sleep mode ---*/
void EPD_Reset()
{
digitalWrite(PIN_SPI_RST, HIGH);
delay(200);
digitalWrite(PIN_SPI_RST, LOW);
delay(200);
digitalWrite(PIN_SPI_RST, HIGH);
delay(200);
}
/* e-Paper initialization functions ------------------------------------------*/
#include "epd1in54.h"
#include "epd2in13.h"
#include "epd2in9.h"
#include "epd2in7.h"
#include "epd2in66.h"
#include "epd3in7.h"
#include "epd3in52.h"
#include "epd4in01f.h"
#include "epd4in2.h"
#include "epd5in83.h"
#include "epd5in65f.h"
#include "epd7in5.h"
#include "epd7in5_HD.h"
bool EPD_invert; // If true, then image data bits must be inverted
int EPD_dispIndex; // The index of the e-Paper's type
int EPD_dispX, EPD_dispY; // Current pixel's coordinates (for 2.13 only)
void(*EPD_dispLoad)(); // Pointer on a image data writting function
/* Image data loading function for a-type e-Paper ----------------------------*/
void EPD_loadA()
{
// Get the index of the image data begin
int pos = 6;
// Enumerate all of image data bytes
while (pos < Buff__bufInd)
{
// Get current byte
int value = Buff__getByte(pos);
// Invert byte's bits in case of '2.7' e-Paper
if (EPD_invert) value = ~value;
// Write the byte into e-Paper's memory
EPD_SendData((byte)value);
// Increment the current byte index on 2 characters
pos++;
}
}
void EPD_loadAFilp()
{
// Get the index of the image data begin
int pos = 6;
// Enumerate all of image data bytes
while (pos < Buff__bufInd)
{
// Get current byte
int value = Buff__getByte(pos);
// Invert byte's bits in case of '2.7' e-Paper
if (EPD_invert) value = ~value;
// Write the byte into e-Paper's memory
EPD_SendData(~(byte)value);
// Increment the current byte index on 2 characters
pos++;
}
}
/* Image data loading function for b-type e-Paper ----------------------------*/
void EPD_loadB()
{
// Get the index of the image data begin
int pos = 6;
// Enumerate all of image data bytes
while (pos < Buff__bufInd)
{
// Get current word from obtained image data
int valueA = (int)Buff__getWord(pos);
// Clean current word of processed image data
int valueB = 0;
// Enumerate next 8 pixels
for (int p = 0; p < 8; p++)
{
// Current obtained pixel data
int pixInd = valueA & 3;
// Remove the obtained pixel data from 'valueA' word
valueA = valueA >> 2;
// Processing of 8 2-bit pixels to 8 2-bit pixels:
// black(value 0) to bits 00, white(value 1) to bits 11, gray(otherwise) to bits 10
valueB = (valueB << 2) + (pixInd == 1 ? 3 : (pixInd == 0 ? 0 : 2));
}
// Write the word into e-Paper's memory
EPD_SendData((byte)(valueB >> 8));
EPD_SendData((byte)valueB);
// Increment the current byte index on 2 characters
pos += 2;
}
}
/* Image data loading function for 2.13 e-Paper ------------------------------*/
void EPD_loadC()
{
// Get the index of the image data begin
int pos = 6;
EPD_Send_2(0x44, 0, 15); //SET_RAM_X_ADDRESS_START_END_POSITION LO(x >> 3), LO((w - 1) >> 3)
EPD_Send_4(0x45, 0, 0, 249, 0); //SET_RAM_Y_ADDRESS_START_END_POSITION LO(y), HI(y), LO(h - 1), HI(h - 1)
// Enumerate all of image data bytes
while (pos < Buff__bufInd)
{
// Before write a line of image data
// 2.13 e-Paper requires to set the address counter
// Every line has 15*8-6 pixels + 6 empty bits, totally 15*8 bits
if (EPD_dispX == 0)
{
EPD_Send_1(0x4E, 0 );//SET_RAM_X_ADDRESS_COUNTER: LO(x >> 3)
EPD_Send_2(0x4F, EPD_dispY, 0);//SET_RAM_Y_ADDRESS_COUNTER: LO(y), HI(y)
EPD_SendCommand(0x24);//WRITE_RAM
}
// Write the byte into e-Paper's memory
EPD_SendData((byte)Buff__getByte(pos));
// Increment the current byte index on 2 characters
pos++;
// EPD_dispX and EPD_dispY increments
if (++EPD_dispX > 15)
{
EPD_dispX = 0;
// If the client's browser sends more bits, than it needs, then exit the function
if (++EPD_dispY > 250) return;
}
}
}
/* Image data loading function for 7.5 e-Paper -------------------------------*/
void EPD_loadD()
{
// Get the index of the image data begin
int pos = 6;
// Enumerate all of image data bytes
while (pos < Buff__bufInd)
{
// Get current byte from obtained image data
int valueA = Buff__getByte(pos);
// Processing of 4 1-bit pixels to 4 4-bit pixels:
// black(value 0) to bits 0000, white(value 1) to bits 0011
EPD_SendData((byte)((valueA & 0x80) ? 0x30 : 0x00) + ((valueA & 0x40) ? 0x03 : 0x00));
EPD_SendData((byte)((valueA & 0x20) ? 0x30 : 0x00) + ((valueA & 0x10) ? 0x03 : 0x00));
EPD_SendData((byte)((valueA & 0x08) ? 0x30 : 0x00) + ((valueA & 0x04) ? 0x03 : 0x00));
EPD_SendData((byte)((valueA & 0x02) ? 0x30 : 0x00) + ((valueA & 0x01) ? 0x03 : 0x00));
// Increment the current byte index on 2 characters
pos++;
}
}
/* Image data loading function for 7.5b e-Paper ------------------------------*/
void EPD_loadE()
{
// Get the index of the image data begin
int pos = 6;
// Enumerate all of image data bytes
while (pos < Buff__bufInd)
{
// Get current byte from obtained image data
int value = Buff__getByte(pos);
// Processing of 4 1-bit pixels to 4 4-bit pixels:
// red(value 1) to bits 0011, white(value 3) to bits 0100
int A = (value ) & 3;if (A == 3) A = 4;if (A == 1) A = 3;
int B = (value >> 2) & 3;if (B == 3) B = 4;if (B == 1) B = 3;
int C = (value >> 4) & 3;if (C == 3) C = 4;if (C == 1) C = 3;
int D = (value >> 6) & 3;if (D == 3) D = 4;if (D == 1) D = 3;
// Write the word into e-Paper's memory
EPD_SendData((A << 4) + B);
EPD_SendData((C << 4) + D);
// Increment the current byte index on 2 characters
pos++;
}
}
/* Image data loading function for 5.65f e-Paper -----------------------------*/
void EPD_loadG()
{
// Come back to the image data end
int pos = 6;
// Enumerate all of image data bytes
while (pos < Buff__bufInd)
{
// Get current byte from obtained image data
int value = Buff__getByte(pos);
// Switch the positions of the two 4-bits pixels
// Black:0b000;White:0b001;Green:0b010;Blue:0b011;Red:0b100;Yellow:0b101;Orange:0b110;
int A = (value ) & 0x07;
int B = (value >> 4) & 0x07;
// Write the data into e-Paper's memory
EPD_SendData((byte)(A << 4) + B);
// Increment the current byte index on 2 characters
pos ++;
}
}
/* Show image and turn to deep sleep mode (a-type, 4.2 and 2.7 e-Paper) ------*/
void EPD_showA()
{
// Refresh
EPD_Send_1(0x22, 0xC4);//DISPLAY_UPDATE_CONTROL_2
EPD_SendCommand(0x20);//MASTER_ACTIVATION
EPD_SendCommand(0xFF);//TERMINATE_FRAME_READ_WRITE
EPD_WaitUntilIdle();
// Sleep
EPD_SendCommand(0x10);//DEEP_SLEEP_MODE
EPD_WaitUntilIdle();
}
/* Show image and turn to deep sleep mode (b-type, e-Paper) ------------------*/
void EPD_showB()
{
// Refresh
EPD_SendCommand(0x12);//DISPLAY_REFRESH
delay(100);
EPD_WaitUntilIdle();
// Sleep
EPD_Send_1(0x50, 0x17);//VCOM_AND_DATA_INTERVAL_SETTING
EPD_Send_1(0x82, 0x00);//VCM_DC_SETTING_REGISTER, to solve Vcom drop
EPD_Send_4(0x01, 0x02, 0x00, 0x00, 0x00);//POWER_SETTING
EPD_WaitUntilIdle();
EPD_SendCommand(0x02);//POWER_OFF
}
/* Show image and turn to deep sleep mode (7.5 and 7.5b e-Paper) -------------*/
void EPD_showC()
{
// Refresh
EPD_SendCommand(0x12);//DISPLAY_REFRESH
delay(100);
EPD_WaitUntilIdle();
// Sleep
EPD_SendCommand(0x02);// POWER_OFF
EPD_WaitUntilIdle();
EPD_Send_1(0x07, 0xA5);// DEEP_SLEEP
}
/* Show image and turn to deep sleep mode (2.13 e-Paper) ---------------------*/
void EPD_showD()
{
// VCOM AND DATA INTERVAL SETTING
// WBmode:VBDF 17, D7 VBDW 97, VBDB 57
// WBRmode:VBDF F7, VBDW 77, VBDB 37, VBDR B7
EPD_Send_1(0x50, 0x97);
EPD_SendCommand(0x20);
for(int count=0; count<44; count++) EPD_SendData(lut_vcomDC_2in13d[count]);
EPD_SendCommand(0x21);
for(int count=0; count<42; count++) EPD_SendData(lut_ww_2in13d[count]);
EPD_SendCommand(0x22);
for(int count=0; count<42; count++) EPD_SendData(lut_bw_2in13d[count]);
EPD_SendCommand(0x23);
for(int count=0; count<42; count++) EPD_SendData(lut_wb_2in13d[count]);
EPD_SendCommand(0x24);
for(int count=0; count<42; count++) EPD_SendData(lut_bb_2in13d[count]);
delay(10);
EPD_SendCommand(0x12);//DISPLAY REFRESH
delay(100); //!!!The delay here is necessary, 200uS at least!!!
EPD_WaitUntilIdle();
EPD_Send_1(0x50, 0xf7);
EPD_SendCommand( 0x02);//POWER_OFF
EPD_Send_1(0x07, 0xA5);//DEEP_SLEEP
}
/* The set of pointers on 'init', 'load' and 'show' functions, title and code */
struct EPD_dispInfo
{
int(*init)(); // Initialization
void(*chBk)();// Black channel loading
int next; // Change channel code
void(*chRd)();// Red channel loading
void(*show)();// Show and sleep
char*title; // Title of an e-Paper
};
/* Array of sets describing the usage of e-Papers ----------------------------*/
EPD_dispInfo EPD_dispMass[] =
{
{ EPD_Init_1in54 , EPD_loadA, -1 , 0, EPD_showA, "1.54 inch" },// a 0
{ EPD_Init_1in54b, EPD_loadB, 0x13, EPD_loadA, EPD_showB, "1.54 inch b" },// b 1
{ EPD_Init_1in54c, EPD_loadA, 0x13, EPD_loadA, EPD_showB, "1.54 inch c" },// c 2
{ EPD_Init_2in13 , EPD_loadC, -1 , 0, EPD_showA, "2.13 inch" },// d 3
{ EPD_Init_2in13b, EPD_loadA, 0x13, EPD_loadA, EPD_showB, "2.13 inch b" },// e 4
{ EPD_Init_2in13b, EPD_loadA, 0x13, EPD_loadA, EPD_showB, "2.13 inch c" },// f 5
{ EPD_Init_2in13d, EPD_loadA, -1 , 0, EPD_showD, "2.13 inch d" },// g 6
{ EPD_Init_2in7 , EPD_loadA, -1 , 0, EPD_showB, "2.7 inch" },// h 7
{ EPD_Init_2in7b , EPD_loadA, 0x13, EPD_loadA, EPD_showB, "2.7 inch b" },// i 8
{ EPD_Init_2in9 , EPD_loadA, -1 , 0, EPD_showA, "2.9 inch" },// j 9
{ EPD_Init_2in9b , EPD_loadA, 0x13, EPD_loadA, EPD_showB, "2.9 inch b" },// k 10
{ EPD_Init_2in9b , EPD_loadA, 0x13, EPD_loadA, EPD_showB, "2.9 inch c" },// l 11
{ EPD_Init_2in9d , EPD_loadA, -1 , 0, EPD_2IN9D_Show, "2.9 inch d" },// M 12
{ EPD_Init_4in2 , EPD_loadA, -1 , 0, EPD_showB, "4.2 inch" },// m 12
{ EPD_Init_4in2b , EPD_loadA, 0x13, EPD_loadA, EPD_showB, "4.2 inch b" },// n 13
{ EPD_Init_4in2b , EPD_loadA, 0x13, EPD_loadA, EPD_showB, "4.2 inch c" },// o 14
{ EPD_Init_5in83 , EPD_loadD, -1 , 0, EPD_showC, "5.83 inch" },// p 15
{ EPD_Init_5in83b, EPD_loadE, -1 , 0, EPD_showC, "5.83 inch b" },// q 16
{ EPD_Init_5in83b, EPD_loadE, -1 , 0, EPD_showC, "5.83 inch c" },// r 17
{ EPD_Init_7in5 , EPD_loadD, -1 , 0, EPD_showC, "7.5 inch" },// s 18
{ EPD_Init_7in5 , EPD_loadE, -1 , 0, EPD_showC, "7.5 inch b" },// t 19
{ EPD_Init_7in5 , EPD_loadE, -1 , 0, EPD_showC, "7.5 inch c" }, // u 20
{ EPD_7in5_V2_init , EPD_loadAFilp, -1 , 0, EPD_7IN5_V2_Show, "7.5 inch V2" },// w 22
{ EPD_7in5B_V2_Init , EPD_loadA, 0x13 , EPD_loadAFilp, EPD_7IN5_V2_Show, "7.5 inch B V2 "},// x 23
{ EPD_7IN5B_HD_init , EPD_loadA, 0x26 , EPD_loadAFilp, EPD_7IN5B_HD_Show, "7.5 inch B HD "},// x 24
{ EPD_5IN65F_init, EPD_loadG, -1 , 0, EPD_5IN65F_Show, "5.65 inch F " },// z 25
{ EPD_7IN5_HD_init, EPD_loadA, -1, 0, EPD_7IN5_HD_Show, "7.5 inch HD" },// 26
{ EPD_3IN7_1Gray_Init, EPD_loadA, -1 , 0, EPD_3IN7_1Gray_Show,"3.7 inch" },// 27
{ EPD_2IN66_Init, EPD_loadA, -1 , 0, EPD_2IN66_Show, "2.66 inch" },// 28
{ EPD_5in83b_V2_init, EPD_loadA, 0x13, EPD_loadAFilp, EPD_showC, "5.83 inch B V2"},// 29
{ EPD_Init_2in9b_V3, EPD_loadA, 0x13, EPD_loadA, EPD_showC, "2.9 inch B V3" },// 30
{ EPD_1IN54B_V2_Init, EPD_loadA, 0x26, EPD_loadAFilp, EPD_1IN54B_V2_Show, "1.54 inch B V2"},// 31
{ EPD_2IN13B_V3_Init, EPD_loadA, 0x13, EPD_loadA, EPD_2IN13B_V3_Show, "2.13 inch B V3"},// 32
{ EPD_Init_2in9_V2, EPD_loadA, -1, 0, EPD_2IN9_V2_Show, "2.9 inch V2" },// 33
{ EPD_Init_4in2b_V2, EPD_loadA, 0x13, EPD_loadA, EPD_4IN2B_V2_Show, "4.2 inch B V2" },// 34
{ EPD_2IN66B_Init, EPD_loadA, 0x26, EPD_loadAFilp, EPD_2IN66_Show, "2.66 inch B" },// 35
{ EPD_Init_5in83_V2, EPD_loadAFilp, -1, 0, EPD_showC, "5.83 inch V2" },// 36
{ EPD_4IN01F_init, EPD_loadG, -1, 0, EPD_4IN01F_Show, "4.01 inch F" },// 37
{ EPD_Init_2in7b_V2, EPD_loadA, 0x26, EPD_loadAFilp, EPD_2in7b_V2_Show, "2.7 inch B V2" },// 38
{ EPD_Init_2in13_V3, EPD_loadC, -1, 0, EPD_2IN13_V3_Show, "2.13 inch V3" },// 39
{ EPD_2IN13B_V4_Init, EPD_loadA, 0x26, EPD_loadA, EPD_2IN13B_V4_Show, "2.13 inch B V4"},// 40
{ EPD_3IN52_Init, EPD_loadA, -1, 0, EPD_3IN52_Show, "3.52 inch" },// 41
{ EPD_2IN7_V2_Init, EPD_loadA, -1 , 0, EPD_2IN7_V2_Show, "2.7 inch V2" },// 42
};
/* Initialization of an e-Paper ----------------------------------------------*/
void EPD_dispInit()
{
// Call initialization function
EPD_dispMass[EPD_dispIndex].init();
// Set loading function for black channel
EPD_dispLoad = EPD_dispMass[EPD_dispIndex].chBk;
// Set initial coordinates
EPD_dispX = 0;
EPD_dispY = 0;
// The inversion of image data bits isn't needed by default
EPD_invert = false;
}