A modified version of the GDEP015OC1 library that supports x-or as a color.

Fork of GDEP015OC1 by aconno dev team

Committer:
ivo_n
Date:
Sun Jul 16 20:40:52 2017 +0000
Revision:
9:1f1e705a5f02
Parent:
8:cd51988ee35d
Added old API so old example won't break.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Anunnaki 3:dc7b794b59b7 1 /**
Anunnaki 3:dc7b794b59b7 2 * Created by Filip Hormot (f.hormot@gmail.com) on 14/09/16.
Anunnaki 3:dc7b794b59b7 3 */
Anunnaki 1:4fff95e316c9 4 #include "mbed.h"
Anunnaki 1:4fff95e316c9 5 #include "GDEP015OC1.h"
Anunnaki 3:dc7b794b59b7 6 #include "5x7.h"
Anunnaki 1:4fff95e316c9 7
Anunnaki 2:1c8f73aa2a16 8 static const unsigned char _lutFull[] = {
Anunnaki 2:1c8f73aa2a16 9 0x02, 0x02, 0x01, 0x11, 0x12, 0x12, 0x22, 0x22, 0x66, 0x69, 0x69, 0x59, 0x58, 0x99, 0x99,
Anunnaki 2:1c8f73aa2a16 10 0x88, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xB4, 0x13, 0x51, 0x35, 0x51, 0x51, 0x19, 0x01, 0x00
Anunnaki 2:1c8f73aa2a16 11 };
Anunnaki 2:1c8f73aa2a16 12
Anunnaki 7:70c58d3cbc8b 13 static const unsigned char _lutPart[] = {
Anunnaki 7:70c58d3cbc8b 14 0x10, 0x18, 0x18, 0x08, 0x18, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
Anunnaki 7:70c58d3cbc8b 15 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x14, 0x44, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
Anunnaki 7:70c58d3cbc8b 16 };
Anunnaki 7:70c58d3cbc8b 17
Anunnaki 2:1c8f73aa2a16 18 GDEP015OC1::GDEP015OC1(SPI& spi, PinName cs=p5, PinName dc=p6, PinName rst=p7, PinName busy=p8) : _spi(spi), _cs(cs), _dc(dc), _rst(rst), _busy(busy){
Anunnaki 6:45d2ec037fd6 19 _bold = true;
Anunnaki 6:45d2ec037fd6 20 _italic = false;
Anunnaki 1:4fff95e316c9 21 _init();
Anunnaki 1:4fff95e316c9 22 }
Anunnaki 1:4fff95e316c9 23
Anunnaki 2:1c8f73aa2a16 24 void GDEP015OC1::_spiCommand(unsigned char command){
Anunnaki 2:1c8f73aa2a16 25 _cs = _dc = 0;
Anunnaki 2:1c8f73aa2a16 26 wait_us(1);
Anunnaki 2:1c8f73aa2a16 27
Anunnaki 2:1c8f73aa2a16 28 _spi.write(command);
Anunnaki 2:1c8f73aa2a16 29 }
Anunnaki 2:1c8f73aa2a16 30
Anunnaki 2:1c8f73aa2a16 31 void GDEP015OC1::_spiData(unsigned char data){
Anunnaki 2:1c8f73aa2a16 32 _cs = 0;
Anunnaki 2:1c8f73aa2a16 33 _dc = 1;
Anunnaki 2:1c8f73aa2a16 34 wait_us(1);
Anunnaki 2:1c8f73aa2a16 35
Anunnaki 2:1c8f73aa2a16 36 _spi.write(data);
Anunnaki 2:1c8f73aa2a16 37 }
Anunnaki 2:1c8f73aa2a16 38
Anunnaki 2:1c8f73aa2a16 39 void GDEP015OC1::_init(void){
Anunnaki 2:1c8f73aa2a16 40 _rst = _cs = 1;
Anunnaki 3:dc7b794b59b7 41 empty();
Anunnaki 1:4fff95e316c9 42 }
Anunnaki 1:4fff95e316c9 43
Anunnaki 7:70c58d3cbc8b 44 void GDEP015OC1::_wakeUp(bool partial){
Anunnaki 2:1c8f73aa2a16 45 _rst = 0;
Anunnaki 2:1c8f73aa2a16 46 wait_ms(10);
Anunnaki 2:1c8f73aa2a16 47 _rst = 1;
Anunnaki 2:1c8f73aa2a16 48 wait_ms(10);
Anunnaki 1:4fff95e316c9 49
Anunnaki 2:1c8f73aa2a16 50 //Stage 3
Anunnaki 2:1c8f73aa2a16 51 //Driver Output control
Anunnaki 2:1c8f73aa2a16 52 _spiCommand(0x01);
Anunnaki 2:1c8f73aa2a16 53 _spiData(0xC7);
Anunnaki 2:1c8f73aa2a16 54 _spiData(0x00);
Anunnaki 2:1c8f73aa2a16 55 _spiData(0x00);
Anunnaki 2:1c8f73aa2a16 56 //Softstart
Anunnaki 2:1c8f73aa2a16 57 _spiCommand(0x0C);
Anunnaki 2:1c8f73aa2a16 58 _spiData(0xD7);
Anunnaki 2:1c8f73aa2a16 59 _spiData(0xD6);
Anunnaki 2:1c8f73aa2a16 60 _spiData(0x9D);
Anunnaki 2:1c8f73aa2a16 61
Anunnaki 2:1c8f73aa2a16 62 _spiCommand(0x22);
Anunnaki 2:1c8f73aa2a16 63 _spiData(0xF0);
Anunnaki 2:1c8f73aa2a16 64
Anunnaki 2:1c8f73aa2a16 65 //VCOM setting
Anunnaki 2:1c8f73aa2a16 66 _spiCommand(0x2C);
Anunnaki 2:1c8f73aa2a16 67 _spiData(0xA8);
Anunnaki 2:1c8f73aa2a16 68 //Dummy line period
Anunnaki 2:1c8f73aa2a16 69 _spiCommand(0x3A);
Anunnaki 2:1c8f73aa2a16 70 _spiData(0x1A);
Anunnaki 2:1c8f73aa2a16 71 //Gate line width
Anunnaki 2:1c8f73aa2a16 72 _spiCommand(0x3B);
Anunnaki 2:1c8f73aa2a16 73 _spiData(0x08);
Anunnaki 2:1c8f73aa2a16 74 //Set data entry mode
Anunnaki 2:1c8f73aa2a16 75 _spiCommand(0x11);
Anunnaki 2:1c8f73aa2a16 76 _spiData(0x01); //DO NOT TOUCH THIS! (MUST BE 0x01)
Anunnaki 2:1c8f73aa2a16 77
Anunnaki 2:1c8f73aa2a16 78 //Gate driver start position
Anunnaki 2:1c8f73aa2a16 79 _spiCommand(0x0F);
Anunnaki 2:1c8f73aa2a16 80 _spiData(0x2B);
Anunnaki 2:1c8f73aa2a16 81 _spiData(0x01);
Anunnaki 2:1c8f73aa2a16 82
Anunnaki 2:1c8f73aa2a16 83 //VGH VGL
Anunnaki 2:1c8f73aa2a16 84 _spiCommand(0x03);
Anunnaki 2:1c8f73aa2a16 85 _spiData(0x00);
Anunnaki 2:1c8f73aa2a16 86 //VSH, VSL
Anunnaki 2:1c8f73aa2a16 87 _spiCommand(0x04);
Anunnaki 2:1c8f73aa2a16 88 _spiData(0x0A);
Anunnaki 2:1c8f73aa2a16 89
Anunnaki 2:1c8f73aa2a16 90 //Define X display size
Anunnaki 2:1c8f73aa2a16 91 _spiCommand(0x44);
Anunnaki 2:1c8f73aa2a16 92 _spiData(0x00);
Anunnaki 2:1c8f73aa2a16 93 _spiData(0x18);
Anunnaki 2:1c8f73aa2a16 94 //Define Y display size
Anunnaki 2:1c8f73aa2a16 95 _spiCommand(0x45);
Anunnaki 2:1c8f73aa2a16 96 _spiData(0xC7);
Anunnaki 2:1c8f73aa2a16 97 _spiData(0x00);
Anunnaki 2:1c8f73aa2a16 98 _spiData(0x2B);
Anunnaki 2:1c8f73aa2a16 99 _spiData(0x01);
Anunnaki 2:1c8f73aa2a16 100
Anunnaki 2:1c8f73aa2a16 101 //Define X RAM address
Anunnaki 2:1c8f73aa2a16 102 _spiCommand(0x4E);
Anunnaki 2:1c8f73aa2a16 103 _spiData(0x00);
Anunnaki 2:1c8f73aa2a16 104 //Define Y RAM address
Anunnaki 2:1c8f73aa2a16 105 _spiCommand(0x4F);
Anunnaki 2:1c8f73aa2a16 106 _spiData(0xC7);
Anunnaki 2:1c8f73aa2a16 107 _spiData(0x00);
Anunnaki 2:1c8f73aa2a16 108
Anunnaki 2:1c8f73aa2a16 109 //Border waveform control
Anunnaki 2:1c8f73aa2a16 110 _spiCommand(0x3C);
Anunnaki 2:1c8f73aa2a16 111 _spiData(0x33);
Anunnaki 2:1c8f73aa2a16 112
Anunnaki 2:1c8f73aa2a16 113 //Write LUT
Anunnaki 2:1c8f73aa2a16 114 _spiCommand(0x32);
Anunnaki 7:70c58d3cbc8b 115 if(partial){
Anunnaki 7:70c58d3cbc8b 116 for(uint8_t i = 0; i<30;i++){
Anunnaki 7:70c58d3cbc8b 117 _spiData(_lutPart[i]);
Anunnaki 7:70c58d3cbc8b 118 }
Anunnaki 7:70c58d3cbc8b 119 } else{
Anunnaki 7:70c58d3cbc8b 120 for(uint8_t i = 0; i<30;i++){
Anunnaki 7:70c58d3cbc8b 121 _spiData(_lutFull[i]);
Anunnaki 7:70c58d3cbc8b 122 }
Anunnaki 7:70c58d3cbc8b 123 }
Anunnaki 2:1c8f73aa2a16 124
Anunnaki 2:1c8f73aa2a16 125 //Power on
Anunnaki 2:1c8f73aa2a16 126 _spiCommand(0x22);
Anunnaki 2:1c8f73aa2a16 127 _spiData(0xC0);
Anunnaki 2:1c8f73aa2a16 128
Anunnaki 2:1c8f73aa2a16 129 //Define X RAM address
Anunnaki 2:1c8f73aa2a16 130 _spiCommand(0x4E);
Anunnaki 2:1c8f73aa2a16 131 _spiData(0x00);
Anunnaki 2:1c8f73aa2a16 132 //Define Y RAM address
Anunnaki 2:1c8f73aa2a16 133 _spiCommand(0x4F);
Anunnaki 2:1c8f73aa2a16 134 _spiData(0xC7);
Anunnaki 2:1c8f73aa2a16 135 _spiData(0x00);
Anunnaki 1:4fff95e316c9 136 }
Anunnaki 1:4fff95e316c9 137
Anunnaki 2:1c8f73aa2a16 138 void GDEP015OC1::_sleep(void){
Anunnaki 2:1c8f73aa2a16 139 while(_busy == BUSY_STATE);
Anunnaki 2:1c8f73aa2a16 140
Anunnaki 2:1c8f73aa2a16 141 _spiCommand(0x10);
Anunnaki 2:1c8f73aa2a16 142 _spiData(0x01);
Anunnaki 2:1c8f73aa2a16 143 }
Anunnaki 2:1c8f73aa2a16 144
Anunnaki 6:45d2ec037fd6 145 /*
Anunnaki 6:45d2ec037fd6 146 * If you touch this function satan will feast on your soul for an eternity!
Anunnaki 6:45d2ec037fd6 147 * IM NOT PLAYING AROUND DONT FUCKING TOUCH IT!
Anunnaki 6:45d2ec037fd6 148 * You are thinking about it...
Anunnaki 6:45d2ec037fd6 149 * .
Anunnaki 6:45d2ec037fd6 150 * .
Anunnaki 6:45d2ec037fd6 151 * .
Anunnaki 6:45d2ec037fd6 152 * DONT!
Anunnaki 6:45d2ec037fd6 153 */
Anunnaki 2:1c8f73aa2a16 154 unsigned char GDEP015OC1::_pixelConv(unsigned char *data, int i){
Anunnaki 2:1c8f73aa2a16 155 uint8_t pix = 0x00;
Anunnaki 2:1c8f73aa2a16 156 for(uint8_t x = 0; x < 8; x++){
Anunnaki 2:1c8f73aa2a16 157 pix |= ((*(data + (i*200)%5000 + (24-i/200) + x*25)>>((i/25)%8))&(0x01))<<(7-x);
Anunnaki 2:1c8f73aa2a16 158 }
Anunnaki 3:dc7b794b59b7 159 return pix^0xFF;
Anunnaki 2:1c8f73aa2a16 160 }
Anunnaki 2:1c8f73aa2a16 161
Anunnaki 2:1c8f73aa2a16 162 uint8_t GDEP015OC1::_mirrorData(uint8_t data){
Anunnaki 2:1c8f73aa2a16 163 uint8_t mirror = 0x00;
Anunnaki 2:1c8f73aa2a16 164 for(uint8_t i=0; i<8; i++)
Anunnaki 2:1c8f73aa2a16 165 mirror |= ((data>>i) & 0x01) << (7 - i);
Anunnaki 2:1c8f73aa2a16 166
Anunnaki 2:1c8f73aa2a16 167 return mirror;
Anunnaki 2:1c8f73aa2a16 168 }
Anunnaki 2:1c8f73aa2a16 169
Anunnaki 4:86114342ce8f 170 void GDEP015OC1::fill(unsigned char data, int x){
Anunnaki 4:86114342ce8f 171 _buffer[x] = data;
Anunnaki 4:86114342ce8f 172 }
Anunnaki 4:86114342ce8f 173
Anunnaki 2:1c8f73aa2a16 174 void GDEP015OC1::empty(void){
Anunnaki 2:1c8f73aa2a16 175 for(uint16_t x=0; x<5000; x++)
Anunnaki 2:1c8f73aa2a16 176 _buffer[x] = 0x00;
Anunnaki 2:1c8f73aa2a16 177 }
Anunnaki 2:1c8f73aa2a16 178
Anunnaki 2:1c8f73aa2a16 179 void GDEP015OC1::write(void){
Anunnaki 7:70c58d3cbc8b 180 _wakeUp(true);
Anunnaki 7:70c58d3cbc8b 181
Anunnaki 7:70c58d3cbc8b 182 _spiCommand(0x24);
Anunnaki 7:70c58d3cbc8b 183 for(int16_t x=0; x>=0 && x<200; x++){
Anunnaki 7:70c58d3cbc8b 184 for(int16_t y=24; y>=0 && y<25; y--){
Anunnaki 7:70c58d3cbc8b 185 _spiData(_mirrorData(_pixelConv(_buffer, x*25+y)));
Anunnaki 7:70c58d3cbc8b 186 wait_us(10);
Anunnaki 7:70c58d3cbc8b 187 }
Anunnaki 7:70c58d3cbc8b 188 }
Anunnaki 7:70c58d3cbc8b 189
Anunnaki 7:70c58d3cbc8b 190 _spiCommand(0x22);
Anunnaki 7:70c58d3cbc8b 191 _spiData(0x04);
Anunnaki 7:70c58d3cbc8b 192 _spiCommand(0x22);
Anunnaki 7:70c58d3cbc8b 193 _spiData(0x08);
Anunnaki 7:70c58d3cbc8b 194
Anunnaki 7:70c58d3cbc8b 195 //Update
Anunnaki 7:70c58d3cbc8b 196 _spiCommand(0x22);
Anunnaki 7:70c58d3cbc8b 197 _spiData(0xC7);
Anunnaki 7:70c58d3cbc8b 198 _spiCommand(0x20);
Anunnaki 7:70c58d3cbc8b 199
Anunnaki 7:70c58d3cbc8b 200 _sleep();
Anunnaki 7:70c58d3cbc8b 201 }
Anunnaki 7:70c58d3cbc8b 202
Anunnaki 7:70c58d3cbc8b 203 void GDEP015OC1::writeFull(void){
Anunnaki 7:70c58d3cbc8b 204 _wakeUp(false);
Anunnaki 2:1c8f73aa2a16 205
Anunnaki 2:1c8f73aa2a16 206 _spiCommand(0x24);
Anunnaki 2:1c8f73aa2a16 207 for(int16_t x=0; x>=0 && x<200; x++){
Anunnaki 2:1c8f73aa2a16 208 for(int16_t y=24; y>=0 && y<25; y--){
Anunnaki 2:1c8f73aa2a16 209 _spiData(_mirrorData(_pixelConv(_buffer, x*25+y)));
Anunnaki 2:1c8f73aa2a16 210 wait_us(10);
Anunnaki 2:1c8f73aa2a16 211 }
Anunnaki 2:1c8f73aa2a16 212 }
Anunnaki 2:1c8f73aa2a16 213
Anunnaki 2:1c8f73aa2a16 214 _spiCommand(0x22);
Anunnaki 2:1c8f73aa2a16 215 _spiData(0x04);
Anunnaki 2:1c8f73aa2a16 216 _spiCommand(0x22);
Anunnaki 2:1c8f73aa2a16 217 _spiData(0x08);
Anunnaki 2:1c8f73aa2a16 218
Anunnaki 2:1c8f73aa2a16 219 //Update
Anunnaki 2:1c8f73aa2a16 220 _spiCommand(0x22);
Anunnaki 2:1c8f73aa2a16 221 _spiData(0xC7);
Anunnaki 2:1c8f73aa2a16 222 _spiCommand(0x20);
Anunnaki 2:1c8f73aa2a16 223
Anunnaki 2:1c8f73aa2a16 224 _sleep();
Anunnaki 2:1c8f73aa2a16 225 }
Anunnaki 2:1c8f73aa2a16 226
ivo_n 9:1f1e705a5f02 227 void GDEP015OC1::drawPixel(uint16_t startX, uint16_t startY, bool color)
ivo_n 9:1f1e705a5f02 228 {
ivo_n 9:1f1e705a5f02 229 drawPixel( startX, startY, color?eBlack:eWhite);
ivo_n 9:1f1e705a5f02 230 }
ivo_n 9:1f1e705a5f02 231
ivo_n 9:1f1e705a5f02 232 void GDEP015OC1::drawLine(uint16_t startX, uint16_t startY, uint16_t stopX, uint16_t stopY, bool color)
ivo_n 9:1f1e705a5f02 233 {
ivo_n 9:1f1e705a5f02 234 drawLine( startX, startY, stopX, stopY, color?eBlack:eWhite);
ivo_n 9:1f1e705a5f02 235 }
ivo_n 9:1f1e705a5f02 236
ivo_n 9:1f1e705a5f02 237 void GDEP015OC1::drawTriangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t x3, uint16_t y3, bool color)
ivo_n 9:1f1e705a5f02 238 {
ivo_n 9:1f1e705a5f02 239 drawTriangle( x1, y1, x2, y2, x3, y3, color?eBlack:eWhite);
ivo_n 9:1f1e705a5f02 240 }
ivo_n 9:1f1e705a5f02 241
ivo_n 9:1f1e705a5f02 242 void GDEP015OC1::drawRectangle(uint16_t startX, uint16_t startY, uint16_t stopX, uint16_t stopY, bool color)
ivo_n 9:1f1e705a5f02 243 {
ivo_n 9:1f1e705a5f02 244 drawRectangle( startX, startY, stopX, stopY, color?eBlack:eWhite);
ivo_n 9:1f1e705a5f02 245 }
ivo_n 9:1f1e705a5f02 246
ivo_n 9:1f1e705a5f02 247 void GDEP015OC1::drawCircle(uint16_t startX, uint16_t startY, uint16_t radius, bool color)
ivo_n 9:1f1e705a5f02 248 {
ivo_n 9:1f1e705a5f02 249 drawCircle(startX, startY, radius, color?eBlack:eWhite);
ivo_n 9:1f1e705a5f02 250 }
ivo_n 9:1f1e705a5f02 251
ivo_n 9:1f1e705a5f02 252 void GDEP015OC1::fillCircle(uint16_t startX, uint16_t startY, uint16_t radius, bool color)
ivo_n 9:1f1e705a5f02 253 {
ivo_n 9:1f1e705a5f02 254 fillCircle( startX, startY, radius, color?eBlack:eWhite);
ivo_n 9:1f1e705a5f02 255 }
ivo_n 9:1f1e705a5f02 256
ivo_n 9:1f1e705a5f02 257 void GDEP015OC1::drawEllipse(uint16_t startX, uint16_t startY, uint16_t width, uint16_t height, bool color)
ivo_n 9:1f1e705a5f02 258 {
ivo_n 9:1f1e705a5f02 259 drawEllipse(startX, startY, width, height, color?eBlack:eWhite);
ivo_n 9:1f1e705a5f02 260 }
ivo_n 9:1f1e705a5f02 261
ivo_n 9:1f1e705a5f02 262 void GDEP015OC1::fillEllipse(uint16_t startX, uint16_t startY, uint16_t width, uint16_t height, bool color)
ivo_n 9:1f1e705a5f02 263 {
ivo_n 9:1f1e705a5f02 264 fillEllipse(startX, startY, width, height, color?eBlack:eWhite);
ivo_n 9:1f1e705a5f02 265 }
ivo_n 9:1f1e705a5f02 266
ivo_n 9:1f1e705a5f02 267 void GDEP015OC1::writeChar(char character, uint16_t startX, uint16_t startY, bool color)
ivo_n 9:1f1e705a5f02 268 {
ivo_n 9:1f1e705a5f02 269 writeChar(character, startX, startY, color?eBlack:eWhite);
ivo_n 9:1f1e705a5f02 270 }
ivo_n 9:1f1e705a5f02 271
ivo_n 9:1f1e705a5f02 272 void GDEP015OC1::writeString(char *string, uint16_t startX, uint16_t startY, bool color)
ivo_n 9:1f1e705a5f02 273 {
ivo_n 9:1f1e705a5f02 274 writeString(string, startX, startY, color?eBlack:eWhite);
ivo_n 9:1f1e705a5f02 275 }
ivo_n 9:1f1e705a5f02 276
ivo_n 8:cd51988ee35d 277 void GDEP015OC1::drawPixel(uint16_t startX, uint16_t startY, Color color=eBlack){
Anunnaki 2:1c8f73aa2a16 278 if(startX>199 || startY>199) return;
Anunnaki 2:1c8f73aa2a16 279
Anunnaki 2:1c8f73aa2a16 280 uint16_t i = startX/8 + startY*25;
Anunnaki 2:1c8f73aa2a16 281
ivo_n 8:cd51988ee35d 282 switch(color) {
ivo_n 8:cd51988ee35d 283 case eWhite :
ivo_n 8:cd51988ee35d 284 _buffer[i] = (_buffer[i] & (0xFF^(1<<(7-startX%8))));
ivo_n 8:cd51988ee35d 285 break;
ivo_n 8:cd51988ee35d 286 case eBlack :
ivo_n 8:cd51988ee35d 287 _buffer[i] = (_buffer[i] | (1<<(7-startX%8)));
ivo_n 8:cd51988ee35d 288 break;
ivo_n 8:cd51988ee35d 289 case eInvert :
ivo_n 8:cd51988ee35d 290 _buffer[i] = (_buffer[i] ^ (1<<(7-startX%8)));
ivo_n 8:cd51988ee35d 291 break;
ivo_n 8:cd51988ee35d 292 }
Anunnaki 2:1c8f73aa2a16 293 }
Anunnaki 2:1c8f73aa2a16 294
Anunnaki 2:1c8f73aa2a16 295
ivo_n 8:cd51988ee35d 296 void GDEP015OC1::drawLine(uint16_t startX, uint16_t startY, uint16_t stopX, uint16_t stopY, Color color=eBlack){
Anunnaki 2:1c8f73aa2a16 297 int dx = abs(stopX-startX), sx = startX<stopX ? 1 : -1;
Anunnaki 2:1c8f73aa2a16 298 int dy = abs(stopY-startY), sy = startY<stopY ? 1 : -1;
Anunnaki 2:1c8f73aa2a16 299 int err = (dx>dy ? dx : -dy)/2, e2;
Anunnaki 2:1c8f73aa2a16 300
Anunnaki 2:1c8f73aa2a16 301 for(;;){
Anunnaki 2:1c8f73aa2a16 302 drawPixel(startX,startY,color);
Anunnaki 2:1c8f73aa2a16 303 if (startX==stopX && startY==stopY) break;
Anunnaki 2:1c8f73aa2a16 304 e2 = err;
Anunnaki 2:1c8f73aa2a16 305 if (e2 >-dx) { err -= dy; startX += sx; }
Anunnaki 2:1c8f73aa2a16 306 if (e2 < dy) { err += dx; startY += sy; }
Anunnaki 2:1c8f73aa2a16 307 }
Anunnaki 3:dc7b794b59b7 308 }
Anunnaki 3:dc7b794b59b7 309
ivo_n 8:cd51988ee35d 310 void GDEP015OC1::drawTriangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t x3, uint16_t y3, Color color=eBlack){
Anunnaki 3:dc7b794b59b7 311 drawLine(x1, y1, x2, y2, color);
Anunnaki 3:dc7b794b59b7 312 drawLine(x2, y2, x3, y3, color);
Anunnaki 3:dc7b794b59b7 313 drawLine(x3, y3, x1, y1, color);
Anunnaki 3:dc7b794b59b7 314 }
Anunnaki 3:dc7b794b59b7 315
ivo_n 8:cd51988ee35d 316 void GDEP015OC1::drawRectangle(uint16_t startX, uint16_t startY, uint16_t stopX, uint16_t stopY, Color color=eBlack){
Anunnaki 3:dc7b794b59b7 317 drawLine(startX, startY, stopX, startY, color);
Anunnaki 3:dc7b794b59b7 318 drawLine(stopX, startY, stopX, stopY, color);
Anunnaki 3:dc7b794b59b7 319 drawLine(stopX, stopY, startX, stopY, color);
Anunnaki 3:dc7b794b59b7 320 drawLine(startX, stopY, startX, startY, color);
Anunnaki 3:dc7b794b59b7 321 }
Anunnaki 3:dc7b794b59b7 322
ivo_n 8:cd51988ee35d 323 void GDEP015OC1::fillRectangle(uint16_t startX, uint16_t startY, uint16_t stopX, uint16_t stopY, Color color=eBlack){
ivo_n 8:cd51988ee35d 324 for(int x = startX; x<stopX; x++)
ivo_n 8:cd51988ee35d 325 {
ivo_n 8:cd51988ee35d 326 drawLine(x, startY, x, stopY, color);
ivo_n 8:cd51988ee35d 327 }
ivo_n 8:cd51988ee35d 328 drawLine(startX, startY, stopX, startY, color);
ivo_n 8:cd51988ee35d 329 drawLine(stopX, startY, stopX, stopY, color);
ivo_n 8:cd51988ee35d 330 drawLine(stopX, stopY, startX, stopY, color);
ivo_n 8:cd51988ee35d 331 drawLine(startX, stopY, startX, startY, color);
ivo_n 8:cd51988ee35d 332 }
ivo_n 8:cd51988ee35d 333
ivo_n 8:cd51988ee35d 334
ivo_n 8:cd51988ee35d 335 void GDEP015OC1::drawCircle(uint16_t startX, uint16_t startY, uint16_t radius, Color color=eBlack){
Anunnaki 3:dc7b794b59b7 336 int d,x,y;
Anunnaki 3:dc7b794b59b7 337
Anunnaki 3:dc7b794b59b7 338 d=3-2*radius;
Anunnaki 3:dc7b794b59b7 339 x=0;
Anunnaki 3:dc7b794b59b7 340 y=radius;
Anunnaki 3:dc7b794b59b7 341 while(x<=y){
Anunnaki 3:dc7b794b59b7 342 drawPixel(startX+x,startY+y,color);
Anunnaki 3:dc7b794b59b7 343 drawPixel(startX-y,startY-x,color);
Anunnaki 3:dc7b794b59b7 344 drawPixel(startX+y,startY-x,color);
Anunnaki 3:dc7b794b59b7 345 drawPixel(startX-y,startY+x,color);
Anunnaki 3:dc7b794b59b7 346 drawPixel(startX+y,startY+x,color);
Anunnaki 3:dc7b794b59b7 347 drawPixel(startX-x,startY-y,color);
Anunnaki 3:dc7b794b59b7 348 drawPixel(startX+x,startY-y,color);
Anunnaki 3:dc7b794b59b7 349 drawPixel(startX-x,startY+y,color);
Anunnaki 3:dc7b794b59b7 350
Anunnaki 3:dc7b794b59b7 351 if(d<=0)
Anunnaki 3:dc7b794b59b7 352 d=d+4*x+6;
Anunnaki 3:dc7b794b59b7 353 else{
Anunnaki 3:dc7b794b59b7 354 d=d+4*x-4*y+10;
Anunnaki 3:dc7b794b59b7 355 y--;
Anunnaki 3:dc7b794b59b7 356 }
Anunnaki 3:dc7b794b59b7 357 x++;
Anunnaki 3:dc7b794b59b7 358 }
Anunnaki 3:dc7b794b59b7 359 }
Anunnaki 3:dc7b794b59b7 360
ivo_n 8:cd51988ee35d 361 void GDEP015OC1::fillCircle(uint16_t startX, uint16_t startY, uint16_t radius, Color color=eBlack){
Anunnaki 3:dc7b794b59b7 362 for(uint16_t r = 1;r<=radius; r++){
Anunnaki 3:dc7b794b59b7 363 drawCircle(startX, startY, r, color);
Anunnaki 3:dc7b794b59b7 364 drawCircle(startX+1, startY, r-1, color);
Anunnaki 3:dc7b794b59b7 365 drawCircle(startX-1, startY, r-1, color);
Anunnaki 3:dc7b794b59b7 366 }
Anunnaki 3:dc7b794b59b7 367 }
Anunnaki 3:dc7b794b59b7 368
ivo_n 8:cd51988ee35d 369 void GDEP015OC1::drawEllipse(uint16_t startX, uint16_t startY, uint16_t width, uint16_t height, Color color=eBlack){
Anunnaki 3:dc7b794b59b7 370 int a2 = width*width;
Anunnaki 3:dc7b794b59b7 371 int b2 = height*height;
Anunnaki 3:dc7b794b59b7 372 int fa2 = 4*a2, fb2 = 4*b2;
Anunnaki 3:dc7b794b59b7 373 int x, y, sigma;
Anunnaki 3:dc7b794b59b7 374
Anunnaki 3:dc7b794b59b7 375 //First half
Anunnaki 3:dc7b794b59b7 376 for(int x = 0, y = height, sigma = 2*b2+a2*(1-2*height); b2*x <= a2*y; x++){
Anunnaki 3:dc7b794b59b7 377 drawPixel(startX+x,startY+y,color);
Anunnaki 3:dc7b794b59b7 378 drawPixel(startX-x,startY+y,color);
Anunnaki 3:dc7b794b59b7 379 drawPixel(startX+x,startY-y,color);
Anunnaki 3:dc7b794b59b7 380 drawPixel(startX-x,startY-y,color);
Anunnaki 3:dc7b794b59b7 381 if(sigma >= 0){
Anunnaki 3:dc7b794b59b7 382 sigma += fa2 * (1-y);
Anunnaki 3:dc7b794b59b7 383 y--;
Anunnaki 3:dc7b794b59b7 384 }
Anunnaki 3:dc7b794b59b7 385 sigma += b2 * ((4 * x) + 6);
Anunnaki 3:dc7b794b59b7 386 }
Anunnaki 3:dc7b794b59b7 387 //Second half
Anunnaki 3:dc7b794b59b7 388 for (x = width, y = 0, sigma = 2*a2+b2*(1-2*width); a2*y <= b2*x; y++){
Anunnaki 3:dc7b794b59b7 389 drawPixel(startX+x,startY+y,color);
Anunnaki 3:dc7b794b59b7 390 drawPixel(startX-x,startY+y,color);
Anunnaki 3:dc7b794b59b7 391 drawPixel(startX+x,startY-y,color);
Anunnaki 3:dc7b794b59b7 392 drawPixel(startX-x,startY-y,color);
Anunnaki 3:dc7b794b59b7 393 if (sigma >= 0){
Anunnaki 3:dc7b794b59b7 394 sigma += fb2 * (1 - x);
Anunnaki 3:dc7b794b59b7 395 x--;
Anunnaki 3:dc7b794b59b7 396 }
Anunnaki 3:dc7b794b59b7 397 sigma += a2 * ((4 * y) + 6);
Anunnaki 3:dc7b794b59b7 398 }
Anunnaki 3:dc7b794b59b7 399 }
Anunnaki 3:dc7b794b59b7 400
ivo_n 8:cd51988ee35d 401 void GDEP015OC1::fillEllipse(uint16_t startX, uint16_t startY, uint16_t width, uint16_t height, Color color=eBlack){
Anunnaki 3:dc7b794b59b7 402 for(uint16_t w = width; w > 0; w--){
Anunnaki 3:dc7b794b59b7 403 drawEllipse(startX, startX, w, height, color);
Anunnaki 3:dc7b794b59b7 404 }
Anunnaki 3:dc7b794b59b7 405 drawLine(startX, startY-height, startX, startY+height, color);
Anunnaki 3:dc7b794b59b7 406 }
Anunnaki 3:dc7b794b59b7 407
ivo_n 8:cd51988ee35d 408 void GDEP015OC1::writeChar(char character, uint16_t startX, uint16_t startY, Color color=eBlack){
Anunnaki 3:dc7b794b59b7 409 unsigned char letter[FONT_WIDTH];
Anunnaki 3:dc7b794b59b7 410
Anunnaki 3:dc7b794b59b7 411 //Grab data for the corresponding font
Anunnaki 3:dc7b794b59b7 412 for(uint8_t i = 0; i<FONT_WIDTH; i++)
Anunnaki 3:dc7b794b59b7 413 letter[i] = Font5x7[(character - ' ') * FONT_WIDTH + i];
Anunnaki 3:dc7b794b59b7 414
Anunnaki 3:dc7b794b59b7 415 for(uint8_t i = 0; i<FONT_WIDTH; i++){
Anunnaki 3:dc7b794b59b7 416 for(uint8_t j = 0; j<FONT_HEIGHT; j++){
Anunnaki 3:dc7b794b59b7 417 if((letter[i]>>j)&0x01){
Anunnaki 3:dc7b794b59b7 418 if(_italic){
Anunnaki 3:dc7b794b59b7 419 drawPixel(startX+i+(FONT_HEIGHT/3 - j/3), startY+j, color);
Anunnaki 3:dc7b794b59b7 420 if(_bold){
Anunnaki 3:dc7b794b59b7 421 for(uint8_t z=0; z<2; z++)
Anunnaki 3:dc7b794b59b7 422 drawPixel(startX+i-z+(FONT_HEIGHT/3- j/3), startY+j, color);
Anunnaki 3:dc7b794b59b7 423 }
Anunnaki 3:dc7b794b59b7 424 }
Anunnaki 3:dc7b794b59b7 425 else{
Anunnaki 3:dc7b794b59b7 426 drawPixel(startX+i, startY+j, color);
Anunnaki 3:dc7b794b59b7 427 if(_bold){
Anunnaki 3:dc7b794b59b7 428 for(uint8_t z=0; z<2; z++)
Anunnaki 3:dc7b794b59b7 429 drawPixel(startX+i-z, startY+j, color);
Anunnaki 3:dc7b794b59b7 430 }
Anunnaki 3:dc7b794b59b7 431 }
Anunnaki 3:dc7b794b59b7 432 }
Anunnaki 3:dc7b794b59b7 433 }
Anunnaki 3:dc7b794b59b7 434 }
Anunnaki 3:dc7b794b59b7 435 }
Anunnaki 3:dc7b794b59b7 436
ivo_n 8:cd51988ee35d 437 void GDEP015OC1::writeString(char *string, uint16_t startX, uint16_t startY, Color color=eBlack){
Anunnaki 3:dc7b794b59b7 438 uint8_t length = 0;
Anunnaki 3:dc7b794b59b7 439 while(*(string+length) != '\0') length++;
Anunnaki 3:dc7b794b59b7 440
Anunnaki 3:dc7b794b59b7 441 for(uint8_t x=0; x<length; x++)
Anunnaki 4:86114342ce8f 442 writeChar(*(string+x), startX+(FONT_WIDTH+1)*x, startY, color); //FONT_WIDTH+1 gives a 1px space between the characters
Anunnaki 2:1c8f73aa2a16 443 }