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