Driver for 4D Systems LCD screen with Picaso processor. Ported from 4D Systems Picaso Serial Linux Library
Dependents: uLCD_4D_24PTU Drawing Program RoommateTracker_ScreenAndPhone ece4180_roommate_tracker_final
Diff: uLCD_4D_Picaso.cpp
- Revision:
- 0:e314f3b805ed
- Child:
- 1:1e8da43647e9
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uLCD_4D_Picaso.cpp Fri Mar 06 00:35:58 2015 +0000 @@ -0,0 +1,2210 @@ +/** + * This is a class to drive 4D systems screens with Picaso graphics processors + * + * This is a port of the 4D systems Picaso Serial Linux Library + * Copyright (c) 2014 4D Systems PTY Ltd, Sydney, Australia + * From https://github.com/4dsystems/Picaso-Serial-Linux-Library, retrieved March 5, 2015 + * + * All software in this library is provided without warranty; use at your own risk. + */ + +#include "mbed.h" +#include <string.h> +#include <math.h> +#include <ctype.h> + +#include "Picaso_Types4D.h" // defines data types used by the 4D Routines +#include "Picaso_const4D.h" // defines for 4dgl constants, generated by conversion of 4DGL constants to target language +#include "uLCD_4D_Picaso.h" + +//Error types +#define Err4D_OK 0 +#define Err4D_Timeout 1 +#define Err4D_NAK 2 + + +//Default wait time (in ms) for Serial acknowledgement +#define RX_MAX_WAIT_DEFAULT 2000 + +#if LCD_USING_MODSERIAL +//Serial port buffer sizes +#define TX_BUF_SIZE 256 +#define RX_BUF_SIZE 2048 +#endif + +/* + * Start of 4D Intrinsic Routines +*/ +uLCD_4D_Picaso::uLCD_4D_Picaso(PinName tx, PinName rx, PinName reset) : + #if LCD_USING_MODSERIAL + serial(tx, rx, TX_BUF_SIZE, RX_BUF_SIZE), + #else + serial(tx, rx), + #endif + rst(reset) +{ + #if LCD_USING_MODSERIAL + printf("Using modserial\r\n"); + #else + printf("Not using modserial\r\n"); + #endif + TimeLimit4D = RX_MAX_WAIT_DEFAULT; + serial.baud(9600); + LCD_reset(); + gfx_Cls(); +} + +void uLCD_4D_Picaso::LCD_reset() { + rst = 0; + LCD_wait_ms(1); + rst = 1; + LCD_wait_ms(3000); + rxFlush(); +} + +void uLCD_4D_Picaso::LCD_wait_ms(int ms) { + timer.reset(); + timer.start(); + while (timer.read_ms() < ms); + timer.stop(); + return; +} + +void uLCD_4D_Picaso::rxFlush() { + while (serial.readable()) { + serial.getc(); + } +} + +void uLCD_4D_Picaso::WriteBytes(char *psOutput, int nCount) { + int i; + rxFlush(); + for (i = 0; i < nCount; ++i) { + while (!serial.writeable()); + serial.putc(psOutput[i]); + } +} + +void uLCD_4D_Picaso::WriteChars(char *psOutput) { + // Include NULL in output + WriteBytes(psOutput, strlen((char *)psOutput) + 1); + return; +} + +void uLCD_4D_Picaso::WriteWords(WORD * Source, int Size) { + WORD wk ; + int i ; + for (i = 0; i < Size; i++) + { + wk = *Source++ ; + wk = (wk >> 8) + (wk << 8) ; + WriteBytes((char *)&wk, 2); + } +} + +// read string from the serial port +// return code: +// >= 0 = number of characters read +// -1 = read failed +int uLCD_4D_Picaso::ReadSerPort(char *psData, int iMax) { + int i; + Error4D = Err4D_OK; + + timer.reset(); + timer.start(); + + for (i = 0; i < iMax; ++i) { + while (!serial.readable()) { + if (timer.read_ms() >= TimeLimit4D) { + Error4D = Err4D_Timeout; + timer.stop(); + return -1; + } + } + psData[i] = serial.getc(); + } + + timer.stop(); + return iMax; +} + +void uLCD_4D_Picaso::getbytes(char *data, int size) { + int readc; + readc = ReadSerPort(data, size); + if (readc != size) { + printf("LCD serial: read timeout\r\n"); + } +} + +void uLCD_4D_Picaso::GetAck(void) { + char readx; + getbytes(&readx, 1); + + if (readx != 6) { + Error4D = Err4D_NAK; + printf("LCD serial: no ACK received\r\n"); + } + return; +} + + +WORD uLCD_4D_Picaso::GetWord(void) { + char readx[2]; + getbytes(readx, 2); + return readx[0] << 8 | readx[1]; +} + +void uLCD_4D_Picaso::getString(char *outStr, int strLen) { + getbytes(outStr, strLen); + + // Append EOS + outStr[strLen] = '\0'; + + return; +} + +WORD uLCD_4D_Picaso::GetAckResp(void) { + GetAck(); + return GetWord(); +} + +WORD uLCD_4D_Picaso::WaitForAck(void) { + int saveTimeout = TimeLimit4D; + + // check once per minute + TimeLimit4D = 60 * 1000; + do { + GetAck(); + } while (Error4D != Err4D_OK); + + // Restore callback/timeout saves + TimeLimit4D = saveTimeout; + + return GetWord(); +} + +WORD uLCD_4D_Picaso::GetAckRes2Words(WORD * word1, WORD * word2) { + int Result; + GetAck(); + Result = GetWord(); + *word1 = GetWord(); + *word2 = GetWord(); + return Result; +} + +void uLCD_4D_Picaso::GetAck2Words(WORD * word1, WORD * word2) { + GetAck(); + *word1 = GetWord(); + *word2 = GetWord(); +} + +WORD uLCD_4D_Picaso::GetAckResSector(t4DSector Sector) { + int Result; + GetAck(); + Result = GetWord(); + getbytes(Sector, 512); + return Result; +} + +WORD uLCD_4D_Picaso::GetAckResStr(char * OutStr) { + int Result; + GetAck(); + Result = GetWord(); + getString(OutStr, Result); + return Result; +} + +WORD uLCD_4D_Picaso::GetAckResData(t4DByteArray OutData, WORD size) { + int Result; + GetAck(); + Result = GetWord(); + getbytes(OutData, size); + return Result; +} + + +void uLCD_4D_Picaso::SetThisBaudrate(uLCD_4D_Picaso::BaudRate Newrate) { + int nBaud; + + switch (Newrate) { + case BAUD_110: nBaud = 110; break; + case BAUD_300: nBaud = 300; break; + case BAUD_600: nBaud = 600; break; + case BAUD_1200: nBaud = 1200; break; + case BAUD_2400: nBaud = 2400; break; + case BAUD_4800: nBaud = 4800; break; + case BAUD_9600: nBaud = 9600; break; + case BAUD_14400: nBaud = 14400; break; + case BAUD_19200: nBaud = 19200; break; + case BAUD_31250: nBaud = 31250; break; + case BAUD_38400: nBaud = 38400; break; + case BAUD_56000: nBaud = 56000; break; + case BAUD_57600: nBaud = 57600; break; + case BAUD_115200: nBaud = 115200; break; + case BAUD_128000: nBaud = 133929; break; + case BAUD_256000: nBaud = 281250; break; + case BAUD_300000: nBaud = 312500; break; + case BAUD_375000: nBaud = 401786; break; + case BAUD_500000: nBaud = 562500; break; + case BAUD_600000: nBaud = 703125; break; + + default: + nBaud = 9600 ; + } + + //Need to wait for the previous command to get out before setting new baud rate. + //10 ms seems to work for 9600, 40 ms for 2400 + //Even using MODSERIAL's txIsBusy() doesn't seem to replace the need for this + LCD_wait_ms(40); + serial.baud(nBaud); + + //Wait 100ms, as specified in serial command manual + LCD_wait_ms(100); + + return; +} + +/* + * End Of Intrinsic 4DRoutines here +*/ + +/* + * Starts of 4D Compound Routines +*/ + +WORD uLCD_4D_Picaso::bus_In() +{ + char towrite[2] ; + + towrite[0]= F_bus_In >> 8 ; + towrite[1]= F_bus_In ; + WriteBytes(towrite, 2) ; + return GetAckResp() ; +} + +void uLCD_4D_Picaso::bus_Out(WORD Bits) +{ + char towrite[4] ; + + towrite[0]= F_bus_Out >> 8 ; + towrite[1]= F_bus_Out ; + towrite[2]= Bits >> 8 ; + towrite[3]= Bits ; + WriteBytes(towrite, 4) ; + GetAck() ; +} + +WORD uLCD_4D_Picaso::bus_Read() +{ + char towrite[2] ; + + towrite[0]= F_bus_Read >> 8 ; + towrite[1]= F_bus_Read ; + WriteBytes(towrite, 2) ; + return GetAckResp() ; +} + +void uLCD_4D_Picaso::bus_Set(WORD IOMap) +{ + char towrite[4] ; + + towrite[0]= F_bus_Set >> 8 ; + towrite[1]= F_bus_Set ; + towrite[2]= IOMap >> 8 ; + towrite[3]= IOMap ; + WriteBytes(towrite, 4) ; + GetAck() ; +} + +void uLCD_4D_Picaso::bus_Write(WORD Bits) +{ + char towrite[4] ; + + towrite[0]= F_bus_Write >> 8 ; + towrite[1]= F_bus_Write ; + towrite[2]= Bits >> 8 ; + towrite[3]= Bits ; + WriteBytes(towrite, 4) ; + GetAck() ; +} + +WORD uLCD_4D_Picaso::charheight(char TestChar) +{ + char towrite[3] ; + + towrite[0]= F_charheight >> 8 ; + towrite[1]= F_charheight ; + towrite[2]= TestChar; + WriteBytes(towrite, 3) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::charwidth(char TestChar) +{ + char towrite[3] ; + + towrite[0]= F_charwidth >> 8 ; + towrite[1]= F_charwidth ; + towrite[2]= TestChar; + WriteBytes(towrite, 3) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::file_Close(WORD Handle) +{ + char towrite[4] ; + + towrite[0]= F_file_Close >> 8 ; + towrite[1]= F_file_Close & 0xFF; + towrite[2]= Handle >> 8 ; + towrite[3]= Handle ; + WriteBytes(towrite, 4) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::file_Count(char* Filename) +{ + char towrite[2] ; + + towrite[0]= F_file_Count >> 8 ; + towrite[1]= F_file_Count ; + WriteBytes(towrite, 2) ; + WriteChars(Filename) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::file_Dir(char* Filename) +{ + char towrite[2] ; + + towrite[0]= F_file_Dir >> 8 ; + towrite[1]= F_file_Dir ; + WriteBytes(towrite, 2) ; + WriteChars(Filename) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::file_Erase(char* Filename) +{ + char towrite[2] ; + + towrite[0]= F_file_Erase >> 8 ; + towrite[1]= F_file_Erase & 0xFF; + WriteBytes(towrite, 2) ; + WriteChars(Filename) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::file_Error() +{ + char towrite[2] ; + + towrite[0]= F_file_Error >> 8 ; + towrite[1]= F_file_Error & 0xFF; + WriteBytes(towrite, 2) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::file_Exec(char* Filename, WORD ArgCount, t4DWordArray Args) +{ + char towrite[2] ; + + towrite[0]= F_file_Exec >> 8 ; + towrite[1]= F_file_Exec & 0xFF; + WriteBytes(towrite, 2) ; + WriteChars(Filename) ; + towrite[0]= ArgCount >> 8 ; + towrite[1]= ArgCount ; + WriteBytes(towrite, 2) ; + WriteWords(Args, ArgCount) ; + return WaitForAck() ; +} + +WORD uLCD_4D_Picaso::file_Exists(char* Filename) +{ + char towrite[2] ; + + towrite[0]= F_file_Exists >> 8 ; + towrite[1]= F_file_Exists & 0xFF; + WriteBytes(towrite, 2) ; + WriteChars(Filename) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::file_FindFirst(char* Filename) +{ + char towrite[2] ; + + towrite[0]= F_file_FindFirst >> 8 ; + towrite[1]= F_file_FindFirst & 0xFF; + WriteBytes(towrite, 2) ; + WriteChars(Filename) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::file_FindNext() +{ + char towrite[2] ; + towrite[0]= F_file_FindNext >> 8 ; + towrite[1]= F_file_FindNext & 0xFF; + WriteBytes(towrite, 2) ; + return GetAckResp() ; +} + +char uLCD_4D_Picaso::file_GetC(WORD Handle) +{ + char towrite[4] ; + towrite[0]= F_file_GetC >> 8 ; + towrite[1]= F_file_GetC & 0xFF; + towrite[2]= Handle >> 8 ; + towrite[3]= Handle ; + WriteBytes(towrite, 4) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::file_GetS(char* StringIn, WORD Size, WORD Handle) +{ + char towrite[6] ; + towrite[0]= F_file_GetS >> 8 ; + towrite[1]= F_file_GetS & 0xFF; + towrite[2]= Size >> 8 ; + towrite[3]= Size ; + towrite[4]= Handle >> 8 ; + towrite[5]= Handle ; + WriteBytes(towrite, 6) ; + return GetAckResStr(StringIn) ; +} + +WORD uLCD_4D_Picaso::file_GetW(WORD Handle) +{ + char towrite[4] ; + towrite[0]= F_file_GetW >> 8 ; + towrite[1]= F_file_GetW & 0xFF; + towrite[2]= Handle >> 8 ; + towrite[3]= Handle ; + WriteBytes(towrite, 4) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::file_Image(WORD X, WORD Y, WORD Handle) +{ + char towrite[8] ; + towrite[0]= F_file_Image >> 8 ; + towrite[1]= F_file_Image & 0xFF; + towrite[2]= X >> 8 ; + towrite[3]= X ; + towrite[4]= Y >> 8 ; + towrite[5]= Y ; + towrite[6]= Handle >> 8 ; + towrite[7]= Handle ; + WriteBytes(towrite, 8) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::file_Index(WORD Handle, WORD HiSize, WORD LoSize, WORD Recordnum) +{ + char towrite[10] ; + towrite[0]= F_file_Index >> 8 ; + towrite[1]= F_file_Index & 0xFF; + towrite[2]= Handle >> 8 ; + towrite[3]= Handle ; + towrite[4]= HiSize >> 8 ; + towrite[5]= HiSize ; + towrite[6]= LoSize >> 8 ; + towrite[7]= LoSize ; + towrite[8]= Recordnum >> 8 ; + towrite[9]= Recordnum ; + WriteBytes(towrite, 10) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::file_LoadFunction(char* Filename) +{ + char towrite[2] ; + towrite[0]= F_file_LoadFunction >> 8 ; + towrite[1]= F_file_LoadFunction ; + WriteBytes(towrite, 2) ; + WriteChars(Filename) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::file_LoadImageControl(char* Datname, char* GCIName, WORD Mode) +{ + char towrite[2] ; + towrite[0]= F_file_LoadImageControl >> 8 ; + towrite[1]= F_file_LoadImageControl ; + WriteBytes(towrite, 2) ; + WriteChars(Datname) ; + WriteChars(GCIName) ; + towrite[0]= Mode >> 8 ; + towrite[1]= Mode ; + WriteBytes(towrite, 2) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::file_Mount() +{ + char towrite[2] ; + towrite[0]= F_file_Mount >> 8 ; + towrite[1]= F_file_Mount & 0xFF; + WriteBytes(towrite, 2) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::file_Open(char* Filename, char Mode) +{ + char towrite[2] ; + towrite[0]= F_file_Open >> 8 ; + towrite[1]= F_file_Open & 0xFF; + WriteBytes(towrite, 2) ; + WriteChars(Filename) ; + towrite[0]= Mode; + WriteBytes(towrite, 1) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::file_PlayWAV(char* Filename) +{ + char towrite[2] ; + towrite[0]= F_file_PlayWAV >> 8 ; + towrite[1]= F_file_PlayWAV & 0xFF; + WriteBytes(towrite, 2) ; + WriteChars(Filename) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::file_PutC(char Character, WORD Handle) +{ + char towrite[5] ; + towrite[0]= F_file_PutC >> 8 ; + towrite[1]= F_file_PutC ; + towrite[2]= Character; + towrite[3]= Handle >> 8 ; + towrite[4]= Handle ; + WriteBytes(towrite, 5) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::file_PutS(char * StringOut, WORD Handle) +{ + char towrite[2] ; + towrite[0]= F_file_PutS >> 8 ; + towrite[1]= F_file_PutS & 0xFF; + WriteBytes(towrite, 2) ; + WriteChars(StringOut) ; + towrite[0]= Handle >> 8 ; + towrite[1]= Handle ; + WriteBytes(towrite, 2) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::file_PutW(WORD Word, WORD Handle) +{ + char towrite[6] ; + towrite[0]= F_file_PutW >> 8 ; + towrite[1]= F_file_PutW & 0xFF; + towrite[2]= Word >> 8 ; + towrite[3]= Word ; + towrite[4]= Handle >> 8 ; + towrite[5]= Handle ; + WriteBytes(towrite, 6) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::file_Read(t4DByteArray Data, WORD Size, WORD Handle) +{ + char towrite[6] ; + towrite[0]= F_file_Read >> 8 ; + towrite[1]= F_file_Read & 0xFF; + towrite[2]= Size >> 8 ; + towrite[3]= Size ; + towrite[4]= Handle >> 8 ; + towrite[5]= Handle ; + WriteBytes(towrite, 6) ; + return GetAckResData(Data,Size) ; +} + +WORD uLCD_4D_Picaso::file_Rewind(WORD Handle) +{ + char towrite[4] ; + towrite[0]= F_file_Rewind >> 8 ; + towrite[1]= F_file_Rewind & 0xFF; + towrite[2]= Handle >> 8 ; + towrite[3]= Handle ; + WriteBytes(towrite, 4) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::file_Run(char * Filename, WORD ArgCount, t4DWordArray Args) +{ + char towrite[2] ; + towrite[0]= F_file_Run >> 8 ; + towrite[1]= F_file_Run & 0xFF; + WriteBytes(towrite, 2) ; + WriteChars(Filename) ; + towrite[0]= ArgCount >> 8 ; + towrite[1]= ArgCount ; + WriteBytes(towrite, 2) ; + WriteWords(Args, ArgCount) ; + return WaitForAck() ; +} + +WORD uLCD_4D_Picaso::file_ScreenCapture(WORD X, WORD Y, WORD Width, WORD Height, WORD Handle) +{ + char towrite[12] ; + towrite[0]= F_file_ScreenCapture >> 8 ; + towrite[1]= F_file_ScreenCapture & 0xFF; + towrite[2]= X >> 8 ; + towrite[3]= X ; + towrite[4]= Y >> 8 ; + towrite[5]= Y ; + towrite[6]= Width >> 8 ; + towrite[7]= Width ; + towrite[8]= Height >> 8 ; + towrite[9]= Height ; + towrite[10]= Handle >> 8 ; + towrite[11]= Handle ; + WriteBytes(towrite, 12) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::file_Seek(WORD Handle, WORD HiWord, WORD LoWord) +{ + char towrite[8] ; + towrite[0]= F_file_Seek >> 8 ; + towrite[1]= F_file_Seek & 0xFF; + towrite[2]= Handle >> 8 ; + towrite[3]= Handle ; + towrite[4]= HiWord >> 8 ; + towrite[5]= HiWord ; + towrite[6]= LoWord >> 8 ; + towrite[7]= LoWord ; + WriteBytes(towrite, 8) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::file_Size(WORD Handle, WORD * HiWord, WORD * LoWord) +{ + char towrite[4] ; + towrite[0]= F_file_Size >> 8 ; + towrite[1]= F_file_Size ; + towrite[2]= Handle >> 8 ; + towrite[3]= Handle ; + WriteBytes(towrite, 4) ; + return GetAckRes2Words(HiWord,LoWord) ; +} + +WORD uLCD_4D_Picaso::file_Tell(WORD Handle, WORD * HiWord, WORD * LoWord) +{ + char towrite[4] ; + towrite[0]= F_file_Tell >> 8 ; + towrite[1]= F_file_Tell ; + towrite[2]= Handle >> 8 ; + towrite[3]= Handle ; + WriteBytes(towrite, 4) ; + return GetAckRes2Words(HiWord,LoWord) ; +} + +void uLCD_4D_Picaso::file_Unmount() +{ + char towrite[2] ; + + towrite[0]= F_file_Unmount >> 8 ; + towrite[1]= F_file_Unmount & 0xFF; + WriteBytes(towrite, 2) ; + GetAck() ; +} + +WORD uLCD_4D_Picaso::file_Write(WORD Size, t4DByteArray Source, WORD Handle) +{ + char towrite[4] ; + towrite[0]= F_file_Write >> 8 ; + towrite[1]= F_file_Write ; + towrite[2]= Size >> 8 ; + towrite[3]= Size ; + WriteBytes(towrite, 4) ; + WriteBytes(Source, Size) ; + towrite[0]= Handle >> 8 ; + towrite[1]= Handle ; + WriteBytes(towrite, 2) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::gfx_BevelShadow(WORD Value) +{ + char towrite[4] ; + towrite[0]= F_gfx_BevelShadow >> 8 ; + towrite[1]= F_gfx_BevelShadow ; + towrite[2]= Value >> 8 ; + towrite[3]= Value ; + WriteBytes(towrite, 4) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::gfx_BevelWidth(WORD Value) +{ + char towrite[4] ; + towrite[0]= F_gfx_BevelWidth >> 8 ; + towrite[1]= F_gfx_BevelWidth ; + towrite[2]= Value >> 8 ; + towrite[3]= Value ; + WriteBytes(towrite, 4) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::gfx_BGcolour(WORD Color) +{ + char towrite[4] ; + towrite[0]= F_gfx_BGcolour >> 8 ; + towrite[1]= F_gfx_BGcolour ; + towrite[2]= Color >> 8 ; + towrite[3]= Color ; + WriteBytes(towrite, 4) ; + return GetAckResp() ; +} + +void uLCD_4D_Picaso::gfx_Button(WORD Up, WORD x, WORD y, WORD buttonColour, WORD txtColour, WORD font, WORD txtWidth, WORD txtHeight, char * text) +{ + char towrite[18] ; + towrite[0]= F_gfx_Button >> 8 ; + towrite[1]= F_gfx_Button ; + towrite[2]= Up >> 8 ; + towrite[3]= Up ; + towrite[4]= x >> 8 ; + towrite[5]= x ; + towrite[6]= y >> 8 ; + towrite[7]= y ; + towrite[8]= buttonColour >> 8 ; + towrite[9]= buttonColour ; + towrite[10]= txtColour >> 8 ; + towrite[11]= txtColour ; + towrite[12]= font >> 8 ; + towrite[13]= font ; + towrite[14]= txtWidth >> 8 ; + towrite[15]= txtWidth ; + towrite[16]= txtHeight >> 8 ; + towrite[17]= txtHeight ; + WriteBytes(towrite, 18) ; + WriteChars( text) ; + GetAck() ; +} + +void uLCD_4D_Picaso::gfx_ChangeColour(WORD OldColor, WORD NewColor) +{ + char towrite[6] ; + + towrite[0]= F_gfx_ChangeColour >> 8 ; + towrite[1]= F_gfx_ChangeColour ; + towrite[2]= OldColor >> 8 ; + towrite[3]= OldColor ; + towrite[4]= NewColor >> 8 ; + towrite[5]= NewColor ; + WriteBytes(towrite, 6) ; + GetAck() ; +} + +void uLCD_4D_Picaso::gfx_Circle(WORD X, WORD Y, WORD Radius, WORD Color) +{ + char towrite[10] ; + + towrite[0]= F_gfx_Circle >> 8 ; + towrite[1]= F_gfx_Circle ; + towrite[2]= X >> 8 ; + towrite[3]= X ; + towrite[4]= Y >> 8 ; + towrite[5]= Y ; + towrite[6]= Radius >> 8 ; + towrite[7]= Radius ; + towrite[8]= Color >> 8 ; + towrite[9]= Color ; + WriteBytes(towrite, 10) ; + GetAck() ; +} + +void uLCD_4D_Picaso::gfx_CircleFilled(WORD X, WORD Y, WORD Radius, WORD Color) +{ + char towrite[10] ; + + towrite[0]= F_gfx_CircleFilled >> 8 ; + towrite[1]= F_gfx_CircleFilled ; + towrite[2]= X >> 8 ; + towrite[3]= X ; + towrite[4]= Y >> 8 ; + towrite[5]= Y ; + towrite[6]= Radius >> 8 ; + towrite[7]= Radius ; + towrite[8]= Color >> 8 ; + towrite[9]= Color ; + WriteBytes(towrite, 10) ; + GetAck() ; +} + +void uLCD_4D_Picaso::gfx_Clipping(WORD OnOff) +{ + char towrite[4] ; + + towrite[0]= F_gfx_Clipping >> 8 ; + towrite[1]= F_gfx_Clipping ; + towrite[2]= OnOff >> 8 ; + towrite[3]= OnOff ; + WriteBytes(towrite, 4) ; + GetAck() ; +} + +void uLCD_4D_Picaso::gfx_ClipWindow(WORD X1, WORD Y1, WORD X2, WORD Y2) +{ + char towrite[10] ; + + towrite[0]= F_gfx_ClipWindow >> 8 ; + towrite[1]= F_gfx_ClipWindow ; + towrite[2]= X1 >> 8 ; + towrite[3]= X1 ; + towrite[4]= Y1 >> 8 ; + towrite[5]= Y1 ; + towrite[6]= X2 >> 8 ; + towrite[7]= X2 ; + towrite[8]= Y2 >> 8 ; + towrite[9]= Y2 ; + WriteBytes(towrite, 10) ; + GetAck() ; +} + +void uLCD_4D_Picaso::gfx_Cls() +{ + char towrite[2] ; + towrite[0]= F_gfx_Cls >> 8 ; + towrite[1]= F_gfx_Cls ; + WriteBytes(towrite, 2); + GetAck(); +} + +WORD uLCD_4D_Picaso::gfx_Contrast(WORD Contrast) +{ + char towrite[4] ; + towrite[0]= F_gfx_Contrast >> 8 ; + towrite[1]= F_gfx_Contrast ; + towrite[2]= Contrast >> 8 ; + towrite[3]= Contrast ; + WriteBytes(towrite, 4) ; + return GetAckResp() ; +} + +void uLCD_4D_Picaso::gfx_Ellipse(WORD X, WORD Y, WORD Xrad, WORD Yrad, WORD Color) +{ + char towrite[12] ; + towrite[0]= F_gfx_Ellipse >> 8 ; + towrite[1]= F_gfx_Ellipse ; + towrite[2]= X >> 8 ; + towrite[3]= X ; + towrite[4]= Y >> 8 ; + towrite[5]= Y ; + towrite[6]= Xrad >> 8 ; + towrite[7]= Xrad ; + towrite[8]= Yrad >> 8 ; + towrite[9]= Yrad ; + towrite[10]= Color >> 8 ; + towrite[11]= Color ; + WriteBytes(towrite, 12) ; + GetAck() ; +} + +void uLCD_4D_Picaso::gfx_EllipseFilled(WORD X, WORD Y, WORD Xrad, WORD Yrad, WORD Color) +{ + char towrite[12] ; + towrite[0]= F_gfx_EllipseFilled >> 8 ; + towrite[1]= F_gfx_EllipseFilled ; + towrite[2]= X >> 8 ; + towrite[3]= X ; + towrite[4]= Y >> 8 ; + towrite[5]= Y ; + towrite[6]= Xrad >> 8 ; + towrite[7]= Xrad ; + towrite[8]= Yrad >> 8 ; + towrite[9]= Yrad ; + towrite[10]= Color >> 8 ; + towrite[11]= Color ; + WriteBytes(towrite, 12) ; + GetAck() ; +} + +WORD uLCD_4D_Picaso::gfx_FrameDelay(WORD Msec) +{ + char towrite[4] ; + towrite[0]= F_gfx_FrameDelay >> 8 ; + towrite[1]= F_gfx_FrameDelay ; + towrite[2]= Msec >> 8 ; + towrite[3]= Msec ; + WriteBytes(towrite, 4) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::gfx_Get(WORD Mode) +{ + char towrite[4] ; + towrite[0]= F_gfx_Get >> 8 ; + towrite[1]= F_gfx_Get ; + towrite[2]= Mode >> 8 ; + towrite[3]= Mode ; + WriteBytes(towrite, 4) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::gfx_GetPixel(WORD X, WORD Y) +{ + char towrite[6] ; + towrite[0]= F_gfx_GetPixel >> 8 ; + towrite[1]= F_gfx_GetPixel ; + towrite[2]= X >> 8 ; + towrite[3]= X ; + towrite[4]= Y >> 8 ; + towrite[5]= Y ; + WriteBytes(towrite, 6) ; + return GetAckResp() ; +} + +void uLCD_4D_Picaso::gfx_Line(WORD X1, WORD Y1, WORD X2, WORD Y2, WORD Color) +{ + char towrite[12] ; + towrite[0]= F_gfx_Line >> 8 ; + towrite[1]= F_gfx_Line ; + towrite[2]= X1 >> 8 ; + towrite[3]= X1 ; + towrite[4]= Y1 >> 8 ; + towrite[5]= Y1 ; + towrite[6]= X2 >> 8 ; + towrite[7]= X2 ; + towrite[8]= Y2 >> 8 ; + towrite[9]= Y2 ; + towrite[10]= Color >> 8 ; + towrite[11]= Color ; + WriteBytes(towrite, 12) ; + GetAck() ; +} + +WORD uLCD_4D_Picaso::gfx_LinePattern(WORD Pattern) +{ + char towrite[4] ; + towrite[0]= F_gfx_LinePattern >> 8 ; + towrite[1]= F_gfx_LinePattern ; + towrite[2]= Pattern >> 8 ; + towrite[3]= Pattern ; + WriteBytes(towrite, 4) ; + return GetAckResp() ; +} + +void uLCD_4D_Picaso::gfx_LineTo(WORD X, WORD Y) +{ + char towrite[6] ; + towrite[0]= F_gfx_LineTo >> 8 ; + towrite[1]= F_gfx_LineTo ; + towrite[2]= X >> 8 ; + towrite[3]= X ; + towrite[4]= Y >> 8 ; + towrite[5]= Y ; + WriteBytes(towrite, 6) ; + GetAck() ; +} + +void uLCD_4D_Picaso::gfx_MoveTo(WORD X, WORD Y) +{ + char towrite[6] ; + towrite[0]= F_gfx_MoveTo >> 8 ; + towrite[1]= F_gfx_MoveTo ; + towrite[2]= X >> 8 ; + towrite[3]= X ; + towrite[4]= Y >> 8 ; + towrite[5]= Y ; + WriteBytes(towrite, 6) ; + GetAck() ; +} + +WORD uLCD_4D_Picaso::gfx_Orbit(WORD Angle, WORD Distance, WORD * Xdest, WORD * Ydest) +{ + char towrite[6] ; + towrite[0]= F_gfx_Orbit >> 8 ; + towrite[1]= F_gfx_Orbit ; + towrite[2]= Angle >> 8 ; + towrite[3]= Angle ; + towrite[4]= Distance >> 8 ; + towrite[5]= Distance ; + WriteBytes(towrite, 6) ; + GetAck2Words(Xdest,Ydest) ; + return 0 ; +} + +WORD uLCD_4D_Picaso::gfx_OutlineColour(WORD Color) +{ + char towrite[4] ; + towrite[0]= F_gfx_OutlineColour >> 8 ; + towrite[1]= F_gfx_OutlineColour ; + towrite[2]= Color >> 8 ; + towrite[3]= Color ; + WriteBytes(towrite, 4) ; + return GetAckResp() ; +} + +void uLCD_4D_Picaso::gfx_Panel(WORD Raised, WORD X, WORD Y, WORD Width, WORD Height, WORD Color) +{ + char towrite[14] ; + towrite[0]= F_gfx_Panel >> 8 ; + towrite[1]= F_gfx_Panel ; + towrite[2]= Raised >> 8 ; + towrite[3]= Raised ; + towrite[4]= X >> 8 ; + towrite[5]= X ; + towrite[6]= Y >> 8 ; + towrite[7]= Y ; + towrite[8]= Width >> 8 ; + towrite[9]= Width ; + towrite[10]= Height >> 8 ; + towrite[11]= Height ; + towrite[12]= Color >> 8 ; + towrite[13]= Color ; + WriteBytes(towrite, 14) ; + GetAck() ; +} + +void uLCD_4D_Picaso::gfx_Polygon(WORD n, t4DWordArray Xvalues, t4DWordArray Yvalues, WORD Color) +{ + char towrite[4] ; + towrite[0]= F_gfx_Polygon >> 8 ; + towrite[1]= F_gfx_Polygon ; + towrite[2]= n >> 8 ; + towrite[3]= n ; + WriteBytes(towrite, 4) ; + WriteWords(Xvalues, n) ; + WriteWords(Yvalues, n) ; + towrite[0]= Color >> 8 ; + towrite[1]= Color ; + WriteBytes(towrite, 2) ; + GetAck() ; +} + +void uLCD_4D_Picaso::gfx_PolygonFilled(WORD n, t4DWordArray Xvalues, t4DWordArray Yvalues, WORD Color) +{ + char towrite[4] ; + towrite[0]= F_gfx_PolygonFilled >> 8 ; + towrite[1]= F_gfx_PolygonFilled ; + towrite[2]= n >> 8 ; + towrite[3]= n ; + WriteBytes(towrite, 4) ; + WriteWords(Xvalues, n) ; + WriteWords(Yvalues, n) ; + towrite[0]= Color >> 8 ; + towrite[1]= Color ; + WriteBytes(towrite, 2) ; + GetAck() ; +} + +void uLCD_4D_Picaso::gfx_Polyline(WORD n, t4DWordArray Xvalues, t4DWordArray Yvalues, WORD Color) +{ + char towrite[4] ; + towrite[0]= F_gfx_Polyline >> 8 ; + towrite[1]= F_gfx_Polyline ; + towrite[2]= n >> 8 ; + towrite[3]= n ; + WriteBytes(towrite, 4) ; + WriteWords(Xvalues, n) ; + WriteWords(Yvalues, n) ; + towrite[0]= Color >> 8 ; + towrite[1]= Color ; + WriteBytes(towrite, 2) ; + GetAck() ; +} + +void uLCD_4D_Picaso::gfx_PutPixel(WORD X, WORD Y, WORD Color) +{ + char towrite[8] ; + towrite[0]= F_gfx_PutPixel >> 8 ; + towrite[1]= F_gfx_PutPixel ; + towrite[2]= X >> 8 ; + towrite[3]= X ; + towrite[4]= Y >> 8 ; + towrite[5]= Y ; + towrite[6]= Color >> 8 ; + towrite[7]= Color ; + WriteBytes(towrite, 8) ; + GetAck() ; +} + +void uLCD_4D_Picaso::gfx_Rectangle(WORD X1, WORD Y1, WORD X2, WORD Y2, WORD Color) +{ + char towrite[12] ; + towrite[0]= F_gfx_Rectangle >> 8 ; + towrite[1]= F_gfx_Rectangle ; + towrite[2]= X1 >> 8 ; + towrite[3]= X1 ; + towrite[4]= Y1 >> 8 ; + towrite[5]= Y1 ; + towrite[6]= X2 >> 8 ; + towrite[7]= X2 ; + towrite[8]= Y2 >> 8 ; + towrite[9]= Y2 ; + towrite[10]= Color >> 8 ; + towrite[11]= Color ; + WriteBytes(towrite, 12) ; + GetAck() ; +} + +void uLCD_4D_Picaso::gfx_RectangleFilled(WORD X1, WORD Y1, WORD X2, WORD Y2, WORD Color) +{ + char towrite[12] ; + towrite[0]= F_gfx_RectangleFilled >> 8 ; + towrite[1]= F_gfx_RectangleFilled ; + towrite[2]= X1 >> 8 ; + towrite[3]= X1 ; + towrite[4]= Y1 >> 8 ; + towrite[5]= Y1 ; + towrite[6]= X2 >> 8 ; + towrite[7]= X2 ; + towrite[8]= Y2 >> 8 ; + towrite[9]= Y2 ; + towrite[10]= Color >> 8 ; + towrite[11]= Color ; + WriteBytes(towrite, 12) ; + GetAck() ; +} + +void uLCD_4D_Picaso::gfx_ScreenCopyPaste(WORD Xs, WORD Ys, WORD Xd, WORD Yd, WORD Width, WORD Height) +{ + char towrite[14] ; + towrite[0]= F_gfx_ScreenCopyPaste >> 8 ; + towrite[1]= F_gfx_ScreenCopyPaste ; + towrite[2]= Xs >> 8 ; + towrite[3]= Xs ; + towrite[4]= Ys >> 8 ; + towrite[5]= Ys ; + towrite[6]= Xd >> 8 ; + towrite[7]= Xd ; + towrite[8]= Yd >> 8 ; + towrite[9]= Yd ; + towrite[10]= Width >> 8 ; + towrite[11]= Width ; + towrite[12]= Height >> 8 ; + towrite[13]= Height ; + WriteBytes(towrite, 14) ; + GetAck() ; +} + +WORD uLCD_4D_Picaso::gfx_ScreenMode(WORD ScreenMode) +{ + char towrite[4] ; + + towrite[0]= F_gfx_ScreenMode >> 8 ; + towrite[1]= F_gfx_ScreenMode ; + towrite[2]= ScreenMode >> 8 ; + towrite[3]= ScreenMode ; + WriteBytes(towrite, 4) ; + return GetAckResp() ; +} + +void uLCD_4D_Picaso::gfx_Set(WORD Func, WORD Value) +{ + char towrite[6] ; + + towrite[0]= F_gfx_Set >> 8 ; + towrite[1]= F_gfx_Set ; + towrite[2]= Func >> 8 ; + towrite[3]= Func ; + towrite[4]= Value >> 8 ; + towrite[5]= Value ; + WriteBytes(towrite, 6) ; + GetAck() ; +} + +void uLCD_4D_Picaso::gfx_SetClipRegion() +{ + char towrite[2] ; + + towrite[0]= F_gfx_SetClipRegion >> 8 ; + towrite[1]= F_gfx_SetClipRegion ; + WriteBytes(towrite, 2) ; + GetAck() ; +} + +WORD uLCD_4D_Picaso::gfx_Slider(WORD Mode, WORD X1, WORD Y1, WORD X2, WORD Y2, WORD Color, WORD Scale, WORD Value) +{ + char towrite[18] ; + + towrite[0]= F_gfx_Slider >> 8 ; + towrite[1]= F_gfx_Slider ; + towrite[2]= Mode >> 8 ; + towrite[3]= Mode ; + towrite[4]= X1 >> 8 ; + towrite[5]= X1 ; + towrite[6]= Y1 >> 8 ; + towrite[7]= Y1 ; + towrite[8]= X2 >> 8 ; + towrite[9]= X2 ; + towrite[10]= Y2 >> 8 ; + towrite[11]= Y2 ; + towrite[12]= Color >> 8 ; + towrite[13]= Color ; + towrite[14]= Scale >> 8 ; + towrite[15]= Scale ; + towrite[16]= Value >> 8 ; + towrite[17]= Value ; + WriteBytes(towrite, 18) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::gfx_Transparency(WORD OnOff) +{ + char towrite[4] ; + + towrite[0]= F_gfx_Transparency >> 8 ; + towrite[1]= F_gfx_Transparency ; + towrite[2]= OnOff >> 8 ; + towrite[3]= OnOff ; + WriteBytes(towrite, 4) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::gfx_TransparentColour(WORD Color) +{ + char towrite[4] ; + + towrite[0]= F_gfx_TransparentColour >> 8 ; + towrite[1]= F_gfx_TransparentColour ; + towrite[2]= Color >> 8 ; + towrite[3]= Color ; + WriteBytes(towrite, 4) ; + return GetAckResp() ; +} + +void uLCD_4D_Picaso::gfx_Triangle(WORD X1, WORD Y1, WORD X2, WORD Y2, WORD X3, WORD Y3, WORD Color) +{ + char towrite[16] ; + + towrite[0]= F_gfx_Triangle >> 8 ; + towrite[1]= F_gfx_Triangle ; + towrite[2]= X1 >> 8 ; + towrite[3]= X1 ; + towrite[4]= Y1 >> 8 ; + towrite[5]= Y1 ; + towrite[6]= X2 >> 8 ; + towrite[7]= X2 ; + towrite[8]= Y2 >> 8 ; + towrite[9]= Y2 ; + towrite[10]= X3 >> 8 ; + towrite[11]= X3 ; + towrite[12]= Y3 >> 8 ; + towrite[13]= Y3 ; + towrite[14]= Color >> 8 ; + towrite[15]= Color ; + WriteBytes(towrite, 16) ; + GetAck() ; +} + +void uLCD_4D_Picaso::gfx_TriangleFilled(WORD X1, WORD Y1, WORD X2, WORD Y2, WORD X3, WORD Y3, WORD Color) +{ + char towrite[16] ; + towrite[0]= F_gfx_TriangleFilled >> 8 ; + towrite[1]= F_gfx_TriangleFilled ; + towrite[2]= X1 >> 8 ; + towrite[3]= X1 ; + towrite[4]= Y1 >> 8 ; + towrite[5]= Y1 ; + towrite[6]= X2 >> 8 ; + towrite[7]= X2 ; + towrite[8]= Y2 >> 8 ; + towrite[9]= Y2 ; + towrite[10]= X3 >> 8 ; + towrite[11]= X3 ; + towrite[12]= Y3 >> 8 ; + towrite[13]= Y3 ; + towrite[14]= Color >> 8 ; + towrite[15]= Color ; + WriteBytes(towrite, 16) ; + GetAck() ; +} + +WORD uLCD_4D_Picaso::img_ClearAttributes(WORD Handle, WORD Index, WORD Value) +{ + char towrite[8] ; + towrite[0]= F_img_ClearAttributes >> 8 ; + towrite[1]= F_img_ClearAttributes & 0xFF; + towrite[2]= Handle >> 8 ; + towrite[3]= Handle ; + towrite[4]= Index >> 8 ; + towrite[5]= Index ; + towrite[6]= Value >> 8 ; + towrite[7]= Value ; + WriteBytes(towrite, 8) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::img_Darken(WORD Handle, WORD Index) +{ + char towrite[6] ; + towrite[0]= F_img_Darken >> 8 ; + towrite[1]= F_img_Darken & 0xFF; + towrite[2]= Handle >> 8 ; + towrite[3]= Handle ; + towrite[4]= Index >> 8 ; + towrite[5]= Index ; + WriteBytes(towrite, 6) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::img_Disable(WORD Handle, WORD Index) +{ + char towrite[6] ; + towrite[0]= F_img_Disable >> 8 ; + towrite[1]= F_img_Disable & 0xFF; + towrite[2]= Handle >> 8 ; + towrite[3]= Handle ; + towrite[4]= Index >> 8 ; + towrite[5]= Index ; + WriteBytes(towrite, 6) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::img_Enable(WORD Handle, WORD Index) +{ + char towrite[6] ; + towrite[0]= F_img_Enable >> 8 ; + towrite[1]= F_img_Enable & 0xFF; + towrite[2]= Handle >> 8 ; + towrite[3]= Handle ; + towrite[4]= Index >> 8 ; + towrite[5]= Index ; + WriteBytes(towrite, 6) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::img_GetWord(WORD Handle, WORD Index, WORD Offset ) +{ + char towrite[8] ; + towrite[0]= F_img_GetWord >> 8 ; + towrite[1]= F_img_GetWord & 0xFF; + towrite[2]= Handle >> 8 ; + towrite[3]= Handle ; + towrite[4]= Index >> 8 ; + towrite[5]= Index ; + towrite[6]= Offset >> 8 ; + towrite[7]= Offset ; + WriteBytes(towrite, 8) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::img_Lighten(WORD Handle, WORD Index) +{ + char towrite[6] ; + towrite[0]= F_img_Lighten >> 8 ; + towrite[1]= F_img_Lighten & 0xFF; + towrite[2]= Handle >> 8 ; + towrite[3]= Handle ; + towrite[4]= Index >> 8 ; + towrite[5]= Index ; + WriteBytes(towrite, 6) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::img_SetAttributes(WORD Handle, WORD Index, WORD Value) +{ + char towrite[8] ; + + towrite[0]= F_img_SetAttributes >> 8 ; + towrite[1]= F_img_SetAttributes & 0xFF; + towrite[2]= Handle >> 8 ; + towrite[3]= Handle ; + towrite[4]= Index >> 8 ; + towrite[5]= Index ; + towrite[6]= Value >> 8 ; + towrite[7]= Value ; + WriteBytes(towrite, 8) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::img_SetPosition(WORD Handle, WORD Index, WORD Xpos, WORD Ypos) +{ + char towrite[10] ; + + towrite[0]= F_img_SetPosition >> 8 ; + towrite[1]= F_img_SetPosition & 0xFF; + towrite[2]= Handle >> 8 ; + towrite[3]= Handle ; + towrite[4]= Index >> 8 ; + towrite[5]= Index ; + towrite[6]= Xpos >> 8 ; + towrite[7]= Xpos ; + towrite[8]= Ypos >> 8 ; + towrite[9]= Ypos ; + WriteBytes(towrite, 10) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::img_SetWord(WORD Handle, WORD Index, WORD Offset , WORD Word) +{ + char towrite[10] ; + + towrite[0]= F_img_SetWord >> 8 ; + towrite[1]= F_img_SetWord & 0xFF; + towrite[2]= Handle >> 8 ; + towrite[3]= Handle ; + towrite[4]= Index >> 8 ; + towrite[5]= Index ; + towrite[6]= Offset >> 8 ; + towrite[7]= Offset ; + towrite[8]= Word >> 8 ; + towrite[9]= Word ; + WriteBytes(towrite, 10) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::img_Show(WORD Handle, WORD Index) +{ + char towrite[6] ; + towrite[0]= F_img_Show >> 8 ; + towrite[1]= F_img_Show & 0xFF; + towrite[2]= Handle >> 8 ; + towrite[3]= Handle ; + towrite[4]= Index >> 8 ; + towrite[5]= Index ; + WriteBytes(towrite, 6) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::img_Touched(WORD Handle, WORD Index) +{ + char towrite[6] ; + towrite[0]= F_img_Touched >> 8 ; + towrite[1]= F_img_Touched & 0xFF; + towrite[2]= Handle >> 8 ; + towrite[3]= Handle ; + towrite[4]= Index >> 8 ; + towrite[5]= Index ; + WriteBytes(towrite, 6) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::media_Flush() +{ + char towrite[2] ; + towrite[0]= F_media_Flush >> 8 ; + towrite[1]= F_media_Flush ; + WriteBytes(towrite, 2) ; + return GetAckResp() ; +} + +void uLCD_4D_Picaso::media_Image(WORD X, WORD Y) +{ + char towrite[6] ; + + towrite[0]= F_media_Image >> 8 ; + towrite[1]= F_media_Image ; + towrite[2]= X >> 8 ; + towrite[3]= X ; + towrite[4]= Y >> 8 ; + towrite[5]= Y ; + WriteBytes(towrite, 6) ; + GetAck() ; +} + +WORD uLCD_4D_Picaso::media_Init() +{ + char towrite[2] ; + + towrite[0]= F_media_Init >> 8 ; + towrite[1]= F_media_Init ; + WriteBytes(towrite, 2) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::media_RdSector(t4DSector SectorIn) +{ + char towrite[2] ; + + towrite[0]= F_media_RdSector >> 8 ; + towrite[1]= F_media_RdSector ; + WriteBytes(towrite, 2) ; + return GetAckResSector(SectorIn) ; +} + +WORD uLCD_4D_Picaso::media_ReadByte() +{ + char towrite[2] ; + towrite[0]= F_media_ReadByte >> 8 ; + towrite[1]= F_media_ReadByte ; + WriteBytes(towrite, 2) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::media_ReadWord() +{ + char towrite[2] ; + towrite[0]= F_media_ReadWord >> 8 ; + towrite[1]= F_media_ReadWord ; + WriteBytes(towrite, 2) ; + return GetAckResp() ; +} + +void uLCD_4D_Picaso::media_SetAdd(WORD HiWord, WORD LoWord) +{ + char towrite[6] ; + + towrite[0]= F_media_SetAdd >> 8 ; + towrite[1]= F_media_SetAdd ; + towrite[2]= HiWord >> 8 ; + towrite[3]= HiWord ; + towrite[4]= LoWord >> 8 ; + towrite[5]= LoWord ; + WriteBytes(towrite, 6) ; + GetAck() ; +} + +void uLCD_4D_Picaso::media_SetSector(WORD HiWord, WORD LoWord) +{ + char towrite[6] ; + + towrite[0]= F_media_SetSector >> 8 ; + towrite[1]= F_media_SetSector ; + towrite[2]= HiWord >> 8 ; + towrite[3]= HiWord ; + towrite[4]= LoWord >> 8 ; + towrite[5]= LoWord ; + WriteBytes(towrite, 6) ; + GetAck() ; +} + +void uLCD_4D_Picaso::media_Video(WORD X, WORD Y) +{ + char towrite[6] ; + + towrite[0]= F_media_Video >> 8 ; + towrite[1]= F_media_Video ; + towrite[2]= X >> 8 ; + towrite[3]= X ; + towrite[4]= Y >> 8 ; + towrite[5]= Y ; + WriteBytes(towrite, 6) ; + GetAck() ; +} + +void uLCD_4D_Picaso::media_VideoFrame(WORD X, WORD Y, WORD Framenumber) +{ + char towrite[8] ; + + towrite[0]= F_media_VideoFrame >> 8 ; + towrite[1]= F_media_VideoFrame ; + towrite[2]= X >> 8 ; + towrite[3]= X ; + towrite[4]= Y >> 8 ; + towrite[5]= Y ; + towrite[6]= Framenumber >> 8 ; + towrite[7]= Framenumber ; + WriteBytes(towrite, 8) ; + GetAck() ; +} + +WORD uLCD_4D_Picaso::media_WriteByte(WORD Byte) +{ + char towrite[4] ; + + towrite[0]= F_media_WriteByte >> 8 ; + towrite[1]= F_media_WriteByte ; + towrite[2]= Byte >> 8 ; + towrite[3]= Byte ; + WriteBytes(towrite, 4) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::media_WriteWord(WORD Word) +{ + char towrite[4] ; + + towrite[0]= F_media_WriteWord >> 8 ; + towrite[1]= F_media_WriteWord ; + towrite[2]= Word >> 8 ; + towrite[3]= Word ; + WriteBytes(towrite, 4) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::media_WrSector(t4DSector SectorOut) +{ + char towrite[2] ; + + towrite[0]= F_media_WrSector >> 8 ; + towrite[1]= F_media_WrSector ; + WriteBytes(towrite, 2) ; + WriteBytes(SectorOut, 512) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::mem_Free(WORD Handle) +{ + char towrite[4] ; + + towrite[0]= F_mem_Free >> 8 ; + towrite[1]= F_mem_Free & 0xFF; + towrite[2]= Handle >> 8 ; + towrite[3]= Handle ; + WriteBytes(towrite, 4) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::mem_Heap() +{ + char towrite[2] ; + + towrite[0]= F_mem_Heap >> 8 ; + towrite[1]= F_mem_Heap & 0xFF; + WriteBytes(towrite, 2) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::peekM(WORD Address) +{ + char towrite[4] ; + + towrite[0]= F_peekM >> 8 ; + towrite[1]= F_peekM ; + towrite[2]= Address >> 8 ; + towrite[3]= Address ; + WriteBytes(towrite, 4) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::pin_HI(WORD Pin) +{ + char towrite[4] ; + + towrite[0]= F_pin_HI >> 8 ; + towrite[1]= F_pin_HI ; + towrite[2]= Pin >> 8 ; + towrite[3]= Pin ; + WriteBytes(towrite, 4) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::pin_LO(WORD Pin) +{ + char towrite[4] ; + + towrite[0]= F_pin_LO >> 8 ; + towrite[1]= F_pin_LO ; + towrite[2]= Pin >> 8 ; + towrite[3]= Pin ; + WriteBytes(towrite, 4) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::pin_Read(WORD Pin) +{ + char towrite[4] ; + + towrite[0]= F_pin_Read >> 8 ; + towrite[1]= F_pin_Read ; + towrite[2]= Pin >> 8 ; + towrite[3]= Pin ; + WriteBytes(towrite, 4) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::pin_Set(WORD Mode, WORD Pin) +{ + char towrite[6] ; + + towrite[0]= F_pin_Set >> 8 ; + towrite[1]= F_pin_Set ; + towrite[2]= Mode >> 8 ; + towrite[3]= Mode ; + towrite[4]= Pin >> 8 ; + towrite[5]= Pin ; + WriteBytes(towrite, 6) ; + return GetAckResp() ; +} + +void uLCD_4D_Picaso::pokeM(WORD Address, WORD WordValue) +{ + char towrite[6] ; + + towrite[0]= F_pokeM >> 8 ; + towrite[1]= F_pokeM ; + towrite[2]= Address >> 8 ; + towrite[3]= Address ; + towrite[4]= WordValue >> 8 ; + towrite[5]= WordValue ; + WriteBytes(towrite, 6) ; + GetAck() ; +} + +void uLCD_4D_Picaso::putCH(WORD WordChar) +{ + char towrite[4] ; + + towrite[0]= F_putCH >> 8 ; + towrite[1]= F_putCH ; + towrite[2]= WordChar >> 8 ; + towrite[3]= WordChar ; + WriteBytes(towrite, 4) ; + GetAck() ; +} + +WORD uLCD_4D_Picaso::putStr(char * InString) +{ + char towrite[2] ; + + towrite[0]= F_putstr >> 8 ; + towrite[1]= F_putstr ; + WriteBytes(towrite, 2) ; + WriteChars(InString) ; + return GetAckResp() ; +} + +void uLCD_4D_Picaso::snd_BufSize(WORD Bufsize) +{ + char towrite[4] ; + + towrite[0]= F_snd_BufSize >> 8 ; + towrite[1]= F_snd_BufSize & 0xFF; + towrite[2]= Bufsize >> 8 ; + towrite[3]= Bufsize ; + WriteBytes(towrite, 4) ; + GetAck() ; +} + +void uLCD_4D_Picaso::snd_Continue() +{ + char towrite[2] ; + + towrite[0]= F_snd_Continue >> 8 ; + towrite[1]= F_snd_Continue & 0xFF; + WriteBytes(towrite, 2) ; + GetAck() ; +} + +void uLCD_4D_Picaso::snd_Pause() +{ + char towrite[2] ; + + towrite[0]= F_snd_Pause >> 8 ; + towrite[1]= F_snd_Pause & 0xFF; + WriteBytes(towrite, 2) ; + GetAck() ; +} + +WORD uLCD_4D_Picaso::snd_Pitch(WORD Pitch) +{ + char towrite[4] ; + + towrite[0]= F_snd_Pitch >> 8 ; + towrite[1]= F_snd_Pitch & 0xFF; + towrite[2]= Pitch >> 8 ; + towrite[3]= Pitch ; + WriteBytes(towrite, 4) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::snd_Playing() +{ + char towrite[2] ; + + towrite[0]= F_snd_Playing >> 8 ; + towrite[1]= F_snd_Playing & 0xFF; + WriteBytes(towrite, 2) ; + return GetAckResp() ; +} + +void uLCD_4D_Picaso::snd_Stop() +{ + char towrite[2] ; + + towrite[0]= F_snd_Stop >> 8 ; + towrite[1]= F_snd_Stop & 0xFF; + WriteBytes(towrite, 2) ; + GetAck() ; +} + +void uLCD_4D_Picaso::snd_Volume(WORD Volume) +{ + char towrite[4] ; + + towrite[0]= F_snd_Volume >> 8 ; + towrite[1]= F_snd_Volume & 0xFF; + towrite[2]= Volume >> 8 ; + towrite[3]= Volume ; + WriteBytes(towrite, 4) ; + GetAck() ; +} + +WORD uLCD_4D_Picaso::sys_Sleep(WORD Units) +{ + char towrite[4] ; + + towrite[0]= F_sys_Sleep >> 8 ; + towrite[1]= F_sys_Sleep & 0xFF; + towrite[2]= Units >> 8 ; + towrite[3]= Units ; + WriteBytes(towrite, 4) ; + return GetAckResp() ; +} + +void uLCD_4D_Picaso::touch_DetectRegion(WORD X1, WORD Y1, WORD X2, WORD Y2) +{ + char towrite[10] ; + + towrite[0]= F_touch_DetectRegion >> 8 ; + towrite[1]= F_touch_DetectRegion & 0xFF; + towrite[2]= X1 >> 8 ; + towrite[3]= X1 ; + towrite[4]= Y1 >> 8 ; + towrite[5]= Y1 ; + towrite[6]= X2 >> 8 ; + towrite[7]= X2 ; + towrite[8]= Y2 >> 8 ; + towrite[9]= Y2 ; + WriteBytes(towrite, 10) ; + GetAck() ; +} + +WORD uLCD_4D_Picaso::touch_Get(WORD Mode) +{ + char towrite[4] ; + + towrite[0]= F_touch_Get >> 8 ; + towrite[1]= F_touch_Get & 0xFF; + towrite[2]= Mode >> 8 ; + towrite[3]= Mode ; + WriteBytes(towrite, 4) ; + return GetAckResp() ; +} + +void uLCD_4D_Picaso::touch_Set(WORD Mode) +{ + char towrite[4] ; + + towrite[0]= F_touch_Set >> 8 ; + towrite[1]= F_touch_Set & 0xFF; + towrite[2]= Mode >> 8 ; + towrite[3]= Mode ; + WriteBytes(towrite, 4) ; + GetAck() ; +} + +WORD uLCD_4D_Picaso::txt_Attributes(WORD Attribs) +{ + char towrite[4] ; + + towrite[0]= F_txt_Attributes >> 8 ; + towrite[1]= F_txt_Attributes ; + towrite[2]= Attribs >> 8 ; + towrite[3]= Attribs ; + WriteBytes(towrite, 4) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::txt_BGcolour(WORD Color) +{ + char towrite[4] ; + + towrite[0]= F_txt_BGcolour >> 8 ; + towrite[1]= F_txt_BGcolour ; + towrite[2]= Color >> 8 ; + towrite[3]= Color ; + WriteBytes(towrite, 4) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::txt_Bold(WORD Bold) +{ + char towrite[4] ; + + towrite[0]= F_txt_Bold >> 8 ; + towrite[1]= F_txt_Bold ; + towrite[2]= Bold >> 8 ; + towrite[3]= Bold ; + WriteBytes(towrite, 4) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::txt_FGcolour(WORD Color) +{ + char towrite[4] ; + + towrite[0]= F_txt_FGcolour >> 8 ; + towrite[1]= F_txt_FGcolour ; + towrite[2]= Color >> 8 ; + towrite[3]= Color ; + WriteBytes(towrite, 4) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::txt_FontID(WORD FontNumber) +{ + char towrite[4] ; + + towrite[0]= F_txt_FontID >> 8 ; + towrite[1]= F_txt_FontID ; + towrite[2]= FontNumber >> 8 ; + towrite[3]= FontNumber ; + WriteBytes(towrite, 4) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::txt_Height(WORD Multiplier) +{ + char towrite[4] ; + + towrite[0]= F_txt_Height >> 8 ; + towrite[1]= F_txt_Height ; + towrite[2]= Multiplier >> 8 ; + towrite[3]= Multiplier ; + WriteBytes(towrite, 4) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::txt_Inverse(WORD Inverse) +{ + char towrite[4] ; + + towrite[0]= F_txt_Inverse >> 8 ; + towrite[1]= F_txt_Inverse ; + towrite[2]= Inverse >> 8 ; + towrite[3]= Inverse ; + WriteBytes(towrite, 4) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::txt_Italic(WORD Italic) +{ + char towrite[4] ; + + towrite[0]= F_txt_Italic >> 8 ; + towrite[1]= F_txt_Italic ; + towrite[2]= Italic >> 8 ; + towrite[3]= Italic ; + WriteBytes(towrite, 4) ; + return GetAckResp() ; +} + +void uLCD_4D_Picaso::txt_MoveCursor(WORD Line, WORD Column) +{ + char towrite[6] ; + + towrite[0]= F_txt_MoveCursor >> 8 ; + towrite[1]= F_txt_MoveCursor ; + towrite[2]= Line >> 8 ; + towrite[3]= Line ; + towrite[4]= Column >> 8 ; + towrite[5]= Column ; + WriteBytes(towrite, 6) ; + GetAck() ; +} + +WORD uLCD_4D_Picaso::txt_Opacity(WORD TransparentOpaque) +{ + char towrite[4] ; + + towrite[0]= F_txt_Opacity >> 8 ; + towrite[1]= F_txt_Opacity ; + towrite[2]= TransparentOpaque >> 8 ; + towrite[3]= TransparentOpaque ; + WriteBytes(towrite, 4) ; + return GetAckResp() ; +} + +void uLCD_4D_Picaso::txt_Set(WORD Func, WORD Value) +{ + char towrite[6] ; + + towrite[0]= F_txt_Set >> 8 ; + towrite[1]= F_txt_Set ; + towrite[2]= Func >> 8 ; + towrite[3]= Func ; + towrite[4]= Value >> 8 ; + towrite[5]= Value ; + WriteBytes(towrite, 6) ; + GetAck() ; +} + +WORD uLCD_4D_Picaso::txt_Underline(WORD Underline) +{ + char towrite[4] ; + + towrite[0]= F_txt_Underline >> 8 ; + towrite[1]= F_txt_Underline ; + towrite[2]= Underline >> 8 ; + towrite[3]= Underline ; + WriteBytes(towrite, 4) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::txt_Width(WORD Multiplier) +{ + char towrite[4] ; + + towrite[0]= F_txt_Width >> 8 ; + towrite[1]= F_txt_Width ; + towrite[2]= Multiplier >> 8 ; + towrite[3]= Multiplier ; + WriteBytes(towrite, 4) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::txt_Wrap(WORD Position) +{ + char towrite[4] ; + + towrite[0]= F_txt_Wrap >> 8 ; + towrite[1]= F_txt_Wrap ; + towrite[2]= Position >> 8 ; + towrite[3]= Position ; + WriteBytes(towrite, 4) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::txt_Xgap(WORD Pixels) +{ + char towrite[4] ; + + towrite[0]= F_txt_Xgap >> 8 ; + towrite[1]= F_txt_Xgap ; + towrite[2]= Pixels >> 8 ; + towrite[3]= Pixels ; + WriteBytes(towrite, 4) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::txt_Ygap(WORD Pixels) +{ + char towrite[4] ; + + towrite[0]= F_txt_Ygap >> 8 ; + towrite[1]= F_txt_Ygap ; + towrite[2]= Pixels >> 8 ; + towrite[3]= Pixels ; + WriteBytes(towrite, 4) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::file_CallFunction(WORD Handle, WORD ArgCount, t4DWordArray Args) +{ + char towrite[6] ; + + towrite[0]= F_file_CallFunction >> 8 ; + towrite[1]= F_file_CallFunction ; + towrite[2]= Handle >> 8 ; + towrite[3]= Handle ; + towrite[4]= ArgCount >> 8 ; + towrite[5]= ArgCount ; + WriteBytes(towrite, 6) ; + WriteWords(Args, ArgCount) ; + return WaitForAck() ; +} + +WORD uLCD_4D_Picaso::sys_GetModel(char * ModelStr) +{ + char towrite[2] ; + + towrite[0]= F_sys_GetModel >> 8 ; + towrite[1]= F_sys_GetModel ; + WriteBytes(towrite, 2) ; + return GetAckResStr(ModelStr) ; +} + +WORD uLCD_4D_Picaso::sys_GetVersion() +{ + char towrite[2] ; + + towrite[0]= F_sys_GetVersion >> 8 ; + towrite[1]= F_sys_GetVersion ; + WriteBytes(towrite, 2) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::sys_GetPmmC() +{ + char towrite[2] ; + + towrite[0]= F_sys_GetPmmC >> 8 ; + towrite[1]= F_sys_GetPmmC ; + WriteBytes(towrite, 2) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::writeString(WORD Handle, char * StringOut) +{ + char towrite[4] ; + + towrite[0]= F_writeString >> 8 ; + towrite[1]= F_writeString ; + towrite[2]= Handle >> 8 ; + towrite[3]= Handle ; + WriteBytes(towrite, 4) ; + WriteChars(StringOut) ; + return GetAckResp() ; +} + +WORD uLCD_4D_Picaso::readString(WORD Handle, char * StringIn) +{ + char towrite[4] ; + + towrite[0]= F_readString >> 8 ; + towrite[1]= F_readString ; + towrite[2]= Handle >> 8 ; + towrite[3]= Handle ; + WriteBytes(towrite, 4) ; + return GetAckResStr(StringIn) ; +} + +void uLCD_4D_Picaso::blitComtoDisplay(WORD X, WORD Y, WORD Width, WORD Height, t4DByteArray Pixels) +{ + char towrite[10] ; + + towrite[0]= F_blitComtoDisplay >> 8 ; + towrite[1]= F_blitComtoDisplay ; + towrite[2]= X >> 8 ; + towrite[3]= X ; + towrite[4]= Y >> 8 ; + towrite[5]= Y ; + towrite[6]= Width >> 8 ; + towrite[7]= Width ; + towrite[8]= Height >> 8 ; + towrite[9]= Height ; + WriteBytes(towrite, 10) ; + WriteBytes(Pixels, Width*Height*2) ; + GetAck() ; +} + +WORD uLCD_4D_Picaso::file_FindFirstRet(char * Filename, char * StringIn) +{ + char towrite[2] ; + + towrite[0]= F_file_FindFirstRet >> 8 ; + towrite[1]= F_file_FindFirstRet ; + WriteBytes(towrite, 2) ; + WriteChars(Filename) ; + return GetAckResStr(StringIn) ; +} + +WORD uLCD_4D_Picaso::file_FindNextRet(char * StringIn) +{ + char towrite[2] ; + + towrite[0]= F_file_FindNextRet >> 8 ; + towrite[1]= F_file_FindNextRet ; + WriteBytes(towrite, 2) ; + return GetAckResStr(StringIn) ; +} + +void uLCD_4D_Picaso::setbaudWait(uLCD_4D_Picaso::BaudRate Newrate) +{ + char towrite[4] ; + + towrite[0]= F_setbaudWait >> 8 ; + towrite[1]= F_setbaudWait ; + towrite[2]= Newrate >> 8 ; + towrite[3]= Newrate ; + WriteBytes(towrite, 4) ; + //printf("Baud command: %2x%2x%2x%2x\r\n", towrite[0], towrite[1], towrite[2], towrite[3]); + SetThisBaudrate(Newrate) ; // change this systems baud rate to match new display rate, ACK is 100ms away + GetAck() ; +} + +/* + * Conpound 4D Routines Ends here +*/ +