ECE 4180 Project for Spring 2020

Dependencies:   mbed mbed-rtos SDFileSystem PinDetect ESP8266NodeMCUInterface

Committer:
kimberlylie99
Date:
Fri May 01 18:43:13 2020 +0000
Revision:
1:5ae291085f75
Parent:
0:b97c07227845
Edit Main.cpp;

Who changed what in which revision?

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