Driver for 4D Systems LCD screen with Picaso processor. Ported from 4D Systems Picaso Serial Linux Library
Dependents: Lab4_Demo_Game 4180_Final_Project
Fork of uLCD_4D_Picaso by
uLCD_4D_Picaso.h
- Committer:
- shorwich
- Date:
- 2016-10-27
- Revision:
- 9:72f00cef468b
- Parent:
- 8:25147173a168
File content as of revision 9:72f00cef468b:
/** @headerfile uLCD_4D_Picaso.h * * 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 * * Documentation in this file is adapted from the 4D systems Picaso Serial Command Manual, Rev 1.18, Copyright (c) 2014 4D Systems. * * All software in this library is provided without warranty; use at your own risk. */ #ifndef uLCD_4D_Picaso_H #define uLCD_4D_Picaso_H /** @define LCD_USING_MODSERIAL * * This library can work with either the standard mbed Serial library or with the MODSERIAL * library by Andy Kirkham. MODSERIAL allows RX buffering, which could prevent dropped characters * at high baud rates. The version of MODSERIAL by Erik Olieman, which is supposed to support more * devices, does not appear to work with this library at present, for unknown reasons. */ #define LCD_USING_MODSERIAL 1 #include "mbed.h" #include "Picaso_enums.h" #if LCD_USING_MODSERIAL #include "MODSERIAL.h" #endif //Constant 4D Serial Commands // function call index definitions, generated by build of serial #define F_charheight 29 #define F_charwidth 30 #define F_bus_In -45 #define F_bus_Out -46 #define F_bus_Read -49 #define F_bus_Set -47 #define F_bus_Write -48 #define F_file_Close -232 #define F_file_Count 1 #define F_file_Dir 2 #define F_file_Erase 3 #define F_file_Error -225 #define F_file_Exec 4 #define F_file_Exists 5 #define F_file_FindFirst 6 #define F_file_FindNext -229 #define F_file_GetC -242 #define F_file_GetS 7 #define F_file_GetW -244 #define F_file_Image -239 #define F_file_Index -235 #define F_file_LoadFunction 8 #define F_file_LoadImageControl 9 #define F_file_Mount -253 #define F_file_Open 10 #define F_file_PlayWAV 11 #define F_file_PutC 31 #define F_file_PutS 32 #define F_file_PutW -243 #define F_file_Read 12 #define F_file_Rewind -248 #define F_file_Run 13 #define F_file_ScreenCapture -240 #define F_file_Seek -234 #define F_file_Size 14 #define F_file_Tell 15 #define F_file_Unmount -254 #define F_file_Write 16 #define F_gfx_BevelShadow -104 #define F_gfx_BevelWidth -103 #define F_gfx_BGcolour -92 #define F_gfx_Button 17 #define F_gfx_ChangeColour -76 #define F_gfx_Circle -61 #define F_gfx_CircleFilled -62 #define F_gfx_Clipping -94 #define F_gfx_ClipWindow -75 #define F_gfx_Cls -51 #define F_gfx_Contrast -100 #define F_gfx_Ellipse -78 #define F_gfx_EllipseFilled -79 #define F_gfx_FrameDelay -97 #define F_gfx_Get -90 #define F_gfx_GetPixel -64 #define F_gfx_Line -56 #define F_gfx_LinePattern -101 #define F_gfx_LineTo -54 #define F_gfx_MoveTo -52 #define F_gfx_Orbit 18 #define F_gfx_OutlineColour -99 #define F_gfx_Panel -81 #define F_gfx_Polygon 19 #define F_gfx_PolygonFilled 20 #define F_gfx_Polyline 21 #define F_gfx_PutPixel -63 #define F_gfx_Rectangle -59 #define F_gfx_RectangleFilled -60 #define F_gfx_ScreenCopyPaste -83 #define F_gfx_ScreenMode -98 #define F_gfx_Set -50 #define F_gfx_SetClipRegion -77 #define F_gfx_Slider -82 #define F_gfx_Transparency -96 #define F_gfx_TransparentColour -95 #define F_gfx_Triangle -65 #define F_gfx_TriangleFilled -87 #define F_img_ClearAttributes -187 #define F_img_Darken -181 #define F_img_Disable -180 #define F_img_Enable -179 #define F_img_GetWord -184 #define F_img_Lighten -182 #define F_img_SetAttributes -186 #define F_img_SetPosition -178 #define F_img_SetWord -183 #define F_img_Show -185 #define F_img_Touched -188 #define F_media_Flush -118 #define F_media_Image -117 #define F_media_Init -119 #define F_media_RdSector 22 #define F_media_ReadByte -113 #define F_media_ReadWord -114 #define F_media_SetAdd -109 #define F_media_SetSector -110 #define F_media_Video -107 #define F_media_VideoFrame -108 #define F_media_WriteByte -115 #define F_media_WriteWord -116 #define F_media_WrSector 23 #define F_mem_Free -220 #define F_mem_Heap -221 #define F_peekM 39 #define F_pin_HI -42 #define F_pin_LO -43 #define F_pin_Read -44 #define F_pin_Set -41 #define F_pokeM 40 #define F_putCH -2 #define F_putstr 24 #define F_snd_BufSize -258 #define F_snd_Continue -261 #define F_snd_Pause -260 #define F_snd_Pitch -257 #define F_snd_Playing -262 #define F_snd_Stop -259 #define F_snd_Volume -256 #define F_sys_Sleep -197 #define F_touch_DetectRegion -199 #define F_touch_Get -201 #define F_touch_Set -200 #define F_txt_Attributes -38 #define F_txt_BGcolour -26 #define F_txt_Bold -34 #define F_txt_FGcolour -25 #define F_txt_FontID -27 #define F_txt_Height -29 #define F_txt_Inverse -36 #define F_txt_Italic -35 #define F_txt_MoveCursor -23 #define F_txt_Opacity -33 #define F_txt_Set -24 #define F_txt_Underline -37 #define F_txt_Width -28 #define F_txt_Wrap -39 #define F_txt_Xgap -30 #define F_txt_Ygap -31 #define F_file_CallFunction 25 #define F_sys_GetModel 26 #define F_sys_GetVersion 27 #define F_sys_GetPmmC 28 #define F_writeString 33 #define F_readString 34 #define F_blitComtoDisplay 35 #define F_file_FindFirstRet 36 #define F_file_FindNextRet 37 #define F_setbaudWait 38 /** * @class uLCD_4D_Picaso * * This class contains all of the Picaso Serial C library functions, ported to mbed. */ class uLCD_4D_Picaso : public Stream { public: /** * Class constructor * * @param tx Serial transmit pin. * @param rx Serial receive pin. * @param reset Reset GPIO pin. */ uLCD_4D_Picaso(PinName tx, PinName rx, PinName reset); /** * Resets the LCD screen (takes 3 seconds). */ void LCD_reset(); // LCD text commands: /** * Prints single character to screen. * @param Character to be printed. */ void putCH(uint16_t Character); /** * Prints null-terminated string to screen. * @param InString String to be printed. Maximum length is 511 characters plus null. * @return Number of characters printed. */ uint16_t putStr(char *InString); /** * Moves text cursor to specified line and column (based on font size), with (0, 0) being the top-left corner. */ void txt_MoveCursor(uint16_t Line, uint16_t Column); /** * Sets text bold, italic, inverse, and underlined attributes. * @param Attribs Word containing attribute flags. OR attribute constants together to set multiple. * @return Previous text attribute word. */ Picaso::TextAttribute txt_Attributes(Picaso::TextAttribute Attribs); /** * Sets text inverse attribute. * @return Previous setting. */ uint16_t txt_Inverse(uint16_t Inverse); /** * Sets text italic attribute. * @return Previous setting. */ uint16_t txt_Italic(uint16_t Italic); /** * Sets text bold attribute. * @return Previous setting. */ uint16_t txt_Bold(uint16_t Bold); /** * Sets text underline attribute. * @return Previous setting. */ uint16_t txt_Underline(uint16_t Underline); /** * Sets text background color. * @return Previous color setting. */ Picaso::Color txt_BGcolour(Picaso::Color Color); /* * Sets text foreground color. * @return Previous color setting. */ Picaso::Color txt_FGcolour(Picaso::Color Color); /** * Sets text background opacity (i.e. whether background pixels are drawn). * @return Previous setting. */ Picaso::TextOpacity txt_Opacity(Picaso::TextOpacity TransparentOpaque); /** * Sets text font. Note that one can also pass a handle to a file with a font: see Picaso Serial Command Manual for more information. * @return Previous setting. */ Picaso::Font txt_FontID(Picaso::Font FontNumber); /** * Sets text font height. * @param Multiplier Font height as multiple of default height. * @return Previous setting. */ uint16_t txt_Height(uint16_t Multiplier); /** * Sets text font width. * @param Multiplier Font width as multiple of default. * @return Previous setting. */ uint16_t txt_Width(uint16_t Multiplier); /** * Returns the height, in pixels, of a given character under the current font settings. If height is greater than 255, the returned value will be modulo 8. */ uint16_t charheight(char TestChar); /** * Returns the width, in pixels, of a given character under the current font settings. If width is greater than 255, the returned value will be modulo 8. */ uint16_t charwidth(char TestChar); /** * Sets the pixel position (from left side) at which text wraps around on right side. * @return Previous setting. */ uint16_t txt_Wrap(uint16_t Position); /** * Sets gap, in pixels, between characters in the x-direction. * @return Previous setting. */ uint16_t txt_Xgap(uint16_t Pixels); /** * Sets gap, in pixels, between characters in the y-direction. * @return Previous setting. */ uint16_t txt_Ygap(uint16_t Pixels); /** * Sets one of several text attributes. Most attributes can be set by other functions. * @param Func Attribute to set. * @param Value Value to set parameter. See TextSetFunc definition for more information. */ void txt_Set(Picaso::TextSetFunc Func, uint16_t Value); // LCD graphics commands: /** * Clears screen and sets several attributes (such as transparency, outline color, opacity, pen style, line patterning, * text wrap position, text size, and origin) to their default values. */ void gfx_Cls(void); /** * Changes all pixels on the screen of OldColor to NewColor. */ void gfx_ChangeColour(uint16_t OldColor, uint16_t NewColor); /** * Draws pixel of color Color at (X, Y). */ void gfx_PutPixel(uint16_t X, uint16_t Y, Picaso::Color Color); /** * Returns current color of pixel at (X, Y). */ Picaso::Color gfx_GetPixel(uint16_t X, uint16_t Y); /** * Draws (unfilled) circle on screen. * @param X,Y Coordinates (in pixels) of circle's center. * @param Radius Radius of circle. * @param Color Color of circle. */ void gfx_Circle(uint16_t X, uint16_t Y, uint16_t Radius, Picaso::Color Color); /** * Draws filled circle on screen. * @param X,Y Coordinates (in pixels) of circle's center. * @param Radius Radius of circle. * @param Color Color of circle. */ void gfx_CircleFilled(uint16_t X, uint16_t Y, uint16_t Radius, Picaso::Color Color); /** * Draws line from (X1, Y1) to (X2, Y2) with color Color */ void gfx_Line(uint16_t X1, uint16_t Y1, uint16_t X2, uint16_t Y2, Picaso::Color Color); /** * Draws unfilled rectangle on screen. * @param X1,Y1 Coordinates of top-left corner of rectangle. * @param X2,Y2 Coordinates of bottom-right corner of rectangle. * @param Color of rectangle. */ void gfx_Rectangle(uint16_t X1, uint16_t Y1, uint16_t X2, uint16_t Y2, Picaso::Color Color); /** * Draws filled rectangle on screen. * @param X1,Y1 Coordinates of top-left corner of rectangle. * @param X2,Y2 Coordinates of bottom-right corner of rectangle. * @param Color of rectangle. */ void gfx_RectangleFilled(uint16_t X1, uint16_t Y1, uint16_t X2, uint16_t Y2, Picaso::Color Color); /** * Plots line between a sequence of points. * @param n Number of vertices. * @param Xvalues,Yvalues Arrays of size n containing the coordinates of each vertex. * @param Color Color of line. */ void gfx_Polyline(uint16_t n, uint16_t* Xvalues, uint16_t* Yvalues, Picaso::Color Color); /** * Draws unfilled polygon on screen. * @param n Number of vertices. * @param Xvalues,Yvalues Arrays of size n contianing the coordinates of each vertex. * @param Color Color of polygon. */ void gfx_Polygon(uint16_t n, uint16_t* Xvalues, uint16_t* Yvalues, Picaso::Color Color); /** * Draws filled polygon on screen. * @param n Number of vertices. * @param Xvalues,Yvalues Arrays of size n contianing the coordinates of each vertex. * @param Color Color of polygon. */ void gfx_PolygonFilled(uint16_t n, uint16_t* Xvalues, uint16_t* Yvalues, Picaso::Color Color); /** * Draws unfilled triangle on screen. * @param X1,Y1 Coordinates of first vertex. * @param X2,Y2 Coordinates of second vertex. * @param X3,Y3 Coordinates of third vertex. * @param Color Color of triangle. */ void gfx_Triangle(uint16_t X1, uint16_t Y1, uint16_t X2, uint16_t Y2, uint16_t X3, uint16_t Y3, Picaso::Color Color); /** * Draws filled triangle on screen. * @param X1,Y1 Coordinates of first vertex. * @param X2,Y2 Coordinates of second vertex. * @param X3,Y3 Coordinates of third vertex. * @param Color Color of triangle. */ void gfx_TriangleFilled(uint16_t X1, uint16_t Y1, uint16_t X2, uint16_t Y2, uint16_t X3, uint16_t Y3, Picaso::Color Color); /** * Draws ellipse on screen. * @param X,Y Coordinates of center of ellipse. * @param Xrad Ellipse's x-radius. * @param Yrad Ellipse's y-radius. * @param Color Color of ellipse. */ void gfx_Ellipse(uint16_t X, uint16_t Y, uint16_t Xrad, uint16_t Yrad, Picaso::Color Color); /** * Draws filled ellipse on screen. * @param X,Y Coordinates of center of ellipse. * @param Xrad Ellipse's x-radius. * @param Yrad Ellipse's y-radius. * @param Color Color of ellipse. */ void gfx_EllipseFilled(uint16_t X, uint16_t Y, uint16_t Xrad, uint16_t Yrad, Picaso::Color Color); /** * Enables or disables clipping. * @param OnOff 0 = Off, 1 = On. */ void gfx_Clipping(uint16_t OnOff); /** * Sets clipping window for graphics. Any objects and text will only be displayed within the window. * Clipping must first be enabled with the gfx_Clipping command. * @param X1, Y1 Coordinates of top left corner of window. * @param X2, Y2 Coordinates of bottom right corner of window. */ void gfx_ClipWindow(uint16_t X1, uint16_t Y1, uint16_t X2, uint16_t Y2); /** * Forces clip window to include the last printed text or image. */ void gfx_SetClipRegion(void); /** * Draws line from the origin to (X, Y), using current object color and then moves the origin to the endpoint. This command is most useful when used with gfx_Orbit. */ void gfx_LineTo(uint16_t X, uint16_t Y); /** * Moves the origin to (X, Y). */ void gfx_MoveTo(uint16_t X, uint16_t Y); /** * Calculates the X and Y coordinates relative to the origin, given an angle and distance. * @param Angle Angle in degrees. * @param Distance Distance from origin in pixels. * @param Xdest Pointer to variable where calculated X value will be stored. * @param Ydest Pointer to variable where calculated Y value will be stored. * @return Returns 0. */ uint16_t gfx_Orbit(uint16_t Angle, uint16_t Distance, uint16_t* Xdest, uint16_t* Ydest); /** * Draws button on screen. * @param Up Whether button appears raised (BUTTON_RAISED = 1) or depressed (BUTTON_DEPRESSED = 0). * @param x,y Coordinates of top left corner of button. * @param buttonColour Button color. * @param txtColour Text color. * @param font Text font ID. * @param txtWidth Text width, as multiple of default. * @param txtHeight Text height, as multiple of default. * @param text Null-terminated string with button text. May include newline characters for multiple lines of text in button. */ void gfx_Button(Picaso::ButtonState Up, uint16_t x, uint16_t y, Picaso::Color buttonColour, Picaso::Color txtColour, Picaso::Font font, uint16_t txtWidth, uint16_t txtHeight, char* text); /** * * @param Raised Panel appearance (raised or sunken). * @param X,Y Position of top-left corner of panel. * @param Width Panel width. * @param Height Panel height. * @param Color Panel color. */ void gfx_Panel(Picaso::PanelState Raised, uint16_t X, uint16_t Y, uint16_t Width, uint16_t Height, Picaso::Color Color); /** * Draws horizontal or vertical slider bar on screen. If X2 - X1 > Y2 - Y1, slider is assumed to be horizontal. Otherwise, slider is assumed to be vertical. * @param Mode Slider appearance (sunken, raised, or hidden). * @param X1,Y1 Coordinates of top-left corner of slider. * @param X2,Y2 Coordinates of bottom-right corner of slider. * @param Color Color of slider bar. * @param Scale Sets scale of slider position: slider can have positions from 0 to Scale. * @param Position of slider thumb. If negative, the absolute value is taken. * @return Unknown--Serial command manual does not specify a return. */ uint16_t gfx_Slider(Picaso::SliderState Mode, uint16_t X1, uint16_t Y1, uint16_t X2, uint16_t Y2, Picaso::Color Color, uint16_t Scale, uint16_t Value); /** * Sets depth of bevel shadow on buttons drawn. * @param Value Shadow depth in pixels (0-4). * @return Previous setting. */ uint16_t gfx_BevelShadow(uint16_t Value); /** * Sets width of bevel on buttons drawn. * @param Value Shadow depth in pixels (0-15). * @return Previous setting. */ uint16_t gfx_BevelWidth(uint16_t Value); /** * Copies a region of the screen and pastes it to another. * @param Xs,Ys Coordinates of top-left corner of region to be copied. * @param Xd,Yd Coordinates of top-left corner of destination region. * @param Width Width of region to be copied. * @param Height Height of region to be copied. */ void gfx_ScreenCopyPaste(uint16_t Xs, uint16_t Ys, uint16_t Xd, uint16_t Yd, uint16_t Width, uint16_t Height); /** * Sets the screen background color. * @return Previous background color. */ Picaso::Color gfx_BGcolour(Picaso::Color Color); /** * Sets the outline color for rectangles and circles. * @return Previous outline color. */ Picaso::Color gfx_OutlineColour(Picaso::Color Color); /** * Sets display contrast or turns it on and off, depending on display model. * @param Contrast Constrast setting. For most displays, 0 = display off, non-zero = display on. See Serial Command Manual for exceptions. * @return Previous setting. */ uint16_t gfx_Contrast(uint16_t Contrast); /** * Sets inter-frame delay, in milliseconds, for media_Video command. * @return Previous setting. */ uint16_t gfx_FrameDelay(uint16_t Msec); /** * Sets line drawing pattern. * @param Pattern Word containing bit pattern; each set bit corresponds to a pixel turned off. * @return Previous pattern. */ uint16_t gfx_LinePattern(uint16_t Pattern); /** * Sets screen mode (portait, landscape, and reversed). * @return Previous screen mode. */ Picaso::ScreenMode gfx_ScreenMode(Picaso::ScreenMode ScreenMode); /** * Turns transparency ON or OFF. Setting is reset to OFF after image or video command. * @return Previous setting. */ uint16_t gfx_Transparency(uint16_t OnOff); /** * Sets color to be made transparent. * @return Previous setting. */ Picaso::Color gfx_TransparentColour(Picaso::Color Color); /** * Sets one of several graphics attributes. Most attributes can be set by other functions. * @param Func Attribute to set. * @param Value Value to set parameter. See GFXSetFunc definition for more information. */ void gfx_Set(Picaso::GFXSetFunc Func, uint16_t Value); /** * Returns a graphics attribute. * @return Value of attribute. See GFXGetMode definition for more information. */ uint16_t gfx_Get(Picaso::GFXGetMode Mode); // Media (SD card) commands: /** * Initializes SD card. * @return 1 if successful, 0 otherwise. */ uint16_t media_Init(void); /** * Sets media memory address to a non-sector-aligned byte address in the SD card. * @param HiWord Upper 2 bytes of address. * @param LoWord Lower 2 bytes of address. */ void media_SetAdd(uint16_t HiWord, uint16_t LoWord); /** * Sets media memory address to a sector in the SD card. * @param HiWord Upper 2 bytes of address. * @param LoWord Lower 2 bytes of address. */ void media_SetSector(uint16_t HiWord, uint16_t LoWord); /** * Reads sector of SD card at address previously set by media_SetSector. Afterwards, the sector address is incremented by one. * @param SectorIn Array to hold sector data (512 bytes). * @return 1 if successful, 0 if failed. */ uint16_t media_RdSector(char* SectorIn); /** * Writes sector of SD card at address previously set by media_SetSector. Afterwards, the sector address is incremented by one. * @param SectorOut Array with sector data to write (512 bytes). * @return 1 if successful, 0 if failed. */ uint16_t media_WrSector(char* SectorOut); /** * Reads byte from SD card at address previously set by media_SetAdd. Afterwards, the byte address is incremented by one. * @return Byte read (lower 8 bits of word returned). */ uint16_t media_ReadByte(void); /** * Writes byte to SD card at address previously set by media_SetAdd. Afterwards, the byte address is incremented by one. * @param Byte to write (in lower 8 bits of argument). * @return Nonzero if successful, 0 if failed. */ uint16_t media_WriteByte(uint16_t Byte); /** * Reads word from SD card at address previously set by media_SetAdd. Afterwards, the byte address is incremented by one. * @return Word read. */ uint16_t media_ReadWord(void); /** * Writes byte to SD card at address previously set by media_SetAdd. Afterwards, the byte address is incremented by one. * @param Word to write. * @return Nonzero if successful, 0 if failed. */ uint16_t media_WriteWord(uint16_t Word); /** * Finalizes writing to sector. This is automatically called if writing rolls over into the next sector. * @return Nonzero if successful, 0 of failed. */ uint16_t media_Flush(void); /** * Displays RAW image from SD card at at the address specified by one of the set address commands. * @param X,Y Coordinates of top left position of image on screen. */ void media_Image(uint16_t X, uint16_t Y); /** * Displays RAW video clip from SD card at at the address specified by one of the set address commands. All other processes on display are blocked until video is finished. * @param X,Y Coordinates of top left position of video on screen. */ void media_Video(uint16_t X, uint16_t Y); /** * Displays individual frame of RAW video clip from SD card at at the address specified by one of the set address commands. * @param X,Y Coordinates of top left position of frame on screen. * @param Framenumber Number of frame to be displayed. */ void media_VideoFrame(uint16_t X, uint16_t Y, uint16_t Framenumber); // File commands: /** * Returns most recent file operation error code. */ Picaso::FileError file_Error(void); /** * Returns the number of files that match the given (null-terminated) Filename string. In the string, '*' can represent any combination of allowable characters, * while '?' matches any single allowable character. Filenames must be 8.3 format. */ uint16_t file_Count(char * Filename); /** * Prints on the screen the names of files that match the given (null-terminated) Filename string. In the string, '*' can represent any combination of allowable characters, * while '?' matches any single allowable character. Filenames must be 8.3 format. * @return Number of matching files found. */ uint16_t file_Dir(char * Filename); /** * Prints on the screen the name of the first file that matches the given (null-terminated) Filename string. In the string, '*' can * represent any combination of allowable characters, while '?' matches any single allowable character. Filenames must be 8.3 format. * @return 1 if at least one matching file is found, 0 otherwise. */ uint16_t file_FindFirst(char *Filename); /** * Finds the name of the first file that matches the given (null-terminated) Filename string. In the string, '*' can * represent any combination of allowable characters, while '?' matches any single allowable character. Filenames must be 8.3 format. * @param Filename String containing filename pattern to be matched. * @param StringIn Character buffer to hold the returned filename. Returned string is not null-terminated. * @return Length of returned filename string. */ uint16_t file_FindFirstRet(char *Filename, char* StringIn); /** * Prints on the screen the name of the next file to match the pattern provided in a previous call to file_FindFirst or file_FindFirstRet. * @return 1 if at least one matching file is found, 0 otherwise. */ uint16_t file_FindNext(void); /** * Finds the name of the next file to match the pattern provided in a previous call to file_FindFirst or file_FindFirstRet. * @param StringIn Character buffer to hold the returned filename. Returned string is not null-terminated. * @return Length of returned filename string. */ uint16_t file_FindNextRet(char * StringIn); /** * Returns whether a file with a given (null-terminated) filename exists. * @return 1 if found, 0 if not. */ uint16_t file_Exists(char *Filename); /** * Opens file. * @param Filename Null-terminated string with name of file. * @param Mode 'r' for read, 'w' for write, 'a' for append. * @return File handle (if file exists). */ uint16_t file_Open(char * Filename, char Mode); /** * Closes file. * @param Handle File handle. * @return 1 if successfully closed, 0 if not. */ uint16_t file_Close(uint16_t Handle); /** * Reads bytes from file. * @param Data Buffer to contain data read. * @param Size Number of bytes to read. * @param Handle File handle. * @return Number of bytes read. */ uint16_t file_Read(char* Data, uint16_t Size, uint16_t Handle); /** * Sets internal file pointer to a specified position in a file. * @param Handle File handle. * @param HiWord Upper 16 bits of pointer. * @param LoWord Lower 16 bits of pointer. * @return 1 if successful, 0 if not. */ uint16_t file_Seek(uint16_t Handle, uint16_t HiWord, uint16_t LoWord); /** * Sets file pointer to a particular record within a file (e.g. a record size of 1000 and an index of 9 will set the pointer to position 9000). * @param Handle File handle. * @param HiSize Upper 16 bits of record size. * @param LoSize Lower 16 bits of record size. * @param Recordnum Index of desired record. * @return 1 if successful, 0 if not. */ uint16_t file_Index(uint16_t Handle, uint16_t HiSize, uint16_t LoSize, uint16_t Recordnum); /** * Returns the current position of a file pointer. * @param Handle File handle. * @param HiWord Pointer to word in which to store the upper 16 bits of the returned pointer value. * @param LoWord Pointer to word in which to store the lower 16 bits of the returned pointer value. * @return 1 if successful, 0 if not. */ uint16_t file_Tell(uint16_t Handle, uint16_t * HiWord, uint16_t * LoWord); /** * Writes bytes to file. * @param Size Number of bytes to be written. * @param Source Array containing data to be written. * @param Handle File handle. * @return Number of bytes written. */ uint16_t file_Write(uint16_t Size, char* Source, uint16_t Handle); /** * Returns the size of a file. * @param Handle File handle. * @param HiWord Pointer to variable in which to store the upper 16 bits of the returned file size. * @param LoWord Pointer to variable in which to store the lower 16 bits of the returned file size. * @return 1 if succesful, 0 if not. */ uint16_t file_Size(uint16_t Handle, uint16_t * HiWord, uint16_t * LoWord); /** * Displays image from file on screen. If the file contains more than one image, each can be accessed with the file_Seek command. * @param X,Y coordinates of top-left corner of image on display. * @param Handle File handle. * @return File error code (see file_Error). */ uint16_t file_Image(uint16_t X, uint16_t Y, uint16_t Handle); /** * Captures an area of the screen and writes it to a file. * @param X,Y Coordinates of top-left corner of area to be captured. * @param Width, Height Width and height of area to be captured. * @param Handle Handle of file to be written. Image is written at the current pointer location in the file, so multiple images can be captured to the same file. * @return 0 if successful. */ uint16_t file_ScreenCapture(uint16_t X, uint16_t Y, uint16_t Width, uint16_t Height, uint16_t Handle); /** * Writes character to file. * @param Character Character to be written. * @param Handle File handle. * @return Number of bytes successfully written. */ uint16_t file_PutC(char Character, uint16_t Handle); /** * Reads character from file. */ char file_GetC(uint16_t Handle); /** * Writes word (2 bytes) to file. * @return Number of bytes successfully written. */ uint16_t file_PutW(uint16_t Word, uint16_t Handle); /** * Reads word from file. */ uint16_t file_GetW(uint16_t Handle); /** * Writes (null-terminated) string to file. * @return Number of characters written (excluding null character). */ uint16_t file_PutS(char * StringOut, uint16_t Handle); /** * Reads line of text from file. Characters are read until a newline or eof is reached, or the specified maximum size is reached. Returned string is not null-terminated. * @param StringIn Character array in which to store read string. * @param Size maximum number of characters to be read. * @param Handle File handle. * @return Number of characters read. */ uint16_t file_GetS(char * StringIn, uint16_t Size, uint16_t Handle); /** * Deletes file from disk. * @param Filename Name of file to be erased. * @return 1 if successful, 0 if not. */ uint16_t file_Erase(char * Filename); /** * Resets file pointer to beginning of file. * @return 1 if successful, 0 if not. */ uint16_t file_Rewind(uint16_t Handle); /** * Loads 4DGL function (.4FN) or program (.4XE) from file to memory. * @return Pointer/handle to loaded function. */ uint16_t file_LoadFunction(char *Filename); /** * Calls a previously-loaded function or program. * @param Handle Function handle previously returned by file_LoadFunction. * @param ArgCount Number of arguments passed to function (0-6). * @param Args array containing arguments to be passed to function. * @return Value returned by the "main" function. */ uint16_t file_CallFunction(uint16_t Handle, uint16_t ArgCount, uint16_t* Args); /** * Runs a 4DGL program from a file. This is similar to file_Execute, but afterwards, all memory allocations are released (but not stack and global memory. * Prior to execution, strings may be loaded with the writeString command. * @param Filename Null-terminated string containing name of file containing program. * @param ArgCount Number of arguments to be passed to program. * @param Args Array of arguments to be passed to program. * @return Value returned by program. */ uint16_t file_Run(char *Filename, uint16_t ArgCount, uint16_t* Args); /** * Runs a 4DGL program from a file. This is similar to file_Run, except all memory allocations are retained. * Prior to execution, strings may be loaded with the writeString command. * @param Filename Null-terminated string containing name of file containing program. * @param ArgCount Number of arguments to be passed to program. * @param Args Array of arguments to be passed to program. * @return Value returned by program. */ uint16_t file_Exec(char *Filename, uint16_t ArgCount, uint16_t* Args); /** * Loads image control file and associated image file. See Serial Command Manual for more information. * @param Datname String containing control list filename (.dat). * @param GCIName String containing image filename (.gci). * @param Mode Mode of operation (0-2). */ uint16_t file_LoadImageControl(char *Datname, char *GCIName, uint16_t Mode); /** * Mounts the FAT file system. This must be called before any other file commands. * @return Non-zero if successful, 0 otherwise. */ uint16_t file_Mount(void); /** * Unmounts the FAT file system. */ void file_Unmount(void); /** * Plays .wav audio file. * @return If successful, number of blocks to play. If not, an error code (see command manual). */ uint16_t file_PlayWAV(char * Filename); /** * Loads string to memory to be used by a 4DGL program/function. * @param Handle Pointer to location where string is to be loaded. Initial call should used 0; each subsequent call should use the pointer returned by the previous call. * @param StringOut Null-terminated string to be loaded. * @return Pointer to location where string has been loaded. */ uint16_t writeString(uint16_t Handle, char * StringOut); /** * Reads string which has been written by a 4DGL program/function. The location is initially written with the writeString command, the pointer is passed to the program * (which can modify it), and the result is read with this function. * @param Handle Pointer to string location. This is the same value passed to writeString when the space was initially written. * @param StringIn Character array in which to store the returned string. * @return Unknown--command manual does not specify a return. */ uint16_t readString(uint16_t Handle, char * StringIn); // Sound playback commands: /** * Sets sound playback volume. * @param Volume Volume setting (8-127). Any level outside the allowed range will be changed to the closest value within the range. */ void snd_Volume(uint16_t Volume); /** * Sets playback sample rate. * @param Pitch Sample rate (4000-65535). A value of 0 will restore the original sample rate. */ uint16_t snd_Pitch(uint16_t Pitch); /** * Sets memory chunk size for wavefile buffer. * @param Bufsize Buffer size: 0 -> 1024 bytes, 1 -> 2048 bytes, and 2 -> 4096 bytes. */ void snd_BufSize(uint16_t Bufsize); /** * Stops sound that is playing, releasing buffers and closing open wav files. */ void snd_Stop(void); /** * Pauses sound playback. */ void snd_Pause(void); /** * Continues any paused sound. */ void snd_Continue(void); /** * Returns 0 if file has finished playing; otherwise, returns number of 512 byte blocks remaining. */ uint16_t snd_Playing(void); /** * Specifies region on screen where touches will be detected. * @param X1,Y1 Coordinates of top-left corner of region. * @param X2,Y2 Coordinates of bottom-right corner of region. */ void touch_DetectRegion(uint16_t X1, uint16_t Y1, uint16_t X2, uint16_t Y2); /** * Sets touchscreen mode. * @param Mode 0 -> enable touch screen; 1 -> disable touch screen; 2 -> reset touch detect region to full screen. The Picaso::Touch enum also provides the constants. */ void touch_Set(uint16_t Mode); /** * Get status of touch screen. * @param Mode 0 -> get state of touch screen; 1 -> get x coordinate of touch; 2 -> get y coordinate of touch. The Picaso::Touch enum also provides the constants. * @return In modes 1 and 2, the requested coordinate. In mode 0: 0 -> invalid or no touch; 1 -> press; 2 -> release; 3 -> moving. The Picaso::Touch enum also provides the constants. */ uint16_t touch_Get(uint16_t Mode); /** * Sets position of image to be displayed. An image control must have already been created with the file_LoadImageControl command. * @param Handle Pointer to image list. * @param Index Index of image in list. * @param Xpos,Ypos Coordinates of top-left corner of image. * @return 1 if successful, 0 if not. */ uint16_t img_SetPosition(uint16_t Handle, uint16_t Index, uint16_t Xpos, uint16_t Ypos); /** * Enables image in list so that it can be displayed with the img_Show command. An image control must have already been created with the file_LoadImageControl command. * @param Handle Pointer to image list. * @param Index Index of image in list. -1 or Picaso::ALL selects all images in list. * @return 1 if successful, 0 if not. */ uint16_t img_Enable(uint16_t Handle, uint16_t Index); /** * Disables image from being displayed. An image control must have already been created with the file_LoadImageControl command. * @param Handle Pointer to image list. * @param Index Index of image in list. -1 or Picaso::ALL selects all images in list. * @return 1 if successful, 0 if not. */ uint16_t img_Disable(uint16_t Handle, uint16_t Index); /** * Darkens image (call before img_Show). This effect will be reset when img_Show is called a second time. * An image control must have already been created with the file_LoadImageControl command. * @param Handle Pointer to image list. * @param Index Index of image in list. -1 or Picaso::ALL selects all images in list. * @return 1 if successful, 0 if not. */ uint16_t img_Darken(uint16_t Handle, uint16_t Index); /** * Lightens image (call before img_Show). This effect will be reset when img_Show is called a second time. * An image control must have already been created with the file_LoadImageControl command. * @param Handle Pointer to image list. * @param Index Index of image in list. -1 or Picaso::ALL selects all images in list. * @return 1 if successful, 0 if not. */ uint16_t img_Lighten(uint16_t Handle, uint16_t Index); /** * Lightens image (call before img_Show). This effect will be reset when img_Show is called a second time. * An image control must have already been created with the file_LoadImageControl command. * @param Handle Pointer to image list. * @param Index Index of image in list. * @param Offset Offset of word to write. Note that some parameters are read-only. * @param Word Word to be written. See Picaso::ImageControlOffset definition or serial command manual for more information. * @return 1 if successful, 0 if not. */ uint16_t img_SetWord(uint16_t Handle, uint16_t Index, Picaso::ImageControlOffset Offset, uint16_t Word); /** * Reads an image parameter. An image control must have already been created with the file_LoadImageControl command. * @param Handle Pointer to image list. * @param Index Index of image in list. * @param Offset Offset of word to be read. * @return The word that is read. */ uint16_t img_GetWord(uint16_t Handle, uint16_t Index, Picaso::ImageControlOffset Offset); /** * Displays image from list. An image control must have already been created with the file_LoadImageControl command. * @param Handle Pointer to image list. * @param Index Index of image in list. * @return Nonzero if successful, 0 if not. */ uint16_t img_Show(uint16_t Handle, uint16_t Index); /** * Sets one or more image attribute flags. An image control must have already been created with the file_LoadImageControl command. * @param Handle Pointer to image list. * @param Index Index of image in list. * @param Value Mask of bits to be set. OR together multiple attribute flags to set multiple. * @return 1 if successful, 0 if not. */ uint16_t img_SetAttributes(uint16_t Handle, uint16_t Index, Picaso::ImageAttribute Value); /** * Clears one or more image attribute flags. An image control must have already been created with the file_LoadImageControl command. * @param Handle Pointer to image list. * @param Index Index of image in list. * @param Value Mask of bits to be cleared. OR together multiple attribute flags to clear multiple. * @return 1 if successful, 0 if not. */ uint16_t img_ClearAttributes(uint16_t Handle, uint16_t Index, Picaso::ImageAttribute Value); /** * Returns whether an image has been touched. An image control must have already been created with the file_LoadImageControl command. * @param Handle Pointer to image list. * @param Index Index of image in list. * @return Image index if touched, -1 if not. If -1 is passed as index, returns index of an image if it is touched. */ uint16_t img_Touched(uint16_t Handle, uint16_t Index); /** * Performs block image transfer onto screen. * @param X,Y Coordinates of top-left corner of location where image is to be displayed. * @param Width,Height Width and height of image to be displayed. * @param Pixels Array of bytes containing pixel data. Each pixel is 16-bits of color information (see Picaso::Color). */ void blitComtoDisplay(uint16_t X, uint16_t Y, uint16_t Width, uint16_t Height, char* Pixels); // System commands: /** * Releases memory block. * @param Handle Pointer to memory block. * @return Nonzero if successful, 0 if not. */ uint16_t mem_Free(uint16_t Handle); /** * Returns byte size of lergest available memory chunk on the heap. */ uint16_t mem_Heap(void); /** * Returns contents of memory address. Addresses can be calculated with pointers and offsets, and Picaso::MemAddresses and Picaso::MemOffsets also have some useful values. */ uint16_t peekM(uint16_t Address) ; /** * Writes word to memory address. Addresses can be calculated with pointers and offsets, and Picaso::MemAddresses and Picaso::MemOffsets also have some useful values. */ void pokeM(uint16_t Address, uint16_t WordValue) ; /** * Returns display model name as unterminated string. * @param ModelStr Array of characters in which to store returned string. * @return Number of characters in returned string. */ uint16_t sys_GetModel(char *ModelStr); /** * Returns version of the SPE (Serial Programming Environment) installed on the display. */ uint16_t sys_GetVersion(void); /** * Returns version of the PmmC (firmware) installed on the display. */ uint16_t sys_GetPmmC(void); /** * Puts display and processor in low-power state for specified period of time. * @param Units If 1-65535, sleeps for that many units of time (each unit is approximately 1 second). If 0, sleeps forever (needs to be reset). */ uint16_t sys_Sleep(uint16_t Units); // I/O commands: /** * Returns value of bus pins (in lower 8 bits of returned value). */ uint16_t bus_In(void); /** * Sets value of bus pins. Bus pins must first be set to output. * @param Bits Value to write to pins in lower 8 bits. Upper 8 bits are ignored. */ void bus_Out(uint16_t Bits); /** * Reads bus pins. The BUS_RD pin is set low, pins are set after a 50ns delay, and finally the BUS_RD pin is set high again. */ uint16_t bus_Read(void); /** * Sets directions of bus pins. * Lower 8 bits contain pin directions. 1 -> input, 0 -> output. Upper 8 bits are ignored. */ void bus_Set(uint16_t IOMap); /** * Writes to bus. Bus pins must first be set to output. Lower 8 bits of argument are written to pins, and then the BUS_WR pin is brought low for approximately 50ns. */ void bus_Write(uint16_t Bits); /** * Sets a pin high. If the pin is not already an output, it is made an output. * @return 1 if the pin number was legal. */ uint16_t pin_HI(Picaso::Pin Pin); /** * Sets a pin low. If the pin is not already an output, it is made an output. * @return 1 if the pin number was legal. */ uint16_t pin_LO(Picaso::Pin Pin); /** * Reads a pin. */ uint16_t pin_Read(Picaso::Pin Pin); /** * Sets a pin as an input or an output. * @param Mode 1 or Picaso::INPUT for input, 0 or Picaso::OUTPUT for output. * @param Pin Pin to be set. * @return 1 if pin number is legal. */ uint16_t pin_Set(uint16_t Mode, Picaso::Pin Pin); // Serial communication command: /** * Set baud rate of serial interface with display. */ void setbaudWait(Picaso::BaudRate Newrate); protected: /** * used by printf - supply a new _putc virtual function for the new device * @param c ascii char. * @return 0 */ virtual int _putc(int c); /** * used by printf - supply a new _getc virtual function for the new device * @return -1 */ virtual int _getc(); private: #if LCD_USING_MODSERIAL MODSERIAL serial; #else Serial serial; #endif DigitalOut rst; Timer timer; void WriteBytes(char* psOutput, int count); void WriteChars(char* psOutput); void WriteWords(uint16_t* source, int count); int ReadSerPort(char *psData, int iMax); void getbytes(char *data, int size); void GetAck(); uint16_t GetWord(); void getString(char *outStr, int strLen); uint16_t GetAckResp(); uint16_t WaitForAck(); uint16_t GetAckRes2Words(uint16_t * word1, uint16_t * word2); void GetAck2Words(uint16_t * word1, uint16_t * word2); uint16_t GetAckResSector(char* Sector); uint16_t GetAckResStr(char * OutStr); uint16_t GetAckResData(char* OutData, uint16_t size); void SetThisBaudrate(Picaso::BaudRate NewRate); void LCD_wait_ms(int ms); void rxFlush(); int Error4D ; // Error indicator, used and set by Intrinsic routines 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 }; #endif