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:
Sat Aug 16 19:26:17 2014 +0000
Revision:
60:2dfd574f63bd
Parent:
59:fb40aad4efd4
Child:
61:8f3153bf0baa
Correct an issue - trap line(...) where the xy pairs actually represent a point, and call pixel(...) instead. It appeared that the RA8875 would hang in for this line api call.

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