Driver Library for our displays

Dependents:   dm_bubbles dm_calc dm_paint dm_sdcard_with_adapter ... more

Committer:
displaymodule
Date:
Thu Jan 22 05:49:32 2015 +0000
Revision:
12:ef0528e1b5d1
Parent:
11:264e19992620
Reset Max speed for accessing SD Card

Who changed what in which revision?

UserRevisionLine numberNew contents of line
displaymodule 11:264e19992620 1 /**********************************************************************************************
displaymodule 11:264e19992620 2 Copyright (c) 2014 DisplayModule. All rights reserved.
displaymodule 11:264e19992620 3
displaymodule 11:264e19992620 4 Redistribution and use of this source code, part of this source code or any compiled binary
displaymodule 11:264e19992620 5 based on this source code is permitted as long as the above copyright notice and following
displaymodule 11:264e19992620 6 disclaimer is retained.
displaymodule 11:264e19992620 7
displaymodule 11:264e19992620 8 DISCLAIMER:
displaymodule 11:264e19992620 9 THIS SOFTWARE IS SUPPLIED "AS IS" WITHOUT ANY WARRANTIES AND SUPPORT. DISPLAYMODULE ASSUMES
displaymodule 11:264e19992620 10 NO RESPONSIBILITY OR LIABILITY FOR THE USE OF THE SOFTWARE.
displaymodule 11:264e19992620 11 ********************************************************************************************/
displaymodule 11:264e19992620 12
displaymodule 11:264e19992620 13 /* Notice:
displaymodule 11:264e19992620 14 The panel resolution should be config in DmTftRa8875::init() function.
displaymodule 11:264e19992620 15 RA8875Size size = RA8875_480x272 or RA8875Size size = RA8875_800x480;
displaymodule 11:264e19992620 16 */
displaymodule 11:264e19992620 17
displaymodule 11:264e19992620 18 #include "DmTftRa8875.h"
displaymodule 11:264e19992620 19 #if defined (DM_TOOLCHAIN_ARDUINO)
displaymodule 11:264e19992620 20 DmTftRa8875::DmTftRa8875(uint8_t cs, uint8_t sel)
displaymodule 11:264e19992620 21 #elif defined (DM_TOOLCHAIN_MBED)
displaymodule 11:264e19992620 22 DmTftRa8875::DmTftRa8875(uint8_t cs, uint8_t sel, uint8_t miso, uint8_t mosi, uint8_t clk)
displaymodule 11:264e19992620 23 #endif
displaymodule 11:264e19992620 24 : DmTftBase(480, 272)
displaymodule 11:264e19992620 25 {
displaymodule 11:264e19992620 26 _cs = cs;
displaymodule 11:264e19992620 27 _sel = sel;
displaymodule 11:264e19992620 28 #if defined (DM_TOOLCHAIN_MBED)
displaymodule 11:264e19992620 29 _miso = miso;
displaymodule 11:264e19992620 30 _mosi = mosi;
displaymodule 11:264e19992620 31 _clk = clk;
displaymodule 11:264e19992620 32 #endif
displaymodule 11:264e19992620 33 }
displaymodule 11:264e19992620 34
displaymodule 11:264e19992620 35 DmTftRa8875::~DmTftRa8875()
displaymodule 11:264e19992620 36 {
displaymodule 11:264e19992620 37 #if defined (DM_TOOLCHAIN_MBED)
displaymodule 11:264e19992620 38 delete _pinCS;
displaymodule 11:264e19992620 39 delete _pinSEL;
displaymodule 11:264e19992620 40 delete _spi;
displaymodule 11:264e19992620 41
displaymodule 11:264e19992620 42 _pinCS = NULL;
displaymodule 11:264e19992620 43 _pinSEL = NULL;
displaymodule 11:264e19992620 44 _spi = NULL;
displaymodule 11:264e19992620 45 #endif
displaymodule 11:264e19992620 46 }
displaymodule 11:264e19992620 47
displaymodule 11:264e19992620 48 uint16_t DmTftRa8875::width(void)
displaymodule 11:264e19992620 49 {
displaymodule 11:264e19992620 50 return _width;
displaymodule 11:264e19992620 51 }
displaymodule 11:264e19992620 52
displaymodule 11:264e19992620 53 uint16_t DmTftRa8875::height(void)
displaymodule 11:264e19992620 54 {
displaymodule 11:264e19992620 55 return _height;
displaymodule 11:264e19992620 56 }
displaymodule 11:264e19992620 57
displaymodule 11:264e19992620 58 void DmTftRa8875::writeBus(uint8_t data)
displaymodule 11:264e19992620 59 {
displaymodule 11:264e19992620 60 #if defined (DM_TOOLCHAIN_ARDUINO)
displaymodule 11:264e19992620 61 //SPCR = _spiSettings; // SPI Control Register
displaymodule 11:264e19992620 62 SPDR = data; // SPI Data Register
displaymodule 11:264e19992620 63 while(!(SPSR & _BV(SPIF))); // SPI Status Register Wait for transmission to finish
displaymodule 11:264e19992620 64 #elif defined (DM_TOOLCHAIN_MBED)
displaymodule 11:264e19992620 65 _spi->write(data);
displaymodule 11:264e19992620 66 #endif
displaymodule 11:264e19992620 67 }
displaymodule 11:264e19992620 68
displaymodule 11:264e19992620 69 uint8_t DmTftRa8875::readBus(void)
displaymodule 11:264e19992620 70 {
displaymodule 11:264e19992620 71 #if defined (DM_TOOLCHAIN_ARDUINO)
displaymodule 11:264e19992620 72 //SPCR = _spiSettings; // SPI Control Register
displaymodule 11:264e19992620 73 SPDR = 0; // SPI Data Register
displaymodule 11:264e19992620 74 while(!(SPSR & _BV(SPIF))); // SPI Status Register Wait for transmission to finish
displaymodule 11:264e19992620 75 return SPDR;
displaymodule 11:264e19992620 76 #elif defined (DM_TOOLCHAIN_MBED)
displaymodule 11:264e19992620 77 return _spi->write(0x00); // dummy byte to read
displaymodule 11:264e19992620 78 #endif
displaymodule 11:264e19992620 79 }
displaymodule 11:264e19992620 80
displaymodule 11:264e19992620 81 void DmTftRa8875::sendCommand(uint8_t index)
displaymodule 11:264e19992620 82 {
displaymodule 11:264e19992620 83 cbi(_pinCS, _bitmaskCS);
displaymodule 11:264e19992620 84
displaymodule 11:264e19992620 85 writeBus(0x80);
displaymodule 11:264e19992620 86 writeBus(index);
displaymodule 11:264e19992620 87
displaymodule 11:264e19992620 88 sbi(_pinCS, _bitmaskCS);
displaymodule 11:264e19992620 89 }
displaymodule 11:264e19992620 90
displaymodule 11:264e19992620 91 uint8_t DmTftRa8875::readStatus(void)
displaymodule 11:264e19992620 92 {
displaymodule 11:264e19992620 93 cbi(_pinCS, _bitmaskCS);
displaymodule 11:264e19992620 94
displaymodule 11:264e19992620 95 writeBus(0xC0);
displaymodule 11:264e19992620 96 uint8_t data = readBus();
displaymodule 11:264e19992620 97
displaymodule 11:264e19992620 98 sbi(_pinCS, _bitmaskCS);
displaymodule 11:264e19992620 99
displaymodule 11:264e19992620 100 return data;
displaymodule 11:264e19992620 101 }
displaymodule 11:264e19992620 102
displaymodule 11:264e19992620 103 void DmTftRa8875::sendData(uint16_t data)
displaymodule 11:264e19992620 104 {
displaymodule 11:264e19992620 105
displaymodule 11:264e19992620 106 uint8_t dh = data>>8;
displaymodule 11:264e19992620 107 uint8_t dl = data&0xff;
displaymodule 11:264e19992620 108
displaymodule 11:264e19992620 109 cbi(_pinCS, _bitmaskCS);
displaymodule 11:264e19992620 110
displaymodule 11:264e19992620 111 writeBus(0x00);
displaymodule 11:264e19992620 112 writeBus(dh);
displaymodule 11:264e19992620 113 writeBus(dl);
displaymodule 11:264e19992620 114
displaymodule 11:264e19992620 115 sbi(_pinCS, _bitmaskCS);
displaymodule 11:264e19992620 116
displaymodule 11:264e19992620 117 }
displaymodule 11:264e19992620 118
displaymodule 11:264e19992620 119 void DmTftRa8875::send8BitData(uint8_t data)
displaymodule 11:264e19992620 120 {
displaymodule 11:264e19992620 121 cbi(_pinCS, _bitmaskCS);
displaymodule 11:264e19992620 122
displaymodule 11:264e19992620 123 writeBus(0x00);
displaymodule 11:264e19992620 124 writeBus(data);
displaymodule 11:264e19992620 125
displaymodule 11:264e19992620 126 sbi(_pinCS, _bitmaskCS);
displaymodule 11:264e19992620 127 }
displaymodule 11:264e19992620 128
displaymodule 11:264e19992620 129 uint8_t DmTftRa8875::readData(void)
displaymodule 11:264e19992620 130 {
displaymodule 11:264e19992620 131 cbi(_pinCS, _bitmaskCS);
displaymodule 11:264e19992620 132
displaymodule 11:264e19992620 133 writeBus(0x40);
displaymodule 11:264e19992620 134 uint8_t data = readBus();
displaymodule 11:264e19992620 135
displaymodule 11:264e19992620 136 sbi(_pinCS, _bitmaskCS);
displaymodule 11:264e19992620 137
displaymodule 11:264e19992620 138 return data;
displaymodule 11:264e19992620 139 }
displaymodule 11:264e19992620 140
displaymodule 11:264e19992620 141 void DmTftRa8875::writeReg(uint8_t reg, uint8_t val)
displaymodule 11:264e19992620 142 {
displaymodule 11:264e19992620 143 sendCommand(reg);
displaymodule 11:264e19992620 144 send8BitData(val);
displaymodule 11:264e19992620 145 }
displaymodule 11:264e19992620 146
displaymodule 11:264e19992620 147 uint8_t DmTftRa8875::readReg(uint8_t reg)
displaymodule 11:264e19992620 148 {
displaymodule 11:264e19992620 149 sendCommand(reg);
displaymodule 11:264e19992620 150 return readData();
displaymodule 11:264e19992620 151 }
displaymodule 11:264e19992620 152
displaymodule 11:264e19992620 153 void DmTftRa8875::setAddress(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1)
displaymodule 11:264e19992620 154 {
displaymodule 11:264e19992620 155 /* Set active window X */
displaymodule 11:264e19992620 156 writeReg(0x30, x0); // horizontal start point
displaymodule 11:264e19992620 157 writeReg(0x31, x0 >> 8);
displaymodule 11:264e19992620 158 writeReg(0x34, (uint16_t)(x1) & 0xFF); // horizontal end point
displaymodule 11:264e19992620 159 writeReg(0x35, (uint16_t)(x1) >> 8);
displaymodule 11:264e19992620 160
displaymodule 11:264e19992620 161 /* Set active window Y */
displaymodule 11:264e19992620 162 writeReg(0x32, y0); // vertical start point
displaymodule 11:264e19992620 163 writeReg(0x33, y0 >> 8);
displaymodule 11:264e19992620 164 writeReg(0x36, (uint16_t)(y1) & 0xFF); // vertical end point
displaymodule 11:264e19992620 165 writeReg(0x37, (uint16_t)(y1) >> 8);
displaymodule 11:264e19992620 166
displaymodule 11:264e19992620 167 writeReg(0x46, x0);
displaymodule 11:264e19992620 168 writeReg(0x47, x0 >> 8);
displaymodule 11:264e19992620 169 writeReg(0x48, y0);
displaymodule 11:264e19992620 170 writeReg(0x49, y0 >> 8);
displaymodule 11:264e19992620 171 sendCommand(0x02);
displaymodule 11:264e19992620 172 }
displaymodule 11:264e19992620 173
displaymodule 11:264e19992620 174 void DmTftRa8875::softReset(void)
displaymodule 11:264e19992620 175 {
displaymodule 11:264e19992620 176 //softreset
displaymodule 11:264e19992620 177 sendCommand(0x01);
displaymodule 11:264e19992620 178 send8BitData(0x01);
displaymodule 11:264e19992620 179 delay(10);
displaymodule 11:264e19992620 180 sendCommand(0x01);
displaymodule 11:264e19992620 181 send8BitData(0x00);
displaymodule 11:264e19992620 182 delay(100); // This much delay needed??
displaymodule 11:264e19992620 183 }
displaymodule 11:264e19992620 184
displaymodule 11:264e19992620 185 void DmTftRa8875::init(void)
displaymodule 11:264e19992620 186 {
displaymodule 11:264e19992620 187 // DM_TFT43_108 = RA8875_480x272; DM_TFT50_111 = RA8875_800x480
displaymodule 11:264e19992620 188 RA8875Size size = RA8875_800x480;
displaymodule 11:264e19992620 189
displaymodule 11:264e19992620 190 setTextColor(BLACK, WHITE);
displaymodule 11:264e19992620 191 #if defined (DM_TOOLCHAIN_ARDUINO)
displaymodule 11:264e19992620 192 _pinCS = portOutputRegister(digitalPinToPort(_cs));
displaymodule 11:264e19992620 193 _bitmaskCS = digitalPinToBitMask(_cs);
displaymodule 11:264e19992620 194 _pinSEL = portOutputRegister(digitalPinToPort(_sel));
displaymodule 11:264e19992620 195 _bitmaskSEL = digitalPinToBitMask(_sel);
displaymodule 11:264e19992620 196 pinMode(_cs,OUTPUT);
displaymodule 11:264e19992620 197 pinMode(_sel,OUTPUT);
displaymodule 11:264e19992620 198 digitalWrite(_sel, LOW); // w25 control by MCU
displaymodule 11:264e19992620 199
displaymodule 11:264e19992620 200 sbi(_pinCS, _bitmaskCS);
displaymodule 11:264e19992620 201
displaymodule 11:264e19992620 202 SPI.begin();
displaymodule 11:264e19992620 203 SPI.setClockDivider(SPI_CLOCK_DIV2); // 8 MHz (full! speed!)
displaymodule 11:264e19992620 204 SPI.setBitOrder(MSBFIRST);
displaymodule 11:264e19992620 205 SPI.setDataMode(SPI_MODE0);
displaymodule 11:264e19992620 206 _spiSettings = SPCR;
displaymodule 11:264e19992620 207 #elif defined (DM_TOOLCHAIN_MBED)
displaymodule 11:264e19992620 208 _pinCS = new DigitalOut((PinName)_cs);
displaymodule 11:264e19992620 209 _pinSEL = new DigitalOut((PinName)_sel);
displaymodule 11:264e19992620 210 sbi(_pinSEL, _bitmaskSEL); // w25 control by MCU
displaymodule 11:264e19992620 211
displaymodule 11:264e19992620 212 sbi(_pinCS, _bitmaskCS);
displaymodule 11:264e19992620 213
displaymodule 11:264e19992620 214 _spi = new SPI((PinName)_mosi, (PinName)_miso, (PinName)_clk);
displaymodule 12:ef0528e1b5d1 215 _spi->format(8,0);
displaymodule 12:ef0528e1b5d1 216 _spi->frequency(900000); // Max speed for accessing SD Card
displaymodule 11:264e19992620 217 softReset();
displaymodule 11:264e19992620 218 #endif
displaymodule 11:264e19992620 219
displaymodule 11:264e19992620 220 cbi(_pinCS, _bitmaskCS);
displaymodule 11:264e19992620 221
displaymodule 11:264e19992620 222 /* Timing values */
displaymodule 11:264e19992620 223 uint8_t pixclk;
displaymodule 11:264e19992620 224 uint8_t hsync_start;
displaymodule 11:264e19992620 225 uint8_t hsync_pw;
displaymodule 11:264e19992620 226 uint8_t hsync_finetune;
displaymodule 11:264e19992620 227 uint8_t hsync_nondisp;
displaymodule 11:264e19992620 228 uint8_t vsync_pw;
displaymodule 11:264e19992620 229 uint16_t vsync_nondisp;
displaymodule 11:264e19992620 230 uint16_t vsync_start;
displaymodule 11:264e19992620 231
displaymodule 11:264e19992620 232 if(size == RA8875_480x272) {
displaymodule 11:264e19992620 233 _width = 480;
displaymodule 11:264e19992620 234 _height = 272;
displaymodule 11:264e19992620 235 setWidth(_width);
displaymodule 11:264e19992620 236 setHeight(_height);
displaymodule 11:264e19992620 237 // PLL init
displaymodule 11:264e19992620 238 // 20MHz*(10+1)/((RA8875_PLLC1_PLLDIV1 +1) * 2^RA8875_PLLC2_DIV4))
displaymodule 11:264e19992620 239 writeReg(0x88, 0x00 + 10);
displaymodule 11:264e19992620 240 delay(1);
displaymodule 11:264e19992620 241 writeReg(0x89, 0x02);
displaymodule 11:264e19992620 242 delay(1);
displaymodule 11:264e19992620 243
displaymodule 11:264e19992620 244 pixclk = 0x80 | 0x02;
displaymodule 11:264e19992620 245 hsync_nondisp = 10;
displaymodule 11:264e19992620 246 hsync_start = 8;
displaymodule 11:264e19992620 247 hsync_pw = 48;
displaymodule 11:264e19992620 248 hsync_finetune = 0;
displaymodule 11:264e19992620 249 vsync_nondisp = 3;
displaymodule 11:264e19992620 250 vsync_start = 8;
displaymodule 11:264e19992620 251 vsync_pw = 10;
displaymodule 11:264e19992620 252 }
displaymodule 11:264e19992620 253
displaymodule 11:264e19992620 254 if(size == RA8875_800x480) {
displaymodule 11:264e19992620 255 _width = 800;
displaymodule 11:264e19992620 256 _height = 480;
displaymodule 11:264e19992620 257 setWidth(_width);
displaymodule 11:264e19992620 258 setHeight(_height);
displaymodule 11:264e19992620 259 // PLL init
displaymodule 11:264e19992620 260 // 20MHz*(10+1)/((RA8875_PLLC1_PLLDIV1 +1) * 2^RA8875_PLLC2_DIV4))
displaymodule 11:264e19992620 261 writeReg(0x88, 0x00 + 10);
displaymodule 11:264e19992620 262 delay(1);
displaymodule 11:264e19992620 263 writeReg(0x89, 0x02);
displaymodule 11:264e19992620 264 delay(1);
displaymodule 11:264e19992620 265
displaymodule 11:264e19992620 266 pixclk = 0x80 | 0x01;
displaymodule 11:264e19992620 267 hsync_nondisp = 26;
displaymodule 11:264e19992620 268 hsync_start = 32;
displaymodule 11:264e19992620 269 hsync_pw = 96;
displaymodule 11:264e19992620 270 hsync_finetune = 0;
displaymodule 11:264e19992620 271 vsync_nondisp = 32;
displaymodule 11:264e19992620 272 vsync_start = 23;
displaymodule 11:264e19992620 273 vsync_pw = 2;
displaymodule 11:264e19992620 274 }
displaymodule 11:264e19992620 275
displaymodule 11:264e19992620 276 writeReg(0x10, 0x0C | 0x00);
displaymodule 11:264e19992620 277
displaymodule 11:264e19992620 278 writeReg(0x04, pixclk);
displaymodule 11:264e19992620 279 delay(1);
displaymodule 11:264e19992620 280
displaymodule 11:264e19992620 281 /* Horizontal settings registers */
displaymodule 11:264e19992620 282 writeReg(0x14, (_width / 8) - 1); // H width: (HDWR + 1) * 8 = 480
displaymodule 11:264e19992620 283 writeReg(0x15, 0x00 + hsync_finetune);
displaymodule 11:264e19992620 284 writeReg(0x16, (hsync_nondisp - hsync_finetune - 2)/8); // H non-display: HNDR * 8 + HNDFTR + 2 = 10
displaymodule 11:264e19992620 285 writeReg(0x17, hsync_start/8 - 1); // Hsync start: (HSTR + 1)*8
displaymodule 11:264e19992620 286 writeReg(0x18, 0x00 + (hsync_pw/8 - 1)); // HSync pulse width = (HPWR+1) * 8
displaymodule 11:264e19992620 287
displaymodule 11:264e19992620 288 /* Vertical settings registers */
displaymodule 11:264e19992620 289 writeReg(0x19, (uint16_t)(_height - 1) & 0xFF);
displaymodule 11:264e19992620 290 writeReg(0x1A, (uint16_t)(_height - 1) >> 8);
displaymodule 11:264e19992620 291 writeReg(0x1B, vsync_nondisp-1); // V non-display period = VNDR + 1
displaymodule 11:264e19992620 292 writeReg(0x1C, vsync_nondisp >> 8);
displaymodule 11:264e19992620 293 writeReg(0x1D, vsync_start-1); // Vsync start position = VSTR + 1
displaymodule 11:264e19992620 294 writeReg(0x1E, vsync_start >> 8);
displaymodule 11:264e19992620 295 writeReg(0x1F, 0x00 + vsync_pw - 1); // Vsync pulse width = VPWR + 1
displaymodule 11:264e19992620 296
displaymodule 11:264e19992620 297 /* Set active window X */
displaymodule 11:264e19992620 298 writeReg(0x30, 0); // horizontal start point
displaymodule 11:264e19992620 299 writeReg(0x31, 0);
displaymodule 11:264e19992620 300 writeReg(0x34, (uint16_t)(_width - 1) & 0xFF); // horizontal end point
displaymodule 11:264e19992620 301 writeReg(0x35, (uint16_t)(_width - 1) >> 8);
displaymodule 11:264e19992620 302
displaymodule 11:264e19992620 303 /* Set active window Y */
displaymodule 11:264e19992620 304 writeReg(0x32, 0); // vertical start point
displaymodule 11:264e19992620 305 writeReg(0x33, 0);
displaymodule 11:264e19992620 306 writeReg(0x36, (uint16_t)(_height - 1) & 0xFF); // vertical end point
displaymodule 11:264e19992620 307 writeReg(0x37, (uint16_t)(_height - 1) >> 8);
displaymodule 11:264e19992620 308 /* Clear the entire window */
displaymodule 11:264e19992620 309 writeReg(0x8E, 0x80 | 0x00);
displaymodule 11:264e19992620 310 /* Wait for the command to finish */
displaymodule 11:264e19992620 311 while (readReg(0x8E) & 0x80);
displaymodule 11:264e19992620 312 //delay(100);
displaymodule 11:264e19992620 313 // display on
displaymodule 11:264e19992620 314 writeReg(0x01, 0x00 | 0x80);
displaymodule 11:264e19992620 315 // GPIOX on
displaymodule 11:264e19992620 316 writeReg(0xC7, 1);
displaymodule 11:264e19992620 317 sbi(_pinCS, _bitmaskCS);
displaymodule 11:264e19992620 318
displaymodule 11:264e19992620 319 //clearScreen();
displaymodule 11:264e19992620 320 setFontColor(BLACK, WHITE);
displaymodule 11:264e19992620 321 //setFontZoom(0, 0);
displaymodule 11:264e19992620 322
displaymodule 11:264e19992620 323 // spi flash control by MCU
displaymodule 11:264e19992620 324 w25CtrlByMCU();
displaymodule 11:264e19992620 325
displaymodule 11:264e19992620 326 //backlight on
displaymodule 11:264e19992620 327 backlightOn(true);
displaymodule 11:264e19992620 328 backlightAdjust(255); // max luminance
displaymodule 11:264e19992620 329
displaymodule 11:264e19992620 330 }
displaymodule 11:264e19992620 331
displaymodule 11:264e19992620 332 void DmTftRa8875::eableKeyScan(bool on)
displaymodule 11:264e19992620 333 {
displaymodule 11:264e19992620 334 if(on) {
displaymodule 11:264e19992620 335 writeReg(0xC0, (1 << 7) | (0 << 4 ) | 1 ); // enable key scan
displaymodule 11:264e19992620 336 } else {
displaymodule 11:264e19992620 337 writeReg(0xC0, (0 << 7));
displaymodule 11:264e19992620 338 }
displaymodule 11:264e19992620 339 }
displaymodule 11:264e19992620 340
displaymodule 11:264e19992620 341 uint8_t DmTftRa8875::getKeyValue(void)
displaymodule 11:264e19992620 342 {
displaymodule 11:264e19992620 343 uint8_t data = 0xFF;
displaymodule 11:264e19992620 344 sendCommand(0xC2);
displaymodule 11:264e19992620 345 data = readData();
displaymodule 11:264e19992620 346
displaymodule 11:264e19992620 347 // Clear key interrupt status
displaymodule 11:264e19992620 348 writeReg(0xF1,readReg(0xF1) | 0x10);
displaymodule 11:264e19992620 349 delay(1);
displaymodule 11:264e19992620 350 return data;
displaymodule 11:264e19992620 351
displaymodule 11:264e19992620 352 }
displaymodule 11:264e19992620 353
displaymodule 11:264e19992620 354 bool DmTftRa8875::isKeyPress(void)
displaymodule 11:264e19992620 355 {
displaymodule 11:264e19992620 356 uint8_t temp;
displaymodule 11:264e19992620 357 temp = readReg(0xF1);
displaymodule 11:264e19992620 358
displaymodule 11:264e19992620 359 if(temp & 0x10) {
displaymodule 11:264e19992620 360 return true;
displaymodule 11:264e19992620 361 } else {
displaymodule 11:264e19992620 362 return false;
displaymodule 11:264e19992620 363 }
displaymodule 11:264e19992620 364 }
displaymodule 11:264e19992620 365
displaymodule 11:264e19992620 366 void DmTftRa8875::backlightOn(bool on)
displaymodule 11:264e19992620 367 {
displaymodule 11:264e19992620 368 if(on) {
displaymodule 11:264e19992620 369 writeReg(0x8A, (1 << 7) | (10 << 0 )); // enable PWM1
displaymodule 11:264e19992620 370 } else {
displaymodule 11:264e19992620 371 writeReg(0x8A, (0 << 7) | (10 << 0 ));
displaymodule 11:264e19992620 372 }
displaymodule 11:264e19992620 373 }
displaymodule 11:264e19992620 374
displaymodule 11:264e19992620 375 void DmTftRa8875::backlightAdjust(uint8_t value)
displaymodule 11:264e19992620 376 {
displaymodule 11:264e19992620 377 writeReg(0x8B, value);
displaymodule 11:264e19992620 378 }
displaymodule 11:264e19992620 379
displaymodule 11:264e19992620 380 void DmTftRa8875::w25CtrlByMCU(void)
displaymodule 11:264e19992620 381 {
displaymodule 11:264e19992620 382 #if defined (DM_TOOLCHAIN_ARDUINO)
displaymodule 11:264e19992620 383 digitalWrite(_sel, LOW);
displaymodule 11:264e19992620 384 #elif defined (DM_TOOLCHAIN_MBED)
displaymodule 11:264e19992620 385 cbi(_pinSEL, _bitmaskSEL);
displaymodule 11:264e19992620 386 #endif
displaymodule 11:264e19992620 387 }
displaymodule 11:264e19992620 388
displaymodule 11:264e19992620 389 void DmTftRa8875::w25CtrlByRa8875(void)
displaymodule 11:264e19992620 390 {
displaymodule 11:264e19992620 391 #if defined (DM_TOOLCHAIN_ARDUINO)
displaymodule 11:264e19992620 392 digitalWrite(_sel, HIGH);
displaymodule 11:264e19992620 393 #elif defined (DM_TOOLCHAIN_MBED)
displaymodule 11:264e19992620 394 sbi(_pinSEL, _bitmaskSEL);
displaymodule 11:264e19992620 395 #endif
displaymodule 11:264e19992620 396
displaymodule 11:264e19992620 397 }
displaymodule 11:264e19992620 398
displaymodule 11:264e19992620 399 void DmTftRa8875::drawImageContinuous(uint32_t startaddress,uint32_t count,uint16_t x0,uint16_t y0,uint16_t x1,uint16_t y1)
displaymodule 11:264e19992620 400 {
displaymodule 11:264e19992620 401 w25CtrlByRa8875();
displaymodule 11:264e19992620 402
displaymodule 11:264e19992620 403 setAddress(x0, y0, x1-1, y1-1);
displaymodule 11:264e19992620 404
displaymodule 11:264e19992620 405 writeReg(0xE0, 0x00);
displaymodule 11:264e19992620 406
displaymodule 11:264e19992620 407 writeReg(0x05, (0 << 7) | (0 << 6) | (1 << 5) | (0 << 3) | (1 << 2) | (3 << 1));
displaymodule 11:264e19992620 408 writeReg(0x06, (0 << 0)); // set serial flash frequency
displaymodule 11:264e19992620 409
displaymodule 11:264e19992620 410 writeReg(0xB0,startaddress & 0xFF); // DMA Source Start Address
displaymodule 11:264e19992620 411 writeReg(0xB1,startaddress >> 8);
displaymodule 11:264e19992620 412 writeReg(0xB2,startaddress >> 16);
displaymodule 11:264e19992620 413
displaymodule 11:264e19992620 414 writeReg(0xB4, count & 0xFF); // DMA Transfer Number
displaymodule 11:264e19992620 415 writeReg(0xB6, (count & 0xFF00) >> 8 );
displaymodule 11:264e19992620 416 writeReg(0xB8, (count & 0xFF0000) >> 16);
displaymodule 11:264e19992620 417
displaymodule 11:264e19992620 418
displaymodule 11:264e19992620 419 writeReg(0xBF, 0x00); // Continuous mode
displaymodule 11:264e19992620 420 writeReg(0xBF, readReg(0xBF) | 0x01); //start DMA
displaymodule 11:264e19992620 421
displaymodule 11:264e19992620 422 /* Wait for the DMA Transfer to finish */
displaymodule 11:264e19992620 423 while (readReg(0xBF) & 0x01);
displaymodule 11:264e19992620 424
displaymodule 11:264e19992620 425 w25CtrlByMCU();
displaymodule 11:264e19992620 426
displaymodule 11:264e19992620 427 }
displaymodule 11:264e19992620 428
displaymodule 11:264e19992620 429 void DmTftRa8875::drawImageBlock(uint32_t startaddress, uint32_t count, uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1,uint16_t pic_width, uint16_t block_width, uint16_t block_height)
displaymodule 11:264e19992620 430 {
displaymodule 11:264e19992620 431 w25CtrlByRa8875();
displaymodule 11:264e19992620 432
displaymodule 11:264e19992620 433 setAddress(x0, y0, x1-1, y1-1);
displaymodule 11:264e19992620 434
displaymodule 11:264e19992620 435 writeReg(0xE0, 0x00);
displaymodule 11:264e19992620 436
displaymodule 11:264e19992620 437 writeReg(0x05, (0 << 7) | (0 << 6) | (1 << 5) | (0 << 3) | (1 << 2) | (3 << 1));
displaymodule 11:264e19992620 438 writeReg(0x06, (0 << 0)); // set serial flash frequency
displaymodule 11:264e19992620 439
displaymodule 11:264e19992620 440 writeReg(0xB0,startaddress & 0xFF); // DMA Source Start Address
displaymodule 11:264e19992620 441 writeReg(0xB1,startaddress >> 8);
displaymodule 11:264e19992620 442 writeReg(0xB2,startaddress >> 16);
displaymodule 11:264e19992620 443
displaymodule 11:264e19992620 444 writeReg(0xB4, block_width & 0xFF); // DMA block width
displaymodule 11:264e19992620 445 writeReg(0xB5, block_width >> 8 );
displaymodule 11:264e19992620 446 writeReg(0xB6, block_height & 0xFF); // DMA block height
displaymodule 11:264e19992620 447 writeReg(0xB7, block_height >> 8 );
displaymodule 11:264e19992620 448
displaymodule 11:264e19992620 449 writeReg(0xB8, pic_width & 0xFF); // DMA soruce picture width
displaymodule 11:264e19992620 450 writeReg(0xB9, pic_width >> 8 );
displaymodule 11:264e19992620 451
displaymodule 11:264e19992620 452 writeReg(0xBF, 0x02); // block mode
displaymodule 11:264e19992620 453 writeReg(0xBF, readReg(0xBF) | 0x01); //start DMA
displaymodule 11:264e19992620 454
displaymodule 11:264e19992620 455 /* Wait for the DMA Transfer to finish */
displaymodule 11:264e19992620 456 while (readReg(0xBF) & 0x01);
displaymodule 11:264e19992620 457
displaymodule 11:264e19992620 458 w25CtrlByMCU();
displaymodule 11:264e19992620 459
displaymodule 11:264e19992620 460 }
displaymodule 11:264e19992620 461
displaymodule 11:264e19992620 462 void DmTftRa8875::drawPoint(uint16_t x, uint16_t y, uint16_t radius)
displaymodule 11:264e19992620 463 {
displaymodule 11:264e19992620 464 if (radius == 0) {
displaymodule 11:264e19992620 465 cbi(_pinCS, _bitmaskCS);
displaymodule 11:264e19992620 466
displaymodule 11:264e19992620 467 setAddress(x,y,x,y);
displaymodule 11:264e19992620 468 sendData(_fgColor);
displaymodule 11:264e19992620 469
displaymodule 11:264e19992620 470 sbi(_pinCS, _bitmaskCS);
displaymodule 11:264e19992620 471 } else {
displaymodule 11:264e19992620 472 fillRectangle(x-radius,y-radius,x+radius,y+radius, _fgColor);
displaymodule 11:264e19992620 473 }
displaymodule 11:264e19992620 474 }
displaymodule 11:264e19992620 475
displaymodule 11:264e19992620 476
displaymodule 11:264e19992620 477 void DmTftRa8875::setFontColor(uint16_t background,uint16_t foreground)
displaymodule 11:264e19992620 478 {
displaymodule 11:264e19992620 479 /* Set Background Color */
displaymodule 11:264e19992620 480 _bgColor = background;
displaymodule 11:264e19992620 481 writeReg(0x60, (background & 0xf800) >> 11);
displaymodule 11:264e19992620 482 writeReg(0x61, (background & 0x07e0) >> 5);
displaymodule 11:264e19992620 483 writeReg(0x62, (background & 0x001f));
displaymodule 11:264e19992620 484
displaymodule 11:264e19992620 485 /* Set Fore Color */
displaymodule 11:264e19992620 486 _fgColor = foreground;
displaymodule 11:264e19992620 487 writeReg(0x63, (foreground & 0xf800) >> 11);
displaymodule 11:264e19992620 488 writeReg(0x64, (foreground & 0x07e0) >> 5);
displaymodule 11:264e19992620 489 writeReg(0x65, (foreground & 0x001f));
displaymodule 11:264e19992620 490 }
displaymodule 11:264e19992620 491
displaymodule 11:264e19992620 492
displaymodule 11:264e19992620 493 void DmTftRa8875::setFontZoom(uint8_t Hsize,uint8_t Vsize)
displaymodule 11:264e19992620 494 {
displaymodule 11:264e19992620 495 writeReg(0x22, ((Hsize & 0x03) <<2 | (Vsize & 0x03)));
displaymodule 11:264e19992620 496 }
displaymodule 11:264e19992620 497
displaymodule 11:264e19992620 498 void DmTftRa8875::int2str(int n, char *str)
displaymodule 11:264e19992620 499 {
displaymodule 11:264e19992620 500 char buf[10] = "";
displaymodule 11:264e19992620 501 int i = 0;
displaymodule 11:264e19992620 502 int len = 0;
displaymodule 11:264e19992620 503 int temp = n < 0 ? -n: n;
displaymodule 11:264e19992620 504
displaymodule 11:264e19992620 505 if (str == NULL) {
displaymodule 11:264e19992620 506 return;
displaymodule 11:264e19992620 507 }
displaymodule 11:264e19992620 508 while(temp) {
displaymodule 11:264e19992620 509 buf[i++] = (temp % 10) + '0';
displaymodule 11:264e19992620 510 temp = temp / 10;
displaymodule 11:264e19992620 511 }
displaymodule 11:264e19992620 512
displaymodule 11:264e19992620 513 len = n < 0 ? ++i: i;
displaymodule 11:264e19992620 514 str[i] = 0;
displaymodule 11:264e19992620 515 while(1) {
displaymodule 11:264e19992620 516 i--;
displaymodule 11:264e19992620 517 if (buf[len-i-1] ==0) {
displaymodule 11:264e19992620 518 break;
displaymodule 11:264e19992620 519 }
displaymodule 11:264e19992620 520 str[i] = buf[len-i-1];
displaymodule 11:264e19992620 521 }
displaymodule 11:264e19992620 522 if (i == 0 ) {
displaymodule 11:264e19992620 523 str[i] = '-';
displaymodule 11:264e19992620 524 }
displaymodule 11:264e19992620 525 }
displaymodule 11:264e19992620 526
displaymodule 11:264e19992620 527 void DmTftRa8875::drawNumber(uint16_t x, uint16_t y, int num, int digitsToShow, bool leadingZeros)
displaymodule 11:264e19992620 528 {
displaymodule 11:264e19992620 529 char p[10];
displaymodule 11:264e19992620 530 int2str(num, p);
displaymodule 11:264e19992620 531
displaymodule 11:264e19992620 532 // clear the last number on the screen; default font width is 8.
displaymodule 11:264e19992620 533 for(int i=0; i<digitsToShow; i++)
displaymodule 11:264e19992620 534 drawString(x+i*8, y," ");
displaymodule 11:264e19992620 535
displaymodule 11:264e19992620 536 drawString(x, y, p);
displaymodule 11:264e19992620 537 }
displaymodule 11:264e19992620 538
displaymodule 11:264e19992620 539
displaymodule 11:264e19992620 540 void DmTftRa8875::drawString(uint16_t x, uint16_t y, const char *p)
displaymodule 11:264e19992620 541 {
displaymodule 11:264e19992620 542 setAddress(0, 0, _width-1, _height-1);
displaymodule 11:264e19992620 543
displaymodule 11:264e19992620 544 writeReg(0x40, (1 << 7) | (1 << 0)); // enter text mode
displaymodule 11:264e19992620 545 writeReg(0x2A, x);
displaymodule 11:264e19992620 546 writeReg(0x2B, x >> 8);
displaymodule 11:264e19992620 547 writeReg(0x2C, y);
displaymodule 11:264e19992620 548 writeReg(0x2D, y >> 8);
displaymodule 11:264e19992620 549
displaymodule 11:264e19992620 550 writeReg(0x2F, 0x00);
displaymodule 11:264e19992620 551 writeReg(0x21, (0 << 7) | (0 << 5) | (0 << 1) | (0 << 0));
displaymodule 11:264e19992620 552 sendCommand(0x02);
displaymodule 11:264e19992620 553
displaymodule 11:264e19992620 554 while (*p != '\0') {
displaymodule 11:264e19992620 555 send8BitData(*p);
displaymodule 11:264e19992620 556 while ((readStatus() & 0x80) == 0x80); // wait finish
displaymodule 11:264e19992620 557 p++;
displaymodule 11:264e19992620 558 }
displaymodule 11:264e19992620 559 writeReg(0x40, (0 << 7)); // enter graphics mode
displaymodule 11:264e19992620 560 }
displaymodule 11:264e19992620 561
displaymodule 11:264e19992620 562 void DmTftRa8875::drawStringCentered(uint16_t x, uint16_t y, uint16_t width, uint16_t height, const char *p)
displaymodule 11:264e19992620 563 {
displaymodule 11:264e19992620 564
displaymodule 11:264e19992620 565 int len = strlen(p);
displaymodule 11:264e19992620 566 uint16_t tmp = len * 8;
displaymodule 11:264e19992620 567 if (tmp <= width) {
displaymodule 11:264e19992620 568 x += (width - tmp)/2;
displaymodule 11:264e19992620 569 }
displaymodule 11:264e19992620 570 if (16 <= height) {
displaymodule 11:264e19992620 571 y += (height - 16)/2;
displaymodule 11:264e19992620 572 }
displaymodule 11:264e19992620 573
displaymodule 11:264e19992620 574 drawString(x, y, p);
displaymodule 11:264e19992620 575 }
displaymodule 11:264e19992620 576
displaymodule 11:264e19992620 577 void DmTftRa8875::clearScreen(uint16_t color)
displaymodule 11:264e19992620 578 {
displaymodule 11:264e19992620 579 rectangle(0, 0, _width-1, _height-1, color, true);
displaymodule 11:264e19992620 580 }
displaymodule 11:264e19992620 581
displaymodule 11:264e19992620 582 void DmTftRa8875::rectangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color, bool filled)
displaymodule 11:264e19992620 583 {
displaymodule 11:264e19992620 584 setAddress(0, 0, _width-1, _height-1);
displaymodule 11:264e19992620 585
displaymodule 11:264e19992620 586 /* Set x0 */
displaymodule 11:264e19992620 587 writeReg(0x91, x0);
displaymodule 11:264e19992620 588 writeReg(0x92, x0 >> 8);
displaymodule 11:264e19992620 589
displaymodule 11:264e19992620 590 /* Set y0 */
displaymodule 11:264e19992620 591 writeReg(0x93, y0);
displaymodule 11:264e19992620 592 writeReg(0x94, y0 >> 8);
displaymodule 11:264e19992620 593
displaymodule 11:264e19992620 594 /* Set x1 */
displaymodule 11:264e19992620 595 writeReg(0x95, x1);
displaymodule 11:264e19992620 596 writeReg(0x96, x1 >> 8);
displaymodule 11:264e19992620 597
displaymodule 11:264e19992620 598 /* Set y1 */
displaymodule 11:264e19992620 599 writeReg(0x97, y1);
displaymodule 11:264e19992620 600 writeReg(0x98, y1 >> 8);
displaymodule 11:264e19992620 601
displaymodule 11:264e19992620 602 /* Set Color */
displaymodule 11:264e19992620 603 writeReg(0x63, (color & 0xf800) >> 11);
displaymodule 11:264e19992620 604 writeReg(0x64, (color & 0x07e0) >> 5);
displaymodule 11:264e19992620 605 writeReg(0x65, (color & 0x001f));
displaymodule 11:264e19992620 606
displaymodule 11:264e19992620 607 /* Draw! */
displaymodule 11:264e19992620 608 if (filled) {
displaymodule 11:264e19992620 609 writeReg(0x90, 0xB0);
displaymodule 11:264e19992620 610 } else {
displaymodule 11:264e19992620 611 writeReg(0x90, 0x90);
displaymodule 11:264e19992620 612 }
displaymodule 11:264e19992620 613
displaymodule 11:264e19992620 614 /* Wait for the command to finish */
displaymodule 11:264e19992620 615 while (readReg(0x90) & 0x80);
displaymodule 11:264e19992620 616 }
displaymodule 11:264e19992620 617
displaymodule 11:264e19992620 618 void DmTftRa8875::drawRectangle(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color)
displaymodule 11:264e19992620 619 {
displaymodule 11:264e19992620 620 rectangle(x0, y0, x1, y1, color, false);
displaymodule 11:264e19992620 621 }
displaymodule 11:264e19992620 622 void DmTftRa8875::fillRectangle(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color)
displaymodule 11:264e19992620 623 {
displaymodule 11:264e19992620 624 rectangle(x0, y0, x1, y1, color, true);
displaymodule 11:264e19992620 625 }
displaymodule 11:264e19992620 626
displaymodule 11:264e19992620 627 void DmTftRa8875::drawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color)
displaymodule 11:264e19992620 628 {
displaymodule 11:264e19992620 629 setAddress(0, 0, _width-1, _height-1);
displaymodule 11:264e19992620 630
displaymodule 11:264e19992620 631 /* Set x0 */
displaymodule 11:264e19992620 632 writeReg(0x91, x0);
displaymodule 11:264e19992620 633 writeReg(0x92, x0 >> 8);
displaymodule 11:264e19992620 634
displaymodule 11:264e19992620 635 /* Set y0 */
displaymodule 11:264e19992620 636 writeReg(0x93, y0);
displaymodule 11:264e19992620 637 writeReg(0x94, y0 >> 8);
displaymodule 11:264e19992620 638
displaymodule 11:264e19992620 639 /* Set x1 */
displaymodule 11:264e19992620 640 writeReg(0x95, x1);
displaymodule 11:264e19992620 641 writeReg(0x96, x1 >> 8);
displaymodule 11:264e19992620 642
displaymodule 11:264e19992620 643 /* Set y1 */
displaymodule 11:264e19992620 644 writeReg(0x97, y1);
displaymodule 11:264e19992620 645 writeReg(0x98, y1 >> 8);
displaymodule 11:264e19992620 646
displaymodule 11:264e19992620 647 /* Set Color */
displaymodule 11:264e19992620 648 writeReg(0x63, (color & 0xf800) >> 11);
displaymodule 11:264e19992620 649 writeReg(0x64, (color & 0x07e0) >> 5);
displaymodule 11:264e19992620 650 writeReg(0x65, (color & 0x001f));
displaymodule 11:264e19992620 651
displaymodule 11:264e19992620 652 /* Draw! */
displaymodule 11:264e19992620 653 writeReg(0x90, 0x80);
displaymodule 11:264e19992620 654
displaymodule 11:264e19992620 655 /* Wait for the command to finish */
displaymodule 11:264e19992620 656 while (readReg(0x90) & 0x80);
displaymodule 11:264e19992620 657 }
displaymodule 11:264e19992620 658
displaymodule 11:264e19992620 659 void DmTftRa8875::drawVerticalLine(uint16_t x, uint16_t y, uint16_t length, uint16_t color)
displaymodule 11:264e19992620 660 {
displaymodule 11:264e19992620 661 drawLine(x, y, x, y+length, color);
displaymodule 11:264e19992620 662 }
displaymodule 11:264e19992620 663
displaymodule 11:264e19992620 664 void DmTftRa8875::drawHorizontalLine(uint16_t x, uint16_t y, uint16_t length, uint16_t color)
displaymodule 11:264e19992620 665 {
displaymodule 11:264e19992620 666 drawLine(x, y, x+length, y, color);
displaymodule 11:264e19992620 667 }
displaymodule 11:264e19992620 668
displaymodule 11:264e19992620 669 void DmTftRa8875::circle(int16_t x, int16_t y, int16_t r, uint16_t color, bool filled)
displaymodule 11:264e19992620 670 {
displaymodule 11:264e19992620 671 setAddress(0, 0, _width-1, _height-1);
displaymodule 11:264e19992620 672
displaymodule 11:264e19992620 673 /* Set x */
displaymodule 11:264e19992620 674 writeReg(0x99, x);
displaymodule 11:264e19992620 675 writeReg(0x9A, x >> 8);
displaymodule 11:264e19992620 676
displaymodule 11:264e19992620 677 /* Set y */
displaymodule 11:264e19992620 678 writeReg(0x9B, y);
displaymodule 11:264e19992620 679 writeReg(0x9C, y >> 8);
displaymodule 11:264e19992620 680
displaymodule 11:264e19992620 681 /* Set Radius */
displaymodule 11:264e19992620 682 writeReg(0x9D, r);
displaymodule 11:264e19992620 683
displaymodule 11:264e19992620 684 /* Set Color */
displaymodule 11:264e19992620 685 writeReg(0x63, (color & 0xf800) >> 11);
displaymodule 11:264e19992620 686 writeReg(0x64, (color & 0x07e0) >> 5);
displaymodule 11:264e19992620 687 writeReg(0x65, (color & 0x001f));
displaymodule 11:264e19992620 688
displaymodule 11:264e19992620 689 /* Draw! */
displaymodule 11:264e19992620 690 if (filled) {
displaymodule 11:264e19992620 691 writeReg(0x90, 0x40 | 0x20);
displaymodule 11:264e19992620 692 } else {
displaymodule 11:264e19992620 693 writeReg(0x90, 0x40 | 0x00);
displaymodule 11:264e19992620 694 }
displaymodule 11:264e19992620 695
displaymodule 11:264e19992620 696 /* Wait for the command to finish */
displaymodule 11:264e19992620 697 while (readReg(0x90) & 0x40);
displaymodule 11:264e19992620 698 }
displaymodule 11:264e19992620 699
displaymodule 11:264e19992620 700 void DmTftRa8875::drawCircle(uint16_t x0, uint16_t y0, uint16_t r, uint16_t color)
displaymodule 11:264e19992620 701 {
displaymodule 11:264e19992620 702 circle(x0, y0, r, color, false);
displaymodule 11:264e19992620 703 }
displaymodule 11:264e19992620 704 void DmTftRa8875::fillCircle(uint16_t x0, uint16_t y0, uint16_t r, uint16_t color)
displaymodule 11:264e19992620 705 {
displaymodule 11:264e19992620 706 circle(x0, y0, r, color, true);
displaymodule 11:264e19992620 707 }
displaymodule 11:264e19992620 708
displaymodule 11:264e19992620 709 void DmTftRa8875::triangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color, bool filled)
displaymodule 11:264e19992620 710 {
displaymodule 11:264e19992620 711 setAddress(0, 0, _width-1, _height-1);
displaymodule 11:264e19992620 712
displaymodule 11:264e19992620 713 /* Set Point 0 */
displaymodule 11:264e19992620 714 writeReg(0x91, x0);
displaymodule 11:264e19992620 715 writeReg(0x92, (x0 >> 8));
displaymodule 11:264e19992620 716 writeReg(0x93, y0);
displaymodule 11:264e19992620 717 writeReg(0x94, (y0 >> 8));
displaymodule 11:264e19992620 718
displaymodule 11:264e19992620 719 /* Set Point 1 */
displaymodule 11:264e19992620 720 writeReg(0x95, x1);
displaymodule 11:264e19992620 721 writeReg(0x96, (x1 >> 8));
displaymodule 11:264e19992620 722 writeReg(0x97, y1);
displaymodule 11:264e19992620 723 writeReg(0x98, (y1 >> 8));
displaymodule 11:264e19992620 724
displaymodule 11:264e19992620 725 /* Set Point 2 */
displaymodule 11:264e19992620 726 writeReg(0xA9, x2);
displaymodule 11:264e19992620 727 writeReg(0xAA, (x2 >> 8));
displaymodule 11:264e19992620 728 writeReg(0xAB, y2);
displaymodule 11:264e19992620 729 writeReg(0xAC, (y2 >> 8));
displaymodule 11:264e19992620 730
displaymodule 11:264e19992620 731 /* Set Color */
displaymodule 11:264e19992620 732 writeReg(0x63, (color & 0xf800) >> 11);
displaymodule 11:264e19992620 733 writeReg(0x64, (color & 0x07e0) >> 5);
displaymodule 11:264e19992620 734 writeReg(0x65, (color & 0x001f));
displaymodule 11:264e19992620 735
displaymodule 11:264e19992620 736 /* Draw! */
displaymodule 11:264e19992620 737 if (filled) {
displaymodule 11:264e19992620 738 writeReg(0x90, 0xA1);
displaymodule 11:264e19992620 739 } else {
displaymodule 11:264e19992620 740 writeReg(0x90, 0x81);
displaymodule 11:264e19992620 741 }
displaymodule 11:264e19992620 742
displaymodule 11:264e19992620 743 /* Wait for the command to finish */
displaymodule 11:264e19992620 744 while (readReg(0x90) & 0x80);
displaymodule 11:264e19992620 745 }
displaymodule 11:264e19992620 746
displaymodule 11:264e19992620 747 void DmTftRa8875::drawTriangle(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color)
displaymodule 11:264e19992620 748 {
displaymodule 11:264e19992620 749 triangle(x0, y0, x1, y1, x2, y2, color, false);
displaymodule 11:264e19992620 750 }
displaymodule 11:264e19992620 751
displaymodule 11:264e19992620 752 void DmTftRa8875::fillTriangle(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color)
displaymodule 11:264e19992620 753 {
displaymodule 11:264e19992620 754 triangle(x0, y0, x1, y1, x2, y2, color, true);
displaymodule 11:264e19992620 755 }
displaymodule 11:264e19992620 756
displaymodule 11:264e19992620 757 void DmTftRa8875::ellipse(int16_t x0, int16_t y0, int16_t longAxis, int16_t shortAxis, uint16_t color, bool filled)
displaymodule 11:264e19992620 758 {
displaymodule 11:264e19992620 759 setAddress(0, 0, _width-1, _height-1);
displaymodule 11:264e19992620 760
displaymodule 11:264e19992620 761 /* Set Center Point */
displaymodule 11:264e19992620 762 writeReg(0xA5, x0);
displaymodule 11:264e19992620 763 writeReg(0xA6, (x0 >> 8));
displaymodule 11:264e19992620 764 writeReg(0xA7, y0);
displaymodule 11:264e19992620 765 writeReg(0xA8, (y0 >> 8));
displaymodule 11:264e19992620 766
displaymodule 11:264e19992620 767 /* Set Long and Short Axis */
displaymodule 11:264e19992620 768 writeReg(0xA1, longAxis);
displaymodule 11:264e19992620 769 writeReg(0xA2, (longAxis >> 8));
displaymodule 11:264e19992620 770 writeReg(0xA3, shortAxis);
displaymodule 11:264e19992620 771 writeReg(0xA4, (shortAxis >> 8));
displaymodule 11:264e19992620 772
displaymodule 11:264e19992620 773 /* Set Color */
displaymodule 11:264e19992620 774 writeReg(0x63, (color & 0xf800) >> 11);
displaymodule 11:264e19992620 775 writeReg(0x64, (color & 0x07e0) >> 5);
displaymodule 11:264e19992620 776 writeReg(0x65, (color & 0x001f));
displaymodule 11:264e19992620 777
displaymodule 11:264e19992620 778 /* Draw! */
displaymodule 11:264e19992620 779 if (filled) {
displaymodule 11:264e19992620 780 writeReg(0xA0, 0xC0);
displaymodule 11:264e19992620 781 } else {
displaymodule 11:264e19992620 782 writeReg(0xA0, 0x80);
displaymodule 11:264e19992620 783 }
displaymodule 11:264e19992620 784
displaymodule 11:264e19992620 785 /* Wait for the command to finish */
displaymodule 11:264e19992620 786 while (readReg(0xA0) & 0x80);
displaymodule 11:264e19992620 787
displaymodule 11:264e19992620 788 }
displaymodule 11:264e19992620 789
displaymodule 11:264e19992620 790 void DmTftRa8875::drawEllipse(int16_t x0, int16_t y0, int16_t longAxis, int16_t shortAxis, uint16_t color)
displaymodule 11:264e19992620 791 {
displaymodule 11:264e19992620 792 ellipse(x0, y0, longAxis, shortAxis, color, false);
displaymodule 11:264e19992620 793 }
displaymodule 11:264e19992620 794
displaymodule 11:264e19992620 795 void DmTftRa8875::fillEllipse(int16_t x0, int16_t y0, int16_t longAxis, int16_t shortAxis, uint16_t color)
displaymodule 11:264e19992620 796 {
displaymodule 11:264e19992620 797 ellipse(x0, y0, longAxis, shortAxis, color, true);
displaymodule 11:264e19992620 798 }
displaymodule 11:264e19992620 799
displaymodule 11:264e19992620 800 void DmTftRa8875::curve(int16_t x0, int16_t y0, int16_t longAxis, int16_t shortAxis, uint8_t curvePart, uint16_t color, bool filled)
displaymodule 11:264e19992620 801 {
displaymodule 11:264e19992620 802 setAddress(0, 0, _width-1, _height-1);
displaymodule 11:264e19992620 803
displaymodule 11:264e19992620 804 /* Set Center Point */
displaymodule 11:264e19992620 805 writeReg(0xA5, x0);
displaymodule 11:264e19992620 806 writeReg(0xA6, (x0 >> 8));
displaymodule 11:264e19992620 807 writeReg(0xA7, y0);
displaymodule 11:264e19992620 808 writeReg(0xA8, (y0 >> 8));
displaymodule 11:264e19992620 809
displaymodule 11:264e19992620 810 /* Set Long and Short Axis */
displaymodule 11:264e19992620 811 writeReg(0xA1, longAxis);
displaymodule 11:264e19992620 812 writeReg(0xA2, (longAxis >> 8));
displaymodule 11:264e19992620 813 writeReg(0xA3, shortAxis);
displaymodule 11:264e19992620 814 writeReg(0xA4, (shortAxis >> 8));
displaymodule 11:264e19992620 815
displaymodule 11:264e19992620 816 /* Set Color */
displaymodule 11:264e19992620 817 writeReg(0x63, (color & 0xf800) >> 11);
displaymodule 11:264e19992620 818 writeReg(0x64, (color & 0x07e0) >> 5);
displaymodule 11:264e19992620 819 writeReg(0x65, (color & 0x001f));
displaymodule 11:264e19992620 820
displaymodule 11:264e19992620 821 /* Draw! */
displaymodule 11:264e19992620 822 if (filled) {
displaymodule 11:264e19992620 823 writeReg(0xA0, 0xD0 | (curvePart & 0x03));
displaymodule 11:264e19992620 824 } else {
displaymodule 11:264e19992620 825 writeReg(0xA0, 0x90 | (curvePart & 0x03));
displaymodule 11:264e19992620 826 }
displaymodule 11:264e19992620 827
displaymodule 11:264e19992620 828 /* Wait for the command to finish */
displaymodule 11:264e19992620 829 while (readReg(0xA0) & 0x80);
displaymodule 11:264e19992620 830
displaymodule 11:264e19992620 831 }
displaymodule 11:264e19992620 832
displaymodule 11:264e19992620 833 void DmTftRa8875::drawCurve(int16_t x0, int16_t y0, int16_t longAxis, int16_t shortAxis, uint8_t curvePart, uint16_t color)
displaymodule 11:264e19992620 834 {
displaymodule 11:264e19992620 835 curve(x0, y0, longAxis, shortAxis, curvePart, color, false);
displaymodule 11:264e19992620 836 }
displaymodule 11:264e19992620 837
displaymodule 11:264e19992620 838 void DmTftRa8875::fillCurve(int16_t x0, int16_t y0, int16_t longAxis, int16_t shortAxis, uint8_t curvePart, uint16_t color)
displaymodule 11:264e19992620 839 {
displaymodule 11:264e19992620 840 curve(x0, y0, longAxis, shortAxis, curvePart, color, true);
displaymodule 11:264e19992620 841 }
displaymodule 11:264e19992620 842
displaymodule 11:264e19992620 843 void DmTftRa8875::roundrectangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t r1, uint16_t r2, uint16_t color, bool filled)
displaymodule 11:264e19992620 844 {
displaymodule 11:264e19992620 845 setAddress(0, 0, _width-1, _height-1);
displaymodule 11:264e19992620 846
displaymodule 11:264e19992620 847 /* Set x0 */
displaymodule 11:264e19992620 848 writeReg(0x91, x0);
displaymodule 11:264e19992620 849 writeReg(0x92, x0 >> 8);
displaymodule 11:264e19992620 850
displaymodule 11:264e19992620 851 /* Set y0 */
displaymodule 11:264e19992620 852 writeReg(0x93, y0);
displaymodule 11:264e19992620 853 writeReg(0x94, y0 >> 8);
displaymodule 11:264e19992620 854
displaymodule 11:264e19992620 855 /* Set x1 */
displaymodule 11:264e19992620 856 writeReg(0x95, x1);
displaymodule 11:264e19992620 857 writeReg(0x96, x1 >> 8);
displaymodule 11:264e19992620 858
displaymodule 11:264e19992620 859 /* Set y1 */
displaymodule 11:264e19992620 860 writeReg(0x97, y1);
displaymodule 11:264e19992620 861 writeReg(0x98, y1 >> 8);
displaymodule 11:264e19992620 862
displaymodule 11:264e19992620 863 /* Set Radius */
displaymodule 11:264e19992620 864 writeReg(0xA1, r1);
displaymodule 11:264e19992620 865 writeReg(0xA2, r1 >> 8);
displaymodule 11:264e19992620 866 writeReg(0xA3, r2);
displaymodule 11:264e19992620 867 writeReg(0xA4, r2 >> 8);
displaymodule 11:264e19992620 868
displaymodule 11:264e19992620 869 /* Set Color */
displaymodule 11:264e19992620 870 writeReg(0x63, (color & 0xf800) >> 11);
displaymodule 11:264e19992620 871 writeReg(0x64, (color & 0x07e0) >> 5);
displaymodule 11:264e19992620 872 writeReg(0x65, (color & 0x001f));
displaymodule 11:264e19992620 873
displaymodule 11:264e19992620 874 /* Draw! */
displaymodule 11:264e19992620 875 if (filled) {
displaymodule 11:264e19992620 876 writeReg(0xA0, 0xE0);
displaymodule 11:264e19992620 877 } else {
displaymodule 11:264e19992620 878 writeReg(0xA0, 0xA0);
displaymodule 11:264e19992620 879 }
displaymodule 11:264e19992620 880
displaymodule 11:264e19992620 881 /* Wait for the command to finish */
displaymodule 11:264e19992620 882 while (readReg(0xA0) & 0x80);
displaymodule 11:264e19992620 883 }
displaymodule 11:264e19992620 884
displaymodule 11:264e19992620 885 void DmTftRa8875::drawRoundRectangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t r1, uint16_t r2, uint16_t color)
displaymodule 11:264e19992620 886 {
displaymodule 11:264e19992620 887 roundrectangle(x0, y0, x1, y1, r1, r2, color, false);
displaymodule 11:264e19992620 888 }
displaymodule 11:264e19992620 889 void DmTftRa8875::fillRoundRectangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t r1, uint16_t r2, uint16_t color)
displaymodule 11:264e19992620 890 {
displaymodule 11:264e19992620 891 roundrectangle(x0, y0, x1, y1, r1, r2, color, true);
displaymodule 11:264e19992620 892 }
displaymodule 11:264e19992620 893 /*********************************************************************************************************
displaymodule 11:264e19992620 894 END FILE
displaymodule 11:264e19992620 895 *********************************************************************************************************/