Library to control a Graphics TFT connected to 4-wire SPI - revised for the Raio RA8875 Display Controller.

Dependents:   FRDM_RA8875_mPaint RA8875_Demo RA8875_KeyPadDemo SignalGenerator ... more

Fork of SPI_TFT by Peter Drescher

See Components - RA8875 Based Display

Enhanced touch-screen support - where it previous supported both the Resistive Touch and Capacitive Touch based on the FT5206 Touch Controller, now it also has support for the GSL1680 Touch Controller.

Offline Help Manual (Windows chm)

/media/uploads/WiredHome/ra8875.zip.bin (download, rename to .zip and unzip)

Committer:
WiredHome
Date:
Sun Aug 17 13:46:06 2014 +0000
Revision:
61:8f3153bf0baa
Parent:
60:2dfd574f63bd
Child:
62:ba5d33438fda
Revised cls( ) to support layers.; Added a few handy color definitions.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
WiredHome 19:3f82c1161fd2 1 /// RA8875 Display Controller Library.
WiredHome 19:3f82c1161fd2 2 ///
WiredHome 19:3f82c1161fd2 3 /// This is being created for a specific display from buydisplay.com,
WiredHome 44:207594dece70 4 /// which is 480 x 272. It has other attributes (like display controller
WiredHome 19:3f82c1161fd2 5 /// managed backlight brightness. So, there are expectations and some
WiredHome 44:207594dece70 6 /// defined constants based on that specific display. Some initial work
WiredHome 44:207594dece70 7 /// was done to support other display resolutions (e.g. 800 x 480), but
WiredHome 44:207594dece70 8 /// this has not been tested.
WiredHome 19:3f82c1161fd2 9 ///
WiredHome 19:3f82c1161fd2 10 #include "RA8875.h"
WiredHome 19:3f82c1161fd2 11
WiredHome 41:2956a0a221e5 12 //#define DEBUG "RAIO"
WiredHome 19:3f82c1161fd2 13 // ...
WiredHome 19:3f82c1161fd2 14 // INFO("Stuff to show %d", var); // new-line is automatically appended
WiredHome 19:3f82c1161fd2 15 //
WiredHome 19:3f82c1161fd2 16 #if (defined(DEBUG) && !defined(TARGET_LPC11U24))
WiredHome 19:3f82c1161fd2 17 #define INFO(x, ...) std::printf("[INF %s %3d] "x"\r\n", DEBUG, __LINE__, ##__VA_ARGS__);
WiredHome 19:3f82c1161fd2 18 #define WARN(x, ...) std::printf("[WRN %s %3d] "x"\r\n", DEBUG, __LINE__, ##__VA_ARGS__);
WiredHome 19:3f82c1161fd2 19 #define ERR(x, ...) std::printf("[ERR %s %3d] "x"\r\n", DEBUG, __LINE__, ##__VA_ARGS__);
WiredHome 19:3f82c1161fd2 20 #else
WiredHome 19:3f82c1161fd2 21 #define INFO(x, ...)
WiredHome 19:3f82c1161fd2 22 #define WARN(x, ...)
WiredHome 19:3f82c1161fd2 23 #define ERR(x, ...)
WiredHome 19:3f82c1161fd2 24 #endif
WiredHome 19:3f82c1161fd2 25
WiredHome 19:3f82c1161fd2 26
WiredHome 19:3f82c1161fd2 27 #define RA8875_DISPLAY_WIDTH 480
WiredHome 19:3f82c1161fd2 28 #define RA8875_DISPLAY_HEIGHT 272
WiredHome 43:3becae133285 29 #define RA8875_COLORDEPTH_BPP 16 /* Not an API */
WiredHome 19:3f82c1161fd2 30
WiredHome 19:3f82c1161fd2 31 #ifdef PERF_METRICS
WiredHome 19:3f82c1161fd2 32 #define PERFORMANCE_RESET performance.reset()
WiredHome 19:3f82c1161fd2 33 #define REGISTERPERFORMANCE(a) RegisterPerformance(a)
WiredHome 19:3f82c1161fd2 34 static const char *metricsName[] =
WiredHome 19:3f82c1161fd2 35 {
WiredHome 41:2956a0a221e5 36 "Cls", "Pixel", "Pixel Stream",
WiredHome 41:2956a0a221e5 37 "Read Pixel", "Read Pixel Stream",
WiredHome 41:2956a0a221e5 38 "Line",
WiredHome 41:2956a0a221e5 39 "Rectangle", "Rounded Rectangle", "Triangle", "Circle", "Ellipse"
WiredHome 19:3f82c1161fd2 40 };
WiredHome 19:3f82c1161fd2 41 #else
WiredHome 19:3f82c1161fd2 42 #define PERFORMANCE_RESET
WiredHome 19:3f82c1161fd2 43 #define REGISTERPERFORMANCE(a)
WiredHome 19:3f82c1161fd2 44 #endif
WiredHome 19:3f82c1161fd2 45
WiredHome 19:3f82c1161fd2 46 // When it is going to poll a register for completion, how many
WiredHome 19:3f82c1161fd2 47 // uSec should it wait between each polling activity.
WiredHome 19:3f82c1161fd2 48 #define POLLWAITuSec 10
WiredHome 19:3f82c1161fd2 49
WiredHome 19:3f82c1161fd2 50
WiredHome 19:3f82c1161fd2 51 RA8875::RA8875(PinName mosi, PinName miso, PinName sclk, PinName csel, PinName reset, const char *name)
WiredHome 58:26658a56112a 52 : GraphicsDisplay(name)
WiredHome 58:26658a56112a 53 , spi(mosi, miso, sclk)
WiredHome 19:3f82c1161fd2 54 , cs(csel)
WiredHome 19:3f82c1161fd2 55 , res(reset)
WiredHome 19:3f82c1161fd2 56 {
WiredHome 19:3f82c1161fd2 57 font = NULL; // no external font, use internal.
WiredHome 19:3f82c1161fd2 58 select(false); // deselect the display
WiredHome 19:3f82c1161fd2 59 frequency(RA8875_DEFAULT_SPI_FREQ); // data rate
WiredHome 28:ed102fc442c4 60 Reset();
WiredHome 28:ed102fc442c4 61 Power(true);
WiredHome 28:ed102fc442c4 62 Backlight_u8(255);
WiredHome 19:3f82c1161fd2 63 #ifdef PERF_METRICS
WiredHome 19:3f82c1161fd2 64 performance.start();
WiredHome 19:3f82c1161fd2 65 ClearPerformance();
WiredHome 19:3f82c1161fd2 66 #endif
WiredHome 19:3f82c1161fd2 67 }
WiredHome 19:3f82c1161fd2 68
WiredHome 43:3becae133285 69
WiredHome 19:3f82c1161fd2 70 //RA8875::~RA8875()
WiredHome 19:3f82c1161fd2 71 //{
WiredHome 19:3f82c1161fd2 72 //}
WiredHome 19:3f82c1161fd2 73
WiredHome 61:8f3153bf0baa 74 uint16_t RA8875::GetDrawingLayer(void)
WiredHome 61:8f3153bf0baa 75 {
WiredHome 61:8f3153bf0baa 76 return (ReadCommand(0x41) & 0x01);
WiredHome 61:8f3153bf0baa 77 }
WiredHome 43:3becae133285 78
WiredHome 50:2c4f474a2453 79 RetCode_t RA8875::SelectDrawingLayer(uint16_t layer)
WiredHome 43:3becae133285 80 {
WiredHome 43:3becae133285 81 unsigned char mwcr1 = ReadCommand(0x41) & ~0x01; // retain all but the currently selected layer
WiredHome 43:3becae133285 82
WiredHome 43:3becae133285 83 if (width() >= 800 && height() >= 480 && color_bpp() == 8) {
WiredHome 43:3becae133285 84 return bad_parameter;
WiredHome 43:3becae133285 85 } else if (layer > 1) {
WiredHome 43:3becae133285 86 return bad_parameter;
WiredHome 43:3becae133285 87 } else { // layer == 0 ro 1
WiredHome 43:3becae133285 88 WriteCommand(0x41, mwcr1 | layer);
WiredHome 43:3becae133285 89 }
WiredHome 43:3becae133285 90 return noerror;
WiredHome 43:3becae133285 91 }
WiredHome 43:3becae133285 92
WiredHome 44:207594dece70 93
WiredHome 53:86d24b9480b9 94 RetCode_t RA8875::SetLayerMode(LayerMode_T mode)
WiredHome 44:207594dece70 95 {
WiredHome 53:86d24b9480b9 96 unsigned char ltpr0 = ReadCommand(0x52) & ~0x7; // retain all but the display layer mode
WiredHome 53:86d24b9480b9 97 if (mode <= (LayerMode_T)6) {
WiredHome 53:86d24b9480b9 98 WriteCommand(0x52, ltpr0 | (mode & 0x7));
WiredHome 53:86d24b9480b9 99 return noerror;
WiredHome 53:86d24b9480b9 100 } else {
WiredHome 53:86d24b9480b9 101 return bad_parameter;
WiredHome 53:86d24b9480b9 102 }
WiredHome 44:207594dece70 103 }
WiredHome 44:207594dece70 104
WiredHome 44:207594dece70 105
WiredHome 44:207594dece70 106 RetCode_t RA8875::SetLayerTransparency(uint8_t layer1, uint8_t layer2)
WiredHome 44:207594dece70 107 {
WiredHome 44:207594dece70 108 if (layer1 > 8)
WiredHome 44:207594dece70 109 layer1 = 8;
WiredHome 44:207594dece70 110 if (layer2 > 8)
WiredHome 44:207594dece70 111 layer2 = 8;
WiredHome 44:207594dece70 112 WriteCommand(0x53, ((layer2 & 0xF) << 4) | (layer1 & 0xF));
WiredHome 44:207594dece70 113 return noerror;
WiredHome 44:207594dece70 114 }
WiredHome 44:207594dece70 115
WiredHome 44:207594dece70 116
WiredHome 53:86d24b9480b9 117 RetCode_t RA8875::SetBackgroundTransparencyColor(color_t color)
WiredHome 53:86d24b9480b9 118 {
WiredHome 53:86d24b9480b9 119 WriteCommand(0x67, (color >> 11) & 0x1F);
WiredHome 53:86d24b9480b9 120 WriteCommand(0x68, (color >> 5) & 0x3F);
WiredHome 53:86d24b9480b9 121 WriteCommand(0x69, (color & 0x1F));
WiredHome 53:86d24b9480b9 122 return noerror;
WiredHome 53:86d24b9480b9 123 }
WiredHome 53:86d24b9480b9 124
hexley 54:e117ad10fba6 125 // ### Touch Panel support code additions begin here
hexley 54:e117ad10fba6 126
hexley 54:e117ad10fba6 127 RetCode_t RA8875::TouchPanelInit(void)
hexley 54:e117ad10fba6 128 {
hexley 54:e117ad10fba6 129 //TPCR0: Set enable bit, default sample time, wakeup, and ADC clock
hexley 54:e117ad10fba6 130 WriteCommand(TPCR0, TP_ENABLE | TP_ADC_SAMPLE_DEFAULT_CLKS | TP_ADC_CLKDIV_DEFAULT);
hexley 54:e117ad10fba6 131 // TPCR1: Set auto/manual, Ref voltage, debounce, manual mode params
hexley 54:e117ad10fba6 132 WriteCommand(TPCR1, TP_MODE_DEFAULT | TP_DEBOUNCE_DEFAULT);
hexley 54:e117ad10fba6 133 WriteCommand(INTC1, ReadCommand(INTC1) | RA8875_INT_TP); // reg INTC1: Enable Touch Panel Interrupts (D2 = 1)
hexley 54:e117ad10fba6 134 WriteCommand(INTC2, RA8875_INT_TP); // reg INTC2: Clear any TP interrupt flag
hexley 54:e117ad10fba6 135 return noerror;
hexley 54:e117ad10fba6 136 }
hexley 54:e117ad10fba6 137
hexley 54:e117ad10fba6 138 RetCode_t RA8875::TouchPanelInit(uint8_t bTpEnable, uint8_t bTpAutoManual, uint8_t bTpDebounce, uint8_t bTpManualMode, uint8_t bTpAdcClkDiv, uint8_t bTpAdcSampleTime)
hexley 54:e117ad10fba6 139 {
hexley 54:e117ad10fba6 140 // Parameter bounds check
hexley 54:e117ad10fba6 141 if( \
hexley 54:e117ad10fba6 142 !(bTpEnable == TP_ENABLE || bTpEnable == TP_ENABLE) || \
hexley 54:e117ad10fba6 143 !(bTpAutoManual == TP_MODE_AUTO || bTpAutoManual == TP_MODE_MANUAL) || \
hexley 54:e117ad10fba6 144 !(bTpDebounce == TP_DEBOUNCE_OFF || bTpDebounce == TP_DEBOUNCE_ON) || \
hexley 54:e117ad10fba6 145 !(bTpManualMode <= TP_MANUAL_LATCH_Y) || \
hexley 54:e117ad10fba6 146 !(bTpAdcClkDiv <= TP_ADC_CLKDIV_128) || \
hexley 54:e117ad10fba6 147 !(bTpAdcSampleTime <= TP_ADC_SAMPLE_65536_CLKS) \
hexley 54:e117ad10fba6 148 ) return bad_parameter;
hexley 54:e117ad10fba6 149 // Construct the config byte for TPCR0 and write them
hexley 54:e117ad10fba6 150 WriteCommand(TPCR0, bTpEnable | bTpAdcClkDiv | bTpAdcSampleTime); // Note: Wakeup is never enabled
hexley 54:e117ad10fba6 151 // Construct the config byte for TPCR1 and write them
hexley 54:e117ad10fba6 152 WriteCommand(TPCR1, bTpManualMode | bTpDebounce | bTpManualMode); // Note: Always uses internal Vref.
hexley 54:e117ad10fba6 153 // Set up the interrupt flag and enable bits
hexley 54:e117ad10fba6 154 WriteCommand(INTC1, ReadCommand(INTC1) | RA8875_INT_TP); // reg INTC1: Enable Touch Panel Interrupts (D2 = 1)
hexley 54:e117ad10fba6 155 WriteCommand(INTC2, RA8875_INT_TP); // reg INTC2: Clear any TP interrupt flag
hexley 54:e117ad10fba6 156 return noerror;
hexley 54:e117ad10fba6 157 }
hexley 54:e117ad10fba6 158
hexley 54:e117ad10fba6 159 unsigned char RA8875::TouchPanelRead(loc_t *x, loc_t *y)
hexley 54:e117ad10fba6 160 {
hexley 54:e117ad10fba6 161 unsigned char touchready;
hexley 54:e117ad10fba6 162 static int xbuf[TPBUFSIZE], ybuf[TPBUFSIZE], sample = 0;
hexley 54:e117ad10fba6 163 int i, j, temp;
hexley 54:e117ad10fba6 164
hexley 54:e117ad10fba6 165 if( (ReadCommand(INTC2) & RA8875_INT_TP) ) { // Test for TP Interrupt pending in register INTC2
hexley 54:e117ad10fba6 166 // Get the next data samples
hexley 54:e117ad10fba6 167 ybuf[sample] = ReadCommand(TPYH) << 2 | ( (ReadCommand(TPXYL) & 0xC) >> 2 ); // D[9:2] from reg TPYH, D[1:0] from reg TPXYL[3:2]
hexley 54:e117ad10fba6 168 xbuf[sample] = ReadCommand(TPXH) << 2 | ( (ReadCommand(TPXYL) & 0x3) ); // D[9:2] from reg TPXH, D[1:0] from reg TPXYL[1:0]
hexley 54:e117ad10fba6 169 // Check for a complete set
hexley 54:e117ad10fba6 170 if(++sample == TPBUFSIZE) {
hexley 54:e117ad10fba6 171 // Buffers are full, so process them using Finn's method described in Analog Dialogue No. 44, Feb 2010
hexley 54:e117ad10fba6 172 // This requires sorting the samples in order of size, then discarding the top 25% and
hexley 54:e117ad10fba6 173 // bottom 25% as noise spikes. Finally, the middle 50% of the values are averaged to
hexley 54:e117ad10fba6 174 // reduce Gaussian noise.
hexley 54:e117ad10fba6 175
hexley 54:e117ad10fba6 176 // Sort the Y buffer using an Insertion Sort
hexley 54:e117ad10fba6 177 for(i = 1; i <= TPBUFSIZE; i++) {
hexley 54:e117ad10fba6 178 temp = ybuf[i];
hexley 54:e117ad10fba6 179 j = i;
hexley 54:e117ad10fba6 180 while( j && (ybuf[j-1] > temp) ) {
hexley 54:e117ad10fba6 181 ybuf[j] = ybuf[j-1];
hexley 54:e117ad10fba6 182 j = j-1;
hexley 54:e117ad10fba6 183 }
hexley 54:e117ad10fba6 184 ybuf[j] = temp;
hexley 54:e117ad10fba6 185 } // End of Y sort
hexley 54:e117ad10fba6 186 // Sort the X buffer the same way
hexley 54:e117ad10fba6 187 for(i = 1; i <= TPBUFSIZE; i++) {
hexley 54:e117ad10fba6 188 temp = xbuf[i];
hexley 54:e117ad10fba6 189 j = i;
hexley 54:e117ad10fba6 190 while( j && (xbuf[j-1] > temp) ) {
hexley 54:e117ad10fba6 191 xbuf[j] = xbuf[j-1];
hexley 54:e117ad10fba6 192 j = j-1;
hexley 54:e117ad10fba6 193 }
hexley 54:e117ad10fba6 194 xbuf[j] = temp;
hexley 54:e117ad10fba6 195 } // End of X sort
hexley 54:e117ad10fba6 196 // Average the middle half of the Y values and report them
hexley 54:e117ad10fba6 197 j = 0;
hexley 54:e117ad10fba6 198 for(i = (TPBUFSIZE/4) - 1; i < TPBUFSIZE - TPBUFSIZE/4; i++ ) {
hexley 54:e117ad10fba6 199 j += ybuf[i];
hexley 54:e117ad10fba6 200 }
hexley 54:e117ad10fba6 201 *y = j * (float)2/TPBUFSIZE; // This is the average
hexley 54:e117ad10fba6 202 // Average the middle half of the X values and report them
hexley 54:e117ad10fba6 203 j = 0;
hexley 54:e117ad10fba6 204 for(i = (TPBUFSIZE/4) - 1; i < TPBUFSIZE - TPBUFSIZE/4; i++ ) {
hexley 54:e117ad10fba6 205 j += xbuf[i];
hexley 54:e117ad10fba6 206 }
hexley 54:e117ad10fba6 207 *x = j * (float)2/TPBUFSIZE; // This is the average
hexley 54:e117ad10fba6 208 // Tidy up and return
hexley 54:e117ad10fba6 209 touchready = 1;
hexley 54:e117ad10fba6 210 sample = 0; // Ready to start on the next set of data samples
hexley 54:e117ad10fba6 211 }
hexley 54:e117ad10fba6 212 else {
hexley 54:e117ad10fba6 213 // Buffer not yet full, so do not return any results yet
hexley 54:e117ad10fba6 214 touchready = 0;
hexley 54:e117ad10fba6 215 }
hexley 54:e117ad10fba6 216 WriteCommand(INTC2, RA8875_INT_TP); // reg INTC2: Clear that TP interrupt flag
hexley 54:e117ad10fba6 217 } // End of initial if -- data has been read and processed
hexley 54:e117ad10fba6 218 else
hexley 54:e117ad10fba6 219 touchready = 0; // Touch Panel "Int" was not set
hexley 54:e117ad10fba6 220 return touchready;
hexley 54:e117ad10fba6 221 }
hexley 54:e117ad10fba6 222
hexley 54:e117ad10fba6 223 unsigned char RA8875::TouchPanelReadRaw(loc_t *x, loc_t *y)
hexley 54:e117ad10fba6 224 {
hexley 54:e117ad10fba6 225 unsigned char touchready;
hexley 54:e117ad10fba6 226
hexley 54:e117ad10fba6 227 if( (ReadCommand(INTC2) & RA8875_INT_TP) ) { // Test for TP Interrupt pending in register INTC2
hexley 54:e117ad10fba6 228 *y = ReadCommand(TPYH) << 2 | ( (ReadCommand(TPXYL) & 0xC) >> 2 ); // D[9:2] from reg TPYH, D[1:0] from reg TPXYL[3:2]
hexley 54:e117ad10fba6 229 *x = ReadCommand(TPXH) << 2 | ( (ReadCommand(TPXYL) & 0x3) ); // D[9:2] from reg TPXH, D[1:0] from reg TPXYL[1:0]
hexley 54:e117ad10fba6 230 WriteCommand(INTC2, RA8875_INT_TP); // reg INTC2: Clear that TP interrupt flag
hexley 54:e117ad10fba6 231 touchready = 1;
hexley 54:e117ad10fba6 232 }
hexley 54:e117ad10fba6 233 else
hexley 54:e117ad10fba6 234 touchready = 0;
hexley 54:e117ad10fba6 235 return touchready;
hexley 54:e117ad10fba6 236 }
hexley 54:e117ad10fba6 237 // #### end of touch panel code additions
WiredHome 53:86d24b9480b9 238
WiredHome 19:3f82c1161fd2 239 #ifdef PERF_METRICS
WiredHome 19:3f82c1161fd2 240 void RA8875::ClearPerformance()
WiredHome 19:3f82c1161fd2 241 {
WiredHome 19:3f82c1161fd2 242 for (int i=0; i<METRICCOUNT; i++)
WiredHome 19:3f82c1161fd2 243 metrics[i] = 0;
WiredHome 19:3f82c1161fd2 244 }
WiredHome 19:3f82c1161fd2 245
WiredHome 44:207594dece70 246
WiredHome 19:3f82c1161fd2 247 void RA8875::RegisterPerformance(method_e method)
WiredHome 19:3f82c1161fd2 248 {
WiredHome 19:3f82c1161fd2 249 unsigned long elapsed = performance.read_us();
WiredHome 19:3f82c1161fd2 250
WiredHome 19:3f82c1161fd2 251 if (method < METRICCOUNT && elapsed > metrics[method])
WiredHome 19:3f82c1161fd2 252 metrics[method] = elapsed;
WiredHome 19:3f82c1161fd2 253 }
WiredHome 19:3f82c1161fd2 254
WiredHome 44:207594dece70 255
WiredHome 41:2956a0a221e5 256 void RA8875::ReportPerformance(Serial & pc)
WiredHome 19:3f82c1161fd2 257 {
WiredHome 41:2956a0a221e5 258 pc.printf("\r\nPerformance Metrics\r\n");
WiredHome 19:3f82c1161fd2 259 for (int i=0; i<METRICCOUNT; i++) {
WiredHome 41:2956a0a221e5 260 pc.printf("%10d uS %s\r\n", metrics[i], metricsName[i]);
WiredHome 19:3f82c1161fd2 261 }
WiredHome 19:3f82c1161fd2 262 }
WiredHome 19:3f82c1161fd2 263 #endif
WiredHome 19:3f82c1161fd2 264
WiredHome 44:207594dece70 265
WiredHome 38:38d503b4fad6 266 RetCode_t RA8875::WriteCommandW(uint8_t command, uint16_t data)
WiredHome 38:38d503b4fad6 267 {
WiredHome 38:38d503b4fad6 268 #if 1
WiredHome 38:38d503b4fad6 269 WriteCommand(command, data & 0xFF);
WiredHome 38:38d503b4fad6 270 WriteCommand(command+1, data >> 8);
WiredHome 38:38d503b4fad6 271 #else
WiredHome 41:2956a0a221e5 272 // This should be a little faster, but doesn't work...
WiredHome 38:38d503b4fad6 273 INFO("WriteCommandW(%02X, %04X)", command, data);
WiredHome 38:38d503b4fad6 274 select(true);
WiredHome 38:38d503b4fad6 275 spiwrite(0x80);
WiredHome 38:38d503b4fad6 276 spiwrite(command);
WiredHome 41:2956a0a221e5 277 //spiwrite(0x00); // dummy
WiredHome 38:38d503b4fad6 278 spiwrite(data & 0xFF);
WiredHome 38:38d503b4fad6 279 spiwrite(data >> 8);
WiredHome 38:38d503b4fad6 280 select(false);
WiredHome 38:38d503b4fad6 281 #endif
WiredHome 38:38d503b4fad6 282 return noerror;
WiredHome 38:38d503b4fad6 283 }
WiredHome 38:38d503b4fad6 284
WiredHome 44:207594dece70 285
WiredHome 19:3f82c1161fd2 286 RetCode_t RA8875::WriteCommand(unsigned char command, unsigned int data)
WiredHome 19:3f82c1161fd2 287 {
WiredHome 19:3f82c1161fd2 288 select(true);
WiredHome 41:2956a0a221e5 289 spiwrite(0x80); // cmd: write command
WiredHome 19:3f82c1161fd2 290 spiwrite(command);
WiredHome 19:3f82c1161fd2 291 if (data <= 0xFF) { // only if in the valid range
WiredHome 19:3f82c1161fd2 292 spiwrite(0x00);
WiredHome 19:3f82c1161fd2 293 spiwrite(data);
WiredHome 19:3f82c1161fd2 294 }
WiredHome 19:3f82c1161fd2 295 select(false);
WiredHome 19:3f82c1161fd2 296 return noerror;
WiredHome 19:3f82c1161fd2 297 }
WiredHome 19:3f82c1161fd2 298
WiredHome 44:207594dece70 299
WiredHome 38:38d503b4fad6 300 RetCode_t RA8875::WriteDataW(uint16_t data)
WiredHome 38:38d503b4fad6 301 {
WiredHome 38:38d503b4fad6 302 select(true);
WiredHome 41:2956a0a221e5 303 spiwrite(0x00); // cmd: write data
WiredHome 38:38d503b4fad6 304 spiwrite(data & 0xFF);
WiredHome 38:38d503b4fad6 305 spiwrite(data >> 8);
WiredHome 38:38d503b4fad6 306 select(false);
WiredHome 38:38d503b4fad6 307 return noerror;
WiredHome 38:38d503b4fad6 308 }
WiredHome 38:38d503b4fad6 309
WiredHome 44:207594dece70 310
WiredHome 19:3f82c1161fd2 311 RetCode_t RA8875::WriteData(unsigned char data)
WiredHome 19:3f82c1161fd2 312 {
WiredHome 19:3f82c1161fd2 313 select(true);
WiredHome 19:3f82c1161fd2 314 spiwrite(0x00);
WiredHome 19:3f82c1161fd2 315 spiwrite(data);
WiredHome 19:3f82c1161fd2 316 select(false);
WiredHome 19:3f82c1161fd2 317 return noerror;
WiredHome 19:3f82c1161fd2 318 }
WiredHome 19:3f82c1161fd2 319
WiredHome 44:207594dece70 320
WiredHome 19:3f82c1161fd2 321 unsigned char RA8875::ReadCommand(unsigned char command)
WiredHome 19:3f82c1161fd2 322 {
WiredHome 19:3f82c1161fd2 323 WriteCommand(command);
WiredHome 19:3f82c1161fd2 324 return ReadData();
WiredHome 19:3f82c1161fd2 325 }
WiredHome 19:3f82c1161fd2 326
WiredHome 44:207594dece70 327
WiredHome 19:3f82c1161fd2 328 unsigned char RA8875::ReadData(void)
WiredHome 19:3f82c1161fd2 329 {
WiredHome 19:3f82c1161fd2 330 unsigned char data;
WiredHome 19:3f82c1161fd2 331
WiredHome 19:3f82c1161fd2 332 select(true);
WiredHome 19:3f82c1161fd2 333 spiwrite(0x40);
WiredHome 19:3f82c1161fd2 334 data = spiread();
WiredHome 19:3f82c1161fd2 335 select(false);
WiredHome 19:3f82c1161fd2 336 return data;
WiredHome 19:3f82c1161fd2 337 }
WiredHome 19:3f82c1161fd2 338
WiredHome 44:207594dece70 339
WiredHome 41:2956a0a221e5 340 uint16_t RA8875::ReadDataW(void)
WiredHome 41:2956a0a221e5 341 {
WiredHome 41:2956a0a221e5 342 uint16_t data;
WiredHome 41:2956a0a221e5 343
WiredHome 41:2956a0a221e5 344 select(true);
WiredHome 41:2956a0a221e5 345 spiwrite(0x40);
WiredHome 41:2956a0a221e5 346 data = spiread();
WiredHome 41:2956a0a221e5 347 data |= (spiread() << 8);
WiredHome 41:2956a0a221e5 348 select(false);
WiredHome 41:2956a0a221e5 349 return data;
WiredHome 41:2956a0a221e5 350 }
WiredHome 41:2956a0a221e5 351
WiredHome 44:207594dece70 352
WiredHome 19:3f82c1161fd2 353 unsigned char RA8875::ReadStatus(void)
WiredHome 19:3f82c1161fd2 354 {
WiredHome 19:3f82c1161fd2 355 unsigned char data;
WiredHome 19:3f82c1161fd2 356
WiredHome 19:3f82c1161fd2 357 select(true);
WiredHome 19:3f82c1161fd2 358 spiwrite(0xC0);
WiredHome 19:3f82c1161fd2 359 data = spiread();
WiredHome 19:3f82c1161fd2 360 select(false);
WiredHome 19:3f82c1161fd2 361 return data;
WiredHome 19:3f82c1161fd2 362 }
WiredHome 19:3f82c1161fd2 363
WiredHome 44:207594dece70 364
WiredHome 37:f19b7e7449dc 365 dim_t RA8875::fontwidth(void)
WiredHome 19:3f82c1161fd2 366 {
WiredHome 19:3f82c1161fd2 367 if (font == NULL)
WiredHome 55:dfbabef7003e 368 return (((ReadCommand(0x22) >> 2) & 0x3) + 1) * 8;
WiredHome 19:3f82c1161fd2 369 else
WiredHome 29:422616aa04bd 370 return font[1];
WiredHome 19:3f82c1161fd2 371 }
WiredHome 19:3f82c1161fd2 372
WiredHome 44:207594dece70 373
WiredHome 37:f19b7e7449dc 374 dim_t RA8875::fontheight(void)
WiredHome 19:3f82c1161fd2 375 {
WiredHome 19:3f82c1161fd2 376 if (font == NULL)
WiredHome 23:a50ded45dbaf 377 return (((ReadCommand(0x22) >> 0) & 0x3) + 1) * 16;
WiredHome 19:3f82c1161fd2 378 else
WiredHome 29:422616aa04bd 379 return font[2];
WiredHome 19:3f82c1161fd2 380 }
WiredHome 19:3f82c1161fd2 381
WiredHome 44:207594dece70 382
WiredHome 37:f19b7e7449dc 383 RetCode_t RA8875::locate(textloc_t column, textloc_t row)
WiredHome 19:3f82c1161fd2 384 {
WiredHome 32:0e4f2ae512e2 385 return SetTextCursor(column * fontwidth(), row * fontheight());
WiredHome 19:3f82c1161fd2 386 }
WiredHome 19:3f82c1161fd2 387
WiredHome 44:207594dece70 388
WiredHome 19:3f82c1161fd2 389 int RA8875::columns(void)
WiredHome 19:3f82c1161fd2 390 {
WiredHome 19:3f82c1161fd2 391 return width() / fontwidth();
WiredHome 19:3f82c1161fd2 392 }
WiredHome 19:3f82c1161fd2 393
WiredHome 44:207594dece70 394
WiredHome 19:3f82c1161fd2 395 int RA8875::rows(void)
WiredHome 19:3f82c1161fd2 396 {
WiredHome 19:3f82c1161fd2 397 return height() / fontheight();
WiredHome 19:3f82c1161fd2 398 }
WiredHome 19:3f82c1161fd2 399
WiredHome 44:207594dece70 400
WiredHome 38:38d503b4fad6 401 dim_t RA8875::width(void)
WiredHome 19:3f82c1161fd2 402 {
WiredHome 29:422616aa04bd 403 return (ReadCommand(0x14) + 1) * 8;
WiredHome 19:3f82c1161fd2 404 }
WiredHome 19:3f82c1161fd2 405
WiredHome 44:207594dece70 406
WiredHome 38:38d503b4fad6 407 dim_t RA8875::height(void)
WiredHome 19:3f82c1161fd2 408 {
WiredHome 29:422616aa04bd 409 return (ReadCommand(0x19) | (ReadCommand(0x1A) << 8)) + 1;
WiredHome 19:3f82c1161fd2 410 }
WiredHome 19:3f82c1161fd2 411
WiredHome 44:207594dece70 412
WiredHome 43:3becae133285 413 dim_t RA8875::color_bpp(void)
WiredHome 43:3becae133285 414 {
WiredHome 43:3becae133285 415 if ((ReadCommand(0x10) & 0x0C) == 0x04)
WiredHome 43:3becae133285 416 return 16;
WiredHome 43:3becae133285 417 else
WiredHome 43:3becae133285 418 return 8;
WiredHome 43:3becae133285 419 }
WiredHome 43:3becae133285 420
WiredHome 44:207594dece70 421
WiredHome 37:f19b7e7449dc 422 RetCode_t RA8875::SetTextCursor(loc_t x, loc_t y)
WiredHome 19:3f82c1161fd2 423 {
WiredHome 29:422616aa04bd 424 cursor_x = x; cursor_y = y; // for non-internal fonts
WiredHome 38:38d503b4fad6 425 WriteCommandW(0x2A, x);
WiredHome 38:38d503b4fad6 426 WriteCommandW(0x2C, y);
WiredHome 19:3f82c1161fd2 427 return noerror;
WiredHome 19:3f82c1161fd2 428 }
WiredHome 19:3f82c1161fd2 429
WiredHome 44:207594dece70 430
WiredHome 37:f19b7e7449dc 431 loc_t RA8875::GetTextCursor_Y(void)
WiredHome 29:422616aa04bd 432 {
WiredHome 29:422616aa04bd 433 if (font == NULL)
WiredHome 29:422616aa04bd 434 return ReadCommand(0x2C) | (ReadCommand(0x2D) << 8);
WiredHome 29:422616aa04bd 435 else
WiredHome 29:422616aa04bd 436 return cursor_y;
WiredHome 29:422616aa04bd 437 }
WiredHome 29:422616aa04bd 438
WiredHome 44:207594dece70 439
WiredHome 37:f19b7e7449dc 440 loc_t RA8875::GetTextCursor_X(void)
WiredHome 29:422616aa04bd 441 {
WiredHome 29:422616aa04bd 442 if (font == NULL)
WiredHome 29:422616aa04bd 443 return ReadCommand(0x2A) | (ReadCommand(0x2B) << 8);
WiredHome 29:422616aa04bd 444 else
WiredHome 29:422616aa04bd 445 return cursor_x;
WiredHome 29:422616aa04bd 446 }
WiredHome 29:422616aa04bd 447
WiredHome 44:207594dece70 448
WiredHome 24:8ca861acf12d 449 RetCode_t RA8875::SetTextCursorControl(cursor_t cursor, bool blink)
WiredHome 23:a50ded45dbaf 450 {
WiredHome 23:a50ded45dbaf 451 unsigned char mwcr0 = ReadCommand(0x40) & 0x0F; // retain direction, auto-increase
WiredHome 43:3becae133285 452 unsigned char mwcr1 = ReadCommand(0x41) & 0x01; // retain currently selected layer
WiredHome 24:8ca861acf12d 453 unsigned char horz = 0;
WiredHome 24:8ca861acf12d 454 unsigned char vert = 0;
WiredHome 23:a50ded45dbaf 455
WiredHome 24:8ca861acf12d 456 mwcr0 |= 0x80; // text mode
WiredHome 24:8ca861acf12d 457 if (cursor != NOCURSOR)
WiredHome 24:8ca861acf12d 458 mwcr0 |= 0x40; // visible
WiredHome 23:a50ded45dbaf 459 if (blink)
WiredHome 24:8ca861acf12d 460 mwcr0 |= 0x20; // blink
WiredHome 23:a50ded45dbaf 461 WriteCommand(0x40, mwcr0); // configure the cursor
WiredHome 43:3becae133285 462 WriteCommand(0x41, mwcr1); // close the graphics cursor
WiredHome 24:8ca861acf12d 463 WriteCommand(0x44, 0x1f); // The cursor flashing cycle
WiredHome 24:8ca861acf12d 464 switch (cursor) {
WiredHome 24:8ca861acf12d 465 case IBEAM:
WiredHome 24:8ca861acf12d 466 horz = 0x01;
WiredHome 24:8ca861acf12d 467 vert = 0x1F;
WiredHome 24:8ca861acf12d 468 break;
WiredHome 24:8ca861acf12d 469 case UNDER:
WiredHome 24:8ca861acf12d 470 horz = 0x07;
WiredHome 24:8ca861acf12d 471 vert = 0x01;
WiredHome 24:8ca861acf12d 472 break;
WiredHome 24:8ca861acf12d 473 case BLOCK:
WiredHome 24:8ca861acf12d 474 horz = 0x07;
WiredHome 24:8ca861acf12d 475 vert = 0x1F;
WiredHome 24:8ca861acf12d 476 break;
WiredHome 24:8ca861acf12d 477 case NOCURSOR:
WiredHome 24:8ca861acf12d 478 default:
WiredHome 24:8ca861acf12d 479 break;
WiredHome 24:8ca861acf12d 480 }
WiredHome 24:8ca861acf12d 481 WriteCommand(0x4e, horz); // The cursor size horz
WiredHome 24:8ca861acf12d 482 WriteCommand(0x4f, vert); // The cursor size vert
WiredHome 23:a50ded45dbaf 483 return noerror;
WiredHome 23:a50ded45dbaf 484 }
WiredHome 23:a50ded45dbaf 485
WiredHome 44:207594dece70 486
WiredHome 19:3f82c1161fd2 487 RetCode_t RA8875::SetTextFont(RA8875::font_t font)
WiredHome 19:3f82c1161fd2 488 {
WiredHome 19:3f82c1161fd2 489 if (/*font >= RA8875::ISO8859_1 && */ font <= RA8875::ISO8859_4) {
WiredHome 19:3f82c1161fd2 490 WriteCommand(0x21, (unsigned int)(font));
WiredHome 19:3f82c1161fd2 491 return noerror;
WiredHome 19:3f82c1161fd2 492 } else {
WiredHome 19:3f82c1161fd2 493 return bad_parameter;
WiredHome 19:3f82c1161fd2 494 }
WiredHome 19:3f82c1161fd2 495 }
WiredHome 19:3f82c1161fd2 496
WiredHome 44:207594dece70 497
WiredHome 19:3f82c1161fd2 498 RetCode_t RA8875::SetTextFontControl(fill_t fillit,
WiredHome 19:3f82c1161fd2 499 RA8875::font_angle_t angle,
WiredHome 19:3f82c1161fd2 500 RA8875::HorizontalScale hScale,
WiredHome 19:3f82c1161fd2 501 RA8875::VerticalScale vScale,
WiredHome 19:3f82c1161fd2 502 RA8875::alignment_t alignment)
WiredHome 19:3f82c1161fd2 503 {
WiredHome 19:3f82c1161fd2 504 if (hScale >= 1 && hScale <= 4 &&
WiredHome 19:3f82c1161fd2 505 vScale >= 1 && vScale <= 4) {
WiredHome 19:3f82c1161fd2 506 unsigned char x = 0;
WiredHome 19:3f82c1161fd2 507
WiredHome 19:3f82c1161fd2 508 if (alignment == align_full)
WiredHome 19:3f82c1161fd2 509 x |= 0x80;
WiredHome 19:3f82c1161fd2 510 if (fillit == NOFILL)
WiredHome 19:3f82c1161fd2 511 x |= 0x40;
WiredHome 19:3f82c1161fd2 512 if (angle == rotated)
WiredHome 19:3f82c1161fd2 513 x |= 0x10;
WiredHome 19:3f82c1161fd2 514 x |= ((hScale - 1) << 2);
WiredHome 19:3f82c1161fd2 515 x |= ((vScale - 1) << 0);
WiredHome 19:3f82c1161fd2 516 WriteCommand(0x22, x);
WiredHome 19:3f82c1161fd2 517 return noerror;
WiredHome 19:3f82c1161fd2 518 } else {
WiredHome 19:3f82c1161fd2 519 return bad_parameter;
WiredHome 19:3f82c1161fd2 520 }
WiredHome 19:3f82c1161fd2 521 }
WiredHome 19:3f82c1161fd2 522
WiredHome 44:207594dece70 523
WiredHome 19:3f82c1161fd2 524 RetCode_t RA8875::SetTextFontSize(RA8875::HorizontalScale hScale, RA8875::VerticalScale vScale)
WiredHome 19:3f82c1161fd2 525 {
WiredHome 19:3f82c1161fd2 526 unsigned char reg = ReadCommand(0x22);
WiredHome 19:3f82c1161fd2 527
WiredHome 40:04aa280dfa39 528 if (vScale == -1)
WiredHome 40:04aa280dfa39 529 vScale = hScale;
WiredHome 19:3f82c1161fd2 530 if (hScale >= 1 && hScale <= 4 && vScale >= 1 && vScale <= 4) {
WiredHome 19:3f82c1161fd2 531 reg &= 0xF0; // keep the high nibble as is.
WiredHome 19:3f82c1161fd2 532 reg |= ((hScale - 1) << 2);
WiredHome 19:3f82c1161fd2 533 reg |= ((vScale - 1) << 0);
WiredHome 19:3f82c1161fd2 534 WriteCommand(0x22, reg);
WiredHome 19:3f82c1161fd2 535 return noerror;
WiredHome 19:3f82c1161fd2 536 } else {
WiredHome 19:3f82c1161fd2 537 return bad_parameter;
WiredHome 19:3f82c1161fd2 538 }
WiredHome 19:3f82c1161fd2 539 }
WiredHome 19:3f82c1161fd2 540
WiredHome 44:207594dece70 541
WiredHome 19:3f82c1161fd2 542 int RA8875::_putc(int c)
WiredHome 19:3f82c1161fd2 543 {
WiredHome 29:422616aa04bd 544 if (font == NULL) {
WiredHome 29:422616aa04bd 545 return _internal_putc(c);
WiredHome 29:422616aa04bd 546 } else {
WiredHome 29:422616aa04bd 547 return _external_putc(c);
WiredHome 29:422616aa04bd 548 }
WiredHome 29:422616aa04bd 549 }
WiredHome 29:422616aa04bd 550
WiredHome 44:207594dece70 551
WiredHome 29:422616aa04bd 552 int RA8875::_external_putc(int c)
WiredHome 29:422616aa04bd 553 {
WiredHome 19:3f82c1161fd2 554 if (c) {
WiredHome 19:3f82c1161fd2 555 if (c == '\r') {
WiredHome 29:422616aa04bd 556 cursor_x = 0;
WiredHome 29:422616aa04bd 557 } else if (c == '\n') {
WiredHome 29:422616aa04bd 558 cursor_y += font[2];
WiredHome 29:422616aa04bd 559 } else {
WiredHome 29:422616aa04bd 560 int advance = character(cursor_x, cursor_y, c); // advance tells us how many pixels we advanced
WiredHome 37:f19b7e7449dc 561 //INFO("x,y,advance %d,%d,%d", cursor_x, cursor_y, advance);
WiredHome 29:422616aa04bd 562 if (advance) {
WiredHome 29:422616aa04bd 563 cursor_x += advance;
WiredHome 29:422616aa04bd 564 if (cursor_x >= width()) {
WiredHome 29:422616aa04bd 565 cursor_x = 0;
WiredHome 29:422616aa04bd 566 cursor_y += font[2];
WiredHome 29:422616aa04bd 567 if (cursor_y >= height()) {
WiredHome 29:422616aa04bd 568 cursor_y = 0; // @todo Should it scroll?
WiredHome 29:422616aa04bd 569 }
WiredHome 29:422616aa04bd 570 }
WiredHome 29:422616aa04bd 571 }
WiredHome 29:422616aa04bd 572 }
WiredHome 29:422616aa04bd 573 }
WiredHome 29:422616aa04bd 574 return c;
WiredHome 29:422616aa04bd 575 }
WiredHome 29:422616aa04bd 576
WiredHome 44:207594dece70 577
WiredHome 29:422616aa04bd 578 int RA8875::_internal_putc(int c)
WiredHome 29:422616aa04bd 579 {
WiredHome 29:422616aa04bd 580 if (c) {
WiredHome 29:422616aa04bd 581 unsigned char mwcr0;
WiredHome 29:422616aa04bd 582
WiredHome 29:422616aa04bd 583 mwcr0 = ReadCommand(0x40);
WiredHome 29:422616aa04bd 584 if ((mwcr0 & 0x80) == 0x00) {
WiredHome 29:422616aa04bd 585 WriteCommand(0x40, 0x80 | mwcr0); // Put in Text mode if not already
WiredHome 29:422616aa04bd 586 }
WiredHome 29:422616aa04bd 587 if (c == '\r') {
WiredHome 37:f19b7e7449dc 588 loc_t x;
WiredHome 19:3f82c1161fd2 589 x = ReadCommand(0x30) | (ReadCommand(0x31) << 8); // Left edge of active window
WiredHome 38:38d503b4fad6 590 WriteCommandW(0x2A, x);
WiredHome 19:3f82c1161fd2 591 } else if (c == '\n') {
WiredHome 37:f19b7e7449dc 592 loc_t y;
WiredHome 19:3f82c1161fd2 593 y = ReadCommand(0x2C) | (ReadCommand(0x2D) << 8); // current y location
WiredHome 19:3f82c1161fd2 594 y += fontheight();
WiredHome 47:d96a09269f91 595 if (y >= height()) // @TODO after bottom of active window, then scroll window?
WiredHome 19:3f82c1161fd2 596 y = 0;
WiredHome 38:38d503b4fad6 597 WriteCommandW(0x2C, y);
WiredHome 19:3f82c1161fd2 598 } else {
WiredHome 29:422616aa04bd 599 WriteCommand(0x02); // RA8875 Internal Fonts
WiredHome 29:422616aa04bd 600 select(true);
WiredHome 29:422616aa04bd 601 WriteData(c);
WiredHome 29:422616aa04bd 602 while (ReadStatus() & 0x80)
WiredHome 29:422616aa04bd 603 wait_us(POLLWAITuSec); // Chk_Busy();
WiredHome 29:422616aa04bd 604 select(false);
WiredHome 19:3f82c1161fd2 605 }
WiredHome 19:3f82c1161fd2 606 }
WiredHome 19:3f82c1161fd2 607 return c;
WiredHome 19:3f82c1161fd2 608 }
WiredHome 19:3f82c1161fd2 609
WiredHome 44:207594dece70 610
WiredHome 32:0e4f2ae512e2 611 RetCode_t RA8875::_StartGraphicsStream(void)
WiredHome 32:0e4f2ae512e2 612 {
WiredHome 32:0e4f2ae512e2 613 WriteCommand(0x40,0x00); // Graphics write mode
WiredHome 32:0e4f2ae512e2 614 WriteCommand(0x02); // Prepare for streaming data
WiredHome 32:0e4f2ae512e2 615 return noerror;
WiredHome 32:0e4f2ae512e2 616 }
WiredHome 32:0e4f2ae512e2 617
WiredHome 44:207594dece70 618
WiredHome 32:0e4f2ae512e2 619 RetCode_t RA8875::_EndGraphicsStream(void)
WiredHome 32:0e4f2ae512e2 620 {
WiredHome 32:0e4f2ae512e2 621 return noerror;
WiredHome 32:0e4f2ae512e2 622 }
WiredHome 32:0e4f2ae512e2 623
WiredHome 44:207594dece70 624
WiredHome 55:dfbabef7003e 625 RetCode_t RA8875::_putp(color_t pixel)
WiredHome 32:0e4f2ae512e2 626 {
WiredHome 38:38d503b4fad6 627 WriteDataW((pixel>>8) | (pixel<<8));
WiredHome 32:0e4f2ae512e2 628 return noerror;
WiredHome 32:0e4f2ae512e2 629 }
WiredHome 29:422616aa04bd 630
WiredHome 44:207594dece70 631
WiredHome 37:f19b7e7449dc 632 void RA8875::puts(loc_t x, loc_t y, const char * string)
WiredHome 19:3f82c1161fd2 633 {
WiredHome 19:3f82c1161fd2 634 SetTextCursor(x,y);
WiredHome 19:3f82c1161fd2 635 puts(string);
WiredHome 19:3f82c1161fd2 636 }
WiredHome 19:3f82c1161fd2 637
WiredHome 44:207594dece70 638
WiredHome 19:3f82c1161fd2 639 void RA8875::puts(const char * string)
WiredHome 19:3f82c1161fd2 640 {
WiredHome 29:422616aa04bd 641 unsigned char mwcr0 = ReadCommand(0x40);
WiredHome 37:f19b7e7449dc 642
WiredHome 37:f19b7e7449dc 643 if (font == NULL) {
WiredHome 37:f19b7e7449dc 644 if ((mwcr0 & 0x80) == 0x00)
WiredHome 37:f19b7e7449dc 645 WriteCommand(0x40,0x80); // Put in Text mode if not already
WiredHome 37:f19b7e7449dc 646 } else {
WiredHome 37:f19b7e7449dc 647 _StartGraphicsStream();
WiredHome 37:f19b7e7449dc 648 }
WiredHome 19:3f82c1161fd2 649 if (*string != '\0') {
WiredHome 19:3f82c1161fd2 650 #if 1
WiredHome 29:422616aa04bd 651 while (*string) { // @TODO calling individual _putc is slower... optimizations?
WiredHome 19:3f82c1161fd2 652 _putc(*string++);
WiredHome 19:3f82c1161fd2 653 }
WiredHome 19:3f82c1161fd2 654 #else
WiredHome 19:3f82c1161fd2 655 WriteCommand(0x02);
WiredHome 19:3f82c1161fd2 656 select(true);
WiredHome 19:3f82c1161fd2 657 while (*string != '\0') {
WiredHome 19:3f82c1161fd2 658 WriteData(*string);
WiredHome 19:3f82c1161fd2 659 ++string;
WiredHome 19:3f82c1161fd2 660 while (ReadStatus() & 0x80)
WiredHome 19:3f82c1161fd2 661 wait_us(POLLWAITuSec); // Chk_Busy();
WiredHome 19:3f82c1161fd2 662 }
WiredHome 19:3f82c1161fd2 663 select(false);
WiredHome 19:3f82c1161fd2 664 #endif
WiredHome 19:3f82c1161fd2 665 }
WiredHome 37:f19b7e7449dc 666 if (font)
WiredHome 37:f19b7e7449dc 667 _EndGraphicsStream();
WiredHome 19:3f82c1161fd2 668 }
WiredHome 19:3f82c1161fd2 669
WiredHome 44:207594dece70 670
WiredHome 37:f19b7e7449dc 671 RetCode_t RA8875::SetGraphicsCursor(loc_t x, loc_t y)
WiredHome 19:3f82c1161fd2 672 {
WiredHome 38:38d503b4fad6 673 WriteCommandW(0x46, x);
WiredHome 38:38d503b4fad6 674 WriteCommandW(0x48, y);
WiredHome 19:3f82c1161fd2 675 return noerror;
WiredHome 19:3f82c1161fd2 676 }
WiredHome 19:3f82c1161fd2 677
WiredHome 44:207594dece70 678
WiredHome 41:2956a0a221e5 679 RetCode_t RA8875::SetGraphicsCursorRead(loc_t x, loc_t y)
WiredHome 41:2956a0a221e5 680 {
WiredHome 41:2956a0a221e5 681 //WriteCommand(0x40, 0); // Graphics mode
WiredHome 41:2956a0a221e5 682 //WriteCommand(0x45, 0); // left->right, top->bottom
WiredHome 41:2956a0a221e5 683 WriteCommandW(0x4A, x);
WiredHome 41:2956a0a221e5 684 WriteCommandW(0x4C, y);
WiredHome 41:2956a0a221e5 685 return noerror;
WiredHome 41:2956a0a221e5 686 }
WiredHome 41:2956a0a221e5 687
WiredHome 44:207594dece70 688
WiredHome 37:f19b7e7449dc 689 RetCode_t RA8875::window(loc_t x, loc_t y, dim_t width, dim_t height)
WiredHome 19:3f82c1161fd2 690 {
WiredHome 37:f19b7e7449dc 691 GraphicsDisplay::window(x,y, width,height);
WiredHome 38:38d503b4fad6 692 WriteCommandW(0x30, x);
WiredHome 38:38d503b4fad6 693 WriteCommandW(0x32, y);
WiredHome 38:38d503b4fad6 694 WriteCommandW(0x34, (x+width-1));
WiredHome 38:38d503b4fad6 695 WriteCommandW(0x36, (y+height-1));
WiredHome 37:f19b7e7449dc 696 SetGraphicsCursor(x,y);
WiredHome 19:3f82c1161fd2 697 return noerror;
WiredHome 19:3f82c1161fd2 698 }
WiredHome 19:3f82c1161fd2 699
WiredHome 44:207594dece70 700
WiredHome 61:8f3153bf0baa 701 RetCode_t RA8875::cls(uint16_t layers)
WiredHome 19:3f82c1161fd2 702 {
WiredHome 61:8f3153bf0baa 703 RetCode_t ret;
WiredHome 61:8f3153bf0baa 704
WiredHome 19:3f82c1161fd2 705 PERFORMANCE_RESET;
WiredHome 61:8f3153bf0baa 706 if (layers == 0) {
WiredHome 61:8f3153bf0baa 707 ret = clsw(FULLWINDOW);
WiredHome 61:8f3153bf0baa 708 ret = SetTextCursor(0,0);
WiredHome 61:8f3153bf0baa 709 } else if (layers > 3) {
WiredHome 61:8f3153bf0baa 710 ret = bad_parameter;
WiredHome 61:8f3153bf0baa 711 } else {
WiredHome 61:8f3153bf0baa 712 uint16_t prevLayer = GetDrawingLayer();
WiredHome 61:8f3153bf0baa 713 if (layers & 1) {
WiredHome 61:8f3153bf0baa 714 SelectDrawingLayer(0);
WiredHome 61:8f3153bf0baa 715 clsw(FULLWINDOW);
WiredHome 61:8f3153bf0baa 716 }
WiredHome 61:8f3153bf0baa 717 if (layers & 2) {
WiredHome 61:8f3153bf0baa 718 SelectDrawingLayer(1);
WiredHome 61:8f3153bf0baa 719 clsw(FULLWINDOW);
WiredHome 61:8f3153bf0baa 720 }
WiredHome 61:8f3153bf0baa 721 ret = SelectDrawingLayer(prevLayer);
WiredHome 61:8f3153bf0baa 722 }
WiredHome 19:3f82c1161fd2 723 REGISTERPERFORMANCE(PRF_CLS);
WiredHome 61:8f3153bf0baa 724 return ret;
WiredHome 19:3f82c1161fd2 725 }
WiredHome 19:3f82c1161fd2 726
WiredHome 44:207594dece70 727
WiredHome 19:3f82c1161fd2 728 RetCode_t RA8875::clsw(RA8875::Region_t region)
WiredHome 19:3f82c1161fd2 729 {
WiredHome 19:3f82c1161fd2 730 PERFORMANCE_RESET;
WiredHome 19:3f82c1161fd2 731 WriteCommand(0x8E, (region == ACTIVEWINDOW) ? 0xC0 : 0x80);
WiredHome 19:3f82c1161fd2 732 while (ReadCommand(0x8E) & 0x80)
WiredHome 19:3f82c1161fd2 733 wait_us(POLLWAITuSec);
WiredHome 19:3f82c1161fd2 734 REGISTERPERFORMANCE(PRF_CLS);
WiredHome 19:3f82c1161fd2 735 return noerror;
WiredHome 19:3f82c1161fd2 736 }
WiredHome 19:3f82c1161fd2 737
WiredHome 44:207594dece70 738
WiredHome 37:f19b7e7449dc 739 RetCode_t RA8875::pixel(loc_t x, loc_t y, color_t color)
WiredHome 19:3f82c1161fd2 740 {
WiredHome 41:2956a0a221e5 741 #if 1
WiredHome 41:2956a0a221e5 742 return pixelStream(&color, 1, x,y);
WiredHome 41:2956a0a221e5 743 #else
WiredHome 19:3f82c1161fd2 744 foreground(color);
WiredHome 19:3f82c1161fd2 745 return pixel(x,y);
WiredHome 41:2956a0a221e5 746 #endif
WiredHome 19:3f82c1161fd2 747 }
WiredHome 19:3f82c1161fd2 748
WiredHome 44:207594dece70 749
WiredHome 37:f19b7e7449dc 750 RetCode_t RA8875::pixel(loc_t x, loc_t y)
WiredHome 19:3f82c1161fd2 751 {
WiredHome 19:3f82c1161fd2 752 RetCode_t ret;
WiredHome 19:3f82c1161fd2 753
WiredHome 19:3f82c1161fd2 754 PERFORMANCE_RESET;
WiredHome 19:3f82c1161fd2 755 color_t color = GetForeColor();
WiredHome 19:3f82c1161fd2 756 WriteCommand(0x40,0x00); // Graphics write mode
WiredHome 32:0e4f2ae512e2 757 SetGraphicsCursor(x, y);
WiredHome 38:38d503b4fad6 758 WriteCommand(0x02);
WiredHome 38:38d503b4fad6 759 WriteDataW(color);
WiredHome 19:3f82c1161fd2 760 ret = noerror;
WiredHome 41:2956a0a221e5 761 REGISTERPERFORMANCE(PRF_DRAWPIXEL);
WiredHome 19:3f82c1161fd2 762 return ret;
WiredHome 19:3f82c1161fd2 763 }
WiredHome 19:3f82c1161fd2 764
WiredHome 44:207594dece70 765
WiredHome 41:2956a0a221e5 766 RetCode_t RA8875::pixelStream(color_t * p, uint32_t count, loc_t x, loc_t y)
WiredHome 41:2956a0a221e5 767 {
WiredHome 41:2956a0a221e5 768 PERFORMANCE_RESET;
WiredHome 41:2956a0a221e5 769 WriteCommand(0x40,0x00); // Graphics write mode
WiredHome 41:2956a0a221e5 770 SetGraphicsCursor(x, y);
WiredHome 41:2956a0a221e5 771 WriteCommand(0x02);
WiredHome 41:2956a0a221e5 772 select(true);
WiredHome 41:2956a0a221e5 773 spiwrite(0x00); // Cmd: write data
WiredHome 41:2956a0a221e5 774 while (count--) {
WiredHome 41:2956a0a221e5 775 spiwrite(*p >> 8);
WiredHome 41:2956a0a221e5 776 spiwrite(*p & 0xFF);
WiredHome 41:2956a0a221e5 777 p++;
WiredHome 41:2956a0a221e5 778 }
WiredHome 41:2956a0a221e5 779 select(false);
WiredHome 41:2956a0a221e5 780 REGISTERPERFORMANCE(PRF_PIXELSTREAM);
WiredHome 41:2956a0a221e5 781 return(noerror);
WiredHome 41:2956a0a221e5 782 }
WiredHome 41:2956a0a221e5 783
WiredHome 44:207594dece70 784
WiredHome 41:2956a0a221e5 785 color_t RA8875::getPixel(loc_t x, loc_t y)
WiredHome 41:2956a0a221e5 786 {
WiredHome 41:2956a0a221e5 787 color_t pixel;
WiredHome 41:2956a0a221e5 788
WiredHome 41:2956a0a221e5 789 PERFORMANCE_RESET;
WiredHome 41:2956a0a221e5 790 //WriteCommand(0x45,0x00); // read left->right, top->bottom
WiredHome 41:2956a0a221e5 791 WriteCommand(0x40,0x00); // Graphics write mode
WiredHome 41:2956a0a221e5 792 SetGraphicsCursorRead(x, y);
WiredHome 41:2956a0a221e5 793 WriteCommand(0x02);
WiredHome 41:2956a0a221e5 794 select(true);
WiredHome 41:2956a0a221e5 795 spiwrite(0x40); // Cmd: read data
WiredHome 41:2956a0a221e5 796 spiwrite(0x00); // dummy read
WiredHome 41:2956a0a221e5 797 pixel = spiread();
WiredHome 41:2956a0a221e5 798 pixel |= (spiread() << 8);
WiredHome 41:2956a0a221e5 799 select(false);
WiredHome 41:2956a0a221e5 800 REGISTERPERFORMANCE(PRF_READPIXEL);
WiredHome 41:2956a0a221e5 801 return pixel;
WiredHome 41:2956a0a221e5 802 }
WiredHome 41:2956a0a221e5 803
WiredHome 44:207594dece70 804
WiredHome 41:2956a0a221e5 805 RetCode_t RA8875::getPixelStream(color_t * p, uint32_t count, loc_t x, loc_t y)
WiredHome 41:2956a0a221e5 806 {
WiredHome 41:2956a0a221e5 807 color_t pixel;
WiredHome 41:2956a0a221e5 808
WiredHome 41:2956a0a221e5 809 PERFORMANCE_RESET;
WiredHome 41:2956a0a221e5 810 //WriteCommand(0x45,0x00); // read left->right, top->bottom
WiredHome 41:2956a0a221e5 811 WriteCommand(0x40,0x00); // Graphics write mode
WiredHome 41:2956a0a221e5 812 SetGraphicsCursorRead(x, y);
WiredHome 41:2956a0a221e5 813 WriteCommand(0x02);
WiredHome 41:2956a0a221e5 814 select(true);
WiredHome 41:2956a0a221e5 815 spiwrite(0x40); // Cmd: read data
WiredHome 41:2956a0a221e5 816 spiwrite(0x00); // dummy read
WiredHome 41:2956a0a221e5 817 while (count--) {
WiredHome 41:2956a0a221e5 818 pixel = spiread();
WiredHome 41:2956a0a221e5 819 pixel |= (spiread() << 8);
WiredHome 41:2956a0a221e5 820 *p++ = pixel;
WiredHome 41:2956a0a221e5 821 }
WiredHome 41:2956a0a221e5 822 select(false);
WiredHome 41:2956a0a221e5 823 REGISTERPERFORMANCE(PRF_READPIXELSTREAM);
WiredHome 41:2956a0a221e5 824 return noerror;
WiredHome 41:2956a0a221e5 825 }
WiredHome 41:2956a0a221e5 826
WiredHome 44:207594dece70 827
WiredHome 37:f19b7e7449dc 828 RetCode_t RA8875::line(loc_t x1, loc_t y1, loc_t x2, loc_t y2, color_t color)
WiredHome 19:3f82c1161fd2 829 {
WiredHome 19:3f82c1161fd2 830 foreground(color);
WiredHome 19:3f82c1161fd2 831 return line(x1,y1,x2,y2);
WiredHome 19:3f82c1161fd2 832 }
WiredHome 19:3f82c1161fd2 833
WiredHome 44:207594dece70 834
WiredHome 37:f19b7e7449dc 835 RetCode_t RA8875::line(loc_t x1, loc_t y1, loc_t x2, loc_t y2)
WiredHome 19:3f82c1161fd2 836 {
WiredHome 19:3f82c1161fd2 837 PERFORMANCE_RESET;
WiredHome 60:2dfd574f63bd 838 if (x1 == x2 && y1 == y2)
WiredHome 60:2dfd574f63bd 839 pixel(x1, y1);
WiredHome 60:2dfd574f63bd 840 else {
WiredHome 60:2dfd574f63bd 841 WriteCommandW(0x91, x1);
WiredHome 60:2dfd574f63bd 842 WriteCommandW(0x93, y1);
WiredHome 60:2dfd574f63bd 843 WriteCommandW(0x95, x2);
WiredHome 60:2dfd574f63bd 844 WriteCommandW(0x97, y2);
WiredHome 60:2dfd574f63bd 845 unsigned char drawCmd = 0x00; // Line
WiredHome 60:2dfd574f63bd 846 WriteCommand(0x90, drawCmd);
WiredHome 60:2dfd574f63bd 847 WriteCommand(0x90, 0x80 + drawCmd); // Start drawing.
WiredHome 60:2dfd574f63bd 848 while (ReadCommand(0x90) & 0x80) // await completion.
WiredHome 60:2dfd574f63bd 849 wait_us(POLLWAITuSec);
WiredHome 60:2dfd574f63bd 850 }
WiredHome 19:3f82c1161fd2 851 REGISTERPERFORMANCE(PRF_DRAWLINE);
WiredHome 19:3f82c1161fd2 852 return noerror;
WiredHome 19:3f82c1161fd2 853 }
WiredHome 19:3f82c1161fd2 854
WiredHome 44:207594dece70 855
WiredHome 37:f19b7e7449dc 856 RetCode_t RA8875::fillrect(loc_t x1, loc_t y1, loc_t x2, loc_t y2,
WiredHome 19:3f82c1161fd2 857 color_t color, fill_t fillit)
WiredHome 19:3f82c1161fd2 858 {
WiredHome 19:3f82c1161fd2 859 return rect(x1,y1,x2,y2,color,fillit);
WiredHome 19:3f82c1161fd2 860 }
WiredHome 19:3f82c1161fd2 861
WiredHome 44:207594dece70 862
WiredHome 37:f19b7e7449dc 863 RetCode_t RA8875::rect(loc_t x1, loc_t y1, loc_t x2, loc_t y2,
WiredHome 19:3f82c1161fd2 864 color_t color, fill_t fillit)
WiredHome 19:3f82c1161fd2 865 {
WiredHome 19:3f82c1161fd2 866 foreground(color);
WiredHome 19:3f82c1161fd2 867 return rect(x1,y1,x2,y2,fillit);
WiredHome 19:3f82c1161fd2 868 }
WiredHome 19:3f82c1161fd2 869
WiredHome 44:207594dece70 870
WiredHome 37:f19b7e7449dc 871 RetCode_t RA8875::rect(loc_t x1, loc_t y1, loc_t x2, loc_t y2,
WiredHome 19:3f82c1161fd2 872 fill_t fillit)
WiredHome 19:3f82c1161fd2 873 {
WiredHome 19:3f82c1161fd2 874 PERFORMANCE_RESET;
WiredHome 19:3f82c1161fd2 875 if (x1 == x2 && y1 == y2) {
WiredHome 19:3f82c1161fd2 876 pixel(x1, y1);
WiredHome 19:3f82c1161fd2 877 } else if (x1 == x2) {
WiredHome 19:3f82c1161fd2 878 line(x1, y1, x2, y2);
WiredHome 19:3f82c1161fd2 879 } else if (y1 == y2) {
WiredHome 19:3f82c1161fd2 880 line(x1, y1, x2, y2);
WiredHome 19:3f82c1161fd2 881 } else {
WiredHome 38:38d503b4fad6 882 WriteCommandW(0x91, x1);
WiredHome 38:38d503b4fad6 883 WriteCommandW(0x93, y1);
WiredHome 38:38d503b4fad6 884 WriteCommandW(0x95, x2);
WiredHome 38:38d503b4fad6 885 WriteCommandW(0x97, y2);
WiredHome 19:3f82c1161fd2 886 unsigned char drawCmd = 0x10; // Rectangle
WiredHome 19:3f82c1161fd2 887 if (fillit == FILL)
WiredHome 19:3f82c1161fd2 888 drawCmd |= 0x20;
WiredHome 19:3f82c1161fd2 889 WriteCommand(0x90, drawCmd);
WiredHome 19:3f82c1161fd2 890 WriteCommand(0x90, 0x80 + drawCmd); // Start drawing.
WiredHome 19:3f82c1161fd2 891 while (ReadCommand(0x90) & 0x80) // await completion.
WiredHome 19:3f82c1161fd2 892 wait_us(POLLWAITuSec);
WiredHome 19:3f82c1161fd2 893 }
WiredHome 19:3f82c1161fd2 894 REGISTERPERFORMANCE(PRF_DRAWRECTANGLE);
WiredHome 19:3f82c1161fd2 895 return noerror;
WiredHome 19:3f82c1161fd2 896 }
WiredHome 19:3f82c1161fd2 897
WiredHome 44:207594dece70 898
WiredHome 37:f19b7e7449dc 899 RetCode_t RA8875::fillroundrect(loc_t x1, loc_t y1, loc_t x2, loc_t y2,
WiredHome 37:f19b7e7449dc 900 dim_t radius1, dim_t radius2, color_t color, fill_t fillit)
WiredHome 19:3f82c1161fd2 901 {
WiredHome 19:3f82c1161fd2 902 foreground(color);
WiredHome 19:3f82c1161fd2 903 return roundrect(x1,y1,x2,y2,radius1,radius2,fillit);
WiredHome 19:3f82c1161fd2 904 }
WiredHome 19:3f82c1161fd2 905
WiredHome 44:207594dece70 906
WiredHome 37:f19b7e7449dc 907 RetCode_t RA8875::roundrect(loc_t x1, loc_t y1, loc_t x2, loc_t y2,
WiredHome 37:f19b7e7449dc 908 dim_t radius1, dim_t radius2, color_t color, fill_t fillit)
WiredHome 19:3f82c1161fd2 909 {
WiredHome 19:3f82c1161fd2 910 foreground(color);
WiredHome 19:3f82c1161fd2 911 return roundrect(x1,y1,x2,y2,radius1,radius2,fillit);
WiredHome 19:3f82c1161fd2 912 }
WiredHome 19:3f82c1161fd2 913
WiredHome 44:207594dece70 914
WiredHome 37:f19b7e7449dc 915 RetCode_t RA8875::roundrect(loc_t x1, loc_t y1, loc_t x2, loc_t y2,
WiredHome 37:f19b7e7449dc 916 dim_t radius1, dim_t radius2, fill_t fillit)
WiredHome 19:3f82c1161fd2 917 {
WiredHome 19:3f82c1161fd2 918 RetCode_t ret = noerror;
WiredHome 19:3f82c1161fd2 919
WiredHome 19:3f82c1161fd2 920 PERFORMANCE_RESET;
WiredHome 21:3c1efb192927 921 if (x1 > x2 || y1 > y2 || (radius1 > (x2-x1)/2) || (radius2 > (y2-y1)/2) ) {
WiredHome 21:3c1efb192927 922 ret = bad_parameter;
WiredHome 21:3c1efb192927 923 } else if (x1 == x2 && y1 == y2) {
WiredHome 19:3f82c1161fd2 924 pixel(x1, y1);
WiredHome 19:3f82c1161fd2 925 } else if (x1 == x2) {
WiredHome 19:3f82c1161fd2 926 line(x1, y1, x2, y2);
WiredHome 19:3f82c1161fd2 927 } else if (y1 == y2) {
WiredHome 19:3f82c1161fd2 928 line(x1, y1, x2, y2);
WiredHome 19:3f82c1161fd2 929 } else {
WiredHome 38:38d503b4fad6 930 WriteCommandW(0x91, x1);
WiredHome 38:38d503b4fad6 931 WriteCommandW(0x93, y1);
WiredHome 38:38d503b4fad6 932 WriteCommandW(0x95, x2);
WiredHome 38:38d503b4fad6 933 WriteCommandW(0x97, y2);
WiredHome 38:38d503b4fad6 934 WriteCommandW(0xA1, radius1);
WiredHome 38:38d503b4fad6 935 WriteCommandW(0xA3, radius2);
WiredHome 21:3c1efb192927 936 // Should not need this...
WiredHome 38:38d503b4fad6 937 WriteCommandW(0xA5, 0);
WiredHome 38:38d503b4fad6 938 WriteCommandW(0xA7, 0);
WiredHome 19:3f82c1161fd2 939 unsigned char drawCmd = 0x20; // Rounded Rectangle
WiredHome 19:3f82c1161fd2 940 if (fillit == FILL)
WiredHome 19:3f82c1161fd2 941 drawCmd |= 0x40;
WiredHome 19:3f82c1161fd2 942 WriteCommand(0xA0, drawCmd);
WiredHome 19:3f82c1161fd2 943 WriteCommand(0xA0, 0x80 + drawCmd); // Start drawing.
WiredHome 19:3f82c1161fd2 944 while (ReadCommand(0xA0) & 0x80) { // await completion.
WiredHome 19:3f82c1161fd2 945 wait_us(POLLWAITuSec);
WiredHome 21:3c1efb192927 946 }
WiredHome 19:3f82c1161fd2 947 }
WiredHome 19:3f82c1161fd2 948 REGISTERPERFORMANCE(PRF_DRAWROUNDEDRECTANGLE);
WiredHome 19:3f82c1161fd2 949 return ret;
WiredHome 19:3f82c1161fd2 950 }
WiredHome 19:3f82c1161fd2 951
WiredHome 44:207594dece70 952
WiredHome 37:f19b7e7449dc 953 RetCode_t RA8875::triangle(loc_t x1, loc_t y1, loc_t x2, loc_t y2,
WiredHome 37:f19b7e7449dc 954 loc_t x3, loc_t y3, color_t color, fill_t fillit)
WiredHome 19:3f82c1161fd2 955 {
WiredHome 20:6e2e4a8372eb 956 RetCode_t ret;
WiredHome 20:6e2e4a8372eb 957
WiredHome 19:3f82c1161fd2 958 foreground(color);
WiredHome 20:6e2e4a8372eb 959 ret = triangle(x1,y1,x2,y2,x3,y3,fillit);
WiredHome 20:6e2e4a8372eb 960 return ret;
WiredHome 19:3f82c1161fd2 961 }
WiredHome 19:3f82c1161fd2 962
WiredHome 44:207594dece70 963
WiredHome 37:f19b7e7449dc 964 RetCode_t RA8875::filltriangle(loc_t x1, loc_t y1, loc_t x2, loc_t y2,
WiredHome 37:f19b7e7449dc 965 loc_t x3, loc_t y3, color_t color, fill_t fillit)
WiredHome 19:3f82c1161fd2 966 {
WiredHome 20:6e2e4a8372eb 967 RetCode_t ret;
WiredHome 20:6e2e4a8372eb 968
WiredHome 19:3f82c1161fd2 969 foreground(color);
WiredHome 20:6e2e4a8372eb 970 ret = triangle(x1,y1,x2,y2,x3,y3,fillit);
WiredHome 20:6e2e4a8372eb 971 return ret;
WiredHome 19:3f82c1161fd2 972 }
WiredHome 19:3f82c1161fd2 973
WiredHome 44:207594dece70 974
WiredHome 37:f19b7e7449dc 975 RetCode_t RA8875::triangle(loc_t x1, loc_t y1 ,loc_t x2, loc_t y2,
WiredHome 37:f19b7e7449dc 976 loc_t x3, loc_t y3, fill_t fillit)
WiredHome 19:3f82c1161fd2 977 {
WiredHome 19:3f82c1161fd2 978 RetCode_t ret = noerror;
WiredHome 19:3f82c1161fd2 979
WiredHome 19:3f82c1161fd2 980 PERFORMANCE_RESET;
WiredHome 19:3f82c1161fd2 981 if (x1 == x2 && y1 == y2 && x1 == x3 && y1 == y3) {
WiredHome 19:3f82c1161fd2 982 pixel(x1, y1);
WiredHome 19:3f82c1161fd2 983 } else {
WiredHome 38:38d503b4fad6 984 WriteCommandW(0x91, x1);
WiredHome 38:38d503b4fad6 985 WriteCommandW(0x93, y1);
WiredHome 38:38d503b4fad6 986 WriteCommandW(0x95, x2);
WiredHome 38:38d503b4fad6 987 WriteCommandW(0x97, y2);
WiredHome 38:38d503b4fad6 988 WriteCommandW(0xA9, x3);
WiredHome 38:38d503b4fad6 989 WriteCommandW(0xAB, y3);
WiredHome 19:3f82c1161fd2 990 unsigned char drawCmd = 0x01; // Triangle
WiredHome 19:3f82c1161fd2 991 if (fillit == FILL)
WiredHome 19:3f82c1161fd2 992 drawCmd |= 0x20;
WiredHome 19:3f82c1161fd2 993 WriteCommand(0x90, drawCmd);
WiredHome 19:3f82c1161fd2 994 WriteCommand(0x90, 0x80 + drawCmd); // Start drawing.
WiredHome 19:3f82c1161fd2 995 while (ReadCommand(0x90) & 0x80) // await completion.
WiredHome 19:3f82c1161fd2 996 wait_us(POLLWAITuSec);
WiredHome 19:3f82c1161fd2 997 }
WiredHome 19:3f82c1161fd2 998 REGISTERPERFORMANCE(PRF_DRAWTRIANGLE);
WiredHome 19:3f82c1161fd2 999 return ret;
WiredHome 19:3f82c1161fd2 1000 }
WiredHome 19:3f82c1161fd2 1001
WiredHome 37:f19b7e7449dc 1002 RetCode_t RA8875::circle(loc_t x, loc_t y, dim_t radius,
WiredHome 19:3f82c1161fd2 1003 color_t color, fill_t fillit)
WiredHome 19:3f82c1161fd2 1004 {
WiredHome 19:3f82c1161fd2 1005 foreground(color);
WiredHome 19:3f82c1161fd2 1006 return circle(x,y,radius,fillit);
WiredHome 19:3f82c1161fd2 1007 }
WiredHome 19:3f82c1161fd2 1008
WiredHome 44:207594dece70 1009
WiredHome 37:f19b7e7449dc 1010 RetCode_t RA8875::fillcircle(loc_t x, loc_t y, dim_t radius,
WiredHome 19:3f82c1161fd2 1011 color_t color, fill_t fillit)
WiredHome 19:3f82c1161fd2 1012 {
WiredHome 19:3f82c1161fd2 1013 foreground(color);
WiredHome 19:3f82c1161fd2 1014 return circle(x,y,radius,fillit);
WiredHome 19:3f82c1161fd2 1015 }
WiredHome 19:3f82c1161fd2 1016
WiredHome 44:207594dece70 1017
WiredHome 37:f19b7e7449dc 1018 RetCode_t RA8875::circle(loc_t x, loc_t y, dim_t radius, fill_t fillit)
WiredHome 19:3f82c1161fd2 1019 {
WiredHome 19:3f82c1161fd2 1020 RetCode_t ret = noerror;
WiredHome 19:3f82c1161fd2 1021
WiredHome 19:3f82c1161fd2 1022 PERFORMANCE_RESET;
WiredHome 19:3f82c1161fd2 1023 if (radius <= 0) {
WiredHome 19:3f82c1161fd2 1024 ret = bad_parameter;
WiredHome 19:3f82c1161fd2 1025 } else if (radius == 1) {
WiredHome 19:3f82c1161fd2 1026 pixel(x,y);
WiredHome 19:3f82c1161fd2 1027 } else {
WiredHome 38:38d503b4fad6 1028 WriteCommandW(0x99, x);
WiredHome 38:38d503b4fad6 1029 WriteCommandW(0x9B, y);
WiredHome 19:3f82c1161fd2 1030 WriteCommand(0x9d, radius & 0xFF);
WiredHome 19:3f82c1161fd2 1031 unsigned char drawCmd = 0x00; // Circle
WiredHome 19:3f82c1161fd2 1032 if (fillit == FILL)
WiredHome 19:3f82c1161fd2 1033 drawCmd |= 0x20;
WiredHome 19:3f82c1161fd2 1034 WriteCommand(0x90, drawCmd);
WiredHome 19:3f82c1161fd2 1035 WriteCommand(0x90, 0x40 + drawCmd); // Start drawing.
WiredHome 19:3f82c1161fd2 1036 while (ReadCommand(0x90) & 0x40) // await completion.
WiredHome 19:3f82c1161fd2 1037 wait_us(POLLWAITuSec);
WiredHome 19:3f82c1161fd2 1038 }
WiredHome 19:3f82c1161fd2 1039 REGISTERPERFORMANCE(PRF_DRAWCIRCLE);
WiredHome 19:3f82c1161fd2 1040 return ret;
WiredHome 19:3f82c1161fd2 1041 }
WiredHome 19:3f82c1161fd2 1042
WiredHome 44:207594dece70 1043
WiredHome 37:f19b7e7449dc 1044 RetCode_t RA8875::ellipse(loc_t x, loc_t y, dim_t radius1, dim_t radius2, color_t color, fill_t fillit)
WiredHome 19:3f82c1161fd2 1045 {
WiredHome 19:3f82c1161fd2 1046 foreground(color);
WiredHome 25:9556a3a9b7cc 1047 return ellipse(x,y,radius1,radius2,fillit);
WiredHome 19:3f82c1161fd2 1048 }
WiredHome 19:3f82c1161fd2 1049
WiredHome 44:207594dece70 1050
WiredHome 37:f19b7e7449dc 1051 RetCode_t RA8875::fillellipse(loc_t x, loc_t y, dim_t radius1, dim_t radius2, color_t color, fill_t fillit)
WiredHome 25:9556a3a9b7cc 1052 {
WiredHome 25:9556a3a9b7cc 1053 foreground(color);
WiredHome 25:9556a3a9b7cc 1054 return ellipse(x,y,radius1,radius2,fillit);
WiredHome 25:9556a3a9b7cc 1055 }
WiredHome 44:207594dece70 1056
WiredHome 25:9556a3a9b7cc 1057
WiredHome 37:f19b7e7449dc 1058 RetCode_t RA8875::ellipse(loc_t x, loc_t y, dim_t radius1, dim_t radius2, fill_t fillit)
WiredHome 19:3f82c1161fd2 1059 {
WiredHome 19:3f82c1161fd2 1060 RetCode_t ret = noerror;
WiredHome 19:3f82c1161fd2 1061
WiredHome 19:3f82c1161fd2 1062 PERFORMANCE_RESET;
WiredHome 25:9556a3a9b7cc 1063 if (radius1 <= 0 || radius2 <= 0) {
WiredHome 19:3f82c1161fd2 1064 ; // do nothing
WiredHome 25:9556a3a9b7cc 1065 } else if (radius1 == 1 && radius2 == 1) {
WiredHome 19:3f82c1161fd2 1066 pixel(x, y);
WiredHome 19:3f82c1161fd2 1067 } else {
WiredHome 38:38d503b4fad6 1068 WriteCommandW(0xA5, x);
WiredHome 38:38d503b4fad6 1069 WriteCommandW(0xA7, y);
WiredHome 38:38d503b4fad6 1070 WriteCommandW(0xA1, radius1);
WiredHome 38:38d503b4fad6 1071 WriteCommandW(0xA3, radius2);
WiredHome 19:3f82c1161fd2 1072 unsigned char drawCmd = 0x00; // Ellipse
WiredHome 19:3f82c1161fd2 1073 if (fillit == FILL)
WiredHome 19:3f82c1161fd2 1074 drawCmd |= 0x40;
WiredHome 19:3f82c1161fd2 1075 WriteCommand(0xA0, drawCmd);
WiredHome 19:3f82c1161fd2 1076 WriteCommand(0xA0, 0x80 + drawCmd); // Start drawing.
WiredHome 19:3f82c1161fd2 1077 while (ReadCommand(0xA0) & 0x80) // await completion.
WiredHome 19:3f82c1161fd2 1078 wait_us(POLLWAITuSec);
WiredHome 19:3f82c1161fd2 1079 }
WiredHome 19:3f82c1161fd2 1080 REGISTERPERFORMANCE(PRF_DRAWELLIPSE);
WiredHome 19:3f82c1161fd2 1081 return ret;
WiredHome 19:3f82c1161fd2 1082 }
WiredHome 19:3f82c1161fd2 1083
WiredHome 44:207594dece70 1084
WiredHome 19:3f82c1161fd2 1085 RetCode_t RA8875::frequency(unsigned long Hz)
WiredHome 19:3f82c1161fd2 1086 {
WiredHome 19:3f82c1161fd2 1087 spi.frequency(Hz);
WiredHome 19:3f82c1161fd2 1088 // __ ___
WiredHome 19:3f82c1161fd2 1089 // Clock ___A Rising edge latched
WiredHome 19:3f82c1161fd2 1090 // ___ ____
WiredHome 19:3f82c1161fd2 1091 // Data ___X____
WiredHome 19:3f82c1161fd2 1092 spi.format(8, 3); // 8 bits and clock to data phase 0
WiredHome 19:3f82c1161fd2 1093 return noerror;
WiredHome 19:3f82c1161fd2 1094 }
WiredHome 19:3f82c1161fd2 1095
WiredHome 44:207594dece70 1096
WiredHome 19:3f82c1161fd2 1097 RetCode_t RA8875::Power(bool on)
WiredHome 19:3f82c1161fd2 1098 {
WiredHome 19:3f82c1161fd2 1099 WriteCommand(0x01, (on) ? 0x80 : 0x00);
WiredHome 19:3f82c1161fd2 1100 return noerror;
WiredHome 19:3f82c1161fd2 1101 }
WiredHome 19:3f82c1161fd2 1102
WiredHome 44:207594dece70 1103
WiredHome 19:3f82c1161fd2 1104 RetCode_t RA8875::Reset(void)
WiredHome 19:3f82c1161fd2 1105 {
WiredHome 19:3f82c1161fd2 1106 WriteCommand(0x01, 0x01); // Apply Display Off, Reset
WiredHome 19:3f82c1161fd2 1107 wait_ms(2); // no idea if I need to wait, or how long
WiredHome 19:3f82c1161fd2 1108 WriteCommand(0x01, 0x00); // Display off, Remove reset
WiredHome 19:3f82c1161fd2 1109 wait_ms(2); // no idea if I need to wait, or how long
WiredHome 43:3becae133285 1110 init(RA8875_DISPLAY_WIDTH, RA8875_DISPLAY_HEIGHT, RA8875_COLORDEPTH_BPP);
WiredHome 19:3f82c1161fd2 1111 return noerror;
WiredHome 19:3f82c1161fd2 1112 }
WiredHome 19:3f82c1161fd2 1113
WiredHome 19:3f82c1161fd2 1114
WiredHome 19:3f82c1161fd2 1115 RetCode_t RA8875::Backlight_u8(unsigned char brightness)
WiredHome 19:3f82c1161fd2 1116 {
WiredHome 19:3f82c1161fd2 1117 static bool is_enabled = false;
WiredHome 19:3f82c1161fd2 1118 if (brightness == 0) {
WiredHome 19:3f82c1161fd2 1119 WriteCommand(0x8a); // Disable the PWM
WiredHome 19:3f82c1161fd2 1120 WriteData(0x00);
WiredHome 19:3f82c1161fd2 1121 is_enabled = false;
WiredHome 19:3f82c1161fd2 1122 } else if (!is_enabled) {
WiredHome 19:3f82c1161fd2 1123 WriteCommand(0x8a); // Enable the PWM
WiredHome 19:3f82c1161fd2 1124 WriteData(0x80);
WiredHome 19:3f82c1161fd2 1125 WriteCommand(0x8a); // Not sure why this is needed, but following the pattern
WiredHome 19:3f82c1161fd2 1126 WriteData(0x81); // open PWM (SYS_CLK / 2 as best I can tell)
WiredHome 19:3f82c1161fd2 1127 is_enabled = true;
WiredHome 19:3f82c1161fd2 1128 }
WiredHome 19:3f82c1161fd2 1129 WriteCommand(0x8b, brightness); // Brightness parameter 0xff-0x00
WiredHome 19:3f82c1161fd2 1130 return noerror;
WiredHome 19:3f82c1161fd2 1131 }
WiredHome 19:3f82c1161fd2 1132
WiredHome 44:207594dece70 1133
WiredHome 19:3f82c1161fd2 1134 RetCode_t RA8875::Backlight(float brightness)
WiredHome 19:3f82c1161fd2 1135 {
WiredHome 19:3f82c1161fd2 1136 unsigned char b;
WiredHome 19:3f82c1161fd2 1137
WiredHome 29:422616aa04bd 1138 if (brightness >= 1.0)
WiredHome 19:3f82c1161fd2 1139 b = 255;
WiredHome 29:422616aa04bd 1140 else if (brightness <= 0.0)
WiredHome 19:3f82c1161fd2 1141 b = 0;
WiredHome 19:3f82c1161fd2 1142 else
WiredHome 19:3f82c1161fd2 1143 b = (unsigned char)(brightness * 255);
WiredHome 19:3f82c1161fd2 1144 return Backlight_u8(b);
WiredHome 19:3f82c1161fd2 1145 }
WiredHome 19:3f82c1161fd2 1146
WiredHome 44:207594dece70 1147
WiredHome 19:3f82c1161fd2 1148 RetCode_t RA8875::set_font(const unsigned char * _font)
WiredHome 19:3f82c1161fd2 1149 {
WiredHome 37:f19b7e7449dc 1150 if (font && ! _font) {
WiredHome 37:f19b7e7449dc 1151 SetTextCursor(cursor_x, cursor_y); // soft-font cursor -> hw cursor
WiredHome 37:f19b7e7449dc 1152 }
WiredHome 19:3f82c1161fd2 1153 font = _font;
WiredHome 29:422616aa04bd 1154 GraphicsDisplay::set_font(_font);
WiredHome 29:422616aa04bd 1155 return noerror; // trusting them, but it might be good to put some checks in here...
WiredHome 19:3f82c1161fd2 1156 }
WiredHome 19:3f82c1161fd2 1157
WiredHome 44:207594dece70 1158
WiredHome 19:3f82c1161fd2 1159 RetCode_t RA8875::background(color_t color)
WiredHome 19:3f82c1161fd2 1160 {
WiredHome 37:f19b7e7449dc 1161 GraphicsDisplay::background(color);
WiredHome 19:3f82c1161fd2 1162 WriteCommand(0x60, (color>>11)); // BGCR0
WiredHome 19:3f82c1161fd2 1163 WriteCommand(0x61, (unsigned char)(color>>5)); // BGCR0
WiredHome 19:3f82c1161fd2 1164 WriteCommand(0x62, (unsigned char)(color)); // BGCR0
WiredHome 19:3f82c1161fd2 1165 return noerror;
WiredHome 19:3f82c1161fd2 1166 }
WiredHome 19:3f82c1161fd2 1167
WiredHome 44:207594dece70 1168
WiredHome 19:3f82c1161fd2 1169 RetCode_t RA8875::background(unsigned char r, unsigned char g, unsigned char b)
WiredHome 19:3f82c1161fd2 1170 {
WiredHome 37:f19b7e7449dc 1171 background(RGB(r,g,b));
WiredHome 37:f19b7e7449dc 1172 // WriteCommand(0x60, r);
WiredHome 37:f19b7e7449dc 1173 // WriteCommand(0x61, g);
WiredHome 37:f19b7e7449dc 1174 // WriteCommand(0x62, b);
WiredHome 19:3f82c1161fd2 1175 return noerror;
WiredHome 19:3f82c1161fd2 1176 }
WiredHome 19:3f82c1161fd2 1177
WiredHome 44:207594dece70 1178
WiredHome 19:3f82c1161fd2 1179 RetCode_t RA8875::foreground(color_t color)
WiredHome 19:3f82c1161fd2 1180 {
WiredHome 37:f19b7e7449dc 1181 GraphicsDisplay::foreground(color);
WiredHome 19:3f82c1161fd2 1182 WriteCommand(0x63, (unsigned char)(color>>11));
WiredHome 19:3f82c1161fd2 1183 WriteCommand(0x64, (unsigned char)(color>>5));
WiredHome 19:3f82c1161fd2 1184 WriteCommand(0x65, (unsigned char)(color));
WiredHome 19:3f82c1161fd2 1185 return noerror;
WiredHome 19:3f82c1161fd2 1186 }
WiredHome 19:3f82c1161fd2 1187
WiredHome 44:207594dece70 1188
WiredHome 37:f19b7e7449dc 1189 RetCode_t RA8875::foreground(unsigned char r, unsigned char g, unsigned char b)
WiredHome 19:3f82c1161fd2 1190 {
WiredHome 37:f19b7e7449dc 1191 foreground(RGB(r,g,b));
WiredHome 37:f19b7e7449dc 1192 // WriteCommand(0x63, r);
WiredHome 37:f19b7e7449dc 1193 // WriteCommand(0x64, g);
WiredHome 37:f19b7e7449dc 1194 // WriteCommand(0x65, b);
WiredHome 19:3f82c1161fd2 1195 return noerror;
WiredHome 19:3f82c1161fd2 1196 }
WiredHome 19:3f82c1161fd2 1197
WiredHome 44:207594dece70 1198
WiredHome 37:f19b7e7449dc 1199 color_t RA8875::GetForeColor(void)
WiredHome 19:3f82c1161fd2 1200 {
WiredHome 19:3f82c1161fd2 1201 color_t color;
WiredHome 19:3f82c1161fd2 1202
WiredHome 19:3f82c1161fd2 1203 color = (ReadCommand(0x63) & 0x1F) << 11;
WiredHome 19:3f82c1161fd2 1204 color |= (ReadCommand(0x64) & 0x3F) << 5;
WiredHome 19:3f82c1161fd2 1205 color |= (ReadCommand(0x65) & 0x1F);
WiredHome 19:3f82c1161fd2 1206 return color;
WiredHome 19:3f82c1161fd2 1207 }
WiredHome 19:3f82c1161fd2 1208
WiredHome 44:207594dece70 1209
WiredHome 19:3f82c1161fd2 1210 color_t RA8875::DOSColor(int i)
WiredHome 19:3f82c1161fd2 1211 {
WiredHome 19:3f82c1161fd2 1212 const color_t colors[16] =
WiredHome 19:3f82c1161fd2 1213 {
WiredHome 19:3f82c1161fd2 1214 Black, Blue, Green, Cyan,
WiredHome 19:3f82c1161fd2 1215 Red, Magenta, Brown, Gray,
WiredHome 19:3f82c1161fd2 1216 Charcoal, BrightBlue, BrightGreen, BrightCyan,
WiredHome 19:3f82c1161fd2 1217 Orange, Pink, Yellow, White
WiredHome 19:3f82c1161fd2 1218 };
WiredHome 19:3f82c1161fd2 1219 if (i < 16)
WiredHome 19:3f82c1161fd2 1220 return colors[i];
WiredHome 19:3f82c1161fd2 1221 else
WiredHome 19:3f82c1161fd2 1222 return 0;
WiredHome 19:3f82c1161fd2 1223 }
WiredHome 19:3f82c1161fd2 1224
WiredHome 44:207594dece70 1225
WiredHome 19:3f82c1161fd2 1226 const char * RA8875::DOSColorNames(int i)
WiredHome 19:3f82c1161fd2 1227 {
WiredHome 19:3f82c1161fd2 1228 const char * names[16] =
WiredHome 19:3f82c1161fd2 1229 {
WiredHome 19:3f82c1161fd2 1230 "Black", "Blue", "Green", "Cyan",
WiredHome 19:3f82c1161fd2 1231 "Red", "Magenta", "Brown", "Gray",
WiredHome 19:3f82c1161fd2 1232 "Charcoal", "BrightBlue", "BrightGreen", "BrightCyan",
WiredHome 19:3f82c1161fd2 1233 "Orange", "Pink", "Yellow", "White"
WiredHome 19:3f82c1161fd2 1234 };
WiredHome 19:3f82c1161fd2 1235 if (i < 16)
WiredHome 19:3f82c1161fd2 1236 return names[i];
WiredHome 19:3f82c1161fd2 1237 else
WiredHome 19:3f82c1161fd2 1238 return NULL;
WiredHome 19:3f82c1161fd2 1239 }
WiredHome 19:3f82c1161fd2 1240
WiredHome 19:3f82c1161fd2 1241
WiredHome 19:3f82c1161fd2 1242 ///////////////////////////////////////////////////////////////
WiredHome 19:3f82c1161fd2 1243 // Private functions
WiredHome 19:3f82c1161fd2 1244
WiredHome 19:3f82c1161fd2 1245 unsigned char RA8875::spiwrite(unsigned char data)
WiredHome 19:3f82c1161fd2 1246 {
WiredHome 19:3f82c1161fd2 1247 unsigned char retval;
WiredHome 19:3f82c1161fd2 1248
WiredHome 19:3f82c1161fd2 1249 retval = spi.write(data);
WiredHome 19:3f82c1161fd2 1250 return retval;
WiredHome 19:3f82c1161fd2 1251 }
WiredHome 19:3f82c1161fd2 1252
WiredHome 44:207594dece70 1253
WiredHome 19:3f82c1161fd2 1254 unsigned char RA8875::spiread(void)
WiredHome 19:3f82c1161fd2 1255 {
WiredHome 19:3f82c1161fd2 1256 unsigned char retval;
WiredHome 19:3f82c1161fd2 1257 unsigned char data = 0;
WiredHome 19:3f82c1161fd2 1258
WiredHome 19:3f82c1161fd2 1259 retval = spi.write(data);
WiredHome 19:3f82c1161fd2 1260 return retval;
WiredHome 19:3f82c1161fd2 1261 }
WiredHome 19:3f82c1161fd2 1262
WiredHome 44:207594dece70 1263
WiredHome 19:3f82c1161fd2 1264 RetCode_t RA8875::select(bool chipsel)
WiredHome 19:3f82c1161fd2 1265 {
WiredHome 19:3f82c1161fd2 1266 cs = (chipsel == true) ? 0 : 1;
WiredHome 19:3f82c1161fd2 1267 return noerror;
WiredHome 19:3f82c1161fd2 1268 }
WiredHome 19:3f82c1161fd2 1269
WiredHome 44:207594dece70 1270
WiredHome 43:3becae133285 1271 RetCode_t RA8875::init(int width, int height, int color_bpp)
WiredHome 19:3f82c1161fd2 1272 {
WiredHome 19:3f82c1161fd2 1273 Backlight_u8(0);
WiredHome 37:f19b7e7449dc 1274 WriteCommand(0x88, 0x0a); // PLLC1 - Phase Lock Loop registers
WiredHome 19:3f82c1161fd2 1275 wait_ms(1);
WiredHome 19:3f82c1161fd2 1276 WriteCommand(0x89, 0x02);
WiredHome 19:3f82c1161fd2 1277 wait_ms(1);
WiredHome 19:3f82c1161fd2 1278
WiredHome 23:a50ded45dbaf 1279 // System Config Register (SYSR)
WiredHome 43:3becae133285 1280 if (color_bpp == 16) {
WiredHome 43:3becae133285 1281 WriteCommand(0x10, 0x0C); // 16-bpp (65K colors) color depth, 8-bit interface
WiredHome 43:3becae133285 1282 } else { // color_bpp == 8
WiredHome 43:3becae133285 1283 WriteCommand(0x10, 0x00); // 8-bpp (256 colors)
WiredHome 43:3becae133285 1284 }
WiredHome 23:a50ded45dbaf 1285 // Pixel Clock Setting Register (PCSR)
WiredHome 37:f19b7e7449dc 1286 WriteCommand(0x04, 0x82); // PDAT on PCLK falling edge, PCLK = 4 x System Clock
WiredHome 19:3f82c1161fd2 1287 wait_ms(1);
WiredHome 19:3f82c1161fd2 1288
WiredHome 19:3f82c1161fd2 1289 // Horizontal Settings
WiredHome 43:3becae133285 1290 WriteCommand(0x14, width/8 - 1); //HDWR//Horizontal Display Width Setting Bit[6:0]
WiredHome 43:3becae133285 1291 WriteCommand(0x15, 0x02); //HNDFCR//Horizontal Non-Display Period fine tune Bit[3:0]
WiredHome 43:3becae133285 1292 WriteCommand(0x16, 0x03); //HNDR//Horizontal Non-Display Period Bit[4:0]
WiredHome 43:3becae133285 1293 WriteCommand(0x17, 0x01); //HSTR//HSYNC Start Position[4:0]
WiredHome 43:3becae133285 1294 WriteCommand(0x18, 0x03); //HPWR//HSYNC Polarity ,The period width of HSYNC.
WiredHome 19:3f82c1161fd2 1295
WiredHome 19:3f82c1161fd2 1296 // Vertical Settings
WiredHome 43:3becae133285 1297 WriteCommand(0x19, (height-1)&0xFF); //VDHR0 //Vertical Display Height Bit [7:0]
WiredHome 43:3becae133285 1298 WriteCommand(0x1a, (height-1)>>8); //VDHR1 //Vertical Display Height Bit [8]
WiredHome 43:3becae133285 1299 WriteCommand(0x1b, 0x0F); //VNDR0 //Vertical Non-Display Period Bit [7:0]
WiredHome 43:3becae133285 1300 WriteCommand(0x1c, 0x00); //VNDR1 //Vertical Non-Display Period Bit [8]
WiredHome 43:3becae133285 1301 WriteCommand(0x1d, 0x0e); //VSTR0 //VSYNC Start Position[7:0]
WiredHome 43:3becae133285 1302 WriteCommand(0x1e, 0x06); //VSTR1 //VSYNC Start Position[8]
WiredHome 43:3becae133285 1303 WriteCommand(0x1f, 0x01); //VPWR //VSYNC Polarity ,VSYNC Pulse Width[6:0]
WiredHome 19:3f82c1161fd2 1304
WiredHome 43:3becae133285 1305 if (width >= 800 && height >= 480 && color_bpp > 8) {
WiredHome 43:3becae133285 1306 WriteCommand(0x20, 0x00); // DPCR - 1-layer mode when the resolution is too high
WiredHome 43:3becae133285 1307 } else {
WiredHome 43:3becae133285 1308 WriteCommand(0x20, 0x80); // DPCR - 2-layer mode
WiredHome 43:3becae133285 1309 }
WiredHome 43:3becae133285 1310
WiredHome 50:2c4f474a2453 1311 // Set display image to Blue on Black as default
WiredHome 43:3becae133285 1312 window(0,0, width, height); // Initialize to full screen
WiredHome 24:8ca861acf12d 1313 SetTextCursorControl();
WiredHome 28:ed102fc442c4 1314 foreground(Blue);
WiredHome 19:3f82c1161fd2 1315 background(Black);
WiredHome 50:2c4f474a2453 1316 SelectDrawingLayer(1);
WiredHome 50:2c4f474a2453 1317 cls();
WiredHome 50:2c4f474a2453 1318 SelectDrawingLayer(0);
WiredHome 19:3f82c1161fd2 1319 cls();
WiredHome 19:3f82c1161fd2 1320 return noerror;
WiredHome 19:3f82c1161fd2 1321 }
WiredHome 19:3f82c1161fd2 1322
WiredHome 23:a50ded45dbaf 1323 #ifdef TESTENABLE
WiredHome 23:a50ded45dbaf 1324
WiredHome 37:f19b7e7449dc 1325 #include "Arial12x12.h"
WiredHome 37:f19b7e7449dc 1326 #include "Small_6.h"
WiredHome 37:f19b7e7449dc 1327
WiredHome 23:a50ded45dbaf 1328 // ______________ ______________ ______________ _______________
WiredHome 23:a50ded45dbaf 1329 // /_____ _____/ / ___________/ / ___________/ /_____ ______/
WiredHome 23:a50ded45dbaf 1330 // / / / / / / / /
WiredHome 23:a50ded45dbaf 1331 // / / / /___ / /__________ / /
WiredHome 23:a50ded45dbaf 1332 // / / / ____/ /__________ / / /
WiredHome 23:a50ded45dbaf 1333 // / / / / / / / /
WiredHome 23:a50ded45dbaf 1334 // / / / /__________ ___________/ / / /
WiredHome 23:a50ded45dbaf 1335 // /__/ /_____________/ /_____________/ /__/
WiredHome 23:a50ded45dbaf 1336 //
WiredHome 23:a50ded45dbaf 1337 // Everything from here down is test code.
WiredHome 41:2956a0a221e5 1338 bool SuppressSlowStuff = false;
WiredHome 23:a50ded45dbaf 1339
WiredHome 44:207594dece70 1340
WiredHome 49:c5182231d1b9 1341 void TextWrapTest(RA8875 & display, Serial & pc)
WiredHome 49:c5182231d1b9 1342 {
WiredHome 49:c5182231d1b9 1343 if (!SuppressSlowStuff)
WiredHome 49:c5182231d1b9 1344 pc.printf("Text Wrap Test\r\n");
WiredHome 49:c5182231d1b9 1345 display.background(Black);
WiredHome 49:c5182231d1b9 1346 display.foreground(Blue);
WiredHome 49:c5182231d1b9 1347 display.cls();
WiredHome 49:c5182231d1b9 1348 display.Backlight_u8(255);
WiredHome 49:c5182231d1b9 1349 display.puts(0,0, "Text Wrap Test.\r\n");
WiredHome 52:e6039a823420 1350 for (int i=1; i<60; i++) {
WiredHome 52:e6039a823420 1351 display.printf("L%2d\n", i % 17);
WiredHome 49:c5182231d1b9 1352 if (!SuppressSlowStuff)
WiredHome 52:e6039a823420 1353 wait_ms(100);
WiredHome 49:c5182231d1b9 1354 }
WiredHome 49:c5182231d1b9 1355 if (!SuppressSlowStuff)
WiredHome 49:c5182231d1b9 1356 wait_ms(3000);
WiredHome 49:c5182231d1b9 1357 }
WiredHome 49:c5182231d1b9 1358
WiredHome 23:a50ded45dbaf 1359 void TextCursorTest(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 1360 {
WiredHome 37:f19b7e7449dc 1361 const char * iCursor = "The I-Beam cursor should be visible for this text.\r\n";
WiredHome 37:f19b7e7449dc 1362 const char * uCursor = "The Underscore cursor should be visible for this text.\r\n";
WiredHome 37:f19b7e7449dc 1363 const char * bCursor = "The Block cursor should be visible for this text.\r\n";
WiredHome 37:f19b7e7449dc 1364 const char * bbCursor = "The Blinking Block cursor should be visible for this text.\r\n";
WiredHome 23:a50ded45dbaf 1365 const char * p;
WiredHome 41:2956a0a221e5 1366 int delay = 100;
WiredHome 23:a50ded45dbaf 1367
WiredHome 41:2956a0a221e5 1368 if (!SuppressSlowStuff)
WiredHome 41:2956a0a221e5 1369 pc.printf("Text Cursor Test\r\n");
WiredHome 41:2956a0a221e5 1370 else
WiredHome 41:2956a0a221e5 1371 delay = 0;
WiredHome 23:a50ded45dbaf 1372 display.background(Black);
WiredHome 23:a50ded45dbaf 1373 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 1374 display.cls();
WiredHome 25:9556a3a9b7cc 1375 display.Backlight_u8(255);
WiredHome 23:a50ded45dbaf 1376 display.puts(0,0, "Text Cursor Test.");
WiredHome 23:a50ded45dbaf 1377
WiredHome 23:a50ded45dbaf 1378 // visible, non-blinking
WiredHome 24:8ca861acf12d 1379 display.SetTextCursor(0,20);
WiredHome 53:86d24b9480b9 1380 display.SetTextCursorControl(RA8875::IBEAM, false);
WiredHome 24:8ca861acf12d 1381 p = iCursor;
WiredHome 23:a50ded45dbaf 1382 while (*p) {
WiredHome 24:8ca861acf12d 1383 display._putc(*p++);
WiredHome 41:2956a0a221e5 1384 wait_ms(delay);
WiredHome 24:8ca861acf12d 1385 }
WiredHome 24:8ca861acf12d 1386
WiredHome 53:86d24b9480b9 1387 display.SetTextCursorControl(RA8875::UNDER, false);
WiredHome 24:8ca861acf12d 1388 p = uCursor;
WiredHome 24:8ca861acf12d 1389 while (*p) {
WiredHome 24:8ca861acf12d 1390 display._putc(*p++);
WiredHome 41:2956a0a221e5 1391 wait_ms(delay);
WiredHome 23:a50ded45dbaf 1392 }
WiredHome 24:8ca861acf12d 1393
WiredHome 53:86d24b9480b9 1394 display.SetTextCursorControl(RA8875::BLOCK, false);
WiredHome 24:8ca861acf12d 1395 p = bCursor;
WiredHome 24:8ca861acf12d 1396 while (*p) {
WiredHome 24:8ca861acf12d 1397 display._putc(*p++);
WiredHome 41:2956a0a221e5 1398 wait_ms(delay);
WiredHome 24:8ca861acf12d 1399 }
WiredHome 24:8ca861acf12d 1400
WiredHome 53:86d24b9480b9 1401 display.SetTextCursorControl(RA8875::BLOCK, true);
WiredHome 24:8ca861acf12d 1402 p = bbCursor;
WiredHome 24:8ca861acf12d 1403 while (*p) {
WiredHome 24:8ca861acf12d 1404 display._putc(*p++);
WiredHome 41:2956a0a221e5 1405 wait_ms(delay);
WiredHome 24:8ca861acf12d 1406 }
WiredHome 41:2956a0a221e5 1407 wait_ms(delay * 20);
WiredHome 53:86d24b9480b9 1408 display.SetTextCursorControl(RA8875::NOCURSOR, false);
WiredHome 23:a50ded45dbaf 1409 }
WiredHome 23:a50ded45dbaf 1410
WiredHome 44:207594dece70 1411
WiredHome 23:a50ded45dbaf 1412 void BacklightTest(RA8875 & display, Serial & pc, float ramptime)
WiredHome 23:a50ded45dbaf 1413 {
WiredHome 29:422616aa04bd 1414 char buf[60];
WiredHome 41:2956a0a221e5 1415 unsigned int w = (ramptime * 1000)/ 256;
WiredHome 41:2956a0a221e5 1416 int delay = 200;
WiredHome 41:2956a0a221e5 1417
WiredHome 41:2956a0a221e5 1418 if (!SuppressSlowStuff)
WiredHome 41:2956a0a221e5 1419 pc.printf("Backlight Test - ramp over %f sec.\r\n", ramptime);
WiredHome 41:2956a0a221e5 1420 else {
WiredHome 41:2956a0a221e5 1421 delay = 0;
WiredHome 41:2956a0a221e5 1422 w = 0;
WiredHome 41:2956a0a221e5 1423 }
WiredHome 23:a50ded45dbaf 1424 display.Backlight_u8(0);
WiredHome 29:422616aa04bd 1425 display.background(White);
WiredHome 23:a50ded45dbaf 1426 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 1427 display.cls();
WiredHome 41:2956a0a221e5 1428 wait_ms(delay);
WiredHome 23:a50ded45dbaf 1429 display.puts(0,0, "RA8875 Backlight Test - Ramp up.");
WiredHome 38:38d503b4fad6 1430 for (int i=0; i <= 255; i++) {
WiredHome 29:422616aa04bd 1431 sprintf(buf, "%3d, %4d", i, w);
WiredHome 37:f19b7e7449dc 1432 display.puts(100,100,buf);
WiredHome 23:a50ded45dbaf 1433 display.Backlight_u8(i);
WiredHome 29:422616aa04bd 1434 wait_ms(w);
WiredHome 23:a50ded45dbaf 1435 }
WiredHome 23:a50ded45dbaf 1436 }
WiredHome 23:a50ded45dbaf 1437
WiredHome 44:207594dece70 1438
WiredHome 23:a50ded45dbaf 1439 void BacklightTest2(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 1440 {
WiredHome 41:2956a0a221e5 1441 int delay = 20;
WiredHome 41:2956a0a221e5 1442
WiredHome 41:2956a0a221e5 1443 if (!SuppressSlowStuff)
WiredHome 41:2956a0a221e5 1444 pc.printf("Backlight Test 2\r\n");
WiredHome 41:2956a0a221e5 1445 else
WiredHome 41:2956a0a221e5 1446 delay = 0;
WiredHome 41:2956a0a221e5 1447
WiredHome 23:a50ded45dbaf 1448 // Dim it out at the end of the tests.
WiredHome 37:f19b7e7449dc 1449 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 1450 display.puts(0,0, "Ramp Backlight down.");
WiredHome 23:a50ded45dbaf 1451 // Ramp it off
WiredHome 23:a50ded45dbaf 1452 for (int i=255; i != 0; i--) {
WiredHome 23:a50ded45dbaf 1453 display.Backlight_u8(i);
WiredHome 41:2956a0a221e5 1454 wait_ms(delay);
WiredHome 23:a50ded45dbaf 1455 }
WiredHome 23:a50ded45dbaf 1456 display.Backlight_u8(0);
WiredHome 23:a50ded45dbaf 1457 }
WiredHome 23:a50ded45dbaf 1458
WiredHome 44:207594dece70 1459
WiredHome 23:a50ded45dbaf 1460 void ExternalFontTest(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 1461 {
WiredHome 41:2956a0a221e5 1462 if (!SuppressSlowStuff)
WiredHome 41:2956a0a221e5 1463 pc.printf("External Font Test\r\n");
WiredHome 23:a50ded45dbaf 1464 display.background(Black);
WiredHome 23:a50ded45dbaf 1465 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 1466 display.cls();
WiredHome 23:a50ded45dbaf 1467 display.Backlight(1);
WiredHome 37:f19b7e7449dc 1468 display.puts(0,0, "External Font Test.");
WiredHome 37:f19b7e7449dc 1469
WiredHome 37:f19b7e7449dc 1470 display.set_font(Small_6);
WiredHome 37:f19b7e7449dc 1471 display.puts(0,30, "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\r\n");
WiredHome 37:f19b7e7449dc 1472
WiredHome 23:a50ded45dbaf 1473 display.set_font(Arial12x12);
WiredHome 37:f19b7e7449dc 1474 display.puts("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\r\n");
WiredHome 37:f19b7e7449dc 1475 display.set_font(); // restore to internal
WiredHome 37:f19b7e7449dc 1476
WiredHome 37:f19b7e7449dc 1477 display.puts("Normal font again.");
WiredHome 37:f19b7e7449dc 1478 //display.window(0,0, display.width(), display.height());
WiredHome 23:a50ded45dbaf 1479 }
WiredHome 23:a50ded45dbaf 1480
WiredHome 44:207594dece70 1481
WiredHome 23:a50ded45dbaf 1482 void DOSColorTest(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 1483 {
WiredHome 41:2956a0a221e5 1484 if (!SuppressSlowStuff)
WiredHome 41:2956a0a221e5 1485 pc.printf("DOS Color Test\r\n");
WiredHome 23:a50ded45dbaf 1486 display.background(Black);
WiredHome 23:a50ded45dbaf 1487 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 1488 display.cls();
WiredHome 23:a50ded45dbaf 1489 display.puts(0,0, "DOS Colors - Fore");
WiredHome 23:a50ded45dbaf 1490 display.puts(280,0, "Back");
WiredHome 23:a50ded45dbaf 1491 display.background(Gray);
WiredHome 23:a50ded45dbaf 1492 for (int i=0; i<16; i++) {
WiredHome 23:a50ded45dbaf 1493 display.foreground(display.DOSColor(i));
WiredHome 23:a50ded45dbaf 1494 display.puts(160, i*16, display.DOSColorNames(i));
WiredHome 23:a50ded45dbaf 1495 display.background(Black);
WiredHome 23:a50ded45dbaf 1496 }
WiredHome 23:a50ded45dbaf 1497 display.foreground(White);
WiredHome 23:a50ded45dbaf 1498 for (int i=0; i<16; i++) {
WiredHome 23:a50ded45dbaf 1499 display.background(display.DOSColor(i));
WiredHome 23:a50ded45dbaf 1500 display.puts(360, i*16, display.DOSColorNames(i));
WiredHome 23:a50ded45dbaf 1501 display.foreground(White);
WiredHome 23:a50ded45dbaf 1502 }
WiredHome 23:a50ded45dbaf 1503 }
WiredHome 23:a50ded45dbaf 1504
WiredHome 44:207594dece70 1505
WiredHome 23:a50ded45dbaf 1506 void WebColorTest(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 1507 {
WiredHome 41:2956a0a221e5 1508 if (!SuppressSlowStuff)
WiredHome 41:2956a0a221e5 1509 pc.printf("Web Color Test\r\n");
WiredHome 23:a50ded45dbaf 1510 display.background(Black);
WiredHome 23:a50ded45dbaf 1511 display.foreground(Blue);
WiredHome 32:0e4f2ae512e2 1512 display.window(0,0, display.width(), display.height());
WiredHome 23:a50ded45dbaf 1513 display.cls();
WiredHome 59:fb40aad4efd4 1514 display.SetTextFontSize(1,1);
WiredHome 59:fb40aad4efd4 1515 display.puts(200,0, "Web Color Test");
WiredHome 59:fb40aad4efd4 1516 display.SetTextCursor(0,0);
WiredHome 59:fb40aad4efd4 1517 display.puts(" ");
WiredHome 59:fb40aad4efd4 1518 for (int i=0; i<16; i++)
WiredHome 59:fb40aad4efd4 1519 display.printf("%X", i&0xF);
WiredHome 59:fb40aad4efd4 1520 display.puts("\r\n0 ");
WiredHome 23:a50ded45dbaf 1521 for (int i=0; i<sizeof(WebColors)/sizeof(WebColors[0]); i++) {
WiredHome 23:a50ded45dbaf 1522 display.background(WebColors[i]);
WiredHome 23:a50ded45dbaf 1523 display.puts(" ");
WiredHome 59:fb40aad4efd4 1524 if (i % 16 == 15 && i < 255) {
WiredHome 59:fb40aad4efd4 1525 display.printf("\r\n%X ", ((i+1)/16));
WiredHome 59:fb40aad4efd4 1526 }
WiredHome 23:a50ded45dbaf 1527 }
WiredHome 23:a50ded45dbaf 1528 display.SetTextFontSize(1,1);
WiredHome 23:a50ded45dbaf 1529 }
WiredHome 23:a50ded45dbaf 1530
WiredHome 44:207594dece70 1531
WiredHome 37:f19b7e7449dc 1532 void PixelTest(RA8875 & display, Serial & pc)
WiredHome 37:f19b7e7449dc 1533 {
WiredHome 37:f19b7e7449dc 1534 int i, c, x, y;
WiredHome 37:f19b7e7449dc 1535
WiredHome 41:2956a0a221e5 1536 if (!SuppressSlowStuff)
WiredHome 41:2956a0a221e5 1537 pc.printf("Pixel Test\r\n");
WiredHome 37:f19b7e7449dc 1538 display.background(Black);
WiredHome 37:f19b7e7449dc 1539 display.foreground(Blue);
WiredHome 37:f19b7e7449dc 1540 display.cls();
WiredHome 37:f19b7e7449dc 1541 display.puts(0,0, "Pixel Test");
WiredHome 37:f19b7e7449dc 1542 for (i=0; i<1000; i++) {
WiredHome 37:f19b7e7449dc 1543 x = rand() % 480;
WiredHome 37:f19b7e7449dc 1544 y = 16 + rand() % (272-16);
WiredHome 37:f19b7e7449dc 1545 c = rand() % 16;
WiredHome 37:f19b7e7449dc 1546 //pc.printf(" (%d,%d) - %d\r\n", x,y,r1);
WiredHome 37:f19b7e7449dc 1547 display.pixel(x,y, display.DOSColor(c));
WiredHome 37:f19b7e7449dc 1548 }
WiredHome 37:f19b7e7449dc 1549 }
WiredHome 37:f19b7e7449dc 1550
WiredHome 44:207594dece70 1551
WiredHome 23:a50ded45dbaf 1552 void LineTest(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 1553 {
WiredHome 23:a50ded45dbaf 1554 int i, x, y, x2, y2;
WiredHome 23:a50ded45dbaf 1555
WiredHome 41:2956a0a221e5 1556 if (!SuppressSlowStuff)
WiredHome 41:2956a0a221e5 1557 pc.printf("Line Test\r\n");
WiredHome 23:a50ded45dbaf 1558 display.background(Black);
WiredHome 23:a50ded45dbaf 1559 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 1560 display.cls();
WiredHome 23:a50ded45dbaf 1561 display.puts(0,0, "Line Test");
WiredHome 23:a50ded45dbaf 1562 for (i=0; i<16; i++) {
WiredHome 23:a50ded45dbaf 1563 // Lines
WiredHome 23:a50ded45dbaf 1564 x = rand() % 480;
WiredHome 23:a50ded45dbaf 1565 y = rand() % 272;
WiredHome 23:a50ded45dbaf 1566 x2 = rand() % 480;
WiredHome 23:a50ded45dbaf 1567 y2 = rand() % 272;
WiredHome 23:a50ded45dbaf 1568 display.line(x,y, x2,y2, display.DOSColor(i));
WiredHome 23:a50ded45dbaf 1569 }
WiredHome 23:a50ded45dbaf 1570 }
WiredHome 23:a50ded45dbaf 1571
WiredHome 44:207594dece70 1572
WiredHome 23:a50ded45dbaf 1573 void RectangleTest(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 1574 {
WiredHome 23:a50ded45dbaf 1575 int i, x1,y1, x2,y2;
WiredHome 23:a50ded45dbaf 1576
WiredHome 41:2956a0a221e5 1577 if (!SuppressSlowStuff)
WiredHome 41:2956a0a221e5 1578 pc.printf("Rectangle Test\r\n");
WiredHome 23:a50ded45dbaf 1579 display.background(Black);
WiredHome 23:a50ded45dbaf 1580 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 1581 display.cls();
WiredHome 23:a50ded45dbaf 1582 display.puts(0,0, "Rectangle Test");
WiredHome 23:a50ded45dbaf 1583 for (i=0; i<16; i++) {
WiredHome 23:a50ded45dbaf 1584 x1 = rand() % 240;
WiredHome 23:a50ded45dbaf 1585 y1 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1586 x2 = rand() % 240;
WiredHome 23:a50ded45dbaf 1587 y2 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1588 display.rect(x1,y1, x2,y2, display.DOSColor(i));
WiredHome 23:a50ded45dbaf 1589
WiredHome 23:a50ded45dbaf 1590 x1 = 240 + rand() % 240;
WiredHome 23:a50ded45dbaf 1591 y1 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1592 x2 = 240 + rand() % 240;
WiredHome 23:a50ded45dbaf 1593 y2 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1594 display.rect(x1,y1, x2,y2, FILL);
WiredHome 23:a50ded45dbaf 1595 }
WiredHome 23:a50ded45dbaf 1596 }
WiredHome 23:a50ded45dbaf 1597
WiredHome 44:207594dece70 1598
WiredHome 44:207594dece70 1599 void LayerTest(RA8875 & display, Serial & pc)
WiredHome 44:207594dece70 1600 {
WiredHome 44:207594dece70 1601 loc_t i, x1,y1, x2,y2, r1,r2;
WiredHome 44:207594dece70 1602
WiredHome 44:207594dece70 1603 if (!SuppressSlowStuff)
WiredHome 44:207594dece70 1604 pc.printf("Layer Test\r\n");
WiredHome 44:207594dece70 1605
WiredHome 50:2c4f474a2453 1606 display.SelectDrawingLayer(0);
WiredHome 44:207594dece70 1607 display.background(Black);
WiredHome 44:207594dece70 1608 display.foreground(Blue);
WiredHome 44:207594dece70 1609 display.cls();
WiredHome 44:207594dece70 1610 display.puts(0,0, "Layer 0");
WiredHome 44:207594dece70 1611 for (i=0; i<16; i++) {
WiredHome 44:207594dece70 1612 x1 = rand() % 240;
WiredHome 44:207594dece70 1613 y1 = 50 + rand() % 200;
WiredHome 44:207594dece70 1614 x2 = x1 + rand() % 100;
WiredHome 44:207594dece70 1615 y2 = y1 + rand() % 100;
WiredHome 44:207594dece70 1616 r1 = rand() % (x2 - x1)/2;
WiredHome 44:207594dece70 1617 r2 = rand() % (y2 - y1)/2;
WiredHome 44:207594dece70 1618 display.roundrect(x1,y1, x2,y2, r1,r2, display.DOSColor(i));
WiredHome 44:207594dece70 1619 if (!SuppressSlowStuff)
WiredHome 44:207594dece70 1620 wait_ms(20);
WiredHome 44:207594dece70 1621 }
WiredHome 44:207594dece70 1622 if (!SuppressSlowStuff)
WiredHome 44:207594dece70 1623 wait_ms(1000);
WiredHome 44:207594dece70 1624
WiredHome 50:2c4f474a2453 1625 display.SelectDrawingLayer(1);
WiredHome 44:207594dece70 1626 display.background(Black);
WiredHome 44:207594dece70 1627 display.foreground(Yellow);
WiredHome 44:207594dece70 1628 display.cls();
WiredHome 44:207594dece70 1629 display.puts(240,0, "Layer 1");
WiredHome 44:207594dece70 1630 for (i=0; i<16; i++) {
WiredHome 44:207594dece70 1631 x1 = 300 + rand() % 100;
WiredHome 44:207594dece70 1632 y1 = 70 + rand() % 200;
WiredHome 44:207594dece70 1633 r1 = rand() % min(y1 - 20, 100);
WiredHome 44:207594dece70 1634 display.circle(x1,y1,r1, display.DOSColor(i));
WiredHome 44:207594dece70 1635 if (!SuppressSlowStuff)
WiredHome 44:207594dece70 1636 wait_ms(20);
WiredHome 44:207594dece70 1637 }
WiredHome 56:7a85d226ad0d 1638 display.SetLayerMode(RA8875::ShowLayer1); // Show it after the build-up
WiredHome 44:207594dece70 1639 if (!SuppressSlowStuff)
WiredHome 44:207594dece70 1640 wait_ms(2000);
WiredHome 44:207594dece70 1641
WiredHome 50:2c4f474a2453 1642 display.SelectDrawingLayer(0);
WiredHome 56:7a85d226ad0d 1643 display.SetLayerMode(RA8875::ShowLayer0); // Show Layer 0 again
WiredHome 44:207594dece70 1644 if (!SuppressSlowStuff)
WiredHome 44:207594dece70 1645 wait_ms(1000);
WiredHome 53:86d24b9480b9 1646 display.SetLayerMode(RA8875::TransparentMode); // Transparent mode
WiredHome 44:207594dece70 1647 if (!SuppressSlowStuff)
WiredHome 44:207594dece70 1648 wait_ms(1000);
WiredHome 44:207594dece70 1649 for (i=0; i<=8; i++) {
WiredHome 44:207594dece70 1650 display.SetLayerTransparency(i, 8-i);
WiredHome 44:207594dece70 1651 if (!SuppressSlowStuff)
WiredHome 44:207594dece70 1652 wait_ms(200);
WiredHome 44:207594dece70 1653 }
WiredHome 44:207594dece70 1654
WiredHome 44:207594dece70 1655 // Restore before we exit
WiredHome 44:207594dece70 1656 display.SetLayerTransparency(0, 0);
WiredHome 56:7a85d226ad0d 1657 display.SetLayerMode(RA8875::ShowLayer0); // Restore to layer 0
WiredHome 44:207594dece70 1658 }
WiredHome 44:207594dece70 1659
WiredHome 44:207594dece70 1660
WiredHome 23:a50ded45dbaf 1661 void RoundRectTest(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 1662 {
WiredHome 37:f19b7e7449dc 1663 loc_t i, x1,y1, x2,y2, r1,r2;
WiredHome 23:a50ded45dbaf 1664
WiredHome 41:2956a0a221e5 1665 if (!SuppressSlowStuff)
WiredHome 41:2956a0a221e5 1666 pc.printf("Round Rectangle Test\r\n");
WiredHome 23:a50ded45dbaf 1667 display.background(Black);
WiredHome 23:a50ded45dbaf 1668 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 1669 display.cls();
WiredHome 23:a50ded45dbaf 1670 display.puts(0,0, "Rounded Rectangle Test");
WiredHome 23:a50ded45dbaf 1671
WiredHome 23:a50ded45dbaf 1672 for (i=0; i<16; i++) {
WiredHome 23:a50ded45dbaf 1673 x1 = rand() % 240;
WiredHome 23:a50ded45dbaf 1674 y1 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1675 x2 = x1 + rand() % 100;
WiredHome 23:a50ded45dbaf 1676 y2 = y1 + rand() % 100;
WiredHome 23:a50ded45dbaf 1677 r1 = rand() % (x2 - x1)/2;
WiredHome 23:a50ded45dbaf 1678 r2 = rand() % (y2 - y1)/2;
WiredHome 23:a50ded45dbaf 1679 display.roundrect(x1,y1, x2,y2, 5,8, display.DOSColor(i));
WiredHome 23:a50ded45dbaf 1680
WiredHome 23:a50ded45dbaf 1681 x1 = 240 + rand() % 240;
WiredHome 23:a50ded45dbaf 1682 y1 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1683 x2 = x1 + rand() % 100;
WiredHome 23:a50ded45dbaf 1684 y2 = y1 + rand() % 100;
WiredHome 23:a50ded45dbaf 1685 r1 = rand() % (x2 - x1)/2;
WiredHome 23:a50ded45dbaf 1686 r2 = rand() % (y2 - y1)/2;
WiredHome 23:a50ded45dbaf 1687 display.roundrect(x1,y1, x2,y2, r1,r2, FILL);
WiredHome 23:a50ded45dbaf 1688 }
WiredHome 23:a50ded45dbaf 1689 }
WiredHome 23:a50ded45dbaf 1690
WiredHome 44:207594dece70 1691
WiredHome 23:a50ded45dbaf 1692 void TriangleTest(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 1693 {
WiredHome 23:a50ded45dbaf 1694 int i, x1, y1, x2, y2, x3, y3;
WiredHome 23:a50ded45dbaf 1695
WiredHome 41:2956a0a221e5 1696 if (!SuppressSlowStuff)
WiredHome 41:2956a0a221e5 1697 pc.printf("Triangle Test\r\n");
WiredHome 23:a50ded45dbaf 1698 display.background(Black);
WiredHome 23:a50ded45dbaf 1699 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 1700 display.cls();
WiredHome 23:a50ded45dbaf 1701 display.puts(0,0, "Triangle Test");
WiredHome 23:a50ded45dbaf 1702
WiredHome 23:a50ded45dbaf 1703 x1 = 150;
WiredHome 23:a50ded45dbaf 1704 y1 = 2;
WiredHome 23:a50ded45dbaf 1705 x2 = 190;
WiredHome 23:a50ded45dbaf 1706 y2 = 7;
WiredHome 23:a50ded45dbaf 1707 x3 = 170;
WiredHome 23:a50ded45dbaf 1708 y3 = 16;
WiredHome 23:a50ded45dbaf 1709 display.triangle(x1,y1, x2,y2, x3,y3);
WiredHome 23:a50ded45dbaf 1710
WiredHome 23:a50ded45dbaf 1711 x1 = 200;
WiredHome 23:a50ded45dbaf 1712 y1 = 2;
WiredHome 23:a50ded45dbaf 1713 x2 = 240;
WiredHome 23:a50ded45dbaf 1714 y2 = 7;
WiredHome 23:a50ded45dbaf 1715 x3 = 220;
WiredHome 23:a50ded45dbaf 1716 y3 = 16;
WiredHome 23:a50ded45dbaf 1717 display.filltriangle(x1,y1, x2,y2, x3,y3, BrightRed);
WiredHome 23:a50ded45dbaf 1718
WiredHome 23:a50ded45dbaf 1719 x1 = 300;
WiredHome 23:a50ded45dbaf 1720 y1 = 2;
WiredHome 23:a50ded45dbaf 1721 x2 = 340;
WiredHome 23:a50ded45dbaf 1722 y2 = 7;
WiredHome 23:a50ded45dbaf 1723 x3 = 320;
WiredHome 23:a50ded45dbaf 1724 y3 = 16;
WiredHome 23:a50ded45dbaf 1725 display.triangle(x1,y1, x2,y2, x3,y3, NOFILL);
WiredHome 23:a50ded45dbaf 1726
WiredHome 23:a50ded45dbaf 1727 x1 = 400;
WiredHome 23:a50ded45dbaf 1728 y1 = 2;
WiredHome 23:a50ded45dbaf 1729 x2 = 440;
WiredHome 23:a50ded45dbaf 1730 y2 = 7;
WiredHome 23:a50ded45dbaf 1731 x3 = 420;
WiredHome 23:a50ded45dbaf 1732 y3 = 16;
WiredHome 23:a50ded45dbaf 1733 display.triangle(x1,y1, x2,y2, x3,y3, Blue);
WiredHome 23:a50ded45dbaf 1734
WiredHome 23:a50ded45dbaf 1735 for (i=0; i<16; i++) {
WiredHome 23:a50ded45dbaf 1736 x1 = rand() % 240;
WiredHome 23:a50ded45dbaf 1737 y1 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1738 x2 = rand() % 240;
WiredHome 23:a50ded45dbaf 1739 y2 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1740 x3 = rand() % 240;
WiredHome 23:a50ded45dbaf 1741 y3 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1742 display.triangle(x1,y1, x2,y2, x3,y3, display.DOSColor(i));
WiredHome 23:a50ded45dbaf 1743 x1 = 240 + rand() % 240;
WiredHome 23:a50ded45dbaf 1744 y1 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1745 x2 = 240 + rand() % 240;
WiredHome 23:a50ded45dbaf 1746 y2 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1747 x3 = 240 + rand() % 240;
WiredHome 23:a50ded45dbaf 1748 y3 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1749 display.triangle(x1,y1, x2,y2, x3,y3, FILL);
WiredHome 23:a50ded45dbaf 1750 }
WiredHome 23:a50ded45dbaf 1751 }
WiredHome 23:a50ded45dbaf 1752
WiredHome 44:207594dece70 1753
WiredHome 23:a50ded45dbaf 1754 void CircleTest(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 1755 {
WiredHome 23:a50ded45dbaf 1756 int i, x, y, r1;
WiredHome 23:a50ded45dbaf 1757
WiredHome 41:2956a0a221e5 1758 if (!SuppressSlowStuff)
WiredHome 41:2956a0a221e5 1759 pc.printf("Circle Test\r\n");
WiredHome 23:a50ded45dbaf 1760 display.background(Black);
WiredHome 23:a50ded45dbaf 1761 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 1762 display.cls();
WiredHome 23:a50ded45dbaf 1763 display.puts(0,0, "Circle Test");
WiredHome 23:a50ded45dbaf 1764 for (i=0; i<16; i++) {
WiredHome 23:a50ded45dbaf 1765 x = 100 + rand() % 100;
WiredHome 23:a50ded45dbaf 1766 y = 70 + rand() % 200;
WiredHome 23:a50ded45dbaf 1767 r1 = rand() % min(y - 20, 100);
WiredHome 23:a50ded45dbaf 1768 //pc.printf(" (%d,%d) - %d\r\n", x,y,r1);
WiredHome 23:a50ded45dbaf 1769 display.circle(x,y,r1, display.DOSColor(i));
WiredHome 23:a50ded45dbaf 1770
WiredHome 23:a50ded45dbaf 1771 x = 300 + rand() % 100;
WiredHome 23:a50ded45dbaf 1772 y = 70 + rand() % 200;
WiredHome 23:a50ded45dbaf 1773 r1 = rand() % min(y - 20, 100);
WiredHome 23:a50ded45dbaf 1774 //pc.printf(" (%d,%d) - %d FILL\r\n", x,y,r1);
WiredHome 23:a50ded45dbaf 1775 display.circle(x,y,r1, display.DOSColor(i), FILL);
WiredHome 23:a50ded45dbaf 1776 }
WiredHome 23:a50ded45dbaf 1777 }
WiredHome 23:a50ded45dbaf 1778
WiredHome 44:207594dece70 1779
WiredHome 23:a50ded45dbaf 1780 void EllipseTest(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 1781 {
WiredHome 23:a50ded45dbaf 1782 int i,x,y,r1,r2;
WiredHome 23:a50ded45dbaf 1783
WiredHome 41:2956a0a221e5 1784 if (!SuppressSlowStuff)
WiredHome 41:2956a0a221e5 1785 pc.printf("Ellipse Test\r\n");
WiredHome 23:a50ded45dbaf 1786 display.background(Black);
WiredHome 23:a50ded45dbaf 1787 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 1788 display.cls();
WiredHome 23:a50ded45dbaf 1789 display.puts(0,0, "Ellipse Test");
WiredHome 23:a50ded45dbaf 1790 for (i=0; i<16; i++) {
WiredHome 23:a50ded45dbaf 1791 x = 100 + rand() % 100;
WiredHome 23:a50ded45dbaf 1792 y = 70 + rand() % 200;
WiredHome 23:a50ded45dbaf 1793 r1 = rand() % min(y - 20, 100);
WiredHome 23:a50ded45dbaf 1794 r2 = rand() % min(y - 20, 100);
WiredHome 23:a50ded45dbaf 1795 display.ellipse(x,y,r1,r2, display.DOSColor(i));
WiredHome 23:a50ded45dbaf 1796
WiredHome 23:a50ded45dbaf 1797 x = 300 + rand() % 100;
WiredHome 23:a50ded45dbaf 1798 y = 70 + rand() % 200;
WiredHome 23:a50ded45dbaf 1799 r1 = rand() % min(y - 20, 100);
WiredHome 23:a50ded45dbaf 1800 r2 = rand() % min(y - 20, 100);
WiredHome 23:a50ded45dbaf 1801 display.ellipse(x,y,r1,r2, FILL);
WiredHome 23:a50ded45dbaf 1802 }
WiredHome 23:a50ded45dbaf 1803 }
WiredHome 23:a50ded45dbaf 1804
WiredHome 44:207594dece70 1805
WiredHome 37:f19b7e7449dc 1806 void TestGraphicsBitmap(RA8875 & display, Serial & pc)
WiredHome 37:f19b7e7449dc 1807 {
WiredHome 37:f19b7e7449dc 1808 LocalFileSystem local("local");
WiredHome 41:2956a0a221e5 1809 if (!SuppressSlowStuff)
WiredHome 41:2956a0a221e5 1810 pc.printf("Bitmap File Load\r\n");
WiredHome 37:f19b7e7449dc 1811 display.background(Black);
WiredHome 37:f19b7e7449dc 1812 display.foreground(Blue);
WiredHome 37:f19b7e7449dc 1813 display.cls();
WiredHome 37:f19b7e7449dc 1814 display.puts(0,0, "Graphics Test, loading /local/TestPat.bmp");
WiredHome 37:f19b7e7449dc 1815 wait(3);
WiredHome 37:f19b7e7449dc 1816
WiredHome 37:f19b7e7449dc 1817 int r = display.RenderBitmapFile(0,0, "/local/TestPat.bmp");
WiredHome 59:fb40aad4efd4 1818 if (!SuppressSlowStuff)
WiredHome 59:fb40aad4efd4 1819 pc.printf(" returned %d\r\n", r);
WiredHome 37:f19b7e7449dc 1820 }
WiredHome 37:f19b7e7449dc 1821
WiredHome 44:207594dece70 1822
WiredHome 41:2956a0a221e5 1823 void SpeedTest(RA8875 & display, Serial & pc)
WiredHome 41:2956a0a221e5 1824 {
WiredHome 41:2956a0a221e5 1825 Timer t;
WiredHome 41:2956a0a221e5 1826 SuppressSlowStuff = true;
WiredHome 41:2956a0a221e5 1827 pc.printf("\r\nSpeedTest disables delays, runs tests, reports overall time.\r\n");
WiredHome 41:2956a0a221e5 1828 t.start();
WiredHome 41:2956a0a221e5 1829 // do stuff fast
WiredHome 41:2956a0a221e5 1830 TextCursorTest(display, pc);
WiredHome 49:c5182231d1b9 1831 TextWrapTest(display, pc);
WiredHome 41:2956a0a221e5 1832 BacklightTest(display, pc, 0);
WiredHome 41:2956a0a221e5 1833 BacklightTest2(display, pc);
WiredHome 41:2956a0a221e5 1834 ExternalFontTest(display, pc);
WiredHome 41:2956a0a221e5 1835 DOSColorTest(display, pc);
WiredHome 41:2956a0a221e5 1836 WebColorTest(display, pc);
WiredHome 41:2956a0a221e5 1837 PixelTest(display, pc);
WiredHome 41:2956a0a221e5 1838 LineTest(display, pc);
WiredHome 41:2956a0a221e5 1839 RectangleTest(display, pc);
WiredHome 41:2956a0a221e5 1840 RoundRectTest(display, pc);
WiredHome 41:2956a0a221e5 1841 TriangleTest(display, pc);
WiredHome 41:2956a0a221e5 1842 CircleTest(display, pc);
WiredHome 41:2956a0a221e5 1843 EllipseTest(display, pc);
WiredHome 44:207594dece70 1844 LayerTest(display, pc);
WiredHome 41:2956a0a221e5 1845 //TestGraphicsBitmap(display, pc);
WiredHome 41:2956a0a221e5 1846 pc.printf("SpeedTest completed in %d msec\r\n", t.read_ms());
WiredHome 44:207594dece70 1847 #ifdef PERF_METRICS
WiredHome 41:2956a0a221e5 1848 display.ReportPerformance(pc);
WiredHome 41:2956a0a221e5 1849 #endif
WiredHome 41:2956a0a221e5 1850 SuppressSlowStuff = false;
WiredHome 41:2956a0a221e5 1851 }
WiredHome 41:2956a0a221e5 1852
WiredHome 44:207594dece70 1853
WiredHome 41:2956a0a221e5 1854 void PrintScreen(RA8875 & display, Serial & pc)
WiredHome 41:2956a0a221e5 1855 {
WiredHome 41:2956a0a221e5 1856 LocalFileSystem local("local");
WiredHome 41:2956a0a221e5 1857 if (!SuppressSlowStuff)
WiredHome 41:2956a0a221e5 1858 pc.printf("PrintScreen\r\n");
WiredHome 41:2956a0a221e5 1859 display.PrintScreen( 0,0, 480,272, "/local/Capture.bmp");
WiredHome 41:2956a0a221e5 1860 }
WiredHome 41:2956a0a221e5 1861
WiredHome 44:207594dece70 1862
WiredHome 23:a50ded45dbaf 1863 void RunTestSet(RA8875 & lcd, Serial & pc)
WiredHome 23:a50ded45dbaf 1864 {
WiredHome 23:a50ded45dbaf 1865 int q = 0;
WiredHome 23:a50ded45dbaf 1866 int automode = 0;
WiredHome 49:c5182231d1b9 1867 const unsigned char modelist[] = "BDWtGLlFROTPCEbw"; // auto-test in this order.
WiredHome 23:a50ded45dbaf 1868
WiredHome 23:a50ded45dbaf 1869 while(1) {
WiredHome 23:a50ded45dbaf 1870 pc.printf("\r\n"
WiredHome 41:2956a0a221e5 1871 "B - Backlight up b - backlight dim\r\n"
WiredHome 41:2956a0a221e5 1872 "D - DOS Colors W - Web Colors\r\n"
WiredHome 41:2956a0a221e5 1873 "t - text cursor G - Graphics Bitmap\r\n"
WiredHome 41:2956a0a221e5 1874 "L - Lines F - external Font\r\n"
WiredHome 41:2956a0a221e5 1875 "R - Rectangles O - rOund rectangles\r\n"
WiredHome 41:2956a0a221e5 1876 "T - Triangles P - Pixels \r\n"
WiredHome 41:2956a0a221e5 1877 "C - Circles E - Ellipses\r\n"
WiredHome 41:2956a0a221e5 1878 "A - Auto Test mode S - Speed Test\r\n"
WiredHome 41:2956a0a221e5 1879 "p - print screen r - reset \r\n"
WiredHome 49:c5182231d1b9 1880 "l - layer test w - wrapping text \r\n"
WiredHome 58:26658a56112a 1881 #ifdef PERF_METRICS
WiredHome 41:2956a0a221e5 1882 "0 - clear performance 1 - report performance\r\n"
WiredHome 41:2956a0a221e5 1883 #endif
WiredHome 23:a50ded45dbaf 1884 "> ");
WiredHome 23:a50ded45dbaf 1885 if (automode == -1 || pc.readable()) {
WiredHome 23:a50ded45dbaf 1886 automode = -1;
WiredHome 37:f19b7e7449dc 1887 q = pc.getc();
WiredHome 37:f19b7e7449dc 1888 while (pc.readable())
WiredHome 37:f19b7e7449dc 1889 pc.getc();
WiredHome 23:a50ded45dbaf 1890 } else if (automode >= 0) {
WiredHome 23:a50ded45dbaf 1891 q = modelist[automode];
WiredHome 23:a50ded45dbaf 1892 }
WiredHome 23:a50ded45dbaf 1893 switch(q) {
WiredHome 58:26658a56112a 1894 #ifdef PERF_METRICS
WiredHome 41:2956a0a221e5 1895 case '0':
WiredHome 41:2956a0a221e5 1896 lcd.ClearPerformance();
WiredHome 41:2956a0a221e5 1897 break;
WiredHome 41:2956a0a221e5 1898 case '1':
WiredHome 41:2956a0a221e5 1899 lcd.ReportPerformance(pc);
WiredHome 41:2956a0a221e5 1900 break;
WiredHome 41:2956a0a221e5 1901 #endif
WiredHome 23:a50ded45dbaf 1902 case 'A':
WiredHome 23:a50ded45dbaf 1903 automode = 0;
WiredHome 23:a50ded45dbaf 1904 break;
WiredHome 23:a50ded45dbaf 1905 case 'B':
WiredHome 41:2956a0a221e5 1906 BacklightTest(lcd, pc, 2);
WiredHome 23:a50ded45dbaf 1907 break;
WiredHome 23:a50ded45dbaf 1908 case 'b':
WiredHome 23:a50ded45dbaf 1909 BacklightTest2(lcd, pc);
WiredHome 23:a50ded45dbaf 1910 break;
WiredHome 23:a50ded45dbaf 1911 case 'D':
WiredHome 23:a50ded45dbaf 1912 DOSColorTest(lcd, pc);
WiredHome 23:a50ded45dbaf 1913 break;
WiredHome 23:a50ded45dbaf 1914 case 'W':
WiredHome 23:a50ded45dbaf 1915 WebColorTest(lcd, pc);
WiredHome 23:a50ded45dbaf 1916 break;
WiredHome 23:a50ded45dbaf 1917 case 't':
WiredHome 23:a50ded45dbaf 1918 TextCursorTest(lcd, pc);
WiredHome 23:a50ded45dbaf 1919 break;
WiredHome 49:c5182231d1b9 1920 case 'w':
WiredHome 49:c5182231d1b9 1921 TextWrapTest(lcd, pc);
WiredHome 49:c5182231d1b9 1922 break;
WiredHome 23:a50ded45dbaf 1923 case 'F':
WiredHome 23:a50ded45dbaf 1924 ExternalFontTest(lcd, pc);
WiredHome 23:a50ded45dbaf 1925 break;
WiredHome 23:a50ded45dbaf 1926 case 'L':
WiredHome 23:a50ded45dbaf 1927 LineTest(lcd, pc);
WiredHome 23:a50ded45dbaf 1928 break;
WiredHome 44:207594dece70 1929 case 'l':
WiredHome 44:207594dece70 1930 LayerTest(lcd, pc);
WiredHome 44:207594dece70 1931 break;
WiredHome 23:a50ded45dbaf 1932 case 'R':
WiredHome 23:a50ded45dbaf 1933 RectangleTest(lcd, pc);
WiredHome 23:a50ded45dbaf 1934 break;
WiredHome 23:a50ded45dbaf 1935 case 'O':
WiredHome 23:a50ded45dbaf 1936 RoundRectTest(lcd, pc);
WiredHome 23:a50ded45dbaf 1937 break;
WiredHome 41:2956a0a221e5 1938 case 'p':
WiredHome 41:2956a0a221e5 1939 PrintScreen(lcd, pc);
WiredHome 41:2956a0a221e5 1940 break;
WiredHome 41:2956a0a221e5 1941 case 'S':
WiredHome 41:2956a0a221e5 1942 SpeedTest(lcd, pc);
WiredHome 41:2956a0a221e5 1943 break;
WiredHome 23:a50ded45dbaf 1944 case 'T':
WiredHome 23:a50ded45dbaf 1945 TriangleTest(lcd, pc);
WiredHome 23:a50ded45dbaf 1946 break;
WiredHome 37:f19b7e7449dc 1947 case 'P':
WiredHome 37:f19b7e7449dc 1948 PixelTest(lcd, pc);
WiredHome 37:f19b7e7449dc 1949 break;
WiredHome 37:f19b7e7449dc 1950 case 'G':
WiredHome 37:f19b7e7449dc 1951 TestGraphicsBitmap(lcd, pc);
WiredHome 37:f19b7e7449dc 1952 break;
WiredHome 23:a50ded45dbaf 1953 case 'C':
WiredHome 23:a50ded45dbaf 1954 CircleTest(lcd, pc);
WiredHome 23:a50ded45dbaf 1955 break;
WiredHome 23:a50ded45dbaf 1956 case 'E':
WiredHome 23:a50ded45dbaf 1957 EllipseTest(lcd, pc);
WiredHome 23:a50ded45dbaf 1958 break;
WiredHome 23:a50ded45dbaf 1959 case 'r':
WiredHome 23:a50ded45dbaf 1960 pc.printf("Resetting ...\r\n");
WiredHome 23:a50ded45dbaf 1961 wait_ms(20);
WiredHome 23:a50ded45dbaf 1962 mbed_reset();
WiredHome 23:a50ded45dbaf 1963 break;
WiredHome 23:a50ded45dbaf 1964 default:
WiredHome 23:a50ded45dbaf 1965 printf("huh?\n");
WiredHome 23:a50ded45dbaf 1966 break;
WiredHome 23:a50ded45dbaf 1967 }
WiredHome 23:a50ded45dbaf 1968 if (automode >= 0) {
WiredHome 23:a50ded45dbaf 1969 automode++;
WiredHome 23:a50ded45dbaf 1970 if (automode >= sizeof(modelist))
WiredHome 23:a50ded45dbaf 1971 automode = 0;
WiredHome 23:a50ded45dbaf 1972 wait_ms(2000);
WiredHome 23:a50ded45dbaf 1973 }
WiredHome 23:a50ded45dbaf 1974 wait_ms(200);
WiredHome 23:a50ded45dbaf 1975 }
WiredHome 23:a50ded45dbaf 1976 }
WiredHome 23:a50ded45dbaf 1977
WiredHome 23:a50ded45dbaf 1978 #endif // TESTENABLE