Library for 4D systems touchscreen
TouchScreen.cpp@0:edf5f3d8645e, 2012-08-21 (annotated)
- Committer:
- ashleymills
- Date:
- Tue Aug 21 14:40:18 2012 +0000
- Revision:
- 0:edf5f3d8645e
4D systems touchscreen lib
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ashleymills | 0:edf5f3d8645e | 1 | /** |
ashleymills | 0:edf5f3d8645e | 2 | * @file |
ashleymills | 0:edf5f3d8645e | 3 | * @version |
ashleymills | 0:edf5f3d8645e | 4 | * @author Ashley.Mills@vodafone.com |
ashleymills | 0:edf5f3d8645e | 5 | * @brief Touchscreen control. |
ashleymills | 0:edf5f3d8645e | 6 | */ |
ashleymills | 0:edf5f3d8645e | 7 | |
ashleymills | 0:edf5f3d8645e | 8 | #include "TouchScreen.h" |
ashleymills | 0:edf5f3d8645e | 9 | |
ashleymills | 0:edf5f3d8645e | 10 | #define WAIT_TIMEOUT_MS 1000 |
ashleymills | 0:edf5f3d8645e | 11 | |
ashleymills | 0:edf5f3d8645e | 12 | TouchScreen::TouchScreen(PinName tx, PinName rx, PinName resetPin, const char *name) : Serial(tx,rx,name) { |
ashleymills | 0:edf5f3d8645e | 13 | baud(9600); |
ashleymills | 0:edf5f3d8645e | 14 | _resetPin = new DigitalOut(resetPin); |
ashleymills | 0:edf5f3d8645e | 15 | _resetPin->write(1); |
ashleymills | 0:edf5f3d8645e | 16 | reset(); |
ashleymills | 0:edf5f3d8645e | 17 | _initOK = false; |
ashleymills | 0:edf5f3d8645e | 18 | putc('U'); |
ashleymills | 0:edf5f3d8645e | 19 | _initOK = gack(); |
ashleymills | 0:edf5f3d8645e | 20 | _fillColor = createRGBClassic(21,21,21); |
ashleymills | 0:edf5f3d8645e | 21 | _strokeColor = createRGBClassic(221,221,221); |
ashleymills | 0:edf5f3d8645e | 22 | } |
ashleymills | 0:edf5f3d8645e | 23 | |
ashleymills | 0:edf5f3d8645e | 24 | TouchScreen::TouchScreen(PinName tx, PinName rx, PinName resetPin, eBaudRate baudRate, const char *name) : Serial (tx,rx,name) { |
ashleymills | 0:edf5f3d8645e | 25 | baud(9600); |
ashleymills | 0:edf5f3d8645e | 26 | _resetPin = new DigitalOut(resetPin); |
ashleymills | 0:edf5f3d8645e | 27 | _resetPin->write(1); |
ashleymills | 0:edf5f3d8645e | 28 | reset(); |
ashleymills | 0:edf5f3d8645e | 29 | _initOK = false; |
ashleymills | 0:edf5f3d8645e | 30 | putc('U'); |
ashleymills | 0:edf5f3d8645e | 31 | if((_initOK=gack())) { |
ashleymills | 0:edf5f3d8645e | 32 | setBaudRate(baudRate); |
ashleymills | 0:edf5f3d8645e | 33 | } |
ashleymills | 0:edf5f3d8645e | 34 | _fillColor = createRGBClassic(21,21,21); |
ashleymills | 0:edf5f3d8645e | 35 | _strokeColor = createRGBClassic(221,221,221); |
ashleymills | 0:edf5f3d8645e | 36 | } |
ashleymills | 0:edf5f3d8645e | 37 | |
ashleymills | 0:edf5f3d8645e | 38 | void TouchScreen::reset() { |
ashleymills | 0:edf5f3d8645e | 39 | _resetPin->write(0); |
ashleymills | 0:edf5f3d8645e | 40 | Thread::wait(2); |
ashleymills | 0:edf5f3d8645e | 41 | _resetPin->write(1); |
ashleymills | 0:edf5f3d8645e | 42 | Thread::wait(3000); |
ashleymills | 0:edf5f3d8645e | 43 | } |
ashleymills | 0:edf5f3d8645e | 44 | |
ashleymills | 0:edf5f3d8645e | 45 | void TouchScreen::clearScreen() { |
ashleymills | 0:edf5f3d8645e | 46 | putc('E'); |
ashleymills | 0:edf5f3d8645e | 47 | gack(); |
ashleymills | 0:edf5f3d8645e | 48 | } |
ashleymills | 0:edf5f3d8645e | 49 | |
ashleymills | 0:edf5f3d8645e | 50 | bool TouchScreen::setBaudRate(eBaudRate baudRate) { |
ashleymills | 0:edf5f3d8645e | 51 | long newRate = 9600; |
ashleymills | 0:edf5f3d8645e | 52 | uint8_t rateCommand = (uint8_t)0x06; |
ashleymills | 0:edf5f3d8645e | 53 | putc('Q'); |
ashleymills | 0:edf5f3d8645e | 54 | switch(baudRate) { |
ashleymills | 0:edf5f3d8645e | 55 | case BAUD_9600: |
ashleymills | 0:edf5f3d8645e | 56 | rateCommand = (uint8_t)0x06; |
ashleymills | 0:edf5f3d8645e | 57 | newRate = 9600; |
ashleymills | 0:edf5f3d8645e | 58 | break; |
ashleymills | 0:edf5f3d8645e | 59 | |
ashleymills | 0:edf5f3d8645e | 60 | case BAUD_14400: |
ashleymills | 0:edf5f3d8645e | 61 | rateCommand = (uint8_t)0x07; |
ashleymills | 0:edf5f3d8645e | 62 | newRate = 14400; |
ashleymills | 0:edf5f3d8645e | 63 | break; |
ashleymills | 0:edf5f3d8645e | 64 | |
ashleymills | 0:edf5f3d8645e | 65 | case BAUD_19200: |
ashleymills | 0:edf5f3d8645e | 66 | rateCommand = (uint8_t)0x08; |
ashleymills | 0:edf5f3d8645e | 67 | newRate = 19200; |
ashleymills | 0:edf5f3d8645e | 68 | break; |
ashleymills | 0:edf5f3d8645e | 69 | |
ashleymills | 0:edf5f3d8645e | 70 | case BAUD_57600: |
ashleymills | 0:edf5f3d8645e | 71 | rateCommand = (uint8_t)0x0C; |
ashleymills | 0:edf5f3d8645e | 72 | newRate = 57600; |
ashleymills | 0:edf5f3d8645e | 73 | break; |
ashleymills | 0:edf5f3d8645e | 74 | |
ashleymills | 0:edf5f3d8645e | 75 | case BAUD_115200: |
ashleymills | 0:edf5f3d8645e | 76 | rateCommand = (uint8_t)0x0D; |
ashleymills | 0:edf5f3d8645e | 77 | newRate = 115200; |
ashleymills | 0:edf5f3d8645e | 78 | break; |
ashleymills | 0:edf5f3d8645e | 79 | |
ashleymills | 0:edf5f3d8645e | 80 | case BAUD_256000: |
ashleymills | 0:edf5f3d8645e | 81 | rateCommand = (uint8_t)0x0F; |
ashleymills | 0:edf5f3d8645e | 82 | newRate = 256000; |
ashleymills | 0:edf5f3d8645e | 83 | break; |
ashleymills | 0:edf5f3d8645e | 84 | } |
ashleymills | 0:edf5f3d8645e | 85 | putc((uint8_t)rateCommand); |
ashleymills | 0:edf5f3d8645e | 86 | // doesn't seem to want to acknowledge at either the old baud rate or the new baud rate |
ashleymills | 0:edf5f3d8645e | 87 | dropBytes(1); |
ashleymills | 0:edf5f3d8645e | 88 | baud(newRate); |
ashleymills | 0:edf5f3d8645e | 89 | return true; |
ashleymills | 0:edf5f3d8645e | 90 | } |
ashleymills | 0:edf5f3d8645e | 91 | |
ashleymills | 0:edf5f3d8645e | 92 | void TouchScreen::setPenSolid() { |
ashleymills | 0:edf5f3d8645e | 93 | putc('p'); |
ashleymills | 0:edf5f3d8645e | 94 | putc((uint8_t)0x0); |
ashleymills | 0:edf5f3d8645e | 95 | gack(); |
ashleymills | 0:edf5f3d8645e | 96 | } |
ashleymills | 0:edf5f3d8645e | 97 | |
ashleymills | 0:edf5f3d8645e | 98 | void TouchScreen::setPenWireframe() { |
ashleymills | 0:edf5f3d8645e | 99 | putc('p'); |
ashleymills | 0:edf5f3d8645e | 100 | putc((uint8_t)0x1); |
ashleymills | 0:edf5f3d8645e | 101 | gack(); |
ashleymills | 0:edf5f3d8645e | 102 | } |
ashleymills | 0:edf5f3d8645e | 103 | |
ashleymills | 0:edf5f3d8645e | 104 | void TouchScreen::setBackgroundColor(uint16_t color) { |
ashleymills | 0:edf5f3d8645e | 105 | putc('K'); |
ashleymills | 0:edf5f3d8645e | 106 | putc(highByte(color)); |
ashleymills | 0:edf5f3d8645e | 107 | putc(lowByte(color)); |
ashleymills | 0:edf5f3d8645e | 108 | gack(); |
ashleymills | 0:edf5f3d8645e | 109 | } |
ashleymills | 0:edf5f3d8645e | 110 | |
ashleymills | 0:edf5f3d8645e | 111 | bool TouchScreen::waitUntilReadable() { |
ashleymills | 0:edf5f3d8645e | 112 | long timeOut = WAIT_TIMEOUT_MS; |
ashleymills | 0:edf5f3d8645e | 113 | Timer timer; |
ashleymills | 0:edf5f3d8645e | 114 | timer.start(); |
ashleymills | 0:edf5f3d8645e | 115 | while(1) { |
ashleymills | 0:edf5f3d8645e | 116 | if(readable()) |
ashleymills | 0:edf5f3d8645e | 117 | return true; |
ashleymills | 0:edf5f3d8645e | 118 | if(timer.read_ms()>timeOut) |
ashleymills | 0:edf5f3d8645e | 119 | return false; |
ashleymills | 0:edf5f3d8645e | 120 | } |
ashleymills | 0:edf5f3d8645e | 121 | } |
ashleymills | 0:edf5f3d8645e | 122 | |
ashleymills | 0:edf5f3d8645e | 123 | bool TouchScreen::gack() { |
ashleymills | 0:edf5f3d8645e | 124 | if(waitUntilReadable()) { |
ashleymills | 0:edf5f3d8645e | 125 | uint8_t b = getc(); |
ashleymills | 0:edf5f3d8645e | 126 | return (b==0x06); |
ashleymills | 0:edf5f3d8645e | 127 | } |
ashleymills | 0:edf5f3d8645e | 128 | return false; |
ashleymills | 0:edf5f3d8645e | 129 | } |
ashleymills | 0:edf5f3d8645e | 130 | |
ashleymills | 0:edf5f3d8645e | 131 | void TouchScreen::drawPixel(uint16_t xPos, uint16_t yPos, uint16_t color) { |
ashleymills | 0:edf5f3d8645e | 132 | putc('P'); |
ashleymills | 0:edf5f3d8645e | 133 | putc(highByte(xPos)); // x pos |
ashleymills | 0:edf5f3d8645e | 134 | putc(lowByte(xPos)); |
ashleymills | 0:edf5f3d8645e | 135 | |
ashleymills | 0:edf5f3d8645e | 136 | putc(highByte(yPos)); // y pos |
ashleymills | 0:edf5f3d8645e | 137 | putc(lowByte(yPos)); |
ashleymills | 0:edf5f3d8645e | 138 | |
ashleymills | 0:edf5f3d8645e | 139 | putc(highByte(color)); // color |
ashleymills | 0:edf5f3d8645e | 140 | putc(lowByte(color)); |
ashleymills | 0:edf5f3d8645e | 141 | gack(); |
ashleymills | 0:edf5f3d8645e | 142 | } |
ashleymills | 0:edf5f3d8645e | 143 | |
ashleymills | 0:edf5f3d8645e | 144 | void TouchScreen::drawCircle(uint16_t xPos, uint16_t yPos, uint16_t radius, uint16_t color) { |
ashleymills | 0:edf5f3d8645e | 145 | putc('C'); |
ashleymills | 0:edf5f3d8645e | 146 | putc(highByte(xPos)); // x pos |
ashleymills | 0:edf5f3d8645e | 147 | putc(lowByte(xPos)); |
ashleymills | 0:edf5f3d8645e | 148 | |
ashleymills | 0:edf5f3d8645e | 149 | putc(highByte(yPos)); // y pos |
ashleymills | 0:edf5f3d8645e | 150 | putc(lowByte(yPos)); |
ashleymills | 0:edf5f3d8645e | 151 | |
ashleymills | 0:edf5f3d8645e | 152 | putc(highByte(radius)); // radius |
ashleymills | 0:edf5f3d8645e | 153 | putc(lowByte(radius)); |
ashleymills | 0:edf5f3d8645e | 154 | |
ashleymills | 0:edf5f3d8645e | 155 | putc(highByte(color)); // color |
ashleymills | 0:edf5f3d8645e | 156 | putc(lowByte(color)); |
ashleymills | 0:edf5f3d8645e | 157 | gack(); |
ashleymills | 0:edf5f3d8645e | 158 | } |
ashleymills | 0:edf5f3d8645e | 159 | |
ashleymills | 0:edf5f3d8645e | 160 | uint16_t TouchScreen::createRGBClassic(int r, int g, int b) { |
ashleymills | 0:edf5f3d8645e | 161 | return createRGBF(r/255.0f,g/255.0f,b/255.0f); |
ashleymills | 0:edf5f3d8645e | 162 | } |
ashleymills | 0:edf5f3d8645e | 163 | |
ashleymills | 0:edf5f3d8645e | 164 | uint16_t TouchScreen::createRGB(uint8_t r, uint8_t g, uint8_t b) { |
ashleymills | 0:edf5f3d8645e | 165 | if(r>31) r = 31; |
ashleymills | 0:edf5f3d8645e | 166 | if(g>63) g = 63; |
ashleymills | 0:edf5f3d8645e | 167 | if(b>31) b = 31; |
ashleymills | 0:edf5f3d8645e | 168 | uint16_t o = 0; |
ashleymills | 0:edf5f3d8645e | 169 | o |= (r<<0xb); |
ashleymills | 0:edf5f3d8645e | 170 | o |= (g<<0x5); |
ashleymills | 0:edf5f3d8645e | 171 | o |= b; |
ashleymills | 0:edf5f3d8645e | 172 | return o; |
ashleymills | 0:edf5f3d8645e | 173 | } |
ashleymills | 0:edf5f3d8645e | 174 | |
ashleymills | 0:edf5f3d8645e | 175 | uint16_t TouchScreen::createRGBF(float r, float g, float b) { |
ashleymills | 0:edf5f3d8645e | 176 | return createRGB((uint8_t)(r*31.0f),(uint8_t)(g*63.0f),(uint8_t)(b*31.0f)); |
ashleymills | 0:edf5f3d8645e | 177 | } |
ashleymills | 0:edf5f3d8645e | 178 | |
ashleymills | 0:edf5f3d8645e | 179 | void TouchScreen::enableTouch() { |
ashleymills | 0:edf5f3d8645e | 180 | putc('Y'); |
ashleymills | 0:edf5f3d8645e | 181 | putc((uint8_t)0x5); |
ashleymills | 0:edf5f3d8645e | 182 | putc((uint8_t)0x0); |
ashleymills | 0:edf5f3d8645e | 183 | gack(); |
ashleymills | 0:edf5f3d8645e | 184 | } |
ashleymills | 0:edf5f3d8645e | 185 | |
ashleymills | 0:edf5f3d8645e | 186 | void TouchScreen::disableTouch() { |
ashleymills | 0:edf5f3d8645e | 187 | putc('Y'); |
ashleymills | 0:edf5f3d8645e | 188 | putc((uint8_t)0x5); |
ashleymills | 0:edf5f3d8645e | 189 | putc((uint8_t)0x1); |
ashleymills | 0:edf5f3d8645e | 190 | gack(); |
ashleymills | 0:edf5f3d8645e | 191 | } |
ashleymills | 0:edf5f3d8645e | 192 | |
ashleymills | 0:edf5f3d8645e | 193 | void TouchScreen::setOrientation(eScreenOrientation o) { |
ashleymills | 0:edf5f3d8645e | 194 | putc('Y'); |
ashleymills | 0:edf5f3d8645e | 195 | putc((uint8_t)0x4); |
ashleymills | 0:edf5f3d8645e | 196 | putc((uint8_t)o); |
ashleymills | 0:edf5f3d8645e | 197 | gack(); |
ashleymills | 0:edf5f3d8645e | 198 | } |
ashleymills | 0:edf5f3d8645e | 199 | |
ashleymills | 0:edf5f3d8645e | 200 | void TouchScreen::getVersion() { |
ashleymills | 0:edf5f3d8645e | 201 | putc('V'); |
ashleymills | 0:edf5f3d8645e | 202 | putc((uint8_t)0x1); |
ashleymills | 0:edf5f3d8645e | 203 | dropBytes((uint16_t)5); |
ashleymills | 0:edf5f3d8645e | 204 | } |
ashleymills | 0:edf5f3d8645e | 205 | |
ashleymills | 0:edf5f3d8645e | 206 | void TouchScreen::dropBytes(uint16_t numBytes) { |
ashleymills | 0:edf5f3d8645e | 207 | while(numBytes--) { |
ashleymills | 0:edf5f3d8645e | 208 | dropByte(); |
ashleymills | 0:edf5f3d8645e | 209 | } |
ashleymills | 0:edf5f3d8645e | 210 | } |
ashleymills | 0:edf5f3d8645e | 211 | |
ashleymills | 0:edf5f3d8645e | 212 | void TouchScreen::drawImage(char *name, uint16_t x, uint16_t y) { |
ashleymills | 0:edf5f3d8645e | 213 | putc('@'); |
ashleymills | 0:edf5f3d8645e | 214 | putc('m'); |
ashleymills | 0:edf5f3d8645e | 215 | printf(name); |
ashleymills | 0:edf5f3d8645e | 216 | putc((uint8_t)0); |
ashleymills | 0:edf5f3d8645e | 217 | putc(highByte((uint16_t)x)); |
ashleymills | 0:edf5f3d8645e | 218 | putc(lowByte((uint16_t)x)); |
ashleymills | 0:edf5f3d8645e | 219 | putc(highByte((uint16_t)y)); |
ashleymills | 0:edf5f3d8645e | 220 | putc(lowByte((uint16_t)y)); |
ashleymills | 0:edf5f3d8645e | 221 | putc((uint8_t)0x00); |
ashleymills | 0:edf5f3d8645e | 222 | putc((uint8_t)0x00); |
ashleymills | 0:edf5f3d8645e | 223 | putc((uint8_t)0x00); |
ashleymills | 0:edf5f3d8645e | 224 | putc((uint8_t)0x00); |
ashleymills | 0:edf5f3d8645e | 225 | gack(); |
ashleymills | 0:edf5f3d8645e | 226 | } |
ashleymills | 0:edf5f3d8645e | 227 | |
ashleymills | 0:edf5f3d8645e | 228 | void TouchScreen::dropByte() { |
ashleymills | 0:edf5f3d8645e | 229 | if(waitUntilReadable()) { |
ashleymills | 0:edf5f3d8645e | 230 | getc(); |
ashleymills | 0:edf5f3d8645e | 231 | } |
ashleymills | 0:edf5f3d8645e | 232 | } |
ashleymills | 0:edf5f3d8645e | 233 | |
ashleymills | 0:edf5f3d8645e | 234 | void TouchScreen::dropByteAndWaitUntilReadable() { |
ashleymills | 0:edf5f3d8645e | 235 | if(waitUntilReadable()) { |
ashleymills | 0:edf5f3d8645e | 236 | getc(); |
ashleymills | 0:edf5f3d8645e | 237 | } |
ashleymills | 0:edf5f3d8645e | 238 | waitUntilReadable(); |
ashleymills | 0:edf5f3d8645e | 239 | } |
ashleymills | 0:edf5f3d8645e | 240 | |
ashleymills | 0:edf5f3d8645e | 241 | eTouchStatus TouchScreen::getTouchStatus() { |
ashleymills | 0:edf5f3d8645e | 242 | putc('o'); |
ashleymills | 0:edf5f3d8645e | 243 | putc((uint8_t)0x4); |
ashleymills | 0:edf5f3d8645e | 244 | dropByteAndWaitUntilReadable(); |
ashleymills | 0:edf5f3d8645e | 245 | uint8_t touchStatus = getc(); |
ashleymills | 0:edf5f3d8645e | 246 | dropByte(); |
ashleymills | 0:edf5f3d8645e | 247 | dropByte(); |
ashleymills | 0:edf5f3d8645e | 248 | return (eTouchStatus)touchStatus; |
ashleymills | 0:edf5f3d8645e | 249 | } |
ashleymills | 0:edf5f3d8645e | 250 | |
ashleymills | 0:edf5f3d8645e | 251 | TouchPoint TouchScreen::getLastTouch() { |
ashleymills | 0:edf5f3d8645e | 252 | TouchPoint p; |
ashleymills | 0:edf5f3d8645e | 253 | |
ashleymills | 0:edf5f3d8645e | 254 | putc('o'); |
ashleymills | 0:edf5f3d8645e | 255 | putc((uint8_t)0x05); |
ashleymills | 0:edf5f3d8645e | 256 | waitUntilReadable(); |
ashleymills | 0:edf5f3d8645e | 257 | uint8_t v = getc(); |
ashleymills | 0:edf5f3d8645e | 258 | p.x = (v<<0x8); |
ashleymills | 0:edf5f3d8645e | 259 | waitUntilReadable(); |
ashleymills | 0:edf5f3d8645e | 260 | p.x += getc(); |
ashleymills | 0:edf5f3d8645e | 261 | waitUntilReadable(); |
ashleymills | 0:edf5f3d8645e | 262 | v = getc(); |
ashleymills | 0:edf5f3d8645e | 263 | p.y = (v<<0x8); |
ashleymills | 0:edf5f3d8645e | 264 | waitUntilReadable(); |
ashleymills | 0:edf5f3d8645e | 265 | p.y += getc(); |
ashleymills | 0:edf5f3d8645e | 266 | return p; |
ashleymills | 0:edf5f3d8645e | 267 | } |
ashleymills | 0:edf5f3d8645e | 268 | |
ashleymills | 0:edf5f3d8645e | 269 | void TouchScreen::setBacklight(bool state) { |
ashleymills | 0:edf5f3d8645e | 270 | putc('Y'); |
ashleymills | 0:edf5f3d8645e | 271 | putc((uint8_t)0x00); |
ashleymills | 0:edf5f3d8645e | 272 | if(state) { |
ashleymills | 0:edf5f3d8645e | 273 | putc((uint8_t)0x01); |
ashleymills | 0:edf5f3d8645e | 274 | } else { |
ashleymills | 0:edf5f3d8645e | 275 | putc((uint8_t)0x00); |
ashleymills | 0:edf5f3d8645e | 276 | } |
ashleymills | 0:edf5f3d8645e | 277 | gack(); |
ashleymills | 0:edf5f3d8645e | 278 | } |
ashleymills | 0:edf5f3d8645e | 279 | |
ashleymills | 0:edf5f3d8645e | 280 | void TouchScreen::setContrast(uint8_t value) { |
ashleymills | 0:edf5f3d8645e | 281 | if(value>0x0F) |
ashleymills | 0:edf5f3d8645e | 282 | value = 0x0F; |
ashleymills | 0:edf5f3d8645e | 283 | putc('Y'); |
ashleymills | 0:edf5f3d8645e | 284 | putc((uint8_t)0x02); |
ashleymills | 0:edf5f3d8645e | 285 | putc(value); |
ashleymills | 0:edf5f3d8645e | 286 | gack(); |
ashleymills | 0:edf5f3d8645e | 287 | } |
ashleymills | 0:edf5f3d8645e | 288 | |
ashleymills | 0:edf5f3d8645e | 289 | void TouchScreen::drawGraphicsFormatString(uint16_t x, uint16_t y, eInternalFont font, uint16_t textColor, uint8_t charWidth, uint8_t charHeight, char* text) { |
ashleymills | 0:edf5f3d8645e | 290 | putc('S'); |
ashleymills | 0:edf5f3d8645e | 291 | putc((uint8_t)highByte(x)); |
ashleymills | 0:edf5f3d8645e | 292 | putc((uint8_t)lowByte(x)); |
ashleymills | 0:edf5f3d8645e | 293 | putc((uint8_t)highByte(y)); |
ashleymills | 0:edf5f3d8645e | 294 | putc((uint8_t)lowByte(y)); |
ashleymills | 0:edf5f3d8645e | 295 | putc((uint8_t)font); |
ashleymills | 0:edf5f3d8645e | 296 | putc((uint8_t)highByte(textColor)); |
ashleymills | 0:edf5f3d8645e | 297 | putc((uint8_t)lowByte(textColor)); |
ashleymills | 0:edf5f3d8645e | 298 | putc((uint8_t)charWidth); |
ashleymills | 0:edf5f3d8645e | 299 | putc((uint8_t)charHeight); |
ashleymills | 0:edf5f3d8645e | 300 | if(strlen(text)==256) { // change to own implementation of strnlen |
ashleymills | 0:edf5f3d8645e | 301 | text[256] = 0; |
ashleymills | 0:edf5f3d8645e | 302 | } |
ashleymills | 0:edf5f3d8645e | 303 | printf(text); |
ashleymills | 0:edf5f3d8645e | 304 | putc((uint8_t)0x00); |
ashleymills | 0:edf5f3d8645e | 305 | gack(); |
ashleymills | 0:edf5f3d8645e | 306 | } |
ashleymills | 0:edf5f3d8645e | 307 | |
ashleymills | 0:edf5f3d8645e | 308 | |
ashleymills | 0:edf5f3d8645e | 309 | void TouchScreen::drawTextFormatString(uint8_t row, uint8_t column, eInternalFont font, uint16_t textColor, char* text) { |
ashleymills | 0:edf5f3d8645e | 310 | putc('s'); |
ashleymills | 0:edf5f3d8645e | 311 | putc((uint8_t)column); |
ashleymills | 0:edf5f3d8645e | 312 | putc((uint8_t)row); |
ashleymills | 0:edf5f3d8645e | 313 | putc((uint8_t)font); |
ashleymills | 0:edf5f3d8645e | 314 | putc((uint8_t)highByte(textColor)); |
ashleymills | 0:edf5f3d8645e | 315 | putc((uint8_t)lowByte(textColor)); |
ashleymills | 0:edf5f3d8645e | 316 | if(strlen(text)==256) { // change to own implementation of strnlen |
ashleymills | 0:edf5f3d8645e | 317 | text[256] = 0; |
ashleymills | 0:edf5f3d8645e | 318 | } |
ashleymills | 0:edf5f3d8645e | 319 | printf(text); |
ashleymills | 0:edf5f3d8645e | 320 | putc((uint8_t)0x00); |
ashleymills | 0:edf5f3d8645e | 321 | gack(); |
ashleymills | 0:edf5f3d8645e | 322 | } |
ashleymills | 0:edf5f3d8645e | 323 | |
ashleymills | 0:edf5f3d8645e | 324 | void TouchScreen::drawRectangle(uint16_t topLeftX, uint16_t topLeftY, uint16_t botRightX, uint16_t botRightY, uint16_t color) { |
ashleymills | 0:edf5f3d8645e | 325 | putc('r'); |
ashleymills | 0:edf5f3d8645e | 326 | putc(highByte(topLeftX)); |
ashleymills | 0:edf5f3d8645e | 327 | putc(lowByte (topLeftX)); |
ashleymills | 0:edf5f3d8645e | 328 | putc(highByte(topLeftY)); |
ashleymills | 0:edf5f3d8645e | 329 | putc(lowByte (topLeftY)); |
ashleymills | 0:edf5f3d8645e | 330 | putc(highByte(botRightX)); |
ashleymills | 0:edf5f3d8645e | 331 | putc(lowByte (botRightX)); |
ashleymills | 0:edf5f3d8645e | 332 | putc(highByte(botRightY)); |
ashleymills | 0:edf5f3d8645e | 333 | putc(lowByte (botRightY)); |
ashleymills | 0:edf5f3d8645e | 334 | putc(highByte(color)); |
ashleymills | 0:edf5f3d8645e | 335 | putc(lowByte (color)); |
ashleymills | 0:edf5f3d8645e | 336 | gack(); |
ashleymills | 0:edf5f3d8645e | 337 | } |
ashleymills | 0:edf5f3d8645e | 338 | |
ashleymills | 0:edf5f3d8645e | 339 | void TouchScreen::drawRectangleWH(uint16_t topLeftX, uint16_t topLeftY, uint16_t width, uint16_t height, uint16_t color) { |
ashleymills | 0:edf5f3d8645e | 340 | uint16_t botRightX = topLeftX + width; |
ashleymills | 0:edf5f3d8645e | 341 | uint16_t botRightY = topLeftY + height; |
ashleymills | 0:edf5f3d8645e | 342 | putc('r'); |
ashleymills | 0:edf5f3d8645e | 343 | putc(highByte(topLeftX)); |
ashleymills | 0:edf5f3d8645e | 344 | putc(lowByte (topLeftX)); |
ashleymills | 0:edf5f3d8645e | 345 | putc(highByte(topLeftY)); |
ashleymills | 0:edf5f3d8645e | 346 | putc(lowByte (topLeftY)); |
ashleymills | 0:edf5f3d8645e | 347 | putc(highByte(botRightX)); |
ashleymills | 0:edf5f3d8645e | 348 | putc(lowByte (botRightX)); |
ashleymills | 0:edf5f3d8645e | 349 | putc(highByte(botRightY)); |
ashleymills | 0:edf5f3d8645e | 350 | putc(lowByte (botRightY)); |
ashleymills | 0:edf5f3d8645e | 351 | putc(highByte(color)); |
ashleymills | 0:edf5f3d8645e | 352 | putc(lowByte (color)); |
ashleymills | 0:edf5f3d8645e | 353 | gack(); |
ashleymills | 0:edf5f3d8645e | 354 | } |
ashleymills | 0:edf5f3d8645e | 355 | |
ashleymills | 0:edf5f3d8645e | 356 | void TouchScreen::drawRectangleWH(uint16_t topLeftX, uint16_t topLeftY, uint16_t width, uint16_t height) { |
ashleymills | 0:edf5f3d8645e | 357 | setPenSolid(); |
ashleymills | 0:edf5f3d8645e | 358 | drawRectangleWH(topLeftX,topLeftY,width,height,_fillColor); |
ashleymills | 0:edf5f3d8645e | 359 | setPenWireframe(); |
ashleymills | 0:edf5f3d8645e | 360 | drawRectangleWH(topLeftX,topLeftY,width,height,_strokeColor); |
ashleymills | 0:edf5f3d8645e | 361 | setPenSolid(); |
ashleymills | 0:edf5f3d8645e | 362 | } |
ashleymills | 0:edf5f3d8645e | 363 | |
ashleymills | 0:edf5f3d8645e | 364 | |
ashleymills | 0:edf5f3d8645e | 365 | void TouchScreen::drawLine(uint16_t topLeftX, uint16_t topLeftY, uint16_t botRightX, uint16_t botRightY, uint16_t color) { |
ashleymills | 0:edf5f3d8645e | 366 | putc('L'); |
ashleymills | 0:edf5f3d8645e | 367 | putc(highByte(topLeftX)); |
ashleymills | 0:edf5f3d8645e | 368 | putc(lowByte (topLeftX)); |
ashleymills | 0:edf5f3d8645e | 369 | putc(highByte(topLeftY)); |
ashleymills | 0:edf5f3d8645e | 370 | putc(lowByte (topLeftY)); |
ashleymills | 0:edf5f3d8645e | 371 | putc(highByte(botRightX)); |
ashleymills | 0:edf5f3d8645e | 372 | putc(lowByte (botRightX)); |
ashleymills | 0:edf5f3d8645e | 373 | putc(highByte(botRightY)); |
ashleymills | 0:edf5f3d8645e | 374 | putc(lowByte (botRightY)); |
ashleymills | 0:edf5f3d8645e | 375 | putc(highByte(color)); |
ashleymills | 0:edf5f3d8645e | 376 | putc(lowByte (color)); |
ashleymills | 0:edf5f3d8645e | 377 | gack(); |
ashleymills | 0:edf5f3d8645e | 378 | } |
ashleymills | 0:edf5f3d8645e | 379 | |
ashleymills | 0:edf5f3d8645e | 380 | void TouchScreen::drawChar(char c, uint16_t x, uint16_t y, uint16_t color, uint8_t width, uint8_t height) { |
ashleymills | 0:edf5f3d8645e | 381 | putc('t'); |
ashleymills | 0:edf5f3d8645e | 382 | putc(c); |
ashleymills | 0:edf5f3d8645e | 383 | putc(highByte(x)); |
ashleymills | 0:edf5f3d8645e | 384 | putc(lowByte (x)); |
ashleymills | 0:edf5f3d8645e | 385 | putc(highByte(y)); |
ashleymills | 0:edf5f3d8645e | 386 | putc(lowByte (y)); |
ashleymills | 0:edf5f3d8645e | 387 | putc(highByte(color)); |
ashleymills | 0:edf5f3d8645e | 388 | putc(lowByte (color)); |
ashleymills | 0:edf5f3d8645e | 389 | putc(width); |
ashleymills | 0:edf5f3d8645e | 390 | putc(height); |
ashleymills | 0:edf5f3d8645e | 391 | gack(); |
ashleymills | 0:edf5f3d8645e | 392 | } |
ashleymills | 0:edf5f3d8645e | 393 | |
ashleymills | 0:edf5f3d8645e | 394 | |
ashleymills | 0:edf5f3d8645e | 395 | void TouchScreen::setFont(uint8_t fontIndex) { |
ashleymills | 0:edf5f3d8645e | 396 | putc('F'); |
ashleymills | 0:edf5f3d8645e | 397 | putc(fontIndex); |
ashleymills | 0:edf5f3d8645e | 398 | gack(); |
ashleymills | 0:edf5f3d8645e | 399 | } |
ashleymills | 0:edf5f3d8645e | 400 | |
ashleymills | 0:edf5f3d8645e | 401 | void TouchScreen::drawText(char *s, uint16_t x, uint16_t y) { |
ashleymills | 0:edf5f3d8645e | 402 | drawGraphicsFormatString( |
ashleymills | 0:edf5f3d8645e | 403 | x,y, |
ashleymills | 0:edf5f3d8645e | 404 | INTERNAL_FONT_8x8, |
ashleymills | 0:edf5f3d8645e | 405 | _strokeColor, |
ashleymills | 0:edf5f3d8645e | 406 | 1,1, |
ashleymills | 0:edf5f3d8645e | 407 | s |
ashleymills | 0:edf5f3d8645e | 408 | ); |
ashleymills | 0:edf5f3d8645e | 409 | } |
ashleymills | 0:edf5f3d8645e | 410 | |
ashleymills | 0:edf5f3d8645e | 411 | void TouchScreen::setFillColor(uint16_t c) { |
ashleymills | 0:edf5f3d8645e | 412 | _fillColor = c; |
ashleymills | 0:edf5f3d8645e | 413 | } |
ashleymills | 0:edf5f3d8645e | 414 | |
ashleymills | 0:edf5f3d8645e | 415 | void TouchScreen::setStrokeColor(uint16_t c) { |
ashleymills | 0:edf5f3d8645e | 416 | _strokeColor = c; |
ashleymills | 0:edf5f3d8645e | 417 | } |