Forked para SNOCC

Dependencies:   GPS

Dependents:   SNOCC_V1 SNOCC_V2

Fork of RA8875 by SNOCC

Committer:
WiredHome
Date:
Sun Aug 17 15:38:51 2014 +0000
Revision:
62:ba5d33438fda
Parent:
61:8f3153bf0baa
Child:
66:468a11f05580
Fixed a bug in the pixel API which was visible when line( ) with same x,y coordinates for both points was used.

Who changed what in which revision?

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