This library is the modified library of 4DGL by Stephane ROCHON <stephane.rochon at free.fr> modified at drawImage() by Kazushi Mukaiyama <i@kazushi.info>

Committer:
kazushi2008
Date:
Fri Oct 29 02:26:05 2010 +0000
Revision:
0:c2aeac7c2d15

        

Who changed what in which revision?

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