Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of 4DGL by
TFT_4DGL_Text.cpp@0:1102d253f057, 2010-09-07 (annotated)
- Committer:
- Kerpower
- Date:
- Tue Sep 07 12:07:29 2010 +0000
- Revision:
- 0:1102d253f057
- Child:
- 9:4b25d5413a06
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Kerpower | 0:1102d253f057 | 1 | // |
Kerpower | 0:1102d253f057 | 2 | // TFT_4DGL is a class to drive 4D Systems TFT touch screens |
Kerpower | 0:1102d253f057 | 3 | // |
Kerpower | 0:1102d253f057 | 4 | // Copyright (C) <2010> Stephane ROCHON <stephane.rochon at free.fr> |
Kerpower | 0:1102d253f057 | 5 | // |
Kerpower | 0:1102d253f057 | 6 | // TFT_4DGL is free software: you can redistribute it and/or modify |
Kerpower | 0:1102d253f057 | 7 | // it under the terms of the GNU General Public License as published by |
Kerpower | 0:1102d253f057 | 8 | // the Free Software Foundation, either version 3 of the License, or |
Kerpower | 0:1102d253f057 | 9 | // (at your option) any later version. |
Kerpower | 0:1102d253f057 | 10 | // |
Kerpower | 0:1102d253f057 | 11 | // TFT_4DGL is distributed in the hope that it will be useful, |
Kerpower | 0:1102d253f057 | 12 | // but WITHOUT ANY WARRANTY; without even the implied warranty of |
Kerpower | 0:1102d253f057 | 13 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
Kerpower | 0:1102d253f057 | 14 | // GNU General Public License for more details. |
Kerpower | 0:1102d253f057 | 15 | // |
Kerpower | 0:1102d253f057 | 16 | // You should have received a copy of the GNU General Public License |
Kerpower | 0:1102d253f057 | 17 | // along with TFT_4DGL. If not, see <http://www.gnu.org/licenses/>. |
Kerpower | 0:1102d253f057 | 18 | |
Kerpower | 0:1102d253f057 | 19 | #include "mbed.h" |
Kerpower | 0:1102d253f057 | 20 | #include "TFT_4DGL.h" |
Kerpower | 0:1102d253f057 | 21 | |
Kerpower | 0:1102d253f057 | 22 | //**************************************************************************************************** |
Kerpower | 0:1102d253f057 | 23 | void TFT_4DGL :: set_font(char mode) { // set font size |
Kerpower | 0:1102d253f057 | 24 | char command[2]= ""; |
Kerpower | 0:1102d253f057 | 25 | |
Kerpower | 0:1102d253f057 | 26 | int w, h, fx = 8, fy = 8; |
Kerpower | 0:1102d253f057 | 27 | |
Kerpower | 0:1102d253f057 | 28 | command[0] = SETFONT; |
Kerpower | 0:1102d253f057 | 29 | command[1] = mode; |
Kerpower | 0:1102d253f057 | 30 | |
Kerpower | 0:1102d253f057 | 31 | current_font = mode; |
Kerpower | 0:1102d253f057 | 32 | |
Kerpower | 0:1102d253f057 | 33 | if (current_orientation == IS_PORTRAIT) { |
Kerpower | 0:1102d253f057 | 34 | w = SIZE_X; |
Kerpower | 0:1102d253f057 | 35 | h = SIZE_Y; |
Kerpower | 0:1102d253f057 | 36 | } else { |
Kerpower | 0:1102d253f057 | 37 | w = SIZE_Y; |
Kerpower | 0:1102d253f057 | 38 | h = SIZE_X; |
Kerpower | 0:1102d253f057 | 39 | } |
Kerpower | 0:1102d253f057 | 40 | |
Kerpower | 0:1102d253f057 | 41 | switch (mode) { |
Kerpower | 0:1102d253f057 | 42 | case FONT_5X7 : |
Kerpower | 0:1102d253f057 | 43 | fx = 6; |
Kerpower | 0:1102d253f057 | 44 | fy = 8; |
Kerpower | 0:1102d253f057 | 45 | break; |
Kerpower | 0:1102d253f057 | 46 | case FONT_8X8 : |
Kerpower | 0:1102d253f057 | 47 | fx = 8; |
Kerpower | 0:1102d253f057 | 48 | fy = 8; |
Kerpower | 0:1102d253f057 | 49 | break; |
Kerpower | 0:1102d253f057 | 50 | case FONT_8X12 : |
Kerpower | 0:1102d253f057 | 51 | fx = 8; |
Kerpower | 0:1102d253f057 | 52 | fy = 12; |
Kerpower | 0:1102d253f057 | 53 | break; |
Kerpower | 0:1102d253f057 | 54 | case FONT_12X16 : |
Kerpower | 0:1102d253f057 | 55 | fx = 12; |
Kerpower | 0:1102d253f057 | 56 | fy = 16; |
Kerpower | 0:1102d253f057 | 57 | break; |
Kerpower | 0:1102d253f057 | 58 | } |
Kerpower | 0:1102d253f057 | 59 | |
Kerpower | 0:1102d253f057 | 60 | max_col = w / fx; |
Kerpower | 0:1102d253f057 | 61 | max_row = h / fy; |
Kerpower | 0:1102d253f057 | 62 | |
Kerpower | 0:1102d253f057 | 63 | writeCOMMAND(command, 2); |
Kerpower | 0:1102d253f057 | 64 | } |
Kerpower | 0:1102d253f057 | 65 | |
Kerpower | 0:1102d253f057 | 66 | //**************************************************************************************************** |
Kerpower | 0:1102d253f057 | 67 | void TFT_4DGL :: text_mode(char mode) { // set text mode |
Kerpower | 0:1102d253f057 | 68 | char command[2]= ""; |
Kerpower | 0:1102d253f057 | 69 | |
Kerpower | 0:1102d253f057 | 70 | command[0] = TEXTMODE; |
Kerpower | 0:1102d253f057 | 71 | command[1] = mode; |
Kerpower | 0:1102d253f057 | 72 | |
Kerpower | 0:1102d253f057 | 73 | writeCOMMAND(command, 2); |
Kerpower | 0:1102d253f057 | 74 | } |
Kerpower | 0:1102d253f057 | 75 | |
Kerpower | 0:1102d253f057 | 76 | //**************************************************************************************************** |
Kerpower | 0:1102d253f057 | 77 | void TFT_4DGL :: text_char(char c, char col, char row, int color) { // draw a text char |
Kerpower | 0:1102d253f057 | 78 | char command[6]= ""; |
Kerpower | 0:1102d253f057 | 79 | |
Kerpower | 0:1102d253f057 | 80 | command[0] = TEXTCHAR; |
Kerpower | 0:1102d253f057 | 81 | |
Kerpower | 0:1102d253f057 | 82 | command[1] = c; |
Kerpower | 0:1102d253f057 | 83 | command[2] = col; |
Kerpower | 0:1102d253f057 | 84 | command[3] = row; |
Kerpower | 0:1102d253f057 | 85 | |
Kerpower | 0:1102d253f057 | 86 | int red5 = (color >> (16 + 3)) & 0x1F; // get red on 5 bits |
Kerpower | 0:1102d253f057 | 87 | int green6 = (color >> (8 + 2)) & 0x3F; // get green on 6 bits |
Kerpower | 0:1102d253f057 | 88 | int blue5 = (color >> (0 + 3)) & 0x1F; // get blue on 5 bits |
Kerpower | 0:1102d253f057 | 89 | |
Kerpower | 0:1102d253f057 | 90 | command[4] = ((red5 << 3) + (green6 >> 3)) & 0xFF; // first part of 16 bits color |
Kerpower | 0:1102d253f057 | 91 | command[5] = ((green6 << 5) + (blue5 >> 0)) & 0xFF; // second part of 16 bits color |
Kerpower | 0:1102d253f057 | 92 | |
Kerpower | 0:1102d253f057 | 93 | writeCOMMAND(command, 8); |
Kerpower | 0:1102d253f057 | 94 | } |
Kerpower | 0:1102d253f057 | 95 | |
Kerpower | 0:1102d253f057 | 96 | //**************************************************************************************************** |
Kerpower | 0:1102d253f057 | 97 | void TFT_4DGL :: graphic_char(char c, int x, int y, int color, char width, char height) { // draw a graphic char |
Kerpower | 0:1102d253f057 | 98 | char command[10]= ""; |
Kerpower | 0:1102d253f057 | 99 | |
Kerpower | 0:1102d253f057 | 100 | command[0] = GRAPHCHAR; |
Kerpower | 0:1102d253f057 | 101 | |
Kerpower | 0:1102d253f057 | 102 | command[1] = c; |
Kerpower | 0:1102d253f057 | 103 | |
Kerpower | 0:1102d253f057 | 104 | command[2] = (x >> 8) & 0xFF; |
Kerpower | 0:1102d253f057 | 105 | command[3] = x & 0xFF; |
Kerpower | 0:1102d253f057 | 106 | |
Kerpower | 0:1102d253f057 | 107 | command[4] = (y >> 8) & 0xFF; |
Kerpower | 0:1102d253f057 | 108 | command[5] = y & 0xFF; |
Kerpower | 0:1102d253f057 | 109 | |
Kerpower | 0:1102d253f057 | 110 | int red5 = (color >> (16 + 3)) & 0x1F; // get red on 5 bits |
Kerpower | 0:1102d253f057 | 111 | int green6 = (color >> (8 + 2)) & 0x3F; // get green on 6 bits |
Kerpower | 0:1102d253f057 | 112 | int blue5 = (color >> (0 + 3)) & 0x1F; // get blue on 5 bits |
Kerpower | 0:1102d253f057 | 113 | |
Kerpower | 0:1102d253f057 | 114 | command[6] = ((red5 << 3) + (green6 >> 3)) & 0xFF; // first part of 16 bits color |
Kerpower | 0:1102d253f057 | 115 | command[7] = ((green6 << 5) + (blue5 >> 0)) & 0xFF; // second part of 16 bits color |
Kerpower | 0:1102d253f057 | 116 | |
Kerpower | 0:1102d253f057 | 117 | command[8] = width; |
Kerpower | 0:1102d253f057 | 118 | |
Kerpower | 0:1102d253f057 | 119 | command[9] = height; |
Kerpower | 0:1102d253f057 | 120 | |
Kerpower | 0:1102d253f057 | 121 | writeCOMMAND(command, 10); |
Kerpower | 0:1102d253f057 | 122 | } |
Kerpower | 0:1102d253f057 | 123 | |
Kerpower | 0:1102d253f057 | 124 | //**************************************************************************************************** |
Kerpower | 0:1102d253f057 | 125 | void TFT_4DGL :: text_string(char *s, char col, char row, char font, int color) { // draw a text string |
Kerpower | 0:1102d253f057 | 126 | |
Kerpower | 0:1102d253f057 | 127 | char command[1000]= ""; |
Kerpower | 0:1102d253f057 | 128 | int size = strlen(s); |
Kerpower | 0:1102d253f057 | 129 | int i = 0; |
Kerpower | 0:1102d253f057 | 130 | |
Kerpower | 0:1102d253f057 | 131 | command[0] = TEXTSTRING; |
Kerpower | 0:1102d253f057 | 132 | |
Kerpower | 0:1102d253f057 | 133 | command[1] = col; |
Kerpower | 0:1102d253f057 | 134 | command[2] = row; |
Kerpower | 0:1102d253f057 | 135 | |
Kerpower | 0:1102d253f057 | 136 | command[3] = font; |
Kerpower | 0:1102d253f057 | 137 | |
Kerpower | 0:1102d253f057 | 138 | int red5 = (color >> (16 + 3)) & 0x1F; // get red on 5 bits |
Kerpower | 0:1102d253f057 | 139 | int green6 = (color >> (8 + 2)) & 0x3F; // get green on 6 bits |
Kerpower | 0:1102d253f057 | 140 | int blue5 = (color >> (0 + 3)) & 0x1F; // get blue on 5 bits |
Kerpower | 0:1102d253f057 | 141 | |
Kerpower | 0:1102d253f057 | 142 | command[4] = ((red5 << 3) + (green6 >> 3)) & 0xFF; // first part of 16 bits color |
Kerpower | 0:1102d253f057 | 143 | command[5] = ((green6 << 5) + (blue5 >> 0)) & 0xFF; // second part of 16 bits color |
Kerpower | 0:1102d253f057 | 144 | |
Kerpower | 0:1102d253f057 | 145 | for (i=0; i<size; i++) command[6+i] = s[i]; |
Kerpower | 0:1102d253f057 | 146 | |
Kerpower | 0:1102d253f057 | 147 | command[6+size] = 0; |
Kerpower | 0:1102d253f057 | 148 | |
Kerpower | 0:1102d253f057 | 149 | writeCOMMAND(command, 7 + size); |
Kerpower | 0:1102d253f057 | 150 | } |
Kerpower | 0:1102d253f057 | 151 | |
Kerpower | 0:1102d253f057 | 152 | //**************************************************************************************************** |
Kerpower | 0:1102d253f057 | 153 | void TFT_4DGL :: graphic_string(char *s, int x, int y, char font, int color, char width, char height) { // draw a text string |
Kerpower | 0:1102d253f057 | 154 | |
Kerpower | 0:1102d253f057 | 155 | char command[1000]= ""; |
Kerpower | 0:1102d253f057 | 156 | int size = strlen(s); |
Kerpower | 0:1102d253f057 | 157 | int i = 0; |
Kerpower | 0:1102d253f057 | 158 | |
Kerpower | 0:1102d253f057 | 159 | command[0] = GRAPHSTRING; |
Kerpower | 0:1102d253f057 | 160 | |
Kerpower | 0:1102d253f057 | 161 | command[1] = (x >> 8) & 0xFF; |
Kerpower | 0:1102d253f057 | 162 | command[2] = x & 0xFF; |
Kerpower | 0:1102d253f057 | 163 | |
Kerpower | 0:1102d253f057 | 164 | command[3] = (y >> 8) & 0xFF; |
Kerpower | 0:1102d253f057 | 165 | command[4] = y & 0xFF; |
Kerpower | 0:1102d253f057 | 166 | |
Kerpower | 0:1102d253f057 | 167 | command[5] = font; |
Kerpower | 0:1102d253f057 | 168 | |
Kerpower | 0:1102d253f057 | 169 | int red5 = (color >> (16 + 3)) & 0x1F; // get red on 5 bits |
Kerpower | 0:1102d253f057 | 170 | int green6 = (color >> (8 + 2)) & 0x3F; // get green on 6 bits |
Kerpower | 0:1102d253f057 | 171 | int blue5 = (color >> (0 + 3)) & 0x1F; // get blue on 5 bits |
Kerpower | 0:1102d253f057 | 172 | |
Kerpower | 0:1102d253f057 | 173 | command[6] = ((red5 << 3) + (green6 >> 3)) & 0xFF; // first part of 16 bits color |
Kerpower | 0:1102d253f057 | 174 | command[7] = ((green6 << 5) + (blue5 >> 0)) & 0xFF; // second part of 16 bits color |
Kerpower | 0:1102d253f057 | 175 | |
Kerpower | 0:1102d253f057 | 176 | command[8] = width; |
Kerpower | 0:1102d253f057 | 177 | |
Kerpower | 0:1102d253f057 | 178 | command[9] = height; |
Kerpower | 0:1102d253f057 | 179 | |
Kerpower | 0:1102d253f057 | 180 | for (i=0; i<size; i++) command[10+i] = s[i]; |
Kerpower | 0:1102d253f057 | 181 | |
Kerpower | 0:1102d253f057 | 182 | command[10+size] = 0; |
Kerpower | 0:1102d253f057 | 183 | |
Kerpower | 0:1102d253f057 | 184 | writeCOMMAND(command, 11 + size); |
Kerpower | 0:1102d253f057 | 185 | } |
Kerpower | 0:1102d253f057 | 186 | |
Kerpower | 0:1102d253f057 | 187 | //**************************************************************************************************** |
Kerpower | 0:1102d253f057 | 188 | void TFT_4DGL :: text_button(char *s, char mode, int x, int y, int button_color, char font, int text_color, char width, char height) { // draw a text string |
Kerpower | 0:1102d253f057 | 189 | |
Kerpower | 0:1102d253f057 | 190 | char command[1000]= ""; |
Kerpower | 0:1102d253f057 | 191 | int size = strlen(s); |
Kerpower | 0:1102d253f057 | 192 | int i = 0, red5, green6, blue5; |
Kerpower | 0:1102d253f057 | 193 | |
Kerpower | 0:1102d253f057 | 194 | command[0] = TEXTBUTTON; |
Kerpower | 0:1102d253f057 | 195 | |
Kerpower | 0:1102d253f057 | 196 | command[1] = mode; |
Kerpower | 0:1102d253f057 | 197 | |
Kerpower | 0:1102d253f057 | 198 | command[2] = (x >> 8) & 0xFF; |
Kerpower | 0:1102d253f057 | 199 | command[3] = x & 0xFF; |
Kerpower | 0:1102d253f057 | 200 | |
Kerpower | 0:1102d253f057 | 201 | command[4] = (y >> 8) & 0xFF; |
Kerpower | 0:1102d253f057 | 202 | command[5] = y & 0xFF; |
Kerpower | 0:1102d253f057 | 203 | |
Kerpower | 0:1102d253f057 | 204 | red5 = (button_color >> (16 + 3)) & 0x1F; // get red on 5 bits |
Kerpower | 0:1102d253f057 | 205 | green6 = (button_color >> (8 + 2)) & 0x3F; // get green on 6 bits |
Kerpower | 0:1102d253f057 | 206 | blue5 = (button_color >> (0 + 3)) & 0x1F; // get blue on 5 bits |
Kerpower | 0:1102d253f057 | 207 | |
Kerpower | 0:1102d253f057 | 208 | command[6] = ((red5 << 3) + (green6 >> 3)) & 0xFF; // first part of 16 bits color |
Kerpower | 0:1102d253f057 | 209 | command[7] = ((green6 << 5) + (blue5 >> 0)) & 0xFF; // second part of 16 bits color |
Kerpower | 0:1102d253f057 | 210 | |
Kerpower | 0:1102d253f057 | 211 | command[8] = font; |
Kerpower | 0:1102d253f057 | 212 | |
Kerpower | 0:1102d253f057 | 213 | red5 = (text_color >> (16 + 3)) & 0x1F; // get red on 5 bits |
Kerpower | 0:1102d253f057 | 214 | green6 = (text_color >> (8 + 2)) & 0x3F; // get green on 6 bits |
Kerpower | 0:1102d253f057 | 215 | blue5 = (text_color >> (0 + 3)) & 0x1F; // get blue on 5 bits |
Kerpower | 0:1102d253f057 | 216 | |
Kerpower | 0:1102d253f057 | 217 | command[9] = ((red5 << 3) + (green6 >> 3)) & 0xFF; // first part of 16 bits color |
Kerpower | 0:1102d253f057 | 218 | command[10] = ((green6 << 5) + (blue5 >> 0)) & 0xFF; // second part of 16 bits color |
Kerpower | 0:1102d253f057 | 219 | |
Kerpower | 0:1102d253f057 | 220 | command[11] = width; |
Kerpower | 0:1102d253f057 | 221 | |
Kerpower | 0:1102d253f057 | 222 | command[12] = height; |
Kerpower | 0:1102d253f057 | 223 | |
Kerpower | 0:1102d253f057 | 224 | for (i=0; i<size; i++) command[13+i] = s[i]; |
Kerpower | 0:1102d253f057 | 225 | |
Kerpower | 0:1102d253f057 | 226 | command[13+size] = 0; |
Kerpower | 0:1102d253f057 | 227 | |
Kerpower | 0:1102d253f057 | 228 | writeCOMMAND(command, 14 + size); |
Kerpower | 0:1102d253f057 | 229 | } |
Kerpower | 0:1102d253f057 | 230 | |
Kerpower | 0:1102d253f057 | 231 | //**************************************************************************************************** |
Kerpower | 0:1102d253f057 | 232 | void TFT_4DGL :: locate(char col, char row) { // place text curssor at col, row |
Kerpower | 0:1102d253f057 | 233 | current_col = col; |
Kerpower | 0:1102d253f057 | 234 | current_row = row; |
Kerpower | 0:1102d253f057 | 235 | } |
Kerpower | 0:1102d253f057 | 236 | |
Kerpower | 0:1102d253f057 | 237 | //**************************************************************************************************** |
Kerpower | 0:1102d253f057 | 238 | void TFT_4DGL :: color(int color) { // set text color |
Kerpower | 0:1102d253f057 | 239 | current_color = color; |
Kerpower | 0:1102d253f057 | 240 | } |
Kerpower | 0:1102d253f057 | 241 | |
Kerpower | 0:1102d253f057 | 242 | //**************************************************************************************************** |
Kerpower | 0:1102d253f057 | 243 | void TFT_4DGL :: putc(char c) { // place char at current cursor position |
Kerpower | 0:1102d253f057 | 244 | |
Kerpower | 0:1102d253f057 | 245 | text_char(c, current_col++, current_row, current_color); |
Kerpower | 0:1102d253f057 | 246 | |
Kerpower | 0:1102d253f057 | 247 | if (current_col == max_col) { |
Kerpower | 0:1102d253f057 | 248 | current_col = 0; |
Kerpower | 0:1102d253f057 | 249 | current_row++; |
Kerpower | 0:1102d253f057 | 250 | } |
Kerpower | 0:1102d253f057 | 251 | if (current_row == max_row) { |
Kerpower | 0:1102d253f057 | 252 | current_row = 0; |
Kerpower | 0:1102d253f057 | 253 | } |
Kerpower | 0:1102d253f057 | 254 | } |
Kerpower | 0:1102d253f057 | 255 | |
Kerpower | 0:1102d253f057 | 256 | //**************************************************************************************************** |
Kerpower | 0:1102d253f057 | 257 | void TFT_4DGL :: puts(char *s) { // place string at current cursor position |
Kerpower | 0:1102d253f057 | 258 | |
Kerpower | 0:1102d253f057 | 259 | text_string(s, current_col, current_row, current_font, current_color); |
Kerpower | 0:1102d253f057 | 260 | |
Kerpower | 0:1102d253f057 | 261 | current_col += strlen(s); |
Kerpower | 0:1102d253f057 | 262 | |
Kerpower | 0:1102d253f057 | 263 | if (current_col >= max_col) { |
Kerpower | 0:1102d253f057 | 264 | current_row += current_col / max_col; |
Kerpower | 0:1102d253f057 | 265 | current_col %= max_col; |
Kerpower | 0:1102d253f057 | 266 | } |
Kerpower | 0:1102d253f057 | 267 | if (current_row >= max_row) { |
Kerpower | 0:1102d253f057 | 268 | current_row %= max_row; |
Kerpower | 0:1102d253f057 | 269 | } |
Kerpower | 0:1102d253f057 | 270 | } |