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:
Wed Jan 15 12:24:54 2014 +0000
Revision:
23:a50ded45dbaf
Parent:
21:3c1efb192927
Child:
24:8ca861acf12d
Some improvements to text APIs, and migration of the test code into the library (behind a #ifdef).

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