Library to control serial LCDs from 4D systems based on their Goldelox processor. Ported from Adruino library but not fully tested.
This library facilitates serial communication with LCDs from 4D Systems based on their Goldelox processor. It was ported form an Arduino library published by 4D systems.
Documentation on the API can be found at: http://www.4dsystems.com.au/product/1/4/4D_Intelligent_Display_Modules/uLCD_144_G2/
Diff: Goldelox_Serial_4DLib.cpp
- Revision:
- 0:6987c004e123
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Goldelox_Serial_4DLib.cpp Sat Oct 05 02:40:39 2013 +0000 @@ -0,0 +1,990 @@ +/* + Goldelox_Serial_4DLib.cpp - Library for 4D Systems Serial Environment. + */ + +#include "mbed.h" +#include "Goldelox_Serial_4DLib.h" + + +Goldelox_Serial_4DLib::Goldelox_Serial_4DLib(Serial * virtualPort) { + _virtualPort = virtualPort; + TimeLimit4D = 2000; // Give a default value to the timeout + while(_virtualPort->readable()) + { + _virtualPort->getc() ; + } + +} + +//*********************************************************************************************// +//**********************************Intrinsic 4D Routines**************************************// +//*********************************************************************************************// + +void Goldelox_Serial_4DLib::WriteChars(char * charsout) +{ + _virtualPort->printf(charsout) ; + _virtualPort->putc(0); +} + +void Goldelox_Serial_4DLib::WriteBytes(char * Source, int Size) +{ + unsigned char wk ; + int i ; + for (i = 0; i < Size; i++) + { + wk = *Source++ ; + _virtualPort->putc(wk) ; + } +} + +void Goldelox_Serial_4DLib::WriteWords(short * Source, short Size) +{ + short wk ; + short i ; + for (i = 0; i < Size; i++) + { + wk = *Source++ ; + _virtualPort->putc(wk >> 8) ; + _virtualPort->putc(wk) ; + } +} + +void Goldelox_Serial_4DLib::getbytes(char * data, int size) +{ + int readc ; + readc = 0 ; + Timer t; + t.start(); + while ((readc != size) && (t.read_ms() < TimeLimit4D)) + { + if(_virtualPort->readable()) + { + data[readc++] = _virtualPort->getc() ; + } + } + if (readc != size) + { + Error4D = Err4D_Timeout ; + if (Callback4D != NULL) + Callback4D(Error4D, Error4D_Inv) ; + } +} + +void Goldelox_Serial_4DLib::GetAck(void) +{ + int read ; + unsigned char readx = ' ' ; + Error4D = Err4D_OK ; + Timer t; + t.start(); + read = 0 ; + int ms = 0; + while ((read != 1) && (t.read_ms() < TimeLimit4D)) + { + ms = t.read_ms(); + if(_virtualPort->readable() != 0) + { + readx = _virtualPort->getc() ; + read = 1 ; + } + } + if (read == 0) + { + Error4D = Err4D_Timeout ; + if (Callback4D != NULL) + Callback4D(ms, 'T') ; + } + else if (readx != 6) + { + Error4D = Err4D_NAK ; + Error4D_Inv = readx ; + if (Callback4D != NULL) + Callback4D(Error4D, Error4D_Inv) ; + } +} + +short Goldelox_Serial_4DLib::GetWord(void) +{ + unsigned char readx[2] ; + int readc ; + + if (Error4D != Err4D_OK) + return 0 ; + Timer t; + t.start(); + readc = 0 ; + while ((readc != 2) && (t.read_ms() < TimeLimit4D)) + { + if(_virtualPort->readable()) + { + readx[readc++] = _virtualPort->getc() ; + } + } + + if (readc != 2) + { + Error4D = Err4D_Timeout ; + if (Callback4D != NULL) + Callback4D(Error4D, Error4D_Inv) ; + return 0 ; + } + else + return readx[0] << 8 | readx[1] ; +} + +void Goldelox_Serial_4DLib::getString(char * outStr, int strLen) +{ + int readc ; + + if (Error4D != Err4D_OK) + { + outStr[0] = 0 ; + return ; + } + Timer t; + t.start(); + readc = 0 ; + while ((readc != strLen) && (t.read_ms() < TimeLimit4D)) + { + if(_virtualPort->readable()) + { + outStr[readc++] = _virtualPort->getc() ; + } + } + + if (readc != strLen) + { + Error4D = Err4D_Timeout ; + if (Callback4D != NULL) + Callback4D(Error4D, Error4D_Inv) ; + } + outStr[readc] = 0 ; +} + +short Goldelox_Serial_4DLib::GetAckResp(void) +{ + GetAck() ; + return GetWord() ; +} + +short Goldelox_Serial_4DLib::GetAckRes2Words(short * word1, short * word2) +{ + int Result ; + GetAck() ; + Result = GetWord() ; + *word1 = GetWord() ; + *word2 = GetWord() ; + return Result ; +} + +void Goldelox_Serial_4DLib::GetAck2Words(short * word1, short * word2) +{ + GetAck() ; + *word1 = GetWord() ; + *word2 = GetWord() ; +} + +short Goldelox_Serial_4DLib::GetAckResStr(char * OutStr) +{ + int Result ; + GetAck() ; + Result = GetWord() ; + getString(OutStr, Result) ; + return Result ; +} +/* +short Goldelox_Serial_4DLib::GetAckResData(t4DByteArray OutData, short size) +{ + int Result ; + GetAck() ; + Result = GetWord() ; + getbytes(OutData, size) ; + return Result ; +} +*/ +void Goldelox_Serial_4DLib::SetThisBaudrate(int Newrate) +{ + int br = 0; + while(_virtualPort->readable()) + { + _virtualPort->getc() ; + } + switch(Newrate) + { + case BAUD_110 : br = 110 ; + break ; + case BAUD_300 : br = 300 ; + break ; + case BAUD_600 : br = 600 ; + break ; + case BAUD_1200 : br = 1200 ; + break ; + case BAUD_2400 : br = 2400 ; + break ; + case BAUD_4800 : br = 4800 ; + break ; + case BAUD_9600 : br = 9600 ; + break ; + case BAUD_14400 : br = 14400 ; + break ; + case BAUD_19200 : br = 19200 ; + break ; + /* case BAUD_31250 : br = 31250 ; + break ;*/ + case BAUD_38400 : br = 38400 ; + break ; + case BAUD_56000 : br = 56000 ; + break ; + case BAUD_57600 : br = 57600 ; + break ; + case BAUD_115200 : br = 115200 ; + break ; +/* case BAUD_128000 : br = 133928 ; // actual rate is not 128000 ; + break ; + case BAUD_256000 : br = 281250 ; // actual rate is not 256000 ; + break ; + case BAUD_300000 : br = 312500 ; // actual rate is not 300000 ; + break ; + case BAUD_375000 : br = 401785 ; // actual rate is not 375000 ; + break ; + case BAUD_500000 : br = 562500 ; // actual rate is not 500000 ; + break ; + case BAUD_600000 : br = 703125 ; // actual rate is not 600000 ; + break ;*/ + } + _virtualPort->baud(br) ; + wait_ms(50); // Display sleeps for 100 + while(_virtualPort->readable()) + { + _virtualPort->getc() ; + } +} + +//*********************************************************************************************// +//**********************************Compound 4D Routines***************************************// +//*********************************************************************************************// + +short Goldelox_Serial_4DLib::charheight(char TestChar) +{ + _virtualPort->putc((char)(F_charheight >> 8)) ; + _virtualPort->putc((char)(F_charheight)) ; + _virtualPort->putc((char)(TestChar)) ; + return GetAckResp() ; +} + +short Goldelox_Serial_4DLib::charwidth(char TestChar) +{ + _virtualPort->putc((char)(F_charwidth >> 8)) ; + _virtualPort->putc((char)(F_charwidth)) ; + _virtualPort->putc((char)(TestChar)) ; + return GetAckResp() ; +} + +void Goldelox_Serial_4DLib::gfx_BGcolour(short Color) +{ + _virtualPort->putc((char)(F_gfx_BGcolour >> 8)) ; + _virtualPort->putc((char)(F_gfx_BGcolour)) ; + _virtualPort->putc((char)(Color >> 8)) ; + _virtualPort->putc((char)(Color)) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::gfx_ChangeColour(short OldColor, short NewColor) +{ + _virtualPort->putc((char)(F_gfx_ChangeColour >> 8)) ; + _virtualPort->putc((char)(F_gfx_ChangeColour)) ; + _virtualPort->putc((char)(OldColor >> 8)) ; + _virtualPort->putc((char)(OldColor)) ; + _virtualPort->putc((char)(NewColor >> 8)) ; + _virtualPort->putc((char)(NewColor)) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::gfx_Circle(short X, short Y, short Radius, short Color) +{ + _virtualPort->putc((char)(F_gfx_Circle >> 8)) ; + _virtualPort->putc((char)(F_gfx_Circle)) ; + _virtualPort->putc((char)(X >> 8)) ; + _virtualPort->putc((char)(X)) ; + _virtualPort->putc((char)(Y >> 8)) ; + _virtualPort->putc((char)(Y)) ; + _virtualPort->putc((char)(Radius >> 8)) ; + _virtualPort->putc((char)(Radius)) ; + _virtualPort->putc((char)(Color >> 8)) ; + _virtualPort->putc((char)(Color)) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::gfx_CircleFilled(short X, short Y, short Radius, short Color) +{ + _virtualPort->putc((char)(F_gfx_CircleFilled >> 8)) ; + _virtualPort->putc((char)(F_gfx_CircleFilled)) ; + _virtualPort->putc((char)(X >> 8)) ; + _virtualPort->putc((char)(X)) ; + _virtualPort->putc((char)(Y >> 8)) ; + _virtualPort->putc((char)(Y)) ; + _virtualPort->putc((char)(Radius >> 8)) ; + _virtualPort->putc((char)(Radius)) ; + _virtualPort->putc((char)(Color >> 8)) ; + _virtualPort->putc((char)(Color)) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::gfx_Clipping(short OnOff) +{ + _virtualPort->putc((char)(F_gfx_Clipping >> 8)) ; + _virtualPort->putc((char)(F_gfx_Clipping)) ; + _virtualPort->putc((char)(OnOff >> 8)) ; + _virtualPort->putc((char)(OnOff)) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::gfx_ClipWindow(short X1, short Y1, short X2, short Y2) +{ + _virtualPort->putc((char)(F_gfx_ClipWindow >> 8)) ; + _virtualPort->putc((char)(F_gfx_ClipWindow)) ; + _virtualPort->putc((char)(X1 >> 8)) ; + _virtualPort->putc((char)(X1)) ; + _virtualPort->putc((char)(Y1 >> 8)) ; + _virtualPort->putc((char)(Y1)) ; + _virtualPort->putc((char)(X2 >> 8)) ; + _virtualPort->putc((char)(X2)) ; + _virtualPort->putc((char)(Y2 >> 8)) ; + _virtualPort->putc((char)(Y2)) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::gfx_Cls() +{ + _virtualPort->putc((char)(F_gfx_Cls >> 8)) ; + _virtualPort->putc((char)(F_gfx_Cls)) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::gfx_Contrast(short Contrast) +{ + _virtualPort->putc((char)(F_gfx_Contrast >> 8)) ; + _virtualPort->putc((char)(F_gfx_Contrast)) ; + _virtualPort->putc((char)(Contrast >> 8)) ; + _virtualPort->putc((char)(Contrast)) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::gfx_FrameDelay(short Msec) +{ + _virtualPort->putc((char)(F_gfx_FrameDelay >> 8)) ; + _virtualPort->putc((char)(F_gfx_FrameDelay)) ; + _virtualPort->putc((char)(Msec >> 8)) ; + _virtualPort->putc((char)(Msec)) ; + GetAck() ; +} + +short Goldelox_Serial_4DLib::gfx_GetPixel(short X, short Y) +{ + _virtualPort->putc((char)(F_gfx_GetPixel >> 8 )) ; + _virtualPort->putc((char)(F_gfx_GetPixel )) ; + _virtualPort->putc((char)(X >> 8 )) ; + _virtualPort->putc((char)(X )) ; + _virtualPort->putc((char)(Y >> 8 )) ; + _virtualPort->putc((char)(Y )) ; + return GetAckResp() ; +} + +void Goldelox_Serial_4DLib::gfx_Line(short X1, short Y1, short X2, short Y2, short Color) +{ + _virtualPort->putc((char)(F_gfx_Line >> 8 )) ; + _virtualPort->putc((char)(F_gfx_Line )) ; + _virtualPort->putc((char)(X1 >> 8 )) ; + _virtualPort->putc((char)(X1 )) ; + _virtualPort->putc((char)(Y1 >> 8 )) ; + _virtualPort->putc((char)(Y1 )) ; + _virtualPort->putc((char)(X2 >> 8 )) ; + _virtualPort->putc((char)(X2 )) ; + _virtualPort->putc((char)(Y2 >> 8 )) ; + _virtualPort->putc((char)(Y2 )) ; + _virtualPort->putc((char)(Color >> 8 )) ; + _virtualPort->putc((char)(Color )) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::gfx_LinePattern(short Pattern) +{ + _virtualPort->putc((char)(F_gfx_LinePattern >> 8 )) ; + _virtualPort->putc((char)(F_gfx_LinePattern )) ; + _virtualPort->putc((char)(Pattern >> 8 )) ; + _virtualPort->putc((char)(Pattern )) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::gfx_LineTo(short X, short Y) +{ + _virtualPort->putc((char)(F_gfx_LineTo >> 8 )) ; + _virtualPort->putc((char)(F_gfx_LineTo )) ; + _virtualPort->putc((char)(X >> 8 )) ; + _virtualPort->putc((char)(X )) ; + _virtualPort->putc((char)(Y >> 8 )) ; + _virtualPort->putc((char)(Y )) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::gfx_MoveTo(short X, short Y) +{ + _virtualPort->putc((char)(F_gfx_MoveTo >> 8 )) ; + _virtualPort->putc((char)(F_gfx_MoveTo )) ; + _virtualPort->putc((char)(X >> 8 )) ; + _virtualPort->putc((char)(X )) ; + _virtualPort->putc((char)(Y >> 8 )) ; + _virtualPort->putc((char)(Y )) ; + GetAck() ; +} + +short Goldelox_Serial_4DLib::gfx_Orbit(short Angle, short Distance, short * Xdest, short * Ydest) +{ + _virtualPort->putc((char)(F_gfx_Orbit >> 8 )) ; + _virtualPort->putc((char)(F_gfx_Orbit )) ; + _virtualPort->putc((char)(Angle >> 8 )) ; + _virtualPort->putc((char)(Angle )) ; + _virtualPort->putc((char)(Distance >> 8 )) ; + _virtualPort->putc((char)(Distance )) ; + GetAck2Words(Xdest,Ydest) ; + return 0 ; +} + +void Goldelox_Serial_4DLib::gfx_OutlineColour(short Color) +{ + _virtualPort->putc((char)(F_gfx_OutlineColour >> 8 )) ; + _virtualPort->putc((char)(F_gfx_OutlineColour )) ; + _virtualPort->putc((char)(Color >> 8 )) ; + _virtualPort->putc((char)(Color )) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::gfx_Polygon(short n, t4DWordArray Xvalues, t4DWordArray Yvalues, short Color) +{ + _virtualPort->putc((char)(F_gfx_Polygon >> 8 )) ; + _virtualPort->putc((char)(F_gfx_Polygon )) ; + _virtualPort->putc((char)(n >> 8 )) ; + _virtualPort->putc((char)(n )) ; + WriteWords(Xvalues, (int)n) ; + WriteWords(Yvalues, (int)n) ; + _virtualPort->putc((char)(Color >> 8 )) ; + _virtualPort->putc((char)(Color )) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::gfx_Polyline(short n, t4DWordArray Xvalues, t4DWordArray Yvalues, short Color) +{ + _virtualPort->putc((char)(F_gfx_Polyline >> 8 )) ; + _virtualPort->putc((char)(F_gfx_Polyline )) ; + _virtualPort->putc((char)(n >> 8 )) ; + _virtualPort->putc((char)(n )) ; + WriteWords(Xvalues, n) ; + WriteWords(Yvalues, n) ; + _virtualPort->putc((char)(Color >> 8 )) ; + _virtualPort->putc((char)(Color )) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::gfx_PutPixel(short X, short Y, short Color) +{ + _virtualPort->putc((char)(F_gfx_PutPixel >> 8 )) ; + _virtualPort->putc((char)(F_gfx_PutPixel )) ; + _virtualPort->putc((char)(X >> 8 )) ; + _virtualPort->putc((char)(X )) ; + _virtualPort->putc((char)(Y >> 8 )) ; + _virtualPort->putc((char)(Y )) ; + _virtualPort->putc((char)(Color >> 8 )) ; + _virtualPort->putc((char)(Color )) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::gfx_Rectangle(short X1, short Y1, short X2, short Y2, short Color) +{ + _virtualPort->putc((char)(F_gfx_Rectangle >> 8 )) ; + _virtualPort->putc((char)(F_gfx_Rectangle )) ; + _virtualPort->putc((char)(X1 >> 8 )) ; + _virtualPort->putc((char)(X1 )) ; + _virtualPort->putc((char)(Y1 >> 8 )) ; + _virtualPort->putc((char)(Y1 )) ; + _virtualPort->putc((char)(X2 >> 8 )) ; + _virtualPort->putc((char)(X2 )) ; + _virtualPort->putc((char)(Y2 >> 8 )) ; + _virtualPort->putc((char)(Y2 )) ; + _virtualPort->putc((char)(Color >> 8 )) ; + _virtualPort->putc((char)(Color )) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::gfx_RectangleFilled(short X1, short Y1, short X2, short Y2, short Color) +{ + _virtualPort->putc((char)(F_gfx_RectangleFilled >> 8 )) ; + _virtualPort->putc((char)(F_gfx_RectangleFilled )) ; + _virtualPort->putc((char)(X1 >> 8 )) ; + _virtualPort->putc((char)(X1 )) ; + _virtualPort->putc((char)(Y1 >> 8 )) ; + _virtualPort->putc((char)(Y1 )) ; + _virtualPort->putc((char)(X2 >> 8 )) ; + _virtualPort->putc((char)(X2 )) ; + _virtualPort->putc((char)(Y2 >> 8 )) ; + _virtualPort->putc((char)(Y2 )) ; + _virtualPort->putc((char)(Color >> 8 )) ; + _virtualPort->putc((char)(Color )) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::gfx_ScreenMode(short ScreenMode) +{ + _virtualPort->putc((char)(F_gfx_ScreenMode >> 8 )) ; + _virtualPort->putc((char)(F_gfx_ScreenMode )) ; + _virtualPort->putc((char)(ScreenMode >> 8 )) ; + _virtualPort->putc((char)(ScreenMode )) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::gfx_Set(short Func, short Value) +{ + _virtualPort->putc((char)(F_gfx_Set >> 8 )) ; + _virtualPort->putc((char)(F_gfx_Set )) ; + _virtualPort->putc((char)(Func >> 8 )) ; + _virtualPort->putc((char)(Func )) ; + _virtualPort->putc((char)(Value >> 8 )) ; + _virtualPort->putc((char)(Value )) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::gfx_SetClipRegion() +{ + _virtualPort->putc((char)(F_gfx_SetClipRegion >> 8)) ; + _virtualPort->putc((char)(F_gfx_SetClipRegion)) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::gfx_Transparency(short OnOff) +{ + _virtualPort->putc((char)(F_gfx_Transparency >> 8)) ; + _virtualPort->putc((char)(F_gfx_Transparency)) ; + _virtualPort->putc((char)(OnOff >> 8)) ; + _virtualPort->putc((char)(OnOff)) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::gfx_TransparentColour(short Color) +{ + _virtualPort->putc((char)(F_gfx_TransparentColour >> 8)) ; + _virtualPort->putc((char)(F_gfx_TransparentColour)) ; + _virtualPort->putc((char)(Color >> 8)) ; + _virtualPort->putc((char)(Color)) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::gfx_Triangle(short X1, short Y1, short X2, short Y2, short X3, short Y3, short Color) +{ + _virtualPort->putc((char)(F_gfx_Triangle >> 8)) ; + _virtualPort->putc((char)(F_gfx_Triangle)) ; + _virtualPort->putc((char)(X1 >> 8)) ; + _virtualPort->putc((char)(X1)) ; + _virtualPort->putc((char)(Y1 >> 8)) ; + _virtualPort->putc((char)(Y1)) ; + _virtualPort->putc((char)(X2 >> 8)) ; + _virtualPort->putc((char)(X2)) ; + _virtualPort->putc((char)(Y2 >> 8)) ; + _virtualPort->putc((char)(Y2)) ; + _virtualPort->putc((char)(X3 >> 8)) ; + _virtualPort->putc((char)(X3)) ; + _virtualPort->putc((char)(Y3 >> 8)) ; + _virtualPort->putc((char)(Y3)) ; + _virtualPort->putc((char)(Color >> 8)) ; + _virtualPort->putc((char)(Color)) ; + GetAck() ; +} + +short Goldelox_Serial_4DLib::media_Flush() +{ + _virtualPort->putc((char)(F_media_Flush >> 8)) ; + _virtualPort->putc((char)(F_media_Flush)) ; + return GetAckResp() ; +} + +void Goldelox_Serial_4DLib::media_Image(short X, short Y) +{ + _virtualPort->putc((char)(F_media_Image >> 8)) ; + _virtualPort->putc((char)(F_media_Image)) ; + _virtualPort->putc((char)(X >> 8)) ; + _virtualPort->putc((char)(X)) ; + _virtualPort->putc((char)(Y >> 8)) ; + _virtualPort->putc((char)(Y)) ; + GetAck() ; +} + +short Goldelox_Serial_4DLib::media_Init() +{ + _virtualPort->putc((char)(F_media_Init >> 8)) ; + _virtualPort->putc((char)(F_media_Init)) ; + return GetAckResp() ; +} + +short Goldelox_Serial_4DLib::media_ReadByte() +{ + _virtualPort->putc((char)(F_media_ReadByte >> 8)) ; + _virtualPort->putc((char)(F_media_ReadByte)) ; + return GetAckResp() ; +} + +short Goldelox_Serial_4DLib::media_ReadWord() +{ + _virtualPort->putc((char)(F_media_ReadWord >> 8)) ; + _virtualPort->putc((char)(F_media_ReadWord)) ; + return GetAckResp() ; +} + +void Goldelox_Serial_4DLib::media_SetAdd(short HiWord, short LoWord) +{ + _virtualPort->putc((char)(F_media_SetAdd >> 8)) ; + _virtualPort->putc((char)(F_media_SetAdd)) ; + _virtualPort->putc((char)(HiWord >> 8)) ; + _virtualPort->putc((char)(HiWord)) ; + _virtualPort->putc((char)(LoWord >> 8)) ; + _virtualPort->putc((char)(LoWord)) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::media_SetSector(short HiWord, short LoWord) +{ + _virtualPort->putc((char)(F_media_SetSector >> 8)) ; + _virtualPort->putc((char)(F_media_SetSector)) ; + _virtualPort->putc((char)(HiWord >> 8)) ; + _virtualPort->putc((char)(HiWord)) ; + _virtualPort->putc((char)(LoWord >> 8)) ; + _virtualPort->putc((char)(LoWord)) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::media_Video(short X, short Y) +{ + _virtualPort->putc((char)(F_media_Video >> 8)) ; + _virtualPort->putc((char)(F_media_Video)) ; + _virtualPort->putc((char)(X >> 8)) ; + _virtualPort->putc((char)(X)) ; + _virtualPort->putc((char)(Y >> 8)) ; + _virtualPort->putc((char)(Y)) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::media_VideoFrame(short X, short Y, short Framenumber) +{ + _virtualPort->putc((char)(F_media_VideoFrame >> 8)) ; + _virtualPort->putc((char)(F_media_VideoFrame)) ; + _virtualPort->putc((char)(X >> 8)) ; + _virtualPort->putc((char)(X)) ; + _virtualPort->putc((char)(Y >> 8)) ; + _virtualPort->putc((char)(Y)) ; + _virtualPort->putc((char)(Framenumber >> 8)) ; + _virtualPort->putc((char)(Framenumber)) ; + GetAck() ; +} + +short Goldelox_Serial_4DLib::media_WriteByte(short Byte) +{ + _virtualPort->putc((char)(F_media_WriteByte >> 8)) ; + _virtualPort->putc((char)(F_media_WriteByte)) ; + _virtualPort->putc((char)(Byte >> 8)) ; + _virtualPort->putc((char)(Byte)) ; + return GetAckResp() ; +} + +short Goldelox_Serial_4DLib::media_WriteWord(short Word) +{ + _virtualPort->putc((char)(F_media_WriteWord >> 8)) ; + _virtualPort->putc((char)(F_media_WriteWord)) ; + _virtualPort->putc((char)(Word >> 8)) ; + _virtualPort->putc((char)(Word)) ; + return GetAckResp() ; +} + +void Goldelox_Serial_4DLib::putCH(short WordChar) +{ + _virtualPort->putc((char)(F_putCH >> 8)) ; + _virtualPort->putc((char)(F_putCH)) ; + _virtualPort->putc((char)(WordChar >> 8)) ; + _virtualPort->putc((char)(WordChar)) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::putstr(char * InString) +{ + _virtualPort->putc((char)(F_putstr >> 8)) ; + _virtualPort->putc((char)(F_putstr)) ; + WriteChars(InString) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::txt_Attributes(short Attribs) +{ + _virtualPort->putc((char)(F_txt_Attributes >> 8)) ; + _virtualPort->putc((char)(F_txt_Attributes)) ; + _virtualPort->putc((char)(Attribs >> 8)) ; + _virtualPort->putc((char)(Attribs)) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::txt_BGcolour(short Color) +{ + _virtualPort->putc((char)(F_txt_BGcolour >> 8)) ; + _virtualPort->putc((char)(F_txt_BGcolour)) ; + _virtualPort->putc((char)(Color >> 8)) ; + _virtualPort->putc((char)(Color)) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::txt_Bold(short Bold) +{ + _virtualPort->putc((char)(F_txt_Bold >> 8)) ; + _virtualPort->putc((char)(F_txt_Bold)) ; + _virtualPort->putc((char)(Bold >> 8)) ; + _virtualPort->putc((char)(Bold)) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::txt_FGcolour(short Color) +{ + _virtualPort->putc((char)(F_txt_FGcolour >> 8)) ; + _virtualPort->putc((char)(F_txt_FGcolour)) ; + _virtualPort->putc((char)(Color >> 8)) ; + _virtualPort->putc((char)(Color)) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::txt_FontID(short FontNumber) +{ + _virtualPort->putc((char)(F_txt_FontID >> 8)) ; + _virtualPort->putc((char)(F_txt_FontID)) ; + _virtualPort->putc((char)(FontNumber >> 8)) ; + _virtualPort->putc((char)(FontNumber)) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::txt_Height(short Multiplier) +{ + _virtualPort->putc((char)(F_txt_Height >> 8)) ; + _virtualPort->putc((char)(F_txt_Height)) ; + _virtualPort->putc((char)(Multiplier >> 8)) ; + _virtualPort->putc((char)(Multiplier)) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::txt_Inverse(short Inverse) +{ + _virtualPort->putc((char)(F_txt_Inverse >> 8)) ; + _virtualPort->putc((char)(F_txt_Inverse)) ; + _virtualPort->putc((char)(Inverse >> 8)) ; + _virtualPort->putc((char)(Inverse)) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::txt_Italic(short Italic) +{ + _virtualPort->putc((char)(F_txt_Italic >> 8)) ; + _virtualPort->putc((char)(F_txt_Italic)) ; + _virtualPort->putc((char)(Italic >> 8)) ; + _virtualPort->putc((char)(Italic)) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::txt_MoveCursor(short Line, short Column) +{ + _virtualPort->putc((char)(F_txt_MoveCursor >> 8)) ; + _virtualPort->putc((char)(F_txt_MoveCursor)) ; + _virtualPort->putc((char)(Line >> 8)) ; + _virtualPort->putc((char)(Line)) ; + _virtualPort->putc((char)(Column >> 8)) ; + _virtualPort->putc((char)(Column)) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::txt_Opacity(short TransparentOpaque) +{ + _virtualPort->putc((char)(F_txt_Opacity >> 8)) ; + _virtualPort->putc((char)(F_txt_Opacity)) ; + _virtualPort->putc((char)(TransparentOpaque >> 8)) ; + _virtualPort->putc((char)(TransparentOpaque)) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::txt_Set(short Func, short Value) +{ + _virtualPort->putc((char)(F_txt_Set >> 8)) ; + _virtualPort->putc((char)(F_txt_Set)) ; + _virtualPort->putc((char)(Func >> 8)) ; + _virtualPort->putc((char)(Func)) ; + _virtualPort->putc((char)(Value >> 8)) ; + _virtualPort->putc((char)(Value)) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::txt_Underline(short Underline) +{ + _virtualPort->putc((char)(F_txt_Underline >> 8)) ; + _virtualPort->putc((char)(F_txt_Underline)) ; + _virtualPort->putc((char)(Underline >> 8)) ; + _virtualPort->putc((char)(Underline)) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::txt_Width(short Multiplier) +{ + _virtualPort->putc((char)(F_txt_Width >> 8)) ; + _virtualPort->putc((char)(F_txt_Width)) ; + _virtualPort->putc((char)(Multiplier >> 8)) ; + _virtualPort->putc((char)(Multiplier)) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::txt_Xgap(short Pixels) +{ + _virtualPort->putc((char)(F_txt_Xgap >> 8)) ; + _virtualPort->putc((char)(F_txt_Xgap)) ; + _virtualPort->putc((char)(Pixels >> 8)) ; + _virtualPort->putc((char)(Pixels)) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::txt_Ygap(short Pixels) +{ + _virtualPort->putc((char)(F_txt_Ygap >> 8)) ; + _virtualPort->putc((char)(F_txt_Ygap)) ; + _virtualPort->putc((char)(Pixels >> 8)) ; + _virtualPort->putc((char)(Pixels)) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::BeeP(short Note, short Duration) +{ + _virtualPort->putc((char)(F_BeeP >> 8)) ; + _virtualPort->putc((char)(F_BeeP)) ; + _virtualPort->putc((char)(Note >> 8)) ; + _virtualPort->putc((char)(Note)) ; + _virtualPort->putc((char)(Duration >> 8)) ; + _virtualPort->putc((char)(Duration)) ; + GetAck() ; +} + +short Goldelox_Serial_4DLib::sys_GetModel(char * ModelStr) +{ + _virtualPort->putc((char)(F_sys_GetModel >> 8)) ; + _virtualPort->putc((char)(F_sys_GetModel)) ; + return GetAckResStr(ModelStr) ; +} + +short Goldelox_Serial_4DLib::sys_GetVersion() +{ + _virtualPort->putc((char)(F_sys_GetVersion >> 8)) ; + _virtualPort->putc((char)(F_sys_GetVersion)) ; + return GetAckResp() ; +} + +short Goldelox_Serial_4DLib::sys_GetPmmC() +{ + _virtualPort->putc((char)(F_sys_GetPmmC >> 8)) ; + _virtualPort->putc((char)(F_sys_GetPmmC)) ; + return GetAckResp() ; +} + +void Goldelox_Serial_4DLib::blitComtoDisplay(short X, short Y, short Width, short Height, t4DByteArray Pixels) +{ + _virtualPort->putc((char)(F_blitComtoDisplay >> 8)) ; + _virtualPort->putc((char)(F_blitComtoDisplay)) ; + _virtualPort->putc((char)(X >> 8)) ; + _virtualPort->putc((char)(X)) ; + _virtualPort->putc((char)(Y >> 8)) ; + _virtualPort->putc((char)(Y)) ; + _virtualPort->putc((char)(Width >> 8)) ; + _virtualPort->putc((char)(Width)) ; + _virtualPort->putc((char)(Height >> 8)) ; + _virtualPort->putc((char)(Height)) ; + WriteBytes(Pixels, Width*Height*2) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::setbaudWait(short Newrate) +{ + _virtualPort->putc((char)(F_setbaudWait >> 8)) ; + _virtualPort->putc((char)(F_setbaudWait)) ; + _virtualPort->putc((char)(Newrate >> 8)) ; + _virtualPort->putc((char)(Newrate)) ; + SetThisBaudrate(Newrate) ; // change this systems baud rate to match new display rate, ACK is 100ms away + GetAck() ; +} + +short Goldelox_Serial_4DLib::peekW(short Address) +{ + _virtualPort->putc((char)(F_peekW >> 8)) ; + _virtualPort->putc((char)(F_peekW)) ; + _virtualPort->putc((char)(Address >> 8)) ; + _virtualPort->putc((char)(Address)) ; + return GetAckResp() ; +} + +void Goldelox_Serial_4DLib::pokeW(short Address, short WordValue) +{ + _virtualPort->putc((char)(F_pokeW >> 8)) ; + _virtualPort->putc((char)(F_pokeW)) ; + _virtualPort->putc((char)(Address >> 8)) ; + _virtualPort->putc((char)(Address)) ; + _virtualPort->putc((char)(WordValue >> 8)) ; + _virtualPort->putc((char)(WordValue)) ; + GetAck() ; +} + +short Goldelox_Serial_4DLib::peekB(short Address) +{ + _virtualPort->putc((char)(F_peekB >> 8)) ; + _virtualPort->putc((char)(F_peekB)) ; + _virtualPort->putc((char)(Address >> 8)) ; + _virtualPort->putc((char)(Address)) ; + return GetAckResp() ; +} + +void Goldelox_Serial_4DLib::pokeB(short Address, short ByteValue) +{ + _virtualPort->putc((char)(F_pokeB >> 8)) ; + _virtualPort->putc((char)(F_pokeB)) ; + _virtualPort->putc((char)(Address >> 8)) ; + _virtualPort->putc((char)(Address)) ; + _virtualPort->putc((char)(ByteValue >> 8)) ; + _virtualPort->putc((char)(ByteValue)) ; + GetAck() ; +} + +short Goldelox_Serial_4DLib::joystick() +{ + _virtualPort->putc((char)(F_joystick >> 8)) ; + _virtualPort->putc((char)(F_joystick)) ; + return GetAckResp() ; +} + +void Goldelox_Serial_4DLib::SSTimeout(short Seconds) +{ + _virtualPort->putc((char)(F_SSTimeout >> 8)) ; + _virtualPort->putc((char)(F_SSTimeout)) ; + _virtualPort->putc((char)(Seconds >> 8)) ; + _virtualPort->putc((char)(Seconds)) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::SSSpeed(short Speed) +{ + _virtualPort->putc((char)(F_SSSpeed >> 8)) ; + _virtualPort->putc((char)(F_SSSpeed)) ; + _virtualPort->putc((char)(Speed >> 8)) ; + _virtualPort->putc((char)(Speed)) ; + GetAck() ; +} + +void Goldelox_Serial_4DLib::SSMode(short Parm) +{ + _virtualPort->putc((char)(F_SSMode >> 8)) ; + _virtualPort->putc((char)(F_SSMode)) ; + _virtualPort->putc((char)(Parm >> 8)) ; + _virtualPort->putc((char)(Parm)) ; + GetAck() ; +}