E_paper, E_ink, Screen size 1.54", resolution 200x200, 4 wire spi, Waveshare, Black and White, Kl25Z, 8 wire print connector, supply 3.3 Volt, IL0373 Controller, font size is 8, 12, 16 and 24.
epd1in54.cpp@2:d7fc318a1528, 2018-03-27 (annotated)
- Committer:
- GerritPathuis
- Date:
- Tue Mar 27 17:36:34 2018 +0000
- Revision:
- 2:d7fc318a1528
- Parent:
- 1:d27a7e06c233
- Child:
- 3:e4399b5ceb4b
Tussenstand
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
GerritPathuis | 0:665e04c85d8d | 1 | /** |
GerritPathuis | 0:665e04c85d8d | 2 | * @filename : epd1in54.cpp |
GerritPathuis | 0:665e04c85d8d | 3 | * @brief : Implements for e-paper library |
GerritPathuis | 0:665e04c85d8d | 4 | * @author : Yehui from Waveshare |
GerritPathuis | 0:665e04c85d8d | 5 | * |
GerritPathuis | 0:665e04c85d8d | 6 | * Copyright (C) Waveshare September 5 2017 |
GerritPathuis | 0:665e04c85d8d | 7 | * |
GerritPathuis | 0:665e04c85d8d | 8 | * Permission is hereby granted, free of charge, to any person obtaining a copy |
GerritPathuis | 0:665e04c85d8d | 9 | * of this software and associated documnetation files (the "Software"), to deal |
GerritPathuis | 0:665e04c85d8d | 10 | * in the Software without restriction, including without limitation the rights |
GerritPathuis | 0:665e04c85d8d | 11 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
GerritPathuis | 0:665e04c85d8d | 12 | * copies of the Software, and to permit persons to whom the Software is |
GerritPathuis | 0:665e04c85d8d | 13 | * furished to do so, subject to the following conditions: |
GerritPathuis | 0:665e04c85d8d | 14 | * |
GerritPathuis | 0:665e04c85d8d | 15 | * The above copyright notice and this permission notice shall be included in |
GerritPathuis | 0:665e04c85d8d | 16 | * all copies or substantial portions of the Software. |
GerritPathuis | 0:665e04c85d8d | 17 | * |
GerritPathuis | 0:665e04c85d8d | 18 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
GerritPathuis | 0:665e04c85d8d | 19 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
GerritPathuis | 0:665e04c85d8d | 20 | * FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
GerritPathuis | 0:665e04c85d8d | 21 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
GerritPathuis | 0:665e04c85d8d | 22 | * LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
GerritPathuis | 0:665e04c85d8d | 23 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
GerritPathuis | 0:665e04c85d8d | 24 | * THE SOFTWARE. |
GerritPathuis | 0:665e04c85d8d | 25 | */ |
GerritPathuis | 0:665e04c85d8d | 26 | |
GerritPathuis | 0:665e04c85d8d | 27 | #include <stdlib.h> |
GerritPathuis | 0:665e04c85d8d | 28 | #include "epd1in54.h" |
GerritPathuis | 0:665e04c85d8d | 29 | |
GerritPathuis | 0:665e04c85d8d | 30 | Epd::~Epd() { |
GerritPathuis | 0:665e04c85d8d | 31 | }; |
GerritPathuis | 0:665e04c85d8d | 32 | |
GerritPathuis | 0:665e04c85d8d | 33 | Epd::Epd() { |
GerritPathuis | 0:665e04c85d8d | 34 | reset_pin = RST_PIN; |
GerritPathuis | 0:665e04c85d8d | 35 | dc_pin = DC_PIN; |
GerritPathuis | 0:665e04c85d8d | 36 | cs_pin = CS_PIN; |
GerritPathuis | 0:665e04c85d8d | 37 | busy_pin = BUSY_PIN; |
GerritPathuis | 0:665e04c85d8d | 38 | width = EPD_WIDTH; |
GerritPathuis | 0:665e04c85d8d | 39 | height = EPD_HEIGHT; |
GerritPathuis | 0:665e04c85d8d | 40 | }; |
GerritPathuis | 0:665e04c85d8d | 41 | |
GerritPathuis | 0:665e04c85d8d | 42 | int Epd::Init(const unsigned char* lut) { |
GerritPathuis | 0:665e04c85d8d | 43 | /* this calls the peripheral hardware interface, see epdif */ |
GerritPathuis | 0:665e04c85d8d | 44 | if (IfInit() != 0) { |
GerritPathuis | 0:665e04c85d8d | 45 | return -1; |
GerritPathuis | 0:665e04c85d8d | 46 | } |
GerritPathuis | 0:665e04c85d8d | 47 | /* EPD hardware init start */ |
GerritPathuis | 0:665e04c85d8d | 48 | this->lut = lut; |
GerritPathuis | 0:665e04c85d8d | 49 | Reset(); |
GerritPathuis | 0:665e04c85d8d | 50 | SendCommand(DRIVER_OUTPUT_CONTROL); |
GerritPathuis | 0:665e04c85d8d | 51 | SendData((EPD_HEIGHT - 1) & 0xFF); |
GerritPathuis | 0:665e04c85d8d | 52 | SendData(((EPD_HEIGHT - 1) >> 8) & 0xFF); |
GerritPathuis | 0:665e04c85d8d | 53 | SendData(0x00); // GD = 0; SM = 0; TB = 0; |
GerritPathuis | 0:665e04c85d8d | 54 | SendCommand(BOOSTER_SOFT_START_CONTROL); |
GerritPathuis | 0:665e04c85d8d | 55 | SendData(0xD7); |
GerritPathuis | 0:665e04c85d8d | 56 | SendData(0xD6); |
GerritPathuis | 0:665e04c85d8d | 57 | SendData(0x9D); |
GerritPathuis | 0:665e04c85d8d | 58 | SendCommand(WRITE_VCOM_REGISTER); |
GerritPathuis | 0:665e04c85d8d | 59 | SendData(0xA8); // VCOM 7C |
GerritPathuis | 0:665e04c85d8d | 60 | SendCommand(SET_DUMMY_LINE_PERIOD); |
GerritPathuis | 0:665e04c85d8d | 61 | SendData(0x1A); // 4 dummy lines per gate |
GerritPathuis | 0:665e04c85d8d | 62 | SendCommand(SET_GATE_TIME); |
GerritPathuis | 0:665e04c85d8d | 63 | SendData(0x08); // 2us per line |
GerritPathuis | 0:665e04c85d8d | 64 | SendCommand(DATA_ENTRY_MODE_SETTING); |
GerritPathuis | 0:665e04c85d8d | 65 | SendData(0x03); // X increment; Y increment |
GerritPathuis | 0:665e04c85d8d | 66 | SetLut(this->lut); |
GerritPathuis | 0:665e04c85d8d | 67 | /* EPD hardware init end */ |
GerritPathuis | 0:665e04c85d8d | 68 | return 0; |
GerritPathuis | 0:665e04c85d8d | 69 | } |
GerritPathuis | 0:665e04c85d8d | 70 | |
GerritPathuis | 0:665e04c85d8d | 71 | /** |
GerritPathuis | 0:665e04c85d8d | 72 | * @brief: basic function for sending commands |
GerritPathuis | 0:665e04c85d8d | 73 | */ |
GerritPathuis | 0:665e04c85d8d | 74 | void Epd::SendCommand(unsigned char command) { |
GerritPathuis | 0:665e04c85d8d | 75 | DigitalWrite(dc_pin, LOW); |
GerritPathuis | 0:665e04c85d8d | 76 | SpiTransfer(command); |
GerritPathuis | 0:665e04c85d8d | 77 | } |
GerritPathuis | 0:665e04c85d8d | 78 | |
GerritPathuis | 0:665e04c85d8d | 79 | /** |
GerritPathuis | 0:665e04c85d8d | 80 | * @brief: basic function for sending data |
GerritPathuis | 0:665e04c85d8d | 81 | */ |
GerritPathuis | 0:665e04c85d8d | 82 | void Epd::SendData(unsigned char data) { |
GerritPathuis | 0:665e04c85d8d | 83 | DigitalWrite(dc_pin, HIGH); |
GerritPathuis | 0:665e04c85d8d | 84 | SpiTransfer(data); |
GerritPathuis | 0:665e04c85d8d | 85 | } |
GerritPathuis | 0:665e04c85d8d | 86 | |
GerritPathuis | 1:d27a7e06c233 | 87 | |
GerritPathuis | 1:d27a7e06c233 | 88 | |
GerritPathuis | 1:d27a7e06c233 | 89 | |
GerritPathuis | 0:665e04c85d8d | 90 | /** |
GerritPathuis | 0:665e04c85d8d | 91 | * @brief: Wait until the busy_pin goes LOW |
GerritPathuis | 0:665e04c85d8d | 92 | */ |
GerritPathuis | 0:665e04c85d8d | 93 | void Epd::WaitUntilIdle(void) { |
GerritPathuis | 0:665e04c85d8d | 94 | while(DigitalRead(busy_pin) == HIGH) { //LOW: idle, HIGH: busy |
GerritPathuis | 0:665e04c85d8d | 95 | DelayMs(100); |
GerritPathuis | 0:665e04c85d8d | 96 | } |
GerritPathuis | 0:665e04c85d8d | 97 | } |
GerritPathuis | 0:665e04c85d8d | 98 | |
GerritPathuis | 0:665e04c85d8d | 99 | /** |
GerritPathuis | 0:665e04c85d8d | 100 | * @brief: module reset. |
GerritPathuis | 0:665e04c85d8d | 101 | * often used to awaken the module in deep sleep, |
GerritPathuis | 0:665e04c85d8d | 102 | * see Epd::Sleep(); |
GerritPathuis | 0:665e04c85d8d | 103 | */ |
GerritPathuis | 0:665e04c85d8d | 104 | void Epd::Reset(void) { |
GerritPathuis | 0:665e04c85d8d | 105 | DigitalWrite(reset_pin, LOW); //module reset |
GerritPathuis | 0:665e04c85d8d | 106 | DelayMs(200); |
GerritPathuis | 0:665e04c85d8d | 107 | DigitalWrite(reset_pin, HIGH); |
GerritPathuis | 0:665e04c85d8d | 108 | DelayMs(200); |
GerritPathuis | 0:665e04c85d8d | 109 | } |
GerritPathuis | 0:665e04c85d8d | 110 | |
GerritPathuis | 0:665e04c85d8d | 111 | /** |
GerritPathuis | 0:665e04c85d8d | 112 | * @brief: set the look-up table register |
GerritPathuis | 0:665e04c85d8d | 113 | */ |
GerritPathuis | 0:665e04c85d8d | 114 | void Epd::SetLut(const unsigned char* lut) { |
GerritPathuis | 0:665e04c85d8d | 115 | this->lut = lut; |
GerritPathuis | 0:665e04c85d8d | 116 | SendCommand(WRITE_LUT_REGISTER); |
GerritPathuis | 0:665e04c85d8d | 117 | /* the length of look-up table is 30 bytes */ |
GerritPathuis | 0:665e04c85d8d | 118 | for (int i = 0; i < 30; i++) { |
GerritPathuis | 0:665e04c85d8d | 119 | SendData(this->lut[i]); |
GerritPathuis | 0:665e04c85d8d | 120 | } |
GerritPathuis | 0:665e04c85d8d | 121 | } |
GerritPathuis | 0:665e04c85d8d | 122 | |
GerritPathuis | 0:665e04c85d8d | 123 | /** |
GerritPathuis | 0:665e04c85d8d | 124 | * @brief: put an image buffer to the frame memory. |
GerritPathuis | 0:665e04c85d8d | 125 | * this won't update the display. |
GerritPathuis | 0:665e04c85d8d | 126 | */ |
GerritPathuis | 0:665e04c85d8d | 127 | void Epd::SetFrameMemory( |
GerritPathuis | 0:665e04c85d8d | 128 | const unsigned char* image_buffer, |
GerritPathuis | 0:665e04c85d8d | 129 | int x, |
GerritPathuis | 0:665e04c85d8d | 130 | int y, |
GerritPathuis | 0:665e04c85d8d | 131 | int image_width, |
GerritPathuis | 0:665e04c85d8d | 132 | int image_height |
GerritPathuis | 0:665e04c85d8d | 133 | ) { |
GerritPathuis | 0:665e04c85d8d | 134 | int x_end; |
GerritPathuis | 0:665e04c85d8d | 135 | int y_end; |
GerritPathuis | 0:665e04c85d8d | 136 | |
GerritPathuis | 0:665e04c85d8d | 137 | if ( |
GerritPathuis | 0:665e04c85d8d | 138 | image_buffer == NULL || |
GerritPathuis | 0:665e04c85d8d | 139 | x < 0 || image_width < 0 || |
GerritPathuis | 0:665e04c85d8d | 140 | y < 0 || image_height < 0 |
GerritPathuis | 0:665e04c85d8d | 141 | ) { |
GerritPathuis | 0:665e04c85d8d | 142 | return; |
GerritPathuis | 0:665e04c85d8d | 143 | } |
GerritPathuis | 0:665e04c85d8d | 144 | /* x point must be the multiple of 8 or the last 3 bits will be ignored */ |
GerritPathuis | 0:665e04c85d8d | 145 | x &= 0xF8; |
GerritPathuis | 0:665e04c85d8d | 146 | image_width &= 0xF8; |
GerritPathuis | 0:665e04c85d8d | 147 | if (x + image_width >= this->width) { |
GerritPathuis | 0:665e04c85d8d | 148 | x_end = this->width - 1; |
GerritPathuis | 0:665e04c85d8d | 149 | } else { |
GerritPathuis | 0:665e04c85d8d | 150 | x_end = x + image_width - 1; |
GerritPathuis | 0:665e04c85d8d | 151 | } |
GerritPathuis | 0:665e04c85d8d | 152 | if (y + image_height >= this->height) { |
GerritPathuis | 0:665e04c85d8d | 153 | y_end = this->height - 1; |
GerritPathuis | 0:665e04c85d8d | 154 | } else { |
GerritPathuis | 0:665e04c85d8d | 155 | y_end = y + image_height - 1; |
GerritPathuis | 0:665e04c85d8d | 156 | } |
GerritPathuis | 0:665e04c85d8d | 157 | SetMemoryArea(x, y, x_end, y_end); |
GerritPathuis | 0:665e04c85d8d | 158 | SetMemoryPointer(x, y); |
GerritPathuis | 0:665e04c85d8d | 159 | SendCommand(WRITE_RAM); |
GerritPathuis | 0:665e04c85d8d | 160 | /* send the image data */ |
GerritPathuis | 0:665e04c85d8d | 161 | for (int j = 0; j < y_end - y + 1; j++) { |
GerritPathuis | 0:665e04c85d8d | 162 | for (int i = 0; i < (x_end - x + 1) / 8; i++) { |
GerritPathuis | 0:665e04c85d8d | 163 | SendData(image_buffer[i + j * (image_width / 8)]); |
GerritPathuis | 0:665e04c85d8d | 164 | } |
GerritPathuis | 0:665e04c85d8d | 165 | } |
GerritPathuis | 0:665e04c85d8d | 166 | } |
GerritPathuis | 0:665e04c85d8d | 167 | |
GerritPathuis | 0:665e04c85d8d | 168 | /** |
GerritPathuis | 0:665e04c85d8d | 169 | * @brief: put an image buffer to the frame memory. |
GerritPathuis | 0:665e04c85d8d | 170 | * this won't update the display. |
GerritPathuis | 0:665e04c85d8d | 171 | * |
GerritPathuis | 0:665e04c85d8d | 172 | * Question: When do you use this function instead of |
GerritPathuis | 0:665e04c85d8d | 173 | * void SetFrameMemory( |
GerritPathuis | 0:665e04c85d8d | 174 | * const unsigned char* image_buffer, |
GerritPathuis | 0:665e04c85d8d | 175 | * int x, |
GerritPathuis | 0:665e04c85d8d | 176 | * int y, |
GerritPathuis | 0:665e04c85d8d | 177 | * int image_width, |
GerritPathuis | 0:665e04c85d8d | 178 | * int image_height |
GerritPathuis | 0:665e04c85d8d | 179 | * ); |
GerritPathuis | 0:665e04c85d8d | 180 | * Answer: SetFrameMemory with parameters only reads image data |
GerritPathuis | 0:665e04c85d8d | 181 | * from the RAM but not from the flash in AVR chips (for AVR chips, |
GerritPathuis | 0:665e04c85d8d | 182 | * you have to use the function pgm_read_byte to read buffers |
GerritPathuis | 0:665e04c85d8d | 183 | * from the flash). |
GerritPathuis | 0:665e04c85d8d | 184 | */ |
GerritPathuis | 0:665e04c85d8d | 185 | void Epd::SetFrameMemory(const unsigned char* image_buffer) { |
GerritPathuis | 0:665e04c85d8d | 186 | SetMemoryArea(0, 0, this->width - 1, this->height - 1); |
GerritPathuis | 0:665e04c85d8d | 187 | SetMemoryPointer(0, 0); |
GerritPathuis | 0:665e04c85d8d | 188 | SendCommand(WRITE_RAM); |
GerritPathuis | 0:665e04c85d8d | 189 | /* send the image data */ |
GerritPathuis | 0:665e04c85d8d | 190 | for (int i = 0; i < this->width / 8 * this->height; i++) { |
GerritPathuis | 2:d7fc318a1528 | 191 | SendData(pgm_read_byte(&image_buffer[i])); |
GerritPathuis | 1:d27a7e06c233 | 192 | SendData(*(&image_buffer[i])); |
GerritPathuis | 0:665e04c85d8d | 193 | } |
GerritPathuis | 0:665e04c85d8d | 194 | } |
GerritPathuis | 0:665e04c85d8d | 195 | |
GerritPathuis | 0:665e04c85d8d | 196 | /** |
GerritPathuis | 0:665e04c85d8d | 197 | * @brief: clear the frame memory with the specified color. |
GerritPathuis | 0:665e04c85d8d | 198 | * this won't update the display. |
GerritPathuis | 0:665e04c85d8d | 199 | */ |
GerritPathuis | 0:665e04c85d8d | 200 | void Epd::ClearFrameMemory(unsigned char color) { |
GerritPathuis | 0:665e04c85d8d | 201 | SetMemoryArea(0, 0, this->width - 1, this->height - 1); |
GerritPathuis | 0:665e04c85d8d | 202 | SetMemoryPointer(0, 0); |
GerritPathuis | 0:665e04c85d8d | 203 | SendCommand(WRITE_RAM); |
GerritPathuis | 0:665e04c85d8d | 204 | /* send the color data */ |
GerritPathuis | 0:665e04c85d8d | 205 | for (int i = 0; i < this->width / 8 * this->height; i++) { |
GerritPathuis | 0:665e04c85d8d | 206 | SendData(color); |
GerritPathuis | 0:665e04c85d8d | 207 | } |
GerritPathuis | 0:665e04c85d8d | 208 | } |
GerritPathuis | 0:665e04c85d8d | 209 | |
GerritPathuis | 0:665e04c85d8d | 210 | /** |
GerritPathuis | 0:665e04c85d8d | 211 | * @brief: update the display |
GerritPathuis | 0:665e04c85d8d | 212 | * there are 2 memory areas embedded in the e-paper display |
GerritPathuis | 0:665e04c85d8d | 213 | * but once this function is called, |
GerritPathuis | 0:665e04c85d8d | 214 | * the the next action of SetFrameMemory or ClearFrame will |
GerritPathuis | 0:665e04c85d8d | 215 | * set the other memory area. |
GerritPathuis | 0:665e04c85d8d | 216 | */ |
GerritPathuis | 0:665e04c85d8d | 217 | void Epd::DisplayFrame(void) { |
GerritPathuis | 0:665e04c85d8d | 218 | SendCommand(DISPLAY_UPDATE_CONTROL_2); |
GerritPathuis | 0:665e04c85d8d | 219 | SendData(0xC4); |
GerritPathuis | 0:665e04c85d8d | 220 | SendCommand(MASTER_ACTIVATION); |
GerritPathuis | 0:665e04c85d8d | 221 | SendCommand(TERMINATE_FRAME_READ_WRITE); |
GerritPathuis | 0:665e04c85d8d | 222 | WaitUntilIdle(); |
GerritPathuis | 0:665e04c85d8d | 223 | } |
GerritPathuis | 0:665e04c85d8d | 224 | |
GerritPathuis | 0:665e04c85d8d | 225 | /** |
GerritPathuis | 0:665e04c85d8d | 226 | * @brief: private function to specify the memory area for data R/W |
GerritPathuis | 0:665e04c85d8d | 227 | */ |
GerritPathuis | 0:665e04c85d8d | 228 | void Epd::SetMemoryArea(int x_start, int y_start, int x_end, int y_end) { |
GerritPathuis | 0:665e04c85d8d | 229 | SendCommand(SET_RAM_X_ADDRESS_START_END_POSITION); |
GerritPathuis | 0:665e04c85d8d | 230 | /* x point must be the multiple of 8 or the last 3 bits will be ignored */ |
GerritPathuis | 0:665e04c85d8d | 231 | SendData((x_start >> 3) & 0xFF); |
GerritPathuis | 0:665e04c85d8d | 232 | SendData((x_end >> 3) & 0xFF); |
GerritPathuis | 0:665e04c85d8d | 233 | SendCommand(SET_RAM_Y_ADDRESS_START_END_POSITION); |
GerritPathuis | 0:665e04c85d8d | 234 | SendData(y_start & 0xFF); |
GerritPathuis | 0:665e04c85d8d | 235 | SendData((y_start >> 8) & 0xFF); |
GerritPathuis | 0:665e04c85d8d | 236 | SendData(y_end & 0xFF); |
GerritPathuis | 0:665e04c85d8d | 237 | SendData((y_end >> 8) & 0xFF); |
GerritPathuis | 0:665e04c85d8d | 238 | } |
GerritPathuis | 0:665e04c85d8d | 239 | |
GerritPathuis | 0:665e04c85d8d | 240 | /** |
GerritPathuis | 0:665e04c85d8d | 241 | * @brief: private function to specify the start point for data R/W |
GerritPathuis | 0:665e04c85d8d | 242 | */ |
GerritPathuis | 0:665e04c85d8d | 243 | void Epd::SetMemoryPointer(int x, int y) { |
GerritPathuis | 0:665e04c85d8d | 244 | SendCommand(SET_RAM_X_ADDRESS_COUNTER); |
GerritPathuis | 0:665e04c85d8d | 245 | /* x point must be the multiple of 8 or the last 3 bits will be ignored */ |
GerritPathuis | 0:665e04c85d8d | 246 | SendData((x >> 3) & 0xFF); |
GerritPathuis | 0:665e04c85d8d | 247 | SendCommand(SET_RAM_Y_ADDRESS_COUNTER); |
GerritPathuis | 0:665e04c85d8d | 248 | SendData(y & 0xFF); |
GerritPathuis | 0:665e04c85d8d | 249 | SendData((y >> 8) & 0xFF); |
GerritPathuis | 0:665e04c85d8d | 250 | WaitUntilIdle(); |
GerritPathuis | 0:665e04c85d8d | 251 | } |
GerritPathuis | 0:665e04c85d8d | 252 | |
GerritPathuis | 0:665e04c85d8d | 253 | /** |
GerritPathuis | 0:665e04c85d8d | 254 | * @brief: After this command is transmitted, the chip would enter the |
GerritPathuis | 0:665e04c85d8d | 255 | * deep-sleep mode to save power. |
GerritPathuis | 0:665e04c85d8d | 256 | * The deep sleep mode would return to standby by hardware reset. |
GerritPathuis | 0:665e04c85d8d | 257 | * You can use Epd::Init() to awaken |
GerritPathuis | 0:665e04c85d8d | 258 | */ |
GerritPathuis | 0:665e04c85d8d | 259 | void Epd::Sleep() { |
GerritPathuis | 0:665e04c85d8d | 260 | SendCommand(DEEP_SLEEP_MODE); |
GerritPathuis | 0:665e04c85d8d | 261 | WaitUntilIdle(); |
GerritPathuis | 0:665e04c85d8d | 262 | } |
GerritPathuis | 0:665e04c85d8d | 263 | |
GerritPathuis | 0:665e04c85d8d | 264 | const unsigned char lut_full_update[] = |
GerritPathuis | 0:665e04c85d8d | 265 | { |
GerritPathuis | 0:665e04c85d8d | 266 | 0x02, 0x02, 0x01, 0x11, 0x12, 0x12, 0x22, 0x22, |
GerritPathuis | 0:665e04c85d8d | 267 | 0x66, 0x69, 0x69, 0x59, 0x58, 0x99, 0x99, 0x88, |
GerritPathuis | 0:665e04c85d8d | 268 | 0x00, 0x00, 0x00, 0x00, 0xF8, 0xB4, 0x13, 0x51, |
GerritPathuis | 0:665e04c85d8d | 269 | 0x35, 0x51, 0x51, 0x19, 0x01, 0x00 |
GerritPathuis | 0:665e04c85d8d | 270 | }; |
GerritPathuis | 0:665e04c85d8d | 271 | |
GerritPathuis | 0:665e04c85d8d | 272 | const unsigned char lut_partial_update[] = |
GerritPathuis | 0:665e04c85d8d | 273 | { |
GerritPathuis | 0:665e04c85d8d | 274 | 0x10, 0x18, 0x18, 0x08, 0x18, 0x18, 0x08, 0x00, |
GerritPathuis | 0:665e04c85d8d | 275 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
GerritPathuis | 0:665e04c85d8d | 276 | 0x00, 0x00, 0x00, 0x00, 0x13, 0x14, 0x44, 0x12, |
GerritPathuis | 0:665e04c85d8d | 277 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 |
GerritPathuis | 0:665e04c85d8d | 278 | }; |
GerritPathuis | 0:665e04c85d8d | 279 | |
GerritPathuis | 0:665e04c85d8d | 280 | |
GerritPathuis | 0:665e04c85d8d | 281 | /* END OF FILE */ |
GerritPathuis | 0:665e04c85d8d | 282 | |
GerritPathuis | 0:665e04c85d8d | 283 | |
GerritPathuis | 0:665e04c85d8d | 284 |