4DGL library with slight changes. Did not want to commit to original library.

Committer:
reinaldo422
Date:
Wed Oct 22 05:25:01 2014 +0000
Revision:
0:9cbbed69bc5b
4DGL library with slight changes made. Did not want to commit directly to library.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
reinaldo422 0:9cbbed69bc5b 1 //
reinaldo422 0:9cbbed69bc5b 2 // TFT_4DGL is a class to drive 4D Systems TFT touch screens
reinaldo422 0:9cbbed69bc5b 3 //
reinaldo422 0:9cbbed69bc5b 4 // Copyright (C) <2010> Stephane ROCHON <stephane.rochon at free.fr>
reinaldo422 0:9cbbed69bc5b 5 //
reinaldo422 0:9cbbed69bc5b 6 // TFT_4DGL is free software: you can redistribute it and/or modify
reinaldo422 0:9cbbed69bc5b 7 // it under the terms of the GNU General Public License as published by
reinaldo422 0:9cbbed69bc5b 8 // the Free Software Foundation, either version 3 of the License, or
reinaldo422 0:9cbbed69bc5b 9 // (at your option) any later version.
reinaldo422 0:9cbbed69bc5b 10 //
reinaldo422 0:9cbbed69bc5b 11 // TFT_4DGL is distributed in the hope that it will be useful,
reinaldo422 0:9cbbed69bc5b 12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
reinaldo422 0:9cbbed69bc5b 13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
reinaldo422 0:9cbbed69bc5b 14 // GNU General Public License for more details.
reinaldo422 0:9cbbed69bc5b 15 //
reinaldo422 0:9cbbed69bc5b 16 // You should have received a copy of the GNU General Public License
reinaldo422 0:9cbbed69bc5b 17 // along with TFT_4DGL. If not, see <http://www.gnu.org/licenses/>.
reinaldo422 0:9cbbed69bc5b 18
reinaldo422 0:9cbbed69bc5b 19 #include "mbed.h"
reinaldo422 0:9cbbed69bc5b 20 #include "TFT_4DGL.h"
reinaldo422 0:9cbbed69bc5b 21
reinaldo422 0:9cbbed69bc5b 22 //Serial pc(USBTX,USBRX);
reinaldo422 0:9cbbed69bc5b 23
reinaldo422 0:9cbbed69bc5b 24 //******************************************************************************************************
reinaldo422 0:9cbbed69bc5b 25 TFT_4DGL :: TFT_4DGL(PinName tx, PinName rx, PinName rst) : _cmd(tx, rx), _rst(rst) { // Constructor
reinaldo422 0:9cbbed69bc5b 26
reinaldo422 0:9cbbed69bc5b 27 #if DEBUGMODE
reinaldo422 0:9cbbed69bc5b 28 /*
reinaldo422 0:9cbbed69bc5b 29 pc.baud(115200);
reinaldo422 0:9cbbed69bc5b 30
reinaldo422 0:9cbbed69bc5b 31 pc.printf("\n\n\n");
reinaldo422 0:9cbbed69bc5b 32 pc.printf("********************\n");
reinaldo422 0:9cbbed69bc5b 33 pc.printf("TFT_4DGL CONSTRUCTOR\n");
reinaldo422 0:9cbbed69bc5b 34 pc.printf("********************\n");
reinaldo422 0:9cbbed69bc5b 35 */
reinaldo422 0:9cbbed69bc5b 36 #endif
reinaldo422 0:9cbbed69bc5b 37
reinaldo422 0:9cbbed69bc5b 38 _rst = 1; // put RESET pin to high to start TFT screen
reinaldo422 0:9cbbed69bc5b 39
reinaldo422 0:9cbbed69bc5b 40 reset();
reinaldo422 0:9cbbed69bc5b 41 autobaud(); // send autobaud command
reinaldo422 0:9cbbed69bc5b 42 version(); // get version information
reinaldo422 0:9cbbed69bc5b 43 cls(); // clear screen
reinaldo422 0:9cbbed69bc5b 44
reinaldo422 0:9cbbed69bc5b 45 current_col = 0; // initial cursor col
reinaldo422 0:9cbbed69bc5b 46 current_row = 0; // initial cursor row
reinaldo422 0:9cbbed69bc5b 47 current_color = WHITE; // initial text color
reinaldo422 0:9cbbed69bc5b 48 current_orientation = IS_PORTRAIT; // initial screen orientation
reinaldo422 0:9cbbed69bc5b 49
reinaldo422 0:9cbbed69bc5b 50 set_font(FONT_5X7); // initial font
reinaldo422 0:9cbbed69bc5b 51 text_mode(OPAQUE); // initial texr mode
reinaldo422 0:9cbbed69bc5b 52 }
reinaldo422 0:9cbbed69bc5b 53
reinaldo422 0:9cbbed69bc5b 54 //******************************************************************************************************
reinaldo422 0:9cbbed69bc5b 55 void TFT_4DGL :: writeBYTE(char c) { // send a BYTE command to screen
reinaldo422 0:9cbbed69bc5b 56
reinaldo422 0:9cbbed69bc5b 57 _cmd.putc(c);
reinaldo422 0:9cbbed69bc5b 58 wait_ms(1);
reinaldo422 0:9cbbed69bc5b 59
reinaldo422 0:9cbbed69bc5b 60 #if DEBUGMODE
reinaldo422 0:9cbbed69bc5b 61 pc.printf(" Char sent : 0x%02X\n",c);
reinaldo422 0:9cbbed69bc5b 62 #endif
reinaldo422 0:9cbbed69bc5b 63
reinaldo422 0:9cbbed69bc5b 64 }
reinaldo422 0:9cbbed69bc5b 65
reinaldo422 0:9cbbed69bc5b 66 //******************************************************************************************************
reinaldo422 0:9cbbed69bc5b 67 void TFT_4DGL :: freeBUFFER(void) { // Clear serial buffer before writing command
reinaldo422 0:9cbbed69bc5b 68
reinaldo422 0:9cbbed69bc5b 69 while (_cmd.readable()) _cmd.getc(); // clear buffer garbage
reinaldo422 0:9cbbed69bc5b 70 }
reinaldo422 0:9cbbed69bc5b 71
reinaldo422 0:9cbbed69bc5b 72 //******************************************************************************************************
reinaldo422 0:9cbbed69bc5b 73 int TFT_4DGL :: writeCOMMAND(char *command, int number) { // send several BYTES making a command and return an answer
reinaldo422 0:9cbbed69bc5b 74
reinaldo422 0:9cbbed69bc5b 75 #if DEBUGMODE
reinaldo422 0:9cbbed69bc5b 76 pc.printf("\n");
reinaldo422 0:9cbbed69bc5b 77 pc.printf("New COMMAND : 0x%02X\n", command[0]);
reinaldo422 0:9cbbed69bc5b 78 #endif
reinaldo422 0:9cbbed69bc5b 79 int i, resp = 0;
reinaldo422 0:9cbbed69bc5b 80 freeBUFFER();
reinaldo422 0:9cbbed69bc5b 81
reinaldo422 0:9cbbed69bc5b 82 for (i = 0; i < number; i++) writeBYTE(command[i]); // send command to serial port
reinaldo422 0:9cbbed69bc5b 83
reinaldo422 0:9cbbed69bc5b 84 while (!_cmd.readable()) wait_ms(TEMPO); // wait for screen answer
reinaldo422 0:9cbbed69bc5b 85 if (_cmd.readable()) resp = _cmd.getc(); // read response if any
reinaldo422 0:9cbbed69bc5b 86 switch (resp) {
reinaldo422 0:9cbbed69bc5b 87 case ACK : // if OK return 1
reinaldo422 0:9cbbed69bc5b 88 resp = 1;
reinaldo422 0:9cbbed69bc5b 89 break;
reinaldo422 0:9cbbed69bc5b 90 case NAK : // if NOK return -1
reinaldo422 0:9cbbed69bc5b 91 resp = -1;
reinaldo422 0:9cbbed69bc5b 92 break;
reinaldo422 0:9cbbed69bc5b 93 default :
reinaldo422 0:9cbbed69bc5b 94 resp = 0; // else return 0
reinaldo422 0:9cbbed69bc5b 95 break;
reinaldo422 0:9cbbed69bc5b 96 }
reinaldo422 0:9cbbed69bc5b 97 #if DEBUGMODE
reinaldo422 0:9cbbed69bc5b 98 pc.printf(" Answer received : %d\n",resp);
reinaldo422 0:9cbbed69bc5b 99 #endif
reinaldo422 0:9cbbed69bc5b 100
reinaldo422 0:9cbbed69bc5b 101 return resp;
reinaldo422 0:9cbbed69bc5b 102 }
reinaldo422 0:9cbbed69bc5b 103
reinaldo422 0:9cbbed69bc5b 104 //**************************************************************************
reinaldo422 0:9cbbed69bc5b 105 void TFT_4DGL :: reset() { // Reset Screen
reinaldo422 0:9cbbed69bc5b 106
reinaldo422 0:9cbbed69bc5b 107 _rst = 0; // put RESET pin to low
reinaldo422 0:9cbbed69bc5b 108 wait_ms(TEMPO); // wait a few milliseconds for command reception
reinaldo422 0:9cbbed69bc5b 109 _rst = 1; // put RESET back to high
reinaldo422 0:9cbbed69bc5b 110 wait(3); // wait 3s for screen to restart
reinaldo422 0:9cbbed69bc5b 111
reinaldo422 0:9cbbed69bc5b 112 freeBUFFER(); // clean buffer from possible garbage
reinaldo422 0:9cbbed69bc5b 113 }
reinaldo422 0:9cbbed69bc5b 114
reinaldo422 0:9cbbed69bc5b 115 //**************************************************************************
reinaldo422 0:9cbbed69bc5b 116 void TFT_4DGL :: autobaud() { // send AutoBaud command (9600)
reinaldo422 0:9cbbed69bc5b 117 char command[1] = "";
reinaldo422 0:9cbbed69bc5b 118 command[0] = AUTOBAUD;
reinaldo422 0:9cbbed69bc5b 119 writeCOMMAND(command, 1);
reinaldo422 0:9cbbed69bc5b 120 }
reinaldo422 0:9cbbed69bc5b 121
reinaldo422 0:9cbbed69bc5b 122 //**************************************************************************
reinaldo422 0:9cbbed69bc5b 123 void TFT_4DGL :: cls() { // clear screen
reinaldo422 0:9cbbed69bc5b 124 char command[1] = "";
reinaldo422 0:9cbbed69bc5b 125 command[0] = CLS;
reinaldo422 0:9cbbed69bc5b 126 writeCOMMAND(command, 1);
reinaldo422 0:9cbbed69bc5b 127 }
reinaldo422 0:9cbbed69bc5b 128
reinaldo422 0:9cbbed69bc5b 129 //**************************************************************************
reinaldo422 0:9cbbed69bc5b 130 void TFT_4DGL :: version() { // get API version
reinaldo422 0:9cbbed69bc5b 131 char command[2] = "";
reinaldo422 0:9cbbed69bc5b 132 command[0] = VERSION;
reinaldo422 0:9cbbed69bc5b 133 command[1] = OFF;
reinaldo422 0:9cbbed69bc5b 134 readVERSION(command, 2);
reinaldo422 0:9cbbed69bc5b 135 }
reinaldo422 0:9cbbed69bc5b 136
reinaldo422 0:9cbbed69bc5b 137 //**************************************************************************
reinaldo422 0:9cbbed69bc5b 138 void TFT_4DGL :: baudrate(int speed) { // set screen baud rate
reinaldo422 0:9cbbed69bc5b 139 char command[2]= "";
reinaldo422 0:9cbbed69bc5b 140 command[0] = BAUDRATE;
reinaldo422 0:9cbbed69bc5b 141 switch (speed) {
reinaldo422 0:9cbbed69bc5b 142 case 110 :
reinaldo422 0:9cbbed69bc5b 143 command[1] = BAUD_110;
reinaldo422 0:9cbbed69bc5b 144 break;
reinaldo422 0:9cbbed69bc5b 145 case 300 :
reinaldo422 0:9cbbed69bc5b 146 command[1] = BAUD_300;
reinaldo422 0:9cbbed69bc5b 147 break;
reinaldo422 0:9cbbed69bc5b 148 case 600 :
reinaldo422 0:9cbbed69bc5b 149 command[1] = BAUD_600;
reinaldo422 0:9cbbed69bc5b 150 break;
reinaldo422 0:9cbbed69bc5b 151 case 1200 :
reinaldo422 0:9cbbed69bc5b 152 command[1] = BAUD_1200;
reinaldo422 0:9cbbed69bc5b 153 break;
reinaldo422 0:9cbbed69bc5b 154 case 2400 :
reinaldo422 0:9cbbed69bc5b 155 command[1] = BAUD_2400;
reinaldo422 0:9cbbed69bc5b 156 break;
reinaldo422 0:9cbbed69bc5b 157 case 4800 :
reinaldo422 0:9cbbed69bc5b 158 command[1] = BAUD_4800;
reinaldo422 0:9cbbed69bc5b 159 break;
reinaldo422 0:9cbbed69bc5b 160 case 9600 :
reinaldo422 0:9cbbed69bc5b 161 command[1] = BAUD_9600;
reinaldo422 0:9cbbed69bc5b 162 break;
reinaldo422 0:9cbbed69bc5b 163 case 14400 :
reinaldo422 0:9cbbed69bc5b 164 command[1] = BAUD_14400;
reinaldo422 0:9cbbed69bc5b 165 break;
reinaldo422 0:9cbbed69bc5b 166 case 19200 :
reinaldo422 0:9cbbed69bc5b 167 command[1] = BAUD_19200;
reinaldo422 0:9cbbed69bc5b 168 break;
reinaldo422 0:9cbbed69bc5b 169 case 31250 :
reinaldo422 0:9cbbed69bc5b 170 command[1] = BAUD_31250;
reinaldo422 0:9cbbed69bc5b 171 break;
reinaldo422 0:9cbbed69bc5b 172 case 38400 :
reinaldo422 0:9cbbed69bc5b 173 command[1] = BAUD_38400;
reinaldo422 0:9cbbed69bc5b 174 break;
reinaldo422 0:9cbbed69bc5b 175 case 56000 :
reinaldo422 0:9cbbed69bc5b 176 command[1] = BAUD_56000;
reinaldo422 0:9cbbed69bc5b 177 break;
reinaldo422 0:9cbbed69bc5b 178 case 57600 :
reinaldo422 0:9cbbed69bc5b 179 command[1] = BAUD_57600;
reinaldo422 0:9cbbed69bc5b 180 break;
reinaldo422 0:9cbbed69bc5b 181 case 115200 :
reinaldo422 0:9cbbed69bc5b 182 command[1] = BAUD_115200;
reinaldo422 0:9cbbed69bc5b 183 break;
reinaldo422 0:9cbbed69bc5b 184 case 128000 :
reinaldo422 0:9cbbed69bc5b 185 command[1] = BAUD_128000;
reinaldo422 0:9cbbed69bc5b 186 break;
reinaldo422 0:9cbbed69bc5b 187 case 256000 :
reinaldo422 0:9cbbed69bc5b 188 command[1] = BAUD_256000;
reinaldo422 0:9cbbed69bc5b 189 break;
reinaldo422 0:9cbbed69bc5b 190 default :
reinaldo422 0:9cbbed69bc5b 191 command[1] = BAUD_9600;
reinaldo422 0:9cbbed69bc5b 192 speed = 9600;
reinaldo422 0:9cbbed69bc5b 193 break;
reinaldo422 0:9cbbed69bc5b 194 }
reinaldo422 0:9cbbed69bc5b 195
reinaldo422 0:9cbbed69bc5b 196 int i, resp = 0;
reinaldo422 0:9cbbed69bc5b 197
reinaldo422 0:9cbbed69bc5b 198 freeBUFFER();
reinaldo422 0:9cbbed69bc5b 199
reinaldo422 0:9cbbed69bc5b 200 for (i = 0; i <2; i++) writeBYTE(command[i]); // send command to serial port
reinaldo422 0:9cbbed69bc5b 201 _cmd.baud(speed); // set mbed to same speed
reinaldo422 0:9cbbed69bc5b 202
reinaldo422 0:9cbbed69bc5b 203 while (!_cmd.readable()) wait_ms(TEMPO); // wait for screen answer
reinaldo422 0:9cbbed69bc5b 204
reinaldo422 0:9cbbed69bc5b 205 if (_cmd.readable()) resp = _cmd.getc(); // read response if any
reinaldo422 0:9cbbed69bc5b 206 switch (resp) {
reinaldo422 0:9cbbed69bc5b 207 case ACK : // if OK return 1
reinaldo422 0:9cbbed69bc5b 208 resp = 1;
reinaldo422 0:9cbbed69bc5b 209 break;
reinaldo422 0:9cbbed69bc5b 210 case NAK : // if NOK return -1
reinaldo422 0:9cbbed69bc5b 211 resp = -1;
reinaldo422 0:9cbbed69bc5b 212 break;
reinaldo422 0:9cbbed69bc5b 213 default :
reinaldo422 0:9cbbed69bc5b 214 resp = 0; // else return 0
reinaldo422 0:9cbbed69bc5b 215 break;
reinaldo422 0:9cbbed69bc5b 216 }
reinaldo422 0:9cbbed69bc5b 217 }
reinaldo422 0:9cbbed69bc5b 218
reinaldo422 0:9cbbed69bc5b 219 //******************************************************************************************************
reinaldo422 0:9cbbed69bc5b 220 int TFT_4DGL :: readVERSION(char *command, int number) { // read screen info and populate data
reinaldo422 0:9cbbed69bc5b 221
reinaldo422 0:9cbbed69bc5b 222 int i, temp = 0, resp = 0;
reinaldo422 0:9cbbed69bc5b 223 char response[5] = "";
reinaldo422 0:9cbbed69bc5b 224
reinaldo422 0:9cbbed69bc5b 225 freeBUFFER();
reinaldo422 0:9cbbed69bc5b 226
reinaldo422 0:9cbbed69bc5b 227 for (i = 0; i < number; i++) writeBYTE(command[i]); // send all chars to serial port
reinaldo422 0:9cbbed69bc5b 228
reinaldo422 0:9cbbed69bc5b 229 while (!_cmd.readable()) wait_ms(TEMPO); // wait for screen answer
reinaldo422 0:9cbbed69bc5b 230
reinaldo422 0:9cbbed69bc5b 231 while (_cmd.readable()) {
reinaldo422 0:9cbbed69bc5b 232 temp = _cmd.getc();
reinaldo422 0:9cbbed69bc5b 233 response[resp++] = (char)temp;
reinaldo422 0:9cbbed69bc5b 234 }
reinaldo422 0:9cbbed69bc5b 235 switch (resp) {
reinaldo422 0:9cbbed69bc5b 236 case 5 : // if OK populate data and return 1
reinaldo422 0:9cbbed69bc5b 237 type = response[0];
reinaldo422 0:9cbbed69bc5b 238 revision = response[1];
reinaldo422 0:9cbbed69bc5b 239 firmware = response[2];
reinaldo422 0:9cbbed69bc5b 240 reserved1 = response[3];
reinaldo422 0:9cbbed69bc5b 241 reserved2 = response[4];
reinaldo422 0:9cbbed69bc5b 242 resp = 1;
reinaldo422 0:9cbbed69bc5b 243 break;
reinaldo422 0:9cbbed69bc5b 244 default :
reinaldo422 0:9cbbed69bc5b 245 resp = 0; // else return 0
reinaldo422 0:9cbbed69bc5b 246 break;
reinaldo422 0:9cbbed69bc5b 247 }
reinaldo422 0:9cbbed69bc5b 248 return resp;
reinaldo422 0:9cbbed69bc5b 249 }
reinaldo422 0:9cbbed69bc5b 250
reinaldo422 0:9cbbed69bc5b 251 //****************************************************************************************************
reinaldo422 0:9cbbed69bc5b 252 void TFT_4DGL :: background_color(int color) { // set screen background color
reinaldo422 0:9cbbed69bc5b 253 char command[3]= ""; // input color is in 24bits like 0xRRGGBB
reinaldo422 0:9cbbed69bc5b 254
reinaldo422 0:9cbbed69bc5b 255 command[0] = BCKGDCOLOR;
reinaldo422 0:9cbbed69bc5b 256
reinaldo422 0:9cbbed69bc5b 257 int red5 = (color >> (16 + 3)) & 0x1F; // get red on 5 bits
reinaldo422 0:9cbbed69bc5b 258 int green6 = (color >> (8 + 2)) & 0x3F; // get green on 6 bits
reinaldo422 0:9cbbed69bc5b 259 int blue5 = (color >> (0 + 3)) & 0x1F; // get blue on 5 bits
reinaldo422 0:9cbbed69bc5b 260
reinaldo422 0:9cbbed69bc5b 261 command[1] = ((red5 << 3) + (green6 >> 3)) & 0xFF; // first part of 16 bits color
reinaldo422 0:9cbbed69bc5b 262 command[2] = ((green6 << 5) + (blue5 >> 0)) & 0xFF; // second part of 16 bits color
reinaldo422 0:9cbbed69bc5b 263
reinaldo422 0:9cbbed69bc5b 264 writeCOMMAND(command, 3);
reinaldo422 0:9cbbed69bc5b 265 }
reinaldo422 0:9cbbed69bc5b 266
reinaldo422 0:9cbbed69bc5b 267 //****************************************************************************************************
reinaldo422 0:9cbbed69bc5b 268 void TFT_4DGL :: display_control(char mode, char value) { // set screen mode to value
reinaldo422 0:9cbbed69bc5b 269 char command[3]= "";
reinaldo422 0:9cbbed69bc5b 270
reinaldo422 0:9cbbed69bc5b 271 command[0] = DISPCONTROL;
reinaldo422 0:9cbbed69bc5b 272 command[1] = mode;
reinaldo422 0:9cbbed69bc5b 273 command[2] = value;
reinaldo422 0:9cbbed69bc5b 274
reinaldo422 0:9cbbed69bc5b 275 if (mode == ORIENTATION) {
reinaldo422 0:9cbbed69bc5b 276 switch (value) {
reinaldo422 0:9cbbed69bc5b 277 case LANDSCAPE :
reinaldo422 0:9cbbed69bc5b 278 current_orientation = IS_LANDSCAPE;
reinaldo422 0:9cbbed69bc5b 279 break;
reinaldo422 0:9cbbed69bc5b 280 case LANDSCAPE_R :
reinaldo422 0:9cbbed69bc5b 281 current_orientation = IS_LANDSCAPE;
reinaldo422 0:9cbbed69bc5b 282 break;
reinaldo422 0:9cbbed69bc5b 283 case PORTRAIT :
reinaldo422 0:9cbbed69bc5b 284 current_orientation = IS_PORTRAIT;
reinaldo422 0:9cbbed69bc5b 285 break;
reinaldo422 0:9cbbed69bc5b 286 case PORTRAIT_R :
reinaldo422 0:9cbbed69bc5b 287 current_orientation = IS_PORTRAIT;
reinaldo422 0:9cbbed69bc5b 288 break;
reinaldo422 0:9cbbed69bc5b 289 }
reinaldo422 0:9cbbed69bc5b 290 }
reinaldo422 0:9cbbed69bc5b 291 writeCOMMAND(command, 3);
reinaldo422 0:9cbbed69bc5b 292 set_font(current_font);
reinaldo422 0:9cbbed69bc5b 293 }
reinaldo422 0:9cbbed69bc5b 294
reinaldo422 0:9cbbed69bc5b 295 //****************************************************************************************************
reinaldo422 0:9cbbed69bc5b 296 void TFT_4DGL :: set_volume(char value) { // set sound volume to value
reinaldo422 0:9cbbed69bc5b 297 char command[2]= "";
reinaldo422 0:9cbbed69bc5b 298
reinaldo422 0:9cbbed69bc5b 299 command[0] = SETVOLUME;
reinaldo422 0:9cbbed69bc5b 300 command[1] = value;
reinaldo422 0:9cbbed69bc5b 301
reinaldo422 0:9cbbed69bc5b 302 writeCOMMAND(command, 2);
reinaldo422 0:9cbbed69bc5b 303 }
reinaldo422 0:9cbbed69bc5b 304
reinaldo422 0:9cbbed69bc5b 305
reinaldo422 0:9cbbed69bc5b 306 //******************************************************************************************************
reinaldo422 0:9cbbed69bc5b 307 void TFT_4DGL :: getTOUCH(char *command, int number, int *x, int *y) { // read screen info and populate data
reinaldo422 0:9cbbed69bc5b 308
reinaldo422 0:9cbbed69bc5b 309 #if DEBUGMODE
reinaldo422 0:9cbbed69bc5b 310 pc.printf("\n");
reinaldo422 0:9cbbed69bc5b 311 pc.printf("New COMMAND : 0x%02X\n", command[0]);
reinaldo422 0:9cbbed69bc5b 312 #endif
reinaldo422 0:9cbbed69bc5b 313 int i, temp = 0, resp = 0;
reinaldo422 0:9cbbed69bc5b 314 char response[5] = "";
reinaldo422 0:9cbbed69bc5b 315
reinaldo422 0:9cbbed69bc5b 316 freeBUFFER();
reinaldo422 0:9cbbed69bc5b 317
reinaldo422 0:9cbbed69bc5b 318 for (i = 0; i < number; i++) writeBYTE(command[i]); // send all chars to serial port
reinaldo422 0:9cbbed69bc5b 319
reinaldo422 0:9cbbed69bc5b 320 while (!_cmd.readable()) wait_ms(TEMPO); // wait for screen answer
reinaldo422 0:9cbbed69bc5b 321
reinaldo422 0:9cbbed69bc5b 322 while (_cmd.readable()) {
reinaldo422 0:9cbbed69bc5b 323 temp = _cmd.getc();
reinaldo422 0:9cbbed69bc5b 324 response[resp++] = (char)temp;
reinaldo422 0:9cbbed69bc5b 325 }
reinaldo422 0:9cbbed69bc5b 326
reinaldo422 0:9cbbed69bc5b 327 #if DEBUGMODE
reinaldo422 0:9cbbed69bc5b 328 pc.printf(" Answer received %d : 0x%02X 0x%02X 0x%02X 0x%02X\n", resp, response[0], response[1], response[2], response[3]);
reinaldo422 0:9cbbed69bc5b 329 #endif
reinaldo422 0:9cbbed69bc5b 330
reinaldo422 0:9cbbed69bc5b 331 switch (resp) {
reinaldo422 0:9cbbed69bc5b 332 case 4 : // if OK populate data
reinaldo422 0:9cbbed69bc5b 333 *x = ((response[0]<<8)+ response[1]) * (response[0] != 0xFF);
reinaldo422 0:9cbbed69bc5b 334 *y = ((response[2]<<8)+ response[3]) * (response[2] != 0xFF);
reinaldo422 0:9cbbed69bc5b 335 break;
reinaldo422 0:9cbbed69bc5b 336 default :
reinaldo422 0:9cbbed69bc5b 337 *x = -1;
reinaldo422 0:9cbbed69bc5b 338 *y = -1;
reinaldo422 0:9cbbed69bc5b 339 break;
reinaldo422 0:9cbbed69bc5b 340 }
reinaldo422 0:9cbbed69bc5b 341
reinaldo422 0:9cbbed69bc5b 342 #if DEBUGMODE
reinaldo422 0:9cbbed69bc5b 343 pc.printf(" X,Y : %03d,%03d\n", *x, *y);
reinaldo422 0:9cbbed69bc5b 344 #endif
reinaldo422 0:9cbbed69bc5b 345 }
reinaldo422 0:9cbbed69bc5b 346
reinaldo422 0:9cbbed69bc5b 347 //******************************************************************************************************
reinaldo422 0:9cbbed69bc5b 348 int TFT_4DGL :: getSTATUS(char *command, int number) { // read screen info and populate data
reinaldo422 0:9cbbed69bc5b 349
reinaldo422 0:9cbbed69bc5b 350 #if DEBUGMODE
reinaldo422 0:9cbbed69bc5b 351 pc.printf("\n");
reinaldo422 0:9cbbed69bc5b 352 pc.printf("New COMMAND : 0x%02X\n", command[0]);
reinaldo422 0:9cbbed69bc5b 353 #endif
reinaldo422 0:9cbbed69bc5b 354
reinaldo422 0:9cbbed69bc5b 355 int i, temp = 0, resp = 0;
reinaldo422 0:9cbbed69bc5b 356 char response[5] = "";
reinaldo422 0:9cbbed69bc5b 357
reinaldo422 0:9cbbed69bc5b 358 freeBUFFER();
reinaldo422 0:9cbbed69bc5b 359
reinaldo422 0:9cbbed69bc5b 360 for (i = 0; i < number; i++) writeBYTE(command[i]); // send all chars to serial port
reinaldo422 0:9cbbed69bc5b 361
reinaldo422 0:9cbbed69bc5b 362 while (!_cmd.readable()) wait_ms(TEMPO); // wait for screen answer
reinaldo422 0:9cbbed69bc5b 363
reinaldo422 0:9cbbed69bc5b 364 while (_cmd.readable()) {
reinaldo422 0:9cbbed69bc5b 365 temp = _cmd.getc();
reinaldo422 0:9cbbed69bc5b 366 response[resp++] = (char)temp;
reinaldo422 0:9cbbed69bc5b 367 }
reinaldo422 0:9cbbed69bc5b 368 switch (resp) {
reinaldo422 0:9cbbed69bc5b 369 case 4 :
reinaldo422 0:9cbbed69bc5b 370 resp = (int)response[1]; // if OK populate data
reinaldo422 0:9cbbed69bc5b 371 break;
reinaldo422 0:9cbbed69bc5b 372 default :
reinaldo422 0:9cbbed69bc5b 373 resp = -1; // else return 0
reinaldo422 0:9cbbed69bc5b 374 break;
reinaldo422 0:9cbbed69bc5b 375 }
reinaldo422 0:9cbbed69bc5b 376
reinaldo422 0:9cbbed69bc5b 377 #if DEBUGMODE
reinaldo422 0:9cbbed69bc5b 378 pc.printf(" Answer received : %d\n", resp);
reinaldo422 0:9cbbed69bc5b 379 #endif
reinaldo422 0:9cbbed69bc5b 380
reinaldo422 0:9cbbed69bc5b 381 return resp;
reinaldo422 0:9cbbed69bc5b 382 }