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
uLCD_4D_Picaso.h@0:e314f3b805ed, 2015-03-06 (annotated)
- Committer:
- admcrae
- Date:
- Fri Mar 06 00:35:58 2015 +0000
- Revision:
- 0:e314f3b805ed
- Child:
- 2:ebe7029e2825
Rev. 1 (needs better documentation)
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
admcrae | 0:e314f3b805ed | 1 | /** |
admcrae | 0:e314f3b805ed | 2 | * This is a class to drive 4D systems screens with Picaso graphics processors |
admcrae | 0:e314f3b805ed | 3 | * |
admcrae | 0:e314f3b805ed | 4 | * This is a port of the 4D systems Picaso Serial Linux Library |
admcrae | 0:e314f3b805ed | 5 | * Copyright (c) 2014 4D Systems PTY Ltd, Sydney, Australia |
admcrae | 0:e314f3b805ed | 6 | * From https://github.com/4dsystems/Picaso-Serial-Linux-Library, retrieved March 5, 2015 |
admcrae | 0:e314f3b805ed | 7 | * |
admcrae | 0:e314f3b805ed | 8 | * All software in this library is provided without warranty; use at your own risk. |
admcrae | 0:e314f3b805ed | 9 | */ |
admcrae | 0:e314f3b805ed | 10 | |
admcrae | 0:e314f3b805ed | 11 | #ifndef uLCD_4D_Picaso_H |
admcrae | 0:e314f3b805ed | 12 | #define uLCD_4D_Picaso_H |
admcrae | 0:e314f3b805ed | 13 | |
admcrae | 0:e314f3b805ed | 14 | // This library can work with either the standard mbed Serial library or with the MODSERIAL |
admcrae | 0:e314f3b805ed | 15 | // library by Andy Kirkham. MODSERIAL allows RX buffering, which could prevent dropped characters |
admcrae | 0:e314f3b805ed | 16 | // at high baud rates. The version of MODSERIAL by Erik Olieman, which is supposed to support more |
admcrae | 0:e314f3b805ed | 17 | // devices, does not appear to work with this library at present, for unknown reasons. |
admcrae | 0:e314f3b805ed | 18 | #define LCD_USING_MODSERIAL 1 |
admcrae | 0:e314f3b805ed | 19 | |
admcrae | 0:e314f3b805ed | 20 | #include "mbed.h" |
admcrae | 0:e314f3b805ed | 21 | #include "Picaso_Types4D.h" |
admcrae | 0:e314f3b805ed | 22 | |
admcrae | 0:e314f3b805ed | 23 | #if LCD_USING_MODSERIAL |
admcrae | 0:e314f3b805ed | 24 | #include "MODSERIAL.h" |
admcrae | 0:e314f3b805ed | 25 | #endif |
admcrae | 0:e314f3b805ed | 26 | |
admcrae | 0:e314f3b805ed | 27 | class uLCD_4D_Picaso { |
admcrae | 0:e314f3b805ed | 28 | public: |
admcrae | 0:e314f3b805ed | 29 | |
admcrae | 0:e314f3b805ed | 30 | // Allowed serial interface baud rates. |
admcrae | 0:e314f3b805ed | 31 | enum BaudRate { |
admcrae | 0:e314f3b805ed | 32 | BAUD_110 = 0, BAUD_300, BAUD_600, BAUD_1200, BAUD_2400, BAUD_4800, BAUD_9600, BAUD_14400, |
admcrae | 0:e314f3b805ed | 33 | BAUD_19200, BAUD_31250, BAUD_38400, BAUD_56000, BAUD_57600, BAUD_115200, BAUD_128000, |
admcrae | 0:e314f3b805ed | 34 | BAUD_256000, BAUD_300000, BAUD_375000, BAUD_500000, BAUD_600000 |
admcrae | 0:e314f3b805ed | 35 | }; |
admcrae | 0:e314f3b805ed | 36 | |
admcrae | 0:e314f3b805ed | 37 | uLCD_4D_Picaso(PinName tx, PinName rx, PinName reset); |
admcrae | 0:e314f3b805ed | 38 | void LCD_reset(); |
admcrae | 0:e314f3b805ed | 39 | |
admcrae | 0:e314f3b805ed | 40 | char file_GetC(WORD Handle) ; |
admcrae | 0:e314f3b805ed | 41 | void blitComtoDisplay(WORD X, WORD Y, WORD Width, WORD Height, t4DByteArray Pixels); |
admcrae | 0:e314f3b805ed | 42 | WORD bus_In(void); |
admcrae | 0:e314f3b805ed | 43 | void bus_Out(WORD Bits); |
admcrae | 0:e314f3b805ed | 44 | WORD bus_Read(void); |
admcrae | 0:e314f3b805ed | 45 | void bus_Set(WORD IOMap); |
admcrae | 0:e314f3b805ed | 46 | void bus_Write(WORD Bits); |
admcrae | 0:e314f3b805ed | 47 | void file_Unmount(void); |
admcrae | 0:e314f3b805ed | 48 | void gfx_Button(WORD Up, WORD x, WORD y, WORD buttonColour, WORD txtColour, WORD font, WORD txtWidth, WORD txtHeight, char * text); |
admcrae | 0:e314f3b805ed | 49 | void gfx_ChangeColour(WORD OldColor, WORD NewColor); |
admcrae | 0:e314f3b805ed | 50 | void gfx_Circle(WORD X, WORD Y, WORD Radius, WORD Color); |
admcrae | 0:e314f3b805ed | 51 | void gfx_CircleFilled(WORD X, WORD Y, WORD Radius, WORD Color); |
admcrae | 0:e314f3b805ed | 52 | void gfx_Clipping(WORD OnOff); |
admcrae | 0:e314f3b805ed | 53 | void gfx_ClipWindow(WORD X1, WORD Y1, WORD X2, WORD Y2); |
admcrae | 0:e314f3b805ed | 54 | void gfx_Cls(void); |
admcrae | 0:e314f3b805ed | 55 | void gfx_Ellipse(WORD X, WORD Y, WORD Xrad, WORD Yrad, WORD Color); |
admcrae | 0:e314f3b805ed | 56 | void gfx_EllipseFilled(WORD X, WORD Y, WORD Xrad, WORD Yrad, WORD Color); |
admcrae | 0:e314f3b805ed | 57 | void gfx_Line(WORD X1, WORD Y1, WORD X2, WORD Y2, WORD Color); |
admcrae | 0:e314f3b805ed | 58 | void gfx_LineTo(WORD X, WORD Y); |
admcrae | 0:e314f3b805ed | 59 | void gfx_MoveTo(WORD X, WORD Y); |
admcrae | 0:e314f3b805ed | 60 | void gfx_Panel(WORD Raised, WORD X, WORD Y, WORD Width, WORD Height, WORD Color); |
admcrae | 0:e314f3b805ed | 61 | void gfx_Polygon(WORD n, t4DWordArray Xvalues, t4DWordArray Yvalues, WORD Color); |
admcrae | 0:e314f3b805ed | 62 | void gfx_PolygonFilled(WORD n, t4DWordArray Xvalues, t4DWordArray Yvalues, WORD Color); |
admcrae | 0:e314f3b805ed | 63 | void gfx_Polyline(WORD n, t4DWordArray Xvalues, t4DWordArray Yvalues, WORD Color); |
admcrae | 0:e314f3b805ed | 64 | void gfx_PutPixel(WORD X, WORD Y, WORD Color); |
admcrae | 0:e314f3b805ed | 65 | void gfx_Rectangle(WORD X1, WORD Y1, WORD X2, WORD Y2, WORD Color); |
admcrae | 0:e314f3b805ed | 66 | void gfx_RectangleFilled(WORD X1, WORD Y1, WORD X2, WORD Y2, WORD Color); |
admcrae | 0:e314f3b805ed | 67 | void gfx_ScreenCopyPaste(WORD Xs, WORD Ys, WORD Xd, WORD Yd, WORD Width, WORD Height); |
admcrae | 0:e314f3b805ed | 68 | void gfx_Set(WORD Func, WORD Value); |
admcrae | 0:e314f3b805ed | 69 | void gfx_SetClipRegion(void); |
admcrae | 0:e314f3b805ed | 70 | void gfx_Triangle(WORD X1, WORD Y1, WORD X2, WORD Y2, WORD X3, WORD Y3, WORD Color); |
admcrae | 0:e314f3b805ed | 71 | void gfx_TriangleFilled(WORD X1, WORD Y1, WORD X2, WORD Y2, WORD X3, WORD Y3, WORD Color); |
admcrae | 0:e314f3b805ed | 72 | void media_Image(WORD X, WORD Y); |
admcrae | 0:e314f3b805ed | 73 | void media_SetAdd(WORD HiWord, WORD LoWord); |
admcrae | 0:e314f3b805ed | 74 | void media_SetSector(WORD HiWord, WORD LoWord); |
admcrae | 0:e314f3b805ed | 75 | void media_Video(WORD X, WORD Y); |
admcrae | 0:e314f3b805ed | 76 | void media_VideoFrame(WORD X, WORD Y, WORD Framenumber); |
admcrae | 0:e314f3b805ed | 77 | void setbaudWait(uLCD_4D_Picaso::BaudRate Newrate); |
admcrae | 0:e314f3b805ed | 78 | void snd_BufSize(WORD Bufsize); |
admcrae | 0:e314f3b805ed | 79 | void snd_Continue(void); |
admcrae | 0:e314f3b805ed | 80 | void snd_Pause(void); |
admcrae | 0:e314f3b805ed | 81 | void snd_Stop(void); |
admcrae | 0:e314f3b805ed | 82 | void snd_Volume(WORD Volume); |
admcrae | 0:e314f3b805ed | 83 | void touch_DetectRegion(WORD X1, WORD Y1, WORD X2, WORD Y2); |
admcrae | 0:e314f3b805ed | 84 | void touch_Set(WORD Mode); |
admcrae | 0:e314f3b805ed | 85 | void txt_MoveCursor(WORD Line, WORD Column); |
admcrae | 0:e314f3b805ed | 86 | void txt_Set(WORD Func, WORD Value); |
admcrae | 0:e314f3b805ed | 87 | WORD charheight(char TestChar); |
admcrae | 0:e314f3b805ed | 88 | WORD charwidth(char TestChar); |
admcrae | 0:e314f3b805ed | 89 | WORD file_CallFunction(WORD Handle, WORD ArgCount, t4DWordArray Args); |
admcrae | 0:e314f3b805ed | 90 | WORD file_Close(WORD Handle); |
admcrae | 0:e314f3b805ed | 91 | WORD file_Count(char * Filename); |
admcrae | 0:e314f3b805ed | 92 | WORD file_Dir(char * Filename); |
admcrae | 0:e314f3b805ed | 93 | WORD file_Erase(char * Filename); |
admcrae | 0:e314f3b805ed | 94 | WORD file_Error(void); |
admcrae | 0:e314f3b805ed | 95 | WORD file_Exec(char *Filename, WORD ArgCount, t4DWordArray Args); |
admcrae | 0:e314f3b805ed | 96 | WORD file_Exists(char *Filename); |
admcrae | 0:e314f3b805ed | 97 | WORD file_FindFirst(char *Filename); |
admcrae | 0:e314f3b805ed | 98 | WORD file_FindFirstRet(char *Filename, char * StringIn); |
admcrae | 0:e314f3b805ed | 99 | WORD file_FindNext(void); |
admcrae | 0:e314f3b805ed | 100 | WORD file_FindNextRet(char * StringIn); |
admcrae | 0:e314f3b805ed | 101 | WORD file_GetS(char * StringIn, WORD Size, WORD Handle); |
admcrae | 0:e314f3b805ed | 102 | WORD file_GetW(WORD Handle); |
admcrae | 0:e314f3b805ed | 103 | WORD file_Image(WORD X, WORD Y, WORD Handle); |
admcrae | 0:e314f3b805ed | 104 | WORD file_Index(WORD Handle, WORD HiSize, WORD LoSize, WORD Recordnum); |
admcrae | 0:e314f3b805ed | 105 | WORD file_LoadFunction(char *Filename); |
admcrae | 0:e314f3b805ed | 106 | WORD file_LoadImageControl(char *Datname, char *GCIName, WORD Mode); |
admcrae | 0:e314f3b805ed | 107 | WORD file_Mount(void); |
admcrae | 0:e314f3b805ed | 108 | WORD file_Open(char * Filename, char Mode); |
admcrae | 0:e314f3b805ed | 109 | WORD file_PlayWAV(char * Filename); |
admcrae | 0:e314f3b805ed | 110 | WORD file_PutC(char Character, WORD Handle); |
admcrae | 0:e314f3b805ed | 111 | WORD file_PutS(char * StringOut, WORD Handle); |
admcrae | 0:e314f3b805ed | 112 | WORD file_PutW(WORD Word, WORD Handle); |
admcrae | 0:e314f3b805ed | 113 | WORD file_Read(t4DByteArray Data, WORD Size, WORD Handle); |
admcrae | 0:e314f3b805ed | 114 | WORD file_Rewind(WORD Handle); |
admcrae | 0:e314f3b805ed | 115 | WORD file_Run(char *Filename, WORD ArgCount, t4DWordArray Args); |
admcrae | 0:e314f3b805ed | 116 | WORD file_ScreenCapture(WORD X, WORD Y, WORD Width, WORD Height, WORD Handle); |
admcrae | 0:e314f3b805ed | 117 | WORD file_Seek(WORD Handle, WORD HiWord, WORD LoWord); |
admcrae | 0:e314f3b805ed | 118 | WORD file_Size(WORD Handle, WORD * HiWord, WORD * LoWord); |
admcrae | 0:e314f3b805ed | 119 | WORD file_Tell(WORD Handle, WORD * HiWord, WORD * LoWord); |
admcrae | 0:e314f3b805ed | 120 | WORD file_Write(WORD Size, t4DByteArray Source, WORD Handle); |
admcrae | 0:e314f3b805ed | 121 | WORD gfx_BevelShadow(WORD Value); |
admcrae | 0:e314f3b805ed | 122 | WORD gfx_BevelWidth(WORD Value); |
admcrae | 0:e314f3b805ed | 123 | WORD gfx_BGcolour(WORD Color); |
admcrae | 0:e314f3b805ed | 124 | WORD gfx_Contrast(WORD Contrast); |
admcrae | 0:e314f3b805ed | 125 | WORD gfx_FrameDelay(WORD Msec); |
admcrae | 0:e314f3b805ed | 126 | WORD gfx_Get(WORD Mode); |
admcrae | 0:e314f3b805ed | 127 | WORD gfx_GetPixel(WORD X, WORD Y); |
admcrae | 0:e314f3b805ed | 128 | WORD gfx_LinePattern(WORD Pattern); |
admcrae | 0:e314f3b805ed | 129 | WORD gfx_Orbit(WORD Angle, WORD Distance, WORD * Xdest, WORD * Ydest); |
admcrae | 0:e314f3b805ed | 130 | WORD gfx_OutlineColour(WORD Color); |
admcrae | 0:e314f3b805ed | 131 | WORD gfx_ScreenMode(WORD ScreenMode); |
admcrae | 0:e314f3b805ed | 132 | WORD gfx_Slider(WORD Mode, WORD X1, WORD Y1, WORD X2, WORD Y2, WORD Color, WORD Scale, WORD Value); |
admcrae | 0:e314f3b805ed | 133 | WORD gfx_Transparency(WORD OnOff); |
admcrae | 0:e314f3b805ed | 134 | WORD gfx_TransparentColour(WORD Color); |
admcrae | 0:e314f3b805ed | 135 | WORD img_ClearAttributes(WORD Handle, WORD Index, WORD Value); |
admcrae | 0:e314f3b805ed | 136 | WORD img_Darken(WORD Handle, WORD Index); |
admcrae | 0:e314f3b805ed | 137 | WORD img_Disable(WORD Handle, WORD Index); |
admcrae | 0:e314f3b805ed | 138 | WORD img_Enable(WORD Handle, WORD Index); |
admcrae | 0:e314f3b805ed | 139 | WORD img_GetWord(WORD Handle, WORD Index, WORD Offset ); |
admcrae | 0:e314f3b805ed | 140 | WORD img_Lighten(WORD Handle, WORD Index); |
admcrae | 0:e314f3b805ed | 141 | WORD img_SetAttributes(WORD Handle, WORD Index, WORD Value); |
admcrae | 0:e314f3b805ed | 142 | WORD img_SetPosition(WORD Handle, WORD Index, WORD Xpos, WORD Ypos); |
admcrae | 0:e314f3b805ed | 143 | WORD img_SetWord(WORD Handle, WORD Index, WORD Offset , WORD Word); |
admcrae | 0:e314f3b805ed | 144 | WORD img_Show(WORD Handle, WORD Index); |
admcrae | 0:e314f3b805ed | 145 | WORD img_Touched(WORD Handle, WORD Index); |
admcrae | 0:e314f3b805ed | 146 | WORD media_Flush(void); |
admcrae | 0:e314f3b805ed | 147 | WORD media_Init(void); |
admcrae | 0:e314f3b805ed | 148 | WORD media_RdSector(t4DSector SectorIn); |
admcrae | 0:e314f3b805ed | 149 | WORD media_ReadByte(void); |
admcrae | 0:e314f3b805ed | 150 | WORD media_ReadWord(void); |
admcrae | 0:e314f3b805ed | 151 | WORD media_WriteByte(WORD Byte); |
admcrae | 0:e314f3b805ed | 152 | WORD media_WriteWord(WORD Word); |
admcrae | 0:e314f3b805ed | 153 | WORD media_WrSector(t4DSector SectorOut); |
admcrae | 0:e314f3b805ed | 154 | WORD mem_Free(WORD Handle); |
admcrae | 0:e314f3b805ed | 155 | WORD mem_Heap(void); |
admcrae | 0:e314f3b805ed | 156 | WORD peekM(WORD Address) ; |
admcrae | 0:e314f3b805ed | 157 | void pokeM(WORD Address, WORD WordValue) ; |
admcrae | 0:e314f3b805ed | 158 | WORD pin_HI(WORD Pin); |
admcrae | 0:e314f3b805ed | 159 | WORD pin_LO(WORD Pin); |
admcrae | 0:e314f3b805ed | 160 | WORD pin_Read(WORD Pin); |
admcrae | 0:e314f3b805ed | 161 | WORD pin_Set(WORD Mode, WORD Pin); |
admcrae | 0:e314f3b805ed | 162 | void putCH(WORD WordChar); |
admcrae | 0:e314f3b805ed | 163 | WORD putStr(char *InString); |
admcrae | 0:e314f3b805ed | 164 | WORD readString(WORD Handle, char * StringIn); |
admcrae | 0:e314f3b805ed | 165 | WORD snd_Pitch(WORD Pitch); |
admcrae | 0:e314f3b805ed | 166 | WORD snd_Playing(void); |
admcrae | 0:e314f3b805ed | 167 | WORD sys_GetModel(char *ModelStr); |
admcrae | 0:e314f3b805ed | 168 | WORD sys_GetPmmC(void); |
admcrae | 0:e314f3b805ed | 169 | WORD sys_GetVersion(void); |
admcrae | 0:e314f3b805ed | 170 | WORD sys_Sleep(WORD Units); |
admcrae | 0:e314f3b805ed | 171 | WORD touch_Get(WORD Mode); |
admcrae | 0:e314f3b805ed | 172 | WORD txt_Attributes(WORD Attribs); |
admcrae | 0:e314f3b805ed | 173 | WORD txt_BGcolour(WORD Color); |
admcrae | 0:e314f3b805ed | 174 | WORD txt_Bold(WORD Bold); |
admcrae | 0:e314f3b805ed | 175 | WORD txt_FGcolour(WORD Color); |
admcrae | 0:e314f3b805ed | 176 | WORD txt_FontID(WORD FontNumber); |
admcrae | 0:e314f3b805ed | 177 | WORD txt_Height(WORD Multiplier); |
admcrae | 0:e314f3b805ed | 178 | WORD txt_Inverse(WORD Inverse); |
admcrae | 0:e314f3b805ed | 179 | WORD txt_Italic(WORD Italic); |
admcrae | 0:e314f3b805ed | 180 | WORD txt_Opacity(WORD TransparentOpaque); |
admcrae | 0:e314f3b805ed | 181 | WORD txt_Underline(WORD Underline); |
admcrae | 0:e314f3b805ed | 182 | WORD txt_Width(WORD Multiplier); |
admcrae | 0:e314f3b805ed | 183 | WORD txt_Wrap(WORD Position); |
admcrae | 0:e314f3b805ed | 184 | WORD txt_Xgap(WORD Pixels); |
admcrae | 0:e314f3b805ed | 185 | WORD txt_Ygap(WORD Pixels); |
admcrae | 0:e314f3b805ed | 186 | WORD writeString(WORD Handle, char * StringOut); |
admcrae | 0:e314f3b805ed | 187 | |
admcrae | 0:e314f3b805ed | 188 | private: |
admcrae | 0:e314f3b805ed | 189 | |
admcrae | 0:e314f3b805ed | 190 | #if LCD_USING_MODSERIAL |
admcrae | 0:e314f3b805ed | 191 | MODSERIAL serial; |
admcrae | 0:e314f3b805ed | 192 | #else |
admcrae | 0:e314f3b805ed | 193 | Serial serial; |
admcrae | 0:e314f3b805ed | 194 | #endif |
admcrae | 0:e314f3b805ed | 195 | |
admcrae | 0:e314f3b805ed | 196 | DigitalOut rst; |
admcrae | 0:e314f3b805ed | 197 | Timer timer; |
admcrae | 0:e314f3b805ed | 198 | |
admcrae | 0:e314f3b805ed | 199 | void WriteBytes(char* psOutput, int count); |
admcrae | 0:e314f3b805ed | 200 | void WriteChars(char* psOutput); |
admcrae | 0:e314f3b805ed | 201 | void WriteWords(WORD* source, int count); |
admcrae | 0:e314f3b805ed | 202 | int ReadSerPort(char *psData, int iMax); |
admcrae | 0:e314f3b805ed | 203 | void getbytes(char *data, int size); |
admcrae | 0:e314f3b805ed | 204 | void GetAck(); |
admcrae | 0:e314f3b805ed | 205 | WORD GetWord(); |
admcrae | 0:e314f3b805ed | 206 | void getString(char *outStr, int strLen); |
admcrae | 0:e314f3b805ed | 207 | WORD GetAckResp(); |
admcrae | 0:e314f3b805ed | 208 | WORD WaitForAck(); |
admcrae | 0:e314f3b805ed | 209 | WORD GetAckRes2Words(WORD * word1, WORD * word2); |
admcrae | 0:e314f3b805ed | 210 | void GetAck2Words(WORD * word1, WORD * word2); |
admcrae | 0:e314f3b805ed | 211 | WORD GetAckResSector(t4DSector Sector); |
admcrae | 0:e314f3b805ed | 212 | WORD GetAckResStr(char * OutStr); |
admcrae | 0:e314f3b805ed | 213 | WORD GetAckResData(t4DByteArray OutData, WORD size); |
admcrae | 0:e314f3b805ed | 214 | void SetThisBaudrate(uLCD_4D_Picaso::BaudRate NewRate); |
admcrae | 0:e314f3b805ed | 215 | |
admcrae | 0:e314f3b805ed | 216 | void LCD_wait_ms(int ms); |
admcrae | 0:e314f3b805ed | 217 | void rxFlush(); |
admcrae | 0:e314f3b805ed | 218 | |
admcrae | 0:e314f3b805ed | 219 | // 4D Global variables |
admcrae | 0:e314f3b805ed | 220 | int Error4D ; // Error indicator, used and set by Intrinsic routines |
admcrae | 0:e314f3b805ed | 221 | int TimeLimit4D; // time limit in ms for total serial command duration, 2000 (2 seconds) should be adequate for most commands |
admcrae | 0:e314f3b805ed | 222 | // assuming a reasonable baud rate AND low latency AND 0 for the Serial Delay Parameter |
admcrae | 0:e314f3b805ed | 223 | // temporary increase might be required for very long (bitmap write, large image file opens) |
admcrae | 0:e314f3b805ed | 224 | // or indeterminate (eg file_exec, file_run, file_callFunction) commands// Error callback. Set to NULL if no callback is required. i.e. all errors will be handled in your code |
admcrae | 0:e314f3b805ed | 225 | |
admcrae | 0:e314f3b805ed | 226 | }; |
admcrae | 0:e314f3b805ed | 227 | #endif |