A demo program using uVGAIII board.

Dependencies:   mbed uVGAIII

Fork of uVGAIII_demo by Jingyi Zhang

Committer:
ivygatech
Date:
Sun Mar 23 23:43:19 2014 +0000
Revision:
0:9e5b26a137ec
uVGAIII demo program

Who changed what in which revision?

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