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 TFT touch screens
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 //****************************************************************************************************
brianeason92 0:64079f49da67 24 void uLCD_4DGL :: set_font_size(char width, char height) // set font size
brianeason92 0:64079f49da67 25 {
brianeason92 0:64079f49da67 26 if (current_orientation == IS_PORTRAIT) {
brianeason92 0:64079f49da67 27 current_fx = width;
brianeason92 0:64079f49da67 28 current_fy = height;
brianeason92 0:64079f49da67 29 } else {
brianeason92 0:64079f49da67 30 current_fy = height;
brianeason92 0:64079f49da67 31 current_fx = width;
brianeason92 0:64079f49da67 32 }
brianeason92 0:64079f49da67 33 max_col = current_w / (current_fx*current_wf);
brianeason92 0:64079f49da67 34 max_row = current_h / (current_fy*current_hf);
brianeason92 0:64079f49da67 35 }
brianeason92 0:64079f49da67 36
brianeason92 0:64079f49da67 37 //****************************************************************************************************
brianeason92 0:64079f49da67 38 void uLCD_4DGL :: set_font(char mode) // set font - system or SD media
brianeason92 0:64079f49da67 39 {
brianeason92 0:64079f49da67 40 char command[3]= "";
brianeason92 0:64079f49da67 41
brianeason92 0:64079f49da67 42 command[0] = SETFONT;
brianeason92 0:64079f49da67 43 command[1] = 0;
brianeason92 0:64079f49da67 44 command[2] = mode;
brianeason92 0:64079f49da67 45
brianeason92 0:64079f49da67 46 current_font = mode;
brianeason92 0:64079f49da67 47
brianeason92 0:64079f49da67 48 if (current_orientation == IS_PORTRAIT) {
brianeason92 0:64079f49da67 49 current_w = SIZE_X;
brianeason92 0:64079f49da67 50 current_h = SIZE_Y;
brianeason92 0:64079f49da67 51 } else {
brianeason92 0:64079f49da67 52 current_w = SIZE_Y;
brianeason92 0:64079f49da67 53 current_h = SIZE_X;
brianeason92 0:64079f49da67 54 }
brianeason92 0:64079f49da67 55
brianeason92 0:64079f49da67 56 switch (mode) {
brianeason92 0:64079f49da67 57 case FONT_5X7 :
brianeason92 0:64079f49da67 58
brianeason92 0:64079f49da67 59 current_fx = 6;
brianeason92 0:64079f49da67 60 current_fy = 8;
brianeason92 0:64079f49da67 61 break;
brianeason92 0:64079f49da67 62 case FONT_7X8 :
brianeason92 0:64079f49da67 63 current_fx = 7;
brianeason92 0:64079f49da67 64 current_fy = 8;
brianeason92 0:64079f49da67 65 break;
brianeason92 0:64079f49da67 66 case FONT_8X8 :
brianeason92 0:64079f49da67 67 current_fx = 8;
brianeason92 0:64079f49da67 68 current_fy = 8;
brianeason92 0:64079f49da67 69 break;
brianeason92 0:64079f49da67 70 case FONT_8X12 :
brianeason92 0:64079f49da67 71 current_fx = 8;
brianeason92 0:64079f49da67 72 current_fy = 12;
brianeason92 0:64079f49da67 73 break;
brianeason92 0:64079f49da67 74 case FONT_12X16 :
brianeason92 0:64079f49da67 75 current_fx = 12;
brianeason92 0:64079f49da67 76 current_fy = 16;
brianeason92 0:64079f49da67 77 break;
brianeason92 0:64079f49da67 78 default:
brianeason92 0:64079f49da67 79 current_fx = 8;
brianeason92 0:64079f49da67 80 current_fy = 8;
brianeason92 0:64079f49da67 81 }
brianeason92 0:64079f49da67 82
brianeason92 0:64079f49da67 83 max_col = current_w / (current_fx*current_wf);
brianeason92 0:64079f49da67 84 max_row = current_h / (current_fy*current_hf);
brianeason92 0:64079f49da67 85
brianeason92 0:64079f49da67 86 writeCOMMAND(command, 3);
brianeason92 0:64079f49da67 87 }
brianeason92 0:64079f49da67 88
brianeason92 0:64079f49da67 89
brianeason92 0:64079f49da67 90
brianeason92 0:64079f49da67 91 //****************************************************************************************************
brianeason92 0:64079f49da67 92 void uLCD_4DGL :: text_mode(char mode) // set text mode
brianeason92 0:64079f49da67 93 {
brianeason92 0:64079f49da67 94 char command[3]= "";
brianeason92 0:64079f49da67 95
brianeason92 0:64079f49da67 96 command[0] = TEXTMODE;
brianeason92 0:64079f49da67 97 command[1] = 0;
brianeason92 0:64079f49da67 98 command[2] = mode;
brianeason92 0:64079f49da67 99
brianeason92 0:64079f49da67 100 writeCOMMAND(command, 3);
brianeason92 0:64079f49da67 101 }
brianeason92 0:64079f49da67 102
brianeason92 0:64079f49da67 103 //****************************************************************************************************
brianeason92 0:64079f49da67 104 void uLCD_4DGL :: text_bold(char mode) // set text mode
brianeason92 0:64079f49da67 105 {
brianeason92 0:64079f49da67 106 char command[3]= "";
brianeason92 0:64079f49da67 107
brianeason92 0:64079f49da67 108 command[0] = TEXTBOLD;
brianeason92 0:64079f49da67 109 command[1] = 0;
brianeason92 0:64079f49da67 110 command[2] = mode;
brianeason92 0:64079f49da67 111
brianeason92 0:64079f49da67 112 writeCOMMAND(command, 3);
brianeason92 0:64079f49da67 113 }
brianeason92 0:64079f49da67 114
brianeason92 0:64079f49da67 115 //****************************************************************************************************
brianeason92 0:64079f49da67 116 void uLCD_4DGL :: text_italic(char mode) // set text mode
brianeason92 0:64079f49da67 117 {
brianeason92 0:64079f49da67 118 char command[3]= "";
brianeason92 0:64079f49da67 119
brianeason92 0:64079f49da67 120 command[0] = TEXTITALIC;
brianeason92 0:64079f49da67 121 command[1] = 0;
brianeason92 0:64079f49da67 122 command[2] = mode;
brianeason92 0:64079f49da67 123
brianeason92 0:64079f49da67 124 writeCOMMAND(command, 3);
brianeason92 0:64079f49da67 125 }
brianeason92 0:64079f49da67 126
brianeason92 0:64079f49da67 127 //****************************************************************************************************
brianeason92 0:64079f49da67 128 void uLCD_4DGL :: text_inverse(char mode) // set text mode
brianeason92 0:64079f49da67 129 {
brianeason92 0:64079f49da67 130 char command[3]= "";
brianeason92 0:64079f49da67 131
brianeason92 0:64079f49da67 132 command[0] = TEXTINVERSE;
brianeason92 0:64079f49da67 133 command[1] = 0;
brianeason92 0:64079f49da67 134 command[2] = mode;
brianeason92 0:64079f49da67 135
brianeason92 0:64079f49da67 136 writeCOMMAND(command, 3);
brianeason92 0:64079f49da67 137 }
brianeason92 0:64079f49da67 138
brianeason92 0:64079f49da67 139 //****************************************************************************************************
brianeason92 0:64079f49da67 140 void uLCD_4DGL :: text_underline(char mode) // set text mode
brianeason92 0:64079f49da67 141 {
brianeason92 0:64079f49da67 142 char command[3]= "";
brianeason92 0:64079f49da67 143
brianeason92 0:64079f49da67 144 command[0] = TEXTUNDERLINE;
brianeason92 0:64079f49da67 145 command[1] = 0;
brianeason92 0:64079f49da67 146 command[2] = mode;
brianeason92 0:64079f49da67 147
brianeason92 0:64079f49da67 148 writeCOMMAND(command, 3);
brianeason92 0:64079f49da67 149 }
brianeason92 0:64079f49da67 150
brianeason92 0:64079f49da67 151 //****************************************************************************************************
brianeason92 0:64079f49da67 152 void uLCD_4DGL :: text_width(char width) // set text width
brianeason92 0:64079f49da67 153 {
brianeason92 0:64079f49da67 154 char command[3]= "";
brianeason92 0:64079f49da67 155
brianeason92 0:64079f49da67 156 command[0] = TEXTWIDTH;
brianeason92 0:64079f49da67 157 command[1] = 0;
brianeason92 0:64079f49da67 158 command[2] = width;
brianeason92 0:64079f49da67 159 current_wf = width;
brianeason92 0:64079f49da67 160 max_col = current_w / (current_fx*current_wf);
brianeason92 0:64079f49da67 161 writeCOMMAND(command, 3);
brianeason92 0:64079f49da67 162 }
brianeason92 0:64079f49da67 163
brianeason92 0:64079f49da67 164 //****************************************************************************************************
brianeason92 0:64079f49da67 165 void uLCD_4DGL :: text_height(char height) // set text height
brianeason92 0:64079f49da67 166 {
brianeason92 0:64079f49da67 167 char command[3]= "";
brianeason92 0:64079f49da67 168
brianeason92 0:64079f49da67 169 command[0] = TEXTHEIGHT;
brianeason92 0:64079f49da67 170 command[1] = 0;
brianeason92 0:64079f49da67 171 command[2] = height;
brianeason92 0:64079f49da67 172 current_hf = height;
brianeason92 0:64079f49da67 173 max_row = current_h / (current_fy*current_hf);
brianeason92 0:64079f49da67 174 writeCOMMAND(command, 3);
brianeason92 0:64079f49da67 175 }
brianeason92 0:64079f49da67 176
brianeason92 0:64079f49da67 177
brianeason92 0:64079f49da67 178 //****************************************************************************************************
brianeason92 0:64079f49da67 179 void uLCD_4DGL :: text_char(char c, char col, char row, int color) // draw a text char
brianeason92 0:64079f49da67 180 {
brianeason92 0:64079f49da67 181 char command[6]= "";
brianeason92 0:64079f49da67 182 command[0] = 0xE4; //move cursor
brianeason92 0:64079f49da67 183 command[1] = 0;
brianeason92 0:64079f49da67 184 command[2] = row;
brianeason92 0:64079f49da67 185 command[3] = 0;
brianeason92 0:64079f49da67 186 command[4] = col;
brianeason92 0:64079f49da67 187 writeCOMMAND(command, 5);
brianeason92 0:64079f49da67 188
brianeason92 0:64079f49da67 189 command[0] = 0x7F; //set color
brianeason92 0:64079f49da67 190
brianeason92 0:64079f49da67 191 int red5 = (color >> (16 + 3)) & 0x1F; // get red on 5 bits
brianeason92 0:64079f49da67 192 int green6 = (color >> (8 + 2)) & 0x3F; // get green on 6 bits
brianeason92 0:64079f49da67 193 int blue5 = (color >> (0 + 3)) & 0x1F; // get blue on 5 bits
brianeason92 0:64079f49da67 194
brianeason92 0:64079f49da67 195 command[1] = ((red5 << 3) + (green6 >> 3)) & 0xFF; // first part of 16 bits color
brianeason92 0:64079f49da67 196 command[2] = ((green6 << 5) + (blue5 >> 0)) & 0xFF; // second part of 16 bits color
brianeason92 0:64079f49da67 197 writeCOMMAND(command, 3);
brianeason92 0:64079f49da67 198
brianeason92 0:64079f49da67 199 command[0] = TEXTCHAR; //print char
brianeason92 0:64079f49da67 200 command[1] = 0;
brianeason92 0:64079f49da67 201 command[2] = c;
brianeason92 0:64079f49da67 202 writeCOMMAND(command, 3);
brianeason92 0:64079f49da67 203
brianeason92 0:64079f49da67 204 }
brianeason92 0:64079f49da67 205
brianeason92 0:64079f49da67 206
brianeason92 0:64079f49da67 207 //****************************************************************************************************
brianeason92 0:64079f49da67 208 void uLCD_4DGL :: text_string(char *s, char col, char row, char font, int color) // draw a text string
brianeason92 0:64079f49da67 209 {
brianeason92 0:64079f49da67 210
brianeason92 0:64079f49da67 211 char command[1000]= "";
brianeason92 0:64079f49da67 212 int size = strlen(s);
brianeason92 0:64079f49da67 213 int i = 0;
brianeason92 0:64079f49da67 214
brianeason92 0:64079f49da67 215 set_font(font);
brianeason92 0:64079f49da67 216
brianeason92 0:64079f49da67 217 command[0] = 0xE4; //move cursor
brianeason92 0:64079f49da67 218 command[1] = 0;
brianeason92 0:64079f49da67 219 command[2] = row;
brianeason92 0:64079f49da67 220 command[3] = 0;
brianeason92 0:64079f49da67 221 command[4] = col;
brianeason92 0:64079f49da67 222 writeCOMMAND(command, 5);
brianeason92 0:64079f49da67 223
brianeason92 0:64079f49da67 224 command[0] = 0x7F; //set color
brianeason92 0:64079f49da67 225 int red5 = (color >> (16 + 3)) & 0x1F; // get red on 5 bits
brianeason92 0:64079f49da67 226 int green6 = (color >> (8 + 2)) & 0x3F; // get green on 6 bits
brianeason92 0:64079f49da67 227 int blue5 = (color >> (0 + 3)) & 0x1F; // get blue on 5 bits
brianeason92 0:64079f49da67 228
brianeason92 0:64079f49da67 229 command[1] = ((red5 << 3) + (green6 >> 3)) & 0xFF; // first part of 16 bits color
brianeason92 0:64079f49da67 230 command[2] = ((green6 << 5) + (blue5 >> 0)) & 0xFF; // second part of 16 bits color
brianeason92 0:64079f49da67 231 writeCOMMAND(command, 3);
brianeason92 0:64079f49da67 232
brianeason92 0:64079f49da67 233 command[0] = TEXTSTRING;
brianeason92 0:64079f49da67 234 for (i=0; i<size; i++) command[1+i] = s[i];
brianeason92 0:64079f49da67 235 command[1+size] = 0;
brianeason92 0:64079f49da67 236 writeCOMMANDnull(command, 2 + size);
brianeason92 0:64079f49da67 237 }
brianeason92 0:64079f49da67 238
brianeason92 0:64079f49da67 239
brianeason92 0:64079f49da67 240
brianeason92 0:64079f49da67 241 //****************************************************************************************************
brianeason92 0:64079f49da67 242 void uLCD_4DGL :: locate(char col, char row) // place text curssor at col, row
brianeason92 0:64079f49da67 243 {
brianeason92 0:64079f49da67 244 char command[5] = "";
brianeason92 0:64079f49da67 245 current_col = col;
brianeason92 0:64079f49da67 246 current_row = row;
brianeason92 0:64079f49da67 247 command[0] = MOVECURSOR; //move cursor
brianeason92 0:64079f49da67 248 command[1] = 0;
brianeason92 0:64079f49da67 249 command[2] = current_row;
brianeason92 0:64079f49da67 250 command[3] = 0;
brianeason92 0:64079f49da67 251 command[4] = current_col;
brianeason92 0:64079f49da67 252 writeCOMMAND(command, 5);
brianeason92 0:64079f49da67 253 }
brianeason92 0:64079f49da67 254
brianeason92 0:64079f49da67 255 //****************************************************************************************************
brianeason92 0:64079f49da67 256 void uLCD_4DGL :: color(int color) // set text color
brianeason92 0:64079f49da67 257 {
brianeason92 0:64079f49da67 258 char command[5] = "";
brianeason92 0:64079f49da67 259 current_color = color;
brianeason92 0:64079f49da67 260 command[0] = 0x7F; //set color
brianeason92 0:64079f49da67 261
brianeason92 0:64079f49da67 262 int red5 = (color >> (16 + 3)) & 0x1F; // get red on 5 bits
brianeason92 0:64079f49da67 263 int green6 = (color >> (8 + 2)) & 0x3F; // get green on 6 bits
brianeason92 0:64079f49da67 264 int blue5 = (color >> (0 + 3)) & 0x1F; // get blue on 5 bits
brianeason92 0:64079f49da67 265
brianeason92 0:64079f49da67 266 command[1] = ((red5 << 3) + (green6 >> 3)) & 0xFF; // first part of 16 bits color
brianeason92 0:64079f49da67 267 command[2] = ((green6 << 5) + (blue5 >> 0)) & 0xFF; // second part of 16 bits color
brianeason92 0:64079f49da67 268 writeCOMMAND(command, 3);
brianeason92 0:64079f49da67 269 }
brianeason92 0:64079f49da67 270
brianeason92 0:64079f49da67 271 //****************************************************************************************************
brianeason92 0:64079f49da67 272 void uLCD_4DGL :: putc(char c) // place char at current cursor position
brianeason92 0:64079f49da67 273 //used by virtual printf function _putc
brianeason92 0:64079f49da67 274 {
brianeason92 0:64079f49da67 275 char command[6] ="";
brianeason92 0:64079f49da67 276 if(c<0x20) {
brianeason92 0:64079f49da67 277 if(c=='\n') {
brianeason92 0:64079f49da67 278 current_col = 0;
brianeason92 0:64079f49da67 279 current_row++;
brianeason92 0:64079f49da67 280 command[0] = MOVECURSOR; //move cursor to start of next line
brianeason92 0:64079f49da67 281 command[1] = 0;
brianeason92 0:64079f49da67 282 command[2] = current_row;
brianeason92 0:64079f49da67 283 command[3] = 0;
brianeason92 0:64079f49da67 284 command[4] = current_col;
brianeason92 0:64079f49da67 285 writeCOMMAND(command, 5);
brianeason92 0:64079f49da67 286 }
brianeason92 0:64079f49da67 287 if(c=='\r') {
brianeason92 0:64079f49da67 288 current_col = 0;
brianeason92 0:64079f49da67 289 command[0] = MOVECURSOR; //move cursor to start of line
brianeason92 0:64079f49da67 290 command[1] = 0;
brianeason92 0:64079f49da67 291 command[2] = current_row;
brianeason92 0:64079f49da67 292 command[3] = 0;
brianeason92 0:64079f49da67 293 command[4] = current_col;
brianeason92 0:64079f49da67 294 writeCOMMAND(command, 5);
brianeason92 0:64079f49da67 295 }
brianeason92 0:64079f49da67 296 if(c=='\f') {
brianeason92 0:64079f49da67 297 uLCD_4DGL::cls(); //clear screen on form feed
brianeason92 0:64079f49da67 298 }
brianeason92 0:64079f49da67 299 } else {
brianeason92 0:64079f49da67 300 command[0] = PUTCHAR;
brianeason92 0:64079f49da67 301 command[1] = 0x00;
brianeason92 0:64079f49da67 302 command[2] = c;
brianeason92 0:64079f49da67 303 writeCOMMAND(command,3);
brianeason92 0:64079f49da67 304 current_col++;
brianeason92 0:64079f49da67 305 }
brianeason92 0:64079f49da67 306 if (current_col == max_col) {
brianeason92 0:64079f49da67 307 current_col = 0;
brianeason92 0:64079f49da67 308 current_row++;
brianeason92 0:64079f49da67 309 command[0] = MOVECURSOR; //move cursor to next line
brianeason92 0:64079f49da67 310 command[1] = 0;
brianeason92 0:64079f49da67 311 command[2] = current_row;
brianeason92 0:64079f49da67 312 command[3] = 0;
brianeason92 0:64079f49da67 313 command[4] = current_col;
brianeason92 0:64079f49da67 314 writeCOMMAND(command, 5);
brianeason92 0:64079f49da67 315 }
brianeason92 0:64079f49da67 316 if (current_row == max_row) {
brianeason92 0:64079f49da67 317 current_row = 0;
brianeason92 0:64079f49da67 318 command[0] = MOVECURSOR; //move cursor back to start
brianeason92 0:64079f49da67 319 command[1] = 0;
brianeason92 0:64079f49da67 320 command[2] = current_row;
brianeason92 0:64079f49da67 321 command[3] = 0;
brianeason92 0:64079f49da67 322 command[4] = current_col;
brianeason92 0:64079f49da67 323 writeCOMMAND(command, 5);
brianeason92 0:64079f49da67 324 }
brianeason92 0:64079f49da67 325 }
brianeason92 0:64079f49da67 326
brianeason92 0:64079f49da67 327
brianeason92 0:64079f49da67 328 //****************************************************************************************************
brianeason92 0:64079f49da67 329 void uLCD_4DGL :: puts(char *s) // place string at current cursor position
brianeason92 0:64079f49da67 330 {
brianeason92 0:64079f49da67 331
brianeason92 0:64079f49da67 332 text_string(s, current_col, current_row, current_font, current_color);
brianeason92 0:64079f49da67 333
brianeason92 0:64079f49da67 334 current_col += strlen(s);
brianeason92 0:64079f49da67 335
brianeason92 0:64079f49da67 336 if (current_col >= max_col) {
brianeason92 0:64079f49da67 337 current_row += current_col / max_col;
brianeason92 0:64079f49da67 338 current_col %= max_col;
brianeason92 0:64079f49da67 339 }
brianeason92 0:64079f49da67 340 if (current_row >= max_row) {
brianeason92 0:64079f49da67 341 current_row %= max_row;
brianeason92 0:64079f49da67 342 }
brianeason92 0:64079f49da67 343 }