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

Dependents:   FRDM_RA8875_mPaint RA8875_Demo RA8875_KeyPadDemo SignalGenerator ... more

Fork of SPI_TFT by Peter Drescher

See Components - RA8875 Based Display

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

Offline Help Manual (Windows chm)

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

Committer:
WiredHome
Date:
Fri Jan 17 17:24:05 2014 +0000
Revision:
28:ed102fc442c4
Parent:
25:9556a3a9b7cc
Child:
29:422616aa04bd
Implement additional initialization in the constructor so the display immediately comes on.

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 19:3f82c1161fd2 4 /// which is 480 x xxx. It has other attributes (like display controller
WiredHome 19:3f82c1161fd2 5 /// managed backlight brightness. So, there are expectations and some
WiredHome 19:3f82c1161fd2 6 /// defined constants based on that specific display.
WiredHome 19:3f82c1161fd2 7 ///
WiredHome 19:3f82c1161fd2 8 #include "RA8875.h"
WiredHome 19:3f82c1161fd2 9
WiredHome 20:6e2e4a8372eb 10 DigitalOut zz1(LED1);
WiredHome 20:6e2e4a8372eb 11 DigitalOut zz2(LED2);
WiredHome 20:6e2e4a8372eb 12 DigitalOut zz3(LED3);
WiredHome 20:6e2e4a8372eb 13 DigitalOut zz4(LED4);
WiredHome 20:6e2e4a8372eb 14
WiredHome 19:3f82c1161fd2 15 //#define DEBUG "RAIO"
WiredHome 19:3f82c1161fd2 16 // ...
WiredHome 19:3f82c1161fd2 17 // INFO("Stuff to show %d", var); // new-line is automatically appended
WiredHome 19:3f82c1161fd2 18 //
WiredHome 19:3f82c1161fd2 19 #if (defined(DEBUG) && !defined(TARGET_LPC11U24))
WiredHome 19:3f82c1161fd2 20 #define INFO(x, ...) std::printf("[INF %s %3d] "x"\r\n", DEBUG, __LINE__, ##__VA_ARGS__);
WiredHome 19:3f82c1161fd2 21 #define WARN(x, ...) std::printf("[WRN %s %3d] "x"\r\n", DEBUG, __LINE__, ##__VA_ARGS__);
WiredHome 19:3f82c1161fd2 22 #define ERR(x, ...) std::printf("[ERR %s %3d] "x"\r\n", DEBUG, __LINE__, ##__VA_ARGS__);
WiredHome 19:3f82c1161fd2 23 #else
WiredHome 19:3f82c1161fd2 24 #define INFO(x, ...)
WiredHome 19:3f82c1161fd2 25 #define WARN(x, ...)
WiredHome 19:3f82c1161fd2 26 #define ERR(x, ...)
WiredHome 19:3f82c1161fd2 27 #endif
WiredHome 19:3f82c1161fd2 28
WiredHome 19:3f82c1161fd2 29
WiredHome 19:3f82c1161fd2 30 #define RA8875_DISPLAY_WIDTH 480
WiredHome 19:3f82c1161fd2 31 #define RA8875_DISPLAY_HEIGHT 272
WiredHome 19:3f82c1161fd2 32
WiredHome 19:3f82c1161fd2 33
WiredHome 19:3f82c1161fd2 34 #ifdef PERF_METRICS
WiredHome 19:3f82c1161fd2 35 #define PERFORMANCE_RESET performance.reset()
WiredHome 19:3f82c1161fd2 36 #define REGISTERPERFORMANCE(a) RegisterPerformance(a)
WiredHome 19:3f82c1161fd2 37 static const char *metricsName[] =
WiredHome 19:3f82c1161fd2 38 {
WiredHome 19:3f82c1161fd2 39 "Point", "Line", "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 19:3f82c1161fd2 52 : spi(mosi, miso, sclk)
WiredHome 19:3f82c1161fd2 53 , cs(csel)
WiredHome 19:3f82c1161fd2 54 , res(reset)
WiredHome 19:3f82c1161fd2 55 , GraphicsDisplay(name)
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 19:3f82c1161fd2 69 //RA8875::~RA8875()
WiredHome 19:3f82c1161fd2 70 //{
WiredHome 19:3f82c1161fd2 71 //}
WiredHome 19:3f82c1161fd2 72
WiredHome 19:3f82c1161fd2 73 #ifdef PERF_METRICS
WiredHome 19:3f82c1161fd2 74 void RA8875::ClearPerformance()
WiredHome 19:3f82c1161fd2 75 {
WiredHome 19:3f82c1161fd2 76 for (int i=0; i<METRICCOUNT; i++)
WiredHome 19:3f82c1161fd2 77 metrics[i] = 0;
WiredHome 19:3f82c1161fd2 78 }
WiredHome 19:3f82c1161fd2 79
WiredHome 19:3f82c1161fd2 80 void RA8875::RegisterPerformance(method_e method)
WiredHome 19:3f82c1161fd2 81 {
WiredHome 19:3f82c1161fd2 82 unsigned long elapsed = performance.read_us();
WiredHome 19:3f82c1161fd2 83
WiredHome 19:3f82c1161fd2 84 if (method < METRICCOUNT && elapsed > metrics[method])
WiredHome 19:3f82c1161fd2 85 metrics[method] = elapsed;
WiredHome 19:3f82c1161fd2 86 }
WiredHome 19:3f82c1161fd2 87
WiredHome 19:3f82c1161fd2 88 void RA8875::ReportPerformance()
WiredHome 19:3f82c1161fd2 89 {
WiredHome 19:3f82c1161fd2 90 for (int i=0; i<METRICCOUNT; i++) {
WiredHome 19:3f82c1161fd2 91 printf("%10d uS %s\r\n", metrics[i], metricsName[i]);
WiredHome 19:3f82c1161fd2 92 }
WiredHome 19:3f82c1161fd2 93 }
WiredHome 19:3f82c1161fd2 94 #endif
WiredHome 19:3f82c1161fd2 95
WiredHome 19:3f82c1161fd2 96 RetCode_t RA8875::WriteCommand(unsigned char command, unsigned int data)
WiredHome 19:3f82c1161fd2 97 {
WiredHome 19:3f82c1161fd2 98 select(true);
WiredHome 19:3f82c1161fd2 99 spiwrite(0x80);
WiredHome 19:3f82c1161fd2 100 spiwrite(command);
WiredHome 19:3f82c1161fd2 101 if (data <= 0xFF) { // only if in the valid range
WiredHome 19:3f82c1161fd2 102 spiwrite(0x00);
WiredHome 19:3f82c1161fd2 103 spiwrite(data);
WiredHome 19:3f82c1161fd2 104 }
WiredHome 19:3f82c1161fd2 105 select(false);
WiredHome 19:3f82c1161fd2 106 return noerror;
WiredHome 19:3f82c1161fd2 107 }
WiredHome 19:3f82c1161fd2 108
WiredHome 19:3f82c1161fd2 109 RetCode_t RA8875::WriteData(unsigned char data)
WiredHome 19:3f82c1161fd2 110 {
WiredHome 19:3f82c1161fd2 111 select(true);
WiredHome 19:3f82c1161fd2 112 spiwrite(0x00);
WiredHome 19:3f82c1161fd2 113 spiwrite(data);
WiredHome 19:3f82c1161fd2 114 select(false);
WiredHome 19:3f82c1161fd2 115 return noerror;
WiredHome 19:3f82c1161fd2 116 }
WiredHome 19:3f82c1161fd2 117
WiredHome 19:3f82c1161fd2 118 unsigned char RA8875::ReadCommand(unsigned char command)
WiredHome 19:3f82c1161fd2 119 {
WiredHome 19:3f82c1161fd2 120 WriteCommand(command);
WiredHome 19:3f82c1161fd2 121 return ReadData();
WiredHome 19:3f82c1161fd2 122 }
WiredHome 19:3f82c1161fd2 123
WiredHome 19:3f82c1161fd2 124 unsigned char RA8875::ReadData(void)
WiredHome 19:3f82c1161fd2 125 {
WiredHome 19:3f82c1161fd2 126 unsigned char data;
WiredHome 19:3f82c1161fd2 127
WiredHome 19:3f82c1161fd2 128 select(true);
WiredHome 19:3f82c1161fd2 129 spiwrite(0x40);
WiredHome 19:3f82c1161fd2 130 data = spiread();
WiredHome 19:3f82c1161fd2 131 select(false);
WiredHome 19:3f82c1161fd2 132 return data;
WiredHome 19:3f82c1161fd2 133 }
WiredHome 19:3f82c1161fd2 134
WiredHome 19:3f82c1161fd2 135 unsigned char RA8875::ReadStatus(void)
WiredHome 19:3f82c1161fd2 136 {
WiredHome 19:3f82c1161fd2 137 unsigned char data;
WiredHome 19:3f82c1161fd2 138
WiredHome 19:3f82c1161fd2 139 select(true);
WiredHome 19:3f82c1161fd2 140 spiwrite(0xC0);
WiredHome 19:3f82c1161fd2 141 data = spiread();
WiredHome 19:3f82c1161fd2 142 select(false);
WiredHome 19:3f82c1161fd2 143 return data;
WiredHome 19:3f82c1161fd2 144 }
WiredHome 19:3f82c1161fd2 145
WiredHome 19:3f82c1161fd2 146 unsigned int RA8875::fontwidth(void)
WiredHome 19:3f82c1161fd2 147 {
WiredHome 19:3f82c1161fd2 148 if (font == NULL)
WiredHome 23:a50ded45dbaf 149 return (((ReadCommand(0x22) >> 2) & 0x3) + 1) * 16;
WiredHome 19:3f82c1161fd2 150 else
WiredHome 19:3f82c1161fd2 151 return width() / font[1];
WiredHome 19:3f82c1161fd2 152 }
WiredHome 19:3f82c1161fd2 153
WiredHome 19:3f82c1161fd2 154 unsigned int RA8875::fontheight(void)
WiredHome 19:3f82c1161fd2 155 {
WiredHome 19:3f82c1161fd2 156 if (font == NULL)
WiredHome 23:a50ded45dbaf 157 return (((ReadCommand(0x22) >> 0) & 0x3) + 1) * 16;
WiredHome 19:3f82c1161fd2 158 else
WiredHome 19:3f82c1161fd2 159 return height() / font[2];
WiredHome 19:3f82c1161fd2 160 }
WiredHome 19:3f82c1161fd2 161
WiredHome 19:3f82c1161fd2 162 RetCode_t RA8875::locate(unsigned int x, unsigned int y)
WiredHome 19:3f82c1161fd2 163 {
WiredHome 19:3f82c1161fd2 164 return SetTextCursor(x * fontwidth(), y * fontheight());
WiredHome 19:3f82c1161fd2 165 }
WiredHome 19:3f82c1161fd2 166
WiredHome 19:3f82c1161fd2 167 int RA8875::columns(void)
WiredHome 19:3f82c1161fd2 168 {
WiredHome 19:3f82c1161fd2 169 return width() / fontwidth();
WiredHome 19:3f82c1161fd2 170 }
WiredHome 19:3f82c1161fd2 171
WiredHome 19:3f82c1161fd2 172 int RA8875::rows(void)
WiredHome 19:3f82c1161fd2 173 {
WiredHome 19:3f82c1161fd2 174 return height() / fontheight();
WiredHome 19:3f82c1161fd2 175 }
WiredHome 19:3f82c1161fd2 176
WiredHome 19:3f82c1161fd2 177 int RA8875::width(void)
WiredHome 19:3f82c1161fd2 178 {
WiredHome 19:3f82c1161fd2 179 return RA8875_DISPLAY_WIDTH;
WiredHome 19:3f82c1161fd2 180 }
WiredHome 19:3f82c1161fd2 181
WiredHome 19:3f82c1161fd2 182 int RA8875::height(void)
WiredHome 19:3f82c1161fd2 183 {
WiredHome 19:3f82c1161fd2 184 return RA8875_DISPLAY_HEIGHT;
WiredHome 19:3f82c1161fd2 185 }
WiredHome 19:3f82c1161fd2 186
WiredHome 19:3f82c1161fd2 187 RetCode_t RA8875::SetTextCursor(unsigned int x, unsigned int y)
WiredHome 19:3f82c1161fd2 188 {
WiredHome 19:3f82c1161fd2 189 WriteCommand(0x2A, x & 0xFF);
WiredHome 19:3f82c1161fd2 190 WriteCommand(0x2B, x >> 8);
WiredHome 19:3f82c1161fd2 191 WriteCommand(0x2C, y & 0xFF);
WiredHome 19:3f82c1161fd2 192 WriteCommand(0x2D, y >> 8);
WiredHome 19:3f82c1161fd2 193 INFO("SetTextCursor(%d,%d)", x,y);
WiredHome 19:3f82c1161fd2 194 return noerror;
WiredHome 19:3f82c1161fd2 195 }
WiredHome 19:3f82c1161fd2 196
WiredHome 24:8ca861acf12d 197 RetCode_t RA8875::SetTextCursorControl(cursor_t cursor, bool blink)
WiredHome 23:a50ded45dbaf 198 {
WiredHome 23:a50ded45dbaf 199 unsigned char mwcr0 = ReadCommand(0x40) & 0x0F; // retain direction, auto-increase
WiredHome 24:8ca861acf12d 200 unsigned char horz = 0;
WiredHome 24:8ca861acf12d 201 unsigned char vert = 0;
WiredHome 23:a50ded45dbaf 202
WiredHome 24:8ca861acf12d 203 mwcr0 |= 0x80; // text mode
WiredHome 24:8ca861acf12d 204 if (cursor != NOCURSOR)
WiredHome 24:8ca861acf12d 205 mwcr0 |= 0x40; // visible
WiredHome 23:a50ded45dbaf 206 if (blink)
WiredHome 24:8ca861acf12d 207 mwcr0 |= 0x20; // blink
WiredHome 23:a50ded45dbaf 208 WriteCommand(0x40, mwcr0); // configure the cursor
WiredHome 23:a50ded45dbaf 209 WriteCommand(0x41, 0x00); // close the graphics cursor
WiredHome 24:8ca861acf12d 210 WriteCommand(0x44, 0x1f); // The cursor flashing cycle
WiredHome 24:8ca861acf12d 211 switch (cursor) {
WiredHome 24:8ca861acf12d 212 case IBEAM:
WiredHome 24:8ca861acf12d 213 horz = 0x01;
WiredHome 24:8ca861acf12d 214 vert = 0x1F;
WiredHome 24:8ca861acf12d 215 break;
WiredHome 24:8ca861acf12d 216 case UNDER:
WiredHome 24:8ca861acf12d 217 horz = 0x07;
WiredHome 24:8ca861acf12d 218 vert = 0x01;
WiredHome 24:8ca861acf12d 219 break;
WiredHome 24:8ca861acf12d 220 case BLOCK:
WiredHome 24:8ca861acf12d 221 horz = 0x07;
WiredHome 24:8ca861acf12d 222 vert = 0x1F;
WiredHome 24:8ca861acf12d 223 break;
WiredHome 24:8ca861acf12d 224 case NOCURSOR:
WiredHome 24:8ca861acf12d 225 default:
WiredHome 24:8ca861acf12d 226 break;
WiredHome 24:8ca861acf12d 227 }
WiredHome 24:8ca861acf12d 228 WriteCommand(0x4e, horz); // The cursor size horz
WiredHome 24:8ca861acf12d 229 WriteCommand(0x4f, vert); // The cursor size vert
WiredHome 23:a50ded45dbaf 230 return noerror;
WiredHome 23:a50ded45dbaf 231 }
WiredHome 23:a50ded45dbaf 232
WiredHome 19:3f82c1161fd2 233 RetCode_t RA8875::SetTextFont(RA8875::font_t font)
WiredHome 19:3f82c1161fd2 234 {
WiredHome 19:3f82c1161fd2 235 if (/*font >= RA8875::ISO8859_1 && */ font <= RA8875::ISO8859_4) {
WiredHome 19:3f82c1161fd2 236 WriteCommand(0x21, (unsigned int)(font));
WiredHome 19:3f82c1161fd2 237 return noerror;
WiredHome 19:3f82c1161fd2 238 } else {
WiredHome 19:3f82c1161fd2 239 return bad_parameter;
WiredHome 19:3f82c1161fd2 240 }
WiredHome 19:3f82c1161fd2 241 }
WiredHome 19:3f82c1161fd2 242
WiredHome 19:3f82c1161fd2 243 RetCode_t RA8875::SetTextFontControl(fill_t fillit,
WiredHome 19:3f82c1161fd2 244 RA8875::font_angle_t angle,
WiredHome 19:3f82c1161fd2 245 RA8875::HorizontalScale hScale,
WiredHome 19:3f82c1161fd2 246 RA8875::VerticalScale vScale,
WiredHome 19:3f82c1161fd2 247 RA8875::alignment_t alignment)
WiredHome 19:3f82c1161fd2 248 {
WiredHome 19:3f82c1161fd2 249 if (hScale >= 1 && hScale <= 4 &&
WiredHome 19:3f82c1161fd2 250 vScale >= 1 && vScale <= 4) {
WiredHome 19:3f82c1161fd2 251 unsigned char x = 0;
WiredHome 19:3f82c1161fd2 252
WiredHome 19:3f82c1161fd2 253 if (alignment == align_full)
WiredHome 19:3f82c1161fd2 254 x |= 0x80;
WiredHome 19:3f82c1161fd2 255 if (fillit == NOFILL)
WiredHome 19:3f82c1161fd2 256 x |= 0x40;
WiredHome 19:3f82c1161fd2 257 if (angle == rotated)
WiredHome 19:3f82c1161fd2 258 x |= 0x10;
WiredHome 19:3f82c1161fd2 259 x |= ((hScale - 1) << 2);
WiredHome 19:3f82c1161fd2 260 x |= ((vScale - 1) << 0);
WiredHome 19:3f82c1161fd2 261 WriteCommand(0x22, x);
WiredHome 19:3f82c1161fd2 262 return noerror;
WiredHome 19:3f82c1161fd2 263 } else {
WiredHome 19:3f82c1161fd2 264 return bad_parameter;
WiredHome 19:3f82c1161fd2 265 }
WiredHome 19:3f82c1161fd2 266 }
WiredHome 19:3f82c1161fd2 267
WiredHome 19:3f82c1161fd2 268 RetCode_t RA8875::SetTextFontSize(RA8875::HorizontalScale hScale, RA8875::VerticalScale vScale)
WiredHome 19:3f82c1161fd2 269 {
WiredHome 19:3f82c1161fd2 270 unsigned char reg = ReadCommand(0x22);
WiredHome 19:3f82c1161fd2 271
WiredHome 19:3f82c1161fd2 272 if (hScale >= 1 && hScale <= 4 && vScale >= 1 && vScale <= 4) {
WiredHome 19:3f82c1161fd2 273 reg &= 0xF0; // keep the high nibble as is.
WiredHome 19:3f82c1161fd2 274 reg |= ((hScale - 1) << 2);
WiredHome 19:3f82c1161fd2 275 reg |= ((vScale - 1) << 0);
WiredHome 19:3f82c1161fd2 276 WriteCommand(0x22, reg);
WiredHome 19:3f82c1161fd2 277 return noerror;
WiredHome 19:3f82c1161fd2 278 } else {
WiredHome 19:3f82c1161fd2 279 return bad_parameter;
WiredHome 19:3f82c1161fd2 280 }
WiredHome 19:3f82c1161fd2 281 }
WiredHome 19:3f82c1161fd2 282
WiredHome 19:3f82c1161fd2 283 int RA8875::_putc(int c)
WiredHome 19:3f82c1161fd2 284 {
WiredHome 19:3f82c1161fd2 285 if (c) {
WiredHome 19:3f82c1161fd2 286 if (c == '\r') {
WiredHome 19:3f82c1161fd2 287 unsigned int x;
WiredHome 19:3f82c1161fd2 288 x = ReadCommand(0x30) | (ReadCommand(0x31) << 8); // Left edge of active window
WiredHome 19:3f82c1161fd2 289 WriteCommand(0x2A, x & 0xFF);
WiredHome 19:3f82c1161fd2 290 WriteCommand(0x2B, x >> 8);
WiredHome 19:3f82c1161fd2 291 } else if (c == '\n') {
WiredHome 19:3f82c1161fd2 292 unsigned int y;
WiredHome 19:3f82c1161fd2 293 y = ReadCommand(0x2C) | (ReadCommand(0x2D) << 8); // current y location
WiredHome 19:3f82c1161fd2 294 y += fontheight();
WiredHome 19:3f82c1161fd2 295 if (y > height()) // @TODO > active window, then scroll?
WiredHome 19:3f82c1161fd2 296 y = 0;
WiredHome 19:3f82c1161fd2 297 WriteCommand(0x2C, y & 0xFF);
WiredHome 19:3f82c1161fd2 298 WriteCommand(0x2D, y >> 8);
WiredHome 19:3f82c1161fd2 299 } else {
WiredHome 19:3f82c1161fd2 300 if (font == NULL) {
WiredHome 24:8ca861acf12d 301 unsigned char mwcr0 = ReadCommand(0x40);
WiredHome 24:8ca861acf12d 302
WiredHome 24:8ca861acf12d 303 if (mwcr0 & 0x80 == 0x00)
WiredHome 24:8ca861acf12d 304 WriteCommand(0x40,0x80);
WiredHome 19:3f82c1161fd2 305 WriteCommand(0x02);
WiredHome 19:3f82c1161fd2 306 select(true);
WiredHome 19:3f82c1161fd2 307 WriteData(c);
WiredHome 19:3f82c1161fd2 308 while (ReadStatus() & 0x80)
WiredHome 19:3f82c1161fd2 309 wait_us(POLLWAITuSec); // Chk_Busy();
WiredHome 19:3f82c1161fd2 310 select(false);
WiredHome 19:3f82c1161fd2 311 } else {
WiredHome 19:3f82c1161fd2 312 unsigned int x = (ReadCommand(0x2A) | (ReadCommand(0x2B) << 8)) / fontwidth();
WiredHome 19:3f82c1161fd2 313 unsigned int y = (ReadCommand(0x2C) | (ReadCommand(0x2D) << 8)) / fontheight();
WiredHome 19:3f82c1161fd2 314 character(x,y,c);
WiredHome 19:3f82c1161fd2 315 }
WiredHome 19:3f82c1161fd2 316 // @TODO right of active window, then wrap?
WiredHome 19:3f82c1161fd2 317 }
WiredHome 19:3f82c1161fd2 318 }
WiredHome 19:3f82c1161fd2 319 return c;
WiredHome 19:3f82c1161fd2 320 }
WiredHome 19:3f82c1161fd2 321
WiredHome 19:3f82c1161fd2 322 void RA8875::puts(unsigned int x, unsigned int y, const char * string)
WiredHome 19:3f82c1161fd2 323 {
WiredHome 19:3f82c1161fd2 324 SetTextCursor(x,y);
WiredHome 19:3f82c1161fd2 325 puts(string);
WiredHome 19:3f82c1161fd2 326 }
WiredHome 19:3f82c1161fd2 327
WiredHome 19:3f82c1161fd2 328 void RA8875::puts(const char * string)
WiredHome 19:3f82c1161fd2 329 {
WiredHome 19:3f82c1161fd2 330 if (*string != '\0') {
WiredHome 19:3f82c1161fd2 331 INFO("puts(%s)", string);
WiredHome 19:3f82c1161fd2 332 #if 1
WiredHome 19:3f82c1161fd2 333 while (*string) { // @TODO calling individual _putc is slower... anything to do?
WiredHome 19:3f82c1161fd2 334 _putc(*string++);
WiredHome 19:3f82c1161fd2 335 }
WiredHome 19:3f82c1161fd2 336 #else
WiredHome 19:3f82c1161fd2 337 WriteCommand(0x40,0x80); // Put display into text mode
WiredHome 19:3f82c1161fd2 338 WriteCommand(0x02);
WiredHome 19:3f82c1161fd2 339 select(true);
WiredHome 19:3f82c1161fd2 340 while (*string != '\0') {
WiredHome 19:3f82c1161fd2 341 WriteData(*string);
WiredHome 19:3f82c1161fd2 342 ++string;
WiredHome 19:3f82c1161fd2 343 while (ReadStatus() & 0x80)
WiredHome 19:3f82c1161fd2 344 wait_us(POLLWAITuSec); // Chk_Busy();
WiredHome 19:3f82c1161fd2 345 }
WiredHome 19:3f82c1161fd2 346 select(false);
WiredHome 19:3f82c1161fd2 347 #endif
WiredHome 19:3f82c1161fd2 348 }
WiredHome 19:3f82c1161fd2 349 }
WiredHome 19:3f82c1161fd2 350
WiredHome 19:3f82c1161fd2 351 RetCode_t RA8875::SetMemoryCursor(unsigned int x, unsigned int y)
WiredHome 19:3f82c1161fd2 352
WiredHome 19:3f82c1161fd2 353 {
WiredHome 19:3f82c1161fd2 354 WriteCommand(0x46, x & 0xFF);
WiredHome 19:3f82c1161fd2 355 WriteCommand(0x47, x >> 8);
WiredHome 19:3f82c1161fd2 356 WriteCommand(0x48, y & 0xFF);
WiredHome 19:3f82c1161fd2 357 WriteCommand(0x49, y >> 8);
WiredHome 19:3f82c1161fd2 358 return noerror;
WiredHome 19:3f82c1161fd2 359 }
WiredHome 19:3f82c1161fd2 360
WiredHome 19:3f82c1161fd2 361 RetCode_t RA8875::SetWindow(unsigned int x, unsigned int y, unsigned int width, unsigned int height)
WiredHome 19:3f82c1161fd2 362 {
WiredHome 19:3f82c1161fd2 363 WriteCommand(0x30, x & 0xFF); // HSAW0
WiredHome 19:3f82c1161fd2 364 WriteCommand(0x31, x >> 8); // HSAW1
WiredHome 19:3f82c1161fd2 365 WriteCommand(0x32, y & 0xFF); // VSAW0
WiredHome 19:3f82c1161fd2 366 WriteCommand(0x33, y >> 8); // VSAW1
WiredHome 19:3f82c1161fd2 367 WriteCommand(0x34, (x+width-1) & 0xFF); // HEAW0
WiredHome 19:3f82c1161fd2 368 WriteCommand(0x35, (x+width-1) >> 8); // HEAW1
WiredHome 19:3f82c1161fd2 369 WriteCommand(0x36, (y+height-1) & 0xFF); // VEAW0
WiredHome 19:3f82c1161fd2 370 WriteCommand(0x37, (y+height-1) >> 8); // VEAW1
WiredHome 19:3f82c1161fd2 371 return noerror;
WiredHome 19:3f82c1161fd2 372 }
WiredHome 19:3f82c1161fd2 373
WiredHome 19:3f82c1161fd2 374 RetCode_t RA8875::cls(void)
WiredHome 19:3f82c1161fd2 375 {
WiredHome 19:3f82c1161fd2 376 PERFORMANCE_RESET;
WiredHome 19:3f82c1161fd2 377 clsw(FULLWINDOW);
WiredHome 19:3f82c1161fd2 378 REGISTERPERFORMANCE(PRF_CLS);
WiredHome 19:3f82c1161fd2 379 return noerror;
WiredHome 19:3f82c1161fd2 380 }
WiredHome 19:3f82c1161fd2 381
WiredHome 19:3f82c1161fd2 382 RetCode_t RA8875::clsw(RA8875::Region_t region)
WiredHome 19:3f82c1161fd2 383 {
WiredHome 19:3f82c1161fd2 384 PERFORMANCE_RESET;
WiredHome 19:3f82c1161fd2 385 WriteCommand(0x8E, (region == ACTIVEWINDOW) ? 0xC0 : 0x80);
WiredHome 19:3f82c1161fd2 386 while (ReadCommand(0x8E) & 0x80)
WiredHome 19:3f82c1161fd2 387 wait_us(POLLWAITuSec);
WiredHome 19:3f82c1161fd2 388 REGISTERPERFORMANCE(PRF_CLS);
WiredHome 19:3f82c1161fd2 389 return noerror;
WiredHome 19:3f82c1161fd2 390 }
WiredHome 19:3f82c1161fd2 391
WiredHome 19:3f82c1161fd2 392 RetCode_t RA8875::pixel(unsigned int x, unsigned int y, color_t color)
WiredHome 19:3f82c1161fd2 393 {
WiredHome 19:3f82c1161fd2 394 foreground(color);
WiredHome 19:3f82c1161fd2 395 return pixel(x,y);
WiredHome 19:3f82c1161fd2 396 }
WiredHome 19:3f82c1161fd2 397
WiredHome 19:3f82c1161fd2 398 RetCode_t RA8875::pixel(unsigned int x, unsigned int y)
WiredHome 19:3f82c1161fd2 399 {
WiredHome 19:3f82c1161fd2 400 RetCode_t ret;
WiredHome 19:3f82c1161fd2 401
WiredHome 19:3f82c1161fd2 402 PERFORMANCE_RESET;
WiredHome 19:3f82c1161fd2 403 #if 1
WiredHome 19:3f82c1161fd2 404 color_t color = GetForeColor();
WiredHome 19:3f82c1161fd2 405 WriteCommand(0x40,0x00); // Graphics write mode
WiredHome 19:3f82c1161fd2 406 SetMemoryCursor(x, y);
WiredHome 19:3f82c1161fd2 407 WriteCommand(0x02); //start data write
WiredHome 19:3f82c1161fd2 408 WriteData(color & 0xFF);
WiredHome 19:3f82c1161fd2 409 WriteData(color >> 8);
WiredHome 19:3f82c1161fd2 410 ret = noerror;
WiredHome 19:3f82c1161fd2 411 #else
WiredHome 19:3f82c1161fd2 412 // There isn't actually a set pixel function that I found
WiredHome 19:3f82c1161fd2 413 // so we'll emulate it as we can.
WiredHome 19:3f82c1161fd2 414 ret = line(x,y, x,y);
WiredHome 19:3f82c1161fd2 415 #endif
WiredHome 19:3f82c1161fd2 416 REGISTERPERFORMANCE(PRF_DRAWPOINT);
WiredHome 19:3f82c1161fd2 417 return ret;
WiredHome 19:3f82c1161fd2 418 }
WiredHome 19:3f82c1161fd2 419
WiredHome 19:3f82c1161fd2 420 RetCode_t RA8875::line(unsigned int x1, unsigned int y1, unsigned int x2, unsigned int y2, color_t color)
WiredHome 19:3f82c1161fd2 421 {
WiredHome 19:3f82c1161fd2 422 foreground(color);
WiredHome 19:3f82c1161fd2 423 return line(x1,y1,x2,y2);
WiredHome 19:3f82c1161fd2 424 }
WiredHome 19:3f82c1161fd2 425
WiredHome 19:3f82c1161fd2 426 RetCode_t RA8875::line(unsigned int x1, unsigned int y1, unsigned int x2, unsigned int y2)
WiredHome 19:3f82c1161fd2 427 {
WiredHome 19:3f82c1161fd2 428 PERFORMANCE_RESET;
WiredHome 19:3f82c1161fd2 429 WriteCommand(0x91, x1 & 0xFF);
WiredHome 19:3f82c1161fd2 430 WriteCommand(0x92, x1 >> 8);
WiredHome 19:3f82c1161fd2 431 WriteCommand(0x93, y1 & 0xFF);
WiredHome 19:3f82c1161fd2 432 WriteCommand(0x94, y1 >> 8);
WiredHome 19:3f82c1161fd2 433 WriteCommand(0x95, x2 & 0xFF);
WiredHome 19:3f82c1161fd2 434 WriteCommand(0x96, x2 >> 8);
WiredHome 19:3f82c1161fd2 435 WriteCommand(0x97, y2 & 0xFF);
WiredHome 19:3f82c1161fd2 436 WriteCommand(0x98, y2 >> 8);
WiredHome 19:3f82c1161fd2 437
WiredHome 19:3f82c1161fd2 438 unsigned char drawCmd = 0x00; // Line
WiredHome 19:3f82c1161fd2 439 WriteCommand(0x90, drawCmd);
WiredHome 19:3f82c1161fd2 440 WriteCommand(0x90, 0x80 + drawCmd); // Start drawing.
WiredHome 19:3f82c1161fd2 441 while (ReadCommand(0x90) & 0x80) // await completion.
WiredHome 19:3f82c1161fd2 442 wait_us(POLLWAITuSec);
WiredHome 19:3f82c1161fd2 443 REGISTERPERFORMANCE(PRF_DRAWLINE);
WiredHome 19:3f82c1161fd2 444 return noerror;
WiredHome 19:3f82c1161fd2 445 }
WiredHome 19:3f82c1161fd2 446
WiredHome 19:3f82c1161fd2 447 RetCode_t RA8875::fillrect(unsigned int x1, unsigned int y1, unsigned int x2, unsigned int y2,
WiredHome 19:3f82c1161fd2 448 color_t color, fill_t fillit)
WiredHome 19:3f82c1161fd2 449 {
WiredHome 19:3f82c1161fd2 450 return rect(x1,y1,x2,y2,color,fillit);
WiredHome 19:3f82c1161fd2 451 }
WiredHome 19:3f82c1161fd2 452
WiredHome 19:3f82c1161fd2 453 RetCode_t RA8875::rect(unsigned int x1, unsigned int y1, unsigned int x2, unsigned int y2,
WiredHome 19:3f82c1161fd2 454 color_t color, fill_t fillit)
WiredHome 19:3f82c1161fd2 455 {
WiredHome 19:3f82c1161fd2 456 foreground(color);
WiredHome 19:3f82c1161fd2 457 return rect(x1,y1,x2,y2,fillit);
WiredHome 19:3f82c1161fd2 458 }
WiredHome 19:3f82c1161fd2 459
WiredHome 19:3f82c1161fd2 460 RetCode_t RA8875::rect(unsigned int x1, unsigned int y1, unsigned int x2, unsigned int y2,
WiredHome 19:3f82c1161fd2 461 fill_t fillit)
WiredHome 19:3f82c1161fd2 462 {
WiredHome 19:3f82c1161fd2 463 PERFORMANCE_RESET;
WiredHome 19:3f82c1161fd2 464 if (x1 == x2 && y1 == y2) {
WiredHome 19:3f82c1161fd2 465 pixel(x1, y1);
WiredHome 19:3f82c1161fd2 466 } else if (x1 == x2) {
WiredHome 19:3f82c1161fd2 467 line(x1, y1, x2, y2);
WiredHome 19:3f82c1161fd2 468 } else if (y1 == y2) {
WiredHome 19:3f82c1161fd2 469 line(x1, y1, x2, y2);
WiredHome 19:3f82c1161fd2 470 } else {
WiredHome 19:3f82c1161fd2 471 WriteCommand(0x91, x1 & 0xFF);
WiredHome 19:3f82c1161fd2 472 WriteCommand(0x92, x1 >> 8);
WiredHome 19:3f82c1161fd2 473 WriteCommand(0x93, y1 & 0xFF);
WiredHome 19:3f82c1161fd2 474 WriteCommand(0x94, y1 >> 8);
WiredHome 19:3f82c1161fd2 475 WriteCommand(0x95, x2 & 0xFF);
WiredHome 19:3f82c1161fd2 476 WriteCommand(0x96, x2 >> 8);
WiredHome 19:3f82c1161fd2 477 WriteCommand(0x97, y2 & 0xFF);
WiredHome 19:3f82c1161fd2 478 WriteCommand(0x98, y2 >> 8);
WiredHome 19:3f82c1161fd2 479
WiredHome 19:3f82c1161fd2 480 unsigned char drawCmd = 0x10; // Rectangle
WiredHome 19:3f82c1161fd2 481 if (fillit == FILL)
WiredHome 19:3f82c1161fd2 482 drawCmd |= 0x20;
WiredHome 19:3f82c1161fd2 483 WriteCommand(0x90, drawCmd);
WiredHome 19:3f82c1161fd2 484 WriteCommand(0x90, 0x80 + drawCmd); // Start drawing.
WiredHome 19:3f82c1161fd2 485 while (ReadCommand(0x90) & 0x80) // await completion.
WiredHome 19:3f82c1161fd2 486 wait_us(POLLWAITuSec);
WiredHome 19:3f82c1161fd2 487 }
WiredHome 19:3f82c1161fd2 488 REGISTERPERFORMANCE(PRF_DRAWRECTANGLE);
WiredHome 19:3f82c1161fd2 489 return noerror;
WiredHome 19:3f82c1161fd2 490 }
WiredHome 19:3f82c1161fd2 491
WiredHome 19:3f82c1161fd2 492 RetCode_t RA8875::fillroundrect(unsigned int x1, unsigned int y1, unsigned int x2, unsigned int y2,
WiredHome 19:3f82c1161fd2 493 unsigned int radius1, unsigned int radius2, color_t color, fill_t fillit)
WiredHome 19:3f82c1161fd2 494 {
WiredHome 19:3f82c1161fd2 495 foreground(color);
WiredHome 19:3f82c1161fd2 496 return roundrect(x1,y1,x2,y2,radius1,radius2,fillit);
WiredHome 19:3f82c1161fd2 497 }
WiredHome 19:3f82c1161fd2 498
WiredHome 19:3f82c1161fd2 499 RetCode_t RA8875::roundrect(unsigned int x1, unsigned int y1, unsigned int x2, unsigned int y2,
WiredHome 19:3f82c1161fd2 500 unsigned int radius1, unsigned int radius2, color_t color, fill_t fillit)
WiredHome 19:3f82c1161fd2 501 {
WiredHome 19:3f82c1161fd2 502 foreground(color);
WiredHome 19:3f82c1161fd2 503 return roundrect(x1,y1,x2,y2,radius1,radius2,fillit);
WiredHome 19:3f82c1161fd2 504 }
WiredHome 19:3f82c1161fd2 505
WiredHome 21:3c1efb192927 506 RetCode_t RA8875::roundrect(unsigned int x1, unsigned int y1, unsigned int x2, unsigned int y2,
WiredHome 19:3f82c1161fd2 507 unsigned int radius1, unsigned int radius2, fill_t fillit)
WiredHome 19:3f82c1161fd2 508 {
WiredHome 19:3f82c1161fd2 509 RetCode_t ret = noerror;
WiredHome 19:3f82c1161fd2 510
WiredHome 19:3f82c1161fd2 511 PERFORMANCE_RESET;
WiredHome 21:3c1efb192927 512 if (x1 > x2 || y1 > y2 || (radius1 > (x2-x1)/2) || (radius2 > (y2-y1)/2) ) {
WiredHome 21:3c1efb192927 513 ret = bad_parameter;
WiredHome 21:3c1efb192927 514 } else if (x1 == x2 && y1 == y2) {
WiredHome 19:3f82c1161fd2 515 pixel(x1, y1);
WiredHome 19:3f82c1161fd2 516 } else if (x1 == x2) {
WiredHome 19:3f82c1161fd2 517 line(x1, y1, x2, y2);
WiredHome 19:3f82c1161fd2 518 } else if (y1 == y2) {
WiredHome 19:3f82c1161fd2 519 line(x1, y1, x2, y2);
WiredHome 19:3f82c1161fd2 520 } else {
WiredHome 19:3f82c1161fd2 521 WriteCommand(0x91, x1 & 0xFF);
WiredHome 19:3f82c1161fd2 522 WriteCommand(0x92, x1 >> 8);
WiredHome 19:3f82c1161fd2 523 WriteCommand(0x93, y1 & 0xFF);
WiredHome 19:3f82c1161fd2 524 WriteCommand(0x94, y1 >> 8);
WiredHome 19:3f82c1161fd2 525 WriteCommand(0x95, x2 & 0xFF);
WiredHome 19:3f82c1161fd2 526 WriteCommand(0x96, x2 >> 8);
WiredHome 19:3f82c1161fd2 527 WriteCommand(0x97, y2 & 0xFF);
WiredHome 19:3f82c1161fd2 528 WriteCommand(0x98, y2 >> 8);
WiredHome 19:3f82c1161fd2 529
WiredHome 19:3f82c1161fd2 530 WriteCommand(0xA1, radius1 & 0xFF);
WiredHome 19:3f82c1161fd2 531 WriteCommand(0xA2, radius1 >> 8);
WiredHome 19:3f82c1161fd2 532 WriteCommand(0xA3, radius2 & 0xFF);
WiredHome 19:3f82c1161fd2 533 WriteCommand(0xA4, radius2 >> 8);
WiredHome 21:3c1efb192927 534
WiredHome 21:3c1efb192927 535 // Should not need this...
WiredHome 21:3c1efb192927 536 WriteCommand(0xA5, 0 & 0xFF);
WiredHome 21:3c1efb192927 537 WriteCommand(0xA6, 0 >> 8);
WiredHome 21:3c1efb192927 538 WriteCommand(0xA7, 0 & 0xFF);
WiredHome 21:3c1efb192927 539 WriteCommand(0xA8, 0 >> 8);
WiredHome 19:3f82c1161fd2 540
WiredHome 19:3f82c1161fd2 541 unsigned char drawCmd = 0x20; // Rounded Rectangle
WiredHome 19:3f82c1161fd2 542 if (fillit == FILL)
WiredHome 19:3f82c1161fd2 543 drawCmd |= 0x40;
WiredHome 19:3f82c1161fd2 544 WriteCommand(0xA0, drawCmd);
WiredHome 19:3f82c1161fd2 545 WriteCommand(0xA0, 0x80 + drawCmd); // Start drawing.
WiredHome 19:3f82c1161fd2 546 while (ReadCommand(0xA0) & 0x80) { // await completion.
WiredHome 19:3f82c1161fd2 547 wait_us(POLLWAITuSec);
WiredHome 21:3c1efb192927 548 }
WiredHome 19:3f82c1161fd2 549 }
WiredHome 19:3f82c1161fd2 550 REGISTERPERFORMANCE(PRF_DRAWROUNDEDRECTANGLE);
WiredHome 19:3f82c1161fd2 551 return ret;
WiredHome 19:3f82c1161fd2 552 }
WiredHome 19:3f82c1161fd2 553
WiredHome 19:3f82c1161fd2 554 RetCode_t RA8875::triangle(unsigned int x1, unsigned int y1, unsigned int x2, unsigned int y2,
WiredHome 19:3f82c1161fd2 555 unsigned int x3, unsigned int y3, color_t color, fill_t fillit)
WiredHome 19:3f82c1161fd2 556 {
WiredHome 20:6e2e4a8372eb 557 RetCode_t ret;
WiredHome 20:6e2e4a8372eb 558
WiredHome 19:3f82c1161fd2 559 foreground(color);
WiredHome 20:6e2e4a8372eb 560 ret = triangle(x1,y1,x2,y2,x3,y3,fillit);
WiredHome 20:6e2e4a8372eb 561 return ret;
WiredHome 19:3f82c1161fd2 562 }
WiredHome 19:3f82c1161fd2 563
WiredHome 19:3f82c1161fd2 564 RetCode_t RA8875::filltriangle(unsigned int x1, unsigned int y1, unsigned int x2, unsigned int y2,
WiredHome 19:3f82c1161fd2 565 unsigned int x3, unsigned int y3, color_t color, fill_t fillit)
WiredHome 19:3f82c1161fd2 566 {
WiredHome 20:6e2e4a8372eb 567 RetCode_t ret;
WiredHome 20:6e2e4a8372eb 568
WiredHome 19:3f82c1161fd2 569 foreground(color);
WiredHome 20:6e2e4a8372eb 570 ret = triangle(x1,y1,x2,y2,x3,y3,fillit);
WiredHome 20:6e2e4a8372eb 571 return ret;
WiredHome 19:3f82c1161fd2 572 }
WiredHome 19:3f82c1161fd2 573
WiredHome 19:3f82c1161fd2 574 RetCode_t RA8875::triangle(unsigned int x1, unsigned int y1 ,unsigned int x2, unsigned int y2,
WiredHome 19:3f82c1161fd2 575 unsigned int x3, unsigned int y3, fill_t fillit)
WiredHome 19:3f82c1161fd2 576 {
WiredHome 19:3f82c1161fd2 577 RetCode_t ret = noerror;
WiredHome 19:3f82c1161fd2 578
WiredHome 19:3f82c1161fd2 579 PERFORMANCE_RESET;
WiredHome 19:3f82c1161fd2 580 if (x1 == x2 && y1 == y2 && x1 == x3 && y1 == y3) {
WiredHome 19:3f82c1161fd2 581 pixel(x1, y1);
WiredHome 19:3f82c1161fd2 582 } else {
WiredHome 19:3f82c1161fd2 583 WriteCommand(0x91, x1 & 0xFF);
WiredHome 19:3f82c1161fd2 584 WriteCommand(0x92, x1 >> 8);
WiredHome 19:3f82c1161fd2 585 WriteCommand(0x93, y1 & 0xFF);
WiredHome 19:3f82c1161fd2 586 WriteCommand(0x94, y1 >> 8);
WiredHome 19:3f82c1161fd2 587
WiredHome 19:3f82c1161fd2 588 WriteCommand(0x95, x2 & 0xFF);
WiredHome 19:3f82c1161fd2 589 WriteCommand(0x96, x2 >> 8);
WiredHome 19:3f82c1161fd2 590 WriteCommand(0x97, y2 & 0xFF);
WiredHome 19:3f82c1161fd2 591 WriteCommand(0x98, y2 >> 8);
WiredHome 19:3f82c1161fd2 592
WiredHome 19:3f82c1161fd2 593 WriteCommand(0xA9, x3 & 0xFF);
WiredHome 19:3f82c1161fd2 594 WriteCommand(0xAA, x3 >> 8);
WiredHome 19:3f82c1161fd2 595 WriteCommand(0xAB, y3 & 0xFF);
WiredHome 19:3f82c1161fd2 596 WriteCommand(0xAC, y3 >> 8);
WiredHome 19:3f82c1161fd2 597
WiredHome 19:3f82c1161fd2 598 unsigned char drawCmd = 0x01; // Triangle
WiredHome 19:3f82c1161fd2 599 if (fillit == FILL)
WiredHome 19:3f82c1161fd2 600 drawCmd |= 0x20;
WiredHome 19:3f82c1161fd2 601 WriteCommand(0x90, drawCmd);
WiredHome 19:3f82c1161fd2 602 WriteCommand(0x90, 0x80 + drawCmd); // Start drawing.
WiredHome 19:3f82c1161fd2 603 while (ReadCommand(0x90) & 0x80) // await completion.
WiredHome 19:3f82c1161fd2 604 wait_us(POLLWAITuSec);
WiredHome 19:3f82c1161fd2 605 }
WiredHome 19:3f82c1161fd2 606 REGISTERPERFORMANCE(PRF_DRAWTRIANGLE);
WiredHome 19:3f82c1161fd2 607 return ret;
WiredHome 19:3f82c1161fd2 608 }
WiredHome 19:3f82c1161fd2 609
WiredHome 19:3f82c1161fd2 610 RetCode_t RA8875::circle(unsigned int x, unsigned int y, unsigned int radius,
WiredHome 19:3f82c1161fd2 611 color_t color, fill_t fillit)
WiredHome 19:3f82c1161fd2 612 {
WiredHome 19:3f82c1161fd2 613 foreground(color);
WiredHome 19:3f82c1161fd2 614 return circle(x,y,radius,fillit);
WiredHome 19:3f82c1161fd2 615 }
WiredHome 19:3f82c1161fd2 616
WiredHome 19:3f82c1161fd2 617 RetCode_t RA8875::fillcircle(unsigned int x, unsigned int y, unsigned int radius,
WiredHome 19:3f82c1161fd2 618 color_t color, fill_t fillit)
WiredHome 19:3f82c1161fd2 619 {
WiredHome 19:3f82c1161fd2 620 foreground(color);
WiredHome 19:3f82c1161fd2 621 return circle(x,y,radius,fillit);
WiredHome 19:3f82c1161fd2 622 }
WiredHome 19:3f82c1161fd2 623
WiredHome 19:3f82c1161fd2 624 RetCode_t RA8875::circle(unsigned int x, unsigned int y, unsigned int radius, fill_t fillit)
WiredHome 19:3f82c1161fd2 625 {
WiredHome 19:3f82c1161fd2 626 RetCode_t ret = noerror;
WiredHome 19:3f82c1161fd2 627
WiredHome 19:3f82c1161fd2 628 PERFORMANCE_RESET;
WiredHome 19:3f82c1161fd2 629 if (radius <= 0) {
WiredHome 19:3f82c1161fd2 630 ret = bad_parameter;
WiredHome 19:3f82c1161fd2 631 } else if (radius == 1) {
WiredHome 19:3f82c1161fd2 632 pixel(x,y);
WiredHome 19:3f82c1161fd2 633 } else {
WiredHome 19:3f82c1161fd2 634 WriteCommand(0x99, x & 0xFF);
WiredHome 19:3f82c1161fd2 635 WriteCommand(0x9a, x >> 8);
WiredHome 19:3f82c1161fd2 636 WriteCommand(0x9b, y & 0xFF);
WiredHome 19:3f82c1161fd2 637 WriteCommand(0x9c, y >> 8);
WiredHome 19:3f82c1161fd2 638 WriteCommand(0x9d, radius & 0xFF);
WiredHome 19:3f82c1161fd2 639
WiredHome 19:3f82c1161fd2 640 unsigned char drawCmd = 0x00; // Circle
WiredHome 19:3f82c1161fd2 641 if (fillit == FILL)
WiredHome 19:3f82c1161fd2 642 drawCmd |= 0x20;
WiredHome 19:3f82c1161fd2 643 WriteCommand(0x90, drawCmd);
WiredHome 19:3f82c1161fd2 644 WriteCommand(0x90, 0x40 + drawCmd); // Start drawing.
WiredHome 19:3f82c1161fd2 645 while (ReadCommand(0x90) & 0x40) // await completion.
WiredHome 19:3f82c1161fd2 646 wait_us(POLLWAITuSec);
WiredHome 19:3f82c1161fd2 647 }
WiredHome 19:3f82c1161fd2 648 REGISTERPERFORMANCE(PRF_DRAWCIRCLE);
WiredHome 19:3f82c1161fd2 649 return ret;
WiredHome 19:3f82c1161fd2 650 }
WiredHome 19:3f82c1161fd2 651
WiredHome 25:9556a3a9b7cc 652 RetCode_t RA8875::ellipse(unsigned int x, unsigned int y, unsigned int radius1, unsigned int radius2, color_t color, fill_t fillit)
WiredHome 19:3f82c1161fd2 653 {
WiredHome 19:3f82c1161fd2 654 foreground(color);
WiredHome 25:9556a3a9b7cc 655 return ellipse(x,y,radius1,radius2,fillit);
WiredHome 19:3f82c1161fd2 656 }
WiredHome 19:3f82c1161fd2 657
WiredHome 25:9556a3a9b7cc 658 RetCode_t RA8875::fillellipse(unsigned int x, unsigned int y, unsigned int radius1, unsigned int radius2, color_t color, fill_t fillit)
WiredHome 25:9556a3a9b7cc 659 {
WiredHome 25:9556a3a9b7cc 660 foreground(color);
WiredHome 25:9556a3a9b7cc 661 return ellipse(x,y,radius1,radius2,fillit);
WiredHome 25:9556a3a9b7cc 662 }
WiredHome 25:9556a3a9b7cc 663
WiredHome 25:9556a3a9b7cc 664 RetCode_t RA8875::ellipse(unsigned int x, unsigned int y, unsigned int radius1, unsigned int radius2, fill_t fillit)
WiredHome 19:3f82c1161fd2 665 {
WiredHome 19:3f82c1161fd2 666 RetCode_t ret = noerror;
WiredHome 19:3f82c1161fd2 667
WiredHome 19:3f82c1161fd2 668 PERFORMANCE_RESET;
WiredHome 25:9556a3a9b7cc 669 if (radius1 <= 0 || radius2 <= 0) {
WiredHome 19:3f82c1161fd2 670 ; // do nothing
WiredHome 25:9556a3a9b7cc 671 } else if (radius1 == 1 && radius2 == 1) {
WiredHome 19:3f82c1161fd2 672 pixel(x, y);
WiredHome 19:3f82c1161fd2 673 } else {
WiredHome 19:3f82c1161fd2 674 WriteCommand(0xA5, x & 0xFF);
WiredHome 19:3f82c1161fd2 675 WriteCommand(0xA6, x >> 8);
WiredHome 19:3f82c1161fd2 676 WriteCommand(0xA7, y & 0xFF);
WiredHome 19:3f82c1161fd2 677 WriteCommand(0xA8, y >> 8);
WiredHome 25:9556a3a9b7cc 678 WriteCommand(0xA1, radius1 & 0xFF);
WiredHome 25:9556a3a9b7cc 679 WriteCommand(0xA2, radius1 >> 8);
WiredHome 25:9556a3a9b7cc 680 WriteCommand(0xA3, radius2 & 0xFF);
WiredHome 25:9556a3a9b7cc 681 WriteCommand(0xA4, radius2 >> 8);
WiredHome 19:3f82c1161fd2 682
WiredHome 19:3f82c1161fd2 683 unsigned char drawCmd = 0x00; // Ellipse
WiredHome 19:3f82c1161fd2 684 if (fillit == FILL)
WiredHome 19:3f82c1161fd2 685 drawCmd |= 0x40;
WiredHome 19:3f82c1161fd2 686 WriteCommand(0xA0, drawCmd);
WiredHome 19:3f82c1161fd2 687 WriteCommand(0xA0, 0x80 + drawCmd); // Start drawing.
WiredHome 19:3f82c1161fd2 688 while (ReadCommand(0xA0) & 0x80) // await completion.
WiredHome 19:3f82c1161fd2 689 wait_us(POLLWAITuSec);
WiredHome 19:3f82c1161fd2 690 }
WiredHome 19:3f82c1161fd2 691 REGISTERPERFORMANCE(PRF_DRAWELLIPSE);
WiredHome 19:3f82c1161fd2 692 return ret;
WiredHome 19:3f82c1161fd2 693 }
WiredHome 19:3f82c1161fd2 694
WiredHome 19:3f82c1161fd2 695
WiredHome 19:3f82c1161fd2 696 RetCode_t RA8875::frequency(unsigned long Hz)
WiredHome 19:3f82c1161fd2 697 {
WiredHome 19:3f82c1161fd2 698 spi.frequency(Hz);
WiredHome 19:3f82c1161fd2 699 // __ ___
WiredHome 19:3f82c1161fd2 700 // Clock ___A Rising edge latched
WiredHome 19:3f82c1161fd2 701 // ___ ____
WiredHome 19:3f82c1161fd2 702 // Data ___X____
WiredHome 19:3f82c1161fd2 703 spi.format(8, 3); // 8 bits and clock to data phase 0
WiredHome 19:3f82c1161fd2 704 init();
WiredHome 19:3f82c1161fd2 705 return noerror;
WiredHome 19:3f82c1161fd2 706 }
WiredHome 19:3f82c1161fd2 707
WiredHome 19:3f82c1161fd2 708 RetCode_t RA8875::Power(bool on)
WiredHome 19:3f82c1161fd2 709 {
WiredHome 19:3f82c1161fd2 710 WriteCommand(0x01, (on) ? 0x80 : 0x00);
WiredHome 19:3f82c1161fd2 711 return noerror;
WiredHome 19:3f82c1161fd2 712 }
WiredHome 19:3f82c1161fd2 713
WiredHome 19:3f82c1161fd2 714 RetCode_t RA8875::Reset(void)
WiredHome 19:3f82c1161fd2 715 {
WiredHome 19:3f82c1161fd2 716 WriteCommand(0x01, 0x01); // Apply Display Off, Reset
WiredHome 19:3f82c1161fd2 717 wait_ms(2); // no idea if I need to wait, or how long
WiredHome 19:3f82c1161fd2 718 WriteCommand(0x01, 0x00); // Display off, Remove reset
WiredHome 19:3f82c1161fd2 719 wait_ms(2); // no idea if I need to wait, or how long
WiredHome 19:3f82c1161fd2 720 init();
WiredHome 19:3f82c1161fd2 721 return noerror;
WiredHome 19:3f82c1161fd2 722 }
WiredHome 19:3f82c1161fd2 723
WiredHome 19:3f82c1161fd2 724
WiredHome 19:3f82c1161fd2 725 RetCode_t RA8875::Backlight_u8(unsigned char brightness)
WiredHome 19:3f82c1161fd2 726 {
WiredHome 19:3f82c1161fd2 727 static bool is_enabled = false;
WiredHome 19:3f82c1161fd2 728 if (brightness == 0) {
WiredHome 19:3f82c1161fd2 729 WriteCommand(0x8a); // Disable the PWM
WiredHome 19:3f82c1161fd2 730 WriteData(0x00);
WiredHome 19:3f82c1161fd2 731 is_enabled = false;
WiredHome 19:3f82c1161fd2 732 } else if (!is_enabled) {
WiredHome 19:3f82c1161fd2 733 WriteCommand(0x8a); // Enable the PWM
WiredHome 19:3f82c1161fd2 734 WriteData(0x80);
WiredHome 19:3f82c1161fd2 735 WriteCommand(0x8a); // Not sure why this is needed, but following the pattern
WiredHome 19:3f82c1161fd2 736 WriteData(0x81); // open PWM (SYS_CLK / 2 as best I can tell)
WiredHome 19:3f82c1161fd2 737 is_enabled = true;
WiredHome 19:3f82c1161fd2 738 }
WiredHome 19:3f82c1161fd2 739 WriteCommand(0x8b, brightness); // Brightness parameter 0xff-0x00
WiredHome 19:3f82c1161fd2 740 return noerror;
WiredHome 19:3f82c1161fd2 741 }
WiredHome 19:3f82c1161fd2 742
WiredHome 19:3f82c1161fd2 743 RetCode_t RA8875::Backlight(float brightness)
WiredHome 19:3f82c1161fd2 744 {
WiredHome 19:3f82c1161fd2 745 unsigned char b;
WiredHome 19:3f82c1161fd2 746
WiredHome 19:3f82c1161fd2 747 if (brightness > 1.0)
WiredHome 19:3f82c1161fd2 748 b = 255;
WiredHome 19:3f82c1161fd2 749 else if (brightness < 0)
WiredHome 19:3f82c1161fd2 750 b = 0;
WiredHome 19:3f82c1161fd2 751 else
WiredHome 19:3f82c1161fd2 752 b = (unsigned char)(brightness * 255);
WiredHome 19:3f82c1161fd2 753 return Backlight_u8(b);
WiredHome 19:3f82c1161fd2 754 }
WiredHome 19:3f82c1161fd2 755
WiredHome 19:3f82c1161fd2 756
WiredHome 19:3f82c1161fd2 757 RetCode_t RA8875::set_font(const unsigned char * _font)
WiredHome 19:3f82c1161fd2 758 {
WiredHome 19:3f82c1161fd2 759 font = _font;
WiredHome 19:3f82c1161fd2 760 return noerror; // trusting them, but we could put some checks in here...
WiredHome 19:3f82c1161fd2 761 }
WiredHome 19:3f82c1161fd2 762
WiredHome 19:3f82c1161fd2 763 RetCode_t RA8875::background(color_t color)
WiredHome 19:3f82c1161fd2 764 {
WiredHome 19:3f82c1161fd2 765 WriteCommand(0x60, (color>>11)); // BGCR0
WiredHome 19:3f82c1161fd2 766 WriteCommand(0x61, (unsigned char)(color>>5)); // BGCR0
WiredHome 19:3f82c1161fd2 767 WriteCommand(0x62, (unsigned char)(color)); // BGCR0
WiredHome 19:3f82c1161fd2 768 return noerror;
WiredHome 19:3f82c1161fd2 769 }
WiredHome 19:3f82c1161fd2 770
WiredHome 19:3f82c1161fd2 771 RetCode_t RA8875::background(unsigned char r, unsigned char g, unsigned char b)
WiredHome 19:3f82c1161fd2 772 {
WiredHome 19:3f82c1161fd2 773 WriteCommand(0x60, r);
WiredHome 19:3f82c1161fd2 774 WriteCommand(0x61, g);
WiredHome 19:3f82c1161fd2 775 WriteCommand(0x62, b);
WiredHome 19:3f82c1161fd2 776 return noerror;
WiredHome 19:3f82c1161fd2 777 }
WiredHome 19:3f82c1161fd2 778
WiredHome 19:3f82c1161fd2 779 RetCode_t RA8875::foreground(color_t color)
WiredHome 19:3f82c1161fd2 780 {
WiredHome 19:3f82c1161fd2 781 WriteCommand(0x63, (unsigned char)(color>>11));
WiredHome 19:3f82c1161fd2 782 WriteCommand(0x64, (unsigned char)(color>>5));
WiredHome 19:3f82c1161fd2 783 WriteCommand(0x65, (unsigned char)(color));
WiredHome 19:3f82c1161fd2 784 return noerror;
WiredHome 19:3f82c1161fd2 785 }
WiredHome 19:3f82c1161fd2 786
WiredHome 19:3f82c1161fd2 787 RetCode_t RA8875::foreground(unsigned char setR, unsigned char setG, unsigned char setB)
WiredHome 19:3f82c1161fd2 788 {
WiredHome 19:3f82c1161fd2 789 WriteCommand(0x63, setR);
WiredHome 19:3f82c1161fd2 790 WriteCommand(0x64, setG);
WiredHome 19:3f82c1161fd2 791 WriteCommand(0x65, setB);
WiredHome 19:3f82c1161fd2 792 return noerror;
WiredHome 19:3f82c1161fd2 793 }
WiredHome 19:3f82c1161fd2 794
WiredHome 19:3f82c1161fd2 795 unsigned int RA8875::GetForeColor(void)
WiredHome 19:3f82c1161fd2 796 {
WiredHome 19:3f82c1161fd2 797 color_t color;
WiredHome 19:3f82c1161fd2 798
WiredHome 19:3f82c1161fd2 799 color = (ReadCommand(0x63) & 0x1F) << 11;
WiredHome 19:3f82c1161fd2 800 color |= (ReadCommand(0x64) & 0x3F) << 5;
WiredHome 19:3f82c1161fd2 801 color |= (ReadCommand(0x65) & 0x1F);
WiredHome 19:3f82c1161fd2 802 return color;
WiredHome 19:3f82c1161fd2 803 }
WiredHome 19:3f82c1161fd2 804
WiredHome 19:3f82c1161fd2 805 color_t RA8875::DOSColor(int i)
WiredHome 19:3f82c1161fd2 806 {
WiredHome 19:3f82c1161fd2 807 const color_t colors[16] =
WiredHome 19:3f82c1161fd2 808 {
WiredHome 19:3f82c1161fd2 809 Black, Blue, Green, Cyan,
WiredHome 19:3f82c1161fd2 810 Red, Magenta, Brown, Gray,
WiredHome 19:3f82c1161fd2 811 Charcoal, BrightBlue, BrightGreen, BrightCyan,
WiredHome 19:3f82c1161fd2 812 Orange, Pink, Yellow, White
WiredHome 19:3f82c1161fd2 813 };
WiredHome 19:3f82c1161fd2 814 if (i < 16)
WiredHome 19:3f82c1161fd2 815 return colors[i];
WiredHome 19:3f82c1161fd2 816 else
WiredHome 19:3f82c1161fd2 817 return 0;
WiredHome 19:3f82c1161fd2 818 }
WiredHome 19:3f82c1161fd2 819
WiredHome 19:3f82c1161fd2 820 const char * RA8875::DOSColorNames(int i)
WiredHome 19:3f82c1161fd2 821 {
WiredHome 19:3f82c1161fd2 822 const char * names[16] =
WiredHome 19:3f82c1161fd2 823 {
WiredHome 19:3f82c1161fd2 824 "Black", "Blue", "Green", "Cyan",
WiredHome 19:3f82c1161fd2 825 "Red", "Magenta", "Brown", "Gray",
WiredHome 19:3f82c1161fd2 826 "Charcoal", "BrightBlue", "BrightGreen", "BrightCyan",
WiredHome 19:3f82c1161fd2 827 "Orange", "Pink", "Yellow", "White"
WiredHome 19:3f82c1161fd2 828 };
WiredHome 19:3f82c1161fd2 829 if (i < 16)
WiredHome 19:3f82c1161fd2 830 return names[i];
WiredHome 19:3f82c1161fd2 831 else
WiredHome 19:3f82c1161fd2 832 return NULL;
WiredHome 19:3f82c1161fd2 833 }
WiredHome 19:3f82c1161fd2 834
WiredHome 19:3f82c1161fd2 835
WiredHome 19:3f82c1161fd2 836 ///////////////////////////////////////////////////////////////
WiredHome 19:3f82c1161fd2 837 // Private functions
WiredHome 19:3f82c1161fd2 838
WiredHome 19:3f82c1161fd2 839 unsigned char RA8875::spiwrite(unsigned char data)
WiredHome 19:3f82c1161fd2 840 {
WiredHome 19:3f82c1161fd2 841 unsigned char retval;
WiredHome 19:3f82c1161fd2 842
WiredHome 19:3f82c1161fd2 843 retval = spi.write(data);
WiredHome 19:3f82c1161fd2 844 return retval;
WiredHome 19:3f82c1161fd2 845 }
WiredHome 19:3f82c1161fd2 846
WiredHome 19:3f82c1161fd2 847 unsigned char RA8875::spiread(void)
WiredHome 19:3f82c1161fd2 848 {
WiredHome 19:3f82c1161fd2 849 unsigned char retval;
WiredHome 19:3f82c1161fd2 850 unsigned char data = 0;
WiredHome 19:3f82c1161fd2 851
WiredHome 19:3f82c1161fd2 852 retval = spi.write(data);
WiredHome 19:3f82c1161fd2 853 return retval;
WiredHome 19:3f82c1161fd2 854 }
WiredHome 19:3f82c1161fd2 855
WiredHome 19:3f82c1161fd2 856 RetCode_t RA8875::select(bool chipsel)
WiredHome 19:3f82c1161fd2 857 {
WiredHome 19:3f82c1161fd2 858 cs = (chipsel == true) ? 0 : 1;
WiredHome 19:3f82c1161fd2 859 return noerror;
WiredHome 19:3f82c1161fd2 860 }
WiredHome 19:3f82c1161fd2 861
WiredHome 19:3f82c1161fd2 862 RetCode_t RA8875::init(void)
WiredHome 19:3f82c1161fd2 863 {
WiredHome 19:3f82c1161fd2 864 Backlight_u8(0);
WiredHome 19:3f82c1161fd2 865 WriteCommand(0x88, 0x0a); // PLLC1 - Phase Lock Loop registers
WiredHome 19:3f82c1161fd2 866 wait_ms(1);
WiredHome 19:3f82c1161fd2 867 WriteCommand(0x89, 0x02);
WiredHome 19:3f82c1161fd2 868 wait_ms(1);
WiredHome 19:3f82c1161fd2 869
WiredHome 23:a50ded45dbaf 870 // System Config Register (SYSR)
WiredHome 23:a50ded45dbaf 871 WriteCommand(0x10, 0x0C); // 16-bpp (65K colors) color depth, 8-bit interface
WiredHome 23:a50ded45dbaf 872 // Pixel Clock Setting Register (PCSR)
WiredHome 23:a50ded45dbaf 873 WriteCommand(0x04, 0x82); // PDAT on PCLK falling edge, PCLK = 4 x System Clock
WiredHome 19:3f82c1161fd2 874 wait_ms(1);
WiredHome 19:3f82c1161fd2 875
WiredHome 19:3f82c1161fd2 876 // Horizontal Settings
WiredHome 23:a50ded45dbaf 877 WriteCommand(0x14, RA8875_DISPLAY_WIDTH/8 - 1); //HDWR//Horizontal Display Width Setting Bit[6:0]
WiredHome 19:3f82c1161fd2 878 WriteCommand(0x15, 0x02); //HNDFCR//Horizontal Non-Display Period fine tune Bit[3:0]
WiredHome 19:3f82c1161fd2 879 WriteCommand(0x16, 0x03); //HNDR//Horizontal Non-Display Period Bit[4:0]
WiredHome 19:3f82c1161fd2 880 WriteCommand(0x17, 0x01); //HSTR//HSYNC Start Position[4:0]
WiredHome 19:3f82c1161fd2 881 WriteCommand(0x18, 0x03); //HPWR//HSYNC Polarity ,The period width of HSYNC.
WiredHome 19:3f82c1161fd2 882
WiredHome 19:3f82c1161fd2 883 // Vertical Settings
WiredHome 23:a50ded45dbaf 884 WriteCommand(0x19, (RA8875_DISPLAY_HEIGHT-1)&0xFF); //VDHR0 //Vertical Display Height Bit [7:0]
WiredHome 23:a50ded45dbaf 885 WriteCommand(0x1a, (RA8875_DISPLAY_HEIGHT-1)>>8); //VDHR1 //Vertical Display Height Bit [8]
WiredHome 19:3f82c1161fd2 886 WriteCommand(0x1b, 0x0F); //VNDR0 //Vertical Non-Display Period Bit [7:0]
WiredHome 19:3f82c1161fd2 887 WriteCommand(0x1c, 0x00); //VNDR1 //Vertical Non-Display Period Bit [8]
WiredHome 19:3f82c1161fd2 888 WriteCommand(0x1d, 0x0e); //VSTR0 //VSYNC Start Position[7:0]
WiredHome 19:3f82c1161fd2 889 WriteCommand(0x1e, 0x06); //VSTR1 //VSYNC Start Position[8]
WiredHome 19:3f82c1161fd2 890 WriteCommand(0x1f, 0x01); //VPWR //VSYNC Polarity ,VSYNC Pulse Width[6:0]
WiredHome 19:3f82c1161fd2 891
WiredHome 19:3f82c1161fd2 892 // Clear ram image
WiredHome 19:3f82c1161fd2 893 SetWindow(0,0, width(), height()); // Initialize to full screen
WiredHome 24:8ca861acf12d 894 SetTextCursorControl();
WiredHome 28:ed102fc442c4 895 foreground(Blue);
WiredHome 19:3f82c1161fd2 896 background(Black);
WiredHome 19:3f82c1161fd2 897 cls();
WiredHome 19:3f82c1161fd2 898 return noerror;
WiredHome 19:3f82c1161fd2 899 }
WiredHome 19:3f82c1161fd2 900
WiredHome 23:a50ded45dbaf 901 #ifdef TESTENABLE
WiredHome 23:a50ded45dbaf 902
WiredHome 23:a50ded45dbaf 903 // ______________ ______________ ______________ _______________
WiredHome 23:a50ded45dbaf 904 // /_____ _____/ / ___________/ / ___________/ /_____ ______/
WiredHome 23:a50ded45dbaf 905 // / / / / / / / /
WiredHome 23:a50ded45dbaf 906 // / / / /___ / /__________ / /
WiredHome 23:a50ded45dbaf 907 // / / / ____/ /__________ / / /
WiredHome 23:a50ded45dbaf 908 // / / / / / / / /
WiredHome 23:a50ded45dbaf 909 // / / / /__________ ___________/ / / /
WiredHome 23:a50ded45dbaf 910 // /__/ /_____________/ /_____________/ /__/
WiredHome 23:a50ded45dbaf 911 //
WiredHome 23:a50ded45dbaf 912 // Everything from here down is test code.
WiredHome 23:a50ded45dbaf 913
WiredHome 23:a50ded45dbaf 914 void TextCursorTest(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 915 {
WiredHome 24:8ca861acf12d 916 const char * iCursor = "The I-Beam cursor should be visible for this text, but it should not be blinking while writing this text.\r\n";
WiredHome 24:8ca861acf12d 917 const char * uCursor = "The Underscore cursor should be visible for this text, but it should not be blinking while writing this text.\r\n";
WiredHome 24:8ca861acf12d 918 const char * bCursor = "The Block cursor should be visible for this text, but it should not be blinking while writing this text.\r\n";
WiredHome 24:8ca861acf12d 919 const char * bbCursor = "The Blinking Block cursor should be visible for this text, and it should be blinking while writing this text.\r\n";
WiredHome 23:a50ded45dbaf 920 const char * p;
WiredHome 23:a50ded45dbaf 921
WiredHome 23:a50ded45dbaf 922 pc.printf("Text Cursor Test\r\n");
WiredHome 23:a50ded45dbaf 923 display.background(Black);
WiredHome 23:a50ded45dbaf 924 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 925 display.cls();
WiredHome 25:9556a3a9b7cc 926 display.Backlight_u8(255);
WiredHome 23:a50ded45dbaf 927 display.puts(0,0, "Text Cursor Test.");
WiredHome 23:a50ded45dbaf 928
WiredHome 23:a50ded45dbaf 929 // visible, non-blinking
WiredHome 24:8ca861acf12d 930 display.SetTextCursor(0,20);
WiredHome 24:8ca861acf12d 931 display.SetTextCursorControl(IBEAM, false);
WiredHome 24:8ca861acf12d 932 p = iCursor;
WiredHome 23:a50ded45dbaf 933 while (*p) {
WiredHome 24:8ca861acf12d 934 display._putc(*p++);
WiredHome 24:8ca861acf12d 935 wait_ms(100);
WiredHome 24:8ca861acf12d 936 }
WiredHome 24:8ca861acf12d 937
WiredHome 24:8ca861acf12d 938 display.SetTextCursorControl(UNDER, false);
WiredHome 24:8ca861acf12d 939 p = uCursor;
WiredHome 24:8ca861acf12d 940 while (*p) {
WiredHome 24:8ca861acf12d 941 display._putc(*p++);
WiredHome 23:a50ded45dbaf 942 wait_ms(100);
WiredHome 23:a50ded45dbaf 943 }
WiredHome 24:8ca861acf12d 944
WiredHome 24:8ca861acf12d 945 display.SetTextCursorControl(BLOCK, false);
WiredHome 24:8ca861acf12d 946 p = bCursor;
WiredHome 24:8ca861acf12d 947 while (*p) {
WiredHome 24:8ca861acf12d 948 display._putc(*p++);
WiredHome 24:8ca861acf12d 949 wait_ms(100);
WiredHome 24:8ca861acf12d 950 }
WiredHome 24:8ca861acf12d 951
WiredHome 24:8ca861acf12d 952 display.SetTextCursorControl(BLOCK, true);
WiredHome 24:8ca861acf12d 953 p = bbCursor;
WiredHome 24:8ca861acf12d 954 while (*p) {
WiredHome 24:8ca861acf12d 955 display._putc(*p++);
WiredHome 24:8ca861acf12d 956 wait_ms(100);
WiredHome 24:8ca861acf12d 957 }
WiredHome 24:8ca861acf12d 958 wait_ms(2000);
WiredHome 24:8ca861acf12d 959 display.SetTextCursorControl(NOCURSOR, false);
WiredHome 23:a50ded45dbaf 960 }
WiredHome 23:a50ded45dbaf 961
WiredHome 23:a50ded45dbaf 962 void BacklightTest(RA8875 & display, Serial & pc, float ramptime)
WiredHome 23:a50ded45dbaf 963 {
WiredHome 23:a50ded45dbaf 964 pc.printf("Backlight Test - ramp over %f sec.\r\n", ramptime);
WiredHome 23:a50ded45dbaf 965 display.Backlight_u8(0);
WiredHome 23:a50ded45dbaf 966 display.background(Black);
WiredHome 23:a50ded45dbaf 967 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 968 display.cls();
WiredHome 23:a50ded45dbaf 969 display.puts(0,0, "RA8875 Backlight Test - Ramp up.");
WiredHome 23:a50ded45dbaf 970 for (int i=0; i < 255; i++) {
WiredHome 23:a50ded45dbaf 971 display.Backlight_u8(i);
WiredHome 23:a50ded45dbaf 972 wait_ms((ramptime * 1000)/ 256);
WiredHome 23:a50ded45dbaf 973 }
WiredHome 23:a50ded45dbaf 974 }
WiredHome 23:a50ded45dbaf 975
WiredHome 23:a50ded45dbaf 976 void BacklightTest2(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 977 {
WiredHome 23:a50ded45dbaf 978 pc.printf("Backlight Test 2\r\n");
WiredHome 23:a50ded45dbaf 979 // Dim it out at the end of the tests.
WiredHome 23:a50ded45dbaf 980 display.foreground(Yellow);
WiredHome 23:a50ded45dbaf 981 display.puts(0,0, "Ramp Backlight down.");
WiredHome 23:a50ded45dbaf 982 // Ramp it off
WiredHome 23:a50ded45dbaf 983 for (int i=255; i != 0; i--) {
WiredHome 23:a50ded45dbaf 984 display.Backlight_u8(i);
WiredHome 23:a50ded45dbaf 985 wait_ms(20);
WiredHome 23:a50ded45dbaf 986 }
WiredHome 23:a50ded45dbaf 987 display.Backlight_u8(0);
WiredHome 23:a50ded45dbaf 988 }
WiredHome 23:a50ded45dbaf 989
WiredHome 23:a50ded45dbaf 990 void ExternalFontTest(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 991 {
WiredHome 23:a50ded45dbaf 992 pc.printf("External Font Test\r\n");
WiredHome 23:a50ded45dbaf 993 display.background(Black);
WiredHome 23:a50ded45dbaf 994 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 995 display.cls();
WiredHome 23:a50ded45dbaf 996 display.Backlight(1);
WiredHome 23:a50ded45dbaf 997 display.set_font(Arial12x12);
WiredHome 23:a50ded45dbaf 998 display.puts(0,0,"ABCDEFGHIJKLMNOPWRSTUVWXYZabcdefghijklmnopqrstuvwxyz");
WiredHome 23:a50ded45dbaf 999 }
WiredHome 23:a50ded45dbaf 1000
WiredHome 23:a50ded45dbaf 1001 void DOSColorTest(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 1002 {
WiredHome 23:a50ded45dbaf 1003 pc.printf("DOS Color Test\r\n");
WiredHome 23:a50ded45dbaf 1004 display.background(Black);
WiredHome 23:a50ded45dbaf 1005 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 1006 display.cls();
WiredHome 23:a50ded45dbaf 1007 display.puts(0,0, "DOS Colors - Fore");
WiredHome 23:a50ded45dbaf 1008 display.puts(280,0, "Back");
WiredHome 23:a50ded45dbaf 1009 display.background(Gray);
WiredHome 23:a50ded45dbaf 1010 for (int i=0; i<16; i++) {
WiredHome 23:a50ded45dbaf 1011 display.foreground(display.DOSColor(i));
WiredHome 23:a50ded45dbaf 1012 display.puts(160, i*16, display.DOSColorNames(i));
WiredHome 23:a50ded45dbaf 1013 display.background(Black);
WiredHome 23:a50ded45dbaf 1014 }
WiredHome 23:a50ded45dbaf 1015 display.foreground(White);
WiredHome 23:a50ded45dbaf 1016 for (int i=0; i<16; i++) {
WiredHome 23:a50ded45dbaf 1017 display.background(display.DOSColor(i));
WiredHome 23:a50ded45dbaf 1018 display.puts(360, i*16, display.DOSColorNames(i));
WiredHome 23:a50ded45dbaf 1019 display.foreground(White);
WiredHome 23:a50ded45dbaf 1020 }
WiredHome 23:a50ded45dbaf 1021 }
WiredHome 23:a50ded45dbaf 1022
WiredHome 23:a50ded45dbaf 1023 void WebColorTest(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 1024 {
WiredHome 23:a50ded45dbaf 1025 pc.printf("Web Color Test\r\n");
WiredHome 23:a50ded45dbaf 1026 display.background(Black);
WiredHome 23:a50ded45dbaf 1027 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 1028 display.SetWindow(0,0, display.width(), display.height());
WiredHome 23:a50ded45dbaf 1029 display.cls();
WiredHome 23:a50ded45dbaf 1030 display.puts(0,0, "Web Color Test\r\n");
WiredHome 23:a50ded45dbaf 1031 display.SetTextFontSize(1,2);
WiredHome 23:a50ded45dbaf 1032 for (int i=0; i<sizeof(WebColors)/sizeof(WebColors[0]); i++) {
WiredHome 23:a50ded45dbaf 1033 display.background(WebColors[i]);
WiredHome 23:a50ded45dbaf 1034 display.puts(" ");
WiredHome 23:a50ded45dbaf 1035 if (i % 36 == 35)
WiredHome 23:a50ded45dbaf 1036 display.puts("\r\n");
WiredHome 23:a50ded45dbaf 1037 }
WiredHome 23:a50ded45dbaf 1038 display.SetTextFontSize(1,1);
WiredHome 23:a50ded45dbaf 1039 }
WiredHome 23:a50ded45dbaf 1040
WiredHome 23:a50ded45dbaf 1041 void LineTest(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 1042 {
WiredHome 23:a50ded45dbaf 1043 int i, x, y, x2, y2;
WiredHome 23:a50ded45dbaf 1044
WiredHome 23:a50ded45dbaf 1045 pc.printf("Line Test\r\n");
WiredHome 23:a50ded45dbaf 1046 display.background(Black);
WiredHome 23:a50ded45dbaf 1047 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 1048 display.cls();
WiredHome 23:a50ded45dbaf 1049 display.puts(0,0, "Line Test");
WiredHome 23:a50ded45dbaf 1050 for (i=0; i<16; i++) {
WiredHome 23:a50ded45dbaf 1051 // Lines
WiredHome 23:a50ded45dbaf 1052 x = rand() % 480;
WiredHome 23:a50ded45dbaf 1053 y = rand() % 272;
WiredHome 23:a50ded45dbaf 1054 x2 = rand() % 480;
WiredHome 23:a50ded45dbaf 1055 y2 = rand() % 272;
WiredHome 23:a50ded45dbaf 1056 display.line(x,y, x2,y2, display.DOSColor(i));
WiredHome 23:a50ded45dbaf 1057 }
WiredHome 23:a50ded45dbaf 1058 }
WiredHome 23:a50ded45dbaf 1059
WiredHome 23:a50ded45dbaf 1060 void RectangleTest(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 1061 {
WiredHome 23:a50ded45dbaf 1062 int i, x1,y1, x2,y2;
WiredHome 23:a50ded45dbaf 1063
WiredHome 23:a50ded45dbaf 1064 pc.printf("Rectangle Test\r\n");
WiredHome 23:a50ded45dbaf 1065 display.background(Black);
WiredHome 23:a50ded45dbaf 1066 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 1067 display.cls();
WiredHome 23:a50ded45dbaf 1068 display.puts(0,0, "Rectangle Test");
WiredHome 23:a50ded45dbaf 1069 for (i=0; i<16; i++) {
WiredHome 23:a50ded45dbaf 1070 x1 = rand() % 240;
WiredHome 23:a50ded45dbaf 1071 y1 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1072 x2 = rand() % 240;
WiredHome 23:a50ded45dbaf 1073 y2 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1074 display.rect(x1,y1, x2,y2, display.DOSColor(i));
WiredHome 23:a50ded45dbaf 1075
WiredHome 23:a50ded45dbaf 1076 x1 = 240 + rand() % 240;
WiredHome 23:a50ded45dbaf 1077 y1 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1078 x2 = 240 + rand() % 240;
WiredHome 23:a50ded45dbaf 1079 y2 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1080 display.rect(x1,y1, x2,y2, FILL);
WiredHome 23:a50ded45dbaf 1081 }
WiredHome 23:a50ded45dbaf 1082 }
WiredHome 23:a50ded45dbaf 1083
WiredHome 23:a50ded45dbaf 1084
WiredHome 23:a50ded45dbaf 1085 void RoundRectTest(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 1086 {
WiredHome 23:a50ded45dbaf 1087 unsigned int i, x1,y1, x2,y2, r1,r2;
WiredHome 23:a50ded45dbaf 1088
WiredHome 23:a50ded45dbaf 1089 pc.printf("Round Rectangle Test\r\n");
WiredHome 23:a50ded45dbaf 1090 display.background(Black);
WiredHome 23:a50ded45dbaf 1091 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 1092 display.cls();
WiredHome 23:a50ded45dbaf 1093 display.puts(0,0, "Rounded Rectangle Test");
WiredHome 23:a50ded45dbaf 1094
WiredHome 23:a50ded45dbaf 1095 #if 0
WiredHome 23:a50ded45dbaf 1096 i = 3;
WiredHome 23:a50ded45dbaf 1097 x1 = 30; y1 = 30;
WiredHome 23:a50ded45dbaf 1098 x2 = 200; y2 = 100;
WiredHome 23:a50ded45dbaf 1099 r1 = 10; r2 = 20;
WiredHome 23:a50ded45dbaf 1100 pc.printf(" (%3d,%3d), (%3d,%3d): (%2d,%2d) - %04X\r\n", x1,y1, x2,y2, r1,r2, display.DOSColor(i));
WiredHome 23:a50ded45dbaf 1101 display.roundrect(x1,y1, x2,y2, r1,r2, display.DOSColor(i));
WiredHome 23:a50ded45dbaf 1102
WiredHome 23:a50ded45dbaf 1103 x1 = 230; y1 = 30;
WiredHome 23:a50ded45dbaf 1104 x2 = 400; y2 = 100;
WiredHome 23:a50ded45dbaf 1105 r1 = 30; r2 = 34;
WiredHome 23:a50ded45dbaf 1106 pc.printf(" (%3d,%3d), (%3d,%3d): (%2d,%2d) - %04X\r\n", x1,y1, x2,y2, r1,r2, display.DOSColor(i));
WiredHome 23:a50ded45dbaf 1107 display.roundrect(x1,y1, x2,y2, r1,r2, display.DOSColor(i), NOFILL);
WiredHome 23:a50ded45dbaf 1108 #endif
WiredHome 23:a50ded45dbaf 1109
WiredHome 23:a50ded45dbaf 1110 for (i=0; i<16; i++) {
WiredHome 23:a50ded45dbaf 1111 x1 = rand() % 240;
WiredHome 23:a50ded45dbaf 1112 y1 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1113 x2 = x1 + rand() % 100;
WiredHome 23:a50ded45dbaf 1114 y2 = y1 + rand() % 100;
WiredHome 23:a50ded45dbaf 1115 r1 = rand() % (x2 - x1)/2;
WiredHome 23:a50ded45dbaf 1116 r2 = rand() % (y2 - y1)/2;
WiredHome 23:a50ded45dbaf 1117 display.roundrect(x1,y1, x2,y2, 5,8, display.DOSColor(i));
WiredHome 23:a50ded45dbaf 1118
WiredHome 23:a50ded45dbaf 1119 x1 = 240 + rand() % 240;
WiredHome 23:a50ded45dbaf 1120 y1 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1121 x2 = x1 + rand() % 100;
WiredHome 23:a50ded45dbaf 1122 y2 = y1 + rand() % 100;
WiredHome 23:a50ded45dbaf 1123 r1 = rand() % (x2 - x1)/2;
WiredHome 23:a50ded45dbaf 1124 r2 = rand() % (y2 - y1)/2;
WiredHome 23:a50ded45dbaf 1125 display.roundrect(x1,y1, x2,y2, r1,r2, FILL);
WiredHome 23:a50ded45dbaf 1126 }
WiredHome 23:a50ded45dbaf 1127 }
WiredHome 23:a50ded45dbaf 1128
WiredHome 23:a50ded45dbaf 1129 void TriangleTest(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 1130 {
WiredHome 23:a50ded45dbaf 1131 int i, x1, y1, x2, y2, x3, y3;
WiredHome 23:a50ded45dbaf 1132
WiredHome 23:a50ded45dbaf 1133 pc.printf("Triangle Test\r\n");
WiredHome 23:a50ded45dbaf 1134 display.background(Black);
WiredHome 23:a50ded45dbaf 1135 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 1136 display.cls();
WiredHome 23:a50ded45dbaf 1137 display.puts(0,0, "Triangle Test");
WiredHome 23:a50ded45dbaf 1138
WiredHome 23:a50ded45dbaf 1139 x1 = 150;
WiredHome 23:a50ded45dbaf 1140 y1 = 2;
WiredHome 23:a50ded45dbaf 1141 x2 = 190;
WiredHome 23:a50ded45dbaf 1142 y2 = 7;
WiredHome 23:a50ded45dbaf 1143 x3 = 170;
WiredHome 23:a50ded45dbaf 1144 y3 = 16;
WiredHome 23:a50ded45dbaf 1145 display.triangle(x1,y1, x2,y2, x3,y3);
WiredHome 23:a50ded45dbaf 1146
WiredHome 23:a50ded45dbaf 1147 x1 = 200;
WiredHome 23:a50ded45dbaf 1148 y1 = 2;
WiredHome 23:a50ded45dbaf 1149 x2 = 240;
WiredHome 23:a50ded45dbaf 1150 y2 = 7;
WiredHome 23:a50ded45dbaf 1151 x3 = 220;
WiredHome 23:a50ded45dbaf 1152 y3 = 16;
WiredHome 23:a50ded45dbaf 1153 display.filltriangle(x1,y1, x2,y2, x3,y3, BrightRed);
WiredHome 23:a50ded45dbaf 1154
WiredHome 23:a50ded45dbaf 1155 x1 = 300;
WiredHome 23:a50ded45dbaf 1156 y1 = 2;
WiredHome 23:a50ded45dbaf 1157 x2 = 340;
WiredHome 23:a50ded45dbaf 1158 y2 = 7;
WiredHome 23:a50ded45dbaf 1159 x3 = 320;
WiredHome 23:a50ded45dbaf 1160 y3 = 16;
WiredHome 23:a50ded45dbaf 1161 display.triangle(x1,y1, x2,y2, x3,y3, NOFILL);
WiredHome 23:a50ded45dbaf 1162
WiredHome 23:a50ded45dbaf 1163 x1 = 400;
WiredHome 23:a50ded45dbaf 1164 y1 = 2;
WiredHome 23:a50ded45dbaf 1165 x2 = 440;
WiredHome 23:a50ded45dbaf 1166 y2 = 7;
WiredHome 23:a50ded45dbaf 1167 x3 = 420;
WiredHome 23:a50ded45dbaf 1168 y3 = 16;
WiredHome 23:a50ded45dbaf 1169 display.triangle(x1,y1, x2,y2, x3,y3, Blue);
WiredHome 23:a50ded45dbaf 1170
WiredHome 23:a50ded45dbaf 1171 for (i=0; i<16; i++) {
WiredHome 23:a50ded45dbaf 1172 x1 = rand() % 240;
WiredHome 23:a50ded45dbaf 1173 y1 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1174 x2 = rand() % 240;
WiredHome 23:a50ded45dbaf 1175 y2 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1176 x3 = rand() % 240;
WiredHome 23:a50ded45dbaf 1177 y3 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1178 display.triangle(x1,y1, x2,y2, x3,y3, display.DOSColor(i));
WiredHome 23:a50ded45dbaf 1179 x1 = 240 + rand() % 240;
WiredHome 23:a50ded45dbaf 1180 y1 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1181 x2 = 240 + rand() % 240;
WiredHome 23:a50ded45dbaf 1182 y2 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1183 x3 = 240 + rand() % 240;
WiredHome 23:a50ded45dbaf 1184 y3 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1185 display.triangle(x1,y1, x2,y2, x3,y3, FILL);
WiredHome 23:a50ded45dbaf 1186 }
WiredHome 23:a50ded45dbaf 1187 }
WiredHome 23:a50ded45dbaf 1188
WiredHome 23:a50ded45dbaf 1189 void CircleTest(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 1190 {
WiredHome 23:a50ded45dbaf 1191 int i, x, y, r1;
WiredHome 23:a50ded45dbaf 1192
WiredHome 23:a50ded45dbaf 1193 pc.printf("Circle Test\r\n");
WiredHome 23:a50ded45dbaf 1194 display.background(Black);
WiredHome 23:a50ded45dbaf 1195 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 1196 display.cls();
WiredHome 23:a50ded45dbaf 1197 display.puts(0,0, "Circle Test");
WiredHome 23:a50ded45dbaf 1198 for (i=0; i<16; i++) {
WiredHome 23:a50ded45dbaf 1199 x = 100 + rand() % 100;
WiredHome 23:a50ded45dbaf 1200 y = 70 + rand() % 200;
WiredHome 23:a50ded45dbaf 1201 r1 = rand() % min(y - 20, 100);
WiredHome 23:a50ded45dbaf 1202 //pc.printf(" (%d,%d) - %d\r\n", x,y,r1);
WiredHome 23:a50ded45dbaf 1203 display.circle(x,y,r1, display.DOSColor(i));
WiredHome 23:a50ded45dbaf 1204
WiredHome 23:a50ded45dbaf 1205 x = 300 + rand() % 100;
WiredHome 23:a50ded45dbaf 1206 y = 70 + rand() % 200;
WiredHome 23:a50ded45dbaf 1207 r1 = rand() % min(y - 20, 100);
WiredHome 23:a50ded45dbaf 1208 //pc.printf(" (%d,%d) - %d FILL\r\n", x,y,r1);
WiredHome 23:a50ded45dbaf 1209 display.circle(x,y,r1, display.DOSColor(i), FILL);
WiredHome 23:a50ded45dbaf 1210 }
WiredHome 23:a50ded45dbaf 1211 }
WiredHome 23:a50ded45dbaf 1212
WiredHome 23:a50ded45dbaf 1213 void EllipseTest(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 1214 {
WiredHome 23:a50ded45dbaf 1215 int i,x,y,r1,r2;
WiredHome 23:a50ded45dbaf 1216
WiredHome 23:a50ded45dbaf 1217 pc.printf("Ellipse Test\r\n");
WiredHome 23:a50ded45dbaf 1218 display.background(Black);
WiredHome 23:a50ded45dbaf 1219 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 1220 display.cls();
WiredHome 23:a50ded45dbaf 1221 display.puts(0,0, "Ellipse Test");
WiredHome 23:a50ded45dbaf 1222 for (i=0; i<16; i++) {
WiredHome 23:a50ded45dbaf 1223 x = 100 + rand() % 100;
WiredHome 23:a50ded45dbaf 1224 y = 70 + rand() % 200;
WiredHome 23:a50ded45dbaf 1225 r1 = rand() % min(y - 20, 100);
WiredHome 23:a50ded45dbaf 1226 r2 = rand() % min(y - 20, 100);
WiredHome 23:a50ded45dbaf 1227 display.ellipse(x,y,r1,r2, display.DOSColor(i));
WiredHome 23:a50ded45dbaf 1228
WiredHome 23:a50ded45dbaf 1229 x = 300 + rand() % 100;
WiredHome 23:a50ded45dbaf 1230 y = 70 + rand() % 200;
WiredHome 23:a50ded45dbaf 1231 r1 = rand() % min(y - 20, 100);
WiredHome 23:a50ded45dbaf 1232 r2 = rand() % min(y - 20, 100);
WiredHome 23:a50ded45dbaf 1233 display.ellipse(x,y,r1,r2, FILL);
WiredHome 23:a50ded45dbaf 1234 }
WiredHome 23:a50ded45dbaf 1235 }
WiredHome 23:a50ded45dbaf 1236
WiredHome 23:a50ded45dbaf 1237 void RunTestSet(RA8875 & lcd, Serial & pc)
WiredHome 23:a50ded45dbaf 1238 {
WiredHome 23:a50ded45dbaf 1239 int q = 0;
WiredHome 23:a50ded45dbaf 1240 int automode = 0;
WiredHome 23:a50ded45dbaf 1241 const unsigned char modelist[] = "BDWLROTCEbt"; // auto-test in this order.
WiredHome 23:a50ded45dbaf 1242
WiredHome 23:a50ded45dbaf 1243 while(1) {
WiredHome 23:a50ded45dbaf 1244 pc.printf("\r\n"
WiredHome 23:a50ded45dbaf 1245 "B - Backlight up b - backlight dim\r\n"
WiredHome 23:a50ded45dbaf 1246 "D - DOS Colors W - Web Colors\r\n"
WiredHome 23:a50ded45dbaf 1247 "t - text cursor \r\n"
WiredHome 23:a50ded45dbaf 1248 "L - Lines F - external Font\r\n"
WiredHome 23:a50ded45dbaf 1249 "R - Rectangles O - rOund rectangles\r\n"
WiredHome 23:a50ded45dbaf 1250 "T - Triangles \r\n"
WiredHome 23:a50ded45dbaf 1251 "C - Circles E - Ellipses\r\n"
WiredHome 25:9556a3a9b7cc 1252 "A - Auto Test mode r - reset \r\n"
WiredHome 23:a50ded45dbaf 1253 "> ");
WiredHome 23:a50ded45dbaf 1254 if (automode == -1 || pc.readable()) {
WiredHome 23:a50ded45dbaf 1255 automode = -1;
WiredHome 23:a50ded45dbaf 1256 q = getchar();
WiredHome 23:a50ded45dbaf 1257 } else if (automode >= 0) {
WiredHome 23:a50ded45dbaf 1258 q = modelist[automode];
WiredHome 23:a50ded45dbaf 1259 }
WiredHome 23:a50ded45dbaf 1260 switch(q) {
WiredHome 23:a50ded45dbaf 1261 case 'A':
WiredHome 23:a50ded45dbaf 1262 automode = 0;
WiredHome 23:a50ded45dbaf 1263 break;
WiredHome 23:a50ded45dbaf 1264 case 'B':
WiredHome 23:a50ded45dbaf 1265 BacklightTest(lcd, pc, 2);
WiredHome 23:a50ded45dbaf 1266 break;
WiredHome 23:a50ded45dbaf 1267 case 'b':
WiredHome 23:a50ded45dbaf 1268 BacklightTest2(lcd, pc);
WiredHome 23:a50ded45dbaf 1269 break;
WiredHome 23:a50ded45dbaf 1270 case 'D':
WiredHome 23:a50ded45dbaf 1271 DOSColorTest(lcd, pc);
WiredHome 23:a50ded45dbaf 1272 break;
WiredHome 23:a50ded45dbaf 1273 case 'W':
WiredHome 23:a50ded45dbaf 1274 WebColorTest(lcd, pc);
WiredHome 23:a50ded45dbaf 1275 break;
WiredHome 23:a50ded45dbaf 1276 case 't':
WiredHome 23:a50ded45dbaf 1277 TextCursorTest(lcd, pc);
WiredHome 23:a50ded45dbaf 1278 break;
WiredHome 23:a50ded45dbaf 1279 case 'F':
WiredHome 23:a50ded45dbaf 1280 ExternalFontTest(lcd, pc);
WiredHome 23:a50ded45dbaf 1281 break;
WiredHome 23:a50ded45dbaf 1282 case 'L':
WiredHome 23:a50ded45dbaf 1283 LineTest(lcd, pc);
WiredHome 23:a50ded45dbaf 1284 break;
WiredHome 23:a50ded45dbaf 1285 case 'R':
WiredHome 23:a50ded45dbaf 1286 RectangleTest(lcd, pc);
WiredHome 23:a50ded45dbaf 1287 break;
WiredHome 23:a50ded45dbaf 1288 case 'O':
WiredHome 23:a50ded45dbaf 1289 RoundRectTest(lcd, pc);
WiredHome 23:a50ded45dbaf 1290 break;
WiredHome 23:a50ded45dbaf 1291 case 'T':
WiredHome 23:a50ded45dbaf 1292 TriangleTest(lcd, pc);
WiredHome 23:a50ded45dbaf 1293 break;
WiredHome 23:a50ded45dbaf 1294 case 'C':
WiredHome 23:a50ded45dbaf 1295 CircleTest(lcd, pc);
WiredHome 23:a50ded45dbaf 1296 break;
WiredHome 23:a50ded45dbaf 1297 case 'E':
WiredHome 23:a50ded45dbaf 1298 EllipseTest(lcd, pc);
WiredHome 23:a50ded45dbaf 1299 break;
WiredHome 23:a50ded45dbaf 1300 case 'r':
WiredHome 23:a50ded45dbaf 1301 pc.printf("Resetting ...\r\n");
WiredHome 23:a50ded45dbaf 1302 wait_ms(20);
WiredHome 23:a50ded45dbaf 1303 mbed_reset();
WiredHome 23:a50ded45dbaf 1304 break;
WiredHome 23:a50ded45dbaf 1305 default:
WiredHome 23:a50ded45dbaf 1306 printf("huh?\n");
WiredHome 23:a50ded45dbaf 1307 break;
WiredHome 23:a50ded45dbaf 1308 }
WiredHome 23:a50ded45dbaf 1309 if (automode >= 0) {
WiredHome 23:a50ded45dbaf 1310 automode++;
WiredHome 23:a50ded45dbaf 1311 if (automode >= sizeof(modelist))
WiredHome 23:a50ded45dbaf 1312 automode = 0;
WiredHome 23:a50ded45dbaf 1313 wait_ms(2000);
WiredHome 23:a50ded45dbaf 1314 }
WiredHome 23:a50ded45dbaf 1315 wait_ms(200);
WiredHome 23:a50ded45dbaf 1316 }
WiredHome 23:a50ded45dbaf 1317 }
WiredHome 23:a50ded45dbaf 1318
WiredHome 23:a50ded45dbaf 1319 #endif // TESTENABLE