Fork of https://os.mbed.com/users/sebastiken/code/Adafruit_RA8875/ ; Adapted for use with K64F and in the process of adding more functions.

Dependencies:   mbed BNO055

Committer:
sebastiken
Date:
Fri Sep 08 14:05:04 2017 +0000
Revision:
0:66c1aa3d198e
Child:
1:ac22f0f36d6b
[WIP] Migrate code from Arduino Lib Adafruit_RA8875 to Mbed

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sebastiken 0:66c1aa3d198e 1 /**************************************************************************/
sebastiken 0:66c1aa3d198e 2 /*!
sebastiken 0:66c1aa3d198e 3 @file Adafruit_RA8875.cpp
sebastiken 0:66c1aa3d198e 4 @author Limor Friend/Ladyada, K.Townsend/KTOWN for Adafruit Industries
sebastiken 0:66c1aa3d198e 5 @license BSD license, all text above and below must be included in
sebastiken 0:66c1aa3d198e 6 any redistribution
sebastiken 0:66c1aa3d198e 7
sebastiken 0:66c1aa3d198e 8 This is the library for the Adafruit RA8875 Driver board for TFT displays
sebastiken 0:66c1aa3d198e 9 ---------------> http://www.adafruit.com/products/1590
sebastiken 0:66c1aa3d198e 10 The RA8875 is a TFT driver for up to 800x480 dotclock'd displays
sebastiken 0:66c1aa3d198e 11 It is tested to work with displays in the Adafruit shop. Other displays
sebastiken 0:66c1aa3d198e 12 may need timing adjustments and are not guanteed to work.
sebastiken 0:66c1aa3d198e 13
sebastiken 0:66c1aa3d198e 14 Adafruit invests time and resources providing this open
sebastiken 0:66c1aa3d198e 15 source code, please support Adafruit and open-source hardware
sebastiken 0:66c1aa3d198e 16 by purchasing products from Adafruit!
sebastiken 0:66c1aa3d198e 17
sebastiken 0:66c1aa3d198e 18 Written by Limor Fried/Ladyada for Adafruit Industries.
sebastiken 0:66c1aa3d198e 19 BSD license, check license.txt for more information.
sebastiken 0:66c1aa3d198e 20 All text above must be included in any redistribution.
sebastiken 0:66c1aa3d198e 21
sebastiken 0:66c1aa3d198e 22 @section HISTORY
sebastiken 0:66c1aa3d198e 23
sebastiken 0:66c1aa3d198e 24 v1.0 - First release
sebastiken 0:66c1aa3d198e 25
sebastiken 0:66c1aa3d198e 26 Code migrated to Mbed.
sebastiken 0:66c1aa3d198e 27 */
sebastiken 0:66c1aa3d198e 28 /**************************************************************************/
sebastiken 0:66c1aa3d198e 29 #include "RA8875.h"
sebastiken 0:66c1aa3d198e 30
sebastiken 0:66c1aa3d198e 31 #if defined (ARDUINO_ARCH_ARC32)
sebastiken 0:66c1aa3d198e 32 uint32_t spi_speed = 12000000;
sebastiken 0:66c1aa3d198e 33 #else
sebastiken 0:66c1aa3d198e 34 uint32_t spi_speed = 4000000;
sebastiken 0:66c1aa3d198e 35 #endif
sebastiken 0:66c1aa3d198e 36
sebastiken 0:66c1aa3d198e 37 // NOTE: MBed use transactions inside SPI class itself
sebastiken 0:66c1aa3d198e 38 //// If the SPI library has transaction support, these functions
sebastiken 0:66c1aa3d198e 39 //// establish settings and protect from interference from other
sebastiken 0:66c1aa3d198e 40 //// libraries. Otherwise, they simply do nothing.
sebastiken 0:66c1aa3d198e 41 //#ifdef SPI_HAS_TRANSACTION
sebastiken 0:66c1aa3d198e 42 // static inline void spi_begin(void) __attribute__((always_inline));
sebastiken 0:66c1aa3d198e 43 // static inline void spi_begin(void) {
sebastiken 0:66c1aa3d198e 44 // // max speed!
sebastiken 0:66c1aa3d198e 45 // SPI.beginTransaction(SPISettings(spi_speed, MSBFIRST, SPI_MODE0));
sebastiken 0:66c1aa3d198e 46 // }
sebastiken 0:66c1aa3d198e 47 // static inline void spi_end(void) __attribute__((always_inline));
sebastiken 0:66c1aa3d198e 48 // static inline void spi_end(void) {
sebastiken 0:66c1aa3d198e 49 // SPI.endTransaction();
sebastiken 0:66c1aa3d198e 50 // }
sebastiken 0:66c1aa3d198e 51 //#else
sebastiken 0:66c1aa3d198e 52 // #define spi_begin()
sebastiken 0:66c1aa3d198e 53 // #define spi_end()
sebastiken 0:66c1aa3d198e 54 //#endif
sebastiken 0:66c1aa3d198e 55
sebastiken 0:66c1aa3d198e 56
sebastiken 0:66c1aa3d198e 57 /**************************************************************************/
sebastiken 0:66c1aa3d198e 58 /*!
sebastiken 0:66c1aa3d198e 59 Constructor for a new RA8875 instance
sebastiken 0:66c1aa3d198e 60
sebastiken 0:66c1aa3d198e 61 @args CS[in] Location of the SPI chip select pin
sebastiken 0:66c1aa3d198e 62 @args RST[in] Location of the reset pin
sebastiken 0:66c1aa3d198e 63 */
sebastiken 0:66c1aa3d198e 64 /**************************************************************************/
sebastiken 0:66c1aa3d198e 65 Adafruit_RA8875::Adafruit_RA8875(PinName MOSI, PinName MISO, PinName SCLK,
sebastiken 0:66c1aa3d198e 66 PinName CS, PinName RST)
sebastiken 0:66c1aa3d198e 67 : //Adafruit_GFX(800, 480)
sebastiken 0:66c1aa3d198e 68 _cs(CS)
sebastiken 0:66c1aa3d198e 69 , _rst(RST)
sebastiken 0:66c1aa3d198e 70 , spi(MOSI, MISO, SCLK)
sebastiken 0:66c1aa3d198e 71 {
sebastiken 0:66c1aa3d198e 72 }
sebastiken 0:66c1aa3d198e 73
sebastiken 0:66c1aa3d198e 74 /**************************************************************************/
sebastiken 0:66c1aa3d198e 75 /*!
sebastiken 0:66c1aa3d198e 76 Initialises the LCD driver and any HW required by the display
sebastiken 0:66c1aa3d198e 77
sebastiken 0:66c1aa3d198e 78 @args s[in] The display size, which can be either:
sebastiken 0:66c1aa3d198e 79 'RA8875_480x272' (4.3" displays) r
sebastiken 0:66c1aa3d198e 80 'RA8875_800x480' (5" and 7" displays)
sebastiken 0:66c1aa3d198e 81 */
sebastiken 0:66c1aa3d198e 82 /**************************************************************************/
sebastiken 0:66c1aa3d198e 83 bool Adafruit_RA8875::begin(enum RA8875sizes s) {
sebastiken 0:66c1aa3d198e 84 _size = s;
sebastiken 0:66c1aa3d198e 85
sebastiken 0:66c1aa3d198e 86 if (_size == RA8875_480x272) {
sebastiken 0:66c1aa3d198e 87 _width = 480;
sebastiken 0:66c1aa3d198e 88 _height = 272;
sebastiken 0:66c1aa3d198e 89 }
sebastiken 0:66c1aa3d198e 90 else if (_size == RA8875_800x480) {
sebastiken 0:66c1aa3d198e 91 _width = 800;
sebastiken 0:66c1aa3d198e 92 _height = 480;
sebastiken 0:66c1aa3d198e 93 }
sebastiken 0:66c1aa3d198e 94 else {
sebastiken 0:66c1aa3d198e 95 return false;
sebastiken 0:66c1aa3d198e 96 }
sebastiken 0:66c1aa3d198e 97
sebastiken 0:66c1aa3d198e 98 _cs = 1;
sebastiken 0:66c1aa3d198e 99
sebastiken 0:66c1aa3d198e 100 _rst = 0;
sebastiken 0:66c1aa3d198e 101 wait_ms(100);
sebastiken 0:66c1aa3d198e 102 _rst = 1;
sebastiken 0:66c1aa3d198e 103 wait_ms(100);
sebastiken 0:66c1aa3d198e 104
sebastiken 0:66c1aa3d198e 105 // Setting format
sebastiken 0:66c1aa3d198e 106 spi.format(8, 0);
sebastiken 0:66c1aa3d198e 107
sebastiken 0:66c1aa3d198e 108 // Configure SPI frequency
sebastiken 0:66c1aa3d198e 109 spi_speed = 2000000;
sebastiken 0:66c1aa3d198e 110 spi.frequency(spi_speed);
sebastiken 0:66c1aa3d198e 111
sebastiken 0:66c1aa3d198e 112 uint8_t x = readReg(0);
sebastiken 0:66c1aa3d198e 113 // Serial.print("x = 0x"); Serial.println(x,HEX);
sebastiken 0:66c1aa3d198e 114 if (x != 0x75) {
sebastiken 0:66c1aa3d198e 115 return false;
sebastiken 0:66c1aa3d198e 116 }
sebastiken 0:66c1aa3d198e 117
sebastiken 0:66c1aa3d198e 118
sebastiken 0:66c1aa3d198e 119
sebastiken 0:66c1aa3d198e 120 initialize();
sebastiken 0:66c1aa3d198e 121
sebastiken 0:66c1aa3d198e 122 #ifdef SPI_HAS_TRANSACTION
sebastiken 0:66c1aa3d198e 123 #if defined (ARDUINO_ARCH_ARC32)
sebastiken 0:66c1aa3d198e 124 spi_speed = 12000000L;
sebastiken 0:66c1aa3d198e 125 #else
sebastiken 0:66c1aa3d198e 126 spi_speed = 4000000L;
sebastiken 0:66c1aa3d198e 127 #endif
sebastiken 0:66c1aa3d198e 128 #else
sebastiken 0:66c1aa3d198e 129 #ifdef __AVR__
sebastiken 0:66c1aa3d198e 130 SPI.setClockDivider(SPI_CLOCK_DIV4);
sebastiken 0:66c1aa3d198e 131 #endif
sebastiken 0:66c1aa3d198e 132 #endif
sebastiken 0:66c1aa3d198e 133
sebastiken 0:66c1aa3d198e 134 return true;
sebastiken 0:66c1aa3d198e 135 }
sebastiken 0:66c1aa3d198e 136
sebastiken 0:66c1aa3d198e 137 /************************* Initialization *********************************/
sebastiken 0:66c1aa3d198e 138
sebastiken 0:66c1aa3d198e 139 /**************************************************************************/
sebastiken 0:66c1aa3d198e 140 /*!
sebastiken 0:66c1aa3d198e 141 Performs a SW-based reset of the RA8875
sebastiken 0:66c1aa3d198e 142 */
sebastiken 0:66c1aa3d198e 143 /**************************************************************************/
sebastiken 0:66c1aa3d198e 144 void Adafruit_RA8875::softReset(void) {
sebastiken 0:66c1aa3d198e 145 writeCommand(RA8875_PWRR);
sebastiken 0:66c1aa3d198e 146 writeData(RA8875_PWRR_SOFTRESET);
sebastiken 0:66c1aa3d198e 147 writeData(RA8875_PWRR_NORMAL);
sebastiken 0:66c1aa3d198e 148 wait_ms(1);
sebastiken 0:66c1aa3d198e 149 }
sebastiken 0:66c1aa3d198e 150
sebastiken 0:66c1aa3d198e 151 /**************************************************************************/
sebastiken 0:66c1aa3d198e 152 /*!
sebastiken 0:66c1aa3d198e 153 Initialise the PLL
sebastiken 0:66c1aa3d198e 154 */
sebastiken 0:66c1aa3d198e 155 /**************************************************************************/
sebastiken 0:66c1aa3d198e 156 void Adafruit_RA8875::PLLinit(void) {
sebastiken 0:66c1aa3d198e 157 if (_size == RA8875_480x272) {
sebastiken 0:66c1aa3d198e 158 writeReg(RA8875_PLLC1, RA8875_PLLC1_PLLDIV1 + 10);
sebastiken 0:66c1aa3d198e 159 wait_ms(1);
sebastiken 0:66c1aa3d198e 160 writeReg(RA8875_PLLC2, RA8875_PLLC2_DIV4);
sebastiken 0:66c1aa3d198e 161 wait_ms(1);
sebastiken 0:66c1aa3d198e 162 }
sebastiken 0:66c1aa3d198e 163 else /* (_size == RA8875_800x480) */ {
sebastiken 0:66c1aa3d198e 164 writeReg(RA8875_PLLC1, RA8875_PLLC1_PLLDIV1 + 10);
sebastiken 0:66c1aa3d198e 165 wait_ms(1);
sebastiken 0:66c1aa3d198e 166 writeReg(RA8875_PLLC2, RA8875_PLLC2_DIV4);
sebastiken 0:66c1aa3d198e 167 wait_ms(1);
sebastiken 0:66c1aa3d198e 168 }
sebastiken 0:66c1aa3d198e 169 }
sebastiken 0:66c1aa3d198e 170
sebastiken 0:66c1aa3d198e 171 /**************************************************************************/
sebastiken 0:66c1aa3d198e 172 /*!
sebastiken 0:66c1aa3d198e 173 Initialises the driver IC (clock setup, etc.)
sebastiken 0:66c1aa3d198e 174 */
sebastiken 0:66c1aa3d198e 175 /**************************************************************************/
sebastiken 0:66c1aa3d198e 176 void Adafruit_RA8875::initialize(void) {
sebastiken 0:66c1aa3d198e 177 PLLinit();
sebastiken 0:66c1aa3d198e 178 writeReg(RA8875_SYSR, RA8875_SYSR_16BPP | RA8875_SYSR_MCU8);
sebastiken 0:66c1aa3d198e 179
sebastiken 0:66c1aa3d198e 180 /* Timing values */
sebastiken 0:66c1aa3d198e 181 uint8_t pixclk;
sebastiken 0:66c1aa3d198e 182 uint8_t hsync_start;
sebastiken 0:66c1aa3d198e 183 uint8_t hsync_pw;
sebastiken 0:66c1aa3d198e 184 uint8_t hsync_finetune;
sebastiken 0:66c1aa3d198e 185 uint8_t hsync_nondisp;
sebastiken 0:66c1aa3d198e 186 uint8_t vsync_pw;
sebastiken 0:66c1aa3d198e 187 uint16_t vsync_nondisp;
sebastiken 0:66c1aa3d198e 188 uint16_t vsync_start;
sebastiken 0:66c1aa3d198e 189
sebastiken 0:66c1aa3d198e 190 /* Set the correct values for the display being used */
sebastiken 0:66c1aa3d198e 191 if (_size == RA8875_480x272)
sebastiken 0:66c1aa3d198e 192 {
sebastiken 0:66c1aa3d198e 193 pixclk = RA8875_PCSR_PDATL | RA8875_PCSR_4CLK;
sebastiken 0:66c1aa3d198e 194 hsync_nondisp = 10;
sebastiken 0:66c1aa3d198e 195 hsync_start = 8;
sebastiken 0:66c1aa3d198e 196 hsync_pw = 48;
sebastiken 0:66c1aa3d198e 197 hsync_finetune = 0;
sebastiken 0:66c1aa3d198e 198 vsync_nondisp = 3;
sebastiken 0:66c1aa3d198e 199 vsync_start = 8;
sebastiken 0:66c1aa3d198e 200 vsync_pw = 10;
sebastiken 0:66c1aa3d198e 201 }
sebastiken 0:66c1aa3d198e 202 else // (_size == RA8875_800x480)
sebastiken 0:66c1aa3d198e 203 {
sebastiken 0:66c1aa3d198e 204 pixclk = RA8875_PCSR_PDATL | RA8875_PCSR_2CLK;
sebastiken 0:66c1aa3d198e 205 hsync_nondisp = 26;
sebastiken 0:66c1aa3d198e 206 hsync_start = 32;
sebastiken 0:66c1aa3d198e 207 hsync_pw = 96;
sebastiken 0:66c1aa3d198e 208 hsync_finetune = 0;
sebastiken 0:66c1aa3d198e 209 vsync_nondisp = 32;
sebastiken 0:66c1aa3d198e 210 vsync_start = 23;
sebastiken 0:66c1aa3d198e 211 vsync_pw = 2;
sebastiken 0:66c1aa3d198e 212 }
sebastiken 0:66c1aa3d198e 213
sebastiken 0:66c1aa3d198e 214 writeReg(RA8875_PCSR, pixclk);
sebastiken 0:66c1aa3d198e 215 wait_ms(1);
sebastiken 0:66c1aa3d198e 216
sebastiken 0:66c1aa3d198e 217 /* Horizontal settings registers */
sebastiken 0:66c1aa3d198e 218 writeReg(RA8875_HDWR, (_width / 8) - 1); // H width: (HDWR + 1) * 8 = 480
sebastiken 0:66c1aa3d198e 219 writeReg(RA8875_HNDFTR, RA8875_HNDFTR_DE_HIGH + hsync_finetune);
sebastiken 0:66c1aa3d198e 220 writeReg(RA8875_HNDR, (hsync_nondisp - hsync_finetune - 2)/8); // H non-display: HNDR * 8 + HNDFTR + 2 = 10
sebastiken 0:66c1aa3d198e 221 writeReg(RA8875_HSTR, hsync_start/8 - 1); // Hsync start: (HSTR + 1)*8
sebastiken 0:66c1aa3d198e 222 writeReg(RA8875_HPWR, RA8875_HPWR_LOW + (hsync_pw/8 - 1)); // HSync pulse width = (HPWR+1) * 8
sebastiken 0:66c1aa3d198e 223
sebastiken 0:66c1aa3d198e 224 /* Vertical settings registers */
sebastiken 0:66c1aa3d198e 225 writeReg(RA8875_VDHR0, (uint16_t)(_height - 1) & 0xFF);
sebastiken 0:66c1aa3d198e 226 writeReg(RA8875_VDHR1, (uint16_t)(_height - 1) >> 8);
sebastiken 0:66c1aa3d198e 227 writeReg(RA8875_VNDR0, vsync_nondisp-1); // V non-display period = VNDR + 1
sebastiken 0:66c1aa3d198e 228 writeReg(RA8875_VNDR1, vsync_nondisp >> 8);
sebastiken 0:66c1aa3d198e 229 writeReg(RA8875_VSTR0, vsync_start-1); // Vsync start position = VSTR + 1
sebastiken 0:66c1aa3d198e 230 writeReg(RA8875_VSTR1, vsync_start >> 8);
sebastiken 0:66c1aa3d198e 231 writeReg(RA8875_VPWR, RA8875_VPWR_LOW + vsync_pw - 1); // Vsync pulse width = VPWR + 1
sebastiken 0:66c1aa3d198e 232
sebastiken 0:66c1aa3d198e 233 /* Set active window X */
sebastiken 0:66c1aa3d198e 234 writeReg(RA8875_HSAW0, 0); // horizontal start point
sebastiken 0:66c1aa3d198e 235 writeReg(RA8875_HSAW1, 0);
sebastiken 0:66c1aa3d198e 236 writeReg(RA8875_HEAW0, (uint16_t)(_width - 1) & 0xFF); // horizontal end point
sebastiken 0:66c1aa3d198e 237 writeReg(RA8875_HEAW1, (uint16_t)(_width - 1) >> 8);
sebastiken 0:66c1aa3d198e 238
sebastiken 0:66c1aa3d198e 239 /* Set active window Y */
sebastiken 0:66c1aa3d198e 240 writeReg(RA8875_VSAW0, 0); // vertical start point
sebastiken 0:66c1aa3d198e 241 writeReg(RA8875_VSAW1, 0);
sebastiken 0:66c1aa3d198e 242 writeReg(RA8875_VEAW0, (uint16_t)(_height - 1) & 0xFF); // horizontal end point
sebastiken 0:66c1aa3d198e 243 writeReg(RA8875_VEAW1, (uint16_t)(_height - 1) >> 8);
sebastiken 0:66c1aa3d198e 244
sebastiken 0:66c1aa3d198e 245 /* ToDo: Setup touch panel? */
sebastiken 0:66c1aa3d198e 246
sebastiken 0:66c1aa3d198e 247 /* Clear the entire window */
sebastiken 0:66c1aa3d198e 248 writeReg(RA8875_MCLR, RA8875_MCLR_START | RA8875_MCLR_FULL);
sebastiken 0:66c1aa3d198e 249 wait_ms(500);
sebastiken 0:66c1aa3d198e 250 }
sebastiken 0:66c1aa3d198e 251
sebastiken 0:66c1aa3d198e 252 /**************************************************************************/
sebastiken 0:66c1aa3d198e 253 /*!
sebastiken 0:66c1aa3d198e 254 Returns the display width in pixels
sebastiken 0:66c1aa3d198e 255
sebastiken 0:66c1aa3d198e 256 @returns The 1-based display width in pixels
sebastiken 0:66c1aa3d198e 257 */
sebastiken 0:66c1aa3d198e 258 /**************************************************************************/
sebastiken 0:66c1aa3d198e 259 uint16_t Adafruit_RA8875::width(void) { return _width; }
sebastiken 0:66c1aa3d198e 260
sebastiken 0:66c1aa3d198e 261 /**************************************************************************/
sebastiken 0:66c1aa3d198e 262 /*!
sebastiken 0:66c1aa3d198e 263 Returns the display height in pixels
sebastiken 0:66c1aa3d198e 264
sebastiken 0:66c1aa3d198e 265 @returns The 1-based display height in pixels
sebastiken 0:66c1aa3d198e 266 */
sebastiken 0:66c1aa3d198e 267 /**************************************************************************/
sebastiken 0:66c1aa3d198e 268 uint16_t Adafruit_RA8875::height(void) { return _height; }
sebastiken 0:66c1aa3d198e 269
sebastiken 0:66c1aa3d198e 270 /************************* Text Mode ***********************************/
sebastiken 0:66c1aa3d198e 271
sebastiken 0:66c1aa3d198e 272 /**************************************************************************/
sebastiken 0:66c1aa3d198e 273 /*!
sebastiken 0:66c1aa3d198e 274 Sets the display in text mode (as opposed to graphics mode)
sebastiken 0:66c1aa3d198e 275 */
sebastiken 0:66c1aa3d198e 276 /**************************************************************************/
sebastiken 0:66c1aa3d198e 277 void Adafruit_RA8875::textMode(void)
sebastiken 0:66c1aa3d198e 278 {
sebastiken 0:66c1aa3d198e 279 /* Set text mode */
sebastiken 0:66c1aa3d198e 280 writeCommand(RA8875_MWCR0);
sebastiken 0:66c1aa3d198e 281 uint8_t temp = readData();
sebastiken 0:66c1aa3d198e 282 temp |= RA8875_MWCR0_TXTMODE; // Set bit 7
sebastiken 0:66c1aa3d198e 283 writeData(temp);
sebastiken 0:66c1aa3d198e 284
sebastiken 0:66c1aa3d198e 285 /* Select the internal (ROM) font */
sebastiken 0:66c1aa3d198e 286 writeCommand(0x21);
sebastiken 0:66c1aa3d198e 287 temp = readData();
sebastiken 0:66c1aa3d198e 288 temp &= ~((1<<7) | (1<<5)); // Clear bits 7 and 5
sebastiken 0:66c1aa3d198e 289 writeData(temp);
sebastiken 0:66c1aa3d198e 290 }
sebastiken 0:66c1aa3d198e 291
sebastiken 0:66c1aa3d198e 292 /**************************************************************************/
sebastiken 0:66c1aa3d198e 293 /*!
sebastiken 0:66c1aa3d198e 294 Sets the display in text mode (as opposed to graphics mode)
sebastiken 0:66c1aa3d198e 295
sebastiken 0:66c1aa3d198e 296 @args x[in] The x position of the cursor (in pixels, 0..1023)
sebastiken 0:66c1aa3d198e 297 @args y[in] The y position of the cursor (in pixels, 0..511)
sebastiken 0:66c1aa3d198e 298 */
sebastiken 0:66c1aa3d198e 299 /**************************************************************************/
sebastiken 0:66c1aa3d198e 300 void Adafruit_RA8875::textSetCursor(uint16_t x, uint16_t y)
sebastiken 0:66c1aa3d198e 301 {
sebastiken 0:66c1aa3d198e 302 /* Set cursor location */
sebastiken 0:66c1aa3d198e 303 writeCommand(0x2A);
sebastiken 0:66c1aa3d198e 304 writeData(x & 0xFF);
sebastiken 0:66c1aa3d198e 305 writeCommand(0x2B);
sebastiken 0:66c1aa3d198e 306 writeData(x >> 8);
sebastiken 0:66c1aa3d198e 307 writeCommand(0x2C);
sebastiken 0:66c1aa3d198e 308 writeData(y & 0xFF);
sebastiken 0:66c1aa3d198e 309 writeCommand(0x2D);
sebastiken 0:66c1aa3d198e 310 writeData(y >> 8);
sebastiken 0:66c1aa3d198e 311 }
sebastiken 0:66c1aa3d198e 312
sebastiken 0:66c1aa3d198e 313 /**************************************************************************/
sebastiken 0:66c1aa3d198e 314 /*!
sebastiken 0:66c1aa3d198e 315 Sets the fore and background color when rendering text
sebastiken 0:66c1aa3d198e 316
sebastiken 0:66c1aa3d198e 317 @args foreColor[in] The RGB565 color to use when rendering the text
sebastiken 0:66c1aa3d198e 318 @args bgColor[in] The RGB565 colot to use for the background
sebastiken 0:66c1aa3d198e 319 */
sebastiken 0:66c1aa3d198e 320 /**************************************************************************/
sebastiken 0:66c1aa3d198e 321 void Adafruit_RA8875::textColor(uint16_t foreColor, uint16_t bgColor)
sebastiken 0:66c1aa3d198e 322 {
sebastiken 0:66c1aa3d198e 323 /* Set Fore Color */
sebastiken 0:66c1aa3d198e 324 writeCommand(0x63);
sebastiken 0:66c1aa3d198e 325 writeData((foreColor & 0xf800) >> 11);
sebastiken 0:66c1aa3d198e 326 writeCommand(0x64);
sebastiken 0:66c1aa3d198e 327 writeData((foreColor & 0x07e0) >> 5);
sebastiken 0:66c1aa3d198e 328 writeCommand(0x65);
sebastiken 0:66c1aa3d198e 329 writeData((foreColor & 0x001f));
sebastiken 0:66c1aa3d198e 330
sebastiken 0:66c1aa3d198e 331 /* Set Background Color */
sebastiken 0:66c1aa3d198e 332 writeCommand(0x60);
sebastiken 0:66c1aa3d198e 333 writeData((bgColor & 0xf800) >> 11);
sebastiken 0:66c1aa3d198e 334 writeCommand(0x61);
sebastiken 0:66c1aa3d198e 335 writeData((bgColor & 0x07e0) >> 5);
sebastiken 0:66c1aa3d198e 336 writeCommand(0x62);
sebastiken 0:66c1aa3d198e 337 writeData((bgColor & 0x001f));
sebastiken 0:66c1aa3d198e 338
sebastiken 0:66c1aa3d198e 339 /* Clear transparency flag */
sebastiken 0:66c1aa3d198e 340 writeCommand(0x22);
sebastiken 0:66c1aa3d198e 341 uint8_t temp = readData();
sebastiken 0:66c1aa3d198e 342 temp &= ~(1<<6); // Clear bit 6
sebastiken 0:66c1aa3d198e 343 writeData(temp);
sebastiken 0:66c1aa3d198e 344 }
sebastiken 0:66c1aa3d198e 345
sebastiken 0:66c1aa3d198e 346 /**************************************************************************/
sebastiken 0:66c1aa3d198e 347 /*!
sebastiken 0:66c1aa3d198e 348 Sets the fore color when rendering text with a transparent bg
sebastiken 0:66c1aa3d198e 349
sebastiken 0:66c1aa3d198e 350 @args foreColor[in] The RGB565 color to use when rendering the text
sebastiken 0:66c1aa3d198e 351 */
sebastiken 0:66c1aa3d198e 352 /**************************************************************************/
sebastiken 0:66c1aa3d198e 353 void Adafruit_RA8875::textTransparent(uint16_t foreColor)
sebastiken 0:66c1aa3d198e 354 {
sebastiken 0:66c1aa3d198e 355 /* Set Fore Color */
sebastiken 0:66c1aa3d198e 356 writeCommand(0x63);
sebastiken 0:66c1aa3d198e 357 writeData((foreColor & 0xf800) >> 11);
sebastiken 0:66c1aa3d198e 358 writeCommand(0x64);
sebastiken 0:66c1aa3d198e 359 writeData((foreColor & 0x07e0) >> 5);
sebastiken 0:66c1aa3d198e 360 writeCommand(0x65);
sebastiken 0:66c1aa3d198e 361 writeData((foreColor & 0x001f));
sebastiken 0:66c1aa3d198e 362
sebastiken 0:66c1aa3d198e 363 /* Set transparency flag */
sebastiken 0:66c1aa3d198e 364 writeCommand(0x22);
sebastiken 0:66c1aa3d198e 365 uint8_t temp = readData();
sebastiken 0:66c1aa3d198e 366 temp |= (1<<6); // Set bit 6
sebastiken 0:66c1aa3d198e 367 writeData(temp);
sebastiken 0:66c1aa3d198e 368 }
sebastiken 0:66c1aa3d198e 369
sebastiken 0:66c1aa3d198e 370 /**************************************************************************/
sebastiken 0:66c1aa3d198e 371 /*!
sebastiken 0:66c1aa3d198e 372 Sets the text enlarge settings, using one of the following values:
sebastiken 0:66c1aa3d198e 373
sebastiken 0:66c1aa3d198e 374 0 = 1x zoom
sebastiken 0:66c1aa3d198e 375 1 = 2x zoom
sebastiken 0:66c1aa3d198e 376 2 = 3x zoom
sebastiken 0:66c1aa3d198e 377 3 = 4x zoom
sebastiken 0:66c1aa3d198e 378
sebastiken 0:66c1aa3d198e 379 @args scale[in] The zoom factor (0..3 for 1-4x zoom)
sebastiken 0:66c1aa3d198e 380 */
sebastiken 0:66c1aa3d198e 381 /**************************************************************************/
sebastiken 0:66c1aa3d198e 382 void Adafruit_RA8875::textEnlarge(uint8_t scale)
sebastiken 0:66c1aa3d198e 383 {
sebastiken 0:66c1aa3d198e 384 if (scale > 3) scale = 3;
sebastiken 0:66c1aa3d198e 385
sebastiken 0:66c1aa3d198e 386 /* Set font size flags */
sebastiken 0:66c1aa3d198e 387 writeCommand(0x22);
sebastiken 0:66c1aa3d198e 388 uint8_t temp = readData();
sebastiken 0:66c1aa3d198e 389 temp &= ~(0xF); // Clears bits 0..3
sebastiken 0:66c1aa3d198e 390 temp |= scale << 2;
sebastiken 0:66c1aa3d198e 391 temp |= scale;
sebastiken 0:66c1aa3d198e 392 writeData(temp);
sebastiken 0:66c1aa3d198e 393
sebastiken 0:66c1aa3d198e 394 _textScale = scale;
sebastiken 0:66c1aa3d198e 395 }
sebastiken 0:66c1aa3d198e 396
sebastiken 0:66c1aa3d198e 397 /**************************************************************************/
sebastiken 0:66c1aa3d198e 398 /*!
sebastiken 0:66c1aa3d198e 399 Renders some text on the screen when in text mode
sebastiken 0:66c1aa3d198e 400
sebastiken 0:66c1aa3d198e 401 @args buffer[in] The buffer containing the characters to render
sebastiken 0:66c1aa3d198e 402 @args len[in] The size of the buffer in bytes
sebastiken 0:66c1aa3d198e 403 */
sebastiken 0:66c1aa3d198e 404 /**************************************************************************/
sebastiken 0:66c1aa3d198e 405 void Adafruit_RA8875::textWrite(const char* buffer, uint16_t len)
sebastiken 0:66c1aa3d198e 406 {
sebastiken 0:66c1aa3d198e 407 if (len == 0) len = strlen(buffer);
sebastiken 0:66c1aa3d198e 408 writeCommand(RA8875_MRWC);
sebastiken 0:66c1aa3d198e 409 for (uint16_t i=0;i<len;i++)
sebastiken 0:66c1aa3d198e 410 {
sebastiken 0:66c1aa3d198e 411 writeData(buffer[i]);
sebastiken 0:66c1aa3d198e 412 #if defined(__AVR__)
sebastiken 0:66c1aa3d198e 413 if (_textScale > 1) wait_ms(1);
sebastiken 0:66c1aa3d198e 414 #elif defined(__arm__)
sebastiken 0:66c1aa3d198e 415 // This wait_ms is needed with textEnlarge(1) because
sebastiken 0:66c1aa3d198e 416 // Teensy 3.X is much faster than Arduino Uno
sebastiken 0:66c1aa3d198e 417 if (_textScale > 0) wait_ms(1);
sebastiken 0:66c1aa3d198e 418 #endif
sebastiken 0:66c1aa3d198e 419 }
sebastiken 0:66c1aa3d198e 420 }
sebastiken 0:66c1aa3d198e 421
sebastiken 0:66c1aa3d198e 422 /************************* Graphics ***********************************/
sebastiken 0:66c1aa3d198e 423
sebastiken 0:66c1aa3d198e 424 /**************************************************************************/
sebastiken 0:66c1aa3d198e 425 /*!
sebastiken 0:66c1aa3d198e 426 Sets the display in graphics mode (as opposed to text mode)
sebastiken 0:66c1aa3d198e 427 */
sebastiken 0:66c1aa3d198e 428 /**************************************************************************/
sebastiken 0:66c1aa3d198e 429 void Adafruit_RA8875::graphicsMode(void) {
sebastiken 0:66c1aa3d198e 430 writeCommand(RA8875_MWCR0);
sebastiken 0:66c1aa3d198e 431 uint8_t temp = readData();
sebastiken 0:66c1aa3d198e 432 temp &= ~RA8875_MWCR0_TXTMODE; // bit #7
sebastiken 0:66c1aa3d198e 433 writeData(temp);
sebastiken 0:66c1aa3d198e 434 }
sebastiken 0:66c1aa3d198e 435
sebastiken 0:66c1aa3d198e 436 /**************************************************************************/
sebastiken 0:66c1aa3d198e 437 /*!
sebastiken 0:66c1aa3d198e 438 Waits for screen to finish by polling the status!
sebastiken 0:66c1aa3d198e 439 */
sebastiken 0:66c1aa3d198e 440 /**************************************************************************/
sebastiken 0:66c1aa3d198e 441 bool Adafruit_RA8875::waitPoll(uint8_t regname, uint8_t waitflag) {
sebastiken 0:66c1aa3d198e 442 /* Wait for the command to finish */
sebastiken 0:66c1aa3d198e 443 while (1)
sebastiken 0:66c1aa3d198e 444 {
sebastiken 0:66c1aa3d198e 445 uint8_t temp = readReg(regname);
sebastiken 0:66c1aa3d198e 446 if (!(temp & waitflag))
sebastiken 0:66c1aa3d198e 447 return true;
sebastiken 0:66c1aa3d198e 448 }
sebastiken 0:66c1aa3d198e 449 //return false; // MEMEFIX: yeah i know, unreached! - add timeout?
sebastiken 0:66c1aa3d198e 450 }
sebastiken 0:66c1aa3d198e 451
sebastiken 0:66c1aa3d198e 452
sebastiken 0:66c1aa3d198e 453 /**************************************************************************/
sebastiken 0:66c1aa3d198e 454 /*!
sebastiken 0:66c1aa3d198e 455 Sets the current X/Y position on the display before drawing
sebastiken 0:66c1aa3d198e 456
sebastiken 0:66c1aa3d198e 457 @args x[in] The 0-based x location
sebastiken 0:66c1aa3d198e 458 @args y[in] The 0-base y location
sebastiken 0:66c1aa3d198e 459 */
sebastiken 0:66c1aa3d198e 460 /**************************************************************************/
sebastiken 0:66c1aa3d198e 461 void Adafruit_RA8875::setXY(uint16_t x, uint16_t y) {
sebastiken 0:66c1aa3d198e 462 writeReg(RA8875_CURH0, x);
sebastiken 0:66c1aa3d198e 463 writeReg(RA8875_CURH1, x >> 8);
sebastiken 0:66c1aa3d198e 464 writeReg(RA8875_CURV0, y);
sebastiken 0:66c1aa3d198e 465 writeReg(RA8875_CURV1, y >> 8);
sebastiken 0:66c1aa3d198e 466 }
sebastiken 0:66c1aa3d198e 467
sebastiken 0:66c1aa3d198e 468 /**************************************************************************/
sebastiken 0:66c1aa3d198e 469 /*!
sebastiken 0:66c1aa3d198e 470 HW accelerated function to push a chunk of raw pixel data
sebastiken 0:66c1aa3d198e 471
sebastiken 0:66c1aa3d198e 472 @args num[in] The number of pixels to push
sebastiken 0:66c1aa3d198e 473 @args p[in] The pixel color to use
sebastiken 0:66c1aa3d198e 474 */
sebastiken 0:66c1aa3d198e 475 /**************************************************************************/
sebastiken 0:66c1aa3d198e 476 void Adafruit_RA8875::pushPixels(uint32_t num, uint16_t p) {
sebastiken 0:66c1aa3d198e 477 _cs = 0;
sebastiken 0:66c1aa3d198e 478
sebastiken 0:66c1aa3d198e 479 spi.write(RA8875_DATAWRITE);
sebastiken 0:66c1aa3d198e 480 while (num--) {
sebastiken 0:66c1aa3d198e 481 spi.write(p >> 8);
sebastiken 0:66c1aa3d198e 482 spi.write(p);
sebastiken 0:66c1aa3d198e 483 }
sebastiken 0:66c1aa3d198e 484 _cs = 1;
sebastiken 0:66c1aa3d198e 485 }
sebastiken 0:66c1aa3d198e 486
sebastiken 0:66c1aa3d198e 487 /**************************************************************************/
sebastiken 0:66c1aa3d198e 488 /*!
sebastiken 0:66c1aa3d198e 489
sebastiken 0:66c1aa3d198e 490 */
sebastiken 0:66c1aa3d198e 491 /**************************************************************************/
sebastiken 0:66c1aa3d198e 492 void Adafruit_RA8875::fillRect(void) {
sebastiken 0:66c1aa3d198e 493 writeCommand(RA8875_DCR);
sebastiken 0:66c1aa3d198e 494 writeData(RA8875_DCR_LINESQUTRI_STOP | RA8875_DCR_DRAWSQUARE);
sebastiken 0:66c1aa3d198e 495 writeData(RA8875_DCR_LINESQUTRI_START | RA8875_DCR_FILL | RA8875_DCR_DRAWSQUARE);
sebastiken 0:66c1aa3d198e 496 }
sebastiken 0:66c1aa3d198e 497
sebastiken 0:66c1aa3d198e 498 /**************************************************************************/
sebastiken 0:66c1aa3d198e 499 /*!
sebastiken 0:66c1aa3d198e 500 Draws a single pixel at the specified location
sebastiken 0:66c1aa3d198e 501
sebastiken 0:66c1aa3d198e 502 @args x[in] The 0-based x location
sebastiken 0:66c1aa3d198e 503 @args y[in] The 0-base y location
sebastiken 0:66c1aa3d198e 504 @args color[in] The RGB565 color to use when drawing the pixel
sebastiken 0:66c1aa3d198e 505 */
sebastiken 0:66c1aa3d198e 506 /**************************************************************************/
sebastiken 0:66c1aa3d198e 507 void Adafruit_RA8875::drawPixel(int16_t x, int16_t y, uint16_t color)
sebastiken 0:66c1aa3d198e 508 {
sebastiken 0:66c1aa3d198e 509 writeReg(RA8875_CURH0, x);
sebastiken 0:66c1aa3d198e 510 writeReg(RA8875_CURH1, x >> 8);
sebastiken 0:66c1aa3d198e 511 writeReg(RA8875_CURV0, y);
sebastiken 0:66c1aa3d198e 512 writeReg(RA8875_CURV1, y >> 8);
sebastiken 0:66c1aa3d198e 513 writeCommand(RA8875_MRWC);
sebastiken 0:66c1aa3d198e 514 _cs = 0;
sebastiken 0:66c1aa3d198e 515 spi.write(RA8875_DATAWRITE);
sebastiken 0:66c1aa3d198e 516 spi.write(color >> 8);
sebastiken 0:66c1aa3d198e 517 spi.write(color);
sebastiken 0:66c1aa3d198e 518 _cs = 1;
sebastiken 0:66c1aa3d198e 519 }
sebastiken 0:66c1aa3d198e 520
sebastiken 0:66c1aa3d198e 521 /**************************************************************************/
sebastiken 0:66c1aa3d198e 522 /*!
sebastiken 0:66c1aa3d198e 523 Draws a HW accelerated line on the display
sebastiken 0:66c1aa3d198e 524
sebastiken 0:66c1aa3d198e 525 @args x0[in] The 0-based starting x location
sebastiken 0:66c1aa3d198e 526 @args y0[in] The 0-base starting y location
sebastiken 0:66c1aa3d198e 527 @args x1[in] The 0-based ending x location
sebastiken 0:66c1aa3d198e 528 @args y1[in] The 0-base ending y location
sebastiken 0:66c1aa3d198e 529 @args color[in] The RGB565 color to use when drawing the pixel
sebastiken 0:66c1aa3d198e 530 */
sebastiken 0:66c1aa3d198e 531 /**************************************************************************/
sebastiken 0:66c1aa3d198e 532 void Adafruit_RA8875::drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color)
sebastiken 0:66c1aa3d198e 533 {
sebastiken 0:66c1aa3d198e 534 /* Set X */
sebastiken 0:66c1aa3d198e 535 writeCommand(0x91);
sebastiken 0:66c1aa3d198e 536 writeData(x0);
sebastiken 0:66c1aa3d198e 537 writeCommand(0x92);
sebastiken 0:66c1aa3d198e 538 writeData(x0 >> 8);
sebastiken 0:66c1aa3d198e 539
sebastiken 0:66c1aa3d198e 540 /* Set Y */
sebastiken 0:66c1aa3d198e 541 writeCommand(0x93);
sebastiken 0:66c1aa3d198e 542 writeData(y0);
sebastiken 0:66c1aa3d198e 543 writeCommand(0x94);
sebastiken 0:66c1aa3d198e 544 writeData(y0 >> 8);
sebastiken 0:66c1aa3d198e 545
sebastiken 0:66c1aa3d198e 546 /* Set X1 */
sebastiken 0:66c1aa3d198e 547 writeCommand(0x95);
sebastiken 0:66c1aa3d198e 548 writeData(x1);
sebastiken 0:66c1aa3d198e 549 writeCommand(0x96);
sebastiken 0:66c1aa3d198e 550 writeData((x1) >> 8);
sebastiken 0:66c1aa3d198e 551
sebastiken 0:66c1aa3d198e 552 /* Set Y1 */
sebastiken 0:66c1aa3d198e 553 writeCommand(0x97);
sebastiken 0:66c1aa3d198e 554 writeData(y1);
sebastiken 0:66c1aa3d198e 555 writeCommand(0x98);
sebastiken 0:66c1aa3d198e 556 writeData((y1) >> 8);
sebastiken 0:66c1aa3d198e 557
sebastiken 0:66c1aa3d198e 558 /* Set Color */
sebastiken 0:66c1aa3d198e 559 writeCommand(0x63);
sebastiken 0:66c1aa3d198e 560 writeData((color & 0xf800) >> 11);
sebastiken 0:66c1aa3d198e 561 writeCommand(0x64);
sebastiken 0:66c1aa3d198e 562 writeData((color & 0x07e0) >> 5);
sebastiken 0:66c1aa3d198e 563 writeCommand(0x65);
sebastiken 0:66c1aa3d198e 564 writeData((color & 0x001f));
sebastiken 0:66c1aa3d198e 565
sebastiken 0:66c1aa3d198e 566 /* Draw! */
sebastiken 0:66c1aa3d198e 567 writeCommand(RA8875_DCR);
sebastiken 0:66c1aa3d198e 568 writeData(0x80);
sebastiken 0:66c1aa3d198e 569
sebastiken 0:66c1aa3d198e 570 /* Wait for the command to finish */
sebastiken 0:66c1aa3d198e 571 waitPoll(RA8875_DCR, RA8875_DCR_LINESQUTRI_STATUS);
sebastiken 0:66c1aa3d198e 572 }
sebastiken 0:66c1aa3d198e 573
sebastiken 0:66c1aa3d198e 574 /**************************************************************************/
sebastiken 0:66c1aa3d198e 575 /*!
sebastiken 0:66c1aa3d198e 576
sebastiken 0:66c1aa3d198e 577 */
sebastiken 0:66c1aa3d198e 578 /**************************************************************************/
sebastiken 0:66c1aa3d198e 579 void Adafruit_RA8875::drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color)
sebastiken 0:66c1aa3d198e 580 {
sebastiken 0:66c1aa3d198e 581 drawLine(x, y, x, y+h, color);
sebastiken 0:66c1aa3d198e 582 }
sebastiken 0:66c1aa3d198e 583
sebastiken 0:66c1aa3d198e 584 /**************************************************************************/
sebastiken 0:66c1aa3d198e 585 /*!
sebastiken 0:66c1aa3d198e 586
sebastiken 0:66c1aa3d198e 587 */
sebastiken 0:66c1aa3d198e 588 /**************************************************************************/
sebastiken 0:66c1aa3d198e 589 void Adafruit_RA8875::drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color)
sebastiken 0:66c1aa3d198e 590 {
sebastiken 0:66c1aa3d198e 591 drawLine(x, y, x+w, y, color);
sebastiken 0:66c1aa3d198e 592 }
sebastiken 0:66c1aa3d198e 593
sebastiken 0:66c1aa3d198e 594 /**************************************************************************/
sebastiken 0:66c1aa3d198e 595 /*!
sebastiken 0:66c1aa3d198e 596 Draws a HW accelerated rectangle on the display
sebastiken 0:66c1aa3d198e 597
sebastiken 0:66c1aa3d198e 598 @args x[in] The 0-based x location of the top-right corner
sebastiken 0:66c1aa3d198e 599 @args y[in] The 0-based y location of the top-right corner
sebastiken 0:66c1aa3d198e 600 @args w[in] The rectangle width
sebastiken 0:66c1aa3d198e 601 @args h[in] The rectangle height
sebastiken 0:66c1aa3d198e 602 @args color[in] The RGB565 color to use when drawing the pixel
sebastiken 0:66c1aa3d198e 603 */
sebastiken 0:66c1aa3d198e 604 /**************************************************************************/
sebastiken 0:66c1aa3d198e 605 /*
sebastiken 0:66c1aa3d198e 606 void Adafruit_RA8875::drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color)
sebastiken 0:66c1aa3d198e 607 {
sebastiken 0:66c1aa3d198e 608 rectHelper(x, y, x+w, y+h, color, false);
sebastiken 0:66c1aa3d198e 609 }
sebastiken 0:66c1aa3d198e 610 */
sebastiken 0:66c1aa3d198e 611 /**************************************************************************/
sebastiken 0:66c1aa3d198e 612 /*!
sebastiken 0:66c1aa3d198e 613 Draws a HW accelerated filled rectangle on the display
sebastiken 0:66c1aa3d198e 614
sebastiken 0:66c1aa3d198e 615 @args x[in] The 0-based x location of the top-right corner
sebastiken 0:66c1aa3d198e 616 @args y[in] The 0-based y location of the top-right corner
sebastiken 0:66c1aa3d198e 617 @args w[in] The rectangle width
sebastiken 0:66c1aa3d198e 618 @args h[in] The rectangle height
sebastiken 0:66c1aa3d198e 619 @args color[in] The RGB565 color to use when drawing the pixel
sebastiken 0:66c1aa3d198e 620 */
sebastiken 0:66c1aa3d198e 621 /**************************************************************************/
sebastiken 0:66c1aa3d198e 622 /*
sebastiken 0:66c1aa3d198e 623 void Adafruit_RA8875::fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color)
sebastiken 0:66c1aa3d198e 624 {
sebastiken 0:66c1aa3d198e 625 rectHelper(x, y, x+w, y+h, color, true);
sebastiken 0:66c1aa3d198e 626 }
sebastiken 0:66c1aa3d198e 627 */
sebastiken 0:66c1aa3d198e 628 /**************************************************************************/
sebastiken 0:66c1aa3d198e 629 /*!
sebastiken 0:66c1aa3d198e 630 Fills the screen with the spefied RGB565 color
sebastiken 0:66c1aa3d198e 631
sebastiken 0:66c1aa3d198e 632 @args color[in] The RGB565 color to use when drawing the pixel
sebastiken 0:66c1aa3d198e 633 */
sebastiken 0:66c1aa3d198e 634 /**************************************************************************/
sebastiken 0:66c1aa3d198e 635
sebastiken 0:66c1aa3d198e 636 void Adafruit_RA8875::fillScreen(uint16_t color)
sebastiken 0:66c1aa3d198e 637 {
sebastiken 0:66c1aa3d198e 638 rectHelper(0, 0, _width-1, _height-1, color, true);
sebastiken 0:66c1aa3d198e 639 }
sebastiken 0:66c1aa3d198e 640
sebastiken 0:66c1aa3d198e 641 /**************************************************************************/
sebastiken 0:66c1aa3d198e 642 /*!
sebastiken 0:66c1aa3d198e 643 Draws a HW accelerated circle on the display
sebastiken 0:66c1aa3d198e 644
sebastiken 0:66c1aa3d198e 645 @args x[in] The 0-based x location of the center of the circle
sebastiken 0:66c1aa3d198e 646 @args y[in] The 0-based y location of the center of the circle
sebastiken 0:66c1aa3d198e 647 @args w[in] The circle's radius
sebastiken 0:66c1aa3d198e 648 @args color[in] The RGB565 color to use when drawing the pixel
sebastiken 0:66c1aa3d198e 649 */
sebastiken 0:66c1aa3d198e 650 /**************************************************************************/
sebastiken 0:66c1aa3d198e 651 /*
sebastiken 0:66c1aa3d198e 652 void Adafruit_RA8875::drawCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color)
sebastiken 0:66c1aa3d198e 653 {
sebastiken 0:66c1aa3d198e 654 circleHelper(x0, y0, r, color, false);
sebastiken 0:66c1aa3d198e 655 }
sebastiken 0:66c1aa3d198e 656 */
sebastiken 0:66c1aa3d198e 657 /**************************************************************************/
sebastiken 0:66c1aa3d198e 658 /*!
sebastiken 0:66c1aa3d198e 659 Draws a HW accelerated filled circle on the display
sebastiken 0:66c1aa3d198e 660
sebastiken 0:66c1aa3d198e 661 @args x[in] The 0-based x location of the center of the circle
sebastiken 0:66c1aa3d198e 662 @args y[in] The 0-based y location of the center of the circle
sebastiken 0:66c1aa3d198e 663 @args w[in] The circle's radius
sebastiken 0:66c1aa3d198e 664 @args color[in] The RGB565 color to use when drawing the pixel
sebastiken 0:66c1aa3d198e 665 */
sebastiken 0:66c1aa3d198e 666 /**************************************************************************/
sebastiken 0:66c1aa3d198e 667 /*
sebastiken 0:66c1aa3d198e 668 void Adafruit_RA8875::fillCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color)
sebastiken 0:66c1aa3d198e 669 {
sebastiken 0:66c1aa3d198e 670 circleHelper(x0, y0, r, color, true);
sebastiken 0:66c1aa3d198e 671 }
sebastiken 0:66c1aa3d198e 672 */
sebastiken 0:66c1aa3d198e 673 /**************************************************************************/
sebastiken 0:66c1aa3d198e 674 /*!
sebastiken 0:66c1aa3d198e 675 Draws a HW accelerated triangle on the display
sebastiken 0:66c1aa3d198e 676
sebastiken 0:66c1aa3d198e 677 @args x0[in] The 0-based x location of point 0 on the triangle
sebastiken 0:66c1aa3d198e 678 @args y0[in] The 0-based y location of point 0 on the triangle
sebastiken 0:66c1aa3d198e 679 @args x1[in] The 0-based x location of point 1 on the triangle
sebastiken 0:66c1aa3d198e 680 @args y1[in] The 0-based y location of point 1 on the triangle
sebastiken 0:66c1aa3d198e 681 @args x2[in] The 0-based x location of point 2 on the triangle
sebastiken 0:66c1aa3d198e 682 @args y2[in] The 0-based y location of point 2 on the triangle
sebastiken 0:66c1aa3d198e 683 @args color[in] The RGB565 color to use when drawing the pixel
sebastiken 0:66c1aa3d198e 684 */
sebastiken 0:66c1aa3d198e 685 /**************************************************************************/
sebastiken 0:66c1aa3d198e 686 /*
sebastiken 0:66c1aa3d198e 687 void Adafruit_RA8875::drawTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color)
sebastiken 0:66c1aa3d198e 688 {
sebastiken 0:66c1aa3d198e 689 triangleHelper(x0, y0, x1, y1, x2, y2, color, false);
sebastiken 0:66c1aa3d198e 690 }
sebastiken 0:66c1aa3d198e 691 */
sebastiken 0:66c1aa3d198e 692 /**************************************************************************/
sebastiken 0:66c1aa3d198e 693 /*!
sebastiken 0:66c1aa3d198e 694 Draws a HW accelerated filled triangle on the display
sebastiken 0:66c1aa3d198e 695
sebastiken 0:66c1aa3d198e 696 @args x0[in] The 0-based x location of point 0 on the triangle
sebastiken 0:66c1aa3d198e 697 @args y0[in] The 0-based y location of point 0 on the triangle
sebastiken 0:66c1aa3d198e 698 @args x1[in] The 0-based x location of point 1 on the triangle
sebastiken 0:66c1aa3d198e 699 @args y1[in] The 0-based y location of point 1 on the triangle
sebastiken 0:66c1aa3d198e 700 @args x2[in] The 0-based x location of point 2 on the triangle
sebastiken 0:66c1aa3d198e 701 @args y2[in] The 0-based y location of point 2 on the triangle
sebastiken 0:66c1aa3d198e 702 @args color[in] The RGB565 color to use when drawing the pixel
sebastiken 0:66c1aa3d198e 703 */
sebastiken 0:66c1aa3d198e 704 /**************************************************************************/
sebastiken 0:66c1aa3d198e 705 /*
sebastiken 0:66c1aa3d198e 706 void Adafruit_RA8875::fillTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color)
sebastiken 0:66c1aa3d198e 707 {
sebastiken 0:66c1aa3d198e 708 triangleHelper(x0, y0, x1, y1, x2, y2, color, true);
sebastiken 0:66c1aa3d198e 709 }
sebastiken 0:66c1aa3d198e 710 */
sebastiken 0:66c1aa3d198e 711 /**************************************************************************/
sebastiken 0:66c1aa3d198e 712 /*!
sebastiken 0:66c1aa3d198e 713 Draws a HW accelerated ellipse on the display
sebastiken 0:66c1aa3d198e 714
sebastiken 0:66c1aa3d198e 715 @args xCenter[in] The 0-based x location of the ellipse's center
sebastiken 0:66c1aa3d198e 716 @args yCenter[in] The 0-based y location of the ellipse's center
sebastiken 0:66c1aa3d198e 717 @args longAxis[in] The size in pixels of the ellipse's long axis
sebastiken 0:66c1aa3d198e 718 @args shortAxis[in] The size in pixels of the ellipse's short axis
sebastiken 0:66c1aa3d198e 719 @args color[in] The RGB565 color to use when drawing the pixel
sebastiken 0:66c1aa3d198e 720 */
sebastiken 0:66c1aa3d198e 721 /**************************************************************************/
sebastiken 0:66c1aa3d198e 722 /*
sebastiken 0:66c1aa3d198e 723 void Adafruit_RA8875::drawEllipse(int16_t xCenter, int16_t yCenter, int16_t longAxis, int16_t shortAxis, uint16_t color)
sebastiken 0:66c1aa3d198e 724 {
sebastiken 0:66c1aa3d198e 725 ellipseHelper(xCenter, yCenter, longAxis, shortAxis, color, false);
sebastiken 0:66c1aa3d198e 726 }
sebastiken 0:66c1aa3d198e 727 */
sebastiken 0:66c1aa3d198e 728 /**************************************************************************/
sebastiken 0:66c1aa3d198e 729 /*!
sebastiken 0:66c1aa3d198e 730 Draws a HW accelerated filled ellipse on the display
sebastiken 0:66c1aa3d198e 731
sebastiken 0:66c1aa3d198e 732 @args xCenter[in] The 0-based x location of the ellipse's center
sebastiken 0:66c1aa3d198e 733 @args yCenter[in] The 0-based y location of the ellipse's center
sebastiken 0:66c1aa3d198e 734 @args longAxis[in] The size in pixels of the ellipse's long axis
sebastiken 0:66c1aa3d198e 735 @args shortAxis[in] The size in pixels of the ellipse's short axis
sebastiken 0:66c1aa3d198e 736 @args color[in] The RGB565 color to use when drawing the pixel
sebastiken 0:66c1aa3d198e 737 */
sebastiken 0:66c1aa3d198e 738 /**************************************************************************/
sebastiken 0:66c1aa3d198e 739 /*
sebastiken 0:66c1aa3d198e 740 void Adafruit_RA8875::fillEllipse(int16_t xCenter, int16_t yCenter, int16_t longAxis, int16_t shortAxis, uint16_t color)
sebastiken 0:66c1aa3d198e 741 {
sebastiken 0:66c1aa3d198e 742 ellipseHelper(xCenter, yCenter, longAxis, shortAxis, color, true);
sebastiken 0:66c1aa3d198e 743 }
sebastiken 0:66c1aa3d198e 744 */
sebastiken 0:66c1aa3d198e 745 /**************************************************************************/
sebastiken 0:66c1aa3d198e 746 /*!
sebastiken 0:66c1aa3d198e 747 Draws a HW accelerated curve on the display
sebastiken 0:66c1aa3d198e 748
sebastiken 0:66c1aa3d198e 749 @args xCenter[in] The 0-based x location of the ellipse's center
sebastiken 0:66c1aa3d198e 750 @args yCenter[in] The 0-based y location of the ellipse's center
sebastiken 0:66c1aa3d198e 751 @args longAxis[in] The size in pixels of the ellipse's long axis
sebastiken 0:66c1aa3d198e 752 @args shortAxis[in] The size in pixels of the ellipse's short axis
sebastiken 0:66c1aa3d198e 753 @args curvePart[in] The corner to draw, where in clock-wise motion:
sebastiken 0:66c1aa3d198e 754 0 = 180-270°
sebastiken 0:66c1aa3d198e 755 1 = 270-0°
sebastiken 0:66c1aa3d198e 756 2 = 0-90°
sebastiken 0:66c1aa3d198e 757 3 = 90-180°
sebastiken 0:66c1aa3d198e 758 @args color[in] The RGB565 color to use when drawing the pixel
sebastiken 0:66c1aa3d198e 759 */
sebastiken 0:66c1aa3d198e 760 /**************************************************************************/
sebastiken 0:66c1aa3d198e 761 /*
sebastiken 0:66c1aa3d198e 762 void Adafruit_RA8875::drawCurve(int16_t xCenter, int16_t yCenter, int16_t longAxis, int16_t shortAxis, uint8_t curvePart, uint16_t color)
sebastiken 0:66c1aa3d198e 763 {
sebastiken 0:66c1aa3d198e 764 curveHelper(xCenter, yCenter, longAxis, shortAxis, curvePart, color, false);
sebastiken 0:66c1aa3d198e 765 }
sebastiken 0:66c1aa3d198e 766 */
sebastiken 0:66c1aa3d198e 767 /**************************************************************************/
sebastiken 0:66c1aa3d198e 768 /*!
sebastiken 0:66c1aa3d198e 769 Draws a HW accelerated filled curve on the display
sebastiken 0:66c1aa3d198e 770
sebastiken 0:66c1aa3d198e 771 @args xCenter[in] The 0-based x location of the ellipse's center
sebastiken 0:66c1aa3d198e 772 @args yCenter[in] The 0-based y location of the ellipse's center
sebastiken 0:66c1aa3d198e 773 @args longAxis[in] The size in pixels of the ellipse's long axis
sebastiken 0:66c1aa3d198e 774 @args shortAxis[in] The size in pixels of the ellipse's short axis
sebastiken 0:66c1aa3d198e 775 @args curvePart[in] The corner to draw, where in clock-wise motion:
sebastiken 0:66c1aa3d198e 776 0 = 180-270°
sebastiken 0:66c1aa3d198e 777 1 = 270-0°
sebastiken 0:66c1aa3d198e 778 2 = 0-90°
sebastiken 0:66c1aa3d198e 779 3 = 90-180°
sebastiken 0:66c1aa3d198e 780 @args color[in] The RGB565 color to use when drawing the pixel
sebastiken 0:66c1aa3d198e 781 */
sebastiken 0:66c1aa3d198e 782 /**************************************************************************/
sebastiken 0:66c1aa3d198e 783 /*
sebastiken 0:66c1aa3d198e 784 void Adafruit_RA8875::fillCurve(int16_t xCenter, int16_t yCenter, int16_t longAxis, int16_t shortAxis, uint8_t curvePart, uint16_t color)
sebastiken 0:66c1aa3d198e 785 {
sebastiken 0:66c1aa3d198e 786 curveHelper(xCenter, yCenter, longAxis, shortAxis, curvePart, color, true);
sebastiken 0:66c1aa3d198e 787 }
sebastiken 0:66c1aa3d198e 788 */
sebastiken 0:66c1aa3d198e 789 /**************************************************************************/
sebastiken 0:66c1aa3d198e 790 /*!
sebastiken 0:66c1aa3d198e 791 Helper function for higher level circle drawing code
sebastiken 0:66c1aa3d198e 792 */
sebastiken 0:66c1aa3d198e 793 /**************************************************************************/
sebastiken 0:66c1aa3d198e 794
sebastiken 0:66c1aa3d198e 795 void Adafruit_RA8875::circleHelper(int16_t x0, int16_t y0, int16_t r, uint16_t color, bool filled)
sebastiken 0:66c1aa3d198e 796 {
sebastiken 0:66c1aa3d198e 797 /* Set X */
sebastiken 0:66c1aa3d198e 798 writeCommand(0x99);
sebastiken 0:66c1aa3d198e 799 writeData(x0);
sebastiken 0:66c1aa3d198e 800 writeCommand(0x9a);
sebastiken 0:66c1aa3d198e 801 writeData(x0 >> 8);
sebastiken 0:66c1aa3d198e 802
sebastiken 0:66c1aa3d198e 803 /* Set Y */
sebastiken 0:66c1aa3d198e 804 writeCommand(0x9b);
sebastiken 0:66c1aa3d198e 805 writeData(y0);
sebastiken 0:66c1aa3d198e 806 writeCommand(0x9c);
sebastiken 0:66c1aa3d198e 807 writeData(y0 >> 8);
sebastiken 0:66c1aa3d198e 808
sebastiken 0:66c1aa3d198e 809 /* Set Radius */
sebastiken 0:66c1aa3d198e 810 writeCommand(0x9d);
sebastiken 0:66c1aa3d198e 811 writeData(r);
sebastiken 0:66c1aa3d198e 812
sebastiken 0:66c1aa3d198e 813 /* Set Color */
sebastiken 0:66c1aa3d198e 814 writeCommand(0x63);
sebastiken 0:66c1aa3d198e 815 writeData((color & 0xf800) >> 11);
sebastiken 0:66c1aa3d198e 816 writeCommand(0x64);
sebastiken 0:66c1aa3d198e 817 writeData((color & 0x07e0) >> 5);
sebastiken 0:66c1aa3d198e 818 writeCommand(0x65);
sebastiken 0:66c1aa3d198e 819 writeData((color & 0x001f));
sebastiken 0:66c1aa3d198e 820
sebastiken 0:66c1aa3d198e 821 /* Draw! */
sebastiken 0:66c1aa3d198e 822 writeCommand(RA8875_DCR);
sebastiken 0:66c1aa3d198e 823 if (filled)
sebastiken 0:66c1aa3d198e 824 {
sebastiken 0:66c1aa3d198e 825 writeData(RA8875_DCR_CIRCLE_START | RA8875_DCR_FILL);
sebastiken 0:66c1aa3d198e 826 }
sebastiken 0:66c1aa3d198e 827 else
sebastiken 0:66c1aa3d198e 828 {
sebastiken 0:66c1aa3d198e 829 writeData(RA8875_DCR_CIRCLE_START | RA8875_DCR_NOFILL);
sebastiken 0:66c1aa3d198e 830 }
sebastiken 0:66c1aa3d198e 831
sebastiken 0:66c1aa3d198e 832 /* Wait for the command to finish */
sebastiken 0:66c1aa3d198e 833 waitPoll(RA8875_DCR, RA8875_DCR_CIRCLE_STATUS);
sebastiken 0:66c1aa3d198e 834 }
sebastiken 0:66c1aa3d198e 835
sebastiken 0:66c1aa3d198e 836 /**************************************************************************/
sebastiken 0:66c1aa3d198e 837 /*!
sebastiken 0:66c1aa3d198e 838 Helper function for higher level rectangle drawing code
sebastiken 0:66c1aa3d198e 839 */
sebastiken 0:66c1aa3d198e 840 /**************************************************************************/
sebastiken 0:66c1aa3d198e 841 void Adafruit_RA8875::rectHelper(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color, bool filled)
sebastiken 0:66c1aa3d198e 842 {
sebastiken 0:66c1aa3d198e 843 /* Set X */
sebastiken 0:66c1aa3d198e 844 writeCommand(0x91);
sebastiken 0:66c1aa3d198e 845 writeData(x);
sebastiken 0:66c1aa3d198e 846 writeCommand(0x92);
sebastiken 0:66c1aa3d198e 847 writeData(x >> 8);
sebastiken 0:66c1aa3d198e 848
sebastiken 0:66c1aa3d198e 849 /* Set Y */
sebastiken 0:66c1aa3d198e 850 writeCommand(0x93);
sebastiken 0:66c1aa3d198e 851 writeData(y);
sebastiken 0:66c1aa3d198e 852 writeCommand(0x94);
sebastiken 0:66c1aa3d198e 853 writeData(y >> 8);
sebastiken 0:66c1aa3d198e 854
sebastiken 0:66c1aa3d198e 855 /* Set X1 */
sebastiken 0:66c1aa3d198e 856 writeCommand(0x95);
sebastiken 0:66c1aa3d198e 857 writeData(w);
sebastiken 0:66c1aa3d198e 858 writeCommand(0x96);
sebastiken 0:66c1aa3d198e 859 writeData((w) >> 8);
sebastiken 0:66c1aa3d198e 860
sebastiken 0:66c1aa3d198e 861 /* Set Y1 */
sebastiken 0:66c1aa3d198e 862 writeCommand(0x97);
sebastiken 0:66c1aa3d198e 863 writeData(h);
sebastiken 0:66c1aa3d198e 864 writeCommand(0x98);
sebastiken 0:66c1aa3d198e 865 writeData((h) >> 8);
sebastiken 0:66c1aa3d198e 866
sebastiken 0:66c1aa3d198e 867 /* Set Color */
sebastiken 0:66c1aa3d198e 868 writeCommand(0x63);
sebastiken 0:66c1aa3d198e 869 writeData((color & 0xf800) >> 11);
sebastiken 0:66c1aa3d198e 870 writeCommand(0x64);
sebastiken 0:66c1aa3d198e 871 writeData((color & 0x07e0) >> 5);
sebastiken 0:66c1aa3d198e 872 writeCommand(0x65);
sebastiken 0:66c1aa3d198e 873 writeData((color & 0x001f));
sebastiken 0:66c1aa3d198e 874
sebastiken 0:66c1aa3d198e 875 /* Draw! */
sebastiken 0:66c1aa3d198e 876 writeCommand(RA8875_DCR);
sebastiken 0:66c1aa3d198e 877 if (filled)
sebastiken 0:66c1aa3d198e 878 {
sebastiken 0:66c1aa3d198e 879 writeData(0xB0);
sebastiken 0:66c1aa3d198e 880 }
sebastiken 0:66c1aa3d198e 881 else
sebastiken 0:66c1aa3d198e 882 {
sebastiken 0:66c1aa3d198e 883 writeData(0x90);
sebastiken 0:66c1aa3d198e 884 }
sebastiken 0:66c1aa3d198e 885
sebastiken 0:66c1aa3d198e 886 /* Wait for the command to finish */
sebastiken 0:66c1aa3d198e 887 waitPoll(RA8875_DCR, RA8875_DCR_LINESQUTRI_STATUS);
sebastiken 0:66c1aa3d198e 888 }
sebastiken 0:66c1aa3d198e 889
sebastiken 0:66c1aa3d198e 890 /**************************************************************************/
sebastiken 0:66c1aa3d198e 891 /*!
sebastiken 0:66c1aa3d198e 892 Helper function for higher level triangle drawing code
sebastiken 0:66c1aa3d198e 893 */
sebastiken 0:66c1aa3d198e 894 /**************************************************************************/
sebastiken 0:66c1aa3d198e 895 void Adafruit_RA8875::triangleHelper(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color, bool filled)
sebastiken 0:66c1aa3d198e 896 {
sebastiken 0:66c1aa3d198e 897 /* Set Point 0 */
sebastiken 0:66c1aa3d198e 898 writeCommand(0x91);
sebastiken 0:66c1aa3d198e 899 writeData(x0);
sebastiken 0:66c1aa3d198e 900 writeCommand(0x92);
sebastiken 0:66c1aa3d198e 901 writeData(x0 >> 8);
sebastiken 0:66c1aa3d198e 902 writeCommand(0x93);
sebastiken 0:66c1aa3d198e 903 writeData(y0);
sebastiken 0:66c1aa3d198e 904 writeCommand(0x94);
sebastiken 0:66c1aa3d198e 905 writeData(y0 >> 8);
sebastiken 0:66c1aa3d198e 906
sebastiken 0:66c1aa3d198e 907 /* Set Point 1 */
sebastiken 0:66c1aa3d198e 908 writeCommand(0x95);
sebastiken 0:66c1aa3d198e 909 writeData(x1);
sebastiken 0:66c1aa3d198e 910 writeCommand(0x96);
sebastiken 0:66c1aa3d198e 911 writeData(x1 >> 8);
sebastiken 0:66c1aa3d198e 912 writeCommand(0x97);
sebastiken 0:66c1aa3d198e 913 writeData(y1);
sebastiken 0:66c1aa3d198e 914 writeCommand(0x98);
sebastiken 0:66c1aa3d198e 915 writeData(y1 >> 8);
sebastiken 0:66c1aa3d198e 916
sebastiken 0:66c1aa3d198e 917 /* Set Point 2 */
sebastiken 0:66c1aa3d198e 918 writeCommand(0xA9);
sebastiken 0:66c1aa3d198e 919 writeData(x2);
sebastiken 0:66c1aa3d198e 920 writeCommand(0xAA);
sebastiken 0:66c1aa3d198e 921 writeData(x2 >> 8);
sebastiken 0:66c1aa3d198e 922 writeCommand(0xAB);
sebastiken 0:66c1aa3d198e 923 writeData(y2);
sebastiken 0:66c1aa3d198e 924 writeCommand(0xAC);
sebastiken 0:66c1aa3d198e 925 writeData(y2 >> 8);
sebastiken 0:66c1aa3d198e 926
sebastiken 0:66c1aa3d198e 927 /* Set Color */
sebastiken 0:66c1aa3d198e 928 writeCommand(0x63);
sebastiken 0:66c1aa3d198e 929 writeData((color & 0xf800) >> 11);
sebastiken 0:66c1aa3d198e 930 writeCommand(0x64);
sebastiken 0:66c1aa3d198e 931 writeData((color & 0x07e0) >> 5);
sebastiken 0:66c1aa3d198e 932 writeCommand(0x65);
sebastiken 0:66c1aa3d198e 933 writeData((color & 0x001f));
sebastiken 0:66c1aa3d198e 934
sebastiken 0:66c1aa3d198e 935 /* Draw! */
sebastiken 0:66c1aa3d198e 936 writeCommand(RA8875_DCR);
sebastiken 0:66c1aa3d198e 937 if (filled)
sebastiken 0:66c1aa3d198e 938 {
sebastiken 0:66c1aa3d198e 939 writeData(0xA1);
sebastiken 0:66c1aa3d198e 940 }
sebastiken 0:66c1aa3d198e 941 else
sebastiken 0:66c1aa3d198e 942 {
sebastiken 0:66c1aa3d198e 943 writeData(0x81);
sebastiken 0:66c1aa3d198e 944 }
sebastiken 0:66c1aa3d198e 945
sebastiken 0:66c1aa3d198e 946 /* Wait for the command to finish */
sebastiken 0:66c1aa3d198e 947 waitPoll(RA8875_DCR, RA8875_DCR_LINESQUTRI_STATUS);
sebastiken 0:66c1aa3d198e 948 }
sebastiken 0:66c1aa3d198e 949
sebastiken 0:66c1aa3d198e 950 /**************************************************************************/
sebastiken 0:66c1aa3d198e 951 /*!
sebastiken 0:66c1aa3d198e 952 Helper function for higher level ellipse drawing code
sebastiken 0:66c1aa3d198e 953 */
sebastiken 0:66c1aa3d198e 954 /**************************************************************************/
sebastiken 0:66c1aa3d198e 955 void Adafruit_RA8875::ellipseHelper(int16_t xCenter, int16_t yCenter, int16_t longAxis, int16_t shortAxis, uint16_t color, bool filled)
sebastiken 0:66c1aa3d198e 956 {
sebastiken 0:66c1aa3d198e 957 /* Set Center Point */
sebastiken 0:66c1aa3d198e 958 writeCommand(0xA5);
sebastiken 0:66c1aa3d198e 959 writeData(xCenter);
sebastiken 0:66c1aa3d198e 960 writeCommand(0xA6);
sebastiken 0:66c1aa3d198e 961 writeData(xCenter >> 8);
sebastiken 0:66c1aa3d198e 962 writeCommand(0xA7);
sebastiken 0:66c1aa3d198e 963 writeData(yCenter);
sebastiken 0:66c1aa3d198e 964 writeCommand(0xA8);
sebastiken 0:66c1aa3d198e 965 writeData(yCenter >> 8);
sebastiken 0:66c1aa3d198e 966
sebastiken 0:66c1aa3d198e 967 /* Set Long and Short Axis */
sebastiken 0:66c1aa3d198e 968 writeCommand(0xA1);
sebastiken 0:66c1aa3d198e 969 writeData(longAxis);
sebastiken 0:66c1aa3d198e 970 writeCommand(0xA2);
sebastiken 0:66c1aa3d198e 971 writeData(longAxis >> 8);
sebastiken 0:66c1aa3d198e 972 writeCommand(0xA3);
sebastiken 0:66c1aa3d198e 973 writeData(shortAxis);
sebastiken 0:66c1aa3d198e 974 writeCommand(0xA4);
sebastiken 0:66c1aa3d198e 975 writeData(shortAxis >> 8);
sebastiken 0:66c1aa3d198e 976
sebastiken 0:66c1aa3d198e 977 /* Set Color */
sebastiken 0:66c1aa3d198e 978 writeCommand(0x63);
sebastiken 0:66c1aa3d198e 979 writeData((color & 0xf800) >> 11);
sebastiken 0:66c1aa3d198e 980 writeCommand(0x64);
sebastiken 0:66c1aa3d198e 981 writeData((color & 0x07e0) >> 5);
sebastiken 0:66c1aa3d198e 982 writeCommand(0x65);
sebastiken 0:66c1aa3d198e 983 writeData((color & 0x001f));
sebastiken 0:66c1aa3d198e 984
sebastiken 0:66c1aa3d198e 985 /* Draw! */
sebastiken 0:66c1aa3d198e 986 writeCommand(0xA0);
sebastiken 0:66c1aa3d198e 987 if (filled)
sebastiken 0:66c1aa3d198e 988 {
sebastiken 0:66c1aa3d198e 989 writeData(0xC0);
sebastiken 0:66c1aa3d198e 990 }
sebastiken 0:66c1aa3d198e 991 else
sebastiken 0:66c1aa3d198e 992 {
sebastiken 0:66c1aa3d198e 993 writeData(0x80);
sebastiken 0:66c1aa3d198e 994 }
sebastiken 0:66c1aa3d198e 995
sebastiken 0:66c1aa3d198e 996 /* Wait for the command to finish */
sebastiken 0:66c1aa3d198e 997 waitPoll(RA8875_ELLIPSE, RA8875_ELLIPSE_STATUS);
sebastiken 0:66c1aa3d198e 998 }
sebastiken 0:66c1aa3d198e 999
sebastiken 0:66c1aa3d198e 1000 /**************************************************************************/
sebastiken 0:66c1aa3d198e 1001 /*!
sebastiken 0:66c1aa3d198e 1002 Helper function for higher level curve drawing code
sebastiken 0:66c1aa3d198e 1003 */
sebastiken 0:66c1aa3d198e 1004 /**************************************************************************/
sebastiken 0:66c1aa3d198e 1005 void Adafruit_RA8875::curveHelper(int16_t xCenter, int16_t yCenter, int16_t longAxis, int16_t shortAxis, uint8_t curvePart, uint16_t color, bool filled)
sebastiken 0:66c1aa3d198e 1006 {
sebastiken 0:66c1aa3d198e 1007 /* Set Center Point */
sebastiken 0:66c1aa3d198e 1008 writeCommand(0xA5);
sebastiken 0:66c1aa3d198e 1009 writeData(xCenter);
sebastiken 0:66c1aa3d198e 1010 writeCommand(0xA6);
sebastiken 0:66c1aa3d198e 1011 writeData(xCenter >> 8);
sebastiken 0:66c1aa3d198e 1012 writeCommand(0xA7);
sebastiken 0:66c1aa3d198e 1013 writeData(yCenter);
sebastiken 0:66c1aa3d198e 1014 writeCommand(0xA8);
sebastiken 0:66c1aa3d198e 1015 writeData(yCenter >> 8);
sebastiken 0:66c1aa3d198e 1016
sebastiken 0:66c1aa3d198e 1017 /* Set Long and Short Axis */
sebastiken 0:66c1aa3d198e 1018 writeCommand(0xA1);
sebastiken 0:66c1aa3d198e 1019 writeData(longAxis);
sebastiken 0:66c1aa3d198e 1020 writeCommand(0xA2);
sebastiken 0:66c1aa3d198e 1021 writeData(longAxis >> 8);
sebastiken 0:66c1aa3d198e 1022 writeCommand(0xA3);
sebastiken 0:66c1aa3d198e 1023 writeData(shortAxis);
sebastiken 0:66c1aa3d198e 1024 writeCommand(0xA4);
sebastiken 0:66c1aa3d198e 1025 writeData(shortAxis >> 8);
sebastiken 0:66c1aa3d198e 1026
sebastiken 0:66c1aa3d198e 1027 /* Set Color */
sebastiken 0:66c1aa3d198e 1028 writeCommand(0x63);
sebastiken 0:66c1aa3d198e 1029 writeData((color & 0xf800) >> 11);
sebastiken 0:66c1aa3d198e 1030 writeCommand(0x64);
sebastiken 0:66c1aa3d198e 1031 writeData((color & 0x07e0) >> 5);
sebastiken 0:66c1aa3d198e 1032 writeCommand(0x65);
sebastiken 0:66c1aa3d198e 1033 writeData((color & 0x001f));
sebastiken 0:66c1aa3d198e 1034
sebastiken 0:66c1aa3d198e 1035 /* Draw! */
sebastiken 0:66c1aa3d198e 1036 writeCommand(0xA0);
sebastiken 0:66c1aa3d198e 1037 if (filled)
sebastiken 0:66c1aa3d198e 1038 {
sebastiken 0:66c1aa3d198e 1039 writeData(0xD0 | (curvePart & 0x03));
sebastiken 0:66c1aa3d198e 1040 }
sebastiken 0:66c1aa3d198e 1041 else
sebastiken 0:66c1aa3d198e 1042 {
sebastiken 0:66c1aa3d198e 1043 writeData(0x90 | (curvePart & 0x03));
sebastiken 0:66c1aa3d198e 1044 }
sebastiken 0:66c1aa3d198e 1045
sebastiken 0:66c1aa3d198e 1046 /* Wait for the command to finish */
sebastiken 0:66c1aa3d198e 1047 waitPoll(RA8875_ELLIPSE, RA8875_ELLIPSE_STATUS);
sebastiken 0:66c1aa3d198e 1048 }
sebastiken 0:66c1aa3d198e 1049
sebastiken 0:66c1aa3d198e 1050 /************************* Mid Level ***********************************/
sebastiken 0:66c1aa3d198e 1051
sebastiken 0:66c1aa3d198e 1052 /**************************************************************************/
sebastiken 0:66c1aa3d198e 1053 /*!
sebastiken 0:66c1aa3d198e 1054
sebastiken 0:66c1aa3d198e 1055 */
sebastiken 0:66c1aa3d198e 1056 /**************************************************************************/
sebastiken 0:66c1aa3d198e 1057 void Adafruit_RA8875::GPIOX(bool on) {
sebastiken 0:66c1aa3d198e 1058 if (on)
sebastiken 0:66c1aa3d198e 1059 writeReg(RA8875_GPIOX, 1);
sebastiken 0:66c1aa3d198e 1060 else
sebastiken 0:66c1aa3d198e 1061 writeReg(RA8875_GPIOX, 0);
sebastiken 0:66c1aa3d198e 1062 }
sebastiken 0:66c1aa3d198e 1063
sebastiken 0:66c1aa3d198e 1064 /**************************************************************************/
sebastiken 0:66c1aa3d198e 1065 /*!
sebastiken 0:66c1aa3d198e 1066
sebastiken 0:66c1aa3d198e 1067 */
sebastiken 0:66c1aa3d198e 1068 /**************************************************************************/
sebastiken 0:66c1aa3d198e 1069 void Adafruit_RA8875::PWM1out(uint8_t p) {
sebastiken 0:66c1aa3d198e 1070 writeReg(RA8875_P1DCR, p);
sebastiken 0:66c1aa3d198e 1071 }
sebastiken 0:66c1aa3d198e 1072
sebastiken 0:66c1aa3d198e 1073 /**************************************************************************/
sebastiken 0:66c1aa3d198e 1074 /*!
sebastiken 0:66c1aa3d198e 1075
sebastiken 0:66c1aa3d198e 1076 */
sebastiken 0:66c1aa3d198e 1077 /**************************************************************************/
sebastiken 0:66c1aa3d198e 1078 void Adafruit_RA8875::PWM2out(uint8_t p) {
sebastiken 0:66c1aa3d198e 1079 writeReg(RA8875_P2DCR, p);
sebastiken 0:66c1aa3d198e 1080 }
sebastiken 0:66c1aa3d198e 1081
sebastiken 0:66c1aa3d198e 1082 /**************************************************************************/
sebastiken 0:66c1aa3d198e 1083 /*!
sebastiken 0:66c1aa3d198e 1084
sebastiken 0:66c1aa3d198e 1085 */
sebastiken 0:66c1aa3d198e 1086 /**************************************************************************/
sebastiken 0:66c1aa3d198e 1087 void Adafruit_RA8875::PWM1config(bool on, uint8_t clock) {
sebastiken 0:66c1aa3d198e 1088 if (on) {
sebastiken 0:66c1aa3d198e 1089 writeReg(RA8875_P1CR, RA8875_P1CR_ENABLE | (clock & 0xF));
sebastiken 0:66c1aa3d198e 1090 } else {
sebastiken 0:66c1aa3d198e 1091 writeReg(RA8875_P1CR, RA8875_P1CR_DISABLE | (clock & 0xF));
sebastiken 0:66c1aa3d198e 1092 }
sebastiken 0:66c1aa3d198e 1093 }
sebastiken 0:66c1aa3d198e 1094
sebastiken 0:66c1aa3d198e 1095 /**************************************************************************/
sebastiken 0:66c1aa3d198e 1096 /*!
sebastiken 0:66c1aa3d198e 1097
sebastiken 0:66c1aa3d198e 1098 */
sebastiken 0:66c1aa3d198e 1099 /**************************************************************************/
sebastiken 0:66c1aa3d198e 1100 void Adafruit_RA8875::PWM2config(bool on, uint8_t clock) {
sebastiken 0:66c1aa3d198e 1101 if (on) {
sebastiken 0:66c1aa3d198e 1102 writeReg(RA8875_P2CR, RA8875_P2CR_ENABLE | (clock & 0xF));
sebastiken 0:66c1aa3d198e 1103 } else {
sebastiken 0:66c1aa3d198e 1104 writeReg(RA8875_P2CR, RA8875_P2CR_DISABLE | (clock & 0xF));
sebastiken 0:66c1aa3d198e 1105 }
sebastiken 0:66c1aa3d198e 1106 }
sebastiken 0:66c1aa3d198e 1107
sebastiken 0:66c1aa3d198e 1108 /**************************************************************************/
sebastiken 0:66c1aa3d198e 1109 /*!
sebastiken 0:66c1aa3d198e 1110 Enables or disables the on-chip touch screen controller
sebastiken 0:66c1aa3d198e 1111 */
sebastiken 0:66c1aa3d198e 1112 /**************************************************************************/
sebastiken 0:66c1aa3d198e 1113 void Adafruit_RA8875::touchEnable(bool on)
sebastiken 0:66c1aa3d198e 1114 {
sebastiken 0:66c1aa3d198e 1115 uint8_t adcClk = (uint8_t) RA8875_TPCR0_ADCCLK_DIV4;
sebastiken 0:66c1aa3d198e 1116
sebastiken 0:66c1aa3d198e 1117 if ( _size == RA8875_800x480 ) //match up touch size with LCD size
sebastiken 0:66c1aa3d198e 1118 adcClk = (uint8_t) RA8875_TPCR0_ADCCLK_DIV16;
sebastiken 0:66c1aa3d198e 1119
sebastiken 0:66c1aa3d198e 1120 if (on)
sebastiken 0:66c1aa3d198e 1121 {
sebastiken 0:66c1aa3d198e 1122 /* Enable Touch Panel (Reg 0x70) */
sebastiken 0:66c1aa3d198e 1123 writeReg(RA8875_TPCR0, RA8875_TPCR0_ENABLE |
sebastiken 0:66c1aa3d198e 1124 RA8875_TPCR0_WAIT_4096CLK |
sebastiken 0:66c1aa3d198e 1125 RA8875_TPCR0_WAKEENABLE |
sebastiken 0:66c1aa3d198e 1126 adcClk); // 10mhz max!
sebastiken 0:66c1aa3d198e 1127 /* Set Auto Mode (Reg 0x71) */
sebastiken 0:66c1aa3d198e 1128 writeReg(RA8875_TPCR1, RA8875_TPCR1_AUTO |
sebastiken 0:66c1aa3d198e 1129 // RA8875_TPCR1_VREFEXT |
sebastiken 0:66c1aa3d198e 1130 RA8875_TPCR1_DEBOUNCE);
sebastiken 0:66c1aa3d198e 1131 /* Enable TP INT */
sebastiken 0:66c1aa3d198e 1132 writeReg(RA8875_INTC1, readReg(RA8875_INTC1) | RA8875_INTC1_TP);
sebastiken 0:66c1aa3d198e 1133 }
sebastiken 0:66c1aa3d198e 1134 else
sebastiken 0:66c1aa3d198e 1135 {
sebastiken 0:66c1aa3d198e 1136 /* Disable TP INT */
sebastiken 0:66c1aa3d198e 1137 writeReg(RA8875_INTC1, readReg(RA8875_INTC1) & ~RA8875_INTC1_TP);
sebastiken 0:66c1aa3d198e 1138 /* Disable Touch Panel (Reg 0x70) */
sebastiken 0:66c1aa3d198e 1139 writeReg(RA8875_TPCR0, RA8875_TPCR0_DISABLE);
sebastiken 0:66c1aa3d198e 1140 }
sebastiken 0:66c1aa3d198e 1141 }
sebastiken 0:66c1aa3d198e 1142
sebastiken 0:66c1aa3d198e 1143 /**************************************************************************/
sebastiken 0:66c1aa3d198e 1144 /*!
sebastiken 0:66c1aa3d198e 1145 Checks if a touch event has occured
sebastiken 0:66c1aa3d198e 1146
sebastiken 0:66c1aa3d198e 1147 @returns True is a touch event has occured (reading it via
sebastiken 0:66c1aa3d198e 1148 touchRead() will clear the interrupt in memory)
sebastiken 0:66c1aa3d198e 1149 */
sebastiken 0:66c1aa3d198e 1150 /**************************************************************************/
sebastiken 0:66c1aa3d198e 1151 bool Adafruit_RA8875::touched(void)
sebastiken 0:66c1aa3d198e 1152 {
sebastiken 0:66c1aa3d198e 1153 if (readReg(RA8875_INTC2) & RA8875_INTC2_TP) return true;
sebastiken 0:66c1aa3d198e 1154 return false;
sebastiken 0:66c1aa3d198e 1155 }
sebastiken 0:66c1aa3d198e 1156
sebastiken 0:66c1aa3d198e 1157 /**************************************************************************/
sebastiken 0:66c1aa3d198e 1158 /*!
sebastiken 0:66c1aa3d198e 1159 Reads the last touch event
sebastiken 0:66c1aa3d198e 1160
sebastiken 0:66c1aa3d198e 1161 @args x[out] Pointer to the uint16_t field to assign the raw X value
sebastiken 0:66c1aa3d198e 1162 @args y[out] Pointer to the uint16_t field to assign the raw Y value
sebastiken 0:66c1aa3d198e 1163
sebastiken 0:66c1aa3d198e 1164 @note Calling this function will clear the touch panel interrupt on
sebastiken 0:66c1aa3d198e 1165 the RA8875, resetting the flag used by the 'touched' function
sebastiken 0:66c1aa3d198e 1166 */
sebastiken 0:66c1aa3d198e 1167 /**************************************************************************/
sebastiken 0:66c1aa3d198e 1168 bool Adafruit_RA8875::touchRead(uint16_t *x, uint16_t *y)
sebastiken 0:66c1aa3d198e 1169 {
sebastiken 0:66c1aa3d198e 1170 uint16_t tx, ty;
sebastiken 0:66c1aa3d198e 1171 uint8_t temp;
sebastiken 0:66c1aa3d198e 1172
sebastiken 0:66c1aa3d198e 1173 tx = readReg(RA8875_TPXH);
sebastiken 0:66c1aa3d198e 1174 ty = readReg(RA8875_TPYH);
sebastiken 0:66c1aa3d198e 1175 temp = readReg(RA8875_TPXYL);
sebastiken 0:66c1aa3d198e 1176 tx <<= 2;
sebastiken 0:66c1aa3d198e 1177 ty <<= 2;
sebastiken 0:66c1aa3d198e 1178 tx |= temp & 0x03; // get the bottom x bits
sebastiken 0:66c1aa3d198e 1179 ty |= (temp >> 2) & 0x03; // get the bottom y bits
sebastiken 0:66c1aa3d198e 1180
sebastiken 0:66c1aa3d198e 1181 *x = tx;
sebastiken 0:66c1aa3d198e 1182 *y = ty;
sebastiken 0:66c1aa3d198e 1183
sebastiken 0:66c1aa3d198e 1184 /* Clear TP INT Status */
sebastiken 0:66c1aa3d198e 1185 writeReg(RA8875_INTC2, RA8875_INTC2_TP);
sebastiken 0:66c1aa3d198e 1186
sebastiken 0:66c1aa3d198e 1187 return true;
sebastiken 0:66c1aa3d198e 1188 }
sebastiken 0:66c1aa3d198e 1189
sebastiken 0:66c1aa3d198e 1190 /**************************************************************************/
sebastiken 0:66c1aa3d198e 1191 /*!
sebastiken 0:66c1aa3d198e 1192 Turns the display on or off
sebastiken 0:66c1aa3d198e 1193 */
sebastiken 0:66c1aa3d198e 1194 /**************************************************************************/
sebastiken 0:66c1aa3d198e 1195 void Adafruit_RA8875::displayOn(bool on)
sebastiken 0:66c1aa3d198e 1196 {
sebastiken 0:66c1aa3d198e 1197 if (on)
sebastiken 0:66c1aa3d198e 1198 writeReg(RA8875_PWRR, RA8875_PWRR_NORMAL | RA8875_PWRR_DISPON);
sebastiken 0:66c1aa3d198e 1199 else
sebastiken 0:66c1aa3d198e 1200 writeReg(RA8875_PWRR, RA8875_PWRR_NORMAL | RA8875_PWRR_DISPOFF);
sebastiken 0:66c1aa3d198e 1201 }
sebastiken 0:66c1aa3d198e 1202
sebastiken 0:66c1aa3d198e 1203 /**************************************************************************/
sebastiken 0:66c1aa3d198e 1204 /*!
sebastiken 0:66c1aa3d198e 1205 Puts the display in sleep mode, or disables sleep mode if enabled
sebastiken 0:66c1aa3d198e 1206 */
sebastiken 0:66c1aa3d198e 1207 /**************************************************************************/
sebastiken 0:66c1aa3d198e 1208 void Adafruit_RA8875::sleep(bool sleep)
sebastiken 0:66c1aa3d198e 1209 {
sebastiken 0:66c1aa3d198e 1210 if (sleep)
sebastiken 0:66c1aa3d198e 1211 writeReg(RA8875_PWRR, RA8875_PWRR_DISPOFF | RA8875_PWRR_SLEEP);
sebastiken 0:66c1aa3d198e 1212 else
sebastiken 0:66c1aa3d198e 1213 writeReg(RA8875_PWRR, RA8875_PWRR_DISPOFF);
sebastiken 0:66c1aa3d198e 1214 }
sebastiken 0:66c1aa3d198e 1215
sebastiken 0:66c1aa3d198e 1216 /************************* Low Level ***********************************/
sebastiken 0:66c1aa3d198e 1217
sebastiken 0:66c1aa3d198e 1218 /**************************************************************************/
sebastiken 0:66c1aa3d198e 1219 /*!
sebastiken 0:66c1aa3d198e 1220
sebastiken 0:66c1aa3d198e 1221 */
sebastiken 0:66c1aa3d198e 1222 /**************************************************************************/
sebastiken 0:66c1aa3d198e 1223 void Adafruit_RA8875::writeReg(uint8_t reg, uint8_t val)
sebastiken 0:66c1aa3d198e 1224 {
sebastiken 0:66c1aa3d198e 1225 writeCommand(reg);
sebastiken 0:66c1aa3d198e 1226 writeData(val);
sebastiken 0:66c1aa3d198e 1227 }
sebastiken 0:66c1aa3d198e 1228
sebastiken 0:66c1aa3d198e 1229 /**************************************************************************/
sebastiken 0:66c1aa3d198e 1230 /*!
sebastiken 0:66c1aa3d198e 1231
sebastiken 0:66c1aa3d198e 1232 */
sebastiken 0:66c1aa3d198e 1233 /**************************************************************************/
sebastiken 0:66c1aa3d198e 1234 uint8_t Adafruit_RA8875::readReg(uint8_t reg)
sebastiken 0:66c1aa3d198e 1235 {
sebastiken 0:66c1aa3d198e 1236 writeCommand(reg);
sebastiken 0:66c1aa3d198e 1237 return readData();
sebastiken 0:66c1aa3d198e 1238 }
sebastiken 0:66c1aa3d198e 1239
sebastiken 0:66c1aa3d198e 1240 /**************************************************************************/
sebastiken 0:66c1aa3d198e 1241 /*!
sebastiken 0:66c1aa3d198e 1242
sebastiken 0:66c1aa3d198e 1243 */
sebastiken 0:66c1aa3d198e 1244 /**************************************************************************/
sebastiken 0:66c1aa3d198e 1245 void Adafruit_RA8875::writeData(uint8_t d)
sebastiken 0:66c1aa3d198e 1246 {
sebastiken 0:66c1aa3d198e 1247 _cs = 0;
sebastiken 0:66c1aa3d198e 1248
sebastiken 0:66c1aa3d198e 1249 spi.write(RA8875_DATAWRITE);
sebastiken 0:66c1aa3d198e 1250 spi.write(d);
sebastiken 0:66c1aa3d198e 1251 _cs = 1;
sebastiken 0:66c1aa3d198e 1252
sebastiken 0:66c1aa3d198e 1253 }
sebastiken 0:66c1aa3d198e 1254
sebastiken 0:66c1aa3d198e 1255 /**************************************************************************/
sebastiken 0:66c1aa3d198e 1256 /*!
sebastiken 0:66c1aa3d198e 1257
sebastiken 0:66c1aa3d198e 1258 */
sebastiken 0:66c1aa3d198e 1259 /**************************************************************************/
sebastiken 0:66c1aa3d198e 1260 uint8_t Adafruit_RA8875::readData(void)
sebastiken 0:66c1aa3d198e 1261 {
sebastiken 0:66c1aa3d198e 1262 _cs = 0;
sebastiken 0:66c1aa3d198e 1263
sebastiken 0:66c1aa3d198e 1264 spi.write(RA8875_DATAREAD);
sebastiken 0:66c1aa3d198e 1265 uint8_t x = spi.write(0x0);
sebastiken 0:66c1aa3d198e 1266
sebastiken 0:66c1aa3d198e 1267 _cs = 1;
sebastiken 0:66c1aa3d198e 1268 return x;
sebastiken 0:66c1aa3d198e 1269 }
sebastiken 0:66c1aa3d198e 1270
sebastiken 0:66c1aa3d198e 1271 /**************************************************************************/
sebastiken 0:66c1aa3d198e 1272 /*!
sebastiken 0:66c1aa3d198e 1273
sebastiken 0:66c1aa3d198e 1274 */
sebastiken 0:66c1aa3d198e 1275 /**************************************************************************/
sebastiken 0:66c1aa3d198e 1276 void Adafruit_RA8875::writeCommand(uint8_t d)
sebastiken 0:66c1aa3d198e 1277 {
sebastiken 0:66c1aa3d198e 1278 _cs = 0;
sebastiken 0:66c1aa3d198e 1279
sebastiken 0:66c1aa3d198e 1280 spi.write(RA8875_CMDWRITE);
sebastiken 0:66c1aa3d198e 1281 spi.write(d);
sebastiken 0:66c1aa3d198e 1282
sebastiken 0:66c1aa3d198e 1283 _cs = 1;
sebastiken 0:66c1aa3d198e 1284 }
sebastiken 0:66c1aa3d198e 1285
sebastiken 0:66c1aa3d198e 1286 /**************************************************************************/
sebastiken 0:66c1aa3d198e 1287 /*!
sebastiken 0:66c1aa3d198e 1288
sebastiken 0:66c1aa3d198e 1289 */
sebastiken 0:66c1aa3d198e 1290 /**************************************************************************/
sebastiken 0:66c1aa3d198e 1291 uint8_t Adafruit_RA8875::readStatus(void)
sebastiken 0:66c1aa3d198e 1292 {
sebastiken 0:66c1aa3d198e 1293 _cs = 0;
sebastiken 0:66c1aa3d198e 1294
sebastiken 0:66c1aa3d198e 1295 spi.write(RA8875_CMDREAD);
sebastiken 0:66c1aa3d198e 1296 uint8_t x = spi.write(0x0);
sebastiken 0:66c1aa3d198e 1297
sebastiken 0:66c1aa3d198e 1298 _cs = 1;
sebastiken 0:66c1aa3d198e 1299 return x;
sebastiken 0:66c1aa3d198e 1300 }