4DGL-uLCD-SE

Dependents:   ECE2035_SUM17_Project Air_Rendezvous_transmitter Transmitter app-board-RTOS-Threads ... more

Committer:
kennyainny
Date:
Fri Jul 14 21:42:47 2017 +0000
Revision:
0:19588ac80c02
no changes;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kennyainny 0:19588ac80c02 1 //
kennyainny 0:19588ac80c02 2 // uLCD_4DGL is a class to drive 4D Systems TFT touch screens
kennyainny 0:19588ac80c02 3 //
kennyainny 0:19588ac80c02 4 // Fork of 4DGL library for 4D Systems LCD displays
kennyainny 0:19588ac80c02 5 // Copyright (C) <2010> Stephane ROCHON <stephane.rochon at free.fr>
kennyainny 0:19588ac80c02 6 // Modifed for Goldelox processor <2013> Jim Hamblen
kennyainny 0:19588ac80c02 7 //
kennyainny 0:19588ac80c02 8 // uLCD_4DGL is free software: you can redistribute it and/or modify
kennyainny 0:19588ac80c02 9 // it under the terms of the GNU General Public License as published by
kennyainny 0:19588ac80c02 10 // the Free Software Foundation, either version 3 of the License, or
kennyainny 0:19588ac80c02 11 // (at your option) any later version.
kennyainny 0:19588ac80c02 12 //
kennyainny 0:19588ac80c02 13 // uLCD_4DGL is distributed in the hope that it will be useful,
kennyainny 0:19588ac80c02 14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
kennyainny 0:19588ac80c02 15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
kennyainny 0:19588ac80c02 16 // GNU General Public License for more details.
kennyainny 0:19588ac80c02 17 //
kennyainny 0:19588ac80c02 18 // You should have received a copy of the GNU General Public License
kennyainny 0:19588ac80c02 19 // along with uLCD_4DGL. If not, see <http://www.gnu.org/licenses/>.
kennyainny 0:19588ac80c02 20
kennyainny 0:19588ac80c02 21 // @author Stephane Rochon
kennyainny 0:19588ac80c02 22
kennyainny 0:19588ac80c02 23 #include "mbed.h"
kennyainny 0:19588ac80c02 24
kennyainny 0:19588ac80c02 25 // Debug Verbose off - SGE commands echoed to USB serial for debugmode=1
kennyainny 0:19588ac80c02 26 #ifndef DEBUGMODE
kennyainny 0:19588ac80c02 27 #define DEBUGMODE 0
kennyainny 0:19588ac80c02 28 #endif
kennyainny 0:19588ac80c02 29
kennyainny 0:19588ac80c02 30 // Common WAIT value in milliseconds between commands
kennyainny 0:19588ac80c02 31 #define TEMPO 0
kennyainny 0:19588ac80c02 32
kennyainny 0:19588ac80c02 33 // 4DGL SGE Function values for Goldelox Processor
kennyainny 0:19588ac80c02 34 #define CLS '\xD7'
kennyainny 0:19588ac80c02 35 #define BAUDRATE '\x0B' //null prefix
kennyainny 0:19588ac80c02 36 #define VERSION '\x08' //null prefix
kennyainny 0:19588ac80c02 37 #define BCKGDCOLOR '\x6E'
kennyainny 0:19588ac80c02 38 #define TXTBCKGDCOLOR '\x7E'
kennyainny 0:19588ac80c02 39 #define DISPCONTROL '\x68'
kennyainny 0:19588ac80c02 40 #define SETVOLUME '\x76'
kennyainny 0:19588ac80c02 41 #define CIRCLE '\xCD'
kennyainny 0:19588ac80c02 42 #define FCIRCLE '\xCC'
kennyainny 0:19588ac80c02 43 #define TRIANGLE '\xC9'
kennyainny 0:19588ac80c02 44 #define LINE '\xD2'
kennyainny 0:19588ac80c02 45 #define FRECTANGLE '\xCE'
kennyainny 0:19588ac80c02 46 #define RECTANGLE '\xCF'
kennyainny 0:19588ac80c02 47 #define ELLIPSE '\x65' //na
kennyainny 0:19588ac80c02 48 #define PIXEL '\xCB'
kennyainny 0:19588ac80c02 49 #define READPIXEL '\xCA'
kennyainny 0:19588ac80c02 50 #define SCREENCOPY '\x63' //na?
kennyainny 0:19588ac80c02 51 #define PENSIZE '\xD8'
kennyainny 0:19588ac80c02 52 #define SETFONT '\x7D'
kennyainny 0:19588ac80c02 53 #define TEXTMODE '\x77'
kennyainny 0:19588ac80c02 54 #define TEXTBOLD '\x76'
kennyainny 0:19588ac80c02 55 #define TEXTITALIC '\x75'
kennyainny 0:19588ac80c02 56 #define TEXTINVERSE '\x74'
kennyainny 0:19588ac80c02 57 #define TEXTUNDERLINE '\x73'
kennyainny 0:19588ac80c02 58 #define TEXTWIDTH '\x7C'
kennyainny 0:19588ac80c02 59 #define TEXTHEIGHT '\x7B'
kennyainny 0:19588ac80c02 60 #define TEXTCHAR '\xFE'
kennyainny 0:19588ac80c02 61 #define TEXTSTRING '\x06' //null prefix
kennyainny 0:19588ac80c02 62 #define MOVECURSOR '\xE4'
kennyainny 0:19588ac80c02 63 #define BLITCOM '\x0A'
kennyainny 0:19588ac80c02 64 #define PUTCHAR '\xFE'
kennyainny 0:19588ac80c02 65 #define DISPPOWER '\x66'
kennyainny 0:19588ac80c02 66 //media commands for uSD card
kennyainny 0:19588ac80c02 67 #define MINIT '\xB1'
kennyainny 0:19588ac80c02 68 #define SBADDRESS '\xB9'
kennyainny 0:19588ac80c02 69 #define SSADDRESS '\xB8'
kennyainny 0:19588ac80c02 70 #define READBYTE '\xB7'
kennyainny 0:19588ac80c02 71 #define READWORD '\xB6'
kennyainny 0:19588ac80c02 72 #define WRITEBYTE '\xB5'
kennyainny 0:19588ac80c02 73 #define WRITEWORD '\xB4'
kennyainny 0:19588ac80c02 74 #define FLUSHMEDIA '\xB2'
kennyainny 0:19588ac80c02 75 #define DISPLAYIMAGE '\xB3'
kennyainny 0:19588ac80c02 76 #define DISPLAYVIDEO '\xBB'
kennyainny 0:19588ac80c02 77 #define DISPLAYFRAME '\xBA'
kennyainny 0:19588ac80c02 78
kennyainny 0:19588ac80c02 79
kennyainny 0:19588ac80c02 80
kennyainny 0:19588ac80c02 81 // Screen answers
kennyainny 0:19588ac80c02 82 #define ACK '\x06'
kennyainny 0:19588ac80c02 83 #define NAK '\x15'
kennyainny 0:19588ac80c02 84
kennyainny 0:19588ac80c02 85
kennyainny 0:19588ac80c02 86
kennyainny 0:19588ac80c02 87 // Screen states
kennyainny 0:19588ac80c02 88 #define OFF '\x00'
kennyainny 0:19588ac80c02 89 #define ON '\x01'
kennyainny 0:19588ac80c02 90
kennyainny 0:19588ac80c02 91 // Graphics modes
kennyainny 0:19588ac80c02 92 #define SOLID '\x00'
kennyainny 0:19588ac80c02 93 #define WIREFRAME '\x01'
kennyainny 0:19588ac80c02 94
kennyainny 0:19588ac80c02 95 // Text modes
kennyainny 0:19588ac80c02 96 #define TRANSPARENT '\x00'
kennyainny 0:19588ac80c02 97 #define OPAQUE '\x01'
kennyainny 0:19588ac80c02 98
kennyainny 0:19588ac80c02 99 // Fonts Sizes
kennyainny 0:19588ac80c02 100 #define FONT_7X8 '\x00' //only builtin font
kennyainny 0:19588ac80c02 101 #define FONT_5X7 '\x04'
kennyainny 0:19588ac80c02 102 #define FONT_8X8 '\x01'
kennyainny 0:19588ac80c02 103 #define FONT_8X12 '\x02'
kennyainny 0:19588ac80c02 104 #define FONT_12X16 '\x03'
kennyainny 0:19588ac80c02 105 #define MEDIAFONT '\x07'
kennyainny 0:19588ac80c02 106
kennyainny 0:19588ac80c02 107
kennyainny 0:19588ac80c02 108 // Data speed
kennyainny 0:19588ac80c02 109 #define BAUD_110 27271
kennyainny 0:19588ac80c02 110 #define BAUD_300 9999
kennyainny 0:19588ac80c02 111 #define BAUD_600 4999
kennyainny 0:19588ac80c02 112 #define BAUD_1200 2499
kennyainny 0:19588ac80c02 113 #define BAUD_2400 1249
kennyainny 0:19588ac80c02 114 #define BAUD_4800 624
kennyainny 0:19588ac80c02 115 #define BAUD_9600 312
kennyainny 0:19588ac80c02 116 #define BAUD_14400 207
kennyainny 0:19588ac80c02 117 #define BAUD_19200 155
kennyainny 0:19588ac80c02 118 #define BAUD_31250 95
kennyainny 0:19588ac80c02 119 #define BAUD_38400 77
kennyainny 0:19588ac80c02 120 #define BAUD_56000 53
kennyainny 0:19588ac80c02 121 #define BAUD_57600 51
kennyainny 0:19588ac80c02 122 #define BAUD_115200 25
kennyainny 0:19588ac80c02 123 #define BAUD_128000 22
kennyainny 0:19588ac80c02 124 #define BAUD_256000 11
kennyainny 0:19588ac80c02 125 #define BAUD_300000 10
kennyainny 0:19588ac80c02 126 #define BAUD_375000 8
kennyainny 0:19588ac80c02 127 #define BAUD_500000 6
kennyainny 0:19588ac80c02 128 #define BAUD_600000 4
kennyainny 0:19588ac80c02 129 #define BAUD_750000 3
kennyainny 0:19588ac80c02 130 #define BAUD_1000000 2
kennyainny 0:19588ac80c02 131 #define BAUD_1500000 1
kennyainny 0:19588ac80c02 132 #define BAUD_3000000 0
kennyainny 0:19588ac80c02 133
kennyainny 0:19588ac80c02 134 // Defined Colors
kennyainny 0:19588ac80c02 135 #define WHITE 0xFFFFFF
kennyainny 0:19588ac80c02 136 #define BLACK 0x000000
kennyainny 0:19588ac80c02 137 #define RED 0xFF0000
kennyainny 0:19588ac80c02 138 #define GREEN 0x00FF00
kennyainny 0:19588ac80c02 139 #define BLUE 0x0000FF
kennyainny 0:19588ac80c02 140 #define LGREY 0xBFBFBF
kennyainny 0:19588ac80c02 141 #define DGREY 0x5F5F5F
kennyainny 0:19588ac80c02 142
kennyainny 0:19588ac80c02 143 // Mode data
kennyainny 0:19588ac80c02 144 #define BACKLIGHT '\x00'
kennyainny 0:19588ac80c02 145 #define DISPLAY '\x01'
kennyainny 0:19588ac80c02 146 #define CONTRAST '\x02'
kennyainny 0:19588ac80c02 147 #define POWER '\x03'
kennyainny 0:19588ac80c02 148 #define ORIENTATION '\x04'
kennyainny 0:19588ac80c02 149 #define TOUCH_CTRL '\x05'
kennyainny 0:19588ac80c02 150 #define IMAGE_FORMAT '\x06'
kennyainny 0:19588ac80c02 151 #define PROTECT_FAT '\x08'
kennyainny 0:19588ac80c02 152
kennyainny 0:19588ac80c02 153 // change this to your specific screen (newer versions) if needed
kennyainny 0:19588ac80c02 154 // Startup orientation is PORTRAIT so SIZE_X must be lesser than SIZE_Y
kennyainny 0:19588ac80c02 155 //uLCD144-G2 is a 128 by 128 pixel display
kennyainny 0:19588ac80c02 156 #define SIZE_X 128
kennyainny 0:19588ac80c02 157 #define SIZE_Y 128
kennyainny 0:19588ac80c02 158
kennyainny 0:19588ac80c02 159 #define IS_LANDSCAPE 0
kennyainny 0:19588ac80c02 160 #define IS_PORTRAIT 1
kennyainny 0:19588ac80c02 161
kennyainny 0:19588ac80c02 162 // Screen orientation
kennyainny 0:19588ac80c02 163 #define LANDSCAPE '\x00'
kennyainny 0:19588ac80c02 164 #define LANDSCAPE_R '\x01'
kennyainny 0:19588ac80c02 165 #define PORTRAIT '\x02'
kennyainny 0:19588ac80c02 166 #define PORTRAIT_R '\x03'
kennyainny 0:19588ac80c02 167
kennyainny 0:19588ac80c02 168 // Parameters
kennyainny 0:19588ac80c02 169 #define ENABLE '\x00'
kennyainny 0:19588ac80c02 170 #define DISABLE '\x01'
kennyainny 0:19588ac80c02 171 #define RESET '\x02'
kennyainny 0:19588ac80c02 172
kennyainny 0:19588ac80c02 173 #define NEW '\x00'
kennyainny 0:19588ac80c02 174 #define OLD '\x01'
kennyainny 0:19588ac80c02 175
kennyainny 0:19588ac80c02 176 #define DOWN '\x00'
kennyainny 0:19588ac80c02 177 #define UP '\x01'
kennyainny 0:19588ac80c02 178
kennyainny 0:19588ac80c02 179 #define PROTECT '\x00'
kennyainny 0:19588ac80c02 180 #define UNPROTECT '\x02'
kennyainny 0:19588ac80c02 181
kennyainny 0:19588ac80c02 182 //**************************************************************************
kennyainny 0:19588ac80c02 183 // \class uLCD_4DGL uLCD_4DGL.h
kennyainny 0:19588ac80c02 184 // \brief This is the main class. It shoud be used like this : uLCD_4GDL myLCD(p9,p10,p11);
kennyainny 0:19588ac80c02 185 /**
kennyainny 0:19588ac80c02 186 Example:
kennyainny 0:19588ac80c02 187 * @code
kennyainny 0:19588ac80c02 188 * // Display a white circle on the screen
kennyainny 0:19588ac80c02 189 * #include "mbed.h"
kennyainny 0:19588ac80c02 190 * #include " uLCD_4DGL.h"
kennyainny 0:19588ac80c02 191 *
kennyainny 0:19588ac80c02 192 * uLCD_4GDL myLCD(p9,p10,p11);
kennyainny 0:19588ac80c02 193 *
kennyainny 0:19588ac80c02 194 * int main() {
kennyainny 0:19588ac80c02 195 * myLCD.circle(120, 160, 80, WHITE);
kennyainny 0:19588ac80c02 196 * }
kennyainny 0:19588ac80c02 197 * @endcode
kennyainny 0:19588ac80c02 198 */
kennyainny 0:19588ac80c02 199
kennyainny 0:19588ac80c02 200 class uLCD_4DGL : public Stream
kennyainny 0:19588ac80c02 201 {
kennyainny 0:19588ac80c02 202
kennyainny 0:19588ac80c02 203 public :
kennyainny 0:19588ac80c02 204
kennyainny 0:19588ac80c02 205 uLCD_4DGL(PinName tx, PinName rx, PinName rst);
kennyainny 0:19588ac80c02 206
kennyainny 0:19588ac80c02 207 // General Commands *******************************************************************************
kennyainny 0:19588ac80c02 208
kennyainny 0:19588ac80c02 209 /** Clear the entire screen using the current background colour */
kennyainny 0:19588ac80c02 210 void cls();
kennyainny 0:19588ac80c02 211
kennyainny 0:19588ac80c02 212 /** Reset screen */
kennyainny 0:19588ac80c02 213 void reset();
kennyainny 0:19588ac80c02 214
kennyainny 0:19588ac80c02 215
kennyainny 0:19588ac80c02 216 /** Set serial Baud rate (both sides : screen and mbed)
kennyainny 0:19588ac80c02 217 * @param Speed Correct BAUD value (see uLCD_4DGL.h)
kennyainny 0:19588ac80c02 218 */
kennyainny 0:19588ac80c02 219 void baudrate(int speed);
kennyainny 0:19588ac80c02 220
kennyainny 0:19588ac80c02 221 /** Set background colour to the specified value
kennyainny 0:19588ac80c02 222 * @param color in HEX RGB like 0xFF00FF
kennyainny 0:19588ac80c02 223 */
kennyainny 0:19588ac80c02 224 void background_color(int color);
kennyainny 0:19588ac80c02 225
kennyainny 0:19588ac80c02 226 /** Set screen display mode to specific values
kennyainny 0:19588ac80c02 227 * @param mode See 4DGL documentation
kennyainny 0:19588ac80c02 228 * @param value See 4DGL documentation
kennyainny 0:19588ac80c02 229 */
kennyainny 0:19588ac80c02 230 void textbackground_color(int color);
kennyainny 0:19588ac80c02 231
kennyainny 0:19588ac80c02 232 /** Set screen display mode to specific values
kennyainny 0:19588ac80c02 233 * @param mode See 4DGL documentation
kennyainny 0:19588ac80c02 234 * @param value See 4DGL documentation
kennyainny 0:19588ac80c02 235 */
kennyainny 0:19588ac80c02 236 void display_control(char mode);
kennyainny 0:19588ac80c02 237 void display_power(char mode);
kennyainny 0:19588ac80c02 238 /** Set internal speaker to specified value
kennyainny 0:19588ac80c02 239 * @param value Correct range is 8 - 127
kennyainny 0:19588ac80c02 240 */
kennyainny 0:19588ac80c02 241 void set_volume(char value);
kennyainny 0:19588ac80c02 242
kennyainny 0:19588ac80c02 243 // Graphics Commands *******************************************************************************
kennyainny 0:19588ac80c02 244
kennyainny 0:19588ac80c02 245 /** Draw a circle centered at x,y with a radius and a colour. It uses Pen Size stored value to draw a solid or wireframe circle
kennyainny 0:19588ac80c02 246 * @param x Horizontal position of the circle centre
kennyainny 0:19588ac80c02 247 * @param y Vertical position of the circle centre
kennyainny 0:19588ac80c02 248 * @param radius Radius of the circle
kennyainny 0:19588ac80c02 249 * @param color Circle color in HEX RGB like 0xFF00FF
kennyainny 0:19588ac80c02 250 */
kennyainny 0:19588ac80c02 251 void circle(int x , int y , int radius, int color);
kennyainny 0:19588ac80c02 252 void filled_circle(int x , int y , int radius, int color);
kennyainny 0:19588ac80c02 253 void triangle(int, int, int, int, int, int, int);
kennyainny 0:19588ac80c02 254 void line(int, int, int, int, int);
kennyainny 0:19588ac80c02 255 void rectangle(int, int, int, int, int);
kennyainny 0:19588ac80c02 256 void filled_rectangle(int, int, int, int, int);
kennyainny 0:19588ac80c02 257 void pixel(int, int, int);
kennyainny 0:19588ac80c02 258 int read_pixel(int, int);
kennyainny 0:19588ac80c02 259 void pen_size(char);
kennyainny 0:19588ac80c02 260 void BLIT(int x, int y, int w, int h, int *colors);
kennyainny 0:19588ac80c02 261
kennyainny 0:19588ac80c02 262 // Text Commands
kennyainny 0:19588ac80c02 263 void set_font(char);
kennyainny 0:19588ac80c02 264 void set_font_size(char width, char height);
kennyainny 0:19588ac80c02 265 void text_mode(char);
kennyainny 0:19588ac80c02 266 void text_bold(char);
kennyainny 0:19588ac80c02 267 void text_italic(char);
kennyainny 0:19588ac80c02 268 void text_inverse(char);
kennyainny 0:19588ac80c02 269 void text_underline(char);
kennyainny 0:19588ac80c02 270 void text_width(char);
kennyainny 0:19588ac80c02 271 void text_height(char);
kennyainny 0:19588ac80c02 272 void text_char(char, char, char, int);
kennyainny 0:19588ac80c02 273 void text_string(char *, char, char, char, int);
kennyainny 0:19588ac80c02 274 void locate(char, char);
kennyainny 0:19588ac80c02 275 void color(int);
kennyainny 0:19588ac80c02 276 void putc(char);
kennyainny 0:19588ac80c02 277 void puts(char *);
kennyainny 0:19588ac80c02 278
kennyainny 0:19588ac80c02 279 //Media Commands
kennyainny 0:19588ac80c02 280 int media_init();
kennyainny 0:19588ac80c02 281 void set_byte_address(int, int);
kennyainny 0:19588ac80c02 282 void set_sector_address(int, int);
kennyainny 0:19588ac80c02 283 char read_byte();
kennyainny 0:19588ac80c02 284 int read_word();
kennyainny 0:19588ac80c02 285 void write_byte(int);
kennyainny 0:19588ac80c02 286 void write_word(int);
kennyainny 0:19588ac80c02 287 void flush_media();
kennyainny 0:19588ac80c02 288 void display_image(int, int);
kennyainny 0:19588ac80c02 289 void display_video(int, int);
kennyainny 0:19588ac80c02 290 void display_frame(int, int, int);
kennyainny 0:19588ac80c02 291
kennyainny 0:19588ac80c02 292 // Screen Data
kennyainny 0:19588ac80c02 293 int type;
kennyainny 0:19588ac80c02 294 int revision;
kennyainny 0:19588ac80c02 295 int firmware;
kennyainny 0:19588ac80c02 296 int reserved1;
kennyainny 0:19588ac80c02 297 int reserved2;
kennyainny 0:19588ac80c02 298
kennyainny 0:19588ac80c02 299 // Text data
kennyainny 0:19588ac80c02 300 char current_col;
kennyainny 0:19588ac80c02 301 char current_row;
kennyainny 0:19588ac80c02 302 int current_color;
kennyainny 0:19588ac80c02 303 char current_font;
kennyainny 0:19588ac80c02 304 char current_orientation;
kennyainny 0:19588ac80c02 305 char max_col;
kennyainny 0:19588ac80c02 306 char max_row;
kennyainny 0:19588ac80c02 307 int current_w, current_h;
kennyainny 0:19588ac80c02 308 int current_fx, current_fy;
kennyainny 0:19588ac80c02 309 int current_wf, current_hf;
kennyainny 0:19588ac80c02 310
kennyainny 0:19588ac80c02 311
kennyainny 0:19588ac80c02 312 protected :
kennyainny 0:19588ac80c02 313
kennyainny 0:19588ac80c02 314 Serial _cmd;
kennyainny 0:19588ac80c02 315 DigitalOut _rst;
kennyainny 0:19588ac80c02 316 //used by printf
kennyainny 0:19588ac80c02 317 virtual int _putc(int c) {
kennyainny 0:19588ac80c02 318 putc(c);
kennyainny 0:19588ac80c02 319 return 0;
kennyainny 0:19588ac80c02 320 };
kennyainny 0:19588ac80c02 321 virtual int _getc() {
kennyainny 0:19588ac80c02 322 return -1;
kennyainny 0:19588ac80c02 323 }
kennyainny 0:19588ac80c02 324
kennyainny 0:19588ac80c02 325 void freeBUFFER (void);
kennyainny 0:19588ac80c02 326 void writeBYTE (char);
kennyainny 0:19588ac80c02 327 void writeBYTEfast (char);
kennyainny 0:19588ac80c02 328 int writeCOMMAND(char *, int);
kennyainny 0:19588ac80c02 329 int writeCOMMANDnull(char *, int);
kennyainny 0:19588ac80c02 330 int readVERSION (char *, int);
kennyainny 0:19588ac80c02 331 int getSTATUS (char *, int);
kennyainny 0:19588ac80c02 332 int version (void);
kennyainny 0:19588ac80c02 333 #if DEBUGMODE
kennyainny 0:19588ac80c02 334 Serial pc;
kennyainny 0:19588ac80c02 335 #endif // DEBUGMODE
kennyainny 0:19588ac80c02 336 };
kennyainny 0:19588ac80c02 337
kennyainny 0:19588ac80c02 338 typedef unsigned char BYTE;
kennyainny 0:19588ac80c02 339
kennyainny 0:19588ac80c02 340
kennyainny 0:19588ac80c02 341
kennyainny 0:19588ac80c02 342
kennyainny 0:19588ac80c02 343
kennyainny 0:19588ac80c02 344
kennyainny 0:19588ac80c02 345
kennyainny 0:19588ac80c02 346