Wrappper for VGAII demo by Jim Hamblem that includes a printf function that can print infinitely.

Dependencies:   mbed

Committer:
apatel43
Date:
Thu Oct 13 19:21:27 2011 +0000
Revision:
0:10b753bd635e
Version 1

Who changed what in which revision?

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