Dependencies:   mbed

Committer:
Kerpower
Date:
Sun Jul 18 14:43:48 2010 +0000
Revision:
0:772a63029ab0

        

Who changed what in which revision?

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