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:
Tue Jan 21 03:28:36 2014 +0000
Revision:
32:0e4f2ae512e2
Parent:
31:c72e12cd5c67
Child:
37:f19b7e7449dc
Tuned up the Bitmap support - includes 24-bit color, and some hardware performance improvements.

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