Jingyi Zhang
/
uVGAIII_demo
A demo program using uVGAIII board.
Fork of uVGAIII_demo by
uVGAIII/uVGAIII_main.cpp@1:333b7b189790, 2014-03-24 (annotated)
- Committer:
- ivygatech
- Date:
- Mon Mar 24 17:29:15 2014 +0000
- Revision:
- 1:333b7b189790
- Parent:
- 0:9e5b26a137ec
demo for uVGA-III
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ivygatech | 0:9e5b26a137ec | 1 | // |
ivygatech | 0:9e5b26a137ec | 2 | // uVGAIII is a class to drive 4D Systems TFT touch screens |
ivygatech | 0:9e5b26a137ec | 3 | // |
ivygatech | 0:9e5b26a137ec | 4 | // Copyright (C) <2010> Stephane ROCHON <stephane.rochon at free.fr> |
ivygatech | 0:9e5b26a137ec | 5 | // |
ivygatech | 0:9e5b26a137ec | 6 | // uVGAIII is free software: you can redistribute it and/or modify |
ivygatech | 0:9e5b26a137ec | 7 | // it under the terms of the GNU General Public License as published by |
ivygatech | 0:9e5b26a137ec | 8 | // the Free Software Foundation, either version 3 of the License, or |
ivygatech | 0:9e5b26a137ec | 9 | // (at your option) any later version. |
ivygatech | 0:9e5b26a137ec | 10 | // |
ivygatech | 0:9e5b26a137ec | 11 | // uVGAIII is distributed in the hope that it will be useful, |
ivygatech | 0:9e5b26a137ec | 12 | // but WITHOUT ANY WARRANTY; without even the implied warranty of |
ivygatech | 0:9e5b26a137ec | 13 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
ivygatech | 0:9e5b26a137ec | 14 | // GNU General Public License for more details. |
ivygatech | 0:9e5b26a137ec | 15 | // |
ivygatech | 0:9e5b26a137ec | 16 | // You should have received a copy of the GNU General Public License |
ivygatech | 0:9e5b26a137ec | 17 | // along with uVGAIII. If not, see <http://www.gnu.org/licenses/>. |
ivygatech | 0:9e5b26a137ec | 18 | |
ivygatech | 0:9e5b26a137ec | 19 | #include "mbed.h" |
ivygatech | 0:9e5b26a137ec | 20 | #include "uVGAIII.h" |
ivygatech | 0:9e5b26a137ec | 21 | |
ivygatech | 0:9e5b26a137ec | 22 | #define ARRAY_SIZE(X) sizeof(X)/sizeof(X[0]) |
ivygatech | 0:9e5b26a137ec | 23 | |
ivygatech | 0:9e5b26a137ec | 24 | //Serial pc(USBTX,USBRX); |
ivygatech | 0:9e5b26a137ec | 25 | |
ivygatech | 0:9e5b26a137ec | 26 | //****************************************************************************************************** |
ivygatech | 0:9e5b26a137ec | 27 | uVGAIII :: uVGAIII(PinName tx, PinName rx, PinName rst) : _cmd(tx, rx), |
ivygatech | 0:9e5b26a137ec | 28 | _rst(rst) |
ivygatech | 0:9e5b26a137ec | 29 | #if DEBUGMODE |
ivygatech | 0:9e5b26a137ec | 30 | ,pc(USBTX, USBRX) |
ivygatech | 0:9e5b26a137ec | 31 | #endif // DEBUGMODE |
ivygatech | 0:9e5b26a137ec | 32 | { // Constructor |
ivygatech | 0:9e5b26a137ec | 33 | |
ivygatech | 0:9e5b26a137ec | 34 | #if DEBUGMODE |
ivygatech | 0:9e5b26a137ec | 35 | pc.baud(115200); |
ivygatech | 0:9e5b26a137ec | 36 | |
ivygatech | 0:9e5b26a137ec | 37 | pc.printf("\n\n\n"); |
ivygatech | 0:9e5b26a137ec | 38 | pc.printf("********************\n"); |
ivygatech | 0:9e5b26a137ec | 39 | pc.printf("uVGAIII CONSTRUCTOR\n"); |
ivygatech | 0:9e5b26a137ec | 40 | pc.printf("********************\n"); |
ivygatech | 0:9e5b26a137ec | 41 | #endif |
ivygatech | 0:9e5b26a137ec | 42 | _cmd.baud(9600); |
ivygatech | 0:9e5b26a137ec | 43 | _rst = 1; // put RESET pin to high to start TFT screen |
ivygatech | 0:9e5b26a137ec | 44 | |
ivygatech | 0:9e5b26a137ec | 45 | reset(); |
ivygatech | 0:9e5b26a137ec | 46 | cls(); // clear screen |
ivygatech | 0:9e5b26a137ec | 47 | speversion(); // get SPE version information |
ivygatech | 0:9e5b26a137ec | 48 | pmmcversion(); // get PmmC version information |
ivygatech | 0:9e5b26a137ec | 49 | |
ivygatech | 0:9e5b26a137ec | 50 | current_col = 0; // initial cursor col |
ivygatech | 0:9e5b26a137ec | 51 | current_row = 0; // initial cursor row |
ivygatech | 0:9e5b26a137ec | 52 | current_color = WHITE; // initial text color |
ivygatech | 0:9e5b26a137ec | 53 | current_orientation = IS_LANDSCAPE; // initial screen orientation |
ivygatech | 0:9e5b26a137ec | 54 | |
ivygatech | 0:9e5b26a137ec | 55 | set_font(FONT3); // initial font ( This line can be removed because font has been set to be FONT3 ) |
ivygatech | 0:9e5b26a137ec | 56 | text_opacity(OPAQUE); // initial text opacity ( This line can be removed because text opacity has been set to be OPAQUE ) |
ivygatech | 0:9e5b26a137ec | 57 | } |
ivygatech | 0:9e5b26a137ec | 58 | |
ivygatech | 0:9e5b26a137ec | 59 | //****************************************************************************************************** |
ivygatech | 0:9e5b26a137ec | 60 | void uVGAIII :: writeBYTE(char c) { // send a BYTE command to screen |
ivygatech | 0:9e5b26a137ec | 61 | |
ivygatech | 0:9e5b26a137ec | 62 | _cmd.putc(c); |
ivygatech | 0:9e5b26a137ec | 63 | wait_ms(1); |
ivygatech | 0:9e5b26a137ec | 64 | |
ivygatech | 0:9e5b26a137ec | 65 | #if DEBUGMODE |
ivygatech | 0:9e5b26a137ec | 66 | pc.printf(" Char sent : 0x%02X\n",c); |
ivygatech | 0:9e5b26a137ec | 67 | #endif |
ivygatech | 0:9e5b26a137ec | 68 | |
ivygatech | 0:9e5b26a137ec | 69 | } |
ivygatech | 0:9e5b26a137ec | 70 | |
ivygatech | 0:9e5b26a137ec | 71 | //****************************************************************************************************** |
ivygatech | 0:9e5b26a137ec | 72 | void uVGAIII :: freeBUFFER(void) { // Clear serial buffer before writing command |
ivygatech | 0:9e5b26a137ec | 73 | |
ivygatech | 0:9e5b26a137ec | 74 | while (_cmd.readable()) _cmd.getc(); // clear buffer garbage |
ivygatech | 0:9e5b26a137ec | 75 | } |
ivygatech | 0:9e5b26a137ec | 76 | |
ivygatech | 0:9e5b26a137ec | 77 | //****************************************************************************************************** |
ivygatech | 0:9e5b26a137ec | 78 | int uVGAIII :: writeCOMMAND(char *command, int commNum, int respNum) { // send several BYTES making a command and return an answer |
ivygatech | 0:9e5b26a137ec | 79 | |
ivygatech | 0:9e5b26a137ec | 80 | #if DEBUGMODE |
ivygatech | 0:9e5b26a137ec | 81 | pc.printf("\n"); |
ivygatech | 0:9e5b26a137ec | 82 | pc.printf("New COMMAND : 0x%02X%02X\n", command[0], command[1]); |
ivygatech | 0:9e5b26a137ec | 83 | #endif |
ivygatech | 0:9e5b26a137ec | 84 | int i, resp = 0; |
ivygatech | 0:9e5b26a137ec | 85 | freeBUFFER(); |
ivygatech | 0:9e5b26a137ec | 86 | |
ivygatech | 0:9e5b26a137ec | 87 | for (i = 0; i < commNum; i++) {writeBYTE(command[i]); wait_ms(100);} // send command to serial port |
ivygatech | 0:9e5b26a137ec | 88 | |
ivygatech | 0:9e5b26a137ec | 89 | for (i = 0; i < respNum; i++) { |
ivygatech | 0:9e5b26a137ec | 90 | while (!_cmd.readable()) wait_ms(TEMPO); // wait for screen answer |
ivygatech | 0:9e5b26a137ec | 91 | if (_cmd.readable()) { |
ivygatech | 0:9e5b26a137ec | 92 | resp = _cmd.getc(); // read response if any |
ivygatech | 0:9e5b26a137ec | 93 | #if DEBUGMODE |
ivygatech | 0:9e5b26a137ec | 94 | pc.printf("response = 0x%02X\n",resp); |
ivygatech | 0:9e5b26a137ec | 95 | #endif |
ivygatech | 0:9e5b26a137ec | 96 | } |
ivygatech | 0:9e5b26a137ec | 97 | } |
ivygatech | 0:9e5b26a137ec | 98 | return resp; |
ivygatech | 0:9e5b26a137ec | 99 | } |
ivygatech | 0:9e5b26a137ec | 100 | |
ivygatech | 0:9e5b26a137ec | 101 | //************************************************************************** |
ivygatech | 0:9e5b26a137ec | 102 | void uVGAIII :: reset() { // Reset Screen |
ivygatech | 0:9e5b26a137ec | 103 | |
ivygatech | 0:9e5b26a137ec | 104 | _rst = 0; // put RESET pin to low |
ivygatech | 0:9e5b26a137ec | 105 | wait_ms(TEMPO); // wait a few milliseconds for command reception |
ivygatech | 0:9e5b26a137ec | 106 | _rst = 1; // put RESET back to high |
ivygatech | 0:9e5b26a137ec | 107 | wait(3.2); // wait 3s for screen to restart |
ivygatech | 0:9e5b26a137ec | 108 | |
ivygatech | 0:9e5b26a137ec | 109 | freeBUFFER(); // clean buffer from possible garbage |
ivygatech | 0:9e5b26a137ec | 110 | |
ivygatech | 0:9e5b26a137ec | 111 | #if DEBUGMODE |
ivygatech | 0:9e5b26a137ec | 112 | pc.printf("Reset completed.\n"); |
ivygatech | 0:9e5b26a137ec | 113 | #endif |
ivygatech | 0:9e5b26a137ec | 114 | } |
ivygatech | 0:9e5b26a137ec | 115 | |
ivygatech | 0:9e5b26a137ec | 116 | //************************************************************************** |
ivygatech | 0:9e5b26a137ec | 117 | void uVGAIII :: speversion() { // get SPE version |
ivygatech | 0:9e5b26a137ec | 118 | char command[2] = ""; |
ivygatech | 0:9e5b26a137ec | 119 | int spe = 0; |
ivygatech | 0:9e5b26a137ec | 120 | command[0] = (SPEVERSION >> 8) & 0xFF; |
ivygatech | 0:9e5b26a137ec | 121 | command[1] = SPEVERSION & 0xFF; |
ivygatech | 0:9e5b26a137ec | 122 | |
ivygatech | 0:9e5b26a137ec | 123 | spe = readVERSION(command, 2); |
ivygatech | 0:9e5b26a137ec | 124 | |
ivygatech | 0:9e5b26a137ec | 125 | pc.printf("spe:%d\n",spe); |
ivygatech | 0:9e5b26a137ec | 126 | } |
ivygatech | 0:9e5b26a137ec | 127 | |
ivygatech | 0:9e5b26a137ec | 128 | //************************************************************************** |
ivygatech | 0:9e5b26a137ec | 129 | void uVGAIII :: pmmcversion() { // get PmmC version |
ivygatech | 0:9e5b26a137ec | 130 | char command[2] = ""; |
ivygatech | 0:9e5b26a137ec | 131 | int pmmc = 0; |
ivygatech | 0:9e5b26a137ec | 132 | command[0] = (PMMCVERSION >> 8) & 0xFF; |
ivygatech | 0:9e5b26a137ec | 133 | command[1] = PMMCVERSION & 0xFF; |
ivygatech | 0:9e5b26a137ec | 134 | |
ivygatech | 0:9e5b26a137ec | 135 | pmmc = readVERSION(command, 2); |
ivygatech | 0:9e5b26a137ec | 136 | |
ivygatech | 0:9e5b26a137ec | 137 | pc.printf("pmmc:%d\n",pmmc); |
ivygatech | 0:9e5b26a137ec | 138 | } |
ivygatech | 0:9e5b26a137ec | 139 | |
ivygatech | 0:9e5b26a137ec | 140 | //************************************************************************** |
ivygatech | 0:9e5b26a137ec | 141 | void uVGAIII :: baudrate(int speed) { // set screen baud rate |
ivygatech | 0:9e5b26a137ec | 142 | char command[4]= ""; |
ivygatech | 0:9e5b26a137ec | 143 | command[0] = ( BAUDRATE >> 8 ) & 0xFF; |
ivygatech | 0:9e5b26a137ec | 144 | command[1] = BAUDRATE & 0xFF; |
ivygatech | 0:9e5b26a137ec | 145 | switch (speed) { |
ivygatech | 0:9e5b26a137ec | 146 | case 110 : |
ivygatech | 0:9e5b26a137ec | 147 | command[2] = ( BAUD_110 >> 8 ) & 0xFF; |
ivygatech | 0:9e5b26a137ec | 148 | command[3] = BAUD_110 & 0xFF; |
ivygatech | 0:9e5b26a137ec | 149 | break; |
ivygatech | 0:9e5b26a137ec | 150 | case 300 : |
ivygatech | 0:9e5b26a137ec | 151 | command[2] = ( BAUD_300 >> 8 ) & 0xFF; |
ivygatech | 0:9e5b26a137ec | 152 | command[3] = BAUD_300 & 0xFF; |
ivygatech | 0:9e5b26a137ec | 153 | break; |
ivygatech | 0:9e5b26a137ec | 154 | case 600 : |
ivygatech | 0:9e5b26a137ec | 155 | command[2] = ( BAUD_600 >> 8 ) & 0xFF; |
ivygatech | 0:9e5b26a137ec | 156 | command[3] = BAUD_600 & 0xFF; |
ivygatech | 0:9e5b26a137ec | 157 | break; |
ivygatech | 0:9e5b26a137ec | 158 | case 1200 : |
ivygatech | 0:9e5b26a137ec | 159 | command[2] = ( BAUD_1200>> 8 ) & 0xFF; |
ivygatech | 0:9e5b26a137ec | 160 | command[3] = BAUD_1200 & 0xFF; |
ivygatech | 0:9e5b26a137ec | 161 | break; |
ivygatech | 0:9e5b26a137ec | 162 | case 2400 : |
ivygatech | 0:9e5b26a137ec | 163 | command[2] = ( BAUD_2400 >> 8 ) & 0xFF; |
ivygatech | 0:9e5b26a137ec | 164 | command[3] = BAUD_2400 & 0xFF; |
ivygatech | 0:9e5b26a137ec | 165 | break; |
ivygatech | 0:9e5b26a137ec | 166 | case 4800 : |
ivygatech | 0:9e5b26a137ec | 167 | command[2] = ( BAUD_4800 >> 8 ) & 0xFF; |
ivygatech | 0:9e5b26a137ec | 168 | command[3] = BAUD_4800 & 0xFF; |
ivygatech | 0:9e5b26a137ec | 169 | break; |
ivygatech | 0:9e5b26a137ec | 170 | case 9600 : |
ivygatech | 0:9e5b26a137ec | 171 | command[2] = ( BAUD_9600 >> 8 ) & 0xFF; |
ivygatech | 0:9e5b26a137ec | 172 | command[3] = BAUD_9600 & 0xFF; |
ivygatech | 0:9e5b26a137ec | 173 | break; |
ivygatech | 0:9e5b26a137ec | 174 | case 14400 : |
ivygatech | 0:9e5b26a137ec | 175 | command[2] = ( BAUD_9600 >> 8 ) & 0xFF; |
ivygatech | 0:9e5b26a137ec | 176 | command[3] = BAUD_9600 & 0xFF; |
ivygatech | 0:9e5b26a137ec | 177 | break; |
ivygatech | 0:9e5b26a137ec | 178 | case 19200 : |
ivygatech | 0:9e5b26a137ec | 179 | command[2] = ( BAUD_19200 >> 8 ) & 0xFF; |
ivygatech | 0:9e5b26a137ec | 180 | command[3] = BAUD_19200 & 0xFF; |
ivygatech | 0:9e5b26a137ec | 181 | break; |
ivygatech | 0:9e5b26a137ec | 182 | case 31250 : |
ivygatech | 0:9e5b26a137ec | 183 | command[2] = ( BAUD_31250 >> 8 ) & 0xFF; |
ivygatech | 0:9e5b26a137ec | 184 | command[3] = BAUD_31250 & 0xFF; |
ivygatech | 0:9e5b26a137ec | 185 | break; |
ivygatech | 0:9e5b26a137ec | 186 | case 38400 : |
ivygatech | 0:9e5b26a137ec | 187 | command[2] = ( BAUD_38400 >> 8 ) & 0xFF; |
ivygatech | 0:9e5b26a137ec | 188 | command[3] = BAUD_38400 & 0xFF; |
ivygatech | 0:9e5b26a137ec | 189 | break; |
ivygatech | 0:9e5b26a137ec | 190 | case 56000 : |
ivygatech | 0:9e5b26a137ec | 191 | command[2] = ( BAUD_56000 >> 8 ) & 0xFF; |
ivygatech | 0:9e5b26a137ec | 192 | command[3] = BAUD_56000 & 0xFF; |
ivygatech | 0:9e5b26a137ec | 193 | break; |
ivygatech | 0:9e5b26a137ec | 194 | case 57600 : |
ivygatech | 0:9e5b26a137ec | 195 | command[2] = ( BAUD_57600 >> 8 ) & 0xFF; |
ivygatech | 0:9e5b26a137ec | 196 | command[3] = BAUD_57600 & 0xFF; |
ivygatech | 0:9e5b26a137ec | 197 | break; |
ivygatech | 0:9e5b26a137ec | 198 | case 115200 : |
ivygatech | 0:9e5b26a137ec | 199 | command[2] = ( BAUD_115200 >> 8 ) & 0xFF; |
ivygatech | 0:9e5b26a137ec | 200 | command[3] = BAUD_115200 & 0xFF; |
ivygatech | 0:9e5b26a137ec | 201 | break; |
ivygatech | 0:9e5b26a137ec | 202 | case 128000 : |
ivygatech | 0:9e5b26a137ec | 203 | command[2] = ( BAUD_128000 >> 8 ) & 0xFF; |
ivygatech | 0:9e5b26a137ec | 204 | command[3] = BAUD_128000 & 0xFF; |
ivygatech | 0:9e5b26a137ec | 205 | break; |
ivygatech | 0:9e5b26a137ec | 206 | case 256000 : |
ivygatech | 0:9e5b26a137ec | 207 | command[2] = ( BAUD_256000 >> 8 ) & 0xFF; |
ivygatech | 0:9e5b26a137ec | 208 | command[3] = BAUD_256000 & 0xFF; |
ivygatech | 0:9e5b26a137ec | 209 | break; |
ivygatech | 0:9e5b26a137ec | 210 | default : |
ivygatech | 0:9e5b26a137ec | 211 | command[2] = ( BAUD_9600 >> 8 ) & 0xFF; |
ivygatech | 0:9e5b26a137ec | 212 | command[3] = BAUD_9600 & 0xFF; |
ivygatech | 0:9e5b26a137ec | 213 | speed = 9600; |
ivygatech | 0:9e5b26a137ec | 214 | break; |
ivygatech | 0:9e5b26a137ec | 215 | } |
ivygatech | 0:9e5b26a137ec | 216 | #if DEBUGMODE |
ivygatech | 0:9e5b26a137ec | 217 | pc.printf("\n"); |
ivygatech | 0:9e5b26a137ec | 218 | pc.printf("New COMMAND : 0x%02X%02X\n", command[0], command[1]); |
ivygatech | 0:9e5b26a137ec | 219 | #endif |
ivygatech | 0:9e5b26a137ec | 220 | int i, resp = 0; |
ivygatech | 0:9e5b26a137ec | 221 | freeBUFFER(); |
ivygatech | 0:9e5b26a137ec | 222 | |
ivygatech | 0:9e5b26a137ec | 223 | for (i = 0; i < 4; i++) writeBYTE(command[i]); // send command to serial port |
ivygatech | 0:9e5b26a137ec | 224 | wait_ms(5); |
ivygatech | 0:9e5b26a137ec | 225 | _cmd.baud(speed); // set mbed to same speed |
ivygatech | 0:9e5b26a137ec | 226 | |
ivygatech | 0:9e5b26a137ec | 227 | while (!_cmd.readable()) wait_ms(TEMPO); // wait for screen answer |
ivygatech | 0:9e5b26a137ec | 228 | if (_cmd.readable()) resp = _cmd.getc(); // read response if any |
ivygatech | 0:9e5b26a137ec | 229 | |
ivygatech | 0:9e5b26a137ec | 230 | #if DEBUGMODE |
ivygatech | 0:9e5b26a137ec | 231 | pc.printf("response = 0x%02X\n",resp); |
ivygatech | 0:9e5b26a137ec | 232 | #endif |
ivygatech | 0:9e5b26a137ec | 233 | |
ivygatech | 0:9e5b26a137ec | 234 | #if DEBUGMODE |
ivygatech | 0:9e5b26a137ec | 235 | pc.printf("Set baudrate completed.\n"); |
ivygatech | 0:9e5b26a137ec | 236 | #endif |
ivygatech | 0:9e5b26a137ec | 237 | } |
ivygatech | 0:9e5b26a137ec | 238 | |
ivygatech | 0:9e5b26a137ec | 239 | //****************************************************************************************************** |
ivygatech | 0:9e5b26a137ec | 240 | int uVGAIII :: readVERSION(char *command, int number) { // read screen info and populate data |
ivygatech | 0:9e5b26a137ec | 241 | |
ivygatech | 0:9e5b26a137ec | 242 | int i, temp = 0, resp = 0; |
ivygatech | 0:9e5b26a137ec | 243 | char response[5] = ""; |
ivygatech | 0:9e5b26a137ec | 244 | |
ivygatech | 0:9e5b26a137ec | 245 | #if DEBUGMODE |
ivygatech | 0:9e5b26a137ec | 246 | pc.printf("\n"); |
ivygatech | 0:9e5b26a137ec | 247 | pc.printf("New COMMAND : 0x%02X%02X\n", command[0], command[1]); |
ivygatech | 0:9e5b26a137ec | 248 | #endif |
ivygatech | 0:9e5b26a137ec | 249 | |
ivygatech | 0:9e5b26a137ec | 250 | freeBUFFER(); |
ivygatech | 0:9e5b26a137ec | 251 | |
ivygatech | 0:9e5b26a137ec | 252 | for (i = 0; i < number; i++) writeBYTE(command[i]); // send all chars to serial port |
ivygatech | 0:9e5b26a137ec | 253 | |
ivygatech | 0:9e5b26a137ec | 254 | while (!_cmd.readable()) wait_ms(TEMPO); // wait for screen answer |
ivygatech | 0:9e5b26a137ec | 255 | |
ivygatech | 0:9e5b26a137ec | 256 | while (_cmd.readable() && resp < ARRAY_SIZE(response)) { |
ivygatech | 0:9e5b26a137ec | 257 | temp = _cmd.getc(); |
ivygatech | 0:9e5b26a137ec | 258 | response[resp] = (char)temp; |
ivygatech | 0:9e5b26a137ec | 259 | pc.printf("response = 0x%02X\n",response[resp]); |
ivygatech | 0:9e5b26a137ec | 260 | resp++; |
ivygatech | 0:9e5b26a137ec | 261 | } |
ivygatech | 0:9e5b26a137ec | 262 | switch (resp) { |
ivygatech | 0:9e5b26a137ec | 263 | case 3 : // if OK populate data and return version |
ivygatech | 0:9e5b26a137ec | 264 | version = int(response[1]) << 8 | response[2]; |
ivygatech | 0:9e5b26a137ec | 265 | break; |
ivygatech | 0:9e5b26a137ec | 266 | default : |
ivygatech | 0:9e5b26a137ec | 267 | version = 0; // return 0 |
ivygatech | 0:9e5b26a137ec | 268 | break; |
ivygatech | 0:9e5b26a137ec | 269 | } |
ivygatech | 0:9e5b26a137ec | 270 | return version; |
ivygatech | 0:9e5b26a137ec | 271 | } |
ivygatech | 0:9e5b26a137ec | 272 | |
ivygatech | 0:9e5b26a137ec | 273 | //**************************************************************************************************** |
ivygatech | 0:9e5b26a137ec | 274 | void uVGAIII :: set_volume(char value) { // set sound volume to value |
ivygatech | 0:9e5b26a137ec | 275 | char command[4] = ""; |
ivygatech | 0:9e5b26a137ec | 276 | |
ivygatech | 0:9e5b26a137ec | 277 | command[0] = (SETVOLUME >> 8) & 0xFF; |
ivygatech | 0:9e5b26a137ec | 278 | command[1] = SETVOLUME & 0xFF; |
ivygatech | 0:9e5b26a137ec | 279 | |
ivygatech | 0:9e5b26a137ec | 280 | command[2] = 0; |
ivygatech | 0:9e5b26a137ec | 281 | command[3] = value; |
ivygatech | 0:9e5b26a137ec | 282 | |
ivygatech | 0:9e5b26a137ec | 283 | writeCOMMAND(command, 4, 1); |
ivygatech | 0:9e5b26a137ec | 284 | |
ivygatech | 0:9e5b26a137ec | 285 | #if DEBUGMODE |
ivygatech | 0:9e5b26a137ec | 286 | pc.printf("Sound volume completed.\n"); |
ivygatech | 0:9e5b26a137ec | 287 | #endif |
ivygatech | 0:9e5b26a137ec | 288 | } |
ivygatech | 0:9e5b26a137ec | 289 | |
ivygatech | 0:9e5b26a137ec | 290 | //****************************************************************************************************** |
ivygatech | 0:9e5b26a137ec | 291 | void uVGAIII :: getTOUCH(char *command, int number, int *xy) { // read screen info and populate data |
ivygatech | 0:9e5b26a137ec | 292 | |
ivygatech | 0:9e5b26a137ec | 293 | #if DEBUGMODE |
ivygatech | 0:9e5b26a137ec | 294 | pc.printf("\n"); |
ivygatech | 0:9e5b26a137ec | 295 | pc.printf("New COMMAND : 0x%02X%02X\n", command[0], command[1]); |
ivygatech | 0:9e5b26a137ec | 296 | #endif |
ivygatech | 0:9e5b26a137ec | 297 | int i, temp = 0, resp = 0; |
ivygatech | 0:9e5b26a137ec | 298 | char response[5] = ""; |
ivygatech | 0:9e5b26a137ec | 299 | |
ivygatech | 0:9e5b26a137ec | 300 | freeBUFFER(); |
ivygatech | 0:9e5b26a137ec | 301 | |
ivygatech | 0:9e5b26a137ec | 302 | for (i = 0; i < number; i++) writeBYTE(command[i]); // send all chars to serial port |
ivygatech | 0:9e5b26a137ec | 303 | |
ivygatech | 0:9e5b26a137ec | 304 | while (!_cmd.readable()) wait_ms(TEMPO); // wait for screen answer |
ivygatech | 0:9e5b26a137ec | 305 | |
ivygatech | 0:9e5b26a137ec | 306 | while (_cmd.readable() && resp < ARRAY_SIZE(response)) { |
ivygatech | 0:9e5b26a137ec | 307 | temp = _cmd.getc(); |
ivygatech | 0:9e5b26a137ec | 308 | response[resp++] = (char)temp; |
ivygatech | 0:9e5b26a137ec | 309 | } |
ivygatech | 0:9e5b26a137ec | 310 | |
ivygatech | 0:9e5b26a137ec | 311 | #if DEBUGMODE |
ivygatech | 0:9e5b26a137ec | 312 | pc.printf(" Answer received %d : 0x%02X 0x%02X 0x%02X\n", resp, response[0], response[1], response[2]); |
ivygatech | 0:9e5b26a137ec | 313 | #endif |
ivygatech | 0:9e5b26a137ec | 314 | |
ivygatech | 0:9e5b26a137ec | 315 | switch (resp) { |
ivygatech | 0:9e5b26a137ec | 316 | case 3 : // if OK populate data |
ivygatech | 0:9e5b26a137ec | 317 | *xy = ((response[1]<<8)+ response[2]) * (response[1] != 0xFF); |
ivygatech | 0:9e5b26a137ec | 318 | break; |
ivygatech | 0:9e5b26a137ec | 319 | default : |
ivygatech | 0:9e5b26a137ec | 320 | *xy = -1; |
ivygatech | 0:9e5b26a137ec | 321 | break; |
ivygatech | 0:9e5b26a137ec | 322 | } |
ivygatech | 0:9e5b26a137ec | 323 | |
ivygatech | 0:9e5b26a137ec | 324 | #if DEBUGMODE |
ivygatech | 0:9e5b26a137ec | 325 | pc.printf(" X or Y : %03d\n", *xy); |
ivygatech | 0:9e5b26a137ec | 326 | #endif |
ivygatech | 0:9e5b26a137ec | 327 | } |
ivygatech | 0:9e5b26a137ec | 328 | |
ivygatech | 0:9e5b26a137ec | 329 | //****************************************************************************************************** |
ivygatech | 0:9e5b26a137ec | 330 | int uVGAIII :: getSTATUS(char *command, int number) { // read screen info and populate data |
ivygatech | 0:9e5b26a137ec | 331 | |
ivygatech | 0:9e5b26a137ec | 332 | #if DEBUGMODE |
ivygatech | 0:9e5b26a137ec | 333 | pc.printf("\n"); |
ivygatech | 0:9e5b26a137ec | 334 | pc.printf("New COMMAND : 0x%02X%02X\n", command[0], command[1]); |
ivygatech | 0:9e5b26a137ec | 335 | #endif |
ivygatech | 0:9e5b26a137ec | 336 | |
ivygatech | 0:9e5b26a137ec | 337 | int i, temp = 0, resp = 0; |
ivygatech | 0:9e5b26a137ec | 338 | char response[5] = ""; |
ivygatech | 0:9e5b26a137ec | 339 | |
ivygatech | 0:9e5b26a137ec | 340 | freeBUFFER(); |
ivygatech | 0:9e5b26a137ec | 341 | |
ivygatech | 0:9e5b26a137ec | 342 | for (i = 0; i < number; i++) writeBYTE(command[i]); // send all chars to serial port |
ivygatech | 0:9e5b26a137ec | 343 | |
ivygatech | 0:9e5b26a137ec | 344 | while (!_cmd.readable()) wait_ms(TEMPO); // wait for screen answer |
ivygatech | 0:9e5b26a137ec | 345 | |
ivygatech | 0:9e5b26a137ec | 346 | while (_cmd.readable() && resp < ARRAY_SIZE(response)) { |
ivygatech | 0:9e5b26a137ec | 347 | temp = _cmd.getc(); |
ivygatech | 0:9e5b26a137ec | 348 | response[resp++] = (char)temp; |
ivygatech | 0:9e5b26a137ec | 349 | } |
ivygatech | 0:9e5b26a137ec | 350 | switch (resp) { |
ivygatech | 0:9e5b26a137ec | 351 | case 3 : |
ivygatech | 0:9e5b26a137ec | 352 | resp = (int)response[2]; // if OK populate data |
ivygatech | 0:9e5b26a137ec | 353 | break; |
ivygatech | 0:9e5b26a137ec | 354 | default : |
ivygatech | 0:9e5b26a137ec | 355 | resp = -1; // else return 0 |
ivygatech | 0:9e5b26a137ec | 356 | break; |
ivygatech | 0:9e5b26a137ec | 357 | } |
ivygatech | 0:9e5b26a137ec | 358 | |
ivygatech | 0:9e5b26a137ec | 359 | #if DEBUGMODE |
ivygatech | 0:9e5b26a137ec | 360 | pc.printf(" Answer received : %d\n", resp); |
ivygatech | 0:9e5b26a137ec | 361 | #endif |
ivygatech | 0:9e5b26a137ec | 362 | |
ivygatech | 0:9e5b26a137ec | 363 | return resp; |
ivygatech | 0:9e5b26a137ec | 364 | } |