Driver for 4D Systems LCD screen with Picaso processor. Ported from 4D Systems Picaso Serial Linux Library

Dependencies:   MODSERIAL

Dependents:   uLCD_4D_24PTU Drawing Program RoommateTracker_ScreenAndPhone ece4180_roommate_tracker_final

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?

UserRevisionLine numberNew 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