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:
Mon Jan 20 19:19:48 2014 +0000
Revision:
31:c72e12cd5c67
Parent:
29:422616aa04bd
Child:
32:0e4f2ae512e2
Support for Bitmap graphics (tested 4-bit and 8-bit formats, have not tested 1-bit or 24-bit).

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