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 Jul 05 15:59:55 2014 +0000
Revision:
58:26658a56112a
Parent:
56:7a85d226ad0d
Child:
59:fb40aad4efd4
Change constructor init order to reduce compiler warnings.; Revise performance monitor #if wrappers so DEBUG is separate from performance monitoring.

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 38:38d503b4fad6 817 WriteCommandW(0x91, x1);
WiredHome 38:38d503b4fad6 818 WriteCommandW(0x93, y1);
WiredHome 38:38d503b4fad6 819 WriteCommandW(0x95, x2);
WiredHome 38:38d503b4fad6 820 WriteCommandW(0x97, y2);
WiredHome 19:3f82c1161fd2 821 unsigned char drawCmd = 0x00; // Line
WiredHome 19:3f82c1161fd2 822 WriteCommand(0x90, drawCmd);
WiredHome 19:3f82c1161fd2 823 WriteCommand(0x90, 0x80 + drawCmd); // Start drawing.
WiredHome 19:3f82c1161fd2 824 while (ReadCommand(0x90) & 0x80) // await completion.
WiredHome 19:3f82c1161fd2 825 wait_us(POLLWAITuSec);
WiredHome 19:3f82c1161fd2 826 REGISTERPERFORMANCE(PRF_DRAWLINE);
WiredHome 19:3f82c1161fd2 827 return noerror;
WiredHome 19:3f82c1161fd2 828 }
WiredHome 19:3f82c1161fd2 829
WiredHome 44:207594dece70 830
WiredHome 37:f19b7e7449dc 831 RetCode_t RA8875::fillrect(loc_t x1, loc_t y1, loc_t x2, loc_t y2,
WiredHome 19:3f82c1161fd2 832 color_t color, fill_t fillit)
WiredHome 19:3f82c1161fd2 833 {
WiredHome 19:3f82c1161fd2 834 return rect(x1,y1,x2,y2,color,fillit);
WiredHome 19:3f82c1161fd2 835 }
WiredHome 19:3f82c1161fd2 836
WiredHome 44:207594dece70 837
WiredHome 37:f19b7e7449dc 838 RetCode_t RA8875::rect(loc_t x1, loc_t y1, loc_t x2, loc_t y2,
WiredHome 19:3f82c1161fd2 839 color_t color, fill_t fillit)
WiredHome 19:3f82c1161fd2 840 {
WiredHome 19:3f82c1161fd2 841 foreground(color);
WiredHome 19:3f82c1161fd2 842 return rect(x1,y1,x2,y2,fillit);
WiredHome 19:3f82c1161fd2 843 }
WiredHome 19:3f82c1161fd2 844
WiredHome 44:207594dece70 845
WiredHome 37:f19b7e7449dc 846 RetCode_t RA8875::rect(loc_t x1, loc_t y1, loc_t x2, loc_t y2,
WiredHome 19:3f82c1161fd2 847 fill_t fillit)
WiredHome 19:3f82c1161fd2 848 {
WiredHome 19:3f82c1161fd2 849 PERFORMANCE_RESET;
WiredHome 19:3f82c1161fd2 850 if (x1 == x2 && y1 == y2) {
WiredHome 19:3f82c1161fd2 851 pixel(x1, y1);
WiredHome 19:3f82c1161fd2 852 } else if (x1 == x2) {
WiredHome 19:3f82c1161fd2 853 line(x1, y1, x2, y2);
WiredHome 19:3f82c1161fd2 854 } else if (y1 == y2) {
WiredHome 19:3f82c1161fd2 855 line(x1, y1, x2, y2);
WiredHome 19:3f82c1161fd2 856 } else {
WiredHome 38:38d503b4fad6 857 WriteCommandW(0x91, x1);
WiredHome 38:38d503b4fad6 858 WriteCommandW(0x93, y1);
WiredHome 38:38d503b4fad6 859 WriteCommandW(0x95, x2);
WiredHome 38:38d503b4fad6 860 WriteCommandW(0x97, y2);
WiredHome 19:3f82c1161fd2 861 unsigned char drawCmd = 0x10; // Rectangle
WiredHome 19:3f82c1161fd2 862 if (fillit == FILL)
WiredHome 19:3f82c1161fd2 863 drawCmd |= 0x20;
WiredHome 19:3f82c1161fd2 864 WriteCommand(0x90, drawCmd);
WiredHome 19:3f82c1161fd2 865 WriteCommand(0x90, 0x80 + drawCmd); // Start drawing.
WiredHome 19:3f82c1161fd2 866 while (ReadCommand(0x90) & 0x80) // await completion.
WiredHome 19:3f82c1161fd2 867 wait_us(POLLWAITuSec);
WiredHome 19:3f82c1161fd2 868 }
WiredHome 19:3f82c1161fd2 869 REGISTERPERFORMANCE(PRF_DRAWRECTANGLE);
WiredHome 19:3f82c1161fd2 870 return noerror;
WiredHome 19:3f82c1161fd2 871 }
WiredHome 19:3f82c1161fd2 872
WiredHome 44:207594dece70 873
WiredHome 37:f19b7e7449dc 874 RetCode_t RA8875::fillroundrect(loc_t x1, loc_t y1, loc_t x2, loc_t y2,
WiredHome 37:f19b7e7449dc 875 dim_t radius1, dim_t radius2, color_t color, fill_t fillit)
WiredHome 19:3f82c1161fd2 876 {
WiredHome 19:3f82c1161fd2 877 foreground(color);
WiredHome 19:3f82c1161fd2 878 return roundrect(x1,y1,x2,y2,radius1,radius2,fillit);
WiredHome 19:3f82c1161fd2 879 }
WiredHome 19:3f82c1161fd2 880
WiredHome 44:207594dece70 881
WiredHome 37:f19b7e7449dc 882 RetCode_t RA8875::roundrect(loc_t x1, loc_t y1, loc_t x2, loc_t y2,
WiredHome 37:f19b7e7449dc 883 dim_t radius1, dim_t radius2, color_t color, fill_t fillit)
WiredHome 19:3f82c1161fd2 884 {
WiredHome 19:3f82c1161fd2 885 foreground(color);
WiredHome 19:3f82c1161fd2 886 return roundrect(x1,y1,x2,y2,radius1,radius2,fillit);
WiredHome 19:3f82c1161fd2 887 }
WiredHome 19:3f82c1161fd2 888
WiredHome 44:207594dece70 889
WiredHome 37:f19b7e7449dc 890 RetCode_t RA8875::roundrect(loc_t x1, loc_t y1, loc_t x2, loc_t y2,
WiredHome 37:f19b7e7449dc 891 dim_t radius1, dim_t radius2, fill_t fillit)
WiredHome 19:3f82c1161fd2 892 {
WiredHome 19:3f82c1161fd2 893 RetCode_t ret = noerror;
WiredHome 19:3f82c1161fd2 894
WiredHome 19:3f82c1161fd2 895 PERFORMANCE_RESET;
WiredHome 21:3c1efb192927 896 if (x1 > x2 || y1 > y2 || (radius1 > (x2-x1)/2) || (radius2 > (y2-y1)/2) ) {
WiredHome 21:3c1efb192927 897 ret = bad_parameter;
WiredHome 21:3c1efb192927 898 } else if (x1 == x2 && y1 == y2) {
WiredHome 19:3f82c1161fd2 899 pixel(x1, y1);
WiredHome 19:3f82c1161fd2 900 } else if (x1 == x2) {
WiredHome 19:3f82c1161fd2 901 line(x1, y1, x2, y2);
WiredHome 19:3f82c1161fd2 902 } else if (y1 == y2) {
WiredHome 19:3f82c1161fd2 903 line(x1, y1, x2, y2);
WiredHome 19:3f82c1161fd2 904 } else {
WiredHome 38:38d503b4fad6 905 WriteCommandW(0x91, x1);
WiredHome 38:38d503b4fad6 906 WriteCommandW(0x93, y1);
WiredHome 38:38d503b4fad6 907 WriteCommandW(0x95, x2);
WiredHome 38:38d503b4fad6 908 WriteCommandW(0x97, y2);
WiredHome 38:38d503b4fad6 909 WriteCommandW(0xA1, radius1);
WiredHome 38:38d503b4fad6 910 WriteCommandW(0xA3, radius2);
WiredHome 21:3c1efb192927 911 // Should not need this...
WiredHome 38:38d503b4fad6 912 WriteCommandW(0xA5, 0);
WiredHome 38:38d503b4fad6 913 WriteCommandW(0xA7, 0);
WiredHome 19:3f82c1161fd2 914 unsigned char drawCmd = 0x20; // Rounded Rectangle
WiredHome 19:3f82c1161fd2 915 if (fillit == FILL)
WiredHome 19:3f82c1161fd2 916 drawCmd |= 0x40;
WiredHome 19:3f82c1161fd2 917 WriteCommand(0xA0, drawCmd);
WiredHome 19:3f82c1161fd2 918 WriteCommand(0xA0, 0x80 + drawCmd); // Start drawing.
WiredHome 19:3f82c1161fd2 919 while (ReadCommand(0xA0) & 0x80) { // await completion.
WiredHome 19:3f82c1161fd2 920 wait_us(POLLWAITuSec);
WiredHome 21:3c1efb192927 921 }
WiredHome 19:3f82c1161fd2 922 }
WiredHome 19:3f82c1161fd2 923 REGISTERPERFORMANCE(PRF_DRAWROUNDEDRECTANGLE);
WiredHome 19:3f82c1161fd2 924 return ret;
WiredHome 19:3f82c1161fd2 925 }
WiredHome 19:3f82c1161fd2 926
WiredHome 44:207594dece70 927
WiredHome 37:f19b7e7449dc 928 RetCode_t RA8875::triangle(loc_t x1, loc_t y1, loc_t x2, loc_t y2,
WiredHome 37:f19b7e7449dc 929 loc_t x3, loc_t y3, color_t color, fill_t fillit)
WiredHome 19:3f82c1161fd2 930 {
WiredHome 20:6e2e4a8372eb 931 RetCode_t ret;
WiredHome 20:6e2e4a8372eb 932
WiredHome 19:3f82c1161fd2 933 foreground(color);
WiredHome 20:6e2e4a8372eb 934 ret = triangle(x1,y1,x2,y2,x3,y3,fillit);
WiredHome 20:6e2e4a8372eb 935 return ret;
WiredHome 19:3f82c1161fd2 936 }
WiredHome 19:3f82c1161fd2 937
WiredHome 44:207594dece70 938
WiredHome 37:f19b7e7449dc 939 RetCode_t RA8875::filltriangle(loc_t x1, loc_t y1, loc_t x2, loc_t y2,
WiredHome 37:f19b7e7449dc 940 loc_t x3, loc_t y3, color_t color, fill_t fillit)
WiredHome 19:3f82c1161fd2 941 {
WiredHome 20:6e2e4a8372eb 942 RetCode_t ret;
WiredHome 20:6e2e4a8372eb 943
WiredHome 19:3f82c1161fd2 944 foreground(color);
WiredHome 20:6e2e4a8372eb 945 ret = triangle(x1,y1,x2,y2,x3,y3,fillit);
WiredHome 20:6e2e4a8372eb 946 return ret;
WiredHome 19:3f82c1161fd2 947 }
WiredHome 19:3f82c1161fd2 948
WiredHome 44:207594dece70 949
WiredHome 37:f19b7e7449dc 950 RetCode_t RA8875::triangle(loc_t x1, loc_t y1 ,loc_t x2, loc_t y2,
WiredHome 37:f19b7e7449dc 951 loc_t x3, loc_t y3, fill_t fillit)
WiredHome 19:3f82c1161fd2 952 {
WiredHome 19:3f82c1161fd2 953 RetCode_t ret = noerror;
WiredHome 19:3f82c1161fd2 954
WiredHome 19:3f82c1161fd2 955 PERFORMANCE_RESET;
WiredHome 19:3f82c1161fd2 956 if (x1 == x2 && y1 == y2 && x1 == x3 && y1 == y3) {
WiredHome 19:3f82c1161fd2 957 pixel(x1, y1);
WiredHome 19:3f82c1161fd2 958 } else {
WiredHome 38:38d503b4fad6 959 WriteCommandW(0x91, x1);
WiredHome 38:38d503b4fad6 960 WriteCommandW(0x93, y1);
WiredHome 38:38d503b4fad6 961 WriteCommandW(0x95, x2);
WiredHome 38:38d503b4fad6 962 WriteCommandW(0x97, y2);
WiredHome 38:38d503b4fad6 963 WriteCommandW(0xA9, x3);
WiredHome 38:38d503b4fad6 964 WriteCommandW(0xAB, y3);
WiredHome 19:3f82c1161fd2 965 unsigned char drawCmd = 0x01; // Triangle
WiredHome 19:3f82c1161fd2 966 if (fillit == FILL)
WiredHome 19:3f82c1161fd2 967 drawCmd |= 0x20;
WiredHome 19:3f82c1161fd2 968 WriteCommand(0x90, drawCmd);
WiredHome 19:3f82c1161fd2 969 WriteCommand(0x90, 0x80 + drawCmd); // Start drawing.
WiredHome 19:3f82c1161fd2 970 while (ReadCommand(0x90) & 0x80) // await completion.
WiredHome 19:3f82c1161fd2 971 wait_us(POLLWAITuSec);
WiredHome 19:3f82c1161fd2 972 }
WiredHome 19:3f82c1161fd2 973 REGISTERPERFORMANCE(PRF_DRAWTRIANGLE);
WiredHome 19:3f82c1161fd2 974 return ret;
WiredHome 19:3f82c1161fd2 975 }
WiredHome 19:3f82c1161fd2 976
WiredHome 37:f19b7e7449dc 977 RetCode_t RA8875::circle(loc_t x, loc_t y, dim_t radius,
WiredHome 19:3f82c1161fd2 978 color_t color, fill_t fillit)
WiredHome 19:3f82c1161fd2 979 {
WiredHome 19:3f82c1161fd2 980 foreground(color);
WiredHome 19:3f82c1161fd2 981 return circle(x,y,radius,fillit);
WiredHome 19:3f82c1161fd2 982 }
WiredHome 19:3f82c1161fd2 983
WiredHome 44:207594dece70 984
WiredHome 37:f19b7e7449dc 985 RetCode_t RA8875::fillcircle(loc_t x, loc_t y, dim_t radius,
WiredHome 19:3f82c1161fd2 986 color_t color, fill_t fillit)
WiredHome 19:3f82c1161fd2 987 {
WiredHome 19:3f82c1161fd2 988 foreground(color);
WiredHome 19:3f82c1161fd2 989 return circle(x,y,radius,fillit);
WiredHome 19:3f82c1161fd2 990 }
WiredHome 19:3f82c1161fd2 991
WiredHome 44:207594dece70 992
WiredHome 37:f19b7e7449dc 993 RetCode_t RA8875::circle(loc_t x, loc_t y, dim_t radius, fill_t fillit)
WiredHome 19:3f82c1161fd2 994 {
WiredHome 19:3f82c1161fd2 995 RetCode_t ret = noerror;
WiredHome 19:3f82c1161fd2 996
WiredHome 19:3f82c1161fd2 997 PERFORMANCE_RESET;
WiredHome 19:3f82c1161fd2 998 if (radius <= 0) {
WiredHome 19:3f82c1161fd2 999 ret = bad_parameter;
WiredHome 19:3f82c1161fd2 1000 } else if (radius == 1) {
WiredHome 19:3f82c1161fd2 1001 pixel(x,y);
WiredHome 19:3f82c1161fd2 1002 } else {
WiredHome 38:38d503b4fad6 1003 WriteCommandW(0x99, x);
WiredHome 38:38d503b4fad6 1004 WriteCommandW(0x9B, y);
WiredHome 19:3f82c1161fd2 1005 WriteCommand(0x9d, radius & 0xFF);
WiredHome 19:3f82c1161fd2 1006 unsigned char drawCmd = 0x00; // Circle
WiredHome 19:3f82c1161fd2 1007 if (fillit == FILL)
WiredHome 19:3f82c1161fd2 1008 drawCmd |= 0x20;
WiredHome 19:3f82c1161fd2 1009 WriteCommand(0x90, drawCmd);
WiredHome 19:3f82c1161fd2 1010 WriteCommand(0x90, 0x40 + drawCmd); // Start drawing.
WiredHome 19:3f82c1161fd2 1011 while (ReadCommand(0x90) & 0x40) // await completion.
WiredHome 19:3f82c1161fd2 1012 wait_us(POLLWAITuSec);
WiredHome 19:3f82c1161fd2 1013 }
WiredHome 19:3f82c1161fd2 1014 REGISTERPERFORMANCE(PRF_DRAWCIRCLE);
WiredHome 19:3f82c1161fd2 1015 return ret;
WiredHome 19:3f82c1161fd2 1016 }
WiredHome 19:3f82c1161fd2 1017
WiredHome 44:207594dece70 1018
WiredHome 37:f19b7e7449dc 1019 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 1020 {
WiredHome 19:3f82c1161fd2 1021 foreground(color);
WiredHome 25:9556a3a9b7cc 1022 return ellipse(x,y,radius1,radius2,fillit);
WiredHome 19:3f82c1161fd2 1023 }
WiredHome 19:3f82c1161fd2 1024
WiredHome 44:207594dece70 1025
WiredHome 37:f19b7e7449dc 1026 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 1027 {
WiredHome 25:9556a3a9b7cc 1028 foreground(color);
WiredHome 25:9556a3a9b7cc 1029 return ellipse(x,y,radius1,radius2,fillit);
WiredHome 25:9556a3a9b7cc 1030 }
WiredHome 44:207594dece70 1031
WiredHome 25:9556a3a9b7cc 1032
WiredHome 37:f19b7e7449dc 1033 RetCode_t RA8875::ellipse(loc_t x, loc_t y, dim_t radius1, dim_t radius2, fill_t fillit)
WiredHome 19:3f82c1161fd2 1034 {
WiredHome 19:3f82c1161fd2 1035 RetCode_t ret = noerror;
WiredHome 19:3f82c1161fd2 1036
WiredHome 19:3f82c1161fd2 1037 PERFORMANCE_RESET;
WiredHome 25:9556a3a9b7cc 1038 if (radius1 <= 0 || radius2 <= 0) {
WiredHome 19:3f82c1161fd2 1039 ; // do nothing
WiredHome 25:9556a3a9b7cc 1040 } else if (radius1 == 1 && radius2 == 1) {
WiredHome 19:3f82c1161fd2 1041 pixel(x, y);
WiredHome 19:3f82c1161fd2 1042 } else {
WiredHome 38:38d503b4fad6 1043 WriteCommandW(0xA5, x);
WiredHome 38:38d503b4fad6 1044 WriteCommandW(0xA7, y);
WiredHome 38:38d503b4fad6 1045 WriteCommandW(0xA1, radius1);
WiredHome 38:38d503b4fad6 1046 WriteCommandW(0xA3, radius2);
WiredHome 19:3f82c1161fd2 1047 unsigned char drawCmd = 0x00; // Ellipse
WiredHome 19:3f82c1161fd2 1048 if (fillit == FILL)
WiredHome 19:3f82c1161fd2 1049 drawCmd |= 0x40;
WiredHome 19:3f82c1161fd2 1050 WriteCommand(0xA0, drawCmd);
WiredHome 19:3f82c1161fd2 1051 WriteCommand(0xA0, 0x80 + drawCmd); // Start drawing.
WiredHome 19:3f82c1161fd2 1052 while (ReadCommand(0xA0) & 0x80) // await completion.
WiredHome 19:3f82c1161fd2 1053 wait_us(POLLWAITuSec);
WiredHome 19:3f82c1161fd2 1054 }
WiredHome 19:3f82c1161fd2 1055 REGISTERPERFORMANCE(PRF_DRAWELLIPSE);
WiredHome 19:3f82c1161fd2 1056 return ret;
WiredHome 19:3f82c1161fd2 1057 }
WiredHome 19:3f82c1161fd2 1058
WiredHome 44:207594dece70 1059
WiredHome 19:3f82c1161fd2 1060 RetCode_t RA8875::frequency(unsigned long Hz)
WiredHome 19:3f82c1161fd2 1061 {
WiredHome 19:3f82c1161fd2 1062 spi.frequency(Hz);
WiredHome 19:3f82c1161fd2 1063 // __ ___
WiredHome 19:3f82c1161fd2 1064 // Clock ___A Rising edge latched
WiredHome 19:3f82c1161fd2 1065 // ___ ____
WiredHome 19:3f82c1161fd2 1066 // Data ___X____
WiredHome 19:3f82c1161fd2 1067 spi.format(8, 3); // 8 bits and clock to data phase 0
WiredHome 19:3f82c1161fd2 1068 return noerror;
WiredHome 19:3f82c1161fd2 1069 }
WiredHome 19:3f82c1161fd2 1070
WiredHome 44:207594dece70 1071
WiredHome 19:3f82c1161fd2 1072 RetCode_t RA8875::Power(bool on)
WiredHome 19:3f82c1161fd2 1073 {
WiredHome 19:3f82c1161fd2 1074 WriteCommand(0x01, (on) ? 0x80 : 0x00);
WiredHome 19:3f82c1161fd2 1075 return noerror;
WiredHome 19:3f82c1161fd2 1076 }
WiredHome 19:3f82c1161fd2 1077
WiredHome 44:207594dece70 1078
WiredHome 19:3f82c1161fd2 1079 RetCode_t RA8875::Reset(void)
WiredHome 19:3f82c1161fd2 1080 {
WiredHome 19:3f82c1161fd2 1081 WriteCommand(0x01, 0x01); // Apply Display Off, Reset
WiredHome 19:3f82c1161fd2 1082 wait_ms(2); // no idea if I need to wait, or how long
WiredHome 19:3f82c1161fd2 1083 WriteCommand(0x01, 0x00); // Display off, Remove reset
WiredHome 19:3f82c1161fd2 1084 wait_ms(2); // no idea if I need to wait, or how long
WiredHome 43:3becae133285 1085 init(RA8875_DISPLAY_WIDTH, RA8875_DISPLAY_HEIGHT, RA8875_COLORDEPTH_BPP);
WiredHome 19:3f82c1161fd2 1086 return noerror;
WiredHome 19:3f82c1161fd2 1087 }
WiredHome 19:3f82c1161fd2 1088
WiredHome 19:3f82c1161fd2 1089
WiredHome 19:3f82c1161fd2 1090 RetCode_t RA8875::Backlight_u8(unsigned char brightness)
WiredHome 19:3f82c1161fd2 1091 {
WiredHome 19:3f82c1161fd2 1092 static bool is_enabled = false;
WiredHome 19:3f82c1161fd2 1093 if (brightness == 0) {
WiredHome 19:3f82c1161fd2 1094 WriteCommand(0x8a); // Disable the PWM
WiredHome 19:3f82c1161fd2 1095 WriteData(0x00);
WiredHome 19:3f82c1161fd2 1096 is_enabled = false;
WiredHome 19:3f82c1161fd2 1097 } else if (!is_enabled) {
WiredHome 19:3f82c1161fd2 1098 WriteCommand(0x8a); // Enable the PWM
WiredHome 19:3f82c1161fd2 1099 WriteData(0x80);
WiredHome 19:3f82c1161fd2 1100 WriteCommand(0x8a); // Not sure why this is needed, but following the pattern
WiredHome 19:3f82c1161fd2 1101 WriteData(0x81); // open PWM (SYS_CLK / 2 as best I can tell)
WiredHome 19:3f82c1161fd2 1102 is_enabled = true;
WiredHome 19:3f82c1161fd2 1103 }
WiredHome 19:3f82c1161fd2 1104 WriteCommand(0x8b, brightness); // Brightness parameter 0xff-0x00
WiredHome 19:3f82c1161fd2 1105 return noerror;
WiredHome 19:3f82c1161fd2 1106 }
WiredHome 19:3f82c1161fd2 1107
WiredHome 44:207594dece70 1108
WiredHome 19:3f82c1161fd2 1109 RetCode_t RA8875::Backlight(float brightness)
WiredHome 19:3f82c1161fd2 1110 {
WiredHome 19:3f82c1161fd2 1111 unsigned char b;
WiredHome 19:3f82c1161fd2 1112
WiredHome 29:422616aa04bd 1113 if (brightness >= 1.0)
WiredHome 19:3f82c1161fd2 1114 b = 255;
WiredHome 29:422616aa04bd 1115 else if (brightness <= 0.0)
WiredHome 19:3f82c1161fd2 1116 b = 0;
WiredHome 19:3f82c1161fd2 1117 else
WiredHome 19:3f82c1161fd2 1118 b = (unsigned char)(brightness * 255);
WiredHome 19:3f82c1161fd2 1119 return Backlight_u8(b);
WiredHome 19:3f82c1161fd2 1120 }
WiredHome 19:3f82c1161fd2 1121
WiredHome 44:207594dece70 1122
WiredHome 19:3f82c1161fd2 1123 RetCode_t RA8875::set_font(const unsigned char * _font)
WiredHome 19:3f82c1161fd2 1124 {
WiredHome 37:f19b7e7449dc 1125 if (font && ! _font) {
WiredHome 37:f19b7e7449dc 1126 SetTextCursor(cursor_x, cursor_y); // soft-font cursor -> hw cursor
WiredHome 37:f19b7e7449dc 1127 }
WiredHome 19:3f82c1161fd2 1128 font = _font;
WiredHome 29:422616aa04bd 1129 GraphicsDisplay::set_font(_font);
WiredHome 29:422616aa04bd 1130 return noerror; // trusting them, but it might be good to put some checks in here...
WiredHome 19:3f82c1161fd2 1131 }
WiredHome 19:3f82c1161fd2 1132
WiredHome 44:207594dece70 1133
WiredHome 19:3f82c1161fd2 1134 RetCode_t RA8875::background(color_t color)
WiredHome 19:3f82c1161fd2 1135 {
WiredHome 37:f19b7e7449dc 1136 GraphicsDisplay::background(color);
WiredHome 19:3f82c1161fd2 1137 WriteCommand(0x60, (color>>11)); // BGCR0
WiredHome 19:3f82c1161fd2 1138 WriteCommand(0x61, (unsigned char)(color>>5)); // BGCR0
WiredHome 19:3f82c1161fd2 1139 WriteCommand(0x62, (unsigned char)(color)); // BGCR0
WiredHome 19:3f82c1161fd2 1140 return noerror;
WiredHome 19:3f82c1161fd2 1141 }
WiredHome 19:3f82c1161fd2 1142
WiredHome 44:207594dece70 1143
WiredHome 19:3f82c1161fd2 1144 RetCode_t RA8875::background(unsigned char r, unsigned char g, unsigned char b)
WiredHome 19:3f82c1161fd2 1145 {
WiredHome 37:f19b7e7449dc 1146 background(RGB(r,g,b));
WiredHome 37:f19b7e7449dc 1147 // WriteCommand(0x60, r);
WiredHome 37:f19b7e7449dc 1148 // WriteCommand(0x61, g);
WiredHome 37:f19b7e7449dc 1149 // WriteCommand(0x62, b);
WiredHome 19:3f82c1161fd2 1150 return noerror;
WiredHome 19:3f82c1161fd2 1151 }
WiredHome 19:3f82c1161fd2 1152
WiredHome 44:207594dece70 1153
WiredHome 19:3f82c1161fd2 1154 RetCode_t RA8875::foreground(color_t color)
WiredHome 19:3f82c1161fd2 1155 {
WiredHome 37:f19b7e7449dc 1156 GraphicsDisplay::foreground(color);
WiredHome 19:3f82c1161fd2 1157 WriteCommand(0x63, (unsigned char)(color>>11));
WiredHome 19:3f82c1161fd2 1158 WriteCommand(0x64, (unsigned char)(color>>5));
WiredHome 19:3f82c1161fd2 1159 WriteCommand(0x65, (unsigned char)(color));
WiredHome 19:3f82c1161fd2 1160 return noerror;
WiredHome 19:3f82c1161fd2 1161 }
WiredHome 19:3f82c1161fd2 1162
WiredHome 44:207594dece70 1163
WiredHome 37:f19b7e7449dc 1164 RetCode_t RA8875::foreground(unsigned char r, unsigned char g, unsigned char b)
WiredHome 19:3f82c1161fd2 1165 {
WiredHome 37:f19b7e7449dc 1166 foreground(RGB(r,g,b));
WiredHome 37:f19b7e7449dc 1167 // WriteCommand(0x63, r);
WiredHome 37:f19b7e7449dc 1168 // WriteCommand(0x64, g);
WiredHome 37:f19b7e7449dc 1169 // WriteCommand(0x65, b);
WiredHome 19:3f82c1161fd2 1170 return noerror;
WiredHome 19:3f82c1161fd2 1171 }
WiredHome 19:3f82c1161fd2 1172
WiredHome 44:207594dece70 1173
WiredHome 37:f19b7e7449dc 1174 color_t RA8875::GetForeColor(void)
WiredHome 19:3f82c1161fd2 1175 {
WiredHome 19:3f82c1161fd2 1176 color_t color;
WiredHome 19:3f82c1161fd2 1177
WiredHome 19:3f82c1161fd2 1178 color = (ReadCommand(0x63) & 0x1F) << 11;
WiredHome 19:3f82c1161fd2 1179 color |= (ReadCommand(0x64) & 0x3F) << 5;
WiredHome 19:3f82c1161fd2 1180 color |= (ReadCommand(0x65) & 0x1F);
WiredHome 19:3f82c1161fd2 1181 return color;
WiredHome 19:3f82c1161fd2 1182 }
WiredHome 19:3f82c1161fd2 1183
WiredHome 44:207594dece70 1184
WiredHome 19:3f82c1161fd2 1185 color_t RA8875::DOSColor(int i)
WiredHome 19:3f82c1161fd2 1186 {
WiredHome 19:3f82c1161fd2 1187 const color_t colors[16] =
WiredHome 19:3f82c1161fd2 1188 {
WiredHome 19:3f82c1161fd2 1189 Black, Blue, Green, Cyan,
WiredHome 19:3f82c1161fd2 1190 Red, Magenta, Brown, Gray,
WiredHome 19:3f82c1161fd2 1191 Charcoal, BrightBlue, BrightGreen, BrightCyan,
WiredHome 19:3f82c1161fd2 1192 Orange, Pink, Yellow, White
WiredHome 19:3f82c1161fd2 1193 };
WiredHome 19:3f82c1161fd2 1194 if (i < 16)
WiredHome 19:3f82c1161fd2 1195 return colors[i];
WiredHome 19:3f82c1161fd2 1196 else
WiredHome 19:3f82c1161fd2 1197 return 0;
WiredHome 19:3f82c1161fd2 1198 }
WiredHome 19:3f82c1161fd2 1199
WiredHome 44:207594dece70 1200
WiredHome 19:3f82c1161fd2 1201 const char * RA8875::DOSColorNames(int i)
WiredHome 19:3f82c1161fd2 1202 {
WiredHome 19:3f82c1161fd2 1203 const char * names[16] =
WiredHome 19:3f82c1161fd2 1204 {
WiredHome 19:3f82c1161fd2 1205 "Black", "Blue", "Green", "Cyan",
WiredHome 19:3f82c1161fd2 1206 "Red", "Magenta", "Brown", "Gray",
WiredHome 19:3f82c1161fd2 1207 "Charcoal", "BrightBlue", "BrightGreen", "BrightCyan",
WiredHome 19:3f82c1161fd2 1208 "Orange", "Pink", "Yellow", "White"
WiredHome 19:3f82c1161fd2 1209 };
WiredHome 19:3f82c1161fd2 1210 if (i < 16)
WiredHome 19:3f82c1161fd2 1211 return names[i];
WiredHome 19:3f82c1161fd2 1212 else
WiredHome 19:3f82c1161fd2 1213 return NULL;
WiredHome 19:3f82c1161fd2 1214 }
WiredHome 19:3f82c1161fd2 1215
WiredHome 19:3f82c1161fd2 1216
WiredHome 19:3f82c1161fd2 1217 ///////////////////////////////////////////////////////////////
WiredHome 19:3f82c1161fd2 1218 // Private functions
WiredHome 19:3f82c1161fd2 1219
WiredHome 19:3f82c1161fd2 1220 unsigned char RA8875::spiwrite(unsigned char data)
WiredHome 19:3f82c1161fd2 1221 {
WiredHome 19:3f82c1161fd2 1222 unsigned char retval;
WiredHome 19:3f82c1161fd2 1223
WiredHome 19:3f82c1161fd2 1224 retval = spi.write(data);
WiredHome 19:3f82c1161fd2 1225 return retval;
WiredHome 19:3f82c1161fd2 1226 }
WiredHome 19:3f82c1161fd2 1227
WiredHome 44:207594dece70 1228
WiredHome 19:3f82c1161fd2 1229 unsigned char RA8875::spiread(void)
WiredHome 19:3f82c1161fd2 1230 {
WiredHome 19:3f82c1161fd2 1231 unsigned char retval;
WiredHome 19:3f82c1161fd2 1232 unsigned char data = 0;
WiredHome 19:3f82c1161fd2 1233
WiredHome 19:3f82c1161fd2 1234 retval = spi.write(data);
WiredHome 19:3f82c1161fd2 1235 return retval;
WiredHome 19:3f82c1161fd2 1236 }
WiredHome 19:3f82c1161fd2 1237
WiredHome 44:207594dece70 1238
WiredHome 19:3f82c1161fd2 1239 RetCode_t RA8875::select(bool chipsel)
WiredHome 19:3f82c1161fd2 1240 {
WiredHome 19:3f82c1161fd2 1241 cs = (chipsel == true) ? 0 : 1;
WiredHome 19:3f82c1161fd2 1242 return noerror;
WiredHome 19:3f82c1161fd2 1243 }
WiredHome 19:3f82c1161fd2 1244
WiredHome 44:207594dece70 1245
WiredHome 43:3becae133285 1246 RetCode_t RA8875::init(int width, int height, int color_bpp)
WiredHome 19:3f82c1161fd2 1247 {
WiredHome 19:3f82c1161fd2 1248 Backlight_u8(0);
WiredHome 37:f19b7e7449dc 1249 WriteCommand(0x88, 0x0a); // PLLC1 - Phase Lock Loop registers
WiredHome 19:3f82c1161fd2 1250 wait_ms(1);
WiredHome 19:3f82c1161fd2 1251 WriteCommand(0x89, 0x02);
WiredHome 19:3f82c1161fd2 1252 wait_ms(1);
WiredHome 19:3f82c1161fd2 1253
WiredHome 23:a50ded45dbaf 1254 // System Config Register (SYSR)
WiredHome 43:3becae133285 1255 if (color_bpp == 16) {
WiredHome 43:3becae133285 1256 WriteCommand(0x10, 0x0C); // 16-bpp (65K colors) color depth, 8-bit interface
WiredHome 43:3becae133285 1257 } else { // color_bpp == 8
WiredHome 43:3becae133285 1258 WriteCommand(0x10, 0x00); // 8-bpp (256 colors)
WiredHome 43:3becae133285 1259 }
WiredHome 23:a50ded45dbaf 1260 // Pixel Clock Setting Register (PCSR)
WiredHome 37:f19b7e7449dc 1261 WriteCommand(0x04, 0x82); // PDAT on PCLK falling edge, PCLK = 4 x System Clock
WiredHome 19:3f82c1161fd2 1262 wait_ms(1);
WiredHome 19:3f82c1161fd2 1263
WiredHome 19:3f82c1161fd2 1264 // Horizontal Settings
WiredHome 43:3becae133285 1265 WriteCommand(0x14, width/8 - 1); //HDWR//Horizontal Display Width Setting Bit[6:0]
WiredHome 43:3becae133285 1266 WriteCommand(0x15, 0x02); //HNDFCR//Horizontal Non-Display Period fine tune Bit[3:0]
WiredHome 43:3becae133285 1267 WriteCommand(0x16, 0x03); //HNDR//Horizontal Non-Display Period Bit[4:0]
WiredHome 43:3becae133285 1268 WriteCommand(0x17, 0x01); //HSTR//HSYNC Start Position[4:0]
WiredHome 43:3becae133285 1269 WriteCommand(0x18, 0x03); //HPWR//HSYNC Polarity ,The period width of HSYNC.
WiredHome 19:3f82c1161fd2 1270
WiredHome 19:3f82c1161fd2 1271 // Vertical Settings
WiredHome 43:3becae133285 1272 WriteCommand(0x19, (height-1)&0xFF); //VDHR0 //Vertical Display Height Bit [7:0]
WiredHome 43:3becae133285 1273 WriteCommand(0x1a, (height-1)>>8); //VDHR1 //Vertical Display Height Bit [8]
WiredHome 43:3becae133285 1274 WriteCommand(0x1b, 0x0F); //VNDR0 //Vertical Non-Display Period Bit [7:0]
WiredHome 43:3becae133285 1275 WriteCommand(0x1c, 0x00); //VNDR1 //Vertical Non-Display Period Bit [8]
WiredHome 43:3becae133285 1276 WriteCommand(0x1d, 0x0e); //VSTR0 //VSYNC Start Position[7:0]
WiredHome 43:3becae133285 1277 WriteCommand(0x1e, 0x06); //VSTR1 //VSYNC Start Position[8]
WiredHome 43:3becae133285 1278 WriteCommand(0x1f, 0x01); //VPWR //VSYNC Polarity ,VSYNC Pulse Width[6:0]
WiredHome 19:3f82c1161fd2 1279
WiredHome 43:3becae133285 1280 if (width >= 800 && height >= 480 && color_bpp > 8) {
WiredHome 43:3becae133285 1281 WriteCommand(0x20, 0x00); // DPCR - 1-layer mode when the resolution is too high
WiredHome 43:3becae133285 1282 } else {
WiredHome 43:3becae133285 1283 WriteCommand(0x20, 0x80); // DPCR - 2-layer mode
WiredHome 43:3becae133285 1284 }
WiredHome 43:3becae133285 1285
WiredHome 50:2c4f474a2453 1286 // Set display image to Blue on Black as default
WiredHome 43:3becae133285 1287 window(0,0, width, height); // Initialize to full screen
WiredHome 24:8ca861acf12d 1288 SetTextCursorControl();
WiredHome 28:ed102fc442c4 1289 foreground(Blue);
WiredHome 19:3f82c1161fd2 1290 background(Black);
WiredHome 50:2c4f474a2453 1291 SelectDrawingLayer(1);
WiredHome 50:2c4f474a2453 1292 cls();
WiredHome 50:2c4f474a2453 1293 SelectDrawingLayer(0);
WiredHome 19:3f82c1161fd2 1294 cls();
WiredHome 19:3f82c1161fd2 1295 return noerror;
WiredHome 19:3f82c1161fd2 1296 }
WiredHome 19:3f82c1161fd2 1297
WiredHome 23:a50ded45dbaf 1298 #ifdef TESTENABLE
WiredHome 23:a50ded45dbaf 1299
WiredHome 37:f19b7e7449dc 1300 #include "Arial12x12.h"
WiredHome 37:f19b7e7449dc 1301 #include "Small_6.h"
WiredHome 37:f19b7e7449dc 1302
WiredHome 23:a50ded45dbaf 1303 // ______________ ______________ ______________ _______________
WiredHome 23:a50ded45dbaf 1304 // /_____ _____/ / ___________/ / ___________/ /_____ ______/
WiredHome 23:a50ded45dbaf 1305 // / / / / / / / /
WiredHome 23:a50ded45dbaf 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 // Everything from here down is test code.
WiredHome 41:2956a0a221e5 1313 bool SuppressSlowStuff = false;
WiredHome 23:a50ded45dbaf 1314
WiredHome 44:207594dece70 1315
WiredHome 49:c5182231d1b9 1316 void TextWrapTest(RA8875 & display, Serial & pc)
WiredHome 49:c5182231d1b9 1317 {
WiredHome 49:c5182231d1b9 1318 if (!SuppressSlowStuff)
WiredHome 49:c5182231d1b9 1319 pc.printf("Text Wrap Test\r\n");
WiredHome 49:c5182231d1b9 1320 display.background(Black);
WiredHome 49:c5182231d1b9 1321 display.foreground(Blue);
WiredHome 49:c5182231d1b9 1322 display.cls();
WiredHome 49:c5182231d1b9 1323 display.Backlight_u8(255);
WiredHome 49:c5182231d1b9 1324 display.puts(0,0, "Text Wrap Test.\r\n");
WiredHome 52:e6039a823420 1325 for (int i=1; i<60; i++) {
WiredHome 52:e6039a823420 1326 display.printf("L%2d\n", i % 17);
WiredHome 49:c5182231d1b9 1327 if (!SuppressSlowStuff)
WiredHome 52:e6039a823420 1328 wait_ms(100);
WiredHome 49:c5182231d1b9 1329 }
WiredHome 49:c5182231d1b9 1330 if (!SuppressSlowStuff)
WiredHome 49:c5182231d1b9 1331 wait_ms(3000);
WiredHome 49:c5182231d1b9 1332 }
WiredHome 49:c5182231d1b9 1333
WiredHome 23:a50ded45dbaf 1334 void TextCursorTest(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 1335 {
WiredHome 37:f19b7e7449dc 1336 const char * iCursor = "The I-Beam cursor should be visible for this text.\r\n";
WiredHome 37:f19b7e7449dc 1337 const char * uCursor = "The Underscore cursor should be visible for this text.\r\n";
WiredHome 37:f19b7e7449dc 1338 const char * bCursor = "The Block cursor should be visible for this text.\r\n";
WiredHome 37:f19b7e7449dc 1339 const char * bbCursor = "The Blinking Block cursor should be visible for this text.\r\n";
WiredHome 23:a50ded45dbaf 1340 const char * p;
WiredHome 41:2956a0a221e5 1341 int delay = 100;
WiredHome 23:a50ded45dbaf 1342
WiredHome 41:2956a0a221e5 1343 if (!SuppressSlowStuff)
WiredHome 41:2956a0a221e5 1344 pc.printf("Text Cursor Test\r\n");
WiredHome 41:2956a0a221e5 1345 else
WiredHome 41:2956a0a221e5 1346 delay = 0;
WiredHome 23:a50ded45dbaf 1347 display.background(Black);
WiredHome 23:a50ded45dbaf 1348 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 1349 display.cls();
WiredHome 25:9556a3a9b7cc 1350 display.Backlight_u8(255);
WiredHome 23:a50ded45dbaf 1351 display.puts(0,0, "Text Cursor Test.");
WiredHome 23:a50ded45dbaf 1352
WiredHome 23:a50ded45dbaf 1353 // visible, non-blinking
WiredHome 24:8ca861acf12d 1354 display.SetTextCursor(0,20);
WiredHome 53:86d24b9480b9 1355 display.SetTextCursorControl(RA8875::IBEAM, false);
WiredHome 24:8ca861acf12d 1356 p = iCursor;
WiredHome 23:a50ded45dbaf 1357 while (*p) {
WiredHome 24:8ca861acf12d 1358 display._putc(*p++);
WiredHome 41:2956a0a221e5 1359 wait_ms(delay);
WiredHome 24:8ca861acf12d 1360 }
WiredHome 24:8ca861acf12d 1361
WiredHome 53:86d24b9480b9 1362 display.SetTextCursorControl(RA8875::UNDER, false);
WiredHome 24:8ca861acf12d 1363 p = uCursor;
WiredHome 24:8ca861acf12d 1364 while (*p) {
WiredHome 24:8ca861acf12d 1365 display._putc(*p++);
WiredHome 41:2956a0a221e5 1366 wait_ms(delay);
WiredHome 23:a50ded45dbaf 1367 }
WiredHome 24:8ca861acf12d 1368
WiredHome 53:86d24b9480b9 1369 display.SetTextCursorControl(RA8875::BLOCK, false);
WiredHome 24:8ca861acf12d 1370 p = bCursor;
WiredHome 24:8ca861acf12d 1371 while (*p) {
WiredHome 24:8ca861acf12d 1372 display._putc(*p++);
WiredHome 41:2956a0a221e5 1373 wait_ms(delay);
WiredHome 24:8ca861acf12d 1374 }
WiredHome 24:8ca861acf12d 1375
WiredHome 53:86d24b9480b9 1376 display.SetTextCursorControl(RA8875::BLOCK, true);
WiredHome 24:8ca861acf12d 1377 p = bbCursor;
WiredHome 24:8ca861acf12d 1378 while (*p) {
WiredHome 24:8ca861acf12d 1379 display._putc(*p++);
WiredHome 41:2956a0a221e5 1380 wait_ms(delay);
WiredHome 24:8ca861acf12d 1381 }
WiredHome 41:2956a0a221e5 1382 wait_ms(delay * 20);
WiredHome 53:86d24b9480b9 1383 display.SetTextCursorControl(RA8875::NOCURSOR, false);
WiredHome 23:a50ded45dbaf 1384 }
WiredHome 23:a50ded45dbaf 1385
WiredHome 44:207594dece70 1386
WiredHome 23:a50ded45dbaf 1387 void BacklightTest(RA8875 & display, Serial & pc, float ramptime)
WiredHome 23:a50ded45dbaf 1388 {
WiredHome 29:422616aa04bd 1389 char buf[60];
WiredHome 41:2956a0a221e5 1390 unsigned int w = (ramptime * 1000)/ 256;
WiredHome 41:2956a0a221e5 1391 int delay = 200;
WiredHome 41:2956a0a221e5 1392
WiredHome 41:2956a0a221e5 1393 if (!SuppressSlowStuff)
WiredHome 41:2956a0a221e5 1394 pc.printf("Backlight Test - ramp over %f sec.\r\n", ramptime);
WiredHome 41:2956a0a221e5 1395 else {
WiredHome 41:2956a0a221e5 1396 delay = 0;
WiredHome 41:2956a0a221e5 1397 w = 0;
WiredHome 41:2956a0a221e5 1398 }
WiredHome 23:a50ded45dbaf 1399 display.Backlight_u8(0);
WiredHome 29:422616aa04bd 1400 display.background(White);
WiredHome 23:a50ded45dbaf 1401 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 1402 display.cls();
WiredHome 41:2956a0a221e5 1403 wait_ms(delay);
WiredHome 23:a50ded45dbaf 1404 display.puts(0,0, "RA8875 Backlight Test - Ramp up.");
WiredHome 38:38d503b4fad6 1405 for (int i=0; i <= 255; i++) {
WiredHome 29:422616aa04bd 1406 sprintf(buf, "%3d, %4d", i, w);
WiredHome 37:f19b7e7449dc 1407 display.puts(100,100,buf);
WiredHome 23:a50ded45dbaf 1408 display.Backlight_u8(i);
WiredHome 29:422616aa04bd 1409 wait_ms(w);
WiredHome 23:a50ded45dbaf 1410 }
WiredHome 23:a50ded45dbaf 1411 }
WiredHome 23:a50ded45dbaf 1412
WiredHome 44:207594dece70 1413
WiredHome 23:a50ded45dbaf 1414 void BacklightTest2(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 1415 {
WiredHome 41:2956a0a221e5 1416 int delay = 20;
WiredHome 41:2956a0a221e5 1417
WiredHome 41:2956a0a221e5 1418 if (!SuppressSlowStuff)
WiredHome 41:2956a0a221e5 1419 pc.printf("Backlight Test 2\r\n");
WiredHome 41:2956a0a221e5 1420 else
WiredHome 41:2956a0a221e5 1421 delay = 0;
WiredHome 41:2956a0a221e5 1422
WiredHome 23:a50ded45dbaf 1423 // Dim it out at the end of the tests.
WiredHome 37:f19b7e7449dc 1424 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 1425 display.puts(0,0, "Ramp Backlight down.");
WiredHome 23:a50ded45dbaf 1426 // Ramp it off
WiredHome 23:a50ded45dbaf 1427 for (int i=255; i != 0; i--) {
WiredHome 23:a50ded45dbaf 1428 display.Backlight_u8(i);
WiredHome 41:2956a0a221e5 1429 wait_ms(delay);
WiredHome 23:a50ded45dbaf 1430 }
WiredHome 23:a50ded45dbaf 1431 display.Backlight_u8(0);
WiredHome 23:a50ded45dbaf 1432 }
WiredHome 23:a50ded45dbaf 1433
WiredHome 44:207594dece70 1434
WiredHome 23:a50ded45dbaf 1435 void ExternalFontTest(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 1436 {
WiredHome 41:2956a0a221e5 1437 if (!SuppressSlowStuff)
WiredHome 41:2956a0a221e5 1438 pc.printf("External Font Test\r\n");
WiredHome 23:a50ded45dbaf 1439 display.background(Black);
WiredHome 23:a50ded45dbaf 1440 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 1441 display.cls();
WiredHome 23:a50ded45dbaf 1442 display.Backlight(1);
WiredHome 37:f19b7e7449dc 1443 display.puts(0,0, "External Font Test.");
WiredHome 37:f19b7e7449dc 1444
WiredHome 37:f19b7e7449dc 1445 display.set_font(Small_6);
WiredHome 37:f19b7e7449dc 1446 display.puts(0,30, "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\r\n");
WiredHome 37:f19b7e7449dc 1447
WiredHome 23:a50ded45dbaf 1448 display.set_font(Arial12x12);
WiredHome 37:f19b7e7449dc 1449 display.puts("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\r\n");
WiredHome 37:f19b7e7449dc 1450 display.set_font(); // restore to internal
WiredHome 37:f19b7e7449dc 1451
WiredHome 37:f19b7e7449dc 1452 display.puts("Normal font again.");
WiredHome 37:f19b7e7449dc 1453 //display.window(0,0, display.width(), display.height());
WiredHome 23:a50ded45dbaf 1454 }
WiredHome 23:a50ded45dbaf 1455
WiredHome 44:207594dece70 1456
WiredHome 23:a50ded45dbaf 1457 void DOSColorTest(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 1458 {
WiredHome 41:2956a0a221e5 1459 if (!SuppressSlowStuff)
WiredHome 41:2956a0a221e5 1460 pc.printf("DOS Color Test\r\n");
WiredHome 23:a50ded45dbaf 1461 display.background(Black);
WiredHome 23:a50ded45dbaf 1462 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 1463 display.cls();
WiredHome 23:a50ded45dbaf 1464 display.puts(0,0, "DOS Colors - Fore");
WiredHome 23:a50ded45dbaf 1465 display.puts(280,0, "Back");
WiredHome 23:a50ded45dbaf 1466 display.background(Gray);
WiredHome 23:a50ded45dbaf 1467 for (int i=0; i<16; i++) {
WiredHome 23:a50ded45dbaf 1468 display.foreground(display.DOSColor(i));
WiredHome 23:a50ded45dbaf 1469 display.puts(160, i*16, display.DOSColorNames(i));
WiredHome 23:a50ded45dbaf 1470 display.background(Black);
WiredHome 23:a50ded45dbaf 1471 }
WiredHome 23:a50ded45dbaf 1472 display.foreground(White);
WiredHome 23:a50ded45dbaf 1473 for (int i=0; i<16; i++) {
WiredHome 23:a50ded45dbaf 1474 display.background(display.DOSColor(i));
WiredHome 23:a50ded45dbaf 1475 display.puts(360, i*16, display.DOSColorNames(i));
WiredHome 23:a50ded45dbaf 1476 display.foreground(White);
WiredHome 23:a50ded45dbaf 1477 }
WiredHome 23:a50ded45dbaf 1478 }
WiredHome 23:a50ded45dbaf 1479
WiredHome 44:207594dece70 1480
WiredHome 23:a50ded45dbaf 1481 void WebColorTest(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 1482 {
WiredHome 41:2956a0a221e5 1483 if (!SuppressSlowStuff)
WiredHome 41:2956a0a221e5 1484 pc.printf("Web Color Test\r\n");
WiredHome 23:a50ded45dbaf 1485 display.background(Black);
WiredHome 23:a50ded45dbaf 1486 display.foreground(Blue);
WiredHome 32:0e4f2ae512e2 1487 display.window(0,0, display.width(), display.height());
WiredHome 23:a50ded45dbaf 1488 display.cls();
WiredHome 23:a50ded45dbaf 1489 display.puts(0,0, "Web Color Test\r\n");
WiredHome 23:a50ded45dbaf 1490 display.SetTextFontSize(1,2);
WiredHome 23:a50ded45dbaf 1491 for (int i=0; i<sizeof(WebColors)/sizeof(WebColors[0]); i++) {
WiredHome 23:a50ded45dbaf 1492 display.background(WebColors[i]);
WiredHome 23:a50ded45dbaf 1493 display.puts(" ");
WiredHome 23:a50ded45dbaf 1494 if (i % 36 == 35)
WiredHome 23:a50ded45dbaf 1495 display.puts("\r\n");
WiredHome 23:a50ded45dbaf 1496 }
WiredHome 23:a50ded45dbaf 1497 display.SetTextFontSize(1,1);
WiredHome 23:a50ded45dbaf 1498 }
WiredHome 23:a50ded45dbaf 1499
WiredHome 44:207594dece70 1500
WiredHome 37:f19b7e7449dc 1501 void PixelTest(RA8875 & display, Serial & pc)
WiredHome 37:f19b7e7449dc 1502 {
WiredHome 37:f19b7e7449dc 1503 int i, c, x, y;
WiredHome 37:f19b7e7449dc 1504
WiredHome 41:2956a0a221e5 1505 if (!SuppressSlowStuff)
WiredHome 41:2956a0a221e5 1506 pc.printf("Pixel Test\r\n");
WiredHome 37:f19b7e7449dc 1507 display.background(Black);
WiredHome 37:f19b7e7449dc 1508 display.foreground(Blue);
WiredHome 37:f19b7e7449dc 1509 display.cls();
WiredHome 37:f19b7e7449dc 1510 display.puts(0,0, "Pixel Test");
WiredHome 37:f19b7e7449dc 1511 for (i=0; i<1000; i++) {
WiredHome 37:f19b7e7449dc 1512 x = rand() % 480;
WiredHome 37:f19b7e7449dc 1513 y = 16 + rand() % (272-16);
WiredHome 37:f19b7e7449dc 1514 c = rand() % 16;
WiredHome 37:f19b7e7449dc 1515 //pc.printf(" (%d,%d) - %d\r\n", x,y,r1);
WiredHome 37:f19b7e7449dc 1516 display.pixel(x,y, display.DOSColor(c));
WiredHome 37:f19b7e7449dc 1517 }
WiredHome 37:f19b7e7449dc 1518 }
WiredHome 37:f19b7e7449dc 1519
WiredHome 44:207594dece70 1520
WiredHome 23:a50ded45dbaf 1521 void LineTest(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 1522 {
WiredHome 23:a50ded45dbaf 1523 int i, x, y, x2, y2;
WiredHome 23:a50ded45dbaf 1524
WiredHome 41:2956a0a221e5 1525 if (!SuppressSlowStuff)
WiredHome 41:2956a0a221e5 1526 pc.printf("Line Test\r\n");
WiredHome 23:a50ded45dbaf 1527 display.background(Black);
WiredHome 23:a50ded45dbaf 1528 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 1529 display.cls();
WiredHome 23:a50ded45dbaf 1530 display.puts(0,0, "Line Test");
WiredHome 23:a50ded45dbaf 1531 for (i=0; i<16; i++) {
WiredHome 23:a50ded45dbaf 1532 // Lines
WiredHome 23:a50ded45dbaf 1533 x = rand() % 480;
WiredHome 23:a50ded45dbaf 1534 y = rand() % 272;
WiredHome 23:a50ded45dbaf 1535 x2 = rand() % 480;
WiredHome 23:a50ded45dbaf 1536 y2 = rand() % 272;
WiredHome 23:a50ded45dbaf 1537 display.line(x,y, x2,y2, display.DOSColor(i));
WiredHome 23:a50ded45dbaf 1538 }
WiredHome 23:a50ded45dbaf 1539 }
WiredHome 23:a50ded45dbaf 1540
WiredHome 44:207594dece70 1541
WiredHome 23:a50ded45dbaf 1542 void RectangleTest(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 1543 {
WiredHome 23:a50ded45dbaf 1544 int i, x1,y1, x2,y2;
WiredHome 23:a50ded45dbaf 1545
WiredHome 41:2956a0a221e5 1546 if (!SuppressSlowStuff)
WiredHome 41:2956a0a221e5 1547 pc.printf("Rectangle Test\r\n");
WiredHome 23:a50ded45dbaf 1548 display.background(Black);
WiredHome 23:a50ded45dbaf 1549 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 1550 display.cls();
WiredHome 23:a50ded45dbaf 1551 display.puts(0,0, "Rectangle Test");
WiredHome 23:a50ded45dbaf 1552 for (i=0; i<16; i++) {
WiredHome 23:a50ded45dbaf 1553 x1 = rand() % 240;
WiredHome 23:a50ded45dbaf 1554 y1 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1555 x2 = rand() % 240;
WiredHome 23:a50ded45dbaf 1556 y2 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1557 display.rect(x1,y1, x2,y2, display.DOSColor(i));
WiredHome 23:a50ded45dbaf 1558
WiredHome 23:a50ded45dbaf 1559 x1 = 240 + rand() % 240;
WiredHome 23:a50ded45dbaf 1560 y1 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1561 x2 = 240 + rand() % 240;
WiredHome 23:a50ded45dbaf 1562 y2 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1563 display.rect(x1,y1, x2,y2, FILL);
WiredHome 23:a50ded45dbaf 1564 }
WiredHome 23:a50ded45dbaf 1565 }
WiredHome 23:a50ded45dbaf 1566
WiredHome 44:207594dece70 1567
WiredHome 44:207594dece70 1568 void LayerTest(RA8875 & display, Serial & pc)
WiredHome 44:207594dece70 1569 {
WiredHome 44:207594dece70 1570 loc_t i, x1,y1, x2,y2, r1,r2;
WiredHome 44:207594dece70 1571
WiredHome 44:207594dece70 1572 if (!SuppressSlowStuff)
WiredHome 44:207594dece70 1573 pc.printf("Layer Test\r\n");
WiredHome 44:207594dece70 1574
WiredHome 50:2c4f474a2453 1575 display.SelectDrawingLayer(0);
WiredHome 44:207594dece70 1576 display.background(Black);
WiredHome 44:207594dece70 1577 display.foreground(Blue);
WiredHome 44:207594dece70 1578 display.cls();
WiredHome 44:207594dece70 1579 display.puts(0,0, "Layer 0");
WiredHome 44:207594dece70 1580 for (i=0; i<16; i++) {
WiredHome 44:207594dece70 1581 x1 = rand() % 240;
WiredHome 44:207594dece70 1582 y1 = 50 + rand() % 200;
WiredHome 44:207594dece70 1583 x2 = x1 + rand() % 100;
WiredHome 44:207594dece70 1584 y2 = y1 + rand() % 100;
WiredHome 44:207594dece70 1585 r1 = rand() % (x2 - x1)/2;
WiredHome 44:207594dece70 1586 r2 = rand() % (y2 - y1)/2;
WiredHome 44:207594dece70 1587 display.roundrect(x1,y1, x2,y2, r1,r2, display.DOSColor(i));
WiredHome 44:207594dece70 1588 if (!SuppressSlowStuff)
WiredHome 44:207594dece70 1589 wait_ms(20);
WiredHome 44:207594dece70 1590 }
WiredHome 44:207594dece70 1591 if (!SuppressSlowStuff)
WiredHome 44:207594dece70 1592 wait_ms(1000);
WiredHome 44:207594dece70 1593
WiredHome 50:2c4f474a2453 1594 display.SelectDrawingLayer(1);
WiredHome 44:207594dece70 1595 display.background(Black);
WiredHome 44:207594dece70 1596 display.foreground(Yellow);
WiredHome 44:207594dece70 1597 display.cls();
WiredHome 44:207594dece70 1598 display.puts(240,0, "Layer 1");
WiredHome 44:207594dece70 1599 for (i=0; i<16; i++) {
WiredHome 44:207594dece70 1600 x1 = 300 + rand() % 100;
WiredHome 44:207594dece70 1601 y1 = 70 + rand() % 200;
WiredHome 44:207594dece70 1602 r1 = rand() % min(y1 - 20, 100);
WiredHome 44:207594dece70 1603 display.circle(x1,y1,r1, display.DOSColor(i));
WiredHome 44:207594dece70 1604 if (!SuppressSlowStuff)
WiredHome 44:207594dece70 1605 wait_ms(20);
WiredHome 44:207594dece70 1606 }
WiredHome 56:7a85d226ad0d 1607 display.SetLayerMode(RA8875::ShowLayer1); // Show it after the build-up
WiredHome 44:207594dece70 1608 if (!SuppressSlowStuff)
WiredHome 44:207594dece70 1609 wait_ms(2000);
WiredHome 44:207594dece70 1610
WiredHome 50:2c4f474a2453 1611 display.SelectDrawingLayer(0);
WiredHome 56:7a85d226ad0d 1612 display.SetLayerMode(RA8875::ShowLayer0); // Show Layer 0 again
WiredHome 44:207594dece70 1613 if (!SuppressSlowStuff)
WiredHome 44:207594dece70 1614 wait_ms(1000);
WiredHome 53:86d24b9480b9 1615 display.SetLayerMode(RA8875::TransparentMode); // Transparent mode
WiredHome 44:207594dece70 1616 if (!SuppressSlowStuff)
WiredHome 44:207594dece70 1617 wait_ms(1000);
WiredHome 44:207594dece70 1618 for (i=0; i<=8; i++) {
WiredHome 44:207594dece70 1619 display.SetLayerTransparency(i, 8-i);
WiredHome 44:207594dece70 1620 if (!SuppressSlowStuff)
WiredHome 44:207594dece70 1621 wait_ms(200);
WiredHome 44:207594dece70 1622 }
WiredHome 44:207594dece70 1623
WiredHome 44:207594dece70 1624 // Restore before we exit
WiredHome 44:207594dece70 1625 display.SetLayerTransparency(0, 0);
WiredHome 56:7a85d226ad0d 1626 display.SetLayerMode(RA8875::ShowLayer0); // Restore to layer 0
WiredHome 44:207594dece70 1627 }
WiredHome 44:207594dece70 1628
WiredHome 44:207594dece70 1629
WiredHome 23:a50ded45dbaf 1630 void RoundRectTest(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 1631 {
WiredHome 37:f19b7e7449dc 1632 loc_t i, x1,y1, x2,y2, r1,r2;
WiredHome 23:a50ded45dbaf 1633
WiredHome 41:2956a0a221e5 1634 if (!SuppressSlowStuff)
WiredHome 41:2956a0a221e5 1635 pc.printf("Round Rectangle Test\r\n");
WiredHome 23:a50ded45dbaf 1636 display.background(Black);
WiredHome 23:a50ded45dbaf 1637 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 1638 display.cls();
WiredHome 23:a50ded45dbaf 1639 display.puts(0,0, "Rounded Rectangle Test");
WiredHome 23:a50ded45dbaf 1640
WiredHome 23:a50ded45dbaf 1641 for (i=0; i<16; i++) {
WiredHome 23:a50ded45dbaf 1642 x1 = rand() % 240;
WiredHome 23:a50ded45dbaf 1643 y1 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1644 x2 = x1 + rand() % 100;
WiredHome 23:a50ded45dbaf 1645 y2 = y1 + rand() % 100;
WiredHome 23:a50ded45dbaf 1646 r1 = rand() % (x2 - x1)/2;
WiredHome 23:a50ded45dbaf 1647 r2 = rand() % (y2 - y1)/2;
WiredHome 23:a50ded45dbaf 1648 display.roundrect(x1,y1, x2,y2, 5,8, display.DOSColor(i));
WiredHome 23:a50ded45dbaf 1649
WiredHome 23:a50ded45dbaf 1650 x1 = 240 + rand() % 240;
WiredHome 23:a50ded45dbaf 1651 y1 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1652 x2 = x1 + rand() % 100;
WiredHome 23:a50ded45dbaf 1653 y2 = y1 + rand() % 100;
WiredHome 23:a50ded45dbaf 1654 r1 = rand() % (x2 - x1)/2;
WiredHome 23:a50ded45dbaf 1655 r2 = rand() % (y2 - y1)/2;
WiredHome 23:a50ded45dbaf 1656 display.roundrect(x1,y1, x2,y2, r1,r2, FILL);
WiredHome 23:a50ded45dbaf 1657 }
WiredHome 23:a50ded45dbaf 1658 }
WiredHome 23:a50ded45dbaf 1659
WiredHome 44:207594dece70 1660
WiredHome 23:a50ded45dbaf 1661 void TriangleTest(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 1662 {
WiredHome 23:a50ded45dbaf 1663 int i, x1, y1, x2, y2, x3, y3;
WiredHome 23:a50ded45dbaf 1664
WiredHome 41:2956a0a221e5 1665 if (!SuppressSlowStuff)
WiredHome 41:2956a0a221e5 1666 pc.printf("Triangle Test\r\n");
WiredHome 23:a50ded45dbaf 1667 display.background(Black);
WiredHome 23:a50ded45dbaf 1668 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 1669 display.cls();
WiredHome 23:a50ded45dbaf 1670 display.puts(0,0, "Triangle Test");
WiredHome 23:a50ded45dbaf 1671
WiredHome 23:a50ded45dbaf 1672 x1 = 150;
WiredHome 23:a50ded45dbaf 1673 y1 = 2;
WiredHome 23:a50ded45dbaf 1674 x2 = 190;
WiredHome 23:a50ded45dbaf 1675 y2 = 7;
WiredHome 23:a50ded45dbaf 1676 x3 = 170;
WiredHome 23:a50ded45dbaf 1677 y3 = 16;
WiredHome 23:a50ded45dbaf 1678 display.triangle(x1,y1, x2,y2, x3,y3);
WiredHome 23:a50ded45dbaf 1679
WiredHome 23:a50ded45dbaf 1680 x1 = 200;
WiredHome 23:a50ded45dbaf 1681 y1 = 2;
WiredHome 23:a50ded45dbaf 1682 x2 = 240;
WiredHome 23:a50ded45dbaf 1683 y2 = 7;
WiredHome 23:a50ded45dbaf 1684 x3 = 220;
WiredHome 23:a50ded45dbaf 1685 y3 = 16;
WiredHome 23:a50ded45dbaf 1686 display.filltriangle(x1,y1, x2,y2, x3,y3, BrightRed);
WiredHome 23:a50ded45dbaf 1687
WiredHome 23:a50ded45dbaf 1688 x1 = 300;
WiredHome 23:a50ded45dbaf 1689 y1 = 2;
WiredHome 23:a50ded45dbaf 1690 x2 = 340;
WiredHome 23:a50ded45dbaf 1691 y2 = 7;
WiredHome 23:a50ded45dbaf 1692 x3 = 320;
WiredHome 23:a50ded45dbaf 1693 y3 = 16;
WiredHome 23:a50ded45dbaf 1694 display.triangle(x1,y1, x2,y2, x3,y3, NOFILL);
WiredHome 23:a50ded45dbaf 1695
WiredHome 23:a50ded45dbaf 1696 x1 = 400;
WiredHome 23:a50ded45dbaf 1697 y1 = 2;
WiredHome 23:a50ded45dbaf 1698 x2 = 440;
WiredHome 23:a50ded45dbaf 1699 y2 = 7;
WiredHome 23:a50ded45dbaf 1700 x3 = 420;
WiredHome 23:a50ded45dbaf 1701 y3 = 16;
WiredHome 23:a50ded45dbaf 1702 display.triangle(x1,y1, x2,y2, x3,y3, Blue);
WiredHome 23:a50ded45dbaf 1703
WiredHome 23:a50ded45dbaf 1704 for (i=0; i<16; i++) {
WiredHome 23:a50ded45dbaf 1705 x1 = rand() % 240;
WiredHome 23:a50ded45dbaf 1706 y1 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1707 x2 = rand() % 240;
WiredHome 23:a50ded45dbaf 1708 y2 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1709 x3 = rand() % 240;
WiredHome 23:a50ded45dbaf 1710 y3 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1711 display.triangle(x1,y1, x2,y2, x3,y3, display.DOSColor(i));
WiredHome 23:a50ded45dbaf 1712 x1 = 240 + rand() % 240;
WiredHome 23:a50ded45dbaf 1713 y1 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1714 x2 = 240 + rand() % 240;
WiredHome 23:a50ded45dbaf 1715 y2 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1716 x3 = 240 + rand() % 240;
WiredHome 23:a50ded45dbaf 1717 y3 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1718 display.triangle(x1,y1, x2,y2, x3,y3, FILL);
WiredHome 23:a50ded45dbaf 1719 }
WiredHome 23:a50ded45dbaf 1720 }
WiredHome 23:a50ded45dbaf 1721
WiredHome 44:207594dece70 1722
WiredHome 23:a50ded45dbaf 1723 void CircleTest(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 1724 {
WiredHome 23:a50ded45dbaf 1725 int i, x, y, r1;
WiredHome 23:a50ded45dbaf 1726
WiredHome 41:2956a0a221e5 1727 if (!SuppressSlowStuff)
WiredHome 41:2956a0a221e5 1728 pc.printf("Circle Test\r\n");
WiredHome 23:a50ded45dbaf 1729 display.background(Black);
WiredHome 23:a50ded45dbaf 1730 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 1731 display.cls();
WiredHome 23:a50ded45dbaf 1732 display.puts(0,0, "Circle Test");
WiredHome 23:a50ded45dbaf 1733 for (i=0; i<16; i++) {
WiredHome 23:a50ded45dbaf 1734 x = 100 + rand() % 100;
WiredHome 23:a50ded45dbaf 1735 y = 70 + rand() % 200;
WiredHome 23:a50ded45dbaf 1736 r1 = rand() % min(y - 20, 100);
WiredHome 23:a50ded45dbaf 1737 //pc.printf(" (%d,%d) - %d\r\n", x,y,r1);
WiredHome 23:a50ded45dbaf 1738 display.circle(x,y,r1, display.DOSColor(i));
WiredHome 23:a50ded45dbaf 1739
WiredHome 23:a50ded45dbaf 1740 x = 300 + rand() % 100;
WiredHome 23:a50ded45dbaf 1741 y = 70 + rand() % 200;
WiredHome 23:a50ded45dbaf 1742 r1 = rand() % min(y - 20, 100);
WiredHome 23:a50ded45dbaf 1743 //pc.printf(" (%d,%d) - %d FILL\r\n", x,y,r1);
WiredHome 23:a50ded45dbaf 1744 display.circle(x,y,r1, display.DOSColor(i), FILL);
WiredHome 23:a50ded45dbaf 1745 }
WiredHome 23:a50ded45dbaf 1746 }
WiredHome 23:a50ded45dbaf 1747
WiredHome 44:207594dece70 1748
WiredHome 23:a50ded45dbaf 1749 void EllipseTest(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 1750 {
WiredHome 23:a50ded45dbaf 1751 int i,x,y,r1,r2;
WiredHome 23:a50ded45dbaf 1752
WiredHome 41:2956a0a221e5 1753 if (!SuppressSlowStuff)
WiredHome 41:2956a0a221e5 1754 pc.printf("Ellipse Test\r\n");
WiredHome 23:a50ded45dbaf 1755 display.background(Black);
WiredHome 23:a50ded45dbaf 1756 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 1757 display.cls();
WiredHome 23:a50ded45dbaf 1758 display.puts(0,0, "Ellipse Test");
WiredHome 23:a50ded45dbaf 1759 for (i=0; i<16; i++) {
WiredHome 23:a50ded45dbaf 1760 x = 100 + rand() % 100;
WiredHome 23:a50ded45dbaf 1761 y = 70 + rand() % 200;
WiredHome 23:a50ded45dbaf 1762 r1 = rand() % min(y - 20, 100);
WiredHome 23:a50ded45dbaf 1763 r2 = rand() % min(y - 20, 100);
WiredHome 23:a50ded45dbaf 1764 display.ellipse(x,y,r1,r2, display.DOSColor(i));
WiredHome 23:a50ded45dbaf 1765
WiredHome 23:a50ded45dbaf 1766 x = 300 + rand() % 100;
WiredHome 23:a50ded45dbaf 1767 y = 70 + rand() % 200;
WiredHome 23:a50ded45dbaf 1768 r1 = rand() % min(y - 20, 100);
WiredHome 23:a50ded45dbaf 1769 r2 = rand() % min(y - 20, 100);
WiredHome 23:a50ded45dbaf 1770 display.ellipse(x,y,r1,r2, FILL);
WiredHome 23:a50ded45dbaf 1771 }
WiredHome 23:a50ded45dbaf 1772 }
WiredHome 23:a50ded45dbaf 1773
WiredHome 44:207594dece70 1774
WiredHome 37:f19b7e7449dc 1775 void TestGraphicsBitmap(RA8875 & display, Serial & pc)
WiredHome 37:f19b7e7449dc 1776 {
WiredHome 37:f19b7e7449dc 1777 LocalFileSystem local("local");
WiredHome 41:2956a0a221e5 1778 if (!SuppressSlowStuff)
WiredHome 41:2956a0a221e5 1779 pc.printf("Bitmap File Load\r\n");
WiredHome 37:f19b7e7449dc 1780 display.background(Black);
WiredHome 37:f19b7e7449dc 1781 display.foreground(Blue);
WiredHome 37:f19b7e7449dc 1782 display.cls();
WiredHome 37:f19b7e7449dc 1783 display.puts(0,0, "Graphics Test, loading /local/TestPat.bmp");
WiredHome 37:f19b7e7449dc 1784 wait(3);
WiredHome 37:f19b7e7449dc 1785
WiredHome 37:f19b7e7449dc 1786 int r = display.RenderBitmapFile(0,0, "/local/TestPat.bmp");
WiredHome 37:f19b7e7449dc 1787 }
WiredHome 37:f19b7e7449dc 1788
WiredHome 44:207594dece70 1789
WiredHome 41:2956a0a221e5 1790 void SpeedTest(RA8875 & display, Serial & pc)
WiredHome 41:2956a0a221e5 1791 {
WiredHome 41:2956a0a221e5 1792 Timer t;
WiredHome 41:2956a0a221e5 1793 SuppressSlowStuff = true;
WiredHome 41:2956a0a221e5 1794 pc.printf("\r\nSpeedTest disables delays, runs tests, reports overall time.\r\n");
WiredHome 41:2956a0a221e5 1795 t.start();
WiredHome 41:2956a0a221e5 1796 // do stuff fast
WiredHome 41:2956a0a221e5 1797 TextCursorTest(display, pc);
WiredHome 49:c5182231d1b9 1798 TextWrapTest(display, pc);
WiredHome 41:2956a0a221e5 1799 BacklightTest(display, pc, 0);
WiredHome 41:2956a0a221e5 1800 BacklightTest2(display, pc);
WiredHome 41:2956a0a221e5 1801 ExternalFontTest(display, pc);
WiredHome 41:2956a0a221e5 1802 DOSColorTest(display, pc);
WiredHome 41:2956a0a221e5 1803 WebColorTest(display, pc);
WiredHome 41:2956a0a221e5 1804 PixelTest(display, pc);
WiredHome 41:2956a0a221e5 1805 LineTest(display, pc);
WiredHome 41:2956a0a221e5 1806 RectangleTest(display, pc);
WiredHome 41:2956a0a221e5 1807 RoundRectTest(display, pc);
WiredHome 41:2956a0a221e5 1808 TriangleTest(display, pc);
WiredHome 41:2956a0a221e5 1809 CircleTest(display, pc);
WiredHome 41:2956a0a221e5 1810 EllipseTest(display, pc);
WiredHome 44:207594dece70 1811 LayerTest(display, pc);
WiredHome 41:2956a0a221e5 1812 //TestGraphicsBitmap(display, pc);
WiredHome 41:2956a0a221e5 1813 pc.printf("SpeedTest completed in %d msec\r\n", t.read_ms());
WiredHome 44:207594dece70 1814 #ifdef PERF_METRICS
WiredHome 41:2956a0a221e5 1815 display.ReportPerformance(pc);
WiredHome 41:2956a0a221e5 1816 #endif
WiredHome 41:2956a0a221e5 1817 SuppressSlowStuff = false;
WiredHome 41:2956a0a221e5 1818 }
WiredHome 41:2956a0a221e5 1819
WiredHome 44:207594dece70 1820
WiredHome 41:2956a0a221e5 1821 void PrintScreen(RA8875 & display, Serial & pc)
WiredHome 41:2956a0a221e5 1822 {
WiredHome 41:2956a0a221e5 1823 LocalFileSystem local("local");
WiredHome 41:2956a0a221e5 1824 if (!SuppressSlowStuff)
WiredHome 41:2956a0a221e5 1825 pc.printf("PrintScreen\r\n");
WiredHome 41:2956a0a221e5 1826 display.PrintScreen( 0,0, 480,272, "/local/Capture.bmp");
WiredHome 41:2956a0a221e5 1827 }
WiredHome 41:2956a0a221e5 1828
WiredHome 44:207594dece70 1829
WiredHome 23:a50ded45dbaf 1830 void RunTestSet(RA8875 & lcd, Serial & pc)
WiredHome 23:a50ded45dbaf 1831 {
WiredHome 23:a50ded45dbaf 1832 int q = 0;
WiredHome 23:a50ded45dbaf 1833 int automode = 0;
WiredHome 49:c5182231d1b9 1834 const unsigned char modelist[] = "BDWtGLlFROTPCEbw"; // auto-test in this order.
WiredHome 23:a50ded45dbaf 1835
WiredHome 23:a50ded45dbaf 1836 while(1) {
WiredHome 23:a50ded45dbaf 1837 pc.printf("\r\n"
WiredHome 41:2956a0a221e5 1838 "B - Backlight up b - backlight dim\r\n"
WiredHome 41:2956a0a221e5 1839 "D - DOS Colors W - Web Colors\r\n"
WiredHome 41:2956a0a221e5 1840 "t - text cursor G - Graphics Bitmap\r\n"
WiredHome 41:2956a0a221e5 1841 "L - Lines F - external Font\r\n"
WiredHome 41:2956a0a221e5 1842 "R - Rectangles O - rOund rectangles\r\n"
WiredHome 41:2956a0a221e5 1843 "T - Triangles P - Pixels \r\n"
WiredHome 41:2956a0a221e5 1844 "C - Circles E - Ellipses\r\n"
WiredHome 41:2956a0a221e5 1845 "A - Auto Test mode S - Speed Test\r\n"
WiredHome 41:2956a0a221e5 1846 "p - print screen r - reset \r\n"
WiredHome 49:c5182231d1b9 1847 "l - layer test w - wrapping text \r\n"
WiredHome 58:26658a56112a 1848 #ifdef PERF_METRICS
WiredHome 41:2956a0a221e5 1849 "0 - clear performance 1 - report performance\r\n"
WiredHome 41:2956a0a221e5 1850 #endif
WiredHome 23:a50ded45dbaf 1851 "> ");
WiredHome 23:a50ded45dbaf 1852 if (automode == -1 || pc.readable()) {
WiredHome 23:a50ded45dbaf 1853 automode = -1;
WiredHome 37:f19b7e7449dc 1854 q = pc.getc();
WiredHome 37:f19b7e7449dc 1855 while (pc.readable())
WiredHome 37:f19b7e7449dc 1856 pc.getc();
WiredHome 23:a50ded45dbaf 1857 } else if (automode >= 0) {
WiredHome 23:a50ded45dbaf 1858 q = modelist[automode];
WiredHome 23:a50ded45dbaf 1859 }
WiredHome 23:a50ded45dbaf 1860 switch(q) {
WiredHome 58:26658a56112a 1861 #ifdef PERF_METRICS
WiredHome 41:2956a0a221e5 1862 case '0':
WiredHome 41:2956a0a221e5 1863 lcd.ClearPerformance();
WiredHome 41:2956a0a221e5 1864 break;
WiredHome 41:2956a0a221e5 1865 case '1':
WiredHome 41:2956a0a221e5 1866 lcd.ReportPerformance(pc);
WiredHome 41:2956a0a221e5 1867 break;
WiredHome 41:2956a0a221e5 1868 #endif
WiredHome 23:a50ded45dbaf 1869 case 'A':
WiredHome 23:a50ded45dbaf 1870 automode = 0;
WiredHome 23:a50ded45dbaf 1871 break;
WiredHome 23:a50ded45dbaf 1872 case 'B':
WiredHome 41:2956a0a221e5 1873 BacklightTest(lcd, pc, 2);
WiredHome 23:a50ded45dbaf 1874 break;
WiredHome 23:a50ded45dbaf 1875 case 'b':
WiredHome 23:a50ded45dbaf 1876 BacklightTest2(lcd, pc);
WiredHome 23:a50ded45dbaf 1877 break;
WiredHome 23:a50ded45dbaf 1878 case 'D':
WiredHome 23:a50ded45dbaf 1879 DOSColorTest(lcd, pc);
WiredHome 23:a50ded45dbaf 1880 break;
WiredHome 23:a50ded45dbaf 1881 case 'W':
WiredHome 23:a50ded45dbaf 1882 WebColorTest(lcd, pc);
WiredHome 23:a50ded45dbaf 1883 break;
WiredHome 23:a50ded45dbaf 1884 case 't':
WiredHome 23:a50ded45dbaf 1885 TextCursorTest(lcd, pc);
WiredHome 23:a50ded45dbaf 1886 break;
WiredHome 49:c5182231d1b9 1887 case 'w':
WiredHome 49:c5182231d1b9 1888 TextWrapTest(lcd, pc);
WiredHome 49:c5182231d1b9 1889 break;
WiredHome 23:a50ded45dbaf 1890 case 'F':
WiredHome 23:a50ded45dbaf 1891 ExternalFontTest(lcd, pc);
WiredHome 23:a50ded45dbaf 1892 break;
WiredHome 23:a50ded45dbaf 1893 case 'L':
WiredHome 23:a50ded45dbaf 1894 LineTest(lcd, pc);
WiredHome 23:a50ded45dbaf 1895 break;
WiredHome 44:207594dece70 1896 case 'l':
WiredHome 44:207594dece70 1897 LayerTest(lcd, pc);
WiredHome 44:207594dece70 1898 break;
WiredHome 23:a50ded45dbaf 1899 case 'R':
WiredHome 23:a50ded45dbaf 1900 RectangleTest(lcd, pc);
WiredHome 23:a50ded45dbaf 1901 break;
WiredHome 23:a50ded45dbaf 1902 case 'O':
WiredHome 23:a50ded45dbaf 1903 RoundRectTest(lcd, pc);
WiredHome 23:a50ded45dbaf 1904 break;
WiredHome 41:2956a0a221e5 1905 case 'p':
WiredHome 41:2956a0a221e5 1906 PrintScreen(lcd, pc);
WiredHome 41:2956a0a221e5 1907 break;
WiredHome 41:2956a0a221e5 1908 case 'S':
WiredHome 41:2956a0a221e5 1909 SpeedTest(lcd, pc);
WiredHome 41:2956a0a221e5 1910 break;
WiredHome 23:a50ded45dbaf 1911 case 'T':
WiredHome 23:a50ded45dbaf 1912 TriangleTest(lcd, pc);
WiredHome 23:a50ded45dbaf 1913 break;
WiredHome 37:f19b7e7449dc 1914 case 'P':
WiredHome 37:f19b7e7449dc 1915 PixelTest(lcd, pc);
WiredHome 37:f19b7e7449dc 1916 break;
WiredHome 37:f19b7e7449dc 1917 case 'G':
WiredHome 37:f19b7e7449dc 1918 TestGraphicsBitmap(lcd, pc);
WiredHome 37:f19b7e7449dc 1919 break;
WiredHome 23:a50ded45dbaf 1920 case 'C':
WiredHome 23:a50ded45dbaf 1921 CircleTest(lcd, pc);
WiredHome 23:a50ded45dbaf 1922 break;
WiredHome 23:a50ded45dbaf 1923 case 'E':
WiredHome 23:a50ded45dbaf 1924 EllipseTest(lcd, pc);
WiredHome 23:a50ded45dbaf 1925 break;
WiredHome 23:a50ded45dbaf 1926 case 'r':
WiredHome 23:a50ded45dbaf 1927 pc.printf("Resetting ...\r\n");
WiredHome 23:a50ded45dbaf 1928 wait_ms(20);
WiredHome 23:a50ded45dbaf 1929 mbed_reset();
WiredHome 23:a50ded45dbaf 1930 break;
WiredHome 23:a50ded45dbaf 1931 default:
WiredHome 23:a50ded45dbaf 1932 printf("huh?\n");
WiredHome 23:a50ded45dbaf 1933 break;
WiredHome 23:a50ded45dbaf 1934 }
WiredHome 23:a50ded45dbaf 1935 if (automode >= 0) {
WiredHome 23:a50ded45dbaf 1936 automode++;
WiredHome 23:a50ded45dbaf 1937 if (automode >= sizeof(modelist))
WiredHome 23:a50ded45dbaf 1938 automode = 0;
WiredHome 23:a50ded45dbaf 1939 wait_ms(2000);
WiredHome 23:a50ded45dbaf 1940 }
WiredHome 23:a50ded45dbaf 1941 wait_ms(200);
WiredHome 23:a50ded45dbaf 1942 }
WiredHome 23:a50ded45dbaf 1943 }
WiredHome 23:a50ded45dbaf 1944
WiredHome 23:a50ded45dbaf 1945 #endif // TESTENABLE