Serial library for Diablo4D. Tested with uLCD220RD

Revision:
0:81cd913c5e43
Child:
1:9a2c573adad6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Diablo_Serial_4DLib.h	Tue May 09 14:16:16 2017 +0000
@@ -0,0 +1,239 @@
+/*
+    4DSerial - Library for 4D Systems Serial Environment.
+    Released into the public domain.
+*/
+ 
+#ifndef Diablo_Serial_4DLib_h
+#define Diablo_Serial_4DLib_h
+
+#include "Diablo_Const4D.h"             // Defines for 4dgl constants, generated by conversion of 4DGL constants to target language
+#include "mbed.h"
+//#include "millis.h"
+
+#include <string>
+#include <stdint.h>
+
+#define word uint16_t
+
+#define DEC 10
+#define HEX 16
+#define OCT 8
+#define BIN 2
+
+void           init_clock(void);
+unsigned long  get_millis(void);
+
+typedef void (*Tcallback4D)(int, unsigned char); 
+
+class Diablo_Serial_4DLib
+{
+    public:
+        Diablo_Serial_4DLib(Serial *virtualPort, int timeout4D);
+        Tcallback4D Callback4D;
+        
+        //Compound 4D Routines
+        word bus_Read8();
+        void bus_Write8(word Bits);
+        word charheight(char  TestChar);
+        word charwidth(char  TestChar);
+        word file_Close(word  Handle);
+        word file_Count(char *  Filename);
+        word file_Dir(char *  Filename);
+        word file_Erase(char *  Filename);
+        word file_Error();
+        word file_Exec(char *  Filename, word  GFX_ArgCount, GFX_t4DWordArray  Args);
+        word file_Exists(char *  Filename);
+        word file_FindFirst(char *  Filename);
+        word file_FindNext();
+        char file_GetC(word  Handle);
+        word file_GetS(char *  StringIn, word  Size, word  Handle);
+        word file_GetW(word  Handle);
+        word file_Image(word  X, word  Y, word  Handle);
+        word file_Index(word  Handle, word  HiSize, word  LoSize, word  Recordnum);
+        word file_LoadFunction(char *  Filename);
+        word file_LoadImageControl(char *  Datname, char *  GCIName, word  Mode);
+        word file_Mount();
+        word file_Open(char *  Filename, char  Mode);
+        word file_PlayWAV(char *  Filename);
+        word file_PutC(char  Character, word  Handle);
+        word file_PutS(char *  StringOut, word  Handle);
+        word file_PutW(word  Word, word  Handle);
+        word file_Read(GFX_t4DByteArray  Data, word  Size, word  Handle);
+        word file_Rewind(word  Handle);
+        word file_Run(char *  Filename, word  ArgCount, GFX_t4DWordArray  Args);
+        word file_ScreenCapture(word  X, word  Y, word  Width, word  Height, word  Handle);
+        word file_Seek(word  Handle, word  HiWord, word  LoWord);
+        word file_Size(word  Handle, word *  HiWord, word *  LoWord);
+        word file_Tell(word  Handle, word *  HiWord, word *  LoWord);
+        void file_Unmount();
+        word file_Write(word  Size, GFX_t4DByteArray  Source, word  Handle);
+        word gfx_BevelShadow(word  Value);
+        word gfx_BevelWidth(word  Value);
+        word gfx_BGcolour(word  Color);
+        void gfx_Button(word  Up, word  x, word  y, word  buttonColour, word  txtColour, word  font, word  txtWidth, word  txtHeight, char *   text);
+        void gfx_ChangeColour(word  OldColor, word  NewColor);
+        void gfx_Circle(word  X, word  Y, word  Radius, word  Color);
+        void gfx_CircleFilled(word  X, word  Y, word  Radius, word  Color);
+        void gfx_Clipping(word  OnOff);
+        void gfx_ClipWindow(word  X1, word  Y1, word  X2, word  Y2);
+        void gfx_Cls();
+        word gfx_Contrast(word  Contrast);
+        void gfx_Ellipse(word  X, word  Y, word  Xrad, word  Yrad, word  Color);
+        void gfx_EllipseFilled(word  X, word  Y, word  Xrad, word  Yrad, word  Color);
+        word gfx_FrameDelay(word  Msec);
+        word gfx_Get(word  Mode);
+        word gfx_GetPixel(word  X, word  Y);
+        void gfx_Line(word  X1, word  Y1, word  X2, word  Y2, word  Color);
+        word gfx_LinePattern(word  Pattern);
+        void gfx_LineTo(word  X, word  Y);
+        void gfx_MoveTo(word  X, word  Y);
+        word gfx_Orbit(word  Angle, word  Distance, word *  Xdest, word *  Ydest);
+        word gfx_OutlineColour(word  Color);
+        void gfx_Panel(word  Raised, word  X, word  Y, word  Width, word  Height, word  Color);
+        void gfx_Polygon(word  n, GFX_t4DWordArray  Xvalues, GFX_t4DWordArray  Yvalues, word  Color);
+        void gfx_PolygonFilled(word  n, GFX_t4DWordArray  Xvalues, GFX_t4DWordArray  Yvalues, word  Color);
+        void gfx_Polyline(word  n, GFX_t4DWordArray  Xvalues, GFX_t4DWordArray  Yvalues, word  Color);
+        void gfx_PutPixel(word  X, word  Y, word  Color);
+        void gfx_Rectangle(word  X1, word  Y1, word  X2, word  Y2, word  Color);
+        void gfx_RectangleFilled(word  X1, word  Y1, word  X2, word  Y2, word  Color);
+        void gfx_ScreenCopyPaste(word  Xs, word  Ys, word  Xd, word  Yd, word  Width, word  Height);
+        word gfx_ScreenMode(word  ScreenMode);
+        void gfx_Set(word  Func, word  Value);
+        void gfx_SetClipRegion();
+        word gfx_Slider(word  Mode, word  X1, word  Y1, word  X2, word  Y2, word  Color, word  Scale, word  Value);
+        word gfx_Transparency(word  OnOff);
+        word gfx_TransparentColour(word  Color);
+        void gfx_Triangle(word  X1, word  Y1, word  X2, word  Y2, word  X3, word  Y3, word  Color);
+        void gfx_TriangleFilled(word  X1, word  Y1, word  X2, word  Y2, word  X3, word  Y3, word  Color);
+        word img_ClearAttributes(word  Handle, word  Index, word  Value);
+        word img_Darken(word  Handle, word  Index);
+        word img_Disable(word  Handle, word  Index);
+        word img_Enable(word  Handle, word  Index);
+        word img_GetWord(word  Handle, word  Index, word  Offset );
+        word img_Lighten(word  Handle, word  Index);
+        word img_SetAttributes(word  Handle, word  Index, word  Value);
+        word img_SetPosition(word  Handle, word  Index, word  Xpos, word  Ypos);
+        word img_SetWord(word  Handle, word  Index, word  Offset , word  Word);
+        word img_Show(word  Handle, word  Index);
+        word img_Touched(word  Handle, word  Index);
+        word media_Flush();
+        void media_Image(word  X, word  Y);
+        word media_Init();
+        word media_RdSector(GFX_t4DSector  SectorIn);
+        word media_ReadByte();
+        word media_ReadWord();
+        void media_SetAdd(word  HiWord, word  LoWord);
+        void media_SetSector(word  HiWord, word  LoWord);
+        void media_Video(word  X, word  Y);
+        void media_VideoFrame(word  X, word  Y, word  Framenumber);
+        word media_WriteByte(word  Byte);
+        word media_WriteWord(word  Word);
+        word media_WrSector(GFX_t4DSector  SectorOut);
+        word mem_Free(word  Handle);
+        word mem_Heap();
+        word peekM(word  Address);
+        word pin_HI(word Pin);
+        word pin_LO(word Pin);
+        word pin_Read(word Pin);
+        word pin_Set(word Mode, word Pin);
+        void pokeM(word  Address, word  WordValue);
+        void putCH(word  WordChar);
+        word putstr(char *  InString);
+        //---------------------print----------------------/
+        
+        //void print(const __FlashStringHelper *);
+        void print(const string &);
+        void print(const char[]);
+        void print(char);
+        void print(unsigned char, int = DEC);
+        void print(int, int = DEC);
+        void print(unsigned int, int = DEC);
+        void print(long, int = DEC);
+        void print(unsigned long n, int = DEC);
+        void print(double, int = 2);
+        
+        //void println(const __FlashStringHelper *);
+        void println(const string &);
+        void println(const char[]);
+        void println(char);
+        void println(unsigned char, int = DEC);
+        void println(int, int = DEC);
+        void println(unsigned int, int = DEC);
+        void println(long, int = DEC);
+        void println(unsigned long, int = DEC);
+        void println(double, int = 2);
+
+        //------------------------------------------------/
+        void snd_BufSize(word  Bufsize);
+        void snd_Continue();
+        void snd_Pause();
+        word snd_Pitch(word  Pitch);
+        word snd_Playing();
+        void snd_Stop();
+        void snd_Volume(word  Volume);
+        word sys_Sleep(word  Units);
+        void touch_DetectRegion(word  X1, word  Y1, word  X2, word  Y2);
+        word touch_Get(word  Mode);
+        void touch_Set(word  Mode);
+        word txt_Attributes(word  Attribs);
+        word txt_BGcolour(word  Color);
+        word txt_Bold(word  Bold);
+        word txt_FGcolour(word  Color);
+        word txt_FontID(word  FontNumber);
+        word txt_Height(word  Multiplier);
+        word txt_Inverse(word  Inverse);
+        word txt_Italic(word  Italic);
+        void txt_MoveCursor(word  Line, word  Column);
+        word txt_Opacity(word  TransparentOpaque);
+        void txt_Set(word  Func, word  Value);
+        word txt_Underline(word  Underline);
+        word txt_Width(word  Multiplier);
+        word txt_Wrap(word  Position);
+        word txt_Xgap(word  Pixels);
+        word txt_Ygap(word  Pixels);
+        word file_CallFunction(word  Handle, word  GFX_ArgCount, GFX_t4DWordArray  Args);
+        word sys_GetModel(char *  ModelStr);
+        word sys_GetVersion();
+        word sys_GetPmmC();
+        word writeString(word  Handle, char *  StringOut);
+        word readString(word  Handle, char *  StringIn);
+        void blitComtoDisplay(word  X, word  Y, word  Width, word  Height, GFX_t4DByteArray  Pixels);
+        word file_FindFirstRet(char *  Filename, char *  StringIn);
+        word file_FindNextRet(char *  StringIn);
+        void setbaudWait(word  Newrate);
+        void GetAck(void);
+        
+        //4D Global Variables Used
+        int Error4D;                // Error indicator,  used and set by Intrinsic routines
+        unsigned char Error4D_Inv;  // Error byte returned from com port, onl set if error = Err_Invalid
+    //  int Error_Abort4D;          // if true routines will abort when detecting an error
+        int TimeLimit4D;  // time limit in ms for total serial command duration, 2000 (2 seconds) should be adequate for most commands
+                                    // assuming a reasonable baud rate AND low latency AND 0 for the Serial Delay Parameter
+                                    // temporary increase might be required for very long (bitmap write, large image file opens)
+                                    // or indeterminate (eg file_exec, file_run, file_callFunction) commands
+        
+    private:
+        Serial * _virtualPort;
+        //Timer _timer;
+        //unsigned long GetMillis(void);
+        //Intrinsic 4D Routines
+        void WriteGFX(word req);
+        void WriteChars(char * charsout);
+        void WriteBytes(char * Source, int Size);
+        void WriteWords(word * Source, int Size);
+        void getbytes(char * data, int size);
+        word GetWord(void);
+        void getString(char * outStr, int strLen);
+        word GetAckResp(void);
+        word GetAckRes2Words(word * word1, word * word2);
+        void GetAck2Words(word * word1, word * word2);
+        word GetAckResSector(GFX_t4DSector Sector);
+        word GetAckResStr(char * OutStr);
+        word GetAckResData(GFX_t4DByteArray OutData, word size);
+        void SetThisBaudrate(int Newrate);
+        
+        void printNumber(unsigned long, uint8_t);
+        void printFloat(double number, uint8_t digits);
+};
+ 
+#endif