RETRO ROBOT E

Dependents:   RETRO_ROBOT_SC16IS750E

Committer:
RLRiedinger
Date:
Mon Mar 02 04:20:29 2015 +0000
Revision:
0:efe9c8c9c925
RETRO ROBOT E

Who changed what in which revision?

UserRevisionLine numberNew contents of line
RLRiedinger 0:efe9c8c9c925 1 #include "DisplayN18.h"
RLRiedinger 0:efe9c8c9c925 2
RLRiedinger 0:efe9c8c9c925 3 char FORMAT_BUFFER[81];
RLRiedinger 0:efe9c8c9c925 4 void debug_print(unsigned int line, const char* function);
RLRiedinger 0:efe9c8c9c925 5 void debug_print_string(unsigned int line, const char* function, char * text);
RLRiedinger 0:efe9c8c9c925 6
RLRiedinger 0:efe9c8c9c925 7 DisplayN18::DisplayN18() : resetPin(P0_20), backlightPin(P0_19), rsPin(P0_7), csPin(P0_2), spi(P0_21, P0_22, P1_15) {
RLRiedinger 0:efe9c8c9c925 8
RLRiedinger 0:efe9c8c9c925 9 this->resetPin.write(false);
RLRiedinger 0:efe9c8c9c925 10 this->backlightPin.write(true);
RLRiedinger 0:efe9c8c9c925 11 this->rsPin.write(false);
RLRiedinger 0:efe9c8c9c925 12
RLRiedinger 0:efe9c8c9c925 13 this->spi.format(8, 3);
RLRiedinger 0:efe9c8c9c925 14 this->spi.frequency(15000000);
RLRiedinger 0:efe9c8c9c925 15
RLRiedinger 0:efe9c8c9c925 16 this->initialize();
RLRiedinger 0:efe9c8c9c925 17
RLRiedinger 0:efe9c8c9c925 18 }
RLRiedinger 0:efe9c8c9c925 19
RLRiedinger 0:efe9c8c9c925 20 void DisplayN18::writeCommand(unsigned char command) {
RLRiedinger 0:efe9c8c9c925 21
RLRiedinger 0:efe9c8c9c925 22 this->rsPin.write(false);
RLRiedinger 0:efe9c8c9c925 23
RLRiedinger 0:efe9c8c9c925 24 this->csPin.write(false);
RLRiedinger 0:efe9c8c9c925 25
RLRiedinger 0:efe9c8c9c925 26 this->spi.write(command);
RLRiedinger 0:efe9c8c9c925 27
RLRiedinger 0:efe9c8c9c925 28 this->csPin.write(true);
RLRiedinger 0:efe9c8c9c925 29
RLRiedinger 0:efe9c8c9c925 30 }
RLRiedinger 0:efe9c8c9c925 31
RLRiedinger 0:efe9c8c9c925 32 void DisplayN18::writeData(unsigned char data) {
RLRiedinger 0:efe9c8c9c925 33
RLRiedinger 0:efe9c8c9c925 34 this->writeData(&data, 1);
RLRiedinger 0:efe9c8c9c925 35
RLRiedinger 0:efe9c8c9c925 36 }
RLRiedinger 0:efe9c8c9c925 37
RLRiedinger 0:efe9c8c9c925 38 void DisplayN18::writeData(const unsigned char* data, unsigned int length) {
RLRiedinger 0:efe9c8c9c925 39
RLRiedinger 0:efe9c8c9c925 40 this->rsPin.write(true);
RLRiedinger 0:efe9c8c9c925 41
RLRiedinger 0:efe9c8c9c925 42 this->csPin.write(false);
RLRiedinger 0:efe9c8c9c925 43
RLRiedinger 0:efe9c8c9c925 44 for (unsigned int i = 0; i < length; i++)
RLRiedinger 0:efe9c8c9c925 45 this->spi.write(data[i]);
RLRiedinger 0:efe9c8c9c925 46
RLRiedinger 0:efe9c8c9c925 47 this->csPin.write(true);
RLRiedinger 0:efe9c8c9c925 48
RLRiedinger 0:efe9c8c9c925 49 }
RLRiedinger 0:efe9c8c9c925 50
RLRiedinger 0:efe9c8c9c925 51 void DisplayN18::reset() {
RLRiedinger 0:efe9c8c9c925 52
RLRiedinger 0:efe9c8c9c925 53 this->resetPin.write(false);
RLRiedinger 0:efe9c8c9c925 54 wait_ms(300);
RLRiedinger 0:efe9c8c9c925 55
RLRiedinger 0:efe9c8c9c925 56 this->resetPin.write(true);
RLRiedinger 0:efe9c8c9c925 57 wait_ms(500);
RLRiedinger 0:efe9c8c9c925 58
RLRiedinger 0:efe9c8c9c925 59 }
RLRiedinger 0:efe9c8c9c925 60
RLRiedinger 0:efe9c8c9c925 61 void DisplayN18::initialize() {
RLRiedinger 0:efe9c8c9c925 62
RLRiedinger 0:efe9c8c9c925 63 this->reset();
RLRiedinger 0:efe9c8c9c925 64
RLRiedinger 0:efe9c8c9c925 65 this->writeCommand(0x11);
RLRiedinger 0:efe9c8c9c925 66
RLRiedinger 0:efe9c8c9c925 67 wait_ms(120);
RLRiedinger 0:efe9c8c9c925 68
RLRiedinger 0:efe9c8c9c925 69 this->writeCommand(0xB1);
RLRiedinger 0:efe9c8c9c925 70 this->writeData(0x01); this->writeData(0x2C); this->writeData(0x2D);
RLRiedinger 0:efe9c8c9c925 71 this->writeCommand(0xB2);
RLRiedinger 0:efe9c8c9c925 72 this->writeData(0x01); this->writeData(0x2C); this->writeData(0x2D);
RLRiedinger 0:efe9c8c9c925 73 this->writeCommand(0xB3);
RLRiedinger 0:efe9c8c9c925 74 this->writeData(0x01); this->writeData(0x2C); this->writeData(0x2D);
RLRiedinger 0:efe9c8c9c925 75 this->writeData(0x01); this->writeData(0x2C); this->writeData(0x2D);
RLRiedinger 0:efe9c8c9c925 76
RLRiedinger 0:efe9c8c9c925 77 this->writeCommand(0xB4);
RLRiedinger 0:efe9c8c9c925 78 this->writeData(0x07);
RLRiedinger 0:efe9c8c9c925 79
RLRiedinger 0:efe9c8c9c925 80 this->writeCommand(0xC0);
RLRiedinger 0:efe9c8c9c925 81 this->writeData(0xA2); this->writeData(0x02); this->writeData(0x84);
RLRiedinger 0:efe9c8c9c925 82 this->writeCommand(0xC1); this->writeData(0xC5);
RLRiedinger 0:efe9c8c9c925 83 this->writeCommand(0xC2);
RLRiedinger 0:efe9c8c9c925 84 this->writeData(0x0A); this->writeData(0x00);
RLRiedinger 0:efe9c8c9c925 85 this->writeCommand(0xC3);
RLRiedinger 0:efe9c8c9c925 86 this->writeData(0x8A); this->writeData(0x2A);
RLRiedinger 0:efe9c8c9c925 87 this->writeCommand(0xC4);
RLRiedinger 0:efe9c8c9c925 88 this->writeData(0x8A); this->writeData(0xEE);
RLRiedinger 0:efe9c8c9c925 89
RLRiedinger 0:efe9c8c9c925 90 this->writeCommand(0xC5);
RLRiedinger 0:efe9c8c9c925 91 this->writeData(0x0E);
RLRiedinger 0:efe9c8c9c925 92
RLRiedinger 0:efe9c8c9c925 93 this->writeCommand(0x36);
RLRiedinger 0:efe9c8c9c925 94 this->writeData(0xA8);
RLRiedinger 0:efe9c8c9c925 95
RLRiedinger 0:efe9c8c9c925 96 this->writeCommand(0xe0);
RLRiedinger 0:efe9c8c9c925 97 this->writeData(0x0f); this->writeData(0x1a);
RLRiedinger 0:efe9c8c9c925 98 this->writeData(0x0f); this->writeData(0x18);
RLRiedinger 0:efe9c8c9c925 99 this->writeData(0x2f); this->writeData(0x28);
RLRiedinger 0:efe9c8c9c925 100 this->writeData(0x20); this->writeData(0x22);
RLRiedinger 0:efe9c8c9c925 101 this->writeData(0x1f); this->writeData(0x1b);
RLRiedinger 0:efe9c8c9c925 102 this->writeData(0x23); this->writeData(0x37); this->writeData(0x00);
RLRiedinger 0:efe9c8c9c925 103 this->writeData(0x07);
RLRiedinger 0:efe9c8c9c925 104 this->writeData(0x02); this->writeData(0x10);
RLRiedinger 0:efe9c8c9c925 105
RLRiedinger 0:efe9c8c9c925 106 this->writeCommand(0xe1);
RLRiedinger 0:efe9c8c9c925 107 this->writeData(0x0f); this->writeData(0x1b);
RLRiedinger 0:efe9c8c9c925 108 this->writeData(0x0f); this->writeData(0x17);
RLRiedinger 0:efe9c8c9c925 109 this->writeData(0x33); this->writeData(0x2c);
RLRiedinger 0:efe9c8c9c925 110 this->writeData(0x29); this->writeData(0x2e);
RLRiedinger 0:efe9c8c9c925 111 this->writeData(0x30); this->writeData(0x30);
RLRiedinger 0:efe9c8c9c925 112 this->writeData(0x39); this->writeData(0x3f);
RLRiedinger 0:efe9c8c9c925 113 this->writeData(0x00); this->writeData(0x07);
RLRiedinger 0:efe9c8c9c925 114 this->writeData(0x03); this->writeData(0x10);
RLRiedinger 0:efe9c8c9c925 115
RLRiedinger 0:efe9c8c9c925 116 this->writeCommand(0x2a);
RLRiedinger 0:efe9c8c9c925 117 this->writeData(0x00); this->writeData(0x00);
RLRiedinger 0:efe9c8c9c925 118 this->writeData(0x00); this->writeData(0x7f);
RLRiedinger 0:efe9c8c9c925 119 this->writeCommand(0x2b);
RLRiedinger 0:efe9c8c9c925 120 this->writeData(0x00); this->writeData(0x00);
RLRiedinger 0:efe9c8c9c925 121 this->writeData(0x00); this->writeData(0x9f);
RLRiedinger 0:efe9c8c9c925 122
RLRiedinger 0:efe9c8c9c925 123 this->writeCommand(0xF0);
RLRiedinger 0:efe9c8c9c925 124 this->writeData(0x01);
RLRiedinger 0:efe9c8c9c925 125 this->writeCommand(0xF6);
RLRiedinger 0:efe9c8c9c925 126 this->writeData(0x00);
RLRiedinger 0:efe9c8c9c925 127
RLRiedinger 0:efe9c8c9c925 128 this->writeCommand(0x3A);
RLRiedinger 0:efe9c8c9c925 129 this->writeData(0x05);
RLRiedinger 0:efe9c8c9c925 130
RLRiedinger 0:efe9c8c9c925 131 this->writeCommand(0x29);
RLRiedinger 0:efe9c8c9c925 132
RLRiedinger 0:efe9c8c9c925 133 this->clear();
RLRiedinger 0:efe9c8c9c925 134
RLRiedinger 0:efe9c8c9c925 135 }
RLRiedinger 0:efe9c8c9c925 136
RLRiedinger 0:efe9c8c9c925 137 void DisplayN18::setClippingArea(unsigned char x, unsigned char y, unsigned char width, unsigned char height) {
RLRiedinger 0:efe9c8c9c925 138
RLRiedinger 0:efe9c8c9c925 139 unsigned char data[4] = { 0x00, 0x00, 0x00, 0x00 };
RLRiedinger 0:efe9c8c9c925 140
RLRiedinger 0:efe9c8c9c925 141 data[1] = x;
RLRiedinger 0:efe9c8c9c925 142 data[3] = x + width;
RLRiedinger 0:efe9c8c9c925 143 this->writeCommand(0x2A);
RLRiedinger 0:efe9c8c9c925 144 this->writeData(data, 4);
RLRiedinger 0:efe9c8c9c925 145
RLRiedinger 0:efe9c8c9c925 146 data[1] = y;
RLRiedinger 0:efe9c8c9c925 147 data[3] = y + height;
RLRiedinger 0:efe9c8c9c925 148 this->writeCommand(0x2B);
RLRiedinger 0:efe9c8c9c925 149 this->writeData(data, 4);
RLRiedinger 0:efe9c8c9c925 150
RLRiedinger 0:efe9c8c9c925 151 }
RLRiedinger 0:efe9c8c9c925 152
RLRiedinger 0:efe9c8c9c925 153 unsigned short DisplayN18::rgbToShort(unsigned char r, unsigned char g, unsigned char b) {
RLRiedinger 0:efe9c8c9c925 154
RLRiedinger 0:efe9c8c9c925 155 unsigned short red = r;
RLRiedinger 0:efe9c8c9c925 156 unsigned short green = g;
RLRiedinger 0:efe9c8c9c925 157 unsigned short blue = b;
RLRiedinger 0:efe9c8c9c925 158
RLRiedinger 0:efe9c8c9c925 159 red /= 8;
RLRiedinger 0:efe9c8c9c925 160 green /= 4;
RLRiedinger 0:efe9c8c9c925 161 blue /= 8;
RLRiedinger 0:efe9c8c9c925 162
RLRiedinger 0:efe9c8c9c925 163 red &= 0x1F;
RLRiedinger 0:efe9c8c9c925 164 green &= 0x3F;
RLRiedinger 0:efe9c8c9c925 165 blue &= 0x1F;
RLRiedinger 0:efe9c8c9c925 166
RLRiedinger 0:efe9c8c9c925 167 red <<= 3;
RLRiedinger 0:efe9c8c9c925 168 blue <<= 8;
RLRiedinger 0:efe9c8c9c925 169 green = ((green & 0x7) << 13) + ((green & 0x38) >> 3);
RLRiedinger 0:efe9c8c9c925 170
RLRiedinger 0:efe9c8c9c925 171 return red | green | blue;
RLRiedinger 0:efe9c8c9c925 172
RLRiedinger 0:efe9c8c9c925 173 }
RLRiedinger 0:efe9c8c9c925 174
RLRiedinger 0:efe9c8c9c925 175 void DisplayN18::clear(unsigned short backColor) {
RLRiedinger 0:efe9c8c9c925 176
RLRiedinger 0:efe9c8c9c925 177 for (unsigned int i = 0; i < DisplayN18::WIDTH; i += 10)
RLRiedinger 0:efe9c8c9c925 178 for (unsigned int j = 0; j < DisplayN18::HEIGHT; j += 8)
RLRiedinger 0:efe9c8c9c925 179 this->fillRect(i, j, 10, 8, backColor);
RLRiedinger 0:efe9c8c9c925 180
RLRiedinger 0:efe9c8c9c925 181 }
RLRiedinger 0:efe9c8c9c925 182
RLRiedinger 0:efe9c8c9c925 183 void DisplayN18::draw(const unsigned short* data, int x, int y, int width, int height) {
RLRiedinger 0:efe9c8c9c925 184
RLRiedinger 0:efe9c8c9c925 185 this->setClippingArea(x, y, width - 1, height - 1);
RLRiedinger 0:efe9c8c9c925 186 this->writeCommand(0x2C);
RLRiedinger 0:efe9c8c9c925 187 this->writeData(reinterpret_cast<const unsigned char*>(data), width * height * 2);
RLRiedinger 0:efe9c8c9c925 188
RLRiedinger 0:efe9c8c9c925 189 }
RLRiedinger 0:efe9c8c9c925 190
RLRiedinger 0:efe9c8c9c925 191 void DisplayN18::setPixel(int x, int y, unsigned short foreColor) {
RLRiedinger 0:efe9c8c9c925 192
RLRiedinger 0:efe9c8c9c925 193 this->draw(&foreColor, x, y, 1, 1);
RLRiedinger 0:efe9c8c9c925 194
RLRiedinger 0:efe9c8c9c925 195 }
RLRiedinger 0:efe9c8c9c925 196
RLRiedinger 0:efe9c8c9c925 197 void DisplayN18::fillRect(int x, int y, int width, int height, unsigned short foreColor) {
RLRiedinger 0:efe9c8c9c925 198
RLRiedinger 0:efe9c8c9c925 199 this->setClippingArea(static_cast<unsigned char>(x), static_cast<unsigned char>(y), static_cast<unsigned char>(width - 1), static_cast<unsigned char>(height));
RLRiedinger 0:efe9c8c9c925 200
RLRiedinger 0:efe9c8c9c925 201 this->writeCommand(0x2C);
RLRiedinger 0:efe9c8c9c925 202
RLRiedinger 0:efe9c8c9c925 203 unsigned short buffer[50];
RLRiedinger 0:efe9c8c9c925 204 for (int j = 0; j < sizeof(buffer) / 2; j++)
RLRiedinger 0:efe9c8c9c925 205 buffer[j] = foreColor;
RLRiedinger 0:efe9c8c9c925 206
RLRiedinger 0:efe9c8c9c925 207 this->rsPin.write(true);
RLRiedinger 0:efe9c8c9c925 208
RLRiedinger 0:efe9c8c9c925 209 int i;
RLRiedinger 0:efe9c8c9c925 210 for (i = sizeof(buffer); i < height * width * 2; i += sizeof(buffer))
RLRiedinger 0:efe9c8c9c925 211 this->writeData(reinterpret_cast<unsigned char*>(buffer), sizeof(buffer));
RLRiedinger 0:efe9c8c9c925 212
RLRiedinger 0:efe9c8c9c925 213 i -= sizeof(buffer);
RLRiedinger 0:efe9c8c9c925 214 if (i != height * width * 2)
RLRiedinger 0:efe9c8c9c925 215 this->writeData(reinterpret_cast<unsigned char*>(buffer), height * width * 2 - i);
RLRiedinger 0:efe9c8c9c925 216
RLRiedinger 0:efe9c8c9c925 217 }
RLRiedinger 0:efe9c8c9c925 218
RLRiedinger 0:efe9c8c9c925 219 void DisplayN18::drawRect(int x, int y, int width, int height, unsigned short foreColor) {
RLRiedinger 0:efe9c8c9c925 220
RLRiedinger 0:efe9c8c9c925 221 this->drawLine(x, y, x + width, y, foreColor);
RLRiedinger 0:efe9c8c9c925 222 this->drawLine(x, y + height, x + width, y + height, foreColor);
RLRiedinger 0:efe9c8c9c925 223 this->drawLine(x, y, x, y + height, foreColor);
RLRiedinger 0:efe9c8c9c925 224 this->drawLine(x + width, y, x + width, y + height, foreColor);
RLRiedinger 0:efe9c8c9c925 225
RLRiedinger 0:efe9c8c9c925 226 }
RLRiedinger 0:efe9c8c9c925 227
RLRiedinger 0:efe9c8c9c925 228 void DisplayN18::fillCircle(int x, int y, int radius, unsigned short foreColor) {
RLRiedinger 0:efe9c8c9c925 229
RLRiedinger 0:efe9c8c9c925 230 int f = 1 - radius;
RLRiedinger 0:efe9c8c9c925 231 int dd_f_x = 1;
RLRiedinger 0:efe9c8c9c925 232 int dd_f_y = -2 * radius;
RLRiedinger 0:efe9c8c9c925 233 int x1 = 0;
RLRiedinger 0:efe9c8c9c925 234 int y1 = radius;
RLRiedinger 0:efe9c8c9c925 235
RLRiedinger 0:efe9c8c9c925 236 for (int i = y - radius; i <= y + radius; i++)
RLRiedinger 0:efe9c8c9c925 237 this->setPixel(x, i, foreColor);
RLRiedinger 0:efe9c8c9c925 238
RLRiedinger 0:efe9c8c9c925 239 while (x1 < y1) {
RLRiedinger 0:efe9c8c9c925 240
RLRiedinger 0:efe9c8c9c925 241 if (f >= 0) {
RLRiedinger 0:efe9c8c9c925 242
RLRiedinger 0:efe9c8c9c925 243 y1--;
RLRiedinger 0:efe9c8c9c925 244 dd_f_y += 2;
RLRiedinger 0:efe9c8c9c925 245 f += dd_f_y;
RLRiedinger 0:efe9c8c9c925 246
RLRiedinger 0:efe9c8c9c925 247 }
RLRiedinger 0:efe9c8c9c925 248
RLRiedinger 0:efe9c8c9c925 249 x1++;
RLRiedinger 0:efe9c8c9c925 250 dd_f_x += 2;
RLRiedinger 0:efe9c8c9c925 251 f += dd_f_x;
RLRiedinger 0:efe9c8c9c925 252
RLRiedinger 0:efe9c8c9c925 253 for (int i = y - y1; i <= y + y1; i++) {
RLRiedinger 0:efe9c8c9c925 254
RLRiedinger 0:efe9c8c9c925 255 this->setPixel(x + x1, i, foreColor);
RLRiedinger 0:efe9c8c9c925 256 this->setPixel(x - x1, i, foreColor);
RLRiedinger 0:efe9c8c9c925 257
RLRiedinger 0:efe9c8c9c925 258 }
RLRiedinger 0:efe9c8c9c925 259
RLRiedinger 0:efe9c8c9c925 260 for (int i = y - x1; i <= y + x1; i++) {
RLRiedinger 0:efe9c8c9c925 261
RLRiedinger 0:efe9c8c9c925 262 this->setPixel(x + y1, i, foreColor);
RLRiedinger 0:efe9c8c9c925 263 this->setPixel(x - y1, i, foreColor);
RLRiedinger 0:efe9c8c9c925 264
RLRiedinger 0:efe9c8c9c925 265 }
RLRiedinger 0:efe9c8c9c925 266
RLRiedinger 0:efe9c8c9c925 267 }
RLRiedinger 0:efe9c8c9c925 268
RLRiedinger 0:efe9c8c9c925 269 }
RLRiedinger 0:efe9c8c9c925 270
RLRiedinger 0:efe9c8c9c925 271 void DisplayN18::drawCircle(int x, int y, int radius, unsigned short foreColor) {
RLRiedinger 0:efe9c8c9c925 272
RLRiedinger 0:efe9c8c9c925 273 int f = 1 - radius;
RLRiedinger 0:efe9c8c9c925 274 int dd_f_x = 1;
RLRiedinger 0:efe9c8c9c925 275 int dd_f_y = -2 * radius;
RLRiedinger 0:efe9c8c9c925 276 int x1 = 0;
RLRiedinger 0:efe9c8c9c925 277 int y1 = radius;
RLRiedinger 0:efe9c8c9c925 278
RLRiedinger 0:efe9c8c9c925 279 this->setPixel(x, y + radius, foreColor);
RLRiedinger 0:efe9c8c9c925 280 this->setPixel(x, y - radius, foreColor);
RLRiedinger 0:efe9c8c9c925 281 this->setPixel(x + radius, y, foreColor);
RLRiedinger 0:efe9c8c9c925 282 this->setPixel(x - radius, y, foreColor);
RLRiedinger 0:efe9c8c9c925 283
RLRiedinger 0:efe9c8c9c925 284 while (x1 < y1) {
RLRiedinger 0:efe9c8c9c925 285
RLRiedinger 0:efe9c8c9c925 286 if (f >= 0) {
RLRiedinger 0:efe9c8c9c925 287
RLRiedinger 0:efe9c8c9c925 288 y1--;
RLRiedinger 0:efe9c8c9c925 289 dd_f_y += 2;
RLRiedinger 0:efe9c8c9c925 290 f += dd_f_y;
RLRiedinger 0:efe9c8c9c925 291
RLRiedinger 0:efe9c8c9c925 292 }
RLRiedinger 0:efe9c8c9c925 293
RLRiedinger 0:efe9c8c9c925 294 x1++;
RLRiedinger 0:efe9c8c9c925 295 dd_f_x += 2;
RLRiedinger 0:efe9c8c9c925 296 f += dd_f_x;
RLRiedinger 0:efe9c8c9c925 297
RLRiedinger 0:efe9c8c9c925 298 this->setPixel(x + x1, y + y1, foreColor);
RLRiedinger 0:efe9c8c9c925 299 this->setPixel(x - x1, y + y1, foreColor);
RLRiedinger 0:efe9c8c9c925 300 this->setPixel(x + x1, y - y1, foreColor);
RLRiedinger 0:efe9c8c9c925 301 this->setPixel(x - x1, y - y1, foreColor);
RLRiedinger 0:efe9c8c9c925 302
RLRiedinger 0:efe9c8c9c925 303 this->setPixel(x + y1, y + x1, foreColor);
RLRiedinger 0:efe9c8c9c925 304 this->setPixel(x - y1, y + x1, foreColor);
RLRiedinger 0:efe9c8c9c925 305 this->setPixel(x + y1, y - x1, foreColor);
RLRiedinger 0:efe9c8c9c925 306 this->setPixel(x - y1, y - x1, foreColor);
RLRiedinger 0:efe9c8c9c925 307 }
RLRiedinger 0:efe9c8c9c925 308
RLRiedinger 0:efe9c8c9c925 309 }
RLRiedinger 0:efe9c8c9c925 310
RLRiedinger 0:efe9c8c9c925 311 void DisplayN18::drawLine(int x0, int y0, int x1, int y1, unsigned short foreColor) {
RLRiedinger 0:efe9c8c9c925 312
RLRiedinger 0:efe9c8c9c925 313 if (x0 == x1) {
RLRiedinger 0:efe9c8c9c925 314
RLRiedinger 0:efe9c8c9c925 315 if (y1 < y0) {
RLRiedinger 0:efe9c8c9c925 316
RLRiedinger 0:efe9c8c9c925 317 int temp = y0;
RLRiedinger 0:efe9c8c9c925 318 y0 = y1;
RLRiedinger 0:efe9c8c9c925 319 y1 = temp;
RLRiedinger 0:efe9c8c9c925 320
RLRiedinger 0:efe9c8c9c925 321 }
RLRiedinger 0:efe9c8c9c925 322
RLRiedinger 0:efe9c8c9c925 323 this->setClippingArea(static_cast<unsigned char>(x0), static_cast<unsigned char>(y0),
RLRiedinger 0:efe9c8c9c925 324 0, static_cast<unsigned char>(y1 - y0 - 1));
RLRiedinger 0:efe9c8c9c925 325
RLRiedinger 0:efe9c8c9c925 326 this->writeCommand(0x2C);
RLRiedinger 0:efe9c8c9c925 327
RLRiedinger 0:efe9c8c9c925 328 unsigned short data[DisplayN18::STEP];
RLRiedinger 0:efe9c8c9c925 329
RLRiedinger 0:efe9c8c9c925 330 for (int i = 0; i < DisplayN18::STEP; i++) {
RLRiedinger 0:efe9c8c9c925 331
RLRiedinger 0:efe9c8c9c925 332 data[i] = foreColor;
RLRiedinger 0:efe9c8c9c925 333
RLRiedinger 0:efe9c8c9c925 334 }
RLRiedinger 0:efe9c8c9c925 335
RLRiedinger 0:efe9c8c9c925 336 for (unsigned char thisY = y0; thisY < y1; thisY += DisplayN18::STEP) {
RLRiedinger 0:efe9c8c9c925 337
RLRiedinger 0:efe9c8c9c925 338 this->writeData(reinterpret_cast<unsigned char*>(data),
RLRiedinger 0:efe9c8c9c925 339 (thisY + DisplayN18::STEP <= y1 ? DisplayN18::STEP : y1 - thisY) * 2);
RLRiedinger 0:efe9c8c9c925 340
RLRiedinger 0:efe9c8c9c925 341 }
RLRiedinger 0:efe9c8c9c925 342
RLRiedinger 0:efe9c8c9c925 343 return;
RLRiedinger 0:efe9c8c9c925 344
RLRiedinger 0:efe9c8c9c925 345 }
RLRiedinger 0:efe9c8c9c925 346
RLRiedinger 0:efe9c8c9c925 347 if (y0 == y1) {
RLRiedinger 0:efe9c8c9c925 348
RLRiedinger 0:efe9c8c9c925 349 if (x1 < x0) {
RLRiedinger 0:efe9c8c9c925 350
RLRiedinger 0:efe9c8c9c925 351 int temp = x0;
RLRiedinger 0:efe9c8c9c925 352 x0 = x1;
RLRiedinger 0:efe9c8c9c925 353 x1 = temp;
RLRiedinger 0:efe9c8c9c925 354
RLRiedinger 0:efe9c8c9c925 355 }
RLRiedinger 0:efe9c8c9c925 356
RLRiedinger 0:efe9c8c9c925 357 this->setClippingArea(static_cast<unsigned char>(x0), static_cast<unsigned char>(y0), static_cast<unsigned char>(x1 - x0 - 1), 0);
RLRiedinger 0:efe9c8c9c925 358 this->writeCommand(0x2C);
RLRiedinger 0:efe9c8c9c925 359
RLRiedinger 0:efe9c8c9c925 360 unsigned short data[DisplayN18::STEP];
RLRiedinger 0:efe9c8c9c925 361
RLRiedinger 0:efe9c8c9c925 362 for (int i = 0; i < DisplayN18::STEP; i++) {
RLRiedinger 0:efe9c8c9c925 363
RLRiedinger 0:efe9c8c9c925 364 data[i] = foreColor;
RLRiedinger 0:efe9c8c9c925 365 }
RLRiedinger 0:efe9c8c9c925 366
RLRiedinger 0:efe9c8c9c925 367 for (unsigned char thisX = x0; thisX < x1; thisX += DisplayN18::STEP) {
RLRiedinger 0:efe9c8c9c925 368
RLRiedinger 0:efe9c8c9c925 369 this->writeData(reinterpret_cast<unsigned char*>(data), (thisX + DisplayN18::STEP <= x1 ? DisplayN18::STEP : x1 - thisX) * 2);
RLRiedinger 0:efe9c8c9c925 370
RLRiedinger 0:efe9c8c9c925 371 }
RLRiedinger 0:efe9c8c9c925 372
RLRiedinger 0:efe9c8c9c925 373 return;
RLRiedinger 0:efe9c8c9c925 374
RLRiedinger 0:efe9c8c9c925 375 }
RLRiedinger 0:efe9c8c9c925 376
RLRiedinger 0:efe9c8c9c925 377 int t;
RLRiedinger 0:efe9c8c9c925 378
RLRiedinger 0:efe9c8c9c925 379 bool steep = ((y1 - y0) < 0 ? -(y1 - y0) : (y1 - y0)) > ((x1 - x0) < 0 ? -(x1 - x0) : (x1 - x0));
RLRiedinger 0:efe9c8c9c925 380
RLRiedinger 0:efe9c8c9c925 381 if (steep) {
RLRiedinger 0:efe9c8c9c925 382
RLRiedinger 0:efe9c8c9c925 383 t = x0;
RLRiedinger 0:efe9c8c9c925 384 x0 = y0;
RLRiedinger 0:efe9c8c9c925 385 y0 = t;
RLRiedinger 0:efe9c8c9c925 386 t = x1;
RLRiedinger 0:efe9c8c9c925 387 x1 = y1;
RLRiedinger 0:efe9c8c9c925 388 y1 = t;
RLRiedinger 0:efe9c8c9c925 389
RLRiedinger 0:efe9c8c9c925 390 }
RLRiedinger 0:efe9c8c9c925 391
RLRiedinger 0:efe9c8c9c925 392 if (x0 > x1) {
RLRiedinger 0:efe9c8c9c925 393
RLRiedinger 0:efe9c8c9c925 394 t = x0;
RLRiedinger 0:efe9c8c9c925 395 x0 = x1;
RLRiedinger 0:efe9c8c9c925 396 x1 = t;
RLRiedinger 0:efe9c8c9c925 397
RLRiedinger 0:efe9c8c9c925 398 t = y0;
RLRiedinger 0:efe9c8c9c925 399 y0 = y1;
RLRiedinger 0:efe9c8c9c925 400 y1 = t;
RLRiedinger 0:efe9c8c9c925 401
RLRiedinger 0:efe9c8c9c925 402 }
RLRiedinger 0:efe9c8c9c925 403
RLRiedinger 0:efe9c8c9c925 404 int dx, dy;
RLRiedinger 0:efe9c8c9c925 405 dx = x1 - x0;
RLRiedinger 0:efe9c8c9c925 406 dy = (y1 - y0) < 0 ? -(y1 - y0) : (y1 - y0);
RLRiedinger 0:efe9c8c9c925 407
RLRiedinger 0:efe9c8c9c925 408 int err = (dx / 2);
RLRiedinger 0:efe9c8c9c925 409 int ystep;
RLRiedinger 0:efe9c8c9c925 410
RLRiedinger 0:efe9c8c9c925 411 ystep = y0 < y1 ? 1 : -1;
RLRiedinger 0:efe9c8c9c925 412
RLRiedinger 0:efe9c8c9c925 413 for (; x0 < x1; x0++) {
RLRiedinger 0:efe9c8c9c925 414
RLRiedinger 0:efe9c8c9c925 415 if (steep) {
RLRiedinger 0:efe9c8c9c925 416
RLRiedinger 0:efe9c8c9c925 417 this->setPixel(y0, x0, foreColor);
RLRiedinger 0:efe9c8c9c925 418
RLRiedinger 0:efe9c8c9c925 419 } else {
RLRiedinger 0:efe9c8c9c925 420
RLRiedinger 0:efe9c8c9c925 421 this->setPixel(x0, y0, foreColor);
RLRiedinger 0:efe9c8c9c925 422
RLRiedinger 0:efe9c8c9c925 423 }
RLRiedinger 0:efe9c8c9c925 424
RLRiedinger 0:efe9c8c9c925 425 err -= dy;
RLRiedinger 0:efe9c8c9c925 426
RLRiedinger 0:efe9c8c9c925 427 if (err < 0) {
RLRiedinger 0:efe9c8c9c925 428
RLRiedinger 0:efe9c8c9c925 429 y0 += (char)ystep;
RLRiedinger 0:efe9c8c9c925 430 err += dx;
RLRiedinger 0:efe9c8c9c925 431
RLRiedinger 0:efe9c8c9c925 432 }
RLRiedinger 0:efe9c8c9c925 433
RLRiedinger 0:efe9c8c9c925 434 }
RLRiedinger 0:efe9c8c9c925 435
RLRiedinger 0:efe9c8c9c925 436 }
RLRiedinger 0:efe9c8c9c925 437
RLRiedinger 0:efe9c8c9c925 438 #ifdef USE_CHARACTERS
RLRiedinger 0:efe9c8c9c925 439
RLRiedinger 0:efe9c8c9c925 440 unsigned char characters[96 * 5] = {
RLRiedinger 0:efe9c8c9c925 441
RLRiedinger 0:efe9c8c9c925 442 0x00, 0x00, 0x00, 0x00, 0x00, /* Space 0x20 */
RLRiedinger 0:efe9c8c9c925 443 0x00, 0x00, 0x4f, 0x00, 0x00, /* ! */
RLRiedinger 0:efe9c8c9c925 444 0x00, 0x07, 0x00, 0x07, 0x00, /* " */
RLRiedinger 0:efe9c8c9c925 445 0x14, 0x7f, 0x14, 0x7f, 0x14, /* # */
RLRiedinger 0:efe9c8c9c925 446 0x24, 0x2a, 0x7f, 0x2a, 0x12, /* $ */
RLRiedinger 0:efe9c8c9c925 447 0x23, 0x13, 0x08, 0x64, 0x62, /* % */
RLRiedinger 0:efe9c8c9c925 448 0x36, 0x49, 0x55, 0x22, 0x20, /* & */
RLRiedinger 0:efe9c8c9c925 449 0x00, 0x05, 0x03, 0x00, 0x00, /* ' */
RLRiedinger 0:efe9c8c9c925 450 0x00, 0x1c, 0x22, 0x41, 0x00, /* ( */
RLRiedinger 0:efe9c8c9c925 451 0x00, 0x41, 0x22, 0x1c, 0x00, /* ) */
RLRiedinger 0:efe9c8c9c925 452 0x14, 0x08, 0x3e, 0x08, 0x14, /* // */
RLRiedinger 0:efe9c8c9c925 453 0x08, 0x08, 0x3e, 0x08, 0x08, /* + */
RLRiedinger 0:efe9c8c9c925 454 0x50, 0x30, 0x00, 0x00, 0x00, /* , */
RLRiedinger 0:efe9c8c9c925 455 0x08, 0x08, 0x08, 0x08, 0x08, /* - */
RLRiedinger 0:efe9c8c9c925 456 0x00, 0x60, 0x60, 0x00, 0x00, /* . */
RLRiedinger 0:efe9c8c9c925 457 0x20, 0x10, 0x08, 0x04, 0x02, /* / */
RLRiedinger 0:efe9c8c9c925 458 0x3e, 0x51, 0x49, 0x45, 0x3e, /* 0 0x30 */
RLRiedinger 0:efe9c8c9c925 459 0x00, 0x42, 0x7f, 0x40, 0x00, /* 1 */
RLRiedinger 0:efe9c8c9c925 460 0x42, 0x61, 0x51, 0x49, 0x46, /* 2 */
RLRiedinger 0:efe9c8c9c925 461 0x21, 0x41, 0x45, 0x4b, 0x31, /* 3 */
RLRiedinger 0:efe9c8c9c925 462 0x18, 0x14, 0x12, 0x7f, 0x10, /* 4 */
RLRiedinger 0:efe9c8c9c925 463 0x27, 0x45, 0x45, 0x45, 0x39, /* 5 */
RLRiedinger 0:efe9c8c9c925 464 0x3c, 0x4a, 0x49, 0x49, 0x30, /* 6 */
RLRiedinger 0:efe9c8c9c925 465 0x01, 0x71, 0x09, 0x05, 0x03, /* 7 */
RLRiedinger 0:efe9c8c9c925 466 0x36, 0x49, 0x49, 0x49, 0x36, /* 8 */
RLRiedinger 0:efe9c8c9c925 467 0x06, 0x49, 0x49, 0x29, 0x1e, /* 9 */
RLRiedinger 0:efe9c8c9c925 468 0x00, 0x36, 0x36, 0x00, 0x00, /* : */
RLRiedinger 0:efe9c8c9c925 469 0x00, 0x56, 0x36, 0x00, 0x00, /* ; */
RLRiedinger 0:efe9c8c9c925 470 0x08, 0x14, 0x22, 0x41, 0x00, /* < */
RLRiedinger 0:efe9c8c9c925 471 0x14, 0x14, 0x14, 0x14, 0x14, /* = */
RLRiedinger 0:efe9c8c9c925 472 0x00, 0x41, 0x22, 0x14, 0x08, /* > */
RLRiedinger 0:efe9c8c9c925 473 0x02, 0x01, 0x51, 0x09, 0x06, /* ? */
RLRiedinger 0:efe9c8c9c925 474 0x3e, 0x41, 0x5d, 0x55, 0x1e, /* @ 0x40 */
RLRiedinger 0:efe9c8c9c925 475 0x7e, 0x11, 0x11, 0x11, 0x7e, /* A */
RLRiedinger 0:efe9c8c9c925 476 0x7f, 0x49, 0x49, 0x49, 0x36, /* B */
RLRiedinger 0:efe9c8c9c925 477 0x3e, 0x41, 0x41, 0x41, 0x22, /* C */
RLRiedinger 0:efe9c8c9c925 478 0x7f, 0x41, 0x41, 0x22, 0x1c, /* D */
RLRiedinger 0:efe9c8c9c925 479 0x7f, 0x49, 0x49, 0x49, 0x41, /* E */
RLRiedinger 0:efe9c8c9c925 480 0x7f, 0x09, 0x09, 0x09, 0x01, /* F */
RLRiedinger 0:efe9c8c9c925 481 0x3e, 0x41, 0x49, 0x49, 0x7a, /* G */
RLRiedinger 0:efe9c8c9c925 482 0x7f, 0x08, 0x08, 0x08, 0x7f, /* H */
RLRiedinger 0:efe9c8c9c925 483 0x00, 0x41, 0x7f, 0x41, 0x00, /* I */
RLRiedinger 0:efe9c8c9c925 484 0x20, 0x40, 0x41, 0x3f, 0x01, /* J */
RLRiedinger 0:efe9c8c9c925 485 0x7f, 0x08, 0x14, 0x22, 0x41, /* K */
RLRiedinger 0:efe9c8c9c925 486 0x7f, 0x40, 0x40, 0x40, 0x40, /* L */
RLRiedinger 0:efe9c8c9c925 487 0x7f, 0x02, 0x0c, 0x02, 0x7f, /* M */
RLRiedinger 0:efe9c8c9c925 488 0x7f, 0x04, 0x08, 0x10, 0x7f, /* N */
RLRiedinger 0:efe9c8c9c925 489 0x3e, 0x41, 0x41, 0x41, 0x3e, /* O */
RLRiedinger 0:efe9c8c9c925 490 0x7f, 0x09, 0x09, 0x09, 0x06, /* P 0x50 */
RLRiedinger 0:efe9c8c9c925 491 0x3e, 0x41, 0x51, 0x21, 0x5e, /* Q */
RLRiedinger 0:efe9c8c9c925 492 0x7f, 0x09, 0x19, 0x29, 0x46, /* R */
RLRiedinger 0:efe9c8c9c925 493 0x26, 0x49, 0x49, 0x49, 0x32, /* S */
RLRiedinger 0:efe9c8c9c925 494 0x01, 0x01, 0x7f, 0x01, 0x01, /* T */
RLRiedinger 0:efe9c8c9c925 495 0x3f, 0x40, 0x40, 0x40, 0x3f, /* U */
RLRiedinger 0:efe9c8c9c925 496 0x1f, 0x20, 0x40, 0x20, 0x1f, /* V */
RLRiedinger 0:efe9c8c9c925 497 0x3f, 0x40, 0x38, 0x40, 0x3f, /* W */
RLRiedinger 0:efe9c8c9c925 498 0x63, 0x14, 0x08, 0x14, 0x63, /* X */
RLRiedinger 0:efe9c8c9c925 499 0x07, 0x08, 0x70, 0x08, 0x07, /* Y */
RLRiedinger 0:efe9c8c9c925 500 0x61, 0x51, 0x49, 0x45, 0x43, /* Z */
RLRiedinger 0:efe9c8c9c925 501 0x00, 0x7f, 0x41, 0x41, 0x00, /* [ */
RLRiedinger 0:efe9c8c9c925 502 0x02, 0x04, 0x08, 0x10, 0x20, /* \ */
RLRiedinger 0:efe9c8c9c925 503 0x00, 0x41, 0x41, 0x7f, 0x00, /* ] */
RLRiedinger 0:efe9c8c9c925 504 0x04, 0x02, 0x01, 0x02, 0x04, /* ^ */
RLRiedinger 0:efe9c8c9c925 505 0x40, 0x40, 0x40, 0x40, 0x40, /* _ */
RLRiedinger 0:efe9c8c9c925 506 0x00, 0x00, 0x03, 0x05, 0x00, /* ` 0x60 */
RLRiedinger 0:efe9c8c9c925 507 0x20, 0x54, 0x54, 0x54, 0x78, /* a */
RLRiedinger 0:efe9c8c9c925 508 0x7F, 0x44, 0x44, 0x44, 0x38, /* b */
RLRiedinger 0:efe9c8c9c925 509 0x38, 0x44, 0x44, 0x44, 0x44, /* c */
RLRiedinger 0:efe9c8c9c925 510 0x38, 0x44, 0x44, 0x44, 0x7f, /* d */
RLRiedinger 0:efe9c8c9c925 511 0x38, 0x54, 0x54, 0x54, 0x18, /* e */
RLRiedinger 0:efe9c8c9c925 512 0x04, 0x04, 0x7e, 0x05, 0x05, /* f */
RLRiedinger 0:efe9c8c9c925 513 0x08, 0x54, 0x54, 0x54, 0x3c, /* g */
RLRiedinger 0:efe9c8c9c925 514 0x7f, 0x08, 0x04, 0x04, 0x78, /* h */
RLRiedinger 0:efe9c8c9c925 515 0x00, 0x44, 0x7d, 0x40, 0x00, /* i */
RLRiedinger 0:efe9c8c9c925 516 0x20, 0x40, 0x44, 0x3d, 0x00, /* j */
RLRiedinger 0:efe9c8c9c925 517 0x7f, 0x10, 0x28, 0x44, 0x00, /* k */
RLRiedinger 0:efe9c8c9c925 518 0x00, 0x41, 0x7f, 0x40, 0x00, /* l */
RLRiedinger 0:efe9c8c9c925 519 0x7c, 0x04, 0x7c, 0x04, 0x78, /* m */
RLRiedinger 0:efe9c8c9c925 520 0x7c, 0x08, 0x04, 0x04, 0x78, /* n */
RLRiedinger 0:efe9c8c9c925 521 0x38, 0x44, 0x44, 0x44, 0x38, /* o */
RLRiedinger 0:efe9c8c9c925 522 0x7c, 0x14, 0x14, 0x14, 0x08, /* p 0x70 */
RLRiedinger 0:efe9c8c9c925 523 0x08, 0x14, 0x14, 0x14, 0x7c, /* q */
RLRiedinger 0:efe9c8c9c925 524 0x7c, 0x08, 0x04, 0x04, 0x00, /* r */
RLRiedinger 0:efe9c8c9c925 525 0x48, 0x54, 0x54, 0x54, 0x24, /* s */
RLRiedinger 0:efe9c8c9c925 526 0x04, 0x04, 0x3f, 0x44, 0x44, /* t */
RLRiedinger 0:efe9c8c9c925 527 0x3c, 0x40, 0x40, 0x20, 0x7c, /* u */
RLRiedinger 0:efe9c8c9c925 528 0x1c, 0x20, 0x40, 0x20, 0x1c, /* v */
RLRiedinger 0:efe9c8c9c925 529 0x3c, 0x40, 0x30, 0x40, 0x3c, /* w */
RLRiedinger 0:efe9c8c9c925 530 0x44, 0x28, 0x10, 0x28, 0x44, /* x */
RLRiedinger 0:efe9c8c9c925 531 0x0c, 0x50, 0x50, 0x50, 0x3c, /* y */
RLRiedinger 0:efe9c8c9c925 532 0x44, 0x64, 0x54, 0x4c, 0x44, /* z */
RLRiedinger 0:efe9c8c9c925 533 0x08, 0x36, 0x41, 0x41, 0x00, /* { */
RLRiedinger 0:efe9c8c9c925 534 0x00, 0x00, 0x77, 0x00, 0x00, /* | */
RLRiedinger 0:efe9c8c9c925 535 0x00, 0x41, 0x41, 0x36, 0x08, /* } */
RLRiedinger 0:efe9c8c9c925 536 0x08, 0x08, 0x2a, 0x1c, 0x08 /* ~ */
RLRiedinger 0:efe9c8c9c925 537 };
RLRiedinger 0:efe9c8c9c925 538
RLRiedinger 0:efe9c8c9c925 539 #endif
RLRiedinger 0:efe9c8c9c925 540
RLRiedinger 0:efe9c8c9c925 541 void DisplayN18::drawCharacter(int x, int y, const char character, unsigned short foreColor, unsigned short backColor, unsigned char fontSize) {
RLRiedinger 0:efe9c8c9c925 542
RLRiedinger 0:efe9c8c9c925 543 #ifdef USE_CHARACTERS
RLRiedinger 0:efe9c8c9c925 544
RLRiedinger 0:efe9c8c9c925 545
RLRiedinger 0:efe9c8c9c925 546 if (character > 126 || character < 32) {
RLRiedinger 0:efe9c8c9c925 547
RLRiedinger 0:efe9c8c9c925 548 return;
RLRiedinger 0:efe9c8c9c925 549
RLRiedinger 0:efe9c8c9c925 550 }
RLRiedinger 0:efe9c8c9c925 551
RLRiedinger 0:efe9c8c9c925 552 unsigned short* horizontal = new unsigned short[DisplayN18::CHAR_HEIGHT * fontSize];
RLRiedinger 0:efe9c8c9c925 553
RLRiedinger 0:efe9c8c9c925 554 for (int j = 0; j < DisplayN18::CHAR_HEIGHT; j++) {
RLRiedinger 0:efe9c8c9c925 555
RLRiedinger 0:efe9c8c9c925 556 for (int k = 0; k < fontSize; k++) {
RLRiedinger 0:efe9c8c9c925 557
RLRiedinger 0:efe9c8c9c925 558 horizontal[j * fontSize + k] = 0;
RLRiedinger 0:efe9c8c9c925 559
RLRiedinger 0:efe9c8c9c925 560 }
RLRiedinger 0:efe9c8c9c925 561
RLRiedinger 0:efe9c8c9c925 562 }
RLRiedinger 0:efe9c8c9c925 563
RLRiedinger 0:efe9c8c9c925 564 for (int i = 0; i < DisplayN18::CHAR_WIDTH; i++) {
RLRiedinger 0:efe9c8c9c925 565
RLRiedinger 0:efe9c8c9c925 566 debug_print(__LINE__, __FUNCTION__);
RLRiedinger 0:efe9c8c9c925 567
RLRiedinger 0:efe9c8c9c925 568 for (int j = 0; j < DisplayN18::CHAR_HEIGHT; j++) {
RLRiedinger 0:efe9c8c9c925 569
RLRiedinger 0:efe9c8c9c925 570 for (int k = 0; k < fontSize; k++) {
RLRiedinger 0:efe9c8c9c925 571
RLRiedinger 0:efe9c8c9c925 572 horizontal[j * fontSize + k] = characters[(character - 32) * 5 + i] & (1 << j) ? foreColor : backColor;
RLRiedinger 0:efe9c8c9c925 573
RLRiedinger 0:efe9c8c9c925 574
RLRiedinger 0:efe9c8c9c925 575 }
RLRiedinger 0:efe9c8c9c925 576
RLRiedinger 0:efe9c8c9c925 577 horizontal[j] = characters[(character - 32) * 5 + i] & (1 << j) ? foreColor : backColor;
RLRiedinger 0:efe9c8c9c925 578
RLRiedinger 0:efe9c8c9c925 579 }
RLRiedinger 0:efe9c8c9c925 580
RLRiedinger 0:efe9c8c9c925 581 for (int k = 0; k < fontSize; k++) {
RLRiedinger 0:efe9c8c9c925 582
RLRiedinger 0:efe9c8c9c925 583 this->draw(horizontal, x + i * fontSize + k, y, 1, DisplayN18::CHAR_HEIGHT * fontSize);
RLRiedinger 0:efe9c8c9c925 584
RLRiedinger 0:efe9c8c9c925 585 }
RLRiedinger 0:efe9c8c9c925 586
RLRiedinger 0:efe9c8c9c925 587 }
RLRiedinger 0:efe9c8c9c925 588
RLRiedinger 0:efe9c8c9c925 589 for (int i = 0; i < DisplayN18::CHAR_HEIGHT; i++) {
RLRiedinger 0:efe9c8c9c925 590
RLRiedinger 0:efe9c8c9c925 591 for (int k = 0; k < fontSize; k++) {
RLRiedinger 0:efe9c8c9c925 592
RLRiedinger 0:efe9c8c9c925 593 horizontal[i * fontSize + k] = backColor;
RLRiedinger 0:efe9c8c9c925 594
RLRiedinger 0:efe9c8c9c925 595 }
RLRiedinger 0:efe9c8c9c925 596
RLRiedinger 0:efe9c8c9c925 597 }
RLRiedinger 0:efe9c8c9c925 598
RLRiedinger 0:efe9c8c9c925 599 for (int k = 0; k < fontSize; k++) {
RLRiedinger 0:efe9c8c9c925 600
RLRiedinger 0:efe9c8c9c925 601 this->draw(horizontal, x + DisplayN18::CHAR_WIDTH * fontSize + k, y, 1, DisplayN18::CHAR_HEIGHT * fontSize);
RLRiedinger 0:efe9c8c9c925 602
RLRiedinger 0:efe9c8c9c925 603 }
RLRiedinger 0:efe9c8c9c925 604
RLRiedinger 0:efe9c8c9c925 605 delete[] horizontal;
RLRiedinger 0:efe9c8c9c925 606
RLRiedinger 0:efe9c8c9c925 607 #endif
RLRiedinger 0:efe9c8c9c925 608
RLRiedinger 0:efe9c8c9c925 609 }
RLRiedinger 0:efe9c8c9c925 610
RLRiedinger 0:efe9c8c9c925 611 void DisplayN18::drawString(int x, int y, const char* str, unsigned short foreColor, unsigned short backColor, unsigned char fontSize) {
RLRiedinger 0:efe9c8c9c925 612
RLRiedinger 0:efe9c8c9c925 613 #ifdef USE_CHARACTERS
RLRiedinger 0:efe9c8c9c925 614
RLRiedinger 0:efe9c8c9c925 615 if (*str == '\0') {
RLRiedinger 0:efe9c8c9c925 616
RLRiedinger 0:efe9c8c9c925 617 return;
RLRiedinger 0:efe9c8c9c925 618
RLRiedinger 0:efe9c8c9c925 619 }
RLRiedinger 0:efe9c8c9c925 620
RLRiedinger 0:efe9c8c9c925 621 do {
RLRiedinger 0:efe9c8c9c925 622
RLRiedinger 0:efe9c8c9c925 623 this->drawCharacter(x, y, *str, foreColor, backColor, fontSize);
RLRiedinger 0:efe9c8c9c925 624
RLRiedinger 0:efe9c8c9c925 625 x += (DisplayN18::CHAR_WIDTH + DisplayN18::CHAR_SPACING) * fontSize;
RLRiedinger 0:efe9c8c9c925 626
RLRiedinger 0:efe9c8c9c925 627 } while (*(++str) != '\0');
RLRiedinger 0:efe9c8c9c925 628
RLRiedinger 0:efe9c8c9c925 629 #endif
RLRiedinger 0:efe9c8c9c925 630
RLRiedinger 0:efe9c8c9c925 631 }