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 03:16:51 2014 +0000
Revision:
25:9556a3a9b7cc
Parent:
24:8ca861acf12d
Child:
28:ed102fc442c4
First copy for public viewing

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