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:
Sun Jan 19 04:24:16 2014 +0000
Revision:
29:422616aa04bd
Parent:
28:ed102fc442c4
Child:
31:c72e12cd5c67
Initial support for soft fonts compatible with mikroe font creator.

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
WiredHome 19:3f82c1161fd2 740 RetCode_t RA8875::frequency(unsigned long Hz)
WiredHome 19:3f82c1161fd2 741 {
WiredHome 19:3f82c1161fd2 742 spi.frequency(Hz);
WiredHome 19:3f82c1161fd2 743 // __ ___
WiredHome 19:3f82c1161fd2 744 // Clock ___A Rising edge latched
WiredHome 19:3f82c1161fd2 745 // ___ ____
WiredHome 19:3f82c1161fd2 746 // Data ___X____
WiredHome 19:3f82c1161fd2 747 spi.format(8, 3); // 8 bits and clock to data phase 0
WiredHome 19:3f82c1161fd2 748 init();
WiredHome 19:3f82c1161fd2 749 return noerror;
WiredHome 19:3f82c1161fd2 750 }
WiredHome 19:3f82c1161fd2 751
WiredHome 19:3f82c1161fd2 752 RetCode_t RA8875::Power(bool on)
WiredHome 19:3f82c1161fd2 753 {
WiredHome 19:3f82c1161fd2 754 WriteCommand(0x01, (on) ? 0x80 : 0x00);
WiredHome 19:3f82c1161fd2 755 return noerror;
WiredHome 19:3f82c1161fd2 756 }
WiredHome 19:3f82c1161fd2 757
WiredHome 19:3f82c1161fd2 758 RetCode_t RA8875::Reset(void)
WiredHome 19:3f82c1161fd2 759 {
WiredHome 19:3f82c1161fd2 760 WriteCommand(0x01, 0x01); // Apply Display Off, Reset
WiredHome 19:3f82c1161fd2 761 wait_ms(2); // no idea if I need to wait, or how long
WiredHome 19:3f82c1161fd2 762 WriteCommand(0x01, 0x00); // Display off, Remove reset
WiredHome 19:3f82c1161fd2 763 wait_ms(2); // no idea if I need to wait, or how long
WiredHome 19:3f82c1161fd2 764 init();
WiredHome 19:3f82c1161fd2 765 return noerror;
WiredHome 19:3f82c1161fd2 766 }
WiredHome 19:3f82c1161fd2 767
WiredHome 19:3f82c1161fd2 768
WiredHome 19:3f82c1161fd2 769 RetCode_t RA8875::Backlight_u8(unsigned char brightness)
WiredHome 19:3f82c1161fd2 770 {
WiredHome 19:3f82c1161fd2 771 static bool is_enabled = false;
WiredHome 19:3f82c1161fd2 772 if (brightness == 0) {
WiredHome 19:3f82c1161fd2 773 WriteCommand(0x8a); // Disable the PWM
WiredHome 19:3f82c1161fd2 774 WriteData(0x00);
WiredHome 19:3f82c1161fd2 775 is_enabled = false;
WiredHome 19:3f82c1161fd2 776 } else if (!is_enabled) {
WiredHome 19:3f82c1161fd2 777 WriteCommand(0x8a); // Enable the PWM
WiredHome 19:3f82c1161fd2 778 WriteData(0x80);
WiredHome 19:3f82c1161fd2 779 WriteCommand(0x8a); // Not sure why this is needed, but following the pattern
WiredHome 19:3f82c1161fd2 780 WriteData(0x81); // open PWM (SYS_CLK / 2 as best I can tell)
WiredHome 19:3f82c1161fd2 781 is_enabled = true;
WiredHome 19:3f82c1161fd2 782 }
WiredHome 19:3f82c1161fd2 783 WriteCommand(0x8b, brightness); // Brightness parameter 0xff-0x00
WiredHome 19:3f82c1161fd2 784 return noerror;
WiredHome 19:3f82c1161fd2 785 }
WiredHome 19:3f82c1161fd2 786
WiredHome 19:3f82c1161fd2 787 RetCode_t RA8875::Backlight(float brightness)
WiredHome 19:3f82c1161fd2 788 {
WiredHome 19:3f82c1161fd2 789 unsigned char b;
WiredHome 19:3f82c1161fd2 790
WiredHome 29:422616aa04bd 791 if (brightness >= 1.0)
WiredHome 19:3f82c1161fd2 792 b = 255;
WiredHome 29:422616aa04bd 793 else if (brightness <= 0.0)
WiredHome 19:3f82c1161fd2 794 b = 0;
WiredHome 19:3f82c1161fd2 795 else
WiredHome 19:3f82c1161fd2 796 b = (unsigned char)(brightness * 255);
WiredHome 19:3f82c1161fd2 797 return Backlight_u8(b);
WiredHome 19:3f82c1161fd2 798 }
WiredHome 19:3f82c1161fd2 799
WiredHome 19:3f82c1161fd2 800
WiredHome 19:3f82c1161fd2 801 RetCode_t RA8875::set_font(const unsigned char * _font)
WiredHome 19:3f82c1161fd2 802 {
WiredHome 19:3f82c1161fd2 803 font = _font;
WiredHome 29:422616aa04bd 804 GraphicsDisplay::set_font(_font);
WiredHome 29:422616aa04bd 805 return noerror; // trusting them, but it might be good to put some checks in here...
WiredHome 19:3f82c1161fd2 806 }
WiredHome 19:3f82c1161fd2 807
WiredHome 19:3f82c1161fd2 808 RetCode_t RA8875::background(color_t color)
WiredHome 19:3f82c1161fd2 809 {
WiredHome 19:3f82c1161fd2 810 WriteCommand(0x60, (color>>11)); // BGCR0
WiredHome 19:3f82c1161fd2 811 WriteCommand(0x61, (unsigned char)(color>>5)); // BGCR0
WiredHome 19:3f82c1161fd2 812 WriteCommand(0x62, (unsigned char)(color)); // BGCR0
WiredHome 19:3f82c1161fd2 813 return noerror;
WiredHome 19:3f82c1161fd2 814 }
WiredHome 19:3f82c1161fd2 815
WiredHome 19:3f82c1161fd2 816 RetCode_t RA8875::background(unsigned char r, unsigned char g, unsigned char b)
WiredHome 19:3f82c1161fd2 817 {
WiredHome 19:3f82c1161fd2 818 WriteCommand(0x60, r);
WiredHome 19:3f82c1161fd2 819 WriteCommand(0x61, g);
WiredHome 19:3f82c1161fd2 820 WriteCommand(0x62, b);
WiredHome 19:3f82c1161fd2 821 return noerror;
WiredHome 19:3f82c1161fd2 822 }
WiredHome 19:3f82c1161fd2 823
WiredHome 19:3f82c1161fd2 824 RetCode_t RA8875::foreground(color_t color)
WiredHome 19:3f82c1161fd2 825 {
WiredHome 19:3f82c1161fd2 826 WriteCommand(0x63, (unsigned char)(color>>11));
WiredHome 19:3f82c1161fd2 827 WriteCommand(0x64, (unsigned char)(color>>5));
WiredHome 19:3f82c1161fd2 828 WriteCommand(0x65, (unsigned char)(color));
WiredHome 19:3f82c1161fd2 829 return noerror;
WiredHome 19:3f82c1161fd2 830 }
WiredHome 19:3f82c1161fd2 831
WiredHome 19:3f82c1161fd2 832 RetCode_t RA8875::foreground(unsigned char setR, unsigned char setG, unsigned char setB)
WiredHome 19:3f82c1161fd2 833 {
WiredHome 19:3f82c1161fd2 834 WriteCommand(0x63, setR);
WiredHome 19:3f82c1161fd2 835 WriteCommand(0x64, setG);
WiredHome 19:3f82c1161fd2 836 WriteCommand(0x65, setB);
WiredHome 19:3f82c1161fd2 837 return noerror;
WiredHome 19:3f82c1161fd2 838 }
WiredHome 19:3f82c1161fd2 839
WiredHome 19:3f82c1161fd2 840 unsigned int RA8875::GetForeColor(void)
WiredHome 19:3f82c1161fd2 841 {
WiredHome 19:3f82c1161fd2 842 color_t color;
WiredHome 19:3f82c1161fd2 843
WiredHome 19:3f82c1161fd2 844 color = (ReadCommand(0x63) & 0x1F) << 11;
WiredHome 19:3f82c1161fd2 845 color |= (ReadCommand(0x64) & 0x3F) << 5;
WiredHome 19:3f82c1161fd2 846 color |= (ReadCommand(0x65) & 0x1F);
WiredHome 19:3f82c1161fd2 847 return color;
WiredHome 19:3f82c1161fd2 848 }
WiredHome 19:3f82c1161fd2 849
WiredHome 19:3f82c1161fd2 850 color_t RA8875::DOSColor(int i)
WiredHome 19:3f82c1161fd2 851 {
WiredHome 19:3f82c1161fd2 852 const color_t colors[16] =
WiredHome 19:3f82c1161fd2 853 {
WiredHome 19:3f82c1161fd2 854 Black, Blue, Green, Cyan,
WiredHome 19:3f82c1161fd2 855 Red, Magenta, Brown, Gray,
WiredHome 19:3f82c1161fd2 856 Charcoal, BrightBlue, BrightGreen, BrightCyan,
WiredHome 19:3f82c1161fd2 857 Orange, Pink, Yellow, White
WiredHome 19:3f82c1161fd2 858 };
WiredHome 19:3f82c1161fd2 859 if (i < 16)
WiredHome 19:3f82c1161fd2 860 return colors[i];
WiredHome 19:3f82c1161fd2 861 else
WiredHome 19:3f82c1161fd2 862 return 0;
WiredHome 19:3f82c1161fd2 863 }
WiredHome 19:3f82c1161fd2 864
WiredHome 19:3f82c1161fd2 865 const char * RA8875::DOSColorNames(int i)
WiredHome 19:3f82c1161fd2 866 {
WiredHome 19:3f82c1161fd2 867 const char * names[16] =
WiredHome 19:3f82c1161fd2 868 {
WiredHome 19:3f82c1161fd2 869 "Black", "Blue", "Green", "Cyan",
WiredHome 19:3f82c1161fd2 870 "Red", "Magenta", "Brown", "Gray",
WiredHome 19:3f82c1161fd2 871 "Charcoal", "BrightBlue", "BrightGreen", "BrightCyan",
WiredHome 19:3f82c1161fd2 872 "Orange", "Pink", "Yellow", "White"
WiredHome 19:3f82c1161fd2 873 };
WiredHome 19:3f82c1161fd2 874 if (i < 16)
WiredHome 19:3f82c1161fd2 875 return names[i];
WiredHome 19:3f82c1161fd2 876 else
WiredHome 19:3f82c1161fd2 877 return NULL;
WiredHome 19:3f82c1161fd2 878 }
WiredHome 19:3f82c1161fd2 879
WiredHome 19:3f82c1161fd2 880
WiredHome 19:3f82c1161fd2 881 ///////////////////////////////////////////////////////////////
WiredHome 19:3f82c1161fd2 882 // Private functions
WiredHome 19:3f82c1161fd2 883
WiredHome 19:3f82c1161fd2 884 unsigned char RA8875::spiwrite(unsigned char data)
WiredHome 19:3f82c1161fd2 885 {
WiredHome 19:3f82c1161fd2 886 unsigned char retval;
WiredHome 19:3f82c1161fd2 887
WiredHome 19:3f82c1161fd2 888 retval = spi.write(data);
WiredHome 19:3f82c1161fd2 889 return retval;
WiredHome 19:3f82c1161fd2 890 }
WiredHome 19:3f82c1161fd2 891
WiredHome 19:3f82c1161fd2 892 unsigned char RA8875::spiread(void)
WiredHome 19:3f82c1161fd2 893 {
WiredHome 19:3f82c1161fd2 894 unsigned char retval;
WiredHome 19:3f82c1161fd2 895 unsigned char data = 0;
WiredHome 19:3f82c1161fd2 896
WiredHome 19:3f82c1161fd2 897 retval = spi.write(data);
WiredHome 19:3f82c1161fd2 898 return retval;
WiredHome 19:3f82c1161fd2 899 }
WiredHome 19:3f82c1161fd2 900
WiredHome 19:3f82c1161fd2 901 RetCode_t RA8875::select(bool chipsel)
WiredHome 19:3f82c1161fd2 902 {
WiredHome 19:3f82c1161fd2 903 cs = (chipsel == true) ? 0 : 1;
WiredHome 19:3f82c1161fd2 904 return noerror;
WiredHome 19:3f82c1161fd2 905 }
WiredHome 19:3f82c1161fd2 906
WiredHome 19:3f82c1161fd2 907 RetCode_t RA8875::init(void)
WiredHome 19:3f82c1161fd2 908 {
WiredHome 19:3f82c1161fd2 909 Backlight_u8(0);
WiredHome 19:3f82c1161fd2 910 WriteCommand(0x88, 0x0a); // PLLC1 - Phase Lock Loop registers
WiredHome 19:3f82c1161fd2 911 wait_ms(1);
WiredHome 19:3f82c1161fd2 912 WriteCommand(0x89, 0x02);
WiredHome 19:3f82c1161fd2 913 wait_ms(1);
WiredHome 19:3f82c1161fd2 914
WiredHome 23:a50ded45dbaf 915 // System Config Register (SYSR)
WiredHome 23:a50ded45dbaf 916 WriteCommand(0x10, 0x0C); // 16-bpp (65K colors) color depth, 8-bit interface
WiredHome 23:a50ded45dbaf 917 // Pixel Clock Setting Register (PCSR)
WiredHome 23:a50ded45dbaf 918 WriteCommand(0x04, 0x82); // PDAT on PCLK falling edge, PCLK = 4 x System Clock
WiredHome 19:3f82c1161fd2 919 wait_ms(1);
WiredHome 19:3f82c1161fd2 920
WiredHome 19:3f82c1161fd2 921 // Horizontal Settings
WiredHome 23:a50ded45dbaf 922 WriteCommand(0x14, RA8875_DISPLAY_WIDTH/8 - 1); //HDWR//Horizontal Display Width Setting Bit[6:0]
WiredHome 19:3f82c1161fd2 923 WriteCommand(0x15, 0x02); //HNDFCR//Horizontal Non-Display Period fine tune Bit[3:0]
WiredHome 19:3f82c1161fd2 924 WriteCommand(0x16, 0x03); //HNDR//Horizontal Non-Display Period Bit[4:0]
WiredHome 19:3f82c1161fd2 925 WriteCommand(0x17, 0x01); //HSTR//HSYNC Start Position[4:0]
WiredHome 19:3f82c1161fd2 926 WriteCommand(0x18, 0x03); //HPWR//HSYNC Polarity ,The period width of HSYNC.
WiredHome 19:3f82c1161fd2 927
WiredHome 19:3f82c1161fd2 928 // Vertical Settings
WiredHome 23:a50ded45dbaf 929 WriteCommand(0x19, (RA8875_DISPLAY_HEIGHT-1)&0xFF); //VDHR0 //Vertical Display Height Bit [7:0]
WiredHome 23:a50ded45dbaf 930 WriteCommand(0x1a, (RA8875_DISPLAY_HEIGHT-1)>>8); //VDHR1 //Vertical Display Height Bit [8]
WiredHome 19:3f82c1161fd2 931 WriteCommand(0x1b, 0x0F); //VNDR0 //Vertical Non-Display Period Bit [7:0]
WiredHome 19:3f82c1161fd2 932 WriteCommand(0x1c, 0x00); //VNDR1 //Vertical Non-Display Period Bit [8]
WiredHome 19:3f82c1161fd2 933 WriteCommand(0x1d, 0x0e); //VSTR0 //VSYNC Start Position[7:0]
WiredHome 19:3f82c1161fd2 934 WriteCommand(0x1e, 0x06); //VSTR1 //VSYNC Start Position[8]
WiredHome 19:3f82c1161fd2 935 WriteCommand(0x1f, 0x01); //VPWR //VSYNC Polarity ,VSYNC Pulse Width[6:0]
WiredHome 19:3f82c1161fd2 936
WiredHome 19:3f82c1161fd2 937 // Clear ram image
WiredHome 19:3f82c1161fd2 938 SetWindow(0,0, width(), height()); // Initialize to full screen
WiredHome 24:8ca861acf12d 939 SetTextCursorControl();
WiredHome 28:ed102fc442c4 940 foreground(Blue);
WiredHome 19:3f82c1161fd2 941 background(Black);
WiredHome 19:3f82c1161fd2 942 cls();
WiredHome 19:3f82c1161fd2 943 return noerror;
WiredHome 19:3f82c1161fd2 944 }
WiredHome 19:3f82c1161fd2 945
WiredHome 23:a50ded45dbaf 946 #ifdef TESTENABLE
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 //
WiredHome 23:a50ded45dbaf 957 // Everything from here down is test code.
WiredHome 23:a50ded45dbaf 958
WiredHome 23:a50ded45dbaf 959 void TextCursorTest(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 960 {
WiredHome 24:8ca861acf12d 961 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 962 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 963 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 964 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 965 const char * p;
WiredHome 23:a50ded45dbaf 966
WiredHome 23:a50ded45dbaf 967 pc.printf("Text Cursor Test\r\n");
WiredHome 23:a50ded45dbaf 968 display.background(Black);
WiredHome 23:a50ded45dbaf 969 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 970 display.cls();
WiredHome 25:9556a3a9b7cc 971 display.Backlight_u8(255);
WiredHome 23:a50ded45dbaf 972 display.puts(0,0, "Text Cursor Test.");
WiredHome 23:a50ded45dbaf 973
WiredHome 23:a50ded45dbaf 974 // visible, non-blinking
WiredHome 24:8ca861acf12d 975 display.SetTextCursor(0,20);
WiredHome 24:8ca861acf12d 976 display.SetTextCursorControl(IBEAM, false);
WiredHome 24:8ca861acf12d 977 p = iCursor;
WiredHome 23:a50ded45dbaf 978 while (*p) {
WiredHome 24:8ca861acf12d 979 display._putc(*p++);
WiredHome 24:8ca861acf12d 980 wait_ms(100);
WiredHome 24:8ca861acf12d 981 }
WiredHome 24:8ca861acf12d 982
WiredHome 24:8ca861acf12d 983 display.SetTextCursorControl(UNDER, false);
WiredHome 24:8ca861acf12d 984 p = uCursor;
WiredHome 24:8ca861acf12d 985 while (*p) {
WiredHome 24:8ca861acf12d 986 display._putc(*p++);
WiredHome 23:a50ded45dbaf 987 wait_ms(100);
WiredHome 23:a50ded45dbaf 988 }
WiredHome 24:8ca861acf12d 989
WiredHome 24:8ca861acf12d 990 display.SetTextCursorControl(BLOCK, false);
WiredHome 24:8ca861acf12d 991 p = bCursor;
WiredHome 24:8ca861acf12d 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(BLOCK, true);
WiredHome 24:8ca861acf12d 998 p = bbCursor;
WiredHome 24:8ca861acf12d 999 while (*p) {
WiredHome 24:8ca861acf12d 1000 display._putc(*p++);
WiredHome 24:8ca861acf12d 1001 wait_ms(100);
WiredHome 24:8ca861acf12d 1002 }
WiredHome 24:8ca861acf12d 1003 wait_ms(2000);
WiredHome 24:8ca861acf12d 1004 display.SetTextCursorControl(NOCURSOR, false);
WiredHome 23:a50ded45dbaf 1005 }
WiredHome 23:a50ded45dbaf 1006
WiredHome 23:a50ded45dbaf 1007 void BacklightTest(RA8875 & display, Serial & pc, float ramptime)
WiredHome 23:a50ded45dbaf 1008 {
WiredHome 29:422616aa04bd 1009 char buf[60];
WiredHome 29:422616aa04bd 1010
WiredHome 23:a50ded45dbaf 1011 pc.printf("Backlight Test - ramp over %f sec.\r\n", ramptime);
WiredHome 23:a50ded45dbaf 1012 display.Backlight_u8(0);
WiredHome 29:422616aa04bd 1013 display.background(White);
WiredHome 23:a50ded45dbaf 1014 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 1015 display.cls();
WiredHome 29:422616aa04bd 1016 wait_ms(200);
WiredHome 23:a50ded45dbaf 1017 display.puts(0,0, "RA8875 Backlight Test - Ramp up.");
WiredHome 23:a50ded45dbaf 1018 for (int i=0; i < 255; i++) {
WiredHome 29:422616aa04bd 1019 unsigned int w = (ramptime * 1000)/ 256;
WiredHome 29:422616aa04bd 1020 sprintf(buf, "%3d, %4d", i, w);
WiredHome 29:422616aa04bd 1021 display.puts(0,40,buf);
WiredHome 23:a50ded45dbaf 1022 display.Backlight_u8(i);
WiredHome 29:422616aa04bd 1023 wait_ms(w);
WiredHome 23:a50ded45dbaf 1024 }
WiredHome 23:a50ded45dbaf 1025 }
WiredHome 23:a50ded45dbaf 1026
WiredHome 23:a50ded45dbaf 1027 void BacklightTest2(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 1028 {
WiredHome 23:a50ded45dbaf 1029 pc.printf("Backlight Test 2\r\n");
WiredHome 23:a50ded45dbaf 1030 // Dim it out at the end of the tests.
WiredHome 23:a50ded45dbaf 1031 display.foreground(Yellow);
WiredHome 23:a50ded45dbaf 1032 display.puts(0,0, "Ramp Backlight down.");
WiredHome 23:a50ded45dbaf 1033 // Ramp it off
WiredHome 23:a50ded45dbaf 1034 for (int i=255; i != 0; i--) {
WiredHome 23:a50ded45dbaf 1035 display.Backlight_u8(i);
WiredHome 23:a50ded45dbaf 1036 wait_ms(20);
WiredHome 23:a50ded45dbaf 1037 }
WiredHome 23:a50ded45dbaf 1038 display.Backlight_u8(0);
WiredHome 23:a50ded45dbaf 1039 }
WiredHome 23:a50ded45dbaf 1040
WiredHome 23:a50ded45dbaf 1041 void ExternalFontTest(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 1042 {
WiredHome 23:a50ded45dbaf 1043 pc.printf("External Font Test\r\n");
WiredHome 23:a50ded45dbaf 1044 display.background(Black);
WiredHome 23:a50ded45dbaf 1045 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 1046 display.cls();
WiredHome 23:a50ded45dbaf 1047 display.Backlight(1);
WiredHome 23:a50ded45dbaf 1048 display.set_font(Arial12x12);
WiredHome 23:a50ded45dbaf 1049 display.puts(0,0,"ABCDEFGHIJKLMNOPWRSTUVWXYZabcdefghijklmnopqrstuvwxyz");
WiredHome 23:a50ded45dbaf 1050 }
WiredHome 23:a50ded45dbaf 1051
WiredHome 23:a50ded45dbaf 1052 void DOSColorTest(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 1053 {
WiredHome 23:a50ded45dbaf 1054 pc.printf("DOS Color Test\r\n");
WiredHome 23:a50ded45dbaf 1055 display.background(Black);
WiredHome 23:a50ded45dbaf 1056 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 1057 display.cls();
WiredHome 23:a50ded45dbaf 1058 display.puts(0,0, "DOS Colors - Fore");
WiredHome 23:a50ded45dbaf 1059 display.puts(280,0, "Back");
WiredHome 23:a50ded45dbaf 1060 display.background(Gray);
WiredHome 23:a50ded45dbaf 1061 for (int i=0; i<16; i++) {
WiredHome 23:a50ded45dbaf 1062 display.foreground(display.DOSColor(i));
WiredHome 23:a50ded45dbaf 1063 display.puts(160, i*16, display.DOSColorNames(i));
WiredHome 23:a50ded45dbaf 1064 display.background(Black);
WiredHome 23:a50ded45dbaf 1065 }
WiredHome 23:a50ded45dbaf 1066 display.foreground(White);
WiredHome 23:a50ded45dbaf 1067 for (int i=0; i<16; i++) {
WiredHome 23:a50ded45dbaf 1068 display.background(display.DOSColor(i));
WiredHome 23:a50ded45dbaf 1069 display.puts(360, i*16, display.DOSColorNames(i));
WiredHome 23:a50ded45dbaf 1070 display.foreground(White);
WiredHome 23:a50ded45dbaf 1071 }
WiredHome 23:a50ded45dbaf 1072 }
WiredHome 23:a50ded45dbaf 1073
WiredHome 23:a50ded45dbaf 1074 void WebColorTest(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 1075 {
WiredHome 23:a50ded45dbaf 1076 pc.printf("Web Color Test\r\n");
WiredHome 23:a50ded45dbaf 1077 display.background(Black);
WiredHome 23:a50ded45dbaf 1078 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 1079 display.SetWindow(0,0, display.width(), display.height());
WiredHome 23:a50ded45dbaf 1080 display.cls();
WiredHome 23:a50ded45dbaf 1081 display.puts(0,0, "Web Color Test\r\n");
WiredHome 23:a50ded45dbaf 1082 display.SetTextFontSize(1,2);
WiredHome 23:a50ded45dbaf 1083 for (int i=0; i<sizeof(WebColors)/sizeof(WebColors[0]); i++) {
WiredHome 23:a50ded45dbaf 1084 display.background(WebColors[i]);
WiredHome 23:a50ded45dbaf 1085 display.puts(" ");
WiredHome 23:a50ded45dbaf 1086 if (i % 36 == 35)
WiredHome 23:a50ded45dbaf 1087 display.puts("\r\n");
WiredHome 23:a50ded45dbaf 1088 }
WiredHome 23:a50ded45dbaf 1089 display.SetTextFontSize(1,1);
WiredHome 23:a50ded45dbaf 1090 }
WiredHome 23:a50ded45dbaf 1091
WiredHome 23:a50ded45dbaf 1092 void LineTest(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 1093 {
WiredHome 23:a50ded45dbaf 1094 int i, x, y, x2, y2;
WiredHome 23:a50ded45dbaf 1095
WiredHome 23:a50ded45dbaf 1096 pc.printf("Line Test\r\n");
WiredHome 23:a50ded45dbaf 1097 display.background(Black);
WiredHome 23:a50ded45dbaf 1098 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 1099 display.cls();
WiredHome 23:a50ded45dbaf 1100 display.puts(0,0, "Line Test");
WiredHome 23:a50ded45dbaf 1101 for (i=0; i<16; i++) {
WiredHome 23:a50ded45dbaf 1102 // Lines
WiredHome 23:a50ded45dbaf 1103 x = rand() % 480;
WiredHome 23:a50ded45dbaf 1104 y = rand() % 272;
WiredHome 23:a50ded45dbaf 1105 x2 = rand() % 480;
WiredHome 23:a50ded45dbaf 1106 y2 = rand() % 272;
WiredHome 23:a50ded45dbaf 1107 display.line(x,y, x2,y2, display.DOSColor(i));
WiredHome 23:a50ded45dbaf 1108 }
WiredHome 23:a50ded45dbaf 1109 }
WiredHome 23:a50ded45dbaf 1110
WiredHome 23:a50ded45dbaf 1111 void RectangleTest(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 1112 {
WiredHome 23:a50ded45dbaf 1113 int i, x1,y1, x2,y2;
WiredHome 23:a50ded45dbaf 1114
WiredHome 23:a50ded45dbaf 1115 pc.printf("Rectangle Test\r\n");
WiredHome 23:a50ded45dbaf 1116 display.background(Black);
WiredHome 23:a50ded45dbaf 1117 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 1118 display.cls();
WiredHome 23:a50ded45dbaf 1119 display.puts(0,0, "Rectangle Test");
WiredHome 23:a50ded45dbaf 1120 for (i=0; i<16; i++) {
WiredHome 23:a50ded45dbaf 1121 x1 = rand() % 240;
WiredHome 23:a50ded45dbaf 1122 y1 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1123 x2 = rand() % 240;
WiredHome 23:a50ded45dbaf 1124 y2 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1125 display.rect(x1,y1, x2,y2, display.DOSColor(i));
WiredHome 23:a50ded45dbaf 1126
WiredHome 23:a50ded45dbaf 1127 x1 = 240 + rand() % 240;
WiredHome 23:a50ded45dbaf 1128 y1 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1129 x2 = 240 + rand() % 240;
WiredHome 23:a50ded45dbaf 1130 y2 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1131 display.rect(x1,y1, x2,y2, FILL);
WiredHome 23:a50ded45dbaf 1132 }
WiredHome 23:a50ded45dbaf 1133 }
WiredHome 23:a50ded45dbaf 1134
WiredHome 23:a50ded45dbaf 1135
WiredHome 23:a50ded45dbaf 1136 void RoundRectTest(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 1137 {
WiredHome 23:a50ded45dbaf 1138 unsigned int i, x1,y1, x2,y2, r1,r2;
WiredHome 23:a50ded45dbaf 1139
WiredHome 23:a50ded45dbaf 1140 pc.printf("Round Rectangle Test\r\n");
WiredHome 23:a50ded45dbaf 1141 display.background(Black);
WiredHome 23:a50ded45dbaf 1142 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 1143 display.cls();
WiredHome 23:a50ded45dbaf 1144 display.puts(0,0, "Rounded Rectangle Test");
WiredHome 23:a50ded45dbaf 1145
WiredHome 23:a50ded45dbaf 1146 for (i=0; i<16; i++) {
WiredHome 23:a50ded45dbaf 1147 x1 = rand() % 240;
WiredHome 23:a50ded45dbaf 1148 y1 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1149 x2 = x1 + rand() % 100;
WiredHome 23:a50ded45dbaf 1150 y2 = y1 + rand() % 100;
WiredHome 23:a50ded45dbaf 1151 r1 = rand() % (x2 - x1)/2;
WiredHome 23:a50ded45dbaf 1152 r2 = rand() % (y2 - y1)/2;
WiredHome 23:a50ded45dbaf 1153 display.roundrect(x1,y1, x2,y2, 5,8, display.DOSColor(i));
WiredHome 23:a50ded45dbaf 1154
WiredHome 23:a50ded45dbaf 1155 x1 = 240 + rand() % 240;
WiredHome 23:a50ded45dbaf 1156 y1 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1157 x2 = x1 + rand() % 100;
WiredHome 23:a50ded45dbaf 1158 y2 = y1 + rand() % 100;
WiredHome 23:a50ded45dbaf 1159 r1 = rand() % (x2 - x1)/2;
WiredHome 23:a50ded45dbaf 1160 r2 = rand() % (y2 - y1)/2;
WiredHome 23:a50ded45dbaf 1161 display.roundrect(x1,y1, x2,y2, r1,r2, FILL);
WiredHome 23:a50ded45dbaf 1162 }
WiredHome 23:a50ded45dbaf 1163 }
WiredHome 23:a50ded45dbaf 1164
WiredHome 23:a50ded45dbaf 1165 void TriangleTest(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 1166 {
WiredHome 23:a50ded45dbaf 1167 int i, x1, y1, x2, y2, x3, y3;
WiredHome 23:a50ded45dbaf 1168
WiredHome 23:a50ded45dbaf 1169 pc.printf("Triangle Test\r\n");
WiredHome 23:a50ded45dbaf 1170 display.background(Black);
WiredHome 23:a50ded45dbaf 1171 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 1172 display.cls();
WiredHome 23:a50ded45dbaf 1173 display.puts(0,0, "Triangle Test");
WiredHome 23:a50ded45dbaf 1174
WiredHome 23:a50ded45dbaf 1175 x1 = 150;
WiredHome 23:a50ded45dbaf 1176 y1 = 2;
WiredHome 23:a50ded45dbaf 1177 x2 = 190;
WiredHome 23:a50ded45dbaf 1178 y2 = 7;
WiredHome 23:a50ded45dbaf 1179 x3 = 170;
WiredHome 23:a50ded45dbaf 1180 y3 = 16;
WiredHome 23:a50ded45dbaf 1181 display.triangle(x1,y1, x2,y2, x3,y3);
WiredHome 23:a50ded45dbaf 1182
WiredHome 23:a50ded45dbaf 1183 x1 = 200;
WiredHome 23:a50ded45dbaf 1184 y1 = 2;
WiredHome 23:a50ded45dbaf 1185 x2 = 240;
WiredHome 23:a50ded45dbaf 1186 y2 = 7;
WiredHome 23:a50ded45dbaf 1187 x3 = 220;
WiredHome 23:a50ded45dbaf 1188 y3 = 16;
WiredHome 23:a50ded45dbaf 1189 display.filltriangle(x1,y1, x2,y2, x3,y3, BrightRed);
WiredHome 23:a50ded45dbaf 1190
WiredHome 23:a50ded45dbaf 1191 x1 = 300;
WiredHome 23:a50ded45dbaf 1192 y1 = 2;
WiredHome 23:a50ded45dbaf 1193 x2 = 340;
WiredHome 23:a50ded45dbaf 1194 y2 = 7;
WiredHome 23:a50ded45dbaf 1195 x3 = 320;
WiredHome 23:a50ded45dbaf 1196 y3 = 16;
WiredHome 23:a50ded45dbaf 1197 display.triangle(x1,y1, x2,y2, x3,y3, NOFILL);
WiredHome 23:a50ded45dbaf 1198
WiredHome 23:a50ded45dbaf 1199 x1 = 400;
WiredHome 23:a50ded45dbaf 1200 y1 = 2;
WiredHome 23:a50ded45dbaf 1201 x2 = 440;
WiredHome 23:a50ded45dbaf 1202 y2 = 7;
WiredHome 23:a50ded45dbaf 1203 x3 = 420;
WiredHome 23:a50ded45dbaf 1204 y3 = 16;
WiredHome 23:a50ded45dbaf 1205 display.triangle(x1,y1, x2,y2, x3,y3, Blue);
WiredHome 23:a50ded45dbaf 1206
WiredHome 23:a50ded45dbaf 1207 for (i=0; i<16; i++) {
WiredHome 23:a50ded45dbaf 1208 x1 = rand() % 240;
WiredHome 23:a50ded45dbaf 1209 y1 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1210 x2 = rand() % 240;
WiredHome 23:a50ded45dbaf 1211 y2 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1212 x3 = rand() % 240;
WiredHome 23:a50ded45dbaf 1213 y3 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1214 display.triangle(x1,y1, x2,y2, x3,y3, display.DOSColor(i));
WiredHome 23:a50ded45dbaf 1215 x1 = 240 + rand() % 240;
WiredHome 23:a50ded45dbaf 1216 y1 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1217 x2 = 240 + rand() % 240;
WiredHome 23:a50ded45dbaf 1218 y2 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1219 x3 = 240 + rand() % 240;
WiredHome 23:a50ded45dbaf 1220 y3 = 50 + rand() % 200;
WiredHome 23:a50ded45dbaf 1221 display.triangle(x1,y1, x2,y2, x3,y3, FILL);
WiredHome 23:a50ded45dbaf 1222 }
WiredHome 23:a50ded45dbaf 1223 }
WiredHome 23:a50ded45dbaf 1224
WiredHome 23:a50ded45dbaf 1225 void CircleTest(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 1226 {
WiredHome 23:a50ded45dbaf 1227 int i, x, y, r1;
WiredHome 23:a50ded45dbaf 1228
WiredHome 23:a50ded45dbaf 1229 pc.printf("Circle Test\r\n");
WiredHome 23:a50ded45dbaf 1230 display.background(Black);
WiredHome 23:a50ded45dbaf 1231 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 1232 display.cls();
WiredHome 23:a50ded45dbaf 1233 display.puts(0,0, "Circle Test");
WiredHome 23:a50ded45dbaf 1234 for (i=0; i<16; i++) {
WiredHome 23:a50ded45dbaf 1235 x = 100 + rand() % 100;
WiredHome 23:a50ded45dbaf 1236 y = 70 + rand() % 200;
WiredHome 23:a50ded45dbaf 1237 r1 = rand() % min(y - 20, 100);
WiredHome 23:a50ded45dbaf 1238 //pc.printf(" (%d,%d) - %d\r\n", x,y,r1);
WiredHome 23:a50ded45dbaf 1239 display.circle(x,y,r1, display.DOSColor(i));
WiredHome 23:a50ded45dbaf 1240
WiredHome 23:a50ded45dbaf 1241 x = 300 + rand() % 100;
WiredHome 23:a50ded45dbaf 1242 y = 70 + rand() % 200;
WiredHome 23:a50ded45dbaf 1243 r1 = rand() % min(y - 20, 100);
WiredHome 23:a50ded45dbaf 1244 //pc.printf(" (%d,%d) - %d FILL\r\n", x,y,r1);
WiredHome 23:a50ded45dbaf 1245 display.circle(x,y,r1, display.DOSColor(i), FILL);
WiredHome 23:a50ded45dbaf 1246 }
WiredHome 23:a50ded45dbaf 1247 }
WiredHome 23:a50ded45dbaf 1248
WiredHome 23:a50ded45dbaf 1249 void EllipseTest(RA8875 & display, Serial & pc)
WiredHome 23:a50ded45dbaf 1250 {
WiredHome 23:a50ded45dbaf 1251 int i,x,y,r1,r2;
WiredHome 23:a50ded45dbaf 1252
WiredHome 23:a50ded45dbaf 1253 pc.printf("Ellipse Test\r\n");
WiredHome 23:a50ded45dbaf 1254 display.background(Black);
WiredHome 23:a50ded45dbaf 1255 display.foreground(Blue);
WiredHome 23:a50ded45dbaf 1256 display.cls();
WiredHome 23:a50ded45dbaf 1257 display.puts(0,0, "Ellipse Test");
WiredHome 23:a50ded45dbaf 1258 for (i=0; i<16; i++) {
WiredHome 23:a50ded45dbaf 1259 x = 100 + rand() % 100;
WiredHome 23:a50ded45dbaf 1260 y = 70 + rand() % 200;
WiredHome 23:a50ded45dbaf 1261 r1 = rand() % min(y - 20, 100);
WiredHome 23:a50ded45dbaf 1262 r2 = rand() % min(y - 20, 100);
WiredHome 23:a50ded45dbaf 1263 display.ellipse(x,y,r1,r2, display.DOSColor(i));
WiredHome 23:a50ded45dbaf 1264
WiredHome 23:a50ded45dbaf 1265 x = 300 + rand() % 100;
WiredHome 23:a50ded45dbaf 1266 y = 70 + rand() % 200;
WiredHome 23:a50ded45dbaf 1267 r1 = rand() % min(y - 20, 100);
WiredHome 23:a50ded45dbaf 1268 r2 = rand() % min(y - 20, 100);
WiredHome 23:a50ded45dbaf 1269 display.ellipse(x,y,r1,r2, FILL);
WiredHome 23:a50ded45dbaf 1270 }
WiredHome 23:a50ded45dbaf 1271 }
WiredHome 23:a50ded45dbaf 1272
WiredHome 23:a50ded45dbaf 1273 void RunTestSet(RA8875 & lcd, Serial & pc)
WiredHome 23:a50ded45dbaf 1274 {
WiredHome 23:a50ded45dbaf 1275 int q = 0;
WiredHome 23:a50ded45dbaf 1276 int automode = 0;
WiredHome 23:a50ded45dbaf 1277 const unsigned char modelist[] = "BDWLROTCEbt"; // auto-test in this order.
WiredHome 23:a50ded45dbaf 1278
WiredHome 23:a50ded45dbaf 1279 while(1) {
WiredHome 23:a50ded45dbaf 1280 pc.printf("\r\n"
WiredHome 23:a50ded45dbaf 1281 "B - Backlight up b - backlight dim\r\n"
WiredHome 23:a50ded45dbaf 1282 "D - DOS Colors W - Web Colors\r\n"
WiredHome 23:a50ded45dbaf 1283 "t - text cursor \r\n"
WiredHome 23:a50ded45dbaf 1284 "L - Lines F - external Font\r\n"
WiredHome 23:a50ded45dbaf 1285 "R - Rectangles O - rOund rectangles\r\n"
WiredHome 23:a50ded45dbaf 1286 "T - Triangles \r\n"
WiredHome 23:a50ded45dbaf 1287 "C - Circles E - Ellipses\r\n"
WiredHome 25:9556a3a9b7cc 1288 "A - Auto Test mode r - reset \r\n"
WiredHome 23:a50ded45dbaf 1289 "> ");
WiredHome 23:a50ded45dbaf 1290 if (automode == -1 || pc.readable()) {
WiredHome 23:a50ded45dbaf 1291 automode = -1;
WiredHome 23:a50ded45dbaf 1292 q = getchar();
WiredHome 23:a50ded45dbaf 1293 } else if (automode >= 0) {
WiredHome 23:a50ded45dbaf 1294 q = modelist[automode];
WiredHome 23:a50ded45dbaf 1295 }
WiredHome 23:a50ded45dbaf 1296 switch(q) {
WiredHome 23:a50ded45dbaf 1297 case 'A':
WiredHome 23:a50ded45dbaf 1298 automode = 0;
WiredHome 23:a50ded45dbaf 1299 break;
WiredHome 23:a50ded45dbaf 1300 case 'B':
WiredHome 29:422616aa04bd 1301 BacklightTest(lcd, pc, 4);
WiredHome 23:a50ded45dbaf 1302 break;
WiredHome 23:a50ded45dbaf 1303 case 'b':
WiredHome 23:a50ded45dbaf 1304 BacklightTest2(lcd, pc);
WiredHome 23:a50ded45dbaf 1305 break;
WiredHome 23:a50ded45dbaf 1306 case 'D':
WiredHome 23:a50ded45dbaf 1307 DOSColorTest(lcd, pc);
WiredHome 23:a50ded45dbaf 1308 break;
WiredHome 23:a50ded45dbaf 1309 case 'W':
WiredHome 23:a50ded45dbaf 1310 WebColorTest(lcd, pc);
WiredHome 23:a50ded45dbaf 1311 break;
WiredHome 23:a50ded45dbaf 1312 case 't':
WiredHome 23:a50ded45dbaf 1313 TextCursorTest(lcd, pc);
WiredHome 23:a50ded45dbaf 1314 break;
WiredHome 23:a50ded45dbaf 1315 case 'F':
WiredHome 23:a50ded45dbaf 1316 ExternalFontTest(lcd, pc);
WiredHome 23:a50ded45dbaf 1317 break;
WiredHome 23:a50ded45dbaf 1318 case 'L':
WiredHome 23:a50ded45dbaf 1319 LineTest(lcd, pc);
WiredHome 23:a50ded45dbaf 1320 break;
WiredHome 23:a50ded45dbaf 1321 case 'R':
WiredHome 23:a50ded45dbaf 1322 RectangleTest(lcd, pc);
WiredHome 23:a50ded45dbaf 1323 break;
WiredHome 23:a50ded45dbaf 1324 case 'O':
WiredHome 23:a50ded45dbaf 1325 RoundRectTest(lcd, pc);
WiredHome 23:a50ded45dbaf 1326 break;
WiredHome 23:a50ded45dbaf 1327 case 'T':
WiredHome 23:a50ded45dbaf 1328 TriangleTest(lcd, pc);
WiredHome 23:a50ded45dbaf 1329 break;
WiredHome 23:a50ded45dbaf 1330 case 'C':
WiredHome 23:a50ded45dbaf 1331 CircleTest(lcd, pc);
WiredHome 23:a50ded45dbaf 1332 break;
WiredHome 23:a50ded45dbaf 1333 case 'E':
WiredHome 23:a50ded45dbaf 1334 EllipseTest(lcd, pc);
WiredHome 23:a50ded45dbaf 1335 break;
WiredHome 23:a50ded45dbaf 1336 case 'r':
WiredHome 23:a50ded45dbaf 1337 pc.printf("Resetting ...\r\n");
WiredHome 23:a50ded45dbaf 1338 wait_ms(20);
WiredHome 23:a50ded45dbaf 1339 mbed_reset();
WiredHome 23:a50ded45dbaf 1340 break;
WiredHome 23:a50ded45dbaf 1341 default:
WiredHome 23:a50ded45dbaf 1342 printf("huh?\n");
WiredHome 23:a50ded45dbaf 1343 break;
WiredHome 23:a50ded45dbaf 1344 }
WiredHome 23:a50ded45dbaf 1345 if (automode >= 0) {
WiredHome 23:a50ded45dbaf 1346 automode++;
WiredHome 23:a50ded45dbaf 1347 if (automode >= sizeof(modelist))
WiredHome 23:a50ded45dbaf 1348 automode = 0;
WiredHome 23:a50ded45dbaf 1349 wait_ms(2000);
WiredHome 23:a50ded45dbaf 1350 }
WiredHome 23:a50ded45dbaf 1351 wait_ms(200);
WiredHome 23:a50ded45dbaf 1352 }
WiredHome 23:a50ded45dbaf 1353 }
WiredHome 23:a50ded45dbaf 1354
WiredHome 23:a50ded45dbaf 1355 #endif // TESTENABLE