Extended library to include a screensaver

Dependencies:   SDFileSystem

Fork of 4DGL-uLCD-SE by Jay Danner

Committer:
macenzofan
Date:
Wed Feb 08 21:53:30 2017 +0000
Revision:
3:f09725357991
Parent:
0:975087cba076
IOT EC

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jdanner3 0:975087cba076 1 //
jdanner3 0:975087cba076 2 // uLCD_4DGL is a class to drive 4D Systems TFT touch screens
jdanner3 0:975087cba076 3 //
jdanner3 0:975087cba076 4 // Copyright (C) <2010> Stephane ROCHON <stephane.rochon at free.fr>
jdanner3 0:975087cba076 5 // Modifed for Goldelox processor <2013> Jim Hamblen
jdanner3 0:975087cba076 6 //
jdanner3 0:975087cba076 7 // uLCD_4DGL is free software: you can redistribute it and/or modify
jdanner3 0:975087cba076 8 // it under the terms of the GNU General Public License as published by
jdanner3 0:975087cba076 9 // the Free Software Foundation, either version 3 of the License, or
jdanner3 0:975087cba076 10 // (at your option) any later version.
jdanner3 0:975087cba076 11 //
jdanner3 0:975087cba076 12 // uLCD_4DGL is distributed in the hope that it will be useful,
jdanner3 0:975087cba076 13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
jdanner3 0:975087cba076 14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
jdanner3 0:975087cba076 15 // GNU General Public License for more details.
jdanner3 0:975087cba076 16 //
jdanner3 0:975087cba076 17 // You should have received a copy of the GNU General Public License
jdanner3 0:975087cba076 18 // along with uLCD_4DGL. If not, see <http://www.gnu.org/licenses/>.
jdanner3 0:975087cba076 19
jdanner3 0:975087cba076 20 #include "mbed.h"
jdanner3 0:975087cba076 21 #include "uLCD_4DGL.h"
jdanner3 0:975087cba076 22
jdanner3 0:975087cba076 23 //****************************************************************************************************
jdanner3 0:975087cba076 24 void uLCD_4DGL :: set_font_size(char width, char height) // set font size
jdanner3 0:975087cba076 25 {
jdanner3 0:975087cba076 26 if (current_orientation == IS_PORTRAIT) {
jdanner3 0:975087cba076 27 current_fx = width;
jdanner3 0:975087cba076 28 current_fy = height;
jdanner3 0:975087cba076 29 } else {
jdanner3 0:975087cba076 30 current_fy = height;
jdanner3 0:975087cba076 31 current_fx = width;
jdanner3 0:975087cba076 32 }
jdanner3 0:975087cba076 33 max_col = current_w / (current_fx*current_wf);
jdanner3 0:975087cba076 34 max_row = current_h / (current_fy*current_hf);
jdanner3 0:975087cba076 35 }
jdanner3 0:975087cba076 36
jdanner3 0:975087cba076 37 //****************************************************************************************************
jdanner3 0:975087cba076 38 void uLCD_4DGL :: set_font(char mode) // set font - system or SD media
jdanner3 0:975087cba076 39 {
jdanner3 0:975087cba076 40 char command[3]= "";
jdanner3 0:975087cba076 41
jdanner3 0:975087cba076 42 command[0] = SETFONT;
jdanner3 0:975087cba076 43 command[1] = 0;
jdanner3 0:975087cba076 44 command[2] = mode;
jdanner3 0:975087cba076 45
jdanner3 0:975087cba076 46 current_font = mode;
jdanner3 0:975087cba076 47
jdanner3 0:975087cba076 48 if (current_orientation == IS_PORTRAIT) {
jdanner3 0:975087cba076 49 current_w = SIZE_X;
jdanner3 0:975087cba076 50 current_h = SIZE_Y;
jdanner3 0:975087cba076 51 } else {
jdanner3 0:975087cba076 52 current_w = SIZE_Y;
jdanner3 0:975087cba076 53 current_h = SIZE_X;
jdanner3 0:975087cba076 54 }
jdanner3 0:975087cba076 55
jdanner3 0:975087cba076 56 switch (mode) {
jdanner3 0:975087cba076 57 case FONT_5X7 :
jdanner3 0:975087cba076 58
jdanner3 0:975087cba076 59 current_fx = 6;
jdanner3 0:975087cba076 60 current_fy = 8;
jdanner3 0:975087cba076 61 break;
jdanner3 0:975087cba076 62 case FONT_7X8 :
jdanner3 0:975087cba076 63 current_fx = 7;
jdanner3 0:975087cba076 64 current_fy = 8;
jdanner3 0:975087cba076 65 break;
jdanner3 0:975087cba076 66 case FONT_8X8 :
jdanner3 0:975087cba076 67 current_fx = 8;
jdanner3 0:975087cba076 68 current_fy = 8;
jdanner3 0:975087cba076 69 break;
jdanner3 0:975087cba076 70 case FONT_8X12 :
jdanner3 0:975087cba076 71 current_fx = 8;
jdanner3 0:975087cba076 72 current_fy = 12;
jdanner3 0:975087cba076 73 break;
jdanner3 0:975087cba076 74 case FONT_12X16 :
jdanner3 0:975087cba076 75 current_fx = 12;
jdanner3 0:975087cba076 76 current_fy = 16;
jdanner3 0:975087cba076 77 break;
jdanner3 0:975087cba076 78 default:
jdanner3 0:975087cba076 79 current_fx = 8;
jdanner3 0:975087cba076 80 current_fy = 8;
jdanner3 0:975087cba076 81 }
jdanner3 0:975087cba076 82
jdanner3 0:975087cba076 83 max_col = current_w / (current_fx*current_wf);
jdanner3 0:975087cba076 84 max_row = current_h / (current_fy*current_hf);
jdanner3 0:975087cba076 85
jdanner3 0:975087cba076 86 writeCOMMAND(command, 3);
jdanner3 0:975087cba076 87 }
jdanner3 0:975087cba076 88
jdanner3 0:975087cba076 89
jdanner3 0:975087cba076 90
jdanner3 0:975087cba076 91 //****************************************************************************************************
jdanner3 0:975087cba076 92 void uLCD_4DGL :: text_mode(char mode) // set text mode
jdanner3 0:975087cba076 93 {
jdanner3 0:975087cba076 94 char command[3]= "";
jdanner3 0:975087cba076 95
jdanner3 0:975087cba076 96 command[0] = TEXTMODE;
jdanner3 0:975087cba076 97 command[1] = 0;
jdanner3 0:975087cba076 98 command[2] = mode;
jdanner3 0:975087cba076 99
jdanner3 0:975087cba076 100 writeCOMMAND(command, 3);
jdanner3 0:975087cba076 101 }
jdanner3 0:975087cba076 102
jdanner3 0:975087cba076 103 //****************************************************************************************************
jdanner3 0:975087cba076 104 void uLCD_4DGL :: text_bold(char mode) // set text mode
jdanner3 0:975087cba076 105 {
jdanner3 0:975087cba076 106 char command[3]= "";
jdanner3 0:975087cba076 107
jdanner3 0:975087cba076 108 command[0] = TEXTBOLD;
jdanner3 0:975087cba076 109 command[1] = 0;
jdanner3 0:975087cba076 110 command[2] = mode;
jdanner3 0:975087cba076 111
jdanner3 0:975087cba076 112 writeCOMMAND(command, 3);
jdanner3 0:975087cba076 113 }
jdanner3 0:975087cba076 114
jdanner3 0:975087cba076 115 //****************************************************************************************************
jdanner3 0:975087cba076 116 void uLCD_4DGL :: text_italic(char mode) // set text mode
jdanner3 0:975087cba076 117 {
jdanner3 0:975087cba076 118 char command[3]= "";
jdanner3 0:975087cba076 119
jdanner3 0:975087cba076 120 command[0] = TEXTITALIC;
jdanner3 0:975087cba076 121 command[1] = 0;
jdanner3 0:975087cba076 122 command[2] = mode;
jdanner3 0:975087cba076 123
jdanner3 0:975087cba076 124 writeCOMMAND(command, 3);
jdanner3 0:975087cba076 125 }
jdanner3 0:975087cba076 126
jdanner3 0:975087cba076 127 //****************************************************************************************************
jdanner3 0:975087cba076 128 void uLCD_4DGL :: text_inverse(char mode) // set text mode
jdanner3 0:975087cba076 129 {
jdanner3 0:975087cba076 130 char command[3]= "";
jdanner3 0:975087cba076 131
jdanner3 0:975087cba076 132 command[0] = TEXTINVERSE;
jdanner3 0:975087cba076 133 command[1] = 0;
jdanner3 0:975087cba076 134 command[2] = mode;
jdanner3 0:975087cba076 135
jdanner3 0:975087cba076 136 writeCOMMAND(command, 3);
jdanner3 0:975087cba076 137 }
jdanner3 0:975087cba076 138
jdanner3 0:975087cba076 139 //****************************************************************************************************
jdanner3 0:975087cba076 140 void uLCD_4DGL :: text_underline(char mode) // set text mode
jdanner3 0:975087cba076 141 {
jdanner3 0:975087cba076 142 char command[3]= "";
jdanner3 0:975087cba076 143
jdanner3 0:975087cba076 144 command[0] = TEXTUNDERLINE;
jdanner3 0:975087cba076 145 command[1] = 0;
jdanner3 0:975087cba076 146 command[2] = mode;
jdanner3 0:975087cba076 147
jdanner3 0:975087cba076 148 writeCOMMAND(command, 3);
jdanner3 0:975087cba076 149 }
jdanner3 0:975087cba076 150
jdanner3 0:975087cba076 151 //****************************************************************************************************
jdanner3 0:975087cba076 152 void uLCD_4DGL :: text_width(char width) // set text width
jdanner3 0:975087cba076 153 {
jdanner3 0:975087cba076 154 char command[3]= "";
jdanner3 0:975087cba076 155
jdanner3 0:975087cba076 156 command[0] = TEXTWIDTH;
jdanner3 0:975087cba076 157 command[1] = 0;
jdanner3 0:975087cba076 158 command[2] = width;
jdanner3 0:975087cba076 159 current_wf = width;
jdanner3 0:975087cba076 160 max_col = current_w / (current_fx*current_wf);
jdanner3 0:975087cba076 161 writeCOMMAND(command, 3);
jdanner3 0:975087cba076 162 }
jdanner3 0:975087cba076 163
jdanner3 0:975087cba076 164 //****************************************************************************************************
jdanner3 0:975087cba076 165 void uLCD_4DGL :: text_height(char height) // set text height
jdanner3 0:975087cba076 166 {
jdanner3 0:975087cba076 167 char command[3]= "";
jdanner3 0:975087cba076 168
jdanner3 0:975087cba076 169 command[0] = TEXTHEIGHT;
jdanner3 0:975087cba076 170 command[1] = 0;
jdanner3 0:975087cba076 171 command[2] = height;
jdanner3 0:975087cba076 172 current_hf = height;
jdanner3 0:975087cba076 173 max_row = current_h / (current_fy*current_hf);
jdanner3 0:975087cba076 174 writeCOMMAND(command, 3);
jdanner3 0:975087cba076 175 }
jdanner3 0:975087cba076 176
jdanner3 0:975087cba076 177
jdanner3 0:975087cba076 178 //****************************************************************************************************
jdanner3 0:975087cba076 179 void uLCD_4DGL :: text_char(char c, char col, char row, int color, bool isScreenSaverCommand) // draw a text char
jdanner3 0:975087cba076 180 {
jdanner3 0:975087cba076 181 char command[6]= "";
jdanner3 0:975087cba076 182 command[0] = 0xE4; //move cursor
jdanner3 0:975087cba076 183 command[1] = 0;
jdanner3 0:975087cba076 184 command[2] = row;
jdanner3 0:975087cba076 185 command[3] = 0;
jdanner3 0:975087cba076 186 command[4] = col;
jdanner3 0:975087cba076 187 writeCOMMAND(command, 5);
jdanner3 0:975087cba076 188
jdanner3 0:975087cba076 189 command[0] = 0x7F; //set color
jdanner3 0:975087cba076 190
jdanner3 0:975087cba076 191 int red5 = (color >> (16 + 3)) & 0x1F; // get red on 5 bits
jdanner3 0:975087cba076 192 int green6 = (color >> (8 + 2)) & 0x3F; // get green on 6 bits
jdanner3 0:975087cba076 193 int blue5 = (color >> (0 + 3)) & 0x1F; // get blue on 5 bits
jdanner3 0:975087cba076 194
jdanner3 0:975087cba076 195 command[1] = ((red5 << 3) + (green6 >> 3)) & 0xFF; // first part of 16 bits color
jdanner3 0:975087cba076 196 command[2] = ((green6 << 5) + (blue5 >> 0)) & 0xFF; // second part of 16 bits color
jdanner3 0:975087cba076 197 writeCOMMAND(command, 3);
jdanner3 0:975087cba076 198
jdanner3 0:975087cba076 199 command[0] = TEXTCHAR; //print char
jdanner3 0:975087cba076 200 command[1] = 0;
jdanner3 0:975087cba076 201 command[2] = c;
jdanner3 0:975087cba076 202 writeCOMMAND(command, 3);
jdanner3 0:975087cba076 203 if (!isScreenSaverCommand) reportScreenInteraction();
jdanner3 0:975087cba076 204 }
jdanner3 0:975087cba076 205
jdanner3 0:975087cba076 206
jdanner3 0:975087cba076 207 //****************************************************************************************************
jdanner3 0:975087cba076 208 void uLCD_4DGL :: text_string(char *s, char col, char row, char font, int color, bool isScreenSaverCommand) // draw a text string
jdanner3 0:975087cba076 209 {
jdanner3 0:975087cba076 210
jdanner3 0:975087cba076 211 char command[1000]= "";
jdanner3 0:975087cba076 212 int size = strlen(s);
jdanner3 0:975087cba076 213 int i = 0;
jdanner3 0:975087cba076 214
jdanner3 0:975087cba076 215 set_font(font);
jdanner3 0:975087cba076 216
jdanner3 0:975087cba076 217 command[0] = 0xE4; //move cursor
jdanner3 0:975087cba076 218 command[1] = 0;
jdanner3 0:975087cba076 219 command[2] = row;
jdanner3 0:975087cba076 220 command[3] = 0;
jdanner3 0:975087cba076 221 command[4] = col;
jdanner3 0:975087cba076 222 writeCOMMAND(command, 5);
jdanner3 0:975087cba076 223
jdanner3 0:975087cba076 224 command[0] = 0x7F; //set color
jdanner3 0:975087cba076 225 int red5 = (color >> (16 + 3)) & 0x1F; // get red on 5 bits
jdanner3 0:975087cba076 226 int green6 = (color >> (8 + 2)) & 0x3F; // get green on 6 bits
jdanner3 0:975087cba076 227 int blue5 = (color >> (0 + 3)) & 0x1F; // get blue on 5 bits
jdanner3 0:975087cba076 228
jdanner3 0:975087cba076 229 command[1] = ((red5 << 3) + (green6 >> 3)) & 0xFF; // first part of 16 bits color
jdanner3 0:975087cba076 230 command[2] = ((green6 << 5) + (blue5 >> 0)) & 0xFF; // second part of 16 bits color
jdanner3 0:975087cba076 231 writeCOMMAND(command, 3);
jdanner3 0:975087cba076 232
jdanner3 0:975087cba076 233 command[0] = TEXTSTRING;
jdanner3 0:975087cba076 234 for (i=0; i<size; i++) command[1+i] = s[i];
jdanner3 0:975087cba076 235 command[1+size] = 0;
jdanner3 0:975087cba076 236 writeCOMMANDnull(command, 2 + size);
jdanner3 0:975087cba076 237 if (!isScreenSaverCommand) reportScreenInteraction();
jdanner3 0:975087cba076 238 }
jdanner3 0:975087cba076 239
jdanner3 0:975087cba076 240
jdanner3 0:975087cba076 241
jdanner3 0:975087cba076 242 //****************************************************************************************************
jdanner3 0:975087cba076 243 void uLCD_4DGL :: locate(char col, char row, bool isScreenSaverCommand) // place text curssor at col, row
jdanner3 0:975087cba076 244 {
jdanner3 0:975087cba076 245 char command[5] = "";
jdanner3 0:975087cba076 246 current_col = col;
jdanner3 0:975087cba076 247 current_row = row;
jdanner3 0:975087cba076 248 command[0] = MOVECURSOR; //move cursor
jdanner3 0:975087cba076 249 command[1] = 0;
jdanner3 0:975087cba076 250 command[2] = current_row;
jdanner3 0:975087cba076 251 command[3] = 0;
jdanner3 0:975087cba076 252 command[4] = current_col;
jdanner3 0:975087cba076 253 writeCOMMAND(command, 5);
jdanner3 0:975087cba076 254 if (!isScreenSaverCommand) reportScreenInteraction();
jdanner3 0:975087cba076 255 }
jdanner3 0:975087cba076 256
jdanner3 0:975087cba076 257 //****************************************************************************************************
jdanner3 0:975087cba076 258 void uLCD_4DGL :: color(int color) // set text color
jdanner3 0:975087cba076 259 {
jdanner3 0:975087cba076 260 char command[5] = "";
jdanner3 0:975087cba076 261 current_color = color;
jdanner3 0:975087cba076 262 command[0] = 0x7F; //set color
jdanner3 0:975087cba076 263
jdanner3 0:975087cba076 264 int red5 = (color >> (16 + 3)) & 0x1F; // get red on 5 bits
jdanner3 0:975087cba076 265 int green6 = (color >> (8 + 2)) & 0x3F; // get green on 6 bits
jdanner3 0:975087cba076 266 int blue5 = (color >> (0 + 3)) & 0x1F; // get blue on 5 bits
jdanner3 0:975087cba076 267
jdanner3 0:975087cba076 268 command[1] = ((red5 << 3) + (green6 >> 3)) & 0xFF; // first part of 16 bits color
jdanner3 0:975087cba076 269 command[2] = ((green6 << 5) + (blue5 >> 0)) & 0xFF; // second part of 16 bits color
jdanner3 0:975087cba076 270 writeCOMMAND(command, 3);
jdanner3 0:975087cba076 271 }
jdanner3 0:975087cba076 272
jdanner3 0:975087cba076 273 //****************************************************************************************************
jdanner3 0:975087cba076 274 void uLCD_4DGL :: putc(char c, bool isScreenSaverCommand) // place char at current cursor position
jdanner3 0:975087cba076 275 //used by virtual printf function _putc
jdanner3 0:975087cba076 276 {
jdanner3 0:975087cba076 277 char command[6] ="";
jdanner3 0:975087cba076 278 if(c<0x20) {
jdanner3 0:975087cba076 279 if(c=='\n') {
jdanner3 0:975087cba076 280 current_col = 0;
jdanner3 0:975087cba076 281 current_row++;
jdanner3 0:975087cba076 282 command[0] = MOVECURSOR; //move cursor to start of next line
jdanner3 0:975087cba076 283 command[1] = 0;
jdanner3 0:975087cba076 284 command[2] = current_row;
jdanner3 0:975087cba076 285 command[3] = 0;
jdanner3 0:975087cba076 286 command[4] = current_col;
jdanner3 0:975087cba076 287 writeCOMMAND(command, 5);
jdanner3 0:975087cba076 288 }
jdanner3 0:975087cba076 289 if(c=='\r') {
jdanner3 0:975087cba076 290 current_col = 0;
jdanner3 0:975087cba076 291 command[0] = MOVECURSOR; //move cursor to start of line
jdanner3 0:975087cba076 292 command[1] = 0;
jdanner3 0:975087cba076 293 command[2] = current_row;
jdanner3 0:975087cba076 294 command[3] = 0;
jdanner3 0:975087cba076 295 command[4] = current_col;
jdanner3 0:975087cba076 296 writeCOMMAND(command, 5);
jdanner3 0:975087cba076 297 }
jdanner3 0:975087cba076 298 if(c=='\f') {
jdanner3 0:975087cba076 299 uLCD_4DGL::cls(); //clear screen on form feed
jdanner3 0:975087cba076 300 }
jdanner3 0:975087cba076 301 } else {
jdanner3 0:975087cba076 302 command[0] = PUTCHAR;
jdanner3 0:975087cba076 303 command[1] = 0x00;
jdanner3 0:975087cba076 304 command[2] = c;
jdanner3 0:975087cba076 305 writeCOMMAND(command,3);
jdanner3 0:975087cba076 306 current_col++;
jdanner3 0:975087cba076 307 }
jdanner3 0:975087cba076 308 if (current_col == max_col) {
jdanner3 0:975087cba076 309 current_col = 0;
jdanner3 0:975087cba076 310 current_row++;
jdanner3 0:975087cba076 311 command[0] = MOVECURSOR; //move cursor to next line
jdanner3 0:975087cba076 312 command[1] = 0;
jdanner3 0:975087cba076 313 command[2] = current_row;
jdanner3 0:975087cba076 314 command[3] = 0;
jdanner3 0:975087cba076 315 command[4] = current_col;
jdanner3 0:975087cba076 316 writeCOMMAND(command, 5);
jdanner3 0:975087cba076 317 }
jdanner3 0:975087cba076 318 if (current_row == max_row) {
jdanner3 0:975087cba076 319 current_row = 0;
jdanner3 0:975087cba076 320 command[0] = MOVECURSOR; //move cursor back to start
jdanner3 0:975087cba076 321 command[1] = 0;
jdanner3 0:975087cba076 322 command[2] = current_row;
jdanner3 0:975087cba076 323 command[3] = 0;
jdanner3 0:975087cba076 324 command[4] = current_col;
jdanner3 0:975087cba076 325 writeCOMMAND(command, 5);
jdanner3 0:975087cba076 326 }
jdanner3 0:975087cba076 327 if (!isScreenSaverCommand) reportScreenInteraction();
jdanner3 0:975087cba076 328 }
jdanner3 0:975087cba076 329
jdanner3 0:975087cba076 330
jdanner3 0:975087cba076 331 //****************************************************************************************************
jdanner3 0:975087cba076 332 void uLCD_4DGL :: puts(char *s, bool isScreenSaverCommand) // place string at current cursor position
jdanner3 0:975087cba076 333 {
jdanner3 0:975087cba076 334 text_string(s, current_col, current_row, current_font, current_color);
jdanner3 0:975087cba076 335
jdanner3 0:975087cba076 336 current_col += strlen(s);
jdanner3 0:975087cba076 337
jdanner3 0:975087cba076 338 if (current_col >= max_col) {
jdanner3 0:975087cba076 339 current_row += current_col / max_col;
jdanner3 0:975087cba076 340 current_col %= max_col;
jdanner3 0:975087cba076 341 }
jdanner3 0:975087cba076 342 if (current_row >= max_row) {
jdanner3 0:975087cba076 343 current_row %= max_row;
jdanner3 0:975087cba076 344 }
jdanner3 0:975087cba076 345 if (!isScreenSaverCommand) reportScreenInteraction();
jdanner3 0:975087cba076 346 }