Jingyi Zhang
/
uVGAIII_demo
A demo program using uVGAIII board.
Fork of uVGAIII_demo by
Diff: uVGAIII/uVGAIII_main.cpp
- Revision:
- 2:6ecb8ceea422
- Parent:
- 1:333b7b189790
diff -r 333b7b189790 -r 6ecb8ceea422 uVGAIII/uVGAIII_main.cpp --- a/uVGAIII/uVGAIII_main.cpp Mon Mar 24 17:29:15 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,364 +0,0 @@ -// -// uVGAIII is a class to drive 4D Systems TFT touch screens -// -// Copyright (C) <2010> Stephane ROCHON <stephane.rochon at free.fr> -// -// uVGAIII is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// uVGAIII is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with uVGAIII. If not, see <http://www.gnu.org/licenses/>. - -#include "mbed.h" -#include "uVGAIII.h" - -#define ARRAY_SIZE(X) sizeof(X)/sizeof(X[0]) - -//Serial pc(USBTX,USBRX); - -//****************************************************************************************************** -uVGAIII :: uVGAIII(PinName tx, PinName rx, PinName rst) : _cmd(tx, rx), - _rst(rst) -#if DEBUGMODE - ,pc(USBTX, USBRX) -#endif // DEBUGMODE -{ // Constructor - -#if DEBUGMODE - pc.baud(115200); - - pc.printf("\n\n\n"); - pc.printf("********************\n"); - pc.printf("uVGAIII CONSTRUCTOR\n"); - pc.printf("********************\n"); -#endif - _cmd.baud(9600); - _rst = 1; // put RESET pin to high to start TFT screen - - reset(); - cls(); // clear screen - speversion(); // get SPE version information - pmmcversion(); // get PmmC version information - - current_col = 0; // initial cursor col - current_row = 0; // initial cursor row - current_color = WHITE; // initial text color - current_orientation = IS_LANDSCAPE; // initial screen orientation - - set_font(FONT3); // initial font ( This line can be removed because font has been set to be FONT3 ) - text_opacity(OPAQUE); // initial text opacity ( This line can be removed because text opacity has been set to be OPAQUE ) -} - -//****************************************************************************************************** -void uVGAIII :: writeBYTE(char c) { // send a BYTE command to screen - - _cmd.putc(c); - wait_ms(1); - -#if DEBUGMODE - pc.printf(" Char sent : 0x%02X\n",c); -#endif - -} - -//****************************************************************************************************** -void uVGAIII :: freeBUFFER(void) { // Clear serial buffer before writing command - - while (_cmd.readable()) _cmd.getc(); // clear buffer garbage -} - -//****************************************************************************************************** -int uVGAIII :: writeCOMMAND(char *command, int commNum, int respNum) { // send several BYTES making a command and return an answer - -#if DEBUGMODE - pc.printf("\n"); - pc.printf("New COMMAND : 0x%02X%02X\n", command[0], command[1]); -#endif - int i, resp = 0; - freeBUFFER(); - - for (i = 0; i < commNum; i++) {writeBYTE(command[i]); wait_ms(100);} // send command to serial port - - for (i = 0; i < respNum; i++) { - while (!_cmd.readable()) wait_ms(TEMPO); // wait for screen answer - if (_cmd.readable()) { - resp = _cmd.getc(); // read response if any -#if DEBUGMODE - pc.printf("response = 0x%02X\n",resp); -#endif - } - } - return resp; -} - -//************************************************************************** -void uVGAIII :: reset() { // Reset Screen - - _rst = 0; // put RESET pin to low - wait_ms(TEMPO); // wait a few milliseconds for command reception - _rst = 1; // put RESET back to high - wait(3.2); // wait 3s for screen to restart - - freeBUFFER(); // clean buffer from possible garbage - -#if DEBUGMODE - pc.printf("Reset completed.\n"); -#endif -} - -//************************************************************************** -void uVGAIII :: speversion() { // get SPE version - char command[2] = ""; - int spe = 0; - command[0] = (SPEVERSION >> 8) & 0xFF; - command[1] = SPEVERSION & 0xFF; - - spe = readVERSION(command, 2); - - pc.printf("spe:%d\n",spe); -} - -//************************************************************************** -void uVGAIII :: pmmcversion() { // get PmmC version - char command[2] = ""; - int pmmc = 0; - command[0] = (PMMCVERSION >> 8) & 0xFF; - command[1] = PMMCVERSION & 0xFF; - - pmmc = readVERSION(command, 2); - - pc.printf("pmmc:%d\n",pmmc); -} - -//************************************************************************** -void uVGAIII :: baudrate(int speed) { // set screen baud rate - char command[4]= ""; - command[0] = ( BAUDRATE >> 8 ) & 0xFF; - command[1] = BAUDRATE & 0xFF; - switch (speed) { - case 110 : - command[2] = ( BAUD_110 >> 8 ) & 0xFF; - command[3] = BAUD_110 & 0xFF; - break; - case 300 : - command[2] = ( BAUD_300 >> 8 ) & 0xFF; - command[3] = BAUD_300 & 0xFF; - break; - case 600 : - command[2] = ( BAUD_600 >> 8 ) & 0xFF; - command[3] = BAUD_600 & 0xFF; - break; - case 1200 : - command[2] = ( BAUD_1200>> 8 ) & 0xFF; - command[3] = BAUD_1200 & 0xFF; - break; - case 2400 : - command[2] = ( BAUD_2400 >> 8 ) & 0xFF; - command[3] = BAUD_2400 & 0xFF; - break; - case 4800 : - command[2] = ( BAUD_4800 >> 8 ) & 0xFF; - command[3] = BAUD_4800 & 0xFF; - break; - case 9600 : - command[2] = ( BAUD_9600 >> 8 ) & 0xFF; - command[3] = BAUD_9600 & 0xFF; - break; - case 14400 : - command[2] = ( BAUD_9600 >> 8 ) & 0xFF; - command[3] = BAUD_9600 & 0xFF; - break; - case 19200 : - command[2] = ( BAUD_19200 >> 8 ) & 0xFF; - command[3] = BAUD_19200 & 0xFF; - break; - case 31250 : - command[2] = ( BAUD_31250 >> 8 ) & 0xFF; - command[3] = BAUD_31250 & 0xFF; - break; - case 38400 : - command[2] = ( BAUD_38400 >> 8 ) & 0xFF; - command[3] = BAUD_38400 & 0xFF; - break; - case 56000 : - command[2] = ( BAUD_56000 >> 8 ) & 0xFF; - command[3] = BAUD_56000 & 0xFF; - break; - case 57600 : - command[2] = ( BAUD_57600 >> 8 ) & 0xFF; - command[3] = BAUD_57600 & 0xFF; - break; - case 115200 : - command[2] = ( BAUD_115200 >> 8 ) & 0xFF; - command[3] = BAUD_115200 & 0xFF; - break; - case 128000 : - command[2] = ( BAUD_128000 >> 8 ) & 0xFF; - command[3] = BAUD_128000 & 0xFF; - break; - case 256000 : - command[2] = ( BAUD_256000 >> 8 ) & 0xFF; - command[3] = BAUD_256000 & 0xFF; - break; - default : - command[2] = ( BAUD_9600 >> 8 ) & 0xFF; - command[3] = BAUD_9600 & 0xFF; - speed = 9600; - break; - } -#if DEBUGMODE - pc.printf("\n"); - pc.printf("New COMMAND : 0x%02X%02X\n", command[0], command[1]); -#endif - int i, resp = 0; - freeBUFFER(); - - for (i = 0; i < 4; i++) writeBYTE(command[i]); // send command to serial port - wait_ms(5); - _cmd.baud(speed); // set mbed to same speed - - while (!_cmd.readable()) wait_ms(TEMPO); // wait for screen answer - if (_cmd.readable()) resp = _cmd.getc(); // read response if any - -#if DEBUGMODE - pc.printf("response = 0x%02X\n",resp); -#endif - -#if DEBUGMODE - pc.printf("Set baudrate completed.\n"); -#endif -} - -//****************************************************************************************************** -int uVGAIII :: readVERSION(char *command, int number) { // read screen info and populate data - - int i, temp = 0, resp = 0; - char response[5] = ""; - -#if DEBUGMODE - pc.printf("\n"); - pc.printf("New COMMAND : 0x%02X%02X\n", command[0], command[1]); -#endif - - freeBUFFER(); - - for (i = 0; i < number; i++) writeBYTE(command[i]); // send all chars to serial port - - while (!_cmd.readable()) wait_ms(TEMPO); // wait for screen answer - - while (_cmd.readable() && resp < ARRAY_SIZE(response)) { - temp = _cmd.getc(); - response[resp] = (char)temp; - pc.printf("response = 0x%02X\n",response[resp]); - resp++; - } - switch (resp) { - case 3 : // if OK populate data and return version - version = int(response[1]) << 8 | response[2]; - break; - default : - version = 0; // return 0 - break; - } - return version; -} - -//**************************************************************************************************** -void uVGAIII :: set_volume(char value) { // set sound volume to value - char command[4] = ""; - - command[0] = (SETVOLUME >> 8) & 0xFF; - command[1] = SETVOLUME & 0xFF; - - command[2] = 0; - command[3] = value; - - writeCOMMAND(command, 4, 1); - -#if DEBUGMODE - pc.printf("Sound volume completed.\n"); -#endif -} - -//****************************************************************************************************** -void uVGAIII :: getTOUCH(char *command, int number, int *xy) { // read screen info and populate data - -#if DEBUGMODE - pc.printf("\n"); - pc.printf("New COMMAND : 0x%02X%02X\n", command[0], command[1]); -#endif - int i, temp = 0, resp = 0; - char response[5] = ""; - - freeBUFFER(); - - for (i = 0; i < number; i++) writeBYTE(command[i]); // send all chars to serial port - - while (!_cmd.readable()) wait_ms(TEMPO); // wait for screen answer - - while (_cmd.readable() && resp < ARRAY_SIZE(response)) { - temp = _cmd.getc(); - response[resp++] = (char)temp; - } - -#if DEBUGMODE - pc.printf(" Answer received %d : 0x%02X 0x%02X 0x%02X\n", resp, response[0], response[1], response[2]); -#endif - - switch (resp) { - case 3 : // if OK populate data - *xy = ((response[1]<<8)+ response[2]) * (response[1] != 0xFF); - break; - default : - *xy = -1; - break; - } - -#if DEBUGMODE - pc.printf(" X or Y : %03d\n", *xy); -#endif -} - -//****************************************************************************************************** -int uVGAIII :: getSTATUS(char *command, int number) { // read screen info and populate data - -#if DEBUGMODE - pc.printf("\n"); - pc.printf("New COMMAND : 0x%02X%02X\n", command[0], command[1]); -#endif - - int i, temp = 0, resp = 0; - char response[5] = ""; - - freeBUFFER(); - - for (i = 0; i < number; i++) writeBYTE(command[i]); // send all chars to serial port - - while (!_cmd.readable()) wait_ms(TEMPO); // wait for screen answer - - while (_cmd.readable() && resp < ARRAY_SIZE(response)) { - temp = _cmd.getc(); - response[resp++] = (char)temp; - } - switch (resp) { - case 3 : - resp = (int)response[2]; // if OK populate data - break; - default : - resp = -1; // else return 0 - break; - } - -#if DEBUGMODE - pc.printf(" Answer received : %d\n", resp); -#endif - - return resp; -} \ No newline at end of file