Update Inkplate.h
This commit is contained in:
parent
8d19ff62ce
commit
42b5494400
161
Inkplate.h
161
Inkplate.h
|
@ -11,10 +11,11 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "Adafruit_GFX.h"
|
#include "Adafruit_GFX.h"
|
||||||
#include "Adafruit_MCP23017.h"
|
|
||||||
#include "SPI.h"
|
|
||||||
#include "SdFat.h"
|
|
||||||
#include "Wire.h"
|
#include "Wire.h"
|
||||||
|
#include "SPI.h"
|
||||||
|
#include "Adafruit_MCP23017.h"
|
||||||
|
#include "SdFat.h"
|
||||||
|
#include "WiFiClient.h"
|
||||||
|
|
||||||
#define INKPLATE_GAMMA 1.45
|
#define INKPLATE_GAMMA 1.45
|
||||||
#define E_INK_WIDTH 800
|
#define E_INK_WIDTH 800
|
||||||
|
@ -31,44 +32,20 @@
|
||||||
#define DATA 0x0E8C0030 //D0-D7 = GPIO4 GPIO5 GPIO18 GPIO19 GPIO23 GPIO25 GPIO26 GPIO27
|
#define DATA 0x0E8C0030 //D0-D7 = GPIO4 GPIO5 GPIO18 GPIO19 GPIO23 GPIO25 GPIO26 GPIO27
|
||||||
|
|
||||||
#define CL 0x01 //GPIO0
|
#define CL 0x01 //GPIO0
|
||||||
#define CL_SET \
|
#define CL_SET {GPIO.out_w1ts = CL;}
|
||||||
{ \
|
#define CL_CLEAR {GPIO.out_w1tc = CL;}
|
||||||
GPIO.out_w1ts = CL; \
|
|
||||||
}
|
|
||||||
#define CL_CLEAR \
|
|
||||||
{ \
|
|
||||||
GPIO.out_w1tc = CL; \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define LE 0x04 //GPIO2
|
#define LE 0x04 //GPIO2
|
||||||
#define LE_SET \
|
#define LE_SET {GPIO.out_w1ts = LE;}
|
||||||
{ \
|
#define LE_CLEAR {GPIO.out_w1tc = LE;}
|
||||||
GPIO.out_w1ts = LE; \
|
|
||||||
}
|
|
||||||
#define LE_CLEAR \
|
|
||||||
{ \
|
|
||||||
GPIO.out_w1tc = LE; \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define CKV 0x01 //GPIO32
|
#define CKV 0x01 //GPIO32
|
||||||
#define CKV_SET \
|
#define CKV_SET {GPIO.out1_w1ts.val = CKV;}
|
||||||
{ \
|
#define CKV_CLEAR {GPIO.out1_w1tc.val = CKV;}
|
||||||
GPIO.out1_w1ts.val = CKV; \
|
|
||||||
}
|
|
||||||
#define CKV_CLEAR \
|
|
||||||
{ \
|
|
||||||
GPIO.out1_w1tc.val = CKV; \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define SPH 0x02 //GPIO33
|
#define SPH 0x02 //GPIO33
|
||||||
#define SPH_SET \
|
#define SPH_SET {GPIO.out1_w1ts.val = SPH;}
|
||||||
{ \
|
#define SPH_CLEAR {GPIO.out1_w1tc.val = SPH;}
|
||||||
GPIO.out1_w1ts.val = SPH; \
|
|
||||||
}
|
|
||||||
#define SPH_CLEAR \
|
|
||||||
{ \
|
|
||||||
GPIO.out1_w1tc.val = SPH; \
|
|
||||||
}
|
|
||||||
|
|
||||||
//#define SPV 15 //GPIO15
|
//#define SPV 15 //GPIO15
|
||||||
//#define SPV_SET {digitalWrite(SPV, HIGH);}
|
//#define SPV_SET {digitalWrite(SPV, HIGH);}
|
||||||
|
@ -76,74 +53,33 @@
|
||||||
|
|
||||||
//I/O Expander - A Channel
|
//I/O Expander - A Channel
|
||||||
#define GMOD 1 //GPIOA1
|
#define GMOD 1 //GPIOA1
|
||||||
#define GMOD_SET \
|
#define GMOD_SET {mcp.digitalWrite(GMOD, HIGH);}
|
||||||
{ \
|
#define GMOD_CLEAR {mcp.digitalWrite(GMOD, LOW);}
|
||||||
mcp.digitalWrite(GMOD, HIGH); \
|
|
||||||
}
|
|
||||||
#define GMOD_CLEAR \
|
|
||||||
{ \
|
|
||||||
mcp.digitalWrite(GMOD, LOW); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define OE 0 //GPIOA0
|
#define OE 0 //GPIOA0
|
||||||
#define OE_SET \
|
#define OE_SET {mcp.digitalWrite(OE, HIGH);}
|
||||||
{ \
|
#define OE_CLEAR {mcp.digitalWrite(OE, LOW);}
|
||||||
mcp.digitalWrite(OE, HIGH); \
|
|
||||||
}
|
|
||||||
#define OE_CLEAR \
|
|
||||||
{ \
|
|
||||||
mcp.digitalWrite(OE, LOW); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define SPV 2 //GPIOA5
|
#define SPV 2 //GPIOA5
|
||||||
#define SPV_SET \
|
#define SPV_SET {mcp.digitalWrite(SPV, HIGH);}
|
||||||
{ \
|
#define SPV_CLEAR {mcp.digitalWrite(SPV, LOW);}
|
||||||
mcp.digitalWrite(SPV, HIGH); \
|
|
||||||
}
|
|
||||||
#define SPV_CLEAR \
|
|
||||||
{ \
|
|
||||||
mcp.digitalWrite(SPV, LOW); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define WAKEUP 3 //GPIOA3
|
#define WAKEUP 3 //GPIOA3
|
||||||
#define WAKEUP_SET \
|
#define WAKEUP_SET {mcp.digitalWrite(WAKEUP, HIGH);}
|
||||||
{ \
|
#define WAKEUP_CLEAR {mcp.digitalWrite(WAKEUP, LOW);}
|
||||||
mcp.digitalWrite(WAKEUP, HIGH); \
|
|
||||||
}
|
|
||||||
#define WAKEUP_CLEAR \
|
|
||||||
{ \
|
|
||||||
mcp.digitalWrite(WAKEUP, LOW); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define PWRUP 4 //GPIOA4
|
#define PWRUP 4 //GPIOA4
|
||||||
#define PWRUP_SET \
|
#define PWRUP_SET {mcp.digitalWrite(PWRUP, HIGH);}
|
||||||
{ \
|
#define PWRUP_CLEAR {mcp.digitalWrite(PWRUP, LOW);}
|
||||||
mcp.digitalWrite(PWRUP, HIGH); \
|
|
||||||
}
|
|
||||||
#define PWRUP_CLEAR \
|
|
||||||
{ \
|
|
||||||
mcp.digitalWrite(PWRUP, LOW); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define VCOM 5 //GPIOA6
|
#define VCOM 5 //GPIOA6
|
||||||
#define VCOM_SET \
|
#define VCOM_SET {mcp.digitalWrite(VCOM, HIGH);}
|
||||||
{ \
|
#define VCOM_CLEAR {mcp.digitalWrite(VCOM, LOW);}
|
||||||
mcp.digitalWrite(VCOM, HIGH); \
|
|
||||||
}
|
|
||||||
#define VCOM_CLEAR \
|
|
||||||
{ \
|
|
||||||
mcp.digitalWrite(VCOM, LOW); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define CKV_CLOCK ckvClock();
|
#define CKV_CLOCK ckvClock();
|
||||||
|
|
||||||
#ifndef _swap_int16_t
|
#ifndef _swap_int16_t
|
||||||
#define _swap_int16_t(a, b) \
|
#define _swap_int16_t(a, b) { int16_t t = a; a = b; b = t; }
|
||||||
{ \
|
|
||||||
int16_t t = a; \
|
|
||||||
a = b; \
|
|
||||||
b = t; \
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern Adafruit_MCP23017 mcp;
|
extern Adafruit_MCP23017 mcp;
|
||||||
|
@ -152,13 +88,12 @@ extern SdFat sd;
|
||||||
static void ckvClock();
|
static void ckvClock();
|
||||||
static void usleep1();
|
static void usleep1();
|
||||||
|
|
||||||
class Inkplate : public Adafruit_GFX
|
class Inkplate : public Adafruit_GFX {
|
||||||
{
|
public:
|
||||||
public:
|
uint8_t* D_memory_new;
|
||||||
uint8_t *D_memory_new;
|
uint8_t* _partial;
|
||||||
uint8_t *_partial;
|
uint8_t* D_memory4Bit;
|
||||||
uint8_t *D_memory4Bit;
|
uint8_t * _pBuffer;
|
||||||
uint8_t *_pBuffer;
|
|
||||||
const uint8_t LUT2[16] = {B10101010, B10101001, B10100110, B10100101, B10011010, B10011001, B10010110, B10010101, B01101010, B01101001, B01100110, B01100101, B01011010, B01011001, B01010110, B01010101};
|
const uint8_t LUT2[16] = {B10101010, B10101001, B10100110, B10100101, B10011010, B10011001, B10010110, B10010101, B01101010, B01101001, B01100110, B01100101, B01011010, B01011001, B01010110, B01010101};
|
||||||
const uint8_t LUTW[16] = {B11111111, B11111110, B11111011, B11111010, B11101111, B11101110, B11101011, B11101010, B10111111, B10111110, B10111011, B10111010, B10101111, B10101110, B10101011, B10101010};
|
const uint8_t LUTW[16] = {B11111111, B11111110, B11111011, B11111010, B11101111, B11101110, B11101011, B11101010, B10111111, B10111110, B10111011, B10111010, B10101111, B10101110, B10101011, B10101010};
|
||||||
const uint8_t LUTB[16] = {B11111111, B11111101, B11110111, B11110101, B11011111, B11011101, B11010111, B11010101, B01111111, B01111101, B01110111, B01110101, B01011111, B01011101, B01010111, B01010101};
|
const uint8_t LUTB[16] = {B11111111, B11111101, B11110111, B11110101, B11011111, B11011101, B11010111, B11010101, B01111111, B01111101, B01110111, B01110101, B01011111, B01011101, B01010111, B01010101};
|
||||||
|
@ -173,8 +108,7 @@ public:
|
||||||
//PVI waveform for cleaning screen, not sure if it is correct, but it cleans screen properly.
|
//PVI waveform for cleaning screen, not sure if it is correct, but it cleans screen properly.
|
||||||
const uint32_t waveform[50] = {0x00000008, 0x00000008, 0x00200408, 0x80281888, 0x60a81898, 0x60a8a8a8, 0x60a8a8a8, 0x6068a868, 0x6868a868, 0x6868a868, 0x68686868, 0x6a686868, 0x5a686868, 0x5a686868, 0x5a586a68, 0x5a5a6a68, 0x5a5a6a68, 0x55566a68, 0x55565a64, 0x55555654, 0x55555556, 0x55555556, 0x55555556, 0x55555516, 0x55555596, 0x15555595, 0x95955595, 0x95959595, 0x95949495, 0x94949495, 0x94949495, 0xa4949494, 0x9494a4a4, 0x84a49494, 0x84948484, 0x84848484, 0x84848484, 0x84848484, 0xa5a48484, 0xa9a4a4a8, 0xa9a8a8a8, 0xa5a9a9a4, 0xa5a5a5a4, 0xa1a5a5a1, 0xa9a9a9a9, 0xa9a9a9a9, 0xa9a9a9a9, 0xa9a9a9a9, 0x15151515, 0x11111111};
|
const uint32_t waveform[50] = {0x00000008, 0x00000008, 0x00200408, 0x80281888, 0x60a81898, 0x60a8a8a8, 0x60a8a8a8, 0x6068a868, 0x6868a868, 0x6868a868, 0x68686868, 0x6a686868, 0x5a686868, 0x5a686868, 0x5a586a68, 0x5a5a6a68, 0x5a5a6a68, 0x55566a68, 0x55565a64, 0x55555654, 0x55555556, 0x55555556, 0x55555556, 0x55555516, 0x55555596, 0x15555595, 0x95955595, 0x95959595, 0x95949495, 0x94949495, 0x94949495, 0xa4949494, 0x9494a4a4, 0x84a49494, 0x84948484, 0x84848484, 0x84848484, 0x84848484, 0xa5a48484, 0xa9a4a4a8, 0xa9a8a8a8, 0xa5a9a9a4, 0xa5a5a5a4, 0xa1a5a5a1, 0xa9a9a9a9, 0xa9a9a9a9, 0xa9a9a9a9, 0xa9a9a9a9, 0x15151515, 0x11111111};
|
||||||
|
|
||||||
struct bitmapHeader
|
struct bitmapHeader {
|
||||||
{
|
|
||||||
uint16_t signature;
|
uint16_t signature;
|
||||||
uint32_t fileSize;
|
uint32_t fileSize;
|
||||||
uint32_t startRAW;
|
uint32_t startRAW;
|
||||||
|
@ -191,16 +125,16 @@ public:
|
||||||
void clearDisplay();
|
void clearDisplay();
|
||||||
void display();
|
void display();
|
||||||
void partialUpdate();
|
void partialUpdate();
|
||||||
void drawBitmap3Bit(int16_t _x, int16_t _y, const unsigned char *_p, int16_t _w, int16_t _h);
|
void drawBitmap3Bit(int16_t _x, int16_t _y, const unsigned char* _p, int16_t _w, int16_t _h);
|
||||||
void setRotation(uint8_t);
|
void setRotation(uint8_t);
|
||||||
void einkOff(void);
|
void einkOff(void);
|
||||||
void einkOn(void);
|
void einkOn(void);
|
||||||
void selectDisplayMode(uint8_t _mode);
|
void selectDisplayMode(uint8_t _mode);
|
||||||
uint8_t getDisplayMode();
|
uint8_t getDisplayMode();
|
||||||
int drawBitmapFromSD(SdFile *p, int x, int y);
|
int drawBitmapFromSD(SdFile* p, int x, int y, bool invert = false);
|
||||||
int drawBitmapFromSD(char *fileName, int x, int y);
|
int drawBitmapFromSD(char* fileName, int x, int y, bool invert = false);
|
||||||
void drawThickLine(int x1, int y1, int x2, int y2, int color, float thickness);
|
int drawBitmapFromWeb(WiFiClient* s, int x, int y, int len, bool invert = false);
|
||||||
void drawGradientLine(int x1, int y1, int x2, int y2, int color1, int color2, float thickness = -1);
|
int drawBitmapFromWeb(char* url, int x, int y, bool invert = false);
|
||||||
int sdCardInit();
|
int sdCardInit();
|
||||||
SdFat getSdFat();
|
SdFat getSdFat();
|
||||||
SPIClass getSPI();
|
SPIClass getSPI();
|
||||||
|
@ -218,7 +152,7 @@ public:
|
||||||
void pinsZstate();
|
void pinsZstate();
|
||||||
void pinsAsOutputs();
|
void pinsAsOutputs();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
uint8_t gammaLUT[256];
|
uint8_t gammaLUT[256];
|
||||||
int8_t _temperature;
|
int8_t _temperature;
|
||||||
uint8_t _panelOn = 0;
|
uint8_t _panelOn = 0;
|
||||||
|
@ -230,12 +164,19 @@ private:
|
||||||
|
|
||||||
void display1b();
|
void display1b();
|
||||||
void display3b();
|
void display3b();
|
||||||
uint32_t read32(uint8_t *c);
|
uint32_t read32(uint8_t* c);
|
||||||
uint16_t read16(uint8_t *c);
|
uint16_t read16(uint8_t* c);
|
||||||
void readBmpHeader(SdFile *_f, struct bitmapHeader *_h);
|
void readBmpHeaderSd(SdFile *_f, struct bitmapHeader *_h);
|
||||||
int drawMonochromeBitmap(SdFile *f, struct bitmapHeader bmpHeader, int x, int y);
|
void readBmpHeaderWeb(WiFiClient *_s, struct bitmapHeader *_h);
|
||||||
int drawGrayscaleBitmap24(SdFile *f, struct bitmapHeader bmpHeader, int x, int y);
|
int drawMonochromeBitmapSd(SdFile *f, struct bitmapHeader bmpHeader, int x, int y, bool invert);
|
||||||
void precalculateGamma(uint8_t *c, float gamma);
|
int drawGrayscaleBitmap4Sd(SdFile *f, struct bitmapHeader bmpHeader, int x, int y, bool invert);
|
||||||
|
int drawGrayscaleBitmap8Sd(SdFile *f, struct bitmapHeader bmpHeader, int x, int y, bool invert);
|
||||||
|
int drawGrayscaleBitmap24Sd(SdFile *f, struct bitmapHeader bmpHeader, int x, int y, bool invert);
|
||||||
|
int drawMonochromeBitmapWeb(WiFiClient *s, struct bitmapHeader bmpHeader, int x, int y, int len, bool invert);
|
||||||
|
int drawGrayscaleBitmap4Web(WiFiClient *s, struct bitmapHeader bmpHeader, int x, int y, int len, bool invert);
|
||||||
|
int drawGrayscaleBitmap8Web(WiFiClient *s, struct bitmapHeader bmpHeader, int x, int y, int len, bool invert);
|
||||||
|
int drawGrayscaleBitmap24Web(WiFiClient *s, struct bitmapHeader bmpHeader, int x, int y, int len, bool invert);
|
||||||
|
void precalculateGamma(uint8_t* c, float gamma);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue