Brian Eason / Mbed 2 deprecated BrickBreak

Dependencies:   mbed

Committer:
brianeason92
Date:
Tue Nov 01 18:29:26 2016 +0000
Revision:
0:64079f49da67
Full functioning brick break game for lab 4

Who changed what in which revision?

UserRevisionLine numberNew contents of line
brianeason92 0:64079f49da67 1 //
brianeason92 0:64079f49da67 2 // uLCD_4DGL is a class to drive 4D Systems uLCD 144 G2
brianeason92 0:64079f49da67 3 //
brianeason92 0:64079f49da67 4 // Copyright (C) <2010> Stephane ROCHON <stephane.rochon at free.fr>
brianeason92 0:64079f49da67 5 // Modifed for Goldelox processor <2013> Jim Hamblen
brianeason92 0:64079f49da67 6 //
brianeason92 0:64079f49da67 7 // uLCD_4DGL is free software: you can redistribute it and/or modify
brianeason92 0:64079f49da67 8 // it under the terms of the GNU General Public License as published by
brianeason92 0:64079f49da67 9 // the Free Software Foundation, either version 3 of the License, or
brianeason92 0:64079f49da67 10 // (at your option) any later version.
brianeason92 0:64079f49da67 11 //
brianeason92 0:64079f49da67 12 // uLCD_4DGL is distributed in the hope that it will be useful,
brianeason92 0:64079f49da67 13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
brianeason92 0:64079f49da67 14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
brianeason92 0:64079f49da67 15 // GNU General Public License for more details.
brianeason92 0:64079f49da67 16 //
brianeason92 0:64079f49da67 17 // You should have received a copy of the GNU General Public License
brianeason92 0:64079f49da67 18 // along with uLCD_4DGL. If not, see <http://www.gnu.org/licenses/>.
brianeason92 0:64079f49da67 19
brianeason92 0:64079f49da67 20 #include "mbed.h"
brianeason92 0:64079f49da67 21 #include "uLCD_4DGL.h"
brianeason92 0:64079f49da67 22
brianeason92 0:64079f49da67 23 #define ARRAY_SIZE(X) sizeof(X)/sizeof(X[0])
brianeason92 0:64079f49da67 24
brianeason92 0:64079f49da67 25 //Serial pc(USBTX,USBRX);
brianeason92 0:64079f49da67 26
brianeason92 0:64079f49da67 27
brianeason92 0:64079f49da67 28 //******************************************************************************************************
brianeason92 0:64079f49da67 29 uLCD_4DGL :: uLCD_4DGL(PinName tx, PinName rx, PinName rst) : _cmd(tx, rx),
brianeason92 0:64079f49da67 30 _rst(rst)
brianeason92 0:64079f49da67 31 #if DEBUGMODE
brianeason92 0:64079f49da67 32 ,pc(USBTX, USBRX)
brianeason92 0:64079f49da67 33 #endif // DEBUGMODE
brianeason92 0:64079f49da67 34 {
brianeason92 0:64079f49da67 35 // Constructor
brianeason92 0:64079f49da67 36 _cmd.baud(9600);
brianeason92 0:64079f49da67 37 #if DEBUGMODE
brianeason92 0:64079f49da67 38 pc.baud(115200);
brianeason92 0:64079f49da67 39
brianeason92 0:64079f49da67 40 pc.printf("\n\n\n");
brianeason92 0:64079f49da67 41 pc.printf("*********************\n");
brianeason92 0:64079f49da67 42 pc.printf("uLCD_4DGL CONSTRUCTOR\n");
brianeason92 0:64079f49da67 43 pc.printf("*********************\n");
brianeason92 0:64079f49da67 44 #endif
brianeason92 0:64079f49da67 45
brianeason92 0:64079f49da67 46 _rst = 1; // put RESET pin to high to start TFT screen
brianeason92 0:64079f49da67 47 reset();
brianeason92 0:64079f49da67 48 cls(); // clear screen
brianeason92 0:64079f49da67 49 current_col = 0; // initial cursor col
brianeason92 0:64079f49da67 50 current_row = 0; // initial cursor row
brianeason92 0:64079f49da67 51 current_color = WHITE; // initial text color
brianeason92 0:64079f49da67 52 current_orientation = IS_PORTRAIT; // initial screen orientation
brianeason92 0:64079f49da67 53 current_hf = 1;
brianeason92 0:64079f49da67 54 current_wf = 1;
brianeason92 0:64079f49da67 55 set_font(FONT_7X8); // initial font
brianeason92 0:64079f49da67 56 // text_mode(OPAQUE); // initial texr mode
brianeason92 0:64079f49da67 57 }
brianeason92 0:64079f49da67 58
brianeason92 0:64079f49da67 59 //******************************************************************************************************
brianeason92 0:64079f49da67 60 void uLCD_4DGL :: writeBYTE(char c) // send a BYTE command to screen
brianeason92 0:64079f49da67 61 {
brianeason92 0:64079f49da67 62
brianeason92 0:64079f49da67 63 _cmd.putc(c);
brianeason92 0:64079f49da67 64 wait_us(500); //mbed is too fast for LCD at high baud rates in some long commands
brianeason92 0:64079f49da67 65
brianeason92 0:64079f49da67 66 #if DEBUGMODE
brianeason92 0:64079f49da67 67 pc.printf(" Char sent : 0x%02X\n",c);
brianeason92 0:64079f49da67 68 #endif
brianeason92 0:64079f49da67 69
brianeason92 0:64079f49da67 70 }
brianeason92 0:64079f49da67 71
brianeason92 0:64079f49da67 72 //******************************************************************************************************
brianeason92 0:64079f49da67 73 void uLCD_4DGL :: writeBYTEfast(char c) // send a BYTE command to screen
brianeason92 0:64079f49da67 74 {
brianeason92 0:64079f49da67 75
brianeason92 0:64079f49da67 76 _cmd.putc(c);
brianeason92 0:64079f49da67 77 //wait_ms(0.0); //mbed is too fast for LCD at high baud rates - but not in short commands
brianeason92 0:64079f49da67 78
brianeason92 0:64079f49da67 79 #if DEBUGMODE
brianeason92 0:64079f49da67 80 pc.printf(" Char sent : 0x%02X\n",c);
brianeason92 0:64079f49da67 81 #endif
brianeason92 0:64079f49da67 82
brianeason92 0:64079f49da67 83 }
brianeason92 0:64079f49da67 84 //******************************************************************************************************
brianeason92 0:64079f49da67 85 void uLCD_4DGL :: freeBUFFER(void) // Clear serial buffer before writing command
brianeason92 0:64079f49da67 86 {
brianeason92 0:64079f49da67 87
brianeason92 0:64079f49da67 88 while (_cmd.readable()) _cmd.getc(); // clear buffer garbage
brianeason92 0:64079f49da67 89 }
brianeason92 0:64079f49da67 90
brianeason92 0:64079f49da67 91 //******************************************************************************************************
brianeason92 0:64079f49da67 92 int uLCD_4DGL :: writeCOMMAND(char *command, int number) // send several BYTES making a command and return an answer
brianeason92 0:64079f49da67 93 {
brianeason92 0:64079f49da67 94
brianeason92 0:64079f49da67 95 #if DEBUGMODE
brianeason92 0:64079f49da67 96 pc.printf("\n");
brianeason92 0:64079f49da67 97 pc.printf("New COMMAND : 0x%02X\n", command[0]);
brianeason92 0:64079f49da67 98 #endif
brianeason92 0:64079f49da67 99 int i, resp = 0;
brianeason92 0:64079f49da67 100 freeBUFFER();
brianeason92 0:64079f49da67 101 writeBYTE(0xFF);
brianeason92 0:64079f49da67 102 for (i = 0; i < number; i++) {
brianeason92 0:64079f49da67 103 if (i<16)
brianeason92 0:64079f49da67 104 writeBYTEfast(command[i]); // send command to serial port
brianeason92 0:64079f49da67 105 else
brianeason92 0:64079f49da67 106 writeBYTE(command[i]); // send command to serial port but slower
brianeason92 0:64079f49da67 107 }
brianeason92 0:64079f49da67 108 while (!_cmd.readable()) wait_ms(TEMPO); // wait for screen answer
brianeason92 0:64079f49da67 109 if (_cmd.readable()) resp = _cmd.getc(); // read response if any
brianeason92 0:64079f49da67 110 switch (resp) {
brianeason92 0:64079f49da67 111 case ACK : // if OK return 1
brianeason92 0:64079f49da67 112 resp = 1;
brianeason92 0:64079f49da67 113 break;
brianeason92 0:64079f49da67 114 case NAK : // if NOK return -1
brianeason92 0:64079f49da67 115 resp = -1;
brianeason92 0:64079f49da67 116 break;
brianeason92 0:64079f49da67 117 default :
brianeason92 0:64079f49da67 118 resp = 0; // else return 0
brianeason92 0:64079f49da67 119 break;
brianeason92 0:64079f49da67 120 }
brianeason92 0:64079f49da67 121 #if DEBUGMODE
brianeason92 0:64079f49da67 122 pc.printf(" Answer received : %d\n",resp);
brianeason92 0:64079f49da67 123 #endif
brianeason92 0:64079f49da67 124
brianeason92 0:64079f49da67 125 return resp;
brianeason92 0:64079f49da67 126 }
brianeason92 0:64079f49da67 127
brianeason92 0:64079f49da67 128 //**************************************************************************
brianeason92 0:64079f49da67 129 void uLCD_4DGL :: reset() // Reset Screen
brianeason92 0:64079f49da67 130 {
brianeason92 0:64079f49da67 131 wait_ms(5);
brianeason92 0:64079f49da67 132 _rst = 0; // put RESET pin to low
brianeason92 0:64079f49da67 133 wait_ms(5); // wait a few milliseconds for command reception
brianeason92 0:64079f49da67 134 _rst = 1; // put RESET back to high
brianeason92 0:64079f49da67 135 wait(3); // wait 3s for screen to restart
brianeason92 0:64079f49da67 136
brianeason92 0:64079f49da67 137 freeBUFFER(); // clean buffer from possible garbage
brianeason92 0:64079f49da67 138 }
brianeason92 0:64079f49da67 139 //******************************************************************************************************
brianeason92 0:64079f49da67 140 int uLCD_4DGL :: writeCOMMANDnull(char *command, int number) // send several BYTES making a command and return an answer
brianeason92 0:64079f49da67 141 {
brianeason92 0:64079f49da67 142
brianeason92 0:64079f49da67 143 #if DEBUGMODE
brianeason92 0:64079f49da67 144 pc.printf("\n");
brianeason92 0:64079f49da67 145 pc.printf("New COMMAND : 0x%02X\n", command[0]);
brianeason92 0:64079f49da67 146 #endif
brianeason92 0:64079f49da67 147 int i, resp = 0;
brianeason92 0:64079f49da67 148 freeBUFFER();
brianeason92 0:64079f49da67 149 writeBYTE(0x00); //command has a null prefix byte
brianeason92 0:64079f49da67 150 for (i = 0; i < number; i++) {
brianeason92 0:64079f49da67 151 if (i<16) //don't overflow LCD UART buffer
brianeason92 0:64079f49da67 152 writeBYTEfast(command[i]); // send command to serial port
brianeason92 0:64079f49da67 153 else
brianeason92 0:64079f49da67 154 writeBYTE(command[i]); // send command to serial port with delay
brianeason92 0:64079f49da67 155 }
brianeason92 0:64079f49da67 156 while (!_cmd.readable()) wait_ms(TEMPO); // wait for screen answer
brianeason92 0:64079f49da67 157 if (_cmd.readable()) resp = _cmd.getc(); // read response if any
brianeason92 0:64079f49da67 158 switch (resp) {
brianeason92 0:64079f49da67 159 case ACK : // if OK return 1
brianeason92 0:64079f49da67 160 resp = 1;
brianeason92 0:64079f49da67 161 break;
brianeason92 0:64079f49da67 162 case NAK : // if NOK return -1
brianeason92 0:64079f49da67 163 resp = -1;
brianeason92 0:64079f49da67 164 break;
brianeason92 0:64079f49da67 165 default :
brianeason92 0:64079f49da67 166 resp = 0; // else return 0
brianeason92 0:64079f49da67 167 break;
brianeason92 0:64079f49da67 168 }
brianeason92 0:64079f49da67 169 #if DEBUGMODE
brianeason92 0:64079f49da67 170 pc.printf(" Answer received : %d\n",resp);
brianeason92 0:64079f49da67 171 #endif
brianeason92 0:64079f49da67 172
brianeason92 0:64079f49da67 173 return resp;
brianeason92 0:64079f49da67 174 }
brianeason92 0:64079f49da67 175
brianeason92 0:64079f49da67 176 //**************************************************************************
brianeason92 0:64079f49da67 177 void uLCD_4DGL :: cls() // clear screen
brianeason92 0:64079f49da67 178 {
brianeason92 0:64079f49da67 179 char command[1] = "";
brianeason92 0:64079f49da67 180
brianeason92 0:64079f49da67 181 command[0] = CLS;
brianeason92 0:64079f49da67 182 writeCOMMAND(command, 1);
brianeason92 0:64079f49da67 183 current_row=0;
brianeason92 0:64079f49da67 184 current_col=0;
brianeason92 0:64079f49da67 185 current_hf = 1;
brianeason92 0:64079f49da67 186 current_wf = 1;
brianeason92 0:64079f49da67 187 set_font(FONT_7X8); // initial font
brianeason92 0:64079f49da67 188 }
brianeason92 0:64079f49da67 189
brianeason92 0:64079f49da67 190 //**************************************************************************
brianeason92 0:64079f49da67 191 int uLCD_4DGL :: version() // get API version
brianeason92 0:64079f49da67 192 {
brianeason92 0:64079f49da67 193
brianeason92 0:64079f49da67 194 char command[2] = "";
brianeason92 0:64079f49da67 195 command[0] = '\x00';
brianeason92 0:64079f49da67 196 command[1] = VERSION;
brianeason92 0:64079f49da67 197 return readVERSION(command, 2);
brianeason92 0:64079f49da67 198 }
brianeason92 0:64079f49da67 199
brianeason92 0:64079f49da67 200 //**************************************************************************
brianeason92 0:64079f49da67 201 void uLCD_4DGL :: baudrate(int speed) // set screen baud rate
brianeason92 0:64079f49da67 202 {
brianeason92 0:64079f49da67 203 char command[3]= "";
brianeason92 0:64079f49da67 204 writeBYTE(0x00);
brianeason92 0:64079f49da67 205 command[0] = BAUDRATE;
brianeason92 0:64079f49da67 206 command[1] = 0;
brianeason92 0:64079f49da67 207 int newbaud = BAUD_9600;
brianeason92 0:64079f49da67 208 switch (speed) {
brianeason92 0:64079f49da67 209 case 110 :
brianeason92 0:64079f49da67 210 newbaud = BAUD_110;
brianeason92 0:64079f49da67 211 break;
brianeason92 0:64079f49da67 212 case 300 :
brianeason92 0:64079f49da67 213 newbaud = BAUD_300;
brianeason92 0:64079f49da67 214 break;
brianeason92 0:64079f49da67 215 case 600 :
brianeason92 0:64079f49da67 216 newbaud = BAUD_600;
brianeason92 0:64079f49da67 217 break;
brianeason92 0:64079f49da67 218 case 1200 :
brianeason92 0:64079f49da67 219 newbaud = BAUD_1200;
brianeason92 0:64079f49da67 220 break;
brianeason92 0:64079f49da67 221 case 2400 :
brianeason92 0:64079f49da67 222 newbaud = BAUD_2400;
brianeason92 0:64079f49da67 223 break;
brianeason92 0:64079f49da67 224 case 4800 :
brianeason92 0:64079f49da67 225 newbaud = BAUD_4800;
brianeason92 0:64079f49da67 226 break;
brianeason92 0:64079f49da67 227 case 9600 :
brianeason92 0:64079f49da67 228 newbaud = BAUD_9600;
brianeason92 0:64079f49da67 229 break;
brianeason92 0:64079f49da67 230 case 14400 :
brianeason92 0:64079f49da67 231 newbaud = BAUD_14400;
brianeason92 0:64079f49da67 232 break;
brianeason92 0:64079f49da67 233 case 19200 :
brianeason92 0:64079f49da67 234 newbaud = BAUD_19200;
brianeason92 0:64079f49da67 235 break;
brianeason92 0:64079f49da67 236 case 31250 :
brianeason92 0:64079f49da67 237 newbaud = BAUD_31250;
brianeason92 0:64079f49da67 238 break;
brianeason92 0:64079f49da67 239 case 38400 :
brianeason92 0:64079f49da67 240 newbaud = BAUD_38400;
brianeason92 0:64079f49da67 241 break;
brianeason92 0:64079f49da67 242 case 56000 :
brianeason92 0:64079f49da67 243 newbaud = BAUD_56000;
brianeason92 0:64079f49da67 244 break;
brianeason92 0:64079f49da67 245 case 57600 :
brianeason92 0:64079f49da67 246 newbaud = BAUD_57600;
brianeason92 0:64079f49da67 247 break;
brianeason92 0:64079f49da67 248 case 115200 :
brianeason92 0:64079f49da67 249 newbaud = BAUD_115200;
brianeason92 0:64079f49da67 250 break;
brianeason92 0:64079f49da67 251 case 128000 :
brianeason92 0:64079f49da67 252 newbaud = BAUD_128000;
brianeason92 0:64079f49da67 253 break;
brianeason92 0:64079f49da67 254 case 256000 :
brianeason92 0:64079f49da67 255 newbaud = BAUD_256000;
brianeason92 0:64079f49da67 256 break;
brianeason92 0:64079f49da67 257 case 300000 :
brianeason92 0:64079f49da67 258 newbaud = BAUD_300000;
brianeason92 0:64079f49da67 259 speed = 272727;
brianeason92 0:64079f49da67 260 break;
brianeason92 0:64079f49da67 261 case 375000 :
brianeason92 0:64079f49da67 262 newbaud = BAUD_375000;
brianeason92 0:64079f49da67 263 speed = 333333;
brianeason92 0:64079f49da67 264 break;
brianeason92 0:64079f49da67 265 case 500000 :
brianeason92 0:64079f49da67 266 newbaud = BAUD_500000;
brianeason92 0:64079f49da67 267 speed = 428571;
brianeason92 0:64079f49da67 268 break;
brianeason92 0:64079f49da67 269 case 600000 :
brianeason92 0:64079f49da67 270 newbaud = BAUD_600000;
brianeason92 0:64079f49da67 271 break;
brianeason92 0:64079f49da67 272 case 750000 : //rates over 600000 are not documented, but seem to work
brianeason92 0:64079f49da67 273 newbaud = BAUD_750000;
brianeason92 0:64079f49da67 274 break;
brianeason92 0:64079f49da67 275 case 1000000 :
brianeason92 0:64079f49da67 276 newbaud = BAUD_1000000;
brianeason92 0:64079f49da67 277 break;
brianeason92 0:64079f49da67 278 case 1500000 :
brianeason92 0:64079f49da67 279 newbaud = BAUD_1500000;
brianeason92 0:64079f49da67 280 break;
brianeason92 0:64079f49da67 281 case 3000000 :
brianeason92 0:64079f49da67 282 newbaud = BAUD_3000000;
brianeason92 0:64079f49da67 283 break;
brianeason92 0:64079f49da67 284 default :
brianeason92 0:64079f49da67 285 newbaud = BAUD_9600;
brianeason92 0:64079f49da67 286 speed = 9600;
brianeason92 0:64079f49da67 287 break;
brianeason92 0:64079f49da67 288 }
brianeason92 0:64079f49da67 289
brianeason92 0:64079f49da67 290 int i, resp = 0;
brianeason92 0:64079f49da67 291
brianeason92 0:64079f49da67 292 freeBUFFER();
brianeason92 0:64079f49da67 293 command[1] = char(newbaud >>8);
brianeason92 0:64079f49da67 294 command[2] = char(newbaud % 256);
brianeason92 0:64079f49da67 295 wait_ms(1);
brianeason92 0:64079f49da67 296 for (i = 0; i <3; i++) writeBYTEfast(command[i]); // send command to serial port
brianeason92 0:64079f49da67 297 for (i = 0; i<10; i++) wait_ms(1);
brianeason92 0:64079f49da67 298 //dont change baud until all characters get sent out
brianeason92 0:64079f49da67 299 _cmd.baud(speed); // set mbed to same speed
brianeason92 0:64079f49da67 300 i=0;
brianeason92 0:64079f49da67 301 while ((!_cmd.readable()) && (i<25000)) {
brianeason92 0:64079f49da67 302 wait_ms(TEMPO); // wait for screen answer - comes 100ms after change
brianeason92 0:64079f49da67 303 i++; //timeout if ack character missed by baud change
brianeason92 0:64079f49da67 304 }
brianeason92 0:64079f49da67 305 if (_cmd.readable()) resp = _cmd.getc(); // read response if any
brianeason92 0:64079f49da67 306 switch (resp) {
brianeason92 0:64079f49da67 307 case ACK : // if OK return 1
brianeason92 0:64079f49da67 308 resp = 1;
brianeason92 0:64079f49da67 309 break;
brianeason92 0:64079f49da67 310 case NAK : // if NOK return -1
brianeason92 0:64079f49da67 311 resp = -1;
brianeason92 0:64079f49da67 312 break;
brianeason92 0:64079f49da67 313 default :
brianeason92 0:64079f49da67 314 resp = 0; // else return 0
brianeason92 0:64079f49da67 315 break;
brianeason92 0:64079f49da67 316 }
brianeason92 0:64079f49da67 317 }
brianeason92 0:64079f49da67 318
brianeason92 0:64079f49da67 319 //******************************************************************************************************
brianeason92 0:64079f49da67 320 int uLCD_4DGL :: readVERSION(char *command, int number) // read screen info and populate data
brianeason92 0:64079f49da67 321 {
brianeason92 0:64079f49da67 322
brianeason92 0:64079f49da67 323 int i, temp = 0, resp = 0;
brianeason92 0:64079f49da67 324 char response[5] = "";
brianeason92 0:64079f49da67 325
brianeason92 0:64079f49da67 326 freeBUFFER();
brianeason92 0:64079f49da67 327
brianeason92 0:64079f49da67 328 for (i = 0; i < number; i++) writeBYTE(command[i]); // send all chars to serial port
brianeason92 0:64079f49da67 329
brianeason92 0:64079f49da67 330 while (!_cmd.readable()) wait_ms(TEMPO); // wait for screen answer
brianeason92 0:64079f49da67 331
brianeason92 0:64079f49da67 332 while (_cmd.readable() && resp < ARRAY_SIZE(response)) {
brianeason92 0:64079f49da67 333 temp = _cmd.getc();
brianeason92 0:64079f49da67 334 response[resp++] = (char)temp;
brianeason92 0:64079f49da67 335 }
brianeason92 0:64079f49da67 336 switch (resp) {
brianeason92 0:64079f49da67 337 case 2 : // if OK populate data and return 1
brianeason92 0:64079f49da67 338 revision = response[0]<<8 + response[1];
brianeason92 0:64079f49da67 339 resp = 1;
brianeason92 0:64079f49da67 340 break;
brianeason92 0:64079f49da67 341 default :
brianeason92 0:64079f49da67 342 resp = 0; // else return 0
brianeason92 0:64079f49da67 343 break;
brianeason92 0:64079f49da67 344 }
brianeason92 0:64079f49da67 345 return resp;
brianeason92 0:64079f49da67 346 }
brianeason92 0:64079f49da67 347
brianeason92 0:64079f49da67 348 //****************************************************************************************************
brianeason92 0:64079f49da67 349 void uLCD_4DGL :: background_color(int color) // set screen background color
brianeason92 0:64079f49da67 350 {
brianeason92 0:64079f49da67 351 char command[3]= ""; // input color is in 24bits like 0xRRGGBB
brianeason92 0:64079f49da67 352
brianeason92 0:64079f49da67 353 command[0] = BCKGDCOLOR;
brianeason92 0:64079f49da67 354
brianeason92 0:64079f49da67 355 int red5 = (color >> (16 + 3)) & 0x1F; // get red on 5 bits
brianeason92 0:64079f49da67 356 int green6 = (color >> (8 + 2)) & 0x3F; // get green on 6 bits
brianeason92 0:64079f49da67 357 int blue5 = (color >> (0 + 3)) & 0x1F; // get blue on 5 bits
brianeason92 0:64079f49da67 358
brianeason92 0:64079f49da67 359 command[1] = ((red5 << 3) + (green6 >> 3)) & 0xFF; // first part of 16 bits color
brianeason92 0:64079f49da67 360 command[2] = ((green6 << 5) + (blue5 >> 0)) & 0xFF; // second part of 16 bits color
brianeason92 0:64079f49da67 361
brianeason92 0:64079f49da67 362 writeCOMMAND(command, 3);
brianeason92 0:64079f49da67 363 }
brianeason92 0:64079f49da67 364
brianeason92 0:64079f49da67 365 //****************************************************************************************************
brianeason92 0:64079f49da67 366 void uLCD_4DGL :: textbackground_color(int color) // set screen background color
brianeason92 0:64079f49da67 367 {
brianeason92 0:64079f49da67 368 char command[3]= ""; // input color is in 24bits like 0xRRGGBB
brianeason92 0:64079f49da67 369
brianeason92 0:64079f49da67 370 command[0] = TXTBCKGDCOLOR;
brianeason92 0:64079f49da67 371
brianeason92 0:64079f49da67 372 int red5 = (color >> (16 + 3)) & 0x1F; // get red on 5 bits
brianeason92 0:64079f49da67 373 int green6 = (color >> (8 + 2)) & 0x3F; // get green on 6 bits
brianeason92 0:64079f49da67 374 int blue5 = (color >> (0 + 3)) & 0x1F; // get blue on 5 bits
brianeason92 0:64079f49da67 375
brianeason92 0:64079f49da67 376 command[1] = ((red5 << 3) + (green6 >> 3)) & 0xFF; // first part of 16 bits color
brianeason92 0:64079f49da67 377 command[2] = ((green6 << 5) + (blue5 >> 0)) & 0xFF; // second part of 16 bits color
brianeason92 0:64079f49da67 378
brianeason92 0:64079f49da67 379 writeCOMMAND(command, 3);
brianeason92 0:64079f49da67 380 }
brianeason92 0:64079f49da67 381
brianeason92 0:64079f49da67 382 //****************************************************************************************************
brianeason92 0:64079f49da67 383 void uLCD_4DGL :: display_control(char mode) // set screen mode to value
brianeason92 0:64079f49da67 384 {
brianeason92 0:64079f49da67 385 char command[3]= "";
brianeason92 0:64079f49da67 386
brianeason92 0:64079f49da67 387 command[0] = DISPCONTROL;
brianeason92 0:64079f49da67 388 command[1] = 0;
brianeason92 0:64079f49da67 389 command[2] = mode;
brianeason92 0:64079f49da67 390
brianeason92 0:64079f49da67 391 if (mode == ORIENTATION) {
brianeason92 0:64079f49da67 392 switch (mode) {
brianeason92 0:64079f49da67 393 case LANDSCAPE :
brianeason92 0:64079f49da67 394 current_orientation = IS_LANDSCAPE;
brianeason92 0:64079f49da67 395 break;
brianeason92 0:64079f49da67 396 case LANDSCAPE_R :
brianeason92 0:64079f49da67 397 current_orientation = IS_LANDSCAPE;
brianeason92 0:64079f49da67 398 break;
brianeason92 0:64079f49da67 399 case PORTRAIT :
brianeason92 0:64079f49da67 400 current_orientation = IS_PORTRAIT;
brianeason92 0:64079f49da67 401 break;
brianeason92 0:64079f49da67 402 case PORTRAIT_R :
brianeason92 0:64079f49da67 403 current_orientation = IS_PORTRAIT;
brianeason92 0:64079f49da67 404 break;
brianeason92 0:64079f49da67 405 }
brianeason92 0:64079f49da67 406 }
brianeason92 0:64079f49da67 407 writeCOMMAND(command, 3);
brianeason92 0:64079f49da67 408 set_font(current_font);
brianeason92 0:64079f49da67 409 }
brianeason92 0:64079f49da67 410 //****************************************************************************************************
brianeason92 0:64079f49da67 411 void uLCD_4DGL :: display_power(char mode) // set screen mode to value
brianeason92 0:64079f49da67 412 {
brianeason92 0:64079f49da67 413 char command[3]= "";
brianeason92 0:64079f49da67 414
brianeason92 0:64079f49da67 415 command[0] = DISPPOWER;
brianeason92 0:64079f49da67 416 command[1] = 0;
brianeason92 0:64079f49da67 417 command[2] = mode;
brianeason92 0:64079f49da67 418 writeCOMMAND(command, 3);
brianeason92 0:64079f49da67 419 }
brianeason92 0:64079f49da67 420 //****************************************************************************************************
brianeason92 0:64079f49da67 421 void uLCD_4DGL :: set_volume(char value) // set sound volume to value
brianeason92 0:64079f49da67 422 {
brianeason92 0:64079f49da67 423 char command[2]= "";
brianeason92 0:64079f49da67 424
brianeason92 0:64079f49da67 425 command[0] = SETVOLUME;
brianeason92 0:64079f49da67 426 command[1] = value;
brianeason92 0:64079f49da67 427
brianeason92 0:64079f49da67 428 writeCOMMAND(command, 2);
brianeason92 0:64079f49da67 429 }
brianeason92 0:64079f49da67 430
brianeason92 0:64079f49da67 431
brianeason92 0:64079f49da67 432 //******************************************************************************************************
brianeason92 0:64079f49da67 433 int uLCD_4DGL :: getSTATUS(char *command, int number) // read screen info and populate data
brianeason92 0:64079f49da67 434 {
brianeason92 0:64079f49da67 435
brianeason92 0:64079f49da67 436 #if DEBUGMODE
brianeason92 0:64079f49da67 437 pc.printf("\n");
brianeason92 0:64079f49da67 438 pc.printf("New COMMAND : 0x%02X\n", command[0]);
brianeason92 0:64079f49da67 439 #endif
brianeason92 0:64079f49da67 440
brianeason92 0:64079f49da67 441 int i, temp = 0, resp = 0;
brianeason92 0:64079f49da67 442 char response[5] = "";
brianeason92 0:64079f49da67 443
brianeason92 0:64079f49da67 444 freeBUFFER();
brianeason92 0:64079f49da67 445
brianeason92 0:64079f49da67 446 for (i = 0; i < number; i++) writeBYTE(command[i]); // send all chars to serial port
brianeason92 0:64079f49da67 447
brianeason92 0:64079f49da67 448 while (!_cmd.readable()) wait_ms(TEMPO); // wait for screen answer
brianeason92 0:64079f49da67 449
brianeason92 0:64079f49da67 450 while (_cmd.readable() && resp < ARRAY_SIZE(response)) {
brianeason92 0:64079f49da67 451 temp = _cmd.getc();
brianeason92 0:64079f49da67 452 response[resp++] = (char)temp;
brianeason92 0:64079f49da67 453 }
brianeason92 0:64079f49da67 454 switch (resp) {
brianeason92 0:64079f49da67 455 case 4 :
brianeason92 0:64079f49da67 456 resp = (int)response[1]; // if OK populate data
brianeason92 0:64079f49da67 457 break;
brianeason92 0:64079f49da67 458 default :
brianeason92 0:64079f49da67 459 resp = -1; // else return 0
brianeason92 0:64079f49da67 460 break;
brianeason92 0:64079f49da67 461 }
brianeason92 0:64079f49da67 462
brianeason92 0:64079f49da67 463 #if DEBUGMODE
brianeason92 0:64079f49da67 464 pc.printf(" Answer received : %d\n", resp);
brianeason92 0:64079f49da67 465 #endif
brianeason92 0:64079f49da67 466
brianeason92 0:64079f49da67 467 return resp;
brianeason92 0:64079f49da67 468 }
brianeason92 0:64079f49da67 469