This library is the modified library of 4DGL by Stephane ROCHON <stephane.rochon at free.fr> modified at drawImage() by Kazushi Mukaiyama <i@kazushi.info>

Committer:
kazushi2008
Date:
Fri Oct 29 02:26:05 2010 +0000
Revision:
0:c2aeac7c2d15

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kazushi2008 0:c2aeac7c2d15 1 //
kazushi2008 0:c2aeac7c2d15 2 // TFT_4DGL is a class to drive 4D Systems TFT touch screens
kazushi2008 0:c2aeac7c2d15 3 //
kazushi2008 0:c2aeac7c2d15 4 // Copyright (C) <2010> Stephane ROCHON <stephane.rochon at free.fr>
kazushi2008 0:c2aeac7c2d15 5 // modified at drawImage() by Kazushi Mukaiyama <i@kazushi.info>
kazushi2008 0:c2aeac7c2d15 6 //
kazushi2008 0:c2aeac7c2d15 7 // TFT_4DGL is free software: you can redistribute it and/or modify
kazushi2008 0:c2aeac7c2d15 8 // it under the terms of the GNU General Public License as published by
kazushi2008 0:c2aeac7c2d15 9 // the Free Software Foundation, either version 3 of the License, or
kazushi2008 0:c2aeac7c2d15 10 // (at your option) any later version.
kazushi2008 0:c2aeac7c2d15 11 //
kazushi2008 0:c2aeac7c2d15 12 // TFT_4DGL is distributed in the hope that it will be useful,
kazushi2008 0:c2aeac7c2d15 13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
kazushi2008 0:c2aeac7c2d15 14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
kazushi2008 0:c2aeac7c2d15 15 // GNU General Public License for more details.
kazushi2008 0:c2aeac7c2d15 16 //
kazushi2008 0:c2aeac7c2d15 17 // You should have received a copy of the GNU General Public License
kazushi2008 0:c2aeac7c2d15 18 // along with TFT_4DGL. If not, see <http://www.gnu.org/licenses/>.
kazushi2008 0:c2aeac7c2d15 19
kazushi2008 0:c2aeac7c2d15 20 #include "mbed.h"
kazushi2008 0:c2aeac7c2d15 21 #include "TFT_4DGL.h"
kazushi2008 0:c2aeac7c2d15 22
kazushi2008 0:c2aeac7c2d15 23
kazushi2008 0:c2aeac7c2d15 24 //****************************************************************************************************
kazushi2008 0:c2aeac7c2d15 25 void TFT_4DGL :: circle(int x, int y , int radius, int color) { // draw a circle in (x,y)
kazushi2008 0:c2aeac7c2d15 26 char command[9]= "";
kazushi2008 0:c2aeac7c2d15 27
kazushi2008 0:c2aeac7c2d15 28 command[0] = CIRCLE;
kazushi2008 0:c2aeac7c2d15 29
kazushi2008 0:c2aeac7c2d15 30 command[1] = (x >> 8) & 0xFF;
kazushi2008 0:c2aeac7c2d15 31 command[2] = x & 0xFF;
kazushi2008 0:c2aeac7c2d15 32
kazushi2008 0:c2aeac7c2d15 33 command[3] = (y >> 8) & 0xFF;
kazushi2008 0:c2aeac7c2d15 34 command[4] = y & 0xFF;
kazushi2008 0:c2aeac7c2d15 35
kazushi2008 0:c2aeac7c2d15 36 command[5] = (radius >> 8) & 0xFF;
kazushi2008 0:c2aeac7c2d15 37 command[6] = radius & 0xFF;
kazushi2008 0:c2aeac7c2d15 38
kazushi2008 0:c2aeac7c2d15 39 int red5 = (color >> (16 + 3)) & 0x1F; // get red on 5 bits
kazushi2008 0:c2aeac7c2d15 40 int green6 = (color >> (8 + 2)) & 0x3F; // get green on 6 bits
kazushi2008 0:c2aeac7c2d15 41 int blue5 = (color >> (0 + 3)) & 0x1F; // get blue on 5 bits
kazushi2008 0:c2aeac7c2d15 42
kazushi2008 0:c2aeac7c2d15 43 command[7] = ((red5 << 3) + (green6 >> 3)) & 0xFF; // first part of 16 bits color
kazushi2008 0:c2aeac7c2d15 44 command[8] = ((green6 << 5) + (blue5 >> 0)) & 0xFF; // second part of 16 bits color
kazushi2008 0:c2aeac7c2d15 45
kazushi2008 0:c2aeac7c2d15 46 writeCOMMAND(command, 9);
kazushi2008 0:c2aeac7c2d15 47 }
kazushi2008 0:c2aeac7c2d15 48
kazushi2008 0:c2aeac7c2d15 49 //****************************************************************************************************
kazushi2008 0:c2aeac7c2d15 50 void TFT_4DGL :: triangle(int x1, int y1 , int x2, int y2, int x3, int y3, int color) { // draw a traingle
kazushi2008 0:c2aeac7c2d15 51 char command[15]= "";
kazushi2008 0:c2aeac7c2d15 52
kazushi2008 0:c2aeac7c2d15 53 command[0] = TRIANGLE;
kazushi2008 0:c2aeac7c2d15 54
kazushi2008 0:c2aeac7c2d15 55 command[1] = (x1 >> 8) & 0xFF;
kazushi2008 0:c2aeac7c2d15 56 command[2] = x1 & 0xFF;
kazushi2008 0:c2aeac7c2d15 57
kazushi2008 0:c2aeac7c2d15 58 command[3] = (y1 >> 8) & 0xFF;
kazushi2008 0:c2aeac7c2d15 59 command[4] = y1 & 0xFF;
kazushi2008 0:c2aeac7c2d15 60
kazushi2008 0:c2aeac7c2d15 61 command[5] = (x2 >> 8) & 0xFF;
kazushi2008 0:c2aeac7c2d15 62 command[6] = x2 & 0xFF;
kazushi2008 0:c2aeac7c2d15 63
kazushi2008 0:c2aeac7c2d15 64 command[7] = (y2 >> 8) & 0xFF;
kazushi2008 0:c2aeac7c2d15 65 command[8] = y2 & 0xFF;
kazushi2008 0:c2aeac7c2d15 66
kazushi2008 0:c2aeac7c2d15 67 command[9] = (x3 >> 8) & 0xFF;
kazushi2008 0:c2aeac7c2d15 68 command[10] = x3 & 0xFF;
kazushi2008 0:c2aeac7c2d15 69
kazushi2008 0:c2aeac7c2d15 70 command[11] = (y3 >> 8) & 0xFF;
kazushi2008 0:c2aeac7c2d15 71 command[12] = y3 & 0xFF;
kazushi2008 0:c2aeac7c2d15 72
kazushi2008 0:c2aeac7c2d15 73 int red5 = (color >> (16 + 3)) & 0x1F; // get red on 5 bits
kazushi2008 0:c2aeac7c2d15 74 int green6 = (color >> (8 + 2)) & 0x3F; // get green on 6 bits
kazushi2008 0:c2aeac7c2d15 75 int blue5 = (color >> (0 + 3)) & 0x1F; // get blue on 5 bits
kazushi2008 0:c2aeac7c2d15 76
kazushi2008 0:c2aeac7c2d15 77 command[13] = ((red5 << 3) + (green6 >> 3)) & 0xFF; // first part of 16 bits color
kazushi2008 0:c2aeac7c2d15 78 command[14] = ((green6 << 5) + (blue5 >> 0)) & 0xFF; // second part of 16 bits color
kazushi2008 0:c2aeac7c2d15 79
kazushi2008 0:c2aeac7c2d15 80 writeCOMMAND(command, 15);
kazushi2008 0:c2aeac7c2d15 81 }
kazushi2008 0:c2aeac7c2d15 82
kazushi2008 0:c2aeac7c2d15 83 //****************************************************************************************************
kazushi2008 0:c2aeac7c2d15 84 void TFT_4DGL :: line(int x1, int y1 , int x2, int y2, int color) { // draw a line
kazushi2008 0:c2aeac7c2d15 85 char command[11]= "";
kazushi2008 0:c2aeac7c2d15 86
kazushi2008 0:c2aeac7c2d15 87 command[0] = LINE;
kazushi2008 0:c2aeac7c2d15 88
kazushi2008 0:c2aeac7c2d15 89 command[1] = (x1 >> 8) & 0xFF;
kazushi2008 0:c2aeac7c2d15 90 command[2] = x1 & 0xFF;
kazushi2008 0:c2aeac7c2d15 91
kazushi2008 0:c2aeac7c2d15 92 command[3] = (y1 >> 8) & 0xFF;
kazushi2008 0:c2aeac7c2d15 93 command[4] = y1 & 0xFF;
kazushi2008 0:c2aeac7c2d15 94
kazushi2008 0:c2aeac7c2d15 95 command[5] = (x2 >> 8) & 0xFF;
kazushi2008 0:c2aeac7c2d15 96 command[6] = x2 & 0xFF;
kazushi2008 0:c2aeac7c2d15 97
kazushi2008 0:c2aeac7c2d15 98 command[7] = (y2 >> 8) & 0xFF;
kazushi2008 0:c2aeac7c2d15 99 command[8] = y2 & 0xFF;
kazushi2008 0:c2aeac7c2d15 100
kazushi2008 0:c2aeac7c2d15 101 int red5 = (color >> (16 + 3)) & 0x1F; // get red on 5 bits
kazushi2008 0:c2aeac7c2d15 102 int green6 = (color >> (8 + 2)) & 0x3F; // get green on 6 bits
kazushi2008 0:c2aeac7c2d15 103 int blue5 = (color >> (0 + 3)) & 0x1F; // get blue on 5 bits
kazushi2008 0:c2aeac7c2d15 104
kazushi2008 0:c2aeac7c2d15 105 command[9] = ((red5 << 3) + (green6 >> 3)) & 0xFF; // first part of 16 bits color
kazushi2008 0:c2aeac7c2d15 106 command[10] = ((green6 << 5) + (blue5 >> 0)) & 0xFF; // second part of 16 bits color
kazushi2008 0:c2aeac7c2d15 107
kazushi2008 0:c2aeac7c2d15 108 writeCOMMAND(command, 11);
kazushi2008 0:c2aeac7c2d15 109 }
kazushi2008 0:c2aeac7c2d15 110
kazushi2008 0:c2aeac7c2d15 111 //****************************************************************************************************
kazushi2008 0:c2aeac7c2d15 112 void TFT_4DGL :: rectangle(int x1, int y1 , int x2, int y2, int color) { // draw a rectangle
kazushi2008 0:c2aeac7c2d15 113 char command[11]= "";
kazushi2008 0:c2aeac7c2d15 114
kazushi2008 0:c2aeac7c2d15 115 command[0] = RECTANGLE;
kazushi2008 0:c2aeac7c2d15 116
kazushi2008 0:c2aeac7c2d15 117 command[1] = (x1 >> 8) & 0xFF;
kazushi2008 0:c2aeac7c2d15 118 command[2] = x1 & 0xFF;
kazushi2008 0:c2aeac7c2d15 119
kazushi2008 0:c2aeac7c2d15 120 command[3] = (y1 >> 8) & 0xFF;
kazushi2008 0:c2aeac7c2d15 121 command[4] = y1 & 0xFF;
kazushi2008 0:c2aeac7c2d15 122
kazushi2008 0:c2aeac7c2d15 123 command[5] = (x2 >> 8) & 0xFF;
kazushi2008 0:c2aeac7c2d15 124 command[6] = x2 & 0xFF;
kazushi2008 0:c2aeac7c2d15 125
kazushi2008 0:c2aeac7c2d15 126 command[7] = (y2 >> 8) & 0xFF;
kazushi2008 0:c2aeac7c2d15 127 command[8] = y2 & 0xFF;
kazushi2008 0:c2aeac7c2d15 128
kazushi2008 0:c2aeac7c2d15 129 int red5 = (color >> (16 + 3)) & 0x1F; // get red on 5 bits
kazushi2008 0:c2aeac7c2d15 130 int green6 = (color >> (8 + 2)) & 0x3F; // get green on 6 bits
kazushi2008 0:c2aeac7c2d15 131 int blue5 = (color >> (0 + 3)) & 0x1F; // get blue on 5 bits
kazushi2008 0:c2aeac7c2d15 132
kazushi2008 0:c2aeac7c2d15 133 command[9] = ((red5 << 3) + (green6 >> 3)) & 0xFF; // first part of 16 bits color
kazushi2008 0:c2aeac7c2d15 134 command[10] = ((green6 << 5) + (blue5 >> 0)) & 0xFF; // second part of 16 bits color
kazushi2008 0:c2aeac7c2d15 135
kazushi2008 0:c2aeac7c2d15 136 writeCOMMAND(command, 11);
kazushi2008 0:c2aeac7c2d15 137 }
kazushi2008 0:c2aeac7c2d15 138
kazushi2008 0:c2aeac7c2d15 139 //****************************************************************************************************
kazushi2008 0:c2aeac7c2d15 140 void TFT_4DGL :: ellipse(int x, int y , int radius_x, int radius_y, int color) { // draw an ellipse
kazushi2008 0:c2aeac7c2d15 141 char command[11]= "";
kazushi2008 0:c2aeac7c2d15 142
kazushi2008 0:c2aeac7c2d15 143 command[0] = ELLIPSE;
kazushi2008 0:c2aeac7c2d15 144
kazushi2008 0:c2aeac7c2d15 145 command[1] = (x >> 8) & 0xFF;
kazushi2008 0:c2aeac7c2d15 146 command[2] = x & 0xFF;
kazushi2008 0:c2aeac7c2d15 147
kazushi2008 0:c2aeac7c2d15 148 command[3] = (y >> 8) & 0xFF;
kazushi2008 0:c2aeac7c2d15 149 command[4] = y & 0xFF;
kazushi2008 0:c2aeac7c2d15 150
kazushi2008 0:c2aeac7c2d15 151 command[5] = (radius_x >> 8) & 0xFF;
kazushi2008 0:c2aeac7c2d15 152 command[6] = radius_x & 0xFF;
kazushi2008 0:c2aeac7c2d15 153
kazushi2008 0:c2aeac7c2d15 154 command[7] = (radius_y >> 8) & 0xFF;
kazushi2008 0:c2aeac7c2d15 155 command[8] = radius_y & 0xFF;
kazushi2008 0:c2aeac7c2d15 156
kazushi2008 0:c2aeac7c2d15 157 int red5 = (color >> (16 + 3)) & 0x1F; // get red on 5 bits
kazushi2008 0:c2aeac7c2d15 158 int green6 = (color >> (8 + 2)) & 0x3F; // get green on 6 bits
kazushi2008 0:c2aeac7c2d15 159 int blue5 = (color >> (0 + 3)) & 0x1F; // get blue on 5 bits
kazushi2008 0:c2aeac7c2d15 160
kazushi2008 0:c2aeac7c2d15 161 command[9] = ((red5 << 3) + (green6 >> 3)) & 0xFF; // first part of 16 bits color
kazushi2008 0:c2aeac7c2d15 162 command[10] = ((green6 << 5) + (blue5 >> 0)) & 0xFF; // second part of 16 bits color
kazushi2008 0:c2aeac7c2d15 163
kazushi2008 0:c2aeac7c2d15 164 writeCOMMAND(command, 11);
kazushi2008 0:c2aeac7c2d15 165 }
kazushi2008 0:c2aeac7c2d15 166
kazushi2008 0:c2aeac7c2d15 167 //****************************************************************************************************
kazushi2008 0:c2aeac7c2d15 168 void TFT_4DGL :: pixel(int x, int y, int color) { // draw a pixel
kazushi2008 0:c2aeac7c2d15 169 char command[7]= "";
kazushi2008 0:c2aeac7c2d15 170
kazushi2008 0:c2aeac7c2d15 171 command[0] = PIXEL;
kazushi2008 0:c2aeac7c2d15 172
kazushi2008 0:c2aeac7c2d15 173 command[1] = (x >> 8) & 0xFF;
kazushi2008 0:c2aeac7c2d15 174 command[2] = x & 0xFF;
kazushi2008 0:c2aeac7c2d15 175
kazushi2008 0:c2aeac7c2d15 176 command[3] = (y >> 8) & 0xFF;
kazushi2008 0:c2aeac7c2d15 177 command[4] = y & 0xFF;
kazushi2008 0:c2aeac7c2d15 178
kazushi2008 0:c2aeac7c2d15 179 int red5 = (color >> (16 + 3)) & 0x1F; // get red on 5 bits
kazushi2008 0:c2aeac7c2d15 180 int green6 = (color >> (8 + 2)) & 0x3F; // get green on 6 bits
kazushi2008 0:c2aeac7c2d15 181 int blue5 = (color >> (0 + 3)) & 0x1F; // get blue on 5 bits
kazushi2008 0:c2aeac7c2d15 182
kazushi2008 0:c2aeac7c2d15 183 command[5] = ((red5 << 3) + (green6 >> 3)) & 0xFF; // first part of 16 bits color
kazushi2008 0:c2aeac7c2d15 184 command[6] = ((green6 << 5) + (blue5 >> 0)) & 0xFF; // second part of 16 bits color
kazushi2008 0:c2aeac7c2d15 185
kazushi2008 0:c2aeac7c2d15 186 writeCOMMAND(command, 7);
kazushi2008 0:c2aeac7c2d15 187 }
kazushi2008 0:c2aeac7c2d15 188
kazushi2008 0:c2aeac7c2d15 189 //******************************************************************************************************
kazushi2008 0:c2aeac7c2d15 190 int TFT_4DGL :: read_pixel(int x, int y) { // read screen info and populate data
kazushi2008 0:c2aeac7c2d15 191
kazushi2008 0:c2aeac7c2d15 192 char command[5]= "";
kazushi2008 0:c2aeac7c2d15 193
kazushi2008 0:c2aeac7c2d15 194 command[0] = READPIXEL;
kazushi2008 0:c2aeac7c2d15 195
kazushi2008 0:c2aeac7c2d15 196 command[1] = (x >> 8) & 0xFF;
kazushi2008 0:c2aeac7c2d15 197 command[2] = x & 0xFF;
kazushi2008 0:c2aeac7c2d15 198
kazushi2008 0:c2aeac7c2d15 199 command[3] = (y >> 8) & 0xFF;
kazushi2008 0:c2aeac7c2d15 200 command[4] = y & 0xFF;
kazushi2008 0:c2aeac7c2d15 201
kazushi2008 0:c2aeac7c2d15 202 int i, temp = 0, color = 0, resp = 0;
kazushi2008 0:c2aeac7c2d15 203 char response[2] = "";
kazushi2008 0:c2aeac7c2d15 204
kazushi2008 0:c2aeac7c2d15 205 freeBUFFER();
kazushi2008 0:c2aeac7c2d15 206
kazushi2008 0:c2aeac7c2d15 207 for (i = 0; i < 5; i++) { // send all chars to serial port
kazushi2008 0:c2aeac7c2d15 208 writeBYTE(command[i]);
kazushi2008 0:c2aeac7c2d15 209 }
kazushi2008 0:c2aeac7c2d15 210
kazushi2008 0:c2aeac7c2d15 211 while (!_cmd.readable()) wait_ms(TEMPO); // wait for screen answer
kazushi2008 0:c2aeac7c2d15 212
kazushi2008 0:c2aeac7c2d15 213 while (_cmd.readable()) {
kazushi2008 0:c2aeac7c2d15 214 temp = _cmd.getc();
kazushi2008 0:c2aeac7c2d15 215 response[resp++] = (char)temp;
kazushi2008 0:c2aeac7c2d15 216 }
kazushi2008 0:c2aeac7c2d15 217
kazushi2008 0:c2aeac7c2d15 218 color = ((response[0] << 8) + response[1]);
kazushi2008 0:c2aeac7c2d15 219
kazushi2008 0:c2aeac7c2d15 220 return color; // WARNING : this is 16bits color, not 24bits... need to be fixed
kazushi2008 0:c2aeac7c2d15 221 }
kazushi2008 0:c2aeac7c2d15 222
kazushi2008 0:c2aeac7c2d15 223 //******************************************************************************************************
kazushi2008 0:c2aeac7c2d15 224 void TFT_4DGL :: screen_copy(int xs, int ys , int xd, int yd , int width, int height) {
kazushi2008 0:c2aeac7c2d15 225
kazushi2008 0:c2aeac7c2d15 226 char command[13]= "";
kazushi2008 0:c2aeac7c2d15 227
kazushi2008 0:c2aeac7c2d15 228 command[0] = SCREENCOPY;
kazushi2008 0:c2aeac7c2d15 229
kazushi2008 0:c2aeac7c2d15 230 command[1] = (xs >> 8) & 0xFF;
kazushi2008 0:c2aeac7c2d15 231 command[2] = xs & 0xFF;
kazushi2008 0:c2aeac7c2d15 232
kazushi2008 0:c2aeac7c2d15 233 command[3] = (ys >> 8) & 0xFF;
kazushi2008 0:c2aeac7c2d15 234 command[4] = ys & 0xFF;
kazushi2008 0:c2aeac7c2d15 235
kazushi2008 0:c2aeac7c2d15 236 command[5] = (xd >> 8) & 0xFF;
kazushi2008 0:c2aeac7c2d15 237 command[6] = xd & 0xFF;
kazushi2008 0:c2aeac7c2d15 238
kazushi2008 0:c2aeac7c2d15 239 command[7] = (yd >> 8) & 0xFF;
kazushi2008 0:c2aeac7c2d15 240 command[8] = yd & 0xFF;
kazushi2008 0:c2aeac7c2d15 241
kazushi2008 0:c2aeac7c2d15 242 command[9] = (width >> 8) & 0xFF;
kazushi2008 0:c2aeac7c2d15 243 command[10] = width & 0xFF;
kazushi2008 0:c2aeac7c2d15 244
kazushi2008 0:c2aeac7c2d15 245 command[11] = (height >> 8) & 0xFF;
kazushi2008 0:c2aeac7c2d15 246 command[12] = height & 0xFF;
kazushi2008 0:c2aeac7c2d15 247
kazushi2008 0:c2aeac7c2d15 248 writeCOMMAND(command, 13);
kazushi2008 0:c2aeac7c2d15 249 }
kazushi2008 0:c2aeac7c2d15 250
kazushi2008 0:c2aeac7c2d15 251 //****************************************************************************************************
kazushi2008 0:c2aeac7c2d15 252 void TFT_4DGL :: pen_size(char mode) { // set pen to SOLID or WIREFRAME
kazushi2008 0:c2aeac7c2d15 253 char command[2]= "";
kazushi2008 0:c2aeac7c2d15 254
kazushi2008 0:c2aeac7c2d15 255 command[0] = PENSIZE;
kazushi2008 0:c2aeac7c2d15 256 command[1] = mode;
kazushi2008 0:c2aeac7c2d15 257
kazushi2008 0:c2aeac7c2d15 258 writeCOMMAND(command, 2);
kazushi2008 0:c2aeac7c2d15 259 }
kazushi2008 0:c2aeac7c2d15 260
kazushi2008 0:c2aeac7c2d15 261 //****************************************************************************************************
kazushi2008 0:c2aeac7c2d15 262 void TFT_4DGL :: displayImage(char x, char y, char w, char h, int ad)
kazushi2008 0:c2aeac7c2d15 263 {
kazushi2008 0:c2aeac7c2d15 264 char command[10]= "";
kazushi2008 0:c2aeac7c2d15 265 char hi, mid, lo;
kazushi2008 0:c2aeac7c2d15 266
kazushi2008 0:c2aeac7c2d15 267 hi = (ad >> 16)&0x0000FF; //Work out the sector address
kazushi2008 0:c2aeac7c2d15 268 mid = (ad >> 8)&0x0000FF;
kazushi2008 0:c2aeac7c2d15 269 lo = ad&0x0000FF;
kazushi2008 0:c2aeac7c2d15 270
kazushi2008 0:c2aeac7c2d15 271 command[0] = 0x40;
kazushi2008 0:c2aeac7c2d15 272 command[1] = 0x49;
kazushi2008 0:c2aeac7c2d15 273 command[2] = x;
kazushi2008 0:c2aeac7c2d15 274 command[3] = y;
kazushi2008 0:c2aeac7c2d15 275 command[4] = w;
kazushi2008 0:c2aeac7c2d15 276 command[5] = h;
kazushi2008 0:c2aeac7c2d15 277 command[6] = 16; //colour mode 16
kazushi2008 0:c2aeac7c2d15 278 command[7] = hi;
kazushi2008 0:c2aeac7c2d15 279 command[8] = mid;
kazushi2008 0:c2aeac7c2d15 280 command[9] = lo;
kazushi2008 0:c2aeac7c2d15 281
kazushi2008 0:c2aeac7c2d15 282 writeCOMMAND(command, 10);
kazushi2008 0:c2aeac7c2d15 283 }
kazushi2008 0:c2aeac7c2d15 284
kazushi2008 0:c2aeac7c2d15 285 //void TFT_4DGL :: animImages(char x, char y, char w, char h, int ad, int frames, bool loop = false)
kazushi2008 0:c2aeac7c2d15 286 //{
kazushi2008 0:c2aeac7c2d15 287 // int size = 0x18;
kazushi2008 0:c2aeac7c2d15 288 // int adress = ad + (count * size);
kazushi2008 0:c2aeac7c2d15 289 // displayImage(x, y, w, h, adress)
kazushi2008 0:c2aeac7c2d15 290 // count++;
kazushi2008 0:c2aeac7c2d15 291 // if(count >= ((data[3]<<8)+data[4]))
kazushi2008 0:c2aeac7c2d15 292 // {
kazushi2008 0:c2aeac7c2d15 293 // count = 0;
kazushi2008 0:c2aeac7c2d15 294 // if(data[8]==0) OLED4Dplay = false;
kazushi2008 0:c2aeac7c2d15 295 // }
kazushi2008 0:c2aeac7c2d15 296 //}
kazushi2008 0:c2aeac7c2d15 297
kazushi2008 0:c2aeac7c2d15 298 //****************************************************************************************************
kazushi2008 0:c2aeac7c2d15 299 void TFT_4DGL :: displayMovie(char x, char y, char w, char h, int ad, int frames)
kazushi2008 0:c2aeac7c2d15 300 {
kazushi2008 0:c2aeac7c2d15 301 char command[18]= "";
kazushi2008 0:c2aeac7c2d15 302 char hi, mid, lo, mfr, lfr;
kazushi2008 0:c2aeac7c2d15 303
kazushi2008 0:c2aeac7c2d15 304 hi = (ad >> 16)&0x0000FF; //Work out the sector address
kazushi2008 0:c2aeac7c2d15 305 mid = (ad >> 8)&0x0000FF;
kazushi2008 0:c2aeac7c2d15 306 lo = ad&0x0000FF;
kazushi2008 0:c2aeac7c2d15 307
kazushi2008 0:c2aeac7c2d15 308 mfr = (frames >> 8)&0x0000FF;
kazushi2008 0:c2aeac7c2d15 309 lfr = frames&0x0000FF;
kazushi2008 0:c2aeac7c2d15 310
kazushi2008 0:c2aeac7c2d15 311 command[0] = 0x40;
kazushi2008 0:c2aeac7c2d15 312 command[1] = 0x56;
kazushi2008 0:c2aeac7c2d15 313 command[2] = x;
kazushi2008 0:c2aeac7c2d15 314 command[3] = y;
kazushi2008 0:c2aeac7c2d15 315 command[4] = w;
kazushi2008 0:c2aeac7c2d15 316 command[5] = h;
kazushi2008 0:c2aeac7c2d15 317 command[6] = 16; //colour mode 16
kazushi2008 0:c2aeac7c2d15 318 command[7] = 0x27; //delay
kazushi2008 0:c2aeac7c2d15 319 command[8] = mfr;
kazushi2008 0:c2aeac7c2d15 320 command[9] = lfr;
kazushi2008 0:c2aeac7c2d15 321 command[10] = hi;
kazushi2008 0:c2aeac7c2d15 322 command[11] = mid;
kazushi2008 0:c2aeac7c2d15 323 command[12] = lo;
kazushi2008 0:c2aeac7c2d15 324 command[13] = 0xB0;
kazushi2008 0:c2aeac7c2d15 325 command[14] = 0x00;
kazushi2008 0:c2aeac7c2d15 326 command[15] = 0x00;
kazushi2008 0:c2aeac7c2d15 327 command[16] = 0x00;
kazushi2008 0:c2aeac7c2d15 328 command[17] = 0x00;
kazushi2008 0:c2aeac7c2d15 329
kazushi2008 0:c2aeac7c2d15 330 writeCOMMAND(command, 18);
kazushi2008 0:c2aeac7c2d15 331 }