Rihards Balass / 4DGL-mbed-32PTU
Committer:
CaptainR
Date:
Thu Sep 08 13:40:36 2016 +0000
Revision:
1:e2337e2653e1
Parent:
0:a5ef6bc3c2e8
Child:
2:81eaaa491a02
a little cleanup;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
CaptainR 0:a5ef6bc3c2e8 1 //
CaptainR 1:e2337e2653e1 2 // TFT_4DGL is a class to drive 4D Systems TFT touch screens with Picaso processor
CaptainR 0:a5ef6bc3c2e8 3 //
CaptainR 1:e2337e2653e1 4 // Copyright (C) <2016> Rihards Balass
CaptainR 0:a5ef6bc3c2e8 5 //
CaptainR 0:a5ef6bc3c2e8 6
CaptainR 0:a5ef6bc3c2e8 7 #include "mbed.h"
CaptainR 0:a5ef6bc3c2e8 8 #include "Picaso_4DGL-32PTU.h"
CaptainR 0:a5ef6bc3c2e8 9
CaptainR 0:a5ef6bc3c2e8 10 //Serial pc(USBTX,USBRX);
CaptainR 0:a5ef6bc3c2e8 11 DigitalOut led1(LED1), led2(LED2);
CaptainR 0:a5ef6bc3c2e8 12 #define SHORT_WAIT 500
CaptainR 0:a5ef6bc3c2e8 13 #define LONG_WAIT 2000
CaptainR 0:a5ef6bc3c2e8 14
CaptainR 0:a5ef6bc3c2e8 15 //******************************************************************************************************
CaptainR 0:a5ef6bc3c2e8 16 TFT_4DGL :: TFT_4DGL(PinName tx, PinName rx, PinName rst) : pc(USBTX, USBRX), _cmd(tx, rx), _rst(rst) { // Constructor
CaptainR 0:a5ef6bc3c2e8 17
CaptainR 0:a5ef6bc3c2e8 18 responseBuild(10, '0');
CaptainR 0:a5ef6bc3c2e8 19
CaptainR 0:a5ef6bc3c2e8 20 #if DEBUGMODE
CaptainR 0:a5ef6bc3c2e8 21 pc.baud(115200);
CaptainR 0:a5ef6bc3c2e8 22
CaptainR 0:a5ef6bc3c2e8 23 pc.printf("\n\n\n");
CaptainR 0:a5ef6bc3c2e8 24 pc.printf("********************\n\r");
CaptainR 0:a5ef6bc3c2e8 25 pc.printf("TFT_4DGL CONSTRUCTOR\n\r");
CaptainR 0:a5ef6bc3c2e8 26 pc.printf("********************\n\r");
CaptainR 0:a5ef6bc3c2e8 27 #endif
CaptainR 0:a5ef6bc3c2e8 28
CaptainR 0:a5ef6bc3c2e8 29 _rst = 1; // put RESET pin to high to start TFT screen
CaptainR 0:a5ef6bc3c2e8 30 //wait_ms(10000);
CaptainR 0:a5ef6bc3c2e8 31 //reset();
CaptainR 0:a5ef6bc3c2e8 32 #if DEBUGMODE
CaptainR 0:a5ef6bc3c2e8 33 pc.printf("Wait 3 seconds for startup...\n\r");
CaptainR 0:a5ef6bc3c2e8 34 wait_ms(1000);
CaptainR 0:a5ef6bc3c2e8 35 pc.printf("2\n\r");
CaptainR 0:a5ef6bc3c2e8 36 wait_ms(1000);
CaptainR 0:a5ef6bc3c2e8 37 pc.printf("1\n\r");
CaptainR 0:a5ef6bc3c2e8 38 wait_ms(1000);
CaptainR 0:a5ef6bc3c2e8 39 #else
CaptainR 0:a5ef6bc3c2e8 40 wait_ms(3000);
CaptainR 0:a5ef6bc3c2e8 41 #endif
CaptainR 0:a5ef6bc3c2e8 42 //autobaud(); // send autobaud command
CaptainR 0:a5ef6bc3c2e8 43 #if DEBUGMODE
CaptainR 0:a5ef6bc3c2e8 44 pc.printf("set baudrate to 9600...\n\r");
CaptainR 0:a5ef6bc3c2e8 45 #endif
CaptainR 0:a5ef6bc3c2e8 46 baudrate(9600); // set the initial baudrate to 256kbps - fastest supported by uLCD-32PT
CaptainR 0:a5ef6bc3c2e8 47 #if DEBUGMODE
CaptainR 0:a5ef6bc3c2e8 48 pc.printf("clear screen...\n\r");
CaptainR 0:a5ef6bc3c2e8 49 #endif
CaptainR 0:a5ef6bc3c2e8 50 cls(); // clear screen
CaptainR 0:a5ef6bc3c2e8 51 screenOrientation(1);
CaptainR 0:a5ef6bc3c2e8 52 setFont(3);
CaptainR 0:a5ef6bc3c2e8 53
CaptainR 0:a5ef6bc3c2e8 54 #if DEBUGMODE
CaptainR 0:a5ef6bc3c2e8 55 pc.printf("Start Demo...\n\r");
CaptainR 0:a5ef6bc3c2e8 56 wait_ms(1000);
CaptainR 0:a5ef6bc3c2e8 57 //mainDemo();
CaptainR 0:a5ef6bc3c2e8 58 //textDemo();
CaptainR 0:a5ef6bc3c2e8 59 graphicsDemo();
CaptainR 0:a5ef6bc3c2e8 60 #endif
CaptainR 0:a5ef6bc3c2e8 61
CaptainR 0:a5ef6bc3c2e8 62 }
CaptainR 0:a5ef6bc3c2e8 63
CaptainR 0:a5ef6bc3c2e8 64 //******************************************************************************************************
CaptainR 0:a5ef6bc3c2e8 65 void TFT_4DGL :: responseBuild(int size, char c) {
CaptainR 0:a5ef6bc3c2e8 66
CaptainR 0:a5ef6bc3c2e8 67 response[size] = c;
CaptainR 0:a5ef6bc3c2e8 68 respLen = 0;
CaptainR 0:a5ef6bc3c2e8 69 }
CaptainR 0:a5ef6bc3c2e8 70
CaptainR 0:a5ef6bc3c2e8 71 //******************************************************************************************************
CaptainR 0:a5ef6bc3c2e8 72 void TFT_4DGL :: writeBYTE(char c) { // send a BYTE command to screen
CaptainR 0:a5ef6bc3c2e8 73
CaptainR 0:a5ef6bc3c2e8 74 _cmd.putc(c);
CaptainR 0:a5ef6bc3c2e8 75
CaptainR 0:a5ef6bc3c2e8 76 #if DEBUGMODE
CaptainR 0:a5ef6bc3c2e8 77 pc.printf(" Char sent : 0x%02X ",c);
CaptainR 0:a5ef6bc3c2e8 78 pc.putc(c);
CaptainR 0:a5ef6bc3c2e8 79 pc.printf(" \n\r");
CaptainR 0:a5ef6bc3c2e8 80 #endif
CaptainR 0:a5ef6bc3c2e8 81
CaptainR 0:a5ef6bc3c2e8 82 }
CaptainR 0:a5ef6bc3c2e8 83
CaptainR 0:a5ef6bc3c2e8 84 //******************************************************************************************************
CaptainR 0:a5ef6bc3c2e8 85 void TFT_4DGL :: freeBUFFER(void) { // Clear serial buffer before writing command
CaptainR 0:a5ef6bc3c2e8 86
CaptainR 0:a5ef6bc3c2e8 87 while (_cmd.readable()) _cmd.getc(); // clear buffer garbage
CaptainR 0:a5ef6bc3c2e8 88 }
CaptainR 0:a5ef6bc3c2e8 89
CaptainR 0:a5ef6bc3c2e8 90 //******************************************************************************************************
CaptainR 0:a5ef6bc3c2e8 91 void TFT_4DGL :: writeCOMMAND(char *command, int number) { // send several BYTES making a command and return an answer
CaptainR 0:a5ef6bc3c2e8 92
CaptainR 0:a5ef6bc3c2e8 93 #if DEBUGMODE
CaptainR 0:a5ef6bc3c2e8 94 pc.printf("\n\r");
CaptainR 0:a5ef6bc3c2e8 95 pc.printf("New COMMAND : 0x%02X%02X\n\r", command[0], command[1]);
CaptainR 0:a5ef6bc3c2e8 96 #endif
CaptainR 0:a5ef6bc3c2e8 97 int i;
CaptainR 0:a5ef6bc3c2e8 98 freeBUFFER();
CaptainR 0:a5ef6bc3c2e8 99
CaptainR 0:a5ef6bc3c2e8 100 for (i = 0; i < number; i++) writeBYTE(command[i]); // send command to serial port
CaptainR 0:a5ef6bc3c2e8 101
CaptainR 0:a5ef6bc3c2e8 102 getResponse();
CaptainR 0:a5ef6bc3c2e8 103 }
CaptainR 0:a5ef6bc3c2e8 104
CaptainR 0:a5ef6bc3c2e8 105 //**************************************************************************
CaptainR 0:a5ef6bc3c2e8 106 void TFT_4DGL :: reset() { // Reset Screen
CaptainR 0:a5ef6bc3c2e8 107
CaptainR 0:a5ef6bc3c2e8 108 _rst = 0; // put RESET pin to low
CaptainR 0:a5ef6bc3c2e8 109 wait_ms(TEMPO); // wait a few milliseconds for command reception
CaptainR 0:a5ef6bc3c2e8 110 _rst = 1; // put RESET back to high
CaptainR 0:a5ef6bc3c2e8 111 wait(3); // wait 3s for screen to restart
CaptainR 0:a5ef6bc3c2e8 112
CaptainR 0:a5ef6bc3c2e8 113 freeBUFFER(); // clean buffer from possible garbage
CaptainR 0:a5ef6bc3c2e8 114 }
CaptainR 0:a5ef6bc3c2e8 115
CaptainR 0:a5ef6bc3c2e8 116 //**************************************************************************
CaptainR 0:a5ef6bc3c2e8 117 void TFT_4DGL :: baudrate(long speed) { // set screen baud rate
CaptainR 0:a5ef6bc3c2e8 118
CaptainR 0:a5ef6bc3c2e8 119 char command[4]= "";
CaptainR 0:a5ef6bc3c2e8 120 command[0] = BAUDRATE_MSB;
CaptainR 0:a5ef6bc3c2e8 121 command[1] = BAUDRATE_LSB;
CaptainR 0:a5ef6bc3c2e8 122 switch (speed) {
CaptainR 0:a5ef6bc3c2e8 123 case 300 :
CaptainR 0:a5ef6bc3c2e8 124 command[2] = BAUD_300_MSB;
CaptainR 0:a5ef6bc3c2e8 125 command[3] = BAUD_300_LSB;
CaptainR 0:a5ef6bc3c2e8 126 break;
CaptainR 0:a5ef6bc3c2e8 127 case 600 :
CaptainR 0:a5ef6bc3c2e8 128 command[2] = BAUD_600_MSB;
CaptainR 0:a5ef6bc3c2e8 129 command[3] = BAUD_600_LSB;
CaptainR 0:a5ef6bc3c2e8 130 break;
CaptainR 0:a5ef6bc3c2e8 131 case 1200 :
CaptainR 0:a5ef6bc3c2e8 132 command[2] = BAUD_1200_MSB;
CaptainR 0:a5ef6bc3c2e8 133 command[3] = BAUD_1200_LSB;
CaptainR 0:a5ef6bc3c2e8 134 break;
CaptainR 0:a5ef6bc3c2e8 135 case 2400 :
CaptainR 0:a5ef6bc3c2e8 136 command[2] = BAUD_2400_MSB;
CaptainR 0:a5ef6bc3c2e8 137 command[3] = BAUD_2400_LSB;
CaptainR 0:a5ef6bc3c2e8 138 break;
CaptainR 0:a5ef6bc3c2e8 139 case 4800 :
CaptainR 0:a5ef6bc3c2e8 140 command[2] = BAUD_4800_MSB;
CaptainR 0:a5ef6bc3c2e8 141 command[3] = BAUD_4800_LSB;
CaptainR 0:a5ef6bc3c2e8 142 break;
CaptainR 0:a5ef6bc3c2e8 143 case 9600 :
CaptainR 0:a5ef6bc3c2e8 144 command[2] = BAUD_9600_MSB;
CaptainR 0:a5ef6bc3c2e8 145 command[3] = BAUD_9600_LSB;
CaptainR 0:a5ef6bc3c2e8 146 break;
CaptainR 0:a5ef6bc3c2e8 147 case 14400 :
CaptainR 0:a5ef6bc3c2e8 148 command[2] = BAUD_14400_MSB;
CaptainR 0:a5ef6bc3c2e8 149 command[3] = BAUD_14400_LSB;
CaptainR 0:a5ef6bc3c2e8 150 break;
CaptainR 0:a5ef6bc3c2e8 151 case 19200 :
CaptainR 0:a5ef6bc3c2e8 152 command[2] = BAUD_19200_MSB;
CaptainR 0:a5ef6bc3c2e8 153 command[3] = BAUD_19200_LSB;
CaptainR 0:a5ef6bc3c2e8 154 break;
CaptainR 0:a5ef6bc3c2e8 155 case 38400 :
CaptainR 0:a5ef6bc3c2e8 156 command[2] = BAUD_38400_MSB;
CaptainR 0:a5ef6bc3c2e8 157 command[3] = BAUD_38400_LSB;
CaptainR 0:a5ef6bc3c2e8 158 break;
CaptainR 0:a5ef6bc3c2e8 159 case 56000 :
CaptainR 0:a5ef6bc3c2e8 160 command[2] = BAUD_56000_MSB;
CaptainR 0:a5ef6bc3c2e8 161 command[3] = BAUD_56000_LSB;
CaptainR 0:a5ef6bc3c2e8 162 break;
CaptainR 0:a5ef6bc3c2e8 163 case 57600 :
CaptainR 0:a5ef6bc3c2e8 164 command[2] = BAUD_57600_MSB;
CaptainR 0:a5ef6bc3c2e8 165 command[3] = BAUD_57600_LSB;
CaptainR 0:a5ef6bc3c2e8 166 break;
CaptainR 0:a5ef6bc3c2e8 167 case 115200 :
CaptainR 0:a5ef6bc3c2e8 168 command[2] = BAUD_115200_MSB;
CaptainR 0:a5ef6bc3c2e8 169 command[3] = BAUD_115200_LSB;
CaptainR 0:a5ef6bc3c2e8 170 break;
CaptainR 0:a5ef6bc3c2e8 171 case 128000 :
CaptainR 0:a5ef6bc3c2e8 172 command[2] = BAUD_128000_MSB;
CaptainR 0:a5ef6bc3c2e8 173 command[3] = BAUD_128000_LSB;
CaptainR 0:a5ef6bc3c2e8 174 break;
CaptainR 0:a5ef6bc3c2e8 175 case 256000 :
CaptainR 0:a5ef6bc3c2e8 176 command[2] = BAUD_256000_MSB;
CaptainR 0:a5ef6bc3c2e8 177 command[3] = BAUD_256000_LSB;
CaptainR 0:a5ef6bc3c2e8 178 break;
CaptainR 0:a5ef6bc3c2e8 179 case 300000 :
CaptainR 0:a5ef6bc3c2e8 180 command[2] = BAUD_300000_MSB;
CaptainR 0:a5ef6bc3c2e8 181 command[3] = BAUD_300000_LSB;
CaptainR 0:a5ef6bc3c2e8 182 break;
CaptainR 0:a5ef6bc3c2e8 183 case 375000 :
CaptainR 0:a5ef6bc3c2e8 184 command[2] = BAUD_375000_MSB;
CaptainR 0:a5ef6bc3c2e8 185 command[3] = BAUD_375000_LSB;
CaptainR 0:a5ef6bc3c2e8 186 break;
CaptainR 0:a5ef6bc3c2e8 187 case 500000 :
CaptainR 0:a5ef6bc3c2e8 188 command[2] = BAUD_500000_MSB;
CaptainR 0:a5ef6bc3c2e8 189 command[3] = BAUD_500000_LSB;
CaptainR 0:a5ef6bc3c2e8 190 break;
CaptainR 0:a5ef6bc3c2e8 191 case 600000 :
CaptainR 0:a5ef6bc3c2e8 192 command[2] = BAUD_600000_MSB;
CaptainR 0:a5ef6bc3c2e8 193 command[3] = BAUD_600000_LSB;
CaptainR 0:a5ef6bc3c2e8 194 break;
CaptainR 0:a5ef6bc3c2e8 195 default :
CaptainR 0:a5ef6bc3c2e8 196 command[2] = BAUD_9600_MSB;
CaptainR 0:a5ef6bc3c2e8 197 command[3] = BAUD_9600_LSB;
CaptainR 0:a5ef6bc3c2e8 198 speed = 9600;
CaptainR 0:a5ef6bc3c2e8 199 break;
CaptainR 0:a5ef6bc3c2e8 200 }
CaptainR 0:a5ef6bc3c2e8 201
CaptainR 0:a5ef6bc3c2e8 202 #if DEBUGMODE
CaptainR 0:a5ef6bc3c2e8 203 pc.printf("\n\r");
CaptainR 0:a5ef6bc3c2e8 204 pc.printf("New COMMAND : 0x%02X%02X\n\r", command[0], command[1]);
CaptainR 0:a5ef6bc3c2e8 205 #endif
CaptainR 0:a5ef6bc3c2e8 206
CaptainR 0:a5ef6bc3c2e8 207 int i;
CaptainR 0:a5ef6bc3c2e8 208 freeBUFFER();
CaptainR 0:a5ef6bc3c2e8 209
CaptainR 0:a5ef6bc3c2e8 210 //Change baudrates - as instructed by 4DGL
CaptainR 0:a5ef6bc3c2e8 211 if (speed == 128000) speed = 133928;
CaptainR 0:a5ef6bc3c2e8 212 if (speed == 256000) speed = 282353;
CaptainR 0:a5ef6bc3c2e8 213 if (speed == 300000) speed = 312500;
CaptainR 0:a5ef6bc3c2e8 214 if (speed == 375000) speed = 401785;
CaptainR 0:a5ef6bc3c2e8 215 if (speed == 500000) speed = 562500;
CaptainR 0:a5ef6bc3c2e8 216 if (speed == 600000) speed = 703125;
CaptainR 0:a5ef6bc3c2e8 217
CaptainR 0:a5ef6bc3c2e8 218 for (i = 0; i <4; i++) writeBYTE(command[i]); // send command to serial port
CaptainR 0:a5ef6bc3c2e8 219 _cmd.baud(speed); // set mbed to same speed
CaptainR 0:a5ef6bc3c2e8 220
CaptainR 0:a5ef6bc3c2e8 221 getResponse();
CaptainR 0:a5ef6bc3c2e8 222 }
CaptainR 0:a5ef6bc3c2e8 223
CaptainR 0:a5ef6bc3c2e8 224 //**************************************************************************
CaptainR 0:a5ef6bc3c2e8 225 void TFT_4DGL :: getResponse() {
CaptainR 0:a5ef6bc3c2e8 226
CaptainR 0:a5ef6bc3c2e8 227 while (!_cmd.readable()) wait_ms(TEMPO); // wait for screen answer
CaptainR 0:a5ef6bc3c2e8 228
CaptainR 0:a5ef6bc3c2e8 229 while (_cmd.readable()) {
CaptainR 0:a5ef6bc3c2e8 230 resp = _cmd.getc(); // read response if any
CaptainR 0:a5ef6bc3c2e8 231 }
CaptainR 0:a5ef6bc3c2e8 232 switch (resp) {
CaptainR 0:a5ef6bc3c2e8 233 case ACK :
CaptainR 0:a5ef6bc3c2e8 234 resp = 1;
CaptainR 0:a5ef6bc3c2e8 235 break;
CaptainR 0:a5ef6bc3c2e8 236 case NACK :
CaptainR 0:a5ef6bc3c2e8 237 resp = -1;
CaptainR 0:a5ef6bc3c2e8 238 break;
CaptainR 0:a5ef6bc3c2e8 239 default :
CaptainR 0:a5ef6bc3c2e8 240 resp = 0;
CaptainR 0:a5ef6bc3c2e8 241 break;
CaptainR 0:a5ef6bc3c2e8 242 }
CaptainR 0:a5ef6bc3c2e8 243 pc.printf("\n\r Answer received : %d\n\r", resp);
CaptainR 0:a5ef6bc3c2e8 244 }
CaptainR 0:a5ef6bc3c2e8 245
CaptainR 0:a5ef6bc3c2e8 246 //**************************************************************************
CaptainR 0:a5ef6bc3c2e8 247 void TFT_4DGL :: screenOrientation(char c) { // select screen orientation
CaptainR 0:a5ef6bc3c2e8 248 char command[4] = "";
CaptainR 0:a5ef6bc3c2e8 249 command[0] = ORIENTATION_MSB;
CaptainR 0:a5ef6bc3c2e8 250 command[1] = ORIENTATION_LSB;
CaptainR 0:a5ef6bc3c2e8 251
CaptainR 0:a5ef6bc3c2e8 252 switch (c) {
CaptainR 0:a5ef6bc3c2e8 253 case 1 :
CaptainR 0:a5ef6bc3c2e8 254 command[2] = LANDSCAPE_MSB;
CaptainR 0:a5ef6bc3c2e8 255 command[3] = LANDSCAPE_LSB;
CaptainR 0:a5ef6bc3c2e8 256 currentOrientation = 1;
CaptainR 0:a5ef6bc3c2e8 257 break;
CaptainR 0:a5ef6bc3c2e8 258 case 2 :
CaptainR 0:a5ef6bc3c2e8 259 command[2] = LANDSCAPE_R_MSB;
CaptainR 0:a5ef6bc3c2e8 260 command[3] = LANDSCAPE_R_LSB;
CaptainR 0:a5ef6bc3c2e8 261 currentOrientation = 2;
CaptainR 0:a5ef6bc3c2e8 262 break;
CaptainR 0:a5ef6bc3c2e8 263 case 3 :
CaptainR 0:a5ef6bc3c2e8 264 command[2] = PORTRAIT_MSB;
CaptainR 0:a5ef6bc3c2e8 265 command[3] = PORTRAIT_LSB;
CaptainR 0:a5ef6bc3c2e8 266 currentOrientation = 3;
CaptainR 0:a5ef6bc3c2e8 267 break;
CaptainR 0:a5ef6bc3c2e8 268 case 4 :
CaptainR 0:a5ef6bc3c2e8 269 command[2] = PORTRAIT_R_MSB;
CaptainR 0:a5ef6bc3c2e8 270 command[3] = PORTRAIT_R_LSB;
CaptainR 0:a5ef6bc3c2e8 271 currentOrientation = 4;
CaptainR 0:a5ef6bc3c2e8 272 break;
CaptainR 0:a5ef6bc3c2e8 273 }
CaptainR 0:a5ef6bc3c2e8 274
CaptainR 0:a5ef6bc3c2e8 275 writeCOMMAND(command, 4);
CaptainR 0:a5ef6bc3c2e8 276 }