tempcommit 13/05

Committer:
tijl
Date:
Wed May 15 13:39:22 2019 +0000
Revision:
2:048e163245b7
Parent:
0:73f2160fef5a
blub 15/05;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Ruben_Heintjens 0:73f2160fef5a 1 /**
Ruben_Heintjens 0:73f2160fef5a 2 * @filename : epd4in2b.cpp
Ruben_Heintjens 0:73f2160fef5a 3 * @brief : Implements for Dual-color e-paper library
Ruben_Heintjens 0:73f2160fef5a 4 * @author : Yehui from Waveshare
Ruben_Heintjens 0:73f2160fef5a 5 *
Ruben_Heintjens 0:73f2160fef5a 6 * Copyright (C) Waveshare August 10 2017
Ruben_Heintjens 0:73f2160fef5a 7 *
Ruben_Heintjens 0:73f2160fef5a 8 * Permission is hereby granted, free of charge, to any person obtaining a copy
Ruben_Heintjens 0:73f2160fef5a 9 * of this software and associated documnetation files (the "Software"), to deal
Ruben_Heintjens 0:73f2160fef5a 10 * in the Software without restriction, including without limitation the rights
Ruben_Heintjens 0:73f2160fef5a 11 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
Ruben_Heintjens 0:73f2160fef5a 12 * copies of the Software, and to permit persons to whom the Software is
Ruben_Heintjens 0:73f2160fef5a 13 * furished to do so, subject to the following conditions:
Ruben_Heintjens 0:73f2160fef5a 14 *
Ruben_Heintjens 0:73f2160fef5a 15 * The above copyright notice and this permission notice shall be included in
Ruben_Heintjens 0:73f2160fef5a 16 * all copies or substantial portions of the Software.
Ruben_Heintjens 0:73f2160fef5a 17 *
Ruben_Heintjens 0:73f2160fef5a 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Ruben_Heintjens 0:73f2160fef5a 19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Ruben_Heintjens 0:73f2160fef5a 20 * FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
Ruben_Heintjens 0:73f2160fef5a 21 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
Ruben_Heintjens 0:73f2160fef5a 22 * LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
Ruben_Heintjens 0:73f2160fef5a 23 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
Ruben_Heintjens 0:73f2160fef5a 24 * THE SOFTWARE.
Ruben_Heintjens 0:73f2160fef5a 25 */
Ruben_Heintjens 0:73f2160fef5a 26
Ruben_Heintjens 0:73f2160fef5a 27 #include <stdlib.h>
Ruben_Heintjens 0:73f2160fef5a 28 #include <epd4in2b.h>
Ruben_Heintjens 0:73f2160fef5a 29
Ruben_Heintjens 0:73f2160fef5a 30 #include "mbed.h"
Ruben_Heintjens 0:73f2160fef5a 31 #include "SPI.h"
Ruben_Heintjens 0:73f2160fef5a 32
Ruben_Heintjens 0:73f2160fef5a 33
Ruben_Heintjens 0:73f2160fef5a 34
Ruben_Heintjens 0:73f2160fef5a 35 Epd::~Epd() {
Ruben_Heintjens 0:73f2160fef5a 36 };
Ruben_Heintjens 0:73f2160fef5a 37
Ruben_Heintjens 0:73f2160fef5a 38 //,dc_pin(D5),busy_pin(D3),reset_pin(A2),_cs_pin(D9)
Ruben_Heintjens 0:73f2160fef5a 39 Epd::Epd():dc_pin(D5),busy_pin(D3),reset_pin(A2) {
Ruben_Heintjens 0:73f2160fef5a 40 /*
Ruben_Heintjens 0:73f2160fef5a 41 reset_pin = RST_PIN;
Ruben_Heintjens 0:73f2160fef5a 42 dc_pin = DC_PIN;
Ruben_Heintjens 0:73f2160fef5a 43 cs_pin = CS_PIN;
Ruben_Heintjens 0:73f2160fef5a 44 busy_pin = BUSY_PIN;
Ruben_Heintjens 0:73f2160fef5a 45 */
Ruben_Heintjens 0:73f2160fef5a 46 width = EPD_WIDTH;
Ruben_Heintjens 0:73f2160fef5a 47 height = EPD_HEIGHT;
Ruben_Heintjens 0:73f2160fef5a 48 };
Ruben_Heintjens 0:73f2160fef5a 49
Ruben_Heintjens 0:73f2160fef5a 50 int Epd::Init(void) {
Ruben_Heintjens 0:73f2160fef5a 51 printf("start init \r\n");
Ruben_Heintjens 0:73f2160fef5a 52 /* this calls the peripheral hardware interface, see epdif */
Ruben_Heintjens 0:73f2160fef5a 53 if (IfInit() != 0) {
Ruben_Heintjens 0:73f2160fef5a 54 printf("interface init kapot \r\n");
Ruben_Heintjens 0:73f2160fef5a 55 return -1;
Ruben_Heintjens 0:73f2160fef5a 56 }
Ruben_Heintjens 0:73f2160fef5a 57 /* EPD hardware init start */
Ruben_Heintjens 0:73f2160fef5a 58 printf("reset \r\n");
Ruben_Heintjens 0:73f2160fef5a 59 Reset();
Ruben_Heintjens 0:73f2160fef5a 60 printf("send command 1 \r\n");
Ruben_Heintjens 0:73f2160fef5a 61 SendCommand(BOOSTER_SOFT_START);
Ruben_Heintjens 0:73f2160fef5a 62 printf("send data \r\n");
Ruben_Heintjens 0:73f2160fef5a 63 SendData(0x17);
Ruben_Heintjens 0:73f2160fef5a 64 wait(1);
Ruben_Heintjens 0:73f2160fef5a 65 SendData(0x17);
Ruben_Heintjens 0:73f2160fef5a 66 SendData(0x17); //07 0f 17 1f 27 2F 37 2f
Ruben_Heintjens 0:73f2160fef5a 67 printf("send command 2 \r\n");
Ruben_Heintjens 0:73f2160fef5a 68 SendCommand(POWER_ON);
Ruben_Heintjens 0:73f2160fef5a 69 printf("pre wait \r\n");
Ruben_Heintjens 0:73f2160fef5a 70 WaitUntilIdle();
Ruben_Heintjens 0:73f2160fef5a 71 printf("post wait \r\n");
Ruben_Heintjens 0:73f2160fef5a 72 SendCommand(PANEL_SETTING);
Ruben_Heintjens 0:73f2160fef5a 73 SendData(0x0F); // LUT from OTP
Ruben_Heintjens 0:73f2160fef5a 74 /* EPD hardware init end */
Ruben_Heintjens 0:73f2160fef5a 75
Ruben_Heintjens 0:73f2160fef5a 76 SendCommand(PLL_CONTROL);
Ruben_Heintjens 0:73f2160fef5a 77 return 0;
Ruben_Heintjens 0:73f2160fef5a 78 }
Ruben_Heintjens 0:73f2160fef5a 79
Ruben_Heintjens 0:73f2160fef5a 80 /**
Ruben_Heintjens 0:73f2160fef5a 81 * @brief: basic function for sending commands
Ruben_Heintjens 0:73f2160fef5a 82 */
Ruben_Heintjens 0:73f2160fef5a 83 void Epd::SendCommand(unsigned char command) {
Ruben_Heintjens 0:73f2160fef5a 84 //DigitalOut(dc_pin, LOW);
Ruben_Heintjens 0:73f2160fef5a 85 dc_pin = 0;
Ruben_Heintjens 0:73f2160fef5a 86 SpiTransfer(command);
Ruben_Heintjens 0:73f2160fef5a 87 }
Ruben_Heintjens 0:73f2160fef5a 88
Ruben_Heintjens 0:73f2160fef5a 89 /**
Ruben_Heintjens 0:73f2160fef5a 90 * @brief: basic function for sending data
Ruben_Heintjens 0:73f2160fef5a 91 */
Ruben_Heintjens 0:73f2160fef5a 92 void Epd::SendData(unsigned char data) {
Ruben_Heintjens 0:73f2160fef5a 93 //DigitalOut(dc_pin, HIGH);
Ruben_Heintjens 0:73f2160fef5a 94 dc_pin = 1;
Ruben_Heintjens 0:73f2160fef5a 95 SpiTransfer(data);
Ruben_Heintjens 0:73f2160fef5a 96 }
Ruben_Heintjens 0:73f2160fef5a 97
Ruben_Heintjens 0:73f2160fef5a 98 /**
Ruben_Heintjens 0:73f2160fef5a 99 * @brief: Wait until the busy_pin goes HIGH
Ruben_Heintjens 0:73f2160fef5a 100 */
Ruben_Heintjens 0:73f2160fef5a 101 void Epd::WaitUntilIdle(void) {
Ruben_Heintjens 0:73f2160fef5a 102
Ruben_Heintjens 0:73f2160fef5a 103 /*
Ruben_Heintjens 0:73f2160fef5a 104 //in de while read uit epdif was eerst in gebruik
Ruben_Heintjens 0:73f2160fef5a 105 //busy was 0
Ruben_Heintjens 0:73f2160fef5a 106 while(busy_pin == 1) { //0: busy, 1: idle
Ruben_Heintjens 0:73f2160fef5a 107 DelayMs(100);
Ruben_Heintjens 0:73f2160fef5a 108 }
Ruben_Heintjens 0:73f2160fef5a 109 */
Ruben_Heintjens 0:73f2160fef5a 110 wait (3);
Ruben_Heintjens 0:73f2160fef5a 111 }
Ruben_Heintjens 0:73f2160fef5a 112
Ruben_Heintjens 0:73f2160fef5a 113 /**
Ruben_Heintjens 0:73f2160fef5a 114 * @brief: module reset.
Ruben_Heintjens 0:73f2160fef5a 115 * often used to awaken the module in deep sleep,
Ruben_Heintjens 0:73f2160fef5a 116 * see Epd::Sleep();
Ruben_Heintjens 0:73f2160fef5a 117 */
Ruben_Heintjens 0:73f2160fef5a 118 void Epd::Reset(void) {
Ruben_Heintjens 0:73f2160fef5a 119 //DigitalOut(reset_pin, LOW);
Ruben_Heintjens 0:73f2160fef5a 120 reset_pin = LOW;
Ruben_Heintjens 0:73f2160fef5a 121 printf("pre delay \r\n");
Ruben_Heintjens 0:73f2160fef5a 122 DelayMs(200);
Ruben_Heintjens 0:73f2160fef5a 123 printf("post delay \r\n");
Ruben_Heintjens 0:73f2160fef5a 124 //DigitalOut(reset_pin, HIGH);
Ruben_Heintjens 0:73f2160fef5a 125 reset_pin = HIGH;
Ruben_Heintjens 0:73f2160fef5a 126 DelayMs(200);
Ruben_Heintjens 0:73f2160fef5a 127 }
Ruben_Heintjens 0:73f2160fef5a 128
Ruben_Heintjens 0:73f2160fef5a 129 /**
Ruben_Heintjens 0:73f2160fef5a 130 * @brief: transmit partial data to the SRAM
Ruben_Heintjens 0:73f2160fef5a 131 */
Ruben_Heintjens 0:73f2160fef5a 132 void Epd::SetPartialWindow(const unsigned char* buffer_black, const unsigned char* buffer_red, int x, int y, int w, int l) {
Ruben_Heintjens 0:73f2160fef5a 133 SendCommand(PARTIAL_IN);
Ruben_Heintjens 0:73f2160fef5a 134 SendCommand(PARTIAL_WINDOW);
Ruben_Heintjens 0:73f2160fef5a 135 SendData(x >> 8);
Ruben_Heintjens 0:73f2160fef5a 136 SendData(x & 0xf8); // x should be the multiple of 8, the last 3 bit will always be ignored
Ruben_Heintjens 0:73f2160fef5a 137 SendData(((x & 0xf8) + w - 1) >> 8);
Ruben_Heintjens 0:73f2160fef5a 138 SendData(((x & 0xf8) + w - 1) | 0x07);
Ruben_Heintjens 0:73f2160fef5a 139 SendData(y >> 8);
Ruben_Heintjens 0:73f2160fef5a 140 SendData(y & 0xff);
Ruben_Heintjens 0:73f2160fef5a 141 SendData((y + l - 1) >> 8);
Ruben_Heintjens 0:73f2160fef5a 142 SendData((y + l - 1) & 0xff);
Ruben_Heintjens 0:73f2160fef5a 143 SendData(0x01); // Gates scan both inside and outside of the partial window. (default)
Ruben_Heintjens 0:73f2160fef5a 144 DelayMs(2);
Ruben_Heintjens 0:73f2160fef5a 145 SendCommand(DATA_START_TRANSMISSION_1);
Ruben_Heintjens 0:73f2160fef5a 146 if (buffer_black != NULL) {
Ruben_Heintjens 0:73f2160fef5a 147 for(int i = 0; i < w / 8 * l; i++) {
Ruben_Heintjens 0:73f2160fef5a 148 SendData(buffer_black[i]);
Ruben_Heintjens 0:73f2160fef5a 149 }
Ruben_Heintjens 0:73f2160fef5a 150 }
Ruben_Heintjens 0:73f2160fef5a 151 DelayMs(2);
Ruben_Heintjens 0:73f2160fef5a 152 SendCommand(DATA_START_TRANSMISSION_2);
Ruben_Heintjens 0:73f2160fef5a 153 if (buffer_red != NULL) {
Ruben_Heintjens 0:73f2160fef5a 154 for(int i = 0; i < w / 8 * l; i++) {
Ruben_Heintjens 0:73f2160fef5a 155 SendData(buffer_red[i]);
Ruben_Heintjens 0:73f2160fef5a 156 }
Ruben_Heintjens 0:73f2160fef5a 157 }
Ruben_Heintjens 0:73f2160fef5a 158 DelayMs(2);
Ruben_Heintjens 0:73f2160fef5a 159 SendCommand(PARTIAL_OUT);
Ruben_Heintjens 0:73f2160fef5a 160 }
Ruben_Heintjens 0:73f2160fef5a 161
Ruben_Heintjens 0:73f2160fef5a 162 /**
Ruben_Heintjens 0:73f2160fef5a 163 * @brief: transmit partial data to the black part of SRAM
Ruben_Heintjens 0:73f2160fef5a 164 */
Ruben_Heintjens 0:73f2160fef5a 165 void Epd::SetPartialWindowBlack(const unsigned char* buffer_black, int x, int y, int w, int l) {
Ruben_Heintjens 0:73f2160fef5a 166 SendCommand(PARTIAL_IN);
Ruben_Heintjens 0:73f2160fef5a 167 SendCommand(PARTIAL_WINDOW);
Ruben_Heintjens 0:73f2160fef5a 168 SendData(x >> 8);
Ruben_Heintjens 0:73f2160fef5a 169 SendData(x & 0xf8); // x should be the multiple of 8, the last 3 bit will always be ignored
Ruben_Heintjens 0:73f2160fef5a 170 SendData(((x & 0xf8) + w - 1) >> 8);
Ruben_Heintjens 0:73f2160fef5a 171 SendData(((x & 0xf8) + w - 1) | 0x07);
Ruben_Heintjens 0:73f2160fef5a 172 SendData(y >> 8);
Ruben_Heintjens 0:73f2160fef5a 173 SendData(y & 0xff);
Ruben_Heintjens 0:73f2160fef5a 174 SendData((y + l - 1) >> 8);
Ruben_Heintjens 0:73f2160fef5a 175 SendData((y + l - 1) & 0xff);
Ruben_Heintjens 0:73f2160fef5a 176 SendData(0x01); // Gates scan both inside and outside of the partial window. (default)
Ruben_Heintjens 0:73f2160fef5a 177 DelayMs(2);
Ruben_Heintjens 0:73f2160fef5a 178 SendCommand(DATA_START_TRANSMISSION_1);
Ruben_Heintjens 0:73f2160fef5a 179 if (buffer_black != NULL) {
Ruben_Heintjens 0:73f2160fef5a 180 for(int i = 0; i < w / 8 * l; i++) {
Ruben_Heintjens 0:73f2160fef5a 181 SendData(buffer_black[i]);
Ruben_Heintjens 0:73f2160fef5a 182 }
Ruben_Heintjens 0:73f2160fef5a 183 }
Ruben_Heintjens 0:73f2160fef5a 184 DelayMs(2);
Ruben_Heintjens 0:73f2160fef5a 185 SendCommand(PARTIAL_OUT);
Ruben_Heintjens 0:73f2160fef5a 186 }
Ruben_Heintjens 0:73f2160fef5a 187
Ruben_Heintjens 0:73f2160fef5a 188 /**
Ruben_Heintjens 0:73f2160fef5a 189 * @brief: transmit partial data to the red part of SRAM
Ruben_Heintjens 0:73f2160fef5a 190 */
Ruben_Heintjens 0:73f2160fef5a 191 void Epd::SetPartialWindowRed(const unsigned char* buffer_red, int x, int y, int w, int l) {
Ruben_Heintjens 0:73f2160fef5a 192 SendCommand(PARTIAL_IN);
Ruben_Heintjens 0:73f2160fef5a 193 SendCommand(PARTIAL_WINDOW);
Ruben_Heintjens 0:73f2160fef5a 194 SendData(x >> 8);
Ruben_Heintjens 0:73f2160fef5a 195 SendData(x & 0xf8); // x should be the multiple of 8, the last 3 bit will always be ignored
Ruben_Heintjens 0:73f2160fef5a 196 SendData(((x & 0xf8) + w - 1) >> 8);
Ruben_Heintjens 0:73f2160fef5a 197 SendData(((x & 0xf8) + w - 1) | 0x07);
Ruben_Heintjens 0:73f2160fef5a 198 SendData(y >> 8);
Ruben_Heintjens 0:73f2160fef5a 199 SendData(y & 0xff);
Ruben_Heintjens 0:73f2160fef5a 200 SendData((y + l - 1) >> 8);
Ruben_Heintjens 0:73f2160fef5a 201 SendData((y + l - 1) & 0xff);
Ruben_Heintjens 0:73f2160fef5a 202 SendData(0x01); // Gates scan both inside and outside of the partial window. (default)
Ruben_Heintjens 0:73f2160fef5a 203 DelayMs(2);
Ruben_Heintjens 0:73f2160fef5a 204 SendCommand(DATA_START_TRANSMISSION_2);
Ruben_Heintjens 0:73f2160fef5a 205 if (buffer_red != NULL) {
Ruben_Heintjens 0:73f2160fef5a 206 for(int i = 0; i < w / 8 * l; i++) {
Ruben_Heintjens 0:73f2160fef5a 207 SendData(buffer_red[i]);
Ruben_Heintjens 0:73f2160fef5a 208 }
Ruben_Heintjens 0:73f2160fef5a 209 }
Ruben_Heintjens 0:73f2160fef5a 210 DelayMs(2);
Ruben_Heintjens 0:73f2160fef5a 211 SendCommand(PARTIAL_OUT);
Ruben_Heintjens 0:73f2160fef5a 212 }
Ruben_Heintjens 0:73f2160fef5a 213
Ruben_Heintjens 0:73f2160fef5a 214 /**
Ruben_Heintjens 0:73f2160fef5a 215 * @brief: refresh and displays the frame
Ruben_Heintjens 0:73f2160fef5a 216 */
Ruben_Heintjens 0:73f2160fef5a 217 void Epd::DisplayFrame(const unsigned char* frame_black, const unsigned char* frame_red) {
Ruben_Heintjens 0:73f2160fef5a 218 if (frame_black != NULL) {
Ruben_Heintjens 0:73f2160fef5a 219 SendCommand(DATA_START_TRANSMISSION_1);
Ruben_Heintjens 0:73f2160fef5a 220 DelayMs(2);
Ruben_Heintjens 0:73f2160fef5a 221 for (int i = 0; i < this->width / 8 * this->height; i++) {
Ruben_Heintjens 0:73f2160fef5a 222 //SendData(pgm_read_byte(&frame_black[i]));
Ruben_Heintjens 0:73f2160fef5a 223 SendData(frame_black[i]);
Ruben_Heintjens 0:73f2160fef5a 224 }
Ruben_Heintjens 0:73f2160fef5a 225 DelayMs(2);
Ruben_Heintjens 0:73f2160fef5a 226 }
Ruben_Heintjens 0:73f2160fef5a 227 if (frame_red != NULL) {
Ruben_Heintjens 0:73f2160fef5a 228 SendCommand(DATA_START_TRANSMISSION_2);
Ruben_Heintjens 0:73f2160fef5a 229 DelayMs(2);
Ruben_Heintjens 0:73f2160fef5a 230 for (int i = 0; i < this->width / 8 * this->height; i++) {
Ruben_Heintjens 0:73f2160fef5a 231 //SendData(pgm_read_byte(&frame_red[i]));
Ruben_Heintjens 0:73f2160fef5a 232 SendData(frame_red[i]);
Ruben_Heintjens 0:73f2160fef5a 233 }
Ruben_Heintjens 0:73f2160fef5a 234 DelayMs(2);
Ruben_Heintjens 0:73f2160fef5a 235 }
Ruben_Heintjens 0:73f2160fef5a 236 SendCommand(DISPLAY_REFRESH);
Ruben_Heintjens 0:73f2160fef5a 237 WaitUntilIdle();
Ruben_Heintjens 0:73f2160fef5a 238 }
Ruben_Heintjens 0:73f2160fef5a 239
Ruben_Heintjens 0:73f2160fef5a 240 /**
Ruben_Heintjens 0:73f2160fef5a 241 * @brief: clear the frame data from the SRAM, this won't refresh the display
Ruben_Heintjens 0:73f2160fef5a 242 */
Ruben_Heintjens 0:73f2160fef5a 243 void Epd::ClearFrame(void) {
Ruben_Heintjens 0:73f2160fef5a 244 SendCommand(DATA_START_TRANSMISSION_1);
Ruben_Heintjens 0:73f2160fef5a 245 DelayMs(2);
Ruben_Heintjens 0:73f2160fef5a 246 for(int i = 0; i < width / 8 * height; i++) {
Ruben_Heintjens 0:73f2160fef5a 247 SendData(0xFF);
Ruben_Heintjens 0:73f2160fef5a 248 }
Ruben_Heintjens 0:73f2160fef5a 249 DelayMs(2);
Ruben_Heintjens 0:73f2160fef5a 250 SendCommand(DATA_START_TRANSMISSION_2);
Ruben_Heintjens 0:73f2160fef5a 251 DelayMs(2);
Ruben_Heintjens 0:73f2160fef5a 252 for(int i = 0; i < width / 8 * height; i++) {
Ruben_Heintjens 0:73f2160fef5a 253 SendData(0xFF);
Ruben_Heintjens 0:73f2160fef5a 254 }
Ruben_Heintjens 0:73f2160fef5a 255 DelayMs(2);
Ruben_Heintjens 0:73f2160fef5a 256 }
Ruben_Heintjens 0:73f2160fef5a 257
Ruben_Heintjens 0:73f2160fef5a 258 /**
Ruben_Heintjens 0:73f2160fef5a 259 * @brief: This displays the frame data from SRAM
Ruben_Heintjens 0:73f2160fef5a 260 */
Ruben_Heintjens 0:73f2160fef5a 261 void Epd::DisplayFrame(void) {
Ruben_Heintjens 0:73f2160fef5a 262 SendCommand(DISPLAY_REFRESH);
Ruben_Heintjens 0:73f2160fef5a 263 DelayMs(100);
Ruben_Heintjens 0:73f2160fef5a 264 WaitUntilIdle();
Ruben_Heintjens 0:73f2160fef5a 265 }
Ruben_Heintjens 0:73f2160fef5a 266
Ruben_Heintjens 0:73f2160fef5a 267 /**
Ruben_Heintjens 0:73f2160fef5a 268 * @brief: After this command is transmitted, the chip would enter the deep-sleep mode to save power.
Ruben_Heintjens 0:73f2160fef5a 269 * The deep sleep mode would return to standby by hardware reset. The only one parameter is a
Ruben_Heintjens 0:73f2160fef5a 270 * check code, the command would be executed if check code = 0xA5.
Ruben_Heintjens 0:73f2160fef5a 271 * You can use Epd::Reset() to awaken and use Epd::Init() to initialize.
Ruben_Heintjens 0:73f2160fef5a 272 */
Ruben_Heintjens 0:73f2160fef5a 273 void Epd::Sleep() {
Ruben_Heintjens 0:73f2160fef5a 274 SendCommand(VCOM_AND_DATA_INTERVAL_SETTING);
Ruben_Heintjens 0:73f2160fef5a 275 SendData(0xF7); // border floating
Ruben_Heintjens 0:73f2160fef5a 276 SendCommand(POWER_OFF);
Ruben_Heintjens 0:73f2160fef5a 277 WaitUntilIdle();
Ruben_Heintjens 0:73f2160fef5a 278 SendCommand(DEEP_SLEEP);
Ruben_Heintjens 0:73f2160fef5a 279 SendData(0xA5); // check code
Ruben_Heintjens 0:73f2160fef5a 280 }
Ruben_Heintjens 0:73f2160fef5a 281
Ruben_Heintjens 0:73f2160fef5a 282
Ruben_Heintjens 0:73f2160fef5a 283 /* END OF FILE */
Ruben_Heintjens 0:73f2160fef5a 284
Ruben_Heintjens 0:73f2160fef5a 285
Ruben_Heintjens 0:73f2160fef5a 286
Ruben_Heintjens 0:73f2160fef5a 287
Ruben_Heintjens 0:73f2160fef5a 288