Harry Chen / EPD_GDEW075T8

Dependents:   EInkTest

Committer:
HarryChen
Date:
Mon Oct 15 03:53:22 2018 +0000
Revision:
1:6ae4383194a1
Parent:
0:518ad5d26088
Child:
2:73f957691c31
Update library to use OO

Who changed what in which revision?

UserRevisionLine numberNew contents of line
HarryChen 0:518ad5d26088 1 #include "mbed.h"
HarryChen 0:518ad5d26088 2 #include "GDEW075T8.h"
HarryChen 1:6ae4383194a1 3 #include "PixelSource.h"
HarryChen 0:518ad5d26088 4
HarryChen 0:518ad5d26088 5 #define nCS_L HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_RESET)
HarryChen 0:518ad5d26088 6 #define nCS_H HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_SET)
HarryChen 0:518ad5d26088 7
HarryChen 0:518ad5d26088 8 #define nDC_L HAL_GPIO_WritePin(DC_GPIO_Port, DC_Pin, GPIO_PIN_RESET)
HarryChen 0:518ad5d26088 9 #define nDC_H HAL_GPIO_WritePin(DC_GPIO_Port, DC_Pin, GPIO_PIN_SET)
HarryChen 0:518ad5d26088 10
HarryChen 0:518ad5d26088 11 #define nRST_L HAL_GPIO_WritePin(RST_GPIO_Port, RST_Pin, GPIO_PIN_RESET)
HarryChen 0:518ad5d26088 12 #define nRST_H HAL_GPIO_WritePin(RST_GPIO_Port, RST_Pin, GPIO_PIN_SET)
HarryChen 0:518ad5d26088 13
HarryChen 0:518ad5d26088 14 // TODO: use real value
HarryChen 1:6ae4383194a1 15 static DigitalOut nCS(D1);
HarryChen 1:6ae4383194a1 16 static DigitalOut nDC(D2);
HarryChen 1:6ae4383194a1 17 static DigitalOut nRST(D3);
HarryChen 1:6ae4383194a1 18 static DigitalIn busyPin(D8);
HarryChen 0:518ad5d26088 19
HarryChen 1:6ae4383194a1 20 static SPI spi(D4, D5, D6, D7);
HarryChen 0:518ad5d26088 21
HarryChen 1:6ae4383194a1 22 static void sendCommand(unsigned char command) {
HarryChen 0:518ad5d26088 23 nCS = 0;
HarryChen 0:518ad5d26088 24 nDC = 0; // command write
HarryChen 1:6ae4383194a1 25 spi.write(command);
HarryChen 0:518ad5d26088 26 nCS = 1;
HarryChen 0:518ad5d26088 27 }
HarryChen 0:518ad5d26088 28
HarryChen 1:6ae4383194a1 29 static void sendData(unsigned char data) {
HarryChen 0:518ad5d26088 30 nCS = 0;
HarryChen 0:518ad5d26088 31 nDC = 1; // data write
HarryChen 1:6ae4383194a1 32 spi.write(data);
HarryChen 0:518ad5d26088 33 nCS = 1;
HarryChen 0:518ad5d26088 34 }
HarryChen 0:518ad5d26088 35
HarryChen 1:6ae4383194a1 36 static void waitForReady(void) {
HarryChen 0:518ad5d26088 37 unsigned char busy;
HarryChen 0:518ad5d26088 38 do {
HarryChen 1:6ae4383194a1 39 sendCommand(0x71);
HarryChen 0:518ad5d26088 40 busy = busyPin;
HarryChen 0:518ad5d26088 41 busy = !(busy & 0x01);
HarryChen 0:518ad5d26088 42 } while (busy);
HarryChen 0:518ad5d26088 43 wait(0.2);
HarryChen 0:518ad5d26088 44 }
HarryChen 0:518ad5d26088 45
HarryChen 1:6ae4383194a1 46 static void init(void) {
HarryChen 0:518ad5d26088 47 // BS tied to GND
HarryChen 0:518ad5d26088 48 // nBS_L; //4 wire spi mode selected
HarryChen 0:518ad5d26088 49
HarryChen 1:6ae4383194a1 50 // module reset
HarryChen 1:6ae4383194a1 51 nRST = 0;
HarryChen 0:518ad5d26088 52 wait(0.1);
HarryChen 0:518ad5d26088 53 nRST = 1;;
HarryChen 0:518ad5d26088 54 wait(0.1);
HarryChen 0:518ad5d26088 55
HarryChen 0:518ad5d26088 56 }
HarryChen 0:518ad5d26088 57
HarryChen 1:6ae4383194a1 58 #define PIXEL_WHITE 0x02
HarryChen 1:6ae4383194a1 59 #define PIXEL_BLACK 0x00
HarryChen 1:6ae4383194a1 60 #define PIXEL(p) ((p) ? (PIXEL_BLACK) : (PIXEL_WHITE))
HarryChen 0:518ad5d26088 61
HarryChen 1:6ae4383194a1 62 static void display(GDE::PixelSource &source) {
HarryChen 1:6ae4383194a1 63
HarryChen 1:6ae4383194a1 64 // start user data transmission
HarryChen 1:6ae4383194a1 65 sendCommand(0x10);
HarryChen 1:6ae4383194a1 66
HarryChen 1:6ae4383194a1 67 source.init();
HarryChen 1:6ae4383194a1 68
HarryChen 1:6ae4383194a1 69 while (source.hasNext()) {
HarryChen 1:6ae4383194a1 70 unsigned char p = source.nextPixelGroup();
HarryChen 1:6ae4383194a1 71 // transmit 2 pixels each time
HarryChen 1:6ae4383194a1 72 for (int j = 0; j < 4; ++j) {
HarryChen 1:6ae4383194a1 73 unsigned char data = ((PIXEL(p & 0x01)) << 4) | (PIXEL(p & 0x02));
HarryChen 1:6ae4383194a1 74 sendData(data);
HarryChen 1:6ae4383194a1 75 p >>= 2;
HarryChen 1:6ae4383194a1 76 }
HarryChen 0:518ad5d26088 77 }
HarryChen 1:6ae4383194a1 78
HarryChen 1:6ae4383194a1 79 // power on
HarryChen 1:6ae4383194a1 80 sendCommand(0x04);
HarryChen 1:6ae4383194a1 81 waitForReady();
HarryChen 0:518ad5d26088 82
HarryChen 1:6ae4383194a1 83 // display refresh
HarryChen 1:6ae4383194a1 84 GDE::refresh();
HarryChen 0:518ad5d26088 85
HarryChen 1:6ae4383194a1 86 wait(1);
HarryChen 0:518ad5d26088 87 }
HarryChen 0:518ad5d26088 88
HarryChen 1:6ae4383194a1 89 namespace GDE {
HarryChen 0:518ad5d26088 90
HarryChen 1:6ae4383194a1 91 void start() {
HarryChen 1:6ae4383194a1 92
HarryChen 1:6ae4383194a1 93 init();
HarryChen 1:6ae4383194a1 94
HarryChen 1:6ae4383194a1 95 // power setting
HarryChen 1:6ae4383194a1 96 sendCommand(0x01);
HarryChen 1:6ae4383194a1 97 sendData(0x37);
HarryChen 1:6ae4383194a1 98 sendData(0x00);
HarryChen 1:6ae4383194a1 99
HarryChen 1:6ae4383194a1 100 // pannel setting
HarryChen 1:6ae4383194a1 101 sendCommand(0x00);
HarryChen 1:6ae4383194a1 102 sendData(0xCF);
HarryChen 1:6ae4383194a1 103 sendData(0x08);
HarryChen 1:6ae4383194a1 104
HarryChen 1:6ae4383194a1 105 // boost setting
HarryChen 1:6ae4383194a1 106 sendCommand(0x06);
HarryChen 1:6ae4383194a1 107 sendData(0xc7);
HarryChen 1:6ae4383194a1 108 sendData(0xcc);
HarryChen 1:6ae4383194a1 109 sendData(0x28);
HarryChen 1:6ae4383194a1 110
HarryChen 1:6ae4383194a1 111
HarryChen 1:6ae4383194a1 112 // PLL setting
HarryChen 1:6ae4383194a1 113 sendCommand(0x30);
HarryChen 1:6ae4383194a1 114 sendData(0x3c);
HarryChen 1:6ae4383194a1 115
HarryChen 1:6ae4383194a1 116 // temperature setting
HarryChen 1:6ae4383194a1 117 sendCommand(0x41);
HarryChen 1:6ae4383194a1 118 sendData(0x00);
HarryChen 1:6ae4383194a1 119
HarryChen 1:6ae4383194a1 120 // VCOM and DATA interval setting
HarryChen 1:6ae4383194a1 121 sendCommand(0x50);
HarryChen 1:6ae4383194a1 122 sendData(0x77);
HarryChen 1:6ae4383194a1 123
HarryChen 1:6ae4383194a1 124 // TCON setting
HarryChen 1:6ae4383194a1 125 sendCommand(0x60);
HarryChen 1:6ae4383194a1 126 sendData(0x22);
HarryChen 1:6ae4383194a1 127
HarryChen 1:6ae4383194a1 128 // resolution setting
HarryChen 1:6ae4383194a1 129 sendCommand(0x61);
HarryChen 1:6ae4383194a1 130 // source 640
HarryChen 1:6ae4383194a1 131 sendData(0x02);
HarryChen 1:6ae4383194a1 132 sendData(0x80);
HarryChen 1:6ae4383194a1 133 // gate 384
HarryChen 1:6ae4383194a1 134 sendData(0x01);
HarryChen 1:6ae4383194a1 135 sendData(0x80);
HarryChen 1:6ae4383194a1 136
HarryChen 1:6ae4383194a1 137 // VDCS setting
HarryChen 1:6ae4383194a1 138 sendCommand(0x82);
HarryChen 1:6ae4383194a1 139 // decided by LUT file
HarryChen 1:6ae4383194a1 140 sendData(0x1E);
HarryChen 1:6ae4383194a1 141
HarryChen 1:6ae4383194a1 142 // flash mode
HarryChen 1:6ae4383194a1 143 sendCommand(0xe5);
HarryChen 1:6ae4383194a1 144 sendData(0x03);
HarryChen 1:6ae4383194a1 145
HarryChen 1:6ae4383194a1 146 }
HarryChen 1:6ae4383194a1 147
HarryChen 1:6ae4383194a1 148 void refresh() {
HarryChen 1:6ae4383194a1 149 sendCommand(0x12);
HarryChen 0:518ad5d26088 150 wait(0.1);
HarryChen 1:6ae4383194a1 151 waitForReady();
HarryChen 1:6ae4383194a1 152 }
HarryChen 1:6ae4383194a1 153
HarryChen 1:6ae4383194a1 154 void showPixels(PixelSource &source, bool needRefresh) {
HarryChen 1:6ae4383194a1 155 if (needRefresh) {
HarryChen 1:6ae4383194a1 156 PixelSource fullBlackSource = PixelSource();
HarryChen 1:6ae4383194a1 157 display(fullBlackSource);
HarryChen 1:6ae4383194a1 158 }
HarryChen 1:6ae4383194a1 159 display(source);
HarryChen 1:6ae4383194a1 160 }
HarryChen 1:6ae4383194a1 161
HarryChen 1:6ae4383194a1 162 void stop() {
HarryChen 1:6ae4383194a1 163
HarryChen 1:6ae4383194a1 164 sendCommand(0x02);
HarryChen 1:6ae4383194a1 165 waitForReady();
HarryChen 1:6ae4383194a1 166
HarryChen 1:6ae4383194a1 167 sendCommand(0x07);
HarryChen 1:6ae4383194a1 168 sendData(0xa5);
HarryChen 1:6ae4383194a1 169
HarryChen 0:518ad5d26088 170 }
HarryChen 0:518ad5d26088 171
HarryChen 0:518ad5d26088 172 }