FT800 Series Programmer Guide Document Reference No.: FT_000793 Version 2.0 Issue Date: 1 July 2014 This document is a programmer guide for the FT800 series chip. This guide details the chip features and procedures for use. For FT801 specific features and procedures, please see the chapter FT801. Product Page Document Feedback 1 Copyright © 2014 Future Technology Devices International Limited FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 Table of Content 1 Introduction ........................................... 11 1.1 Overview ..................................................................................... 11 1.2 Scope .......................................................................................... 11 1.3 API reference definitions ................................................................ 11 2 Programming Model ................................. 13 2.1 General Software architecture ........................................................ 13 2.2 Display configuration and initialization ............................................. 14 2.2.1 Horizontal timing ..................................................................... 15 2.2.2 Vertical timing ........................................................................ 16 2.2.3 Signals updating timing control ................................................. 16 2.2.4 Timing example: 480x272 at 60Hz ............................................ 17 2.2.5 Initialization Sequence ............................................................. 18 2.3 Sound Synthesizer ........................................................................ 19 2.4 Audio playback ............................................................................. 19 2.5 Graphics routines .......................................................................... 21 2.5.1 Getting started........................................................................ 21 2.5.2 Coordinate Plane ..................................................................... 22 2.5.3 Drawing pattern ...................................................................... 23 2.5.4 Writing display lists ................................................................. 27 2.5.5 Bitmap transformation matrix ................................................... 28 2.5.6 Color and transparency ............................................................ 28 2.5.7 VERTEX2II and VERTEX2F ........................................................ 29 2.5.8 Screenshot ............................................................................. 31 2.5.9 Performance ........................................................................... 31 3 Register Description ................................. 33 3.1 Graphics Engine Registers .............................................................. 33 Copyright © 2014 Future Technology Devices International Limited 2 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 3.2 Touch Engine Registers (FT800 only) ............................................... 47 3.3 Audio Engine Registers .................................................................. 62 3.4 Co-processor Engine Registers........................................................ 68 3.5 Miscellaneous Registers ................................................................. 70 4 Display list commands.............................. 80 4.1 Graphics State .............................................................................. 80 4.2 Command encoding....................................................................... 81 4.3 Command groups.......................................................................... 82 4.3.1 Setting Graphics state .............................................................. 82 4.3.2 Drawing actions ...................................................................... 83 4.3.3 Execution control..................................................................... 83 4.4 ALPHA_FUNC ................................................................................ 84 4.5 BEGIN ......................................................................................... 85 4.6 BITMAP_HANDLE .......................................................................... 87 4.7 BITMAP_LAYOUT ........................................................................... 88 4.8 BITMAP_SIZE ............................................................................... 93 4.9 BITMAP_SOURCE .......................................................................... 96 4.10 BITMAP_TRANSFORM_A .............................................................. 98 4.11 BITMAP_TRANSFORM_B ............................................................ 100 4.12 BITMAP_TRANSFORM_C ............................................................ 101 4.13 BITMAP_TRANSFORM_D............................................................ 102 4.14 BITMAP_TRANSFORM_E ............................................................ 103 4.15 BITMAP_TRANSFORM_F ............................................................ 105 4.16 BLEND_FUNC........................................................................... 106 4.17 CALL....................................................................................... 108 4.18 CELL ....................................................................................... 109 4.19 CLEAR .................................................................................... 110 4.20 CLEAR_COLOR_A ..................................................................... 112 4.21 CLEAR_COLOR_RGB ................................................................. 113 Copyright © 2014 Future Technology Devices International Limited 3 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.22 CLEAR_STENCIL....................................................................... 115 4.23 CLEAR_TAG ............................................................................. 116 4.24 COLOR_A ................................................................................ 117 4.25 COLOR_MASK .......................................................................... 118 4.26 COLOR_RGB ............................................................................ 120 4.27 DISPLAY ................................................................................. 121 4.28 END ....................................................................................... 122 4.29 JUMP ...................................................................................... 123 4.30 LINE_WIDTH ........................................................................... 124 4.31 MACRO ................................................................................... 125 4.32 POINT_SIZE ............................................................................ 126 4.33 RESTORE_CONTEXT ................................................................. 127 4.34 RETURN .................................................................................. 128 4.35 SAVE CONTEXT ........................................................................ 129 4.36 SCISSOR_SIZE ........................................................................ 130 4.37 SCISSOR_XY ........................................................................... 131 4.38 STENCIL_FUNC ........................................................................ 132 4.39 STENCIL_MASK........................................................................ 133 4.40 STENCIL_OP ............................................................................ 134 4.41 TAG ........................................................................................ 136 4.42 TAG_MASK .............................................................................. 137 4.43 VERTEX2F ............................................................................... 138 4.44 VERTEX2II .............................................................................. 139 5 Co-Processor Engine commands ...............140 5.1 Co-processor handling of Display list commands ............................. 141 5.2 Synchronization .......................................................................... 142 5.3 ROM and RAM Fonts .................................................................... 142 5.4 Cautions .................................................................................... 144 5.5 Fault Scenarios ........................................................................... 145 Copyright © 2014 Future Technology Devices International Limited 4 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5.6 widgets physical dimension .......................................................... 145 5.7 widgets color settings .................................................................. 145 5.8 Co-processor engine graphics state ............................................... 146 5.9 Definition of parameter OPTION .................................................... 147 5.10 Co-processor engine resources .................................................. 148 5.11 Command groups ..................................................................... 148 5.12 CMD_DLSTART - start a new display list ...................................... 151 5.13 CMD_SWAP - swap the current display list .................................. 152 5.14 CMD_COLDSTART - set co-processor engine state to default values 152 5.15 CMD_INTERRUPT - trigger interrupt INT_CMDFLAG ...................... 153 5.16 CMD_APPEND - append memory to display list ............................ 154 5.17 CMD_REGREAD - read a register value ....................................... 155 5.18 CMD_MEMWRITE - write bytes into memory ................................ 156 5.19 CMD_INFLATE - decompress data into memory ............................ 157 5.20 CMD_LOADIMAGE - load a JPEG image ....................................... 158 5.21 CMD_MEMCRC - compute a CRC-32 for memory .......................... 160 5.22 CMD_MEMZERO - write zero to a block of memory ....................... 161 5.23 CMD_MEMSET - fill memory with a byte value ............................. 162 5.24 CMD_MEMCPY - copy a block of memory ..................................... 163 5.25 CMD_BUTTON - draw a button ................................................... 164 5.26 CMD_CLOCK - draw an analog clock ........................................... 167 5.27 CMD_FGCOLOR - set the foreground color ................................... 172 5.28 CMD_BGCOLOR - set the background color ................................. 173 5.29 CMD_GRADCOLOR - set the 3D button highlight color ................... 174 5.30 CMD_GAUGE - draw a gauge ..................................................... 176 5.31 CMD_GRADIENT - draw a smooth color gradient .......................... 183 5.32 CMD_KEYS - draw a row of keys ................................................ 186 5.33 CMD_PROGRESS - draw a progress bar....................................... 191 5.34 CMD_SCROLLBAR – draw a scroll bar ......................................... 194 Copyright © 2014 Future Technology Devices International Limited 5 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5.35 CMD_SLIDER – draw a slider ..................................................... 197 5.36 CMD_DIAL – draw a rotary dial control ....................................... 200 5.37 CMD_TOGGLE – draw a toggle switch ......................................... 203 5.38 CMD_TEXT - draw text .............................................................. 206 5.39 CMD_NUMBER - draw a decimal number ..................................... 210 5.40 CMD_SETMATRIX - write the current matrix to the display list ....... 213 5.41 CMD_GETMATRIX - retrieves the current matrix coefficients .......... 213 5.42 CMD_GETPTR - get the end memory address of inflated data ........ 215 5.43 CMD_GETPROPS - get the image properties decompressed by CMD_LOADIMAGE ............................................................................... 216 5.44 CMD_SCALE - apply a scale to the current matrix......................... 216 5.45 CMD_ROTATE - apply a rotation to the current matrix .................. 219 5.46 CMD_TRANSLATE - apply a translation to the current matrix ......... 221 5.47 CMD_CALIBRATE - execute the touch screen calibration routine ..... 223 5.48 CMD_SPINNER - start an animated spinner ................................. 224 5.49 CMD_SCREENSAVER - start an animated screensaver ................... 228 5.50 CMD_SKETCH - start a continuous sketch update ......................... 229 5.51 CMD_STOP - stop any of spinner, screensaver or sketch ............... 231 5.52 CMD_SETFONT - set up a custom font ........................................ 232 5.53 CMD_TRACK - track touches for a graphics object ........................ 233 5.54 CMD_SNAPSHOT - take a snapshot of the current screen .............. 237 5.55 CMD_LOGO - play FTDI logo animation ....................................... 237 6 FT801 operation .....................................239 6.1 FT801 introduction ...................................................................... 239 6.2 FT801 touch engine ..................................................................... 239 6.3 FT801 touch registers .................................................................. 239 6.4 Register summary ....................................................................... 244 6.5 Calibration ................................................................................. 245 6.6 CMD_CSKETCH – Capacitive touch specific sketch ........................... 245 Copyright © 2014 Future Technology Devices International Limited 6 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 Appendix A – Document References .............248 Appendix B – Acronyms and Abbreviations ....249 Appendix C – Memory Map ..........................250 Appendix D – Revision History .....................251 Revision History ........................................252 List of Code Snippet CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE SNIPPET SNIPPET SNIPPET SNIPPET SNIPPET SNIPPET SNIPPET SNIPPET SNIPPET SNIPPET SNIPPET SNIPPET SNIPPET SNIPPET SNIPPET SNIPPET SNIPPET SNIPPET SNIPPET 1 INITIALIZATION SEQUENCE ......................................................... 18 2 SOUND SYNTHESIZER PLAY C8 ON THE XYLOPHONE ...................... 19 3 SOUND SYNTHESIZER CHECK THE STATUS OF SOUND PLAYING ...... 19 4 SOUND SYNTHESIZER STOP PLAYING SOUND ................................ 19 5 AUDIO PLAYBACK ....................................................................... 20 6 CHECK THE STATUS OF AUDIO PLAYBACK ..................................... 20 7 STOP THE AUDIO PLAYBACK ........................................................ 20 8 GETTING STARTED ..................................................................... 21 9 DL FUNCTION DEFINITION .......................................................... 27 10 COLOR AND TRANSPARENCY ...................................................... 28 11 NEGATIVE SCREEN COORDINATES EXAMPLE ................................ 30 12 SCREENSHOT WITH FULL PIXEL VALUE ....................................... 31 13 CMD_GETPTR COMMAND EXAMPLE ........................................... 215 14 CMD_CALIBRATE EXAMPLE ...................................................... 223 15 CMD_SCREENSAVER EXAMPLE ................................................. 228 16 CMD_SKETCH EXAMPLE ........................................................... 230 17 CMD_SETFONT EXAMPLE ......................................................... 232 18 CMD_SNAPSHOT 160X120–SCREEN ......................................... 237 19 CMD_LOGO COMMAND EXAMPLE .............................................. 238 List of Figures FIGURE FIGURE FIGURE FIGURE FIGURE FIGURE FIGURE FIGURE FIGURE FIGURE FIGURE FIGURE 1: SOFTWARE ARCHITECTURE .................................................................. 14 2: HORIZONTAL TIMING ........................................................................... 15 3: VERTICAL TIMING ............................................................................... 16 4: PIXEL CLOCKING WITH NO CSPREAD ..................................................... 16 5: PIXEL CLOCKING WITH CSPREAD .......................................................... 16 7: GETTING START EXAMPLE IMAGE .......................................................... 21 6: FT800 GRAPHICS COORDINATES PLANE IN PIXEL PRECISION ................... 22 8: THE CONSTANTS OF ALPHA_FUNC ......................................................... 84 9: PIXEL FORMAT FOR L1/L4/L8 ................................................................ 91 10: PIXEL FORMAT FOR ARGB2/1555 ......................................................... 91 11: PIXEL FORMAT FOR ARGB4, RGB332, RGB565 AND PALETTE .................. 92 12: STENCIL_OP CONSTANTS DEFINITION ............................................... 134 Copyright © 2014 Future Technology Devices International Limited 7 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 List of Tables TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE 1 BITMAP RENDERING PERFORMANCE ......................................................... 32 2 REG_SWIZZLE AND RGB PINS MAPPING TABLE .......................................... 35 3 GRAPHICS CONTEXT ............................................................................... 80 4 FT800 GRAPHICS PRIMITIVES LIST ........................................................... 81 5 GRAPHICS BITMAP FORMAT TABLE ........................................................... 82 6 FT800 GRAPHICS PRIMITIVE OPERATION DEFINITION ................................ 85 7 BITMAP_LAYOUT FORMAT LIST ................................................................ 88 8 BLEND_FUNC CONSTANT VALUE DEFINITION .......................................... 106 9 FT800 FONT METRICS BLOCK FORMAT .................................................... 144 10 WIDGETS COLOR SETUP TABLE ............................................................ 145 11 CO-PROCESSOR ENGINE GRAPHICS STATE ............................................ 146 12 PARAMETER OPTION DEFINITION ......................................................... 147 13 TOUCH REGISTERS MAP TABLE ............................................................ 245 List of Registers REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 REG_PCLK DEFINITION .................................................. 33 REG_PCLK_POL DEFINITION .......................................... 34 REG_CSPREAD DEFINITION............................................ 34 REG_SWIZZLE DEFINITION ............................................ 35 REG_DITHER DEFINITION .............................................. 35 REG_OUTBITS DEFINITION ............................................ 36 REG_ROTATE DEFINITION.............................................. 37 REG_VSYNC1 DEFINITION ............................................. 37 REG_VSYNC0 DEFINITION ............................................. 38 REG_VSIZE DEFINITION .............................................. 38 REG_VOFFSET DEFINITION .......................................... 39 REG_VCYCLE DEFINITION ............................................ 39 REG_HSYNC1 DEFINITION ........................................... 40 REG_HSYNC0 DEFINITION ........................................... 40 REG_HSIZE DEFINITION .............................................. 41 REG_HOFFSET DEFINITION .......................................... 41 REG_HCYCLE .............................................................. 42 REG_TAP_MASK .......................................................... 42 REG_TAP_CRC DEFINITION .......................................... 43 REG_DLSWAP DEFINITION ........................................... 44 REG_TAG DEFINITION ................................................. 45 REG_TAG_Y DEFINITION .............................................. 45 REG_TAG_X DEFINITION.............................................. 46 REG_TOUCH_DIRECT_Z1Z2 DEFINITION ....................... 47 REG_TOUCH_DIRECT_XY ............................................. 48 REG_TOUCH_TRANSFORM_F DEFINITION ...................... 49 REG_TOUCH_TRANSFORM_E DEFINITION ...................... 50 REG_TOUCH_TRANSFORM_D DEFINITION ...................... 51 REG_TOUCH_TRANSFORM_C DEFINITION ...................... 52 REG_TOUCH_TRANSFORM_B DEFINITION ...................... 53 REG_TOUCH_TRANSFORM_A DEFINITION ...................... 54 REG_TOUCH_TAG DEFINITION ..................................... 55 REG_TOUCH_TAG_XY DEFINITION ................................ 56 Copyright © 2014 Future Technology Devices International Limited 8 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER REGISTER DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION DEFINITION 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 Clearance No.: FTDI#349 REG_TOUCH_SCREEN_XY DEFINITION........................... 57 REG_TOUCH_RZ DEFINITION ....................................... 58 REG_TOUCH_RAW_XY DEFINITION ............................... 58 REG_TOUCH_RZTHRESH DEFINITION ............................ 59 REG_TOUCH_OVERSAMPLE DEFINITION ........................ 59 REG_TOUCH_SETTLE DEFINITION ................................. 60 REG_TOUCH_CHARGE DEFINITION ............................... 60 REG_TOUCH_ADC_MODE DEFINITION ........................... 61 REG_TOUCH_MODE DEFINITION ................................... 61 REG_PLAY DEFINITION ................................................ 62 REG_SOUND DEFINITION ............................................. 62 REG_VOL_SOUND DEFINITION ..................................... 63 REG_VOL_PB DEFINITION ............................................ 63 REG_PLAYBACK_PLAY DEFINITION ................................ 64 REG_PLAYBACK_LOOP DEFINITION ............................... 65 REG_PLAYBACK_FORMAT DEFINITION ........................... 65 REG_PLAYBACK_FREQ DEFINITION ............................... 66 REG_PLAYBACK_READPTR DEFINITION .......................... 66 REG_PLAYBACK_LENGTH DEFINITION ........................... 67 REG_PLAYBACK_START DEFINITION.............................. 67 REG_CMD_DL DEFINITION ........................................... 68 REG_CMD_WRITE DEFINITION ..................................... 68 REG_CMD_READ DEFINITION ....................................... 69 REG_TRACKER DEFINITION .......................................... 69 REG_PWM_DUTY DEFINITION ....................................... 70 REG_PWM_HZ DEFINITION .......................................... 71 REG_INT_MASK DEFINITION ........................................ 71 REG_INT_EN DEFINITION ............................................ 72 REG_INT_FLAGS DEFINITION ....................................... 73 REG_GPIO DEFINITION ................................................ 73 REG_GPIO_DIR DEFINITION ......................................... 74 REG_CPURESET DEFINITION ...................................... 74 REG_SCREENSHOT_READ DEFINITION .......................... 75 REG_SCREENSHOT_BUSY DEFINITION........................... 75 REG_SCREENSHOT_START DEFINITION ......................... 75 REG_SCREENSHOT_Y DEFINITION ................................ 76 REG_SCREENSHOT_EN DEFINITION .............................. 76 REG_FREQUENCY DEFINITION ...................................... 76 REG_CLOCK DEFINITION.............................................. 77 REG_FRAMES DEFINITION ............................................ 78 REG_ID DEFINITION .................................................... 78 REG_TRIM DEFINITION ................................................ 79 REG_CTOUCH_MODE DEFINITION ............................... 239 REG_CTOUCH_EXTENDED DEFINITION ........................ 240 REG_CTOUCH_TOUCH0_XY DEFINITION ...................... 240 REG_CTOUCH_TOUCH1_XY DEFINITION ...................... 241 REG_CTOUCH_TOUCH2_XY DEFINITION ...................... 241 REG_CTOUCH_TOUCH3_XY DEFINITION ...................... 242 REG_CTOUCH_TOUCH4_X DEFINITION ........................ 242 REG_CTOUCH_TOUCH4_Y DEFINITION ........................ 243 Copyright © 2014 Future Technology Devices International Limited 9 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 Copyright © 2014 Future Technology Devices International Limited 10 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 1 Introduction This document captures programming details of FT800 series chips including graphics commands, widget commands and configurations to control FT800 series chips for smooth and vibrant screen effects. The FT800 series chips are graphics controllers with add-on features such as audio playback and touch capabilities. They consist of a rich set of graphics objects (primitive and widgets) that can be used for displaying various menus and screen shots for a range of products including home appliances, toys, industrial machinery, home automation, elevators, and many more. 1.1 Overview This document will be useful to understand the command set and demonstrate the ease of usage in the examples given for each specific instruction. In addition, it also covers various power modes, audio, and touch features as well as their usage. Information on pin settings, hardware model and hardware configuration can be found in the FT800 data sheet (DS_FT800_Embedded_Video_Engine) or FT801 datasheet (DS_FT801). 1.2 Scope This document is targeted for software programmers and system designers to develop graphical user interface (GUI) applications on any system processor with either an SPI or I2C master port. 1.3 API reference definitions Functionality and nomenclature of the APIs used in this document. wr8() – write 8 bits to intended address location wr16() – write 16 bits to intended address location wr32() – write 32 bits to intended address location wr8s() – write 8 bits string to intended address location rd8() – read 8 bits from intended address location rd16() – read 16 bits from intended address location rd32() – read 32 bits from intended address location rd8s() – read 8 bits string from intended address location cmd() – write 32 bits command to co-processor engine FIFO RAM_CMD cmd_*() – Write 32 bits co-processor engine command with its necessary parameters to the co-processor engine FIFO (RAM_CMD). Copyright © 2014 Future Technology Devices International Limited 11 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 dl() – Write the specified 32 bits display list command to RAM_DL. Refer to section 2.5.4 Writing display lists for more information. host_command() – send host command to FT800. Refer to the FT800 data sheet for more information. Copyright © 2014 Future Technology Devices International Limited 12 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 2 Programming Model The FT800 appears to the host MCU as a memory-mapped SPI or I2C device. The host communicates with the FT800 using Read or Write to 8MB address space. Within this document, endianness of DL commands, co-processor engine commands, register values read/write, input RGB bitmap data and ADPCM input data are in ‘Little Endian’ format. 2.1 General Software architecture The software architecture can be broadly classified into layers such as custom applications, graphics/GUI manager, video manger, audio manager, drivers etc. FT800 higher level graphics engine commands and co-processor engine widget commands are part of the graphics/GUI manager. Control & data paths of video and audio are part of video manager and audio manager. Communication between graphics/GUI manager and the hardware is via the SPI or I2C driver. Typically the display screen shot is constructed by the custom application based on the framework exposed by the graphics/GUI manager. Copyright © 2014 Future Technology Devices International Limited 13 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 MPU Custom APP0 Custom APP1 Custom APP2 Graphics/GUI manager Video Manager Audio Manager FT800 graphics objects & widgets to be part of graphics manager Host software stack SPI/I2C Driver FT800 Hardware Figure 1: Software Architecture 2.2 Display configuration and initialization To configure the display, load the timing control registers with values for the particular display. These registers control horizontal timing: REG_PCLK REG_PCLK_POL REG_HCYCLE REG_HOFFSET REG_HSIZE REG_HSYNC0 REG_HSYNC1 These registers control vertical timing: REG_VCYCLE Copyright © 2014 Future Technology Devices International Limited 14 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 REG_VOFFSET REG_VSIZE REG_VSYNC0 REG_VSYNC1 And the REG_CSPREAD register changes color clock timing to reduce system noise. GPIO bit 7 is used for the display enable pin of the LCD module. By setting the direction of the GPIO bit to out direction, the display can be enabled by writing value of 1 into GPIO bit 7 or the display can be disabled by writing a value of 0 into GPIO bit 7. By default GPIO bit 7 direction is output and the value is 0. Note: Refer to FT800 data sheet for information on display register set. 2.2.1 Horizontal timing Figure 2: Horizontal Timing REG_PCLK controls the frequency of PCLK. The register specifies a divisor for the main 48 MHz clock, so a value of 4 gives a 12 MHz PCLK. If REG_PCLK is zero, then all display output is suspended. REG_PCLK_POL controls the polarity of PCLK. Zero means that display data is clocked out on the rising edge of PCLK. One means data is clocked on the falling edge. The total number of PCLKs in a horizontal line is REG_HCYCLE. Within this horizontal line are the scanned out pixels, REG_HSIZE in total. They start after REG_HOFFSET cycles. Signal DE is high while pixels are being scanned out. Horizontal sync timing on signal HSYNC is controlled by REG_HSYNC0 and REG_HSYNC1. They specify the time at which HSYNC falls and rises respectively. Copyright © 2014 Future Technology Devices International Limited 15 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 2.2.2 Vertical timing Figure 3: Vertical Timing Vertical timing is specified in number of lines. The total number of lines in a frame is REG_VCYCLE. There are REG_VSIZE rows of pixels in total. They start after REG_VOFFSET cycles. Vertical sync timing on signal VSYNC is controlled by REG_VSYNC0 and REG_VSYNC1. They specify the lines at which VSYNC falls and rises respectively. 2.2.3 Signals updating timing control With REG_CSPREAD disabled, all color signals are updated at the same time: Figure 4: Pixel clocking with no CSPREAD But with REG_CSPREAD enabled, the color signal timings are adjusted slightly so that fewer signals change simultaneously: Figure 5: Pixel clocking with CSPREAD Copyright © 2014 Future Technology Devices International Limited 16 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 2.2.4 Timing example: 480x272 at 60Hz For a display updating at 60Hz, there are 48000000/60= 800000 fast clocks per frame. Setting the PCLK divisor REG_PCLK to 5 gives a PCLK frequency of 9.6 MHz and 800000/5= 160000PCLKs per frame. For a 480 x 272 display, the typical horizontal period is 525 clocks, and vertical period is 286 lines. A little searching shows that a 548 x 292 size gives a period of 160016 clocks, very close to the target. So with a REG_HCYCLE=548 and REG_VCYCLE=292 the display frequency is almost exactly 60Hz. The other register settings can be set directly from the display panel datasheet. Copyright © 2014 Future Technology Devices International Limited 17 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 2.2.5 Initialization Sequence This section describes the initialization sequence in the different scenario. Initialization Sequence during the boot up: 1. Use MCU SPI clock not more than 11MHz 2. Send Host command “CLKEXT” to FT800 3. Send Host command “ACTIVE” to enable clock to FT800. 4. Configure video timing registers, except REG_PCLK 5. Write first display list 6. Write REG_DLSWAP, FT800 swaps display list immediately 7. Enable back light control for display 8. Write REG_PCLK, video output begins with the first display list 9. Use MCU SPI clock not more than 30MHz MCU_SPI_CLK_Freq(<11MHz);//use the MCU SPI clock less than 11MHz host_command(CLKEXT);//send command to "CLKEXT" to FT800 host_command(ACTIVE);//send host command "ACTIVE" to FT800 /* Configure display registers - demonstration for WQVGA resolution */ wr16(REG_HCYCLE, 548); wr16(REG_HOFFSET, 43); wr16(REG_HSYNC0, 0); wr16(REG_HSYNC1, 41); wr16(REG_VCYCLE, 292); wr16(REG_VOFFSET, 12); wr16(REG_VSYNC0, 0); wr16(REG_VSYNC1, 10); wr8(REG_SWIZZLE, 0); wr8(REG_PCLK_POL, 1); wr8(REG_CSPREAD, 1); wr16(REG_HSIZE, 480); wr16(REG_VSIZE, 272); /* write first display list */ wr32(RAM_DL+0,CLEAR_COLOR_RGB(0,0,0)); wr32(RAM_DL+4,CLEAR(1,1,1)); wr32(RAM_DL+8,DISPLAY()); wr8(REG_DLSWAP,DLSWAP_FRAME);//display list swap wr8(REG_GPIO_DIR,0x80 | Ft_Gpu_Hal_Rd8(phost,REG_GPIO_DIR)); wr8(REG_GPIO,0x080 | Ft_Gpu_Hal_Rd8(phost,REG_GPIO));//enable display bit wr8(REG_PCLK,5);//after this display is visible on the LCD MCU_SPI_CLK_Freq(<30Mhz);//use the MCU SPI clock upto 30MHz Code snippet 1 Initialization sequence Initialization Sequence from Power Down using PD_N pin: 1. Drive the PD_N pin high 2. Wait for at least 20ms Copyright © 2014 Future Technology Devices International Limited 18 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 3. Execute ”Initialization Sequence during the Boot UP” from steps 1 to 9 Initialization Sequence from Sleep Mode: 1. Send Host command “ACTIVE” to enable clock to FT800 2. Wait for at least 20ms 3. Execute “Initialization Sequence during Boot Up” from steps 5 to 8 Initialization sequence from standby mode: Execute all the steps mentioned in “Initialization Sequence from Sleep Mode” except waiting for at least 20ms in step 2. Note: Refer to FT800 data sheet for information on power modes. Follow section 2.3 for audio management during power down and reset operations. 2.3 Sound Synthesizer Sample code to play C8 on the xylophone: wr8(REG_VOL_SOUND,0xFF); //set the volume to maximum wr16(REG_SOUND, (0x6C<< 8) | 0x41); // C8 MIDI note on xylophone wr8(REG_PLAY, 1); // play the sound Code snippet 2 sound synthesizer play C8 on the xylophone Sample code to check the status of sound play: Sound_status = rd8(REG_PLAY);//1-play is going on, 0-play has finished Code snippet 3 sound synthesizer check the status of sound playing Sample code to stop sound play: wr16(REG_SOUND,0x0);//configure silence as sound to be played wr8(REG_PLAY,1);//play sound Sound_status = rd8(REG_PLAY);//1-play is going on, 0-play has finished Code snippet 4 sound synthesizer stop playing sound To avoid an audio pop sound on reset or power state change, trigger a "mute" sound, and wait for it to complete (completion of sound play is when REG_PLAY contains a value of 0). This sets the output value to 0 level. On reboot, the audio engine plays back the "unmute" sound to drive the output to the half way level. Note: Refer to FT800 data sheet for more information on sound synthesizer and audio playback. 2.4 Audio playback FT800 supports three types of audio format: 4 Bit IMA ADPCM, 8 Bit signed PCM, 8 Bit uLaw. For IMA ADPCM format, please note the byte order: within one byte, first sample (4 bits) shall locate from bit 0 to bit 3, while the second sample (4 bits) shall locate from bit 4 to bit 7. Copyright © 2014 Future Technology Devices International Limited 19 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 For the audio data in FT800 RAM to play, FT800 requires the start address in REG_PLAYBACK_START to be 64 bit (8 Bytes) aligned. In addition, the length of audio data specified by REG_PLAYBACK_LENGTH is required to be 64 bit (8 Bytes) aligned. To learn how to play back the audio data, please check the sample code below: wr8(REG_VOL_PB,0xFF);//configure audio playback volume wr32(REG_PLAYBACK_START,0);//configure audio buffer starting address wr32(REG_PLAYBACK_LENGTH,100*1024);//configure audio buffer length wr16(REG_PLAYBACK_FREQ,44100);//configure audio sampling frequency wr8(REG_PLAYBACK_FORMAT,ULAW_SAMPLES);//configure audio format wr8(REG_PLAYBACK_LOOP,0);//configure once or continuous playback wr8(REG_PLAYBACK_PLAY,1);//start the audio playback Code snippet 5 Audio playback AudioPlay_Status = rd8(REG_PLAYBACK_PLAY);//1-audio playback is going on, 0-audio playback has finished Code snippet 6 Check the status of audio playback wr32(REG_PLAYBACK_LENGTH,0);//configure the playback length to 0 wr8(REG_PLAYBACK_PLAY,1);//start audio playback Code snippet 7 Stop the audio playback Copyright © 2014 Future Technology Devices International Limited 20 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 2.5 Graphics routines This section describes graphics features and captures a few of examples. 2.5.1 Getting started This short example creates a screen with the text "FTDI" on it, with a red dot. Figure 6: Getting Start Example Image The code to draw the screen is: wr32(RAM_DL wr32(RAM_DL wr32(RAM_DL wr32(RAM_DL wr32(RAM_DL wr32(RAM_DL wr32(RAM_DL wr32(RAM_DL wr32(RAM_DL radius wr32(RAM_DL wr32(RAM_DL wr32(RAM_DL wr32(RAM_DL + + + + + + + + + 0, CLEAR(1, 1, 1)); // clear screen 4, BEGIN(BITMAPS)); // start drawing bitmaps 8, VERTEX2II(220, 110, 31, 'F')); // ascii F in font 31 12, VERTEX2II(244, 110, 31, 'T')); // ascii T 16, VERTEX2II(270, 110, 31, 'D')); // ascii D 20, VERTEX2II(299, 110, 31, 'I')); // ascii I 24, END()); 28, COLOR_RGB(160, 22, 22)); // change color to red 32, POINT_SIZE(320)); // set point size to 20 pixels in + + + + 36, 40, 44, 48, BEGIN(POINTS)); // start drawing points VERTEX2II(192, 133, 0, 0)); // red point END()); DISPLAY()); // display the image Code snippet 8 Getting Started After the above drawing commands are loaded into display list RAM, register REG_DLSWAP is required to be set to 0x02 in order to make the new display list active on the next frame refresh. Note: Copyright © 2014 Future Technology Devices International Limited 21 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 The display list always starts at address RAM_DL The address always increments by 4(bytes) as each command is 32 bit width. Command CLEAR is recommended to be used before any other drawing operation, in order to put FT800 graphics engine in a known state. The end of the display list is always flagged with the command DISPLAY 2.5.2 Coordinate Plane The figure below illustrates the graphics coordinate plane and its visible area. The valid X and Y coordinate ranges from -1024 to 1023 in pixel precision, i.e., from -16384 to 16383 in 1/16th pixel precision. -1024 X -1024 511 (0,0) 1023 Visible Area 511 1023 (511,511) Y Figure 7: FT800 graphics coordinates plane in pixel precision Copyright © 2014 Future Technology Devices International Limited 22 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 2.5.3 Drawing pattern The general pattern for drawing is: BEGIN with one of the primitive types Input one or more vertices, which specify the placement of the primitive on the screen END to mark the end of the primitive (note: In many examples the END command is not explicitly listed) The primitive types that the graphics engine support are: BITMAPS - rectangular pixel arrays, in various color formats POINTS - anti-aliased points, point radius is 1-256 pixels LINES - anti-aliased lines, with width from 0 to 4095 1/16th of pixel units. (width is from center of the line to boundary) LINE_STRIP - anti-aliased lines, connected head-to-tail RECTS - round-cornered rectangles, curvature of the corners can be adjusted using LINE_WIDTH. EDGE_STRIP_A/B/L/R - edge strips Examples Draw points with varying radius from 5 pixels to 13 pixels with different colors: dl( COLOR_RGB(128, 0, 0) ); dl( POINT_SIZE(5 * 16) ); dl( BEGIN(POINTS) ); dl( VERTEX2F(30 * 16,17 * 16) ); dl( COLOR_RGB(0, 128, 0) ); dl( POINT_SIZE(8 * 16) ); dl( VERTEX2F(90 * 16, 17 * 16) ); dl( COLOR_RGB(0, 0, 128) ); dl( POINT_SIZE(10 * 16) ); dl( VERTEX2F(30 * 16, 51 * 16) ); dl( COLOR_RGB(128, 128, 0) ); dl( POINT_SIZE(13 * 16) ); dl( VERTEX2F(90 * 16, 51 * 16) ); The VERTEX2F command gives the location of the circle center. Draw lines with varying sizes from 2 pixels to 6 pixels with different colors (line width size is from center of the line till boundary): dl( COLOR_RGB(128, 0, 0) ); Copyright © 2014 Future Technology Devices International Limited 23 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 dl( LINE_WIDTH(2 * 16) ); dl( BEGIN(LINES) ); dl( VERTEX2F(30 * 16,38 * 16) ); dl( VERTEX2F(30 * 16,63 * 16) ); dl( COLOR_RGB(0, 128, 0) ); dl( LINE_WIDTH(4 * 16) ); dl( VERTEX2F(60 * 16,25 * 16) ); dl( VERTEX2F(60 * 16,63 * 16) ); dl( COLOR_RGB(128, 128, 0) ); dl( LINE_WIDTH(6 * 16) ); dl( VERTEX2F(90 * 16, 13 * 16) ); dl( VERTEX2F(90 * 16, 63 * 16) ); The VERTEX2F commands are in pairs to define the start and finish point of the line. Draw rectangle with sizes of 5x25, 10x38 and 15x50 dimensions (line width size is used for corner curvature, LINE_WIDTH pixels are added on both directions in addition to rectangle dimension): dl( COLOR_RGB(128, 0, 0) ); dl( LINE_WIDTH(1 * 16) ); dl( BEGIN(RECTS) ); dl( VERTEX2F(28 * 16,38 * 16) ); dl( VERTEX2F(33 * 16,63 * 16) ); dl( COLOR_RGB(0, 128, 0) ); dl( LINE_WIDTH(5 * 16) ); dl( VERTEX2F(50 * 16,25 * 16) ); dl( VERTEX2F(60 * 16,63 * 16) ); dl( COLOR_RGB(128, 128, 0) ); dl( LINE_WIDTH(10 * 16) ); dl( VERTEX2F(83 * 16, 13 * 16) ); dl( VERTEX2F(98 * 16, 63 * 16) ); The VERTEX2F commands are in pairs to define the top left and bottom right corners of the rectangle. Copyright © 2014 Future Technology Devices International Limited 24 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 Draw line strips for sets of coordinates: dl( CLEAR_COLOR_RGB(5, 45, 110) ); dl( COLOR_RGB(255, 168, 64) ); dl( CLEAR(1 ,1 ,1) ); dl( BEGIN(LINE_STRIP) ); dl( VERTEX2F(5 * 16,5 * 16) ); dl( VERTEX2F(50 * 16,30 * 16) ); dl( VERTEX2F(63 * 16,50 * 16) ); Draw Edge strips for above: dl( CLEAR_COLOR_RGB(5, 45, 110) ); dl( COLOR_RGB(255, 168, 64) ); dl( CLEAR(1 ,1 ,1) ); dl( BEGIN(EDGE_STRIP_A) ); dl( VERTEX2F(5 * 16,5 * 16) ); dl( VERTEX2F(50 * 16,30 * 16) ); dl( VERTEX2F(63 * 16,50 * 16) ); Draw Edge strips for below: dl( CLEAR_COLOR_RGB(5, 45, 110) ); dl( COLOR_RGB(255, 168, 64) ); dl( CLEAR(1 ,1 ,1) ); dl( BEGIN(EDGE_STRIP_B) ); dl( VERTEX2F(5 * 16,5 * 16) ); dl( VERTEX2F(50 * 16,30 * 16) ); dl( VERTEX2F(63 * 16,50 * 16) ); Copyright © 2014 Future Technology Devices International Limited 25 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 Draw Edge strips for right: dl( CLEAR_COLOR_RGB(5, 45, 110) ); dl( COLOR_RGB(255, 168, 64) ); dl( CLEAR(1 ,1 ,1) ); dl( BEGIN(EDGE_STRIP_R) ); dl( VERTEX2F(5 * 16,5 * 16) ); dl( VERTEX2F(50 * 16,30 * 16) ); dl( VERTEX2F(63 * 16,50 * 16) ); Draw Edge strips for left: dl( CLEAR_COLOR_RGB(5, 45, 110) ); dl( COLOR_RGB(255, 168, 64) ); dl( CLEAR(1 ,1 ,1) ); dl( BEGIN(EDGE_STRIP_L) ); dl( VERTEX2F(5 * 16,5 * 16) ); dl( VERTEX2F(50 * 16,30 * 16) ); dl( VERTEX2F(63 * 16,50 * 16) ); Copyright © 2014 Future Technology Devices International Limited 26 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 2.5.4 Writing display lists Writing display list entries with wr32() is time-consuming and error-prone, so instead a function might be used: static size_t dli; static void dl(unsigned long cmd) { wr32(RAM_DL + dli, cmd); dli += 4; } ... dli = 0; // start writing the display list dl(CLEAR(1, 1, 1)); // clear screen dl(BEGIN(BITMAPS)); // start drawing bitmaps dl(VERTEX2II(220, 110, 31, 'F')); // ascii F in font 31 dl(VERTEX2II(244, 110, 31, 'T')); // ascii T dl(VERTEX2II(270, 110, 31, 'D')); // ascii D dl(VERTEX2II(299, 110, 31, 'I')); // ascii I dl(END()); dl(COLOR_RGB(160, 22, 22)); // change color to red dl(POINT_SIZE(320)); // set point size dl(BEGIN(POINTS)); // start drawing points dl(VERTEX2II(192, 133, 0, 0)); // red point dl(END()); dl(DISPLAY()); // display the image Code snippet 9 dl function definition Copyright © 2014 Future Technology Devices International Limited 27 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 2.5.5 Bitmap transformation matrix To achieve the bitmap transformation, the bitmap transform matrix below is specified in the FT800 and denoted as m m=[ ] by default m = [ The coordinates ], it is named as identity matrix. , after transforming is calculated in following equation: [ ]=m×[ ] i.e.: where A,B,C,E,D,E,F stands for the values assigned by commands BITMAP_TRANSFORM_A-F. 2.5.6 Color and transparency The same bitmap can be drawn in more places on the screen, in different colors and transparency: dl(COLOR_RGB(255, 64, 64)); // red at (200, 120) dl(VERTEX2II(200, 120, 0, 0)); dl(COLOR_RGB(64, 180, 64)); // green at (216, 136) dl(VERTEX2II(216, 136, 0, 0)); dl(COLOR_RGB(255, 255, 64)); // transparent yellow at (232, 152) dl(COLOR_A(150)); dl(VERTEX2II(232, 152, 0, 0)); Code snippet 10 color and transparency Copyright © 2014 Future Technology Devices International Limited 28 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 The COLOR_RGB command changes the current drawing color, which colors the bitmap. The COLOR_A command changes the current drawing alpha, changing the transparency of the drawing: an alpha of 0 means fully transparent and an alpha of 255 is fully opaque. Here a value of 150 gives a partially transparent effect. 2.5.7 VERTEX2II and VERTEX2F The VERTEX2II command used above only allows positive screen coordinates. If the bitmap is partially off screen, for example during a screen scroll, then it is necessary to specify negative screen coordinates. The VERTEX2F command allows negative coordinates. It also allows fractional coordinates, because it specifies screen (x,y) in units of 1/16 of a pixel. For example, drawing the same bitmap at screen position (-10,-10) using VERTEX2F: Copyright © 2014 Future Technology Devices International Limited 29 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 dl(BEGIN(BITMAPS)); dl(VERTEX2F(-160, -160)); dl(END()); Code snippet 11 negative screen coordinates example Copyright © 2014 Future Technology Devices International Limited 30 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 2.5.8 Screenshot The code below demonstrates how to utilize the registers and RAM_SCREENSHOT to capture the current screen with full pixel value. Each pixel is represented in 32 bits and BGRA format. However, this process may cause the flicking and tearing effect. #define SCREEN_WIDTH #define SCREEN_HEIGHT 480 272 uint32 screenshot[SCREEN_WIDTH*SCREEN_HEIGHT]; wr8(REG_SCREENSHOT_EN, 1); for (int ly = 0; ly < SCREEN_HEIGHT; ly++) { wr16(REG_SCREENSHOT_Y, ly); wr8(REG_SCREENSHOT_START, 1); //Read 64 bit registers to see if it is busy while (rd32(REG_SCREENSHOT_BUSY) | rd32(REG_SCREENSHOT_BUSY + 4)); wr8(REG_SCREENSHOT_READ , 1); for (int lx = 0; lx < SCREEN_WIDTH; lx ++) { //Read 32 bit pixel value from RAM_SCREENSHOT //The pixel format is BGRA: Blue is in lowest address and Alpha is in highest address screenshot[ly*SCREEN_HEIGHT + lx] = rd32(RAM_SCREENSHOT + lx*4); } wr8(REG_SCREENSHOT_READ, 0); } wr8(REG_SCREENSHOT_EN, 0); Code Snippet 12 Screenshot with full pixel value 2.5.9 Performance The graphics engine has no frame buffer: it uses dynamic compositing to build up each display line during scan out. Because of this, there is a finite amount of time available to draw each line. This time depends on the scan out parameters (REG_PCLK and REG_HCYCLE) but is never less than 2048 internal clock cycles. Some performance limits: The display list length must be less than 2048 instructions, because the graphics engine fetches display list commands one per clock. The graphics engine performance rending pixels is 4 pixels per clock, for any line with 2048 display commands the total pixels performance drawn must be less than 8192. For some bitmap formats, the drawing rate is 1 pixel per clock. These are TEXT8X8, TEXTVGA and PALETTED. For bilinear filtered pixels, the drawing rate is reduced to ¼ pixel per clock. Most bitmap formats draw at 1 pixel per clock, and the above formats (TEXT8X8, TEXTVGA and PALETTED) draw at 1 pixel every 4 clocks. Copyright © 2014 Future Technology Devices International Limited 31 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 To summarize: Table 1 Bitmap rendering performance Filter Mode Format Rate Nearest TEXT8X8, PALETTED Nearest all other formats BILINEAR TEXT8X8, PALETTED BILINEAR all other formats TEXTVGA TEXTVGA and 1 pixel per clock 4 pixel per clock and 1/4 pixel per clock 1 pixel per clock Copyright © 2014 Future Technology Devices International Limited 32 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 3 Register Description In this chapter, all the registers in the FT800 are classified into 5 groups: Graphics Engine Registers, Audio Engine Registers, Touch Engine Registers, and Co-processor Engine Registers as well as Miscellaneous Registers. This chapter gives the detailed definition for each register. To view the register summary of the FT800, please check the datasheet instead. In addition, please note that all the reserved bits are read-only and shall be zero. All the hexadecimal values are prefixed with 0x. Readers are strongly encouraged to crossreference the other chapters of this document for a better understanding. 3.1 Graphics Engine Registers Register Definition 1 REG_PCLK Definition REG_PCLK Definition Reserved R/W 31 Address: 87 0x10246C Reset Value: 0 0x0 Bit 0 - 7 : These bits are set to divide the main clock for PCLK. If the typical main clock was 48MHz and the value of these bits are 5, the PCLK will be 9.6 MHz. If the value of these bits are zero, there will be no PCLK output. Note: NONE Copyright © 2014 Future Technology Devices International Limited 33 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 2 Clearance No.: FTDI#349 REG_PCLK_POL Definition REG_PCLK_POL Definition Reserved R/W 31 Address: 1 0 0x102468 Reset Value: 0x0 Bit 0 : This bit controls the polarity of PCLK. If it is set to zero, PCLK polarity is on the rising edge. If it is set to one, PCLK polarity is on the falling edge. Note: NONE Register Definition 3 REG_CSPREAD Definition Please check the sector 2.2.3 for more details. REG_CSPREAD Definition Reserved R/W 31 Address: 1 0 0x102464 Reset Value: 0x1 Bit 0 : This bit controls the transition of RGB signals with PCLK active clock edge. When REG_CSPREAD=0, R[7:2],G[7:2] and B[7:2] signals change following the active edge of PCLK. When REG_CSPREAD=1, R[7:2] changes a PCLK clock early and B[7:2] a PCLK clock later, which helps reduce the system noise . Bit 1 - 31: Reserved. Note: NONE Copyright © 2014 Future Technology Devices International Limited 34 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 4 Clearance No.: FTDI#349 REG_SWIZZLE Definition REG_SWIZZLE Definition Reserved R/W 31 4 3 Address: 0x102460 Reset Value: 0 0x0 Bit 0 - 3 : These bits are set to control the arrangement of output RGB pins, which may help support different LCD panel. Please check the table above for details. Note: NONE Table 2 REG_SWIZZLE and RGB pins mapping table REG_SWIZZLE b3 b2 b1 b0 0 0 0 0 1 1 1 1 1 1 1 1 X X X X 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 R7, R6, R5, R4, R3, R2 R[7:2] R[2:7] B[7:2] B[2:7] G[7:2] G[2:7] G[7:2] G[2:7] B[7:2] B[2:7] R[7:2] R[2:7] Register Definition 5 PINS G7, G6, G5, G4, G3, G2 G[7:2] G[2:7] G[7:2] G[2:7] B[7:2] B[2:7] R[7:2] R[2:7] R[7:2] R[2:7] B[7:2] B[2:7] B7, B6, B5, B4, B3, B2 B[7:2] B[2:7] R[7:2] R[2:7] R[7:2] R[2:7] B[7:2] B[2:7] G[7:2] G[2:7] G[7:2] G[2:7] Power on Default REG_DITHER Definition Copyright © 2014 Future Technology Devices International Limited 35 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 REG_DITHER Definition Reserved R/W 31 Address: 1 0x10245C Reset Value: 0 0x1B6 Bit 0 : Set to 1 to enable dithering feature of output RGB signals. Set to 0 to disable dithering feature. Reading 1 from this bit means dithering feature is enabled. Reading 0 from this bit means dithering feature is disabled. Note: details Please refer to REG_SWIZZLE and RGB pins mapping table for Register Definition 6 REG_OUTBITS Definition REG_OUTBITS Definition Reserved R/W 31 Address: 98 0x102458 Reset Value: 0 0x1B6 Bit 0 - 8: These 9 bits are split into 3 groups for Red, Green and Blue color output signals: Bit 0 - 2: Blue color signal lines number. Reset value is 6. Bit 3 - 5: Green Color signal lines number. Reset value is 6. Bit 6 - 8: Red Color signal lines number. Reset value is 6. Host can write these bits to control the numbers of output signals for each color. Note: NONE Copyright © 2014 Future Technology Devices International Limited 36 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 7 Clearance No.: FTDI#349 REG_ROTATE Definition REG_ROTATE Definition Reserved R/W 31 1 Address: 0x102454 Reset Value: 0 0x00 Bit 0: 180 degree screen Rotation switch. Writing this bit to 0 will turn off the rotation functionality. Writing this bit to 1 will turn on the rotation functionality and 180 degree rotation will take place at the next frame rendered. Reading this bit will reflect the current rotation switch Note: again After rotation is turned on, please do the screen calibration Register Definition 8 REG_VSYNC1 Definition REG_VSYNC1 Definition R/W 31 Address: 10 9 0x10244C 0 Reset Value: 0x00A Bit0 - 9: The value of these bits specifies how many lines for signal VSYNC takes at the start of new frame. Note: NONE Copyright © 2014 Future Technology Devices International Limited 37 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 9 Clearance No.: FTDI#349 REG_VSYNC0 Definition REG_VSYNC0 Definition R/W 31 Address: 9 0x102448 Reset Value: 0 0x000 Bit0 - 9: The value of these bits specifies how many lines for the high state of signal VSYNC takes at the start of new frame. Note: NONE Register Definition 10 REG_VSIZE Definition REG_VSIZE Definition Reserved 31 Address: R/W 10 9 0x102444 0 Reset Value: 0x110 Bit0 - 9: The value of these bits specifies how many lines of pixels in one frame. Note: Copyright © 2014 Future Technology Devices International Limited 38 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 11 Clearance No.: FTDI#349 REG_VOFFSET Definition REG_VOFFSET Definition Reserved R/W 31 Address: 9 0x102440 0 Reset Value: 0x00C Bit0 - 9: The value of these bits specifies how many lines takes after the start of new frame. Note: Register Definition 12 REG_VCYCLE Definition REG_VCYCLE Definition Reserved 31 Address: R/W 10 9 0x10243C 0 Reset Value: 0x124 Bit0 - 9: The value of these bits specifies how many lines in one frame. Note: Copyright © 2014 Future Technology Devices International Limited 39 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 13 Clearance No.: FTDI#349 REG_HSYNC1 Definition REG_HSYNC1 Definition Reserved R/W 31 Address: 9 0x102438 0 Reset Value: 0x029 Bit0 - 9: The value of these bits specifies how many PCLK cycles for HSYNC during start of line. Note: NONE Register Definition 14 REG_HSYNC0 Definition REG_HSYNC0 Definition Reserved R/W 31 Address: 10 9 0x102434 0 Reset Value: 0x0 Bit0 - 9: The value of these bits specifies how many PCLK cycles of HSYNC high state during start of line. Note: NONE Copyright © 2014 Future Technology Devices International Limited 40 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 15 Clearance No.: FTDI#349 REG_HSIZE Definition Please reference to section 2.2.1 REG_HSIZE Definition Reserved R/W 31 Address: 10 9 0x102430 0 Reset Value: 0x1E0 Bit0 - 9: These bits are used to specify the numbers of PCLK cycles per horizonal line. Note: NONE Register Definition 16 REG_HOFFSET Definition Please reference to section 2.2.1 REG_HOFFSET Definition Reserved R/W 31 Address: 10 9 0x10242C 0 Reset Value: 0x2B Bit0 - 9: These bits are used to specify the numbers of PCLK cycles before pixels are scanned out. Note: NONE Copyright © 2014 Future Technology Devices International Limited 41 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 17 Clearance No.: FTDI#349 REG_HCYCLE Please reference to section 2.2.1 REG_HCYCLE Definition Reserved R/W 31 Address: 9 0x102428 0 Reset Value: 0x224 Bit0 - 9: These bits are the number of total PCLK cycles per horizontal line scan. The default value is 548 and supposed to support 480x272 screen resolution display. Please check the display panel specification for more details. Note: NONE Register Definition 18 REG_TAP_MASK REG_TAP_MASK Definition R/W 31 Address: 0 0x102424 Reset Value: 0xFFFFFFFF Bit0 - 31: These bits are used to mask the value of RGB output signals. The result will be used to caculate the CRC value which will be updated into REG_TAP_CRC. Note: NONE Copyright © 2014 Future Technology Devices International Limited 42 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 19 Clearance No.: FTDI#349 REG_TAP_CRC Definition REG_TAP_CRC Definition Read Only 31 Address: 0 0x102420 Reset Value: 0x00000000 Bit0 - 31: These bits are set by FT800 as the CRC value of RGB signals output. It updates once every time display list is rendered. Note: NONE Copyright © 2014 Future Technology Devices International Limited 43 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 20 Clearance No.: FTDI#349 REG_DLSWAP Definition REG_DLSWAP Definition Reserved R/W 31 21 Address: 0x102450 Reset Value: 0 0x00 Bi t 0 - 1: These bi ts can be set by the host to val i date the di spl ay l i st buffer of the FT800. The FT800 graphi cs engi ne wi l l determi ne when to render the screen , dependi ng on what val ues of these bi ts are set: 01: Graphi cs engi ne wi l l render the screen i mmedi atel y after current l i ne i s scanned out. It may cause teari ng effect. 10: Graphi cs engi ne wi l l render the screen i mmedi atel y after current frame i s scanned out. Thi s i s recommended i n most of cases. 00: Do not wri te thi s val ue i nto thi s regi ster. 11: Do not wri te thi s val ue i nto thi s regi ster. These bi ts can be al so be read by the host to check the avai l abi l i ty of the di spl ay l i st buffer of the FT800. If the val ue i s read as zero, the di spl ay l i st buffer of the FT800 i s safe and ready to wri te. Otherwi se, the host needs to wai t ti l l i t becomes zero. Note: Copyright © 2014 Future Technology Devices International Limited 44 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 21 Clearance No.: FTDI#349 REG_TAG Definition REG_TAG Definition Reserved R/O 31 Address: 8 7 0x102478 Reset Value: 0 0x0 Bit 0 - 7 : These bits are updated with tag value by FT800 graphics engine. The tag value here is corresponding to the touching point coordinator given in REG_TAG_X and REG_TAG_Y. Host can read this register to check which graphics object is touched. Note: Please note the difference between REG_TAG and REG_TOUCH_TAG. REG_TAG is updated based on the X,Y given by REG_TAG_X and REG_TAG_Y. However, REG_TOUCH_TAG is updated based on the current touching point given by FT800 touch engine. Register Definition 22 REG_TAG_Y Definition REG_TAG_Y Definition Reserved R/W 31 Address: 98 0x102474 Reset Value: 0 0x0 Bit 0 - 8 : These bits are set by host as Y coordinate of touching point, which will enable the host to query the tag value. This register shall be used together with REG_TAG_X and REG_TAG. Normally, in the case the host has already captured the touching point's coordinator, this register can be updated to query the tag value of respective touching point. Note: NONE Copyright © 2014 Future Technology Devices International Limited 45 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 23 Clearance No.: FTDI#349 REG_TAG_X Definition REG_TAG_X Definition Reserved R/W 31 Address: 98 0x102470 Reset Value: 0 0x0 Bit 0 - 8 : These bits are set by host as X coordinate of touching point, which will enable host to query the tag value. This register shall be used together with REG_TAG_Y and REG_TAG. Normally, in the case the host has already captured the touching point's coordinator, this register can be updated to query the tag value of the respective touching point. Note: NONE Copyright © 2014 Future Technology Devices International Limited 46 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 3.2 Touch Engine Registers (FT800 only) Register Definition 24 REG_TOUCH_DIRECT_Z1Z2 Definition REG_TOUCH_DIRECT_Z1Z2 Definition Reserved RO 31 26 25 Address: 0x102578 Reserved 16 15 RO 10 9 0 Reset Value: NA Bit 0 - 9 : The 10 bit ADC value for touch screen resistance Z2. Bit 16-25: The 10 bit ADC value for touch screen resistance Z1. Note: To know it is touched or not, please check the 31st bit of REG_TOUCH_DIRECT_XY. FT800 touch engine will do the postprocessing for these Z1 and Z2 values and update the result in REG_TOUCH_RZ. Copyright © 2014 Future Technology Devices International Limited 47 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 25 Clearance No.: FTDI#349 REG_TOUCH_DIRECT_XY REG_TOUCH_DIRECT_XY Definition RO Reserved 31 26 25 Address: 0x102574 RO Reserved 16 15 RO 10 9 0 Reset Value: 0x0 Bit 0 - 9 : The 10 bit ADC value for Y coordinate Bit 16-25: The 10 bit ADC value for X coordinate. Bit 31 : If this bit is zero, it means a touch is being sensed and the two fields above contains the sensed data. If this bit is one, it means no touch is being sensed and the data in the two fields above shall be ignored. Note: Copyright © 2014 Future Technology Devices International Limited 48 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 26 Clearance No.: FTDI#349 REG_TOUCH_TRANSFORM_F Definition REG_TOUCH_TRANSFORM_F Definition R/W 31 30 Address: 16 15 0x102530 0 Reset Value: 0x0 Bit 0 - 15 : The value of these bits represents the fractional part of a fixed point number. Bit 16 - 30 : The value of these bits represents the integer part of a fixed point number. Note: This register represents fixed point number and the default value is +0.0 after reset. Copyright © 2014 Future Technology Devices International Limited 49 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 27 Clearance No.: FTDI#349 REG_TOUCH_TRANSFORM_E Definition REG_TOUCH_TRANSFORM_E Definition R/W 31 30 16 15 Address: 0x10252C 0 Reset Value: 0x10000 Bit 0 - 15 : The value of these bits represents the fractional part of the fixed point number. Bit 16 - 30 : The value of these bits represents the integer part of the fixed point number. Bit 31 : The sign bit for fixed point number Note: This register represents fixed point number and the default value is +1.0 after reset. Copyright © 2014 Future Technology Devices International Limited 50 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 28 Clearance No.: FTDI#349 REG_TOUCH_TRANSFORM_D Definition REG_TOUCH_TRANSFORM_D Definition R/W 31 30 16 15 Address: 0x102528 0 Reset Value: 0x0 Bit 0 - 15 : The value of these bits represents the fractional part of the fixed point number. Bit 16 - 30 : The value of these bits represents the integer part of the fixed point number. Bit 31 : The sign bit for fixed point number Note: This register represents fixed point number and the default value is +0.0 after reset. Copyright © 2014 Future Technology Devices International Limited 51 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 29 Clearance No.: FTDI#349 REG_TOUCH_TRANSFORM_C Definition REG_TOUCH_TRANSFORM_C Definition R/W 31 30 16 15 Address: 0x102524 0 Reset Value: 0x0 Bit 0 - 15 : The value of these bits represents the fractional part of the fixed point number. Bit 16 - 30 : The value of these bits represents the integer part of the fixed point number. Bit 31 : The sign bit for fixed point number Note: This register represents fixed point number and the default value is +0.0 after reset. Copyright © 2014 Future Technology Devices International Limited 52 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 30 Clearance No.: FTDI#349 REG_TOUCH_TRANSFORM_B Definition REG_TOUCH_TRANSFORM_B Definition R/W 31 30 16 15 Address: 0x102520 0 Reset Value: 0x0 Bit 0 - 15 : The value of these bits represents the fractional part of the fixed point number. Bit 16 - 30 : The value of these bits represents the integer part of the fixed point number. Bit 31 : The sign bit for fixed point number Note: This register represents fixed point number and the default value is +0.0 after reset. Copyright © 2014 Future Technology Devices International Limited 53 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 31 Clearance No.: FTDI#349 REG_TOUCH_TRANSFORM_A Definition REG_TOUCH_TRANSFORM_A Definition R/W 31 30 16 15 Address: 0x10251C 0 Reset Value: 0x10000 Bit 0 - 15 : The value of these bits represents the fractional part of the fixed point number. Bit 16 - 30 : The value of these bits represents the integer part of the fixed point number. Bit 31 : The sign bit for fixed point number Note: This register represents fixed point number and the default value is +1.0 after reset. Copyright © 2014 Future Technology Devices International Limited 54 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 32 Clearance No.: FTDI#349 REG_TOUCH_TAG Definition REG_TOUCH_TAG Definition RESERVED 31 RO 87 Address: 0x102518 0 Reset Value: 0 Bit 0 - 7 : These bits are set as the tag value of the specific graphics object on the screen which is being touched. These bits are updated once when all the lines of the current frame is scanned out to the screen. Bit 8 - 31: These bits are reserved. Note: The valid tag value range is from 1 to 255 ,therefore the default value of this register is zero, meaning there is no touch by default. Copyright © 2014 Future Technology Devices International Limited 55 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 33 Clearance No.: FTDI#349 REG_TOUCH_TAG_XY Definition REG_TOUCH_TAG_XY Definition RO 31 Address: RO 16 15 0x102514 0 Reset Value: 0 Bit 0 - 15 : The value of these bits are the Y coordinates of the touch screen, which was used by the touch engine to look up the tag result. Bit 16 - 31: The value of these bits are X coordinates of the touch screen, which was used by the touch engine to look up the tag result. Note: Host can read this register to check the coordinates used by the touch engine to update the tag register REG_TOUCH_TAG. Copyright © 2014 Future Technology Devices International Limited 56 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 34 Clearance No.: FTDI#349 REG_TOUCH_SCREEN_XY Definition REG_TOUCH_SCREEN_XY Definition RO 31 Address: RO 16 15 0x102510 0 Reset Value: 0x80008000 Bit 0 - 15 : The value of these bits are the Y coordinates of the touch screen. After doing calibration, it shall be within the height of the screen size. If the touch screen is not being touched, it shall be 0x8000. Bit 16 - 31: The value of these bits are the X coordinates of the touch screen. After doing calibration, it shall be within the width of the screen size. If the touch screen is not being touched, it shall be 0x8000. Note: This register is the final computation output of the touch engine of the FT800. It has been mapped into screen size. Copyright © 2014 Future Technology Devices International Limited 57 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 35 Clearance No.: FTDI#349 REG_TOUCH_RZ Definition REG_TOUCH_RZ Definition Reserved 31 Address: RO 16 15 0x10250C 0 Reset Value: 0x7FFF Bit 0 - 15 : These bits are the resistance of touching on the touch screen . The valid value is from 0 to 0x7FFF. The highest value(0x7FFF) means no touch and the lowest value (0) menas the maximum pressure. Bit 16 - 31: Reserved Register Definition 36 REG_TOUCH_RAW_XY Definition REG_TOUCH_RAW_XY Definition Reserved 31 Address: RO 16 15 0x102508 0 Reset Value: 0xFFFFFFFF Bit 0 - 15 : These bits are the raw Y coordinates of the touch screen before going through transformation matrix. The valid range is from 0 to 1023. If there is no touch on screen, the value shall be 0xFFFF. Bit 16 - 31: These bits are the raw X coordinates going through transformation matrix. The valid range is from 0 to 1023. If there is no touch on screen, the value shall be 0xFFFF. Note: The coordinates in this register have not mapped into the screen coordinates. To get the screen coordinates, please refer to REG_TOUCH_SCREEN_XY . Copyright © 2014 Future Technology Devices International Limited 58 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 37 Clearance No.: FTDI#349 REG_TOUCH_RZTHRESH Definition REG_TOUCH_RZTHRESH Definition Reserved R/W 31 Address: 16 15 0x102504 Reset Value: 0 0xFFFF Bit 0 - 15 : These bits control the touch screen resistance threshold. Host can adjust the touch screen touching sensitivity by setting this register. The default value after reset is 0xFFFF and it means the lightest touch will be accepted by the touch engine of the FT800. The host can set this register by doing experiments. The typical value is 1200. Register Definition 38 REG_TOUCH_OVERSAMPLE Definition REG_TOUCH_OVERSAMPLE Definition Reserved R/W 31 Address: 4 3 0x102500 Reset Value: 0 0x7 Bit 0 - 3 : These bits control the touch screen oversample factor. The higher value of this register causes more accuracy with more power consumption, but may not be necessary. The valid range is from 1 to 15. Copyright © 2014 Future Technology Devices International Limited 59 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 39 Clearance No.: FTDI#349 REG_TOUCH_SETTLE Definition REG_TOUCH_SETTLE Definition Reserved R/W 31 Address: 4 3 0x1024FC Reset Value: 0 0x3 Bit 0 - 3 : These bits control the touch screen settle time , in the unit of 6 clocks. The default value is 3, meaning the settle time is 18 (3*6) system clock cycles. Note: . Register Definition 40 REG_TOUCH_CHARGE Definition REG_TOUCH_CHARGE Definition Reserved 31 Address: R/W 16 15 0x1024F8 Reset Value: 0 0x1770 Bit 0 - 15 : These bits control the touch-screen charge time, in the unit of 6 system clocks. The default value after reset is 6000, i.e. the charge time will be 6000*6 clock cycles. Note: . Copyright © 2014 Future Technology Devices International Limited 60 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 41 Clearance No.: FTDI#349 REG_TOUCH_ADC_MODE Definition REG_TOUCH_ADC_MODE Definition Reserved R/W 31 Address: 1 0x1024F4 Reset Value: 0 0x1 Bit 0 : The host can set this bit to control the ADC sampling mode of the FT800, as per: 0: Single Ended mode. It causes lower power consumption but with less accuracy. 1: Differential Mode. It causes higher power consumption but with more accuracy. The default mode after reset. Note: . Register Definition 42 REG_TOUCH_MODE Definition REG_TOUCH_MODE Definition Reserved R/W 31 Address: 2 1 0 0x1024F0 Reset Value: 0x3 Bit 0 - 1 : The host can set these two bits to control the touch screen sampling mode of the FT800 touch engine, as per: 00: Off mode. No sampling happens. 01: Single mode. Cause one single sample to occur. 10: Frame mode. Cause a sample at the start of each frame. 11: Continuous mode. Up to 1000 times per seconds. Default mode after reset. Copyright © 2014 Future Technology Devices International Limited 61 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 3.3 Audio Engine Registers Register Definition 43 REG_PLAY Definition 31 Address: 1 0x102488 Reset Value: 0 0x0 Bit 0 : A write to this bit triggers the play of synthesized sound effect specified in REG_SOUND. Reading value 1 in this bit means the sound effect is playing. To stop the sound effect, the host needs to select the silence sound effect by setting up REG_SOUND and set this register to play. Note: Please refer to the datasheet sector "Sound Synthesizer" for the details of this register. Register Definition 44 REG_SOUND Definition REG_SOUND Definition Reserved R/W 31 Address: 16 15 0x102484 0 Reset Value: 0x0000 Bit 0 - 15 : These bits are used to select the synthesized sound effect. They are split into two group Bit 0 - 7, Bit 8- 15. Bit 0 - 7 : These bits define the sound effect. Some of them are pitch adjustable and the pitch is defined in Bits 8 - 15. Some of them are not pitch adjustable and the Bits 8 - 15 will be ignored. Bit 8 - 15: The MIDI note for the sound effect defined in Bits 0 - 7. Note: Please refer to the datasheet sector "Sound Synthesizer" for the details of this register. Copyright © 2014 Future Technology Devices International Limited 62 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 45 Clearance No.: FTDI#349 REG_VOL_SOUND Definition REG_VOL_SOUND Definition Reserved R/W 31 Address: 87 0x102480 0 Reset Value: 0xFF Bit 0 - 7 : These bits control the volume of the synthesizer sound. The default value 0xFF is highest volume. The value zero means mute. Note: Register Definition 46 REG_VOL_PB Definition REG_VOL_PB Definition Reserved R/W 31 Address: 8 7 0x10247C Reset Value: 0 0xFF Bit 0 - 7 : These bits control the volume of the audio file playback. The default value 0xFF is highest volume. The value zero means mute. Note: Copyright © 2014 Future Technology Devices International Limited 63 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 47 Clearance No.: FTDI#349 REG_PLAYBACK_PLAY Definition REG_PLAYBCK_PLAY Definition Reserved 31 Address: R/W 1 0 0x1024BC Reset Value: 0x0 Bit 0 : A write to this bit triggers the start of audio playback, regardless of writing ‘0’ or ‘1’. It will read back ‘1’ when playback is ongoing, and ‘0’ when playback completes. Note: Please refer to the datasheet section "Audio Playback" for the details of this register. Copyright © 2014 Future Technology Devices International Limited 64 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 48 Clearance No.: FTDI#349 REG_PLAYBACK_LOOP Definition REG_PLAYBACK_LOOP Definition Reserved 31 Address: R/W 1 0 0x1024B8 Reset Value: 0x0 Bit 0 : this bit controls the audio engine to play back the audio data in RAM_G from the start address once it consumes all the data. A value of 1 means LOOP is enabled, a value of 0 means LOOP is disabled. Note: Please refer to the datasheet section "Audio Playback" for the details of this register. Register Definition 49 Address: 0x1024B4 REG_PLAYBACK_FORMAT Definition Reset Value: 0x0 Bit 0 - 1 : These bits define the format of the audio data in RAM_G. FT800 supports: 00: Linear Sample format 01: uLaw Sample format 10: 4 bit IMA ADPCM Sample format 11: Undefined. Note: Please read the datasheet section "Audio Playback" for more details. Copyright © 2014 Future Technology Devices International Limited 65 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 50 Clearance No.: FTDI#349 REG_PLAYBACK_FREQ Definition REG_PLAYBACK_FREQ Definition Reserved R/O 31 Address: 16 15 0x1024B0 0 Reset Value: 0x1F40 Bit 0 - 15 : These bits specify the sampling fequency of audio playback data. Units is in Hz. Note: Please read the datasheet section "Audio Playback" for more details. Register Definition 51 REG_PLAYBACK_READPTR Definition REG_PLAYBACK_READPTR Definition Reserved 31 Address: R/O 20 19 0x1024AC 0 Reset Value: 0x00000 Bit 0 - 19 : These bits are updated by the FT800 audio engine while playing audio data from RAM_G. It is the current audio data address which is playing back. The host can read this register to check if the audio engine has consumed all the audio data. Note: Please read the datasheet section "Audio Playback" for more details. Copyright © 2014 Future Technology Devices International Limited 66 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 52 Clearance No.: FTDI#349 REG_PLAYBACK_LENGTH Definition REG_PLAYBACK_LENGTH Definition Reserved 31 Address: R/W 20 19 0x1024A8 0 Reset Value: 0x00000 Bit 0 - 19 : These bits specify the length of audio data in RAM_G to playback, starting from the address specified in REG_PLAYBACK_START register. Note: Please read the datasheet section "Audio Playback" for more details. Register Definition 53 REG_PLAYBACK_START Definition REG_PLAYBACK_START Definition Reserved 31 Address: R/W 20 19 0x1024A4 0 Reset Value: 0x00000 Bit 0 - 19 : These bits specify the start address of audio data in RAM_G to playback. Note: Please read the datasheet section "Audio Playback" for more details. Copyright © 2014 Future Technology Devices International Limited 67 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 3.4 Co-processor Engine Registers Register Definition 54 REG_CMD_DL Definition REG_CMD_DL Definition Reserved 31 Address: R/W 14 13 0x1024EC Reset Value: 0 0x0000 Bit 0 - 13 : These bits indicate the offset from RAM_DL of a display list command generated by the coprocessor engine. The coprocessor engine depends on these bits to determine the address in the display list buffer of generated display list commands. The coprocessor engine will update this register as long as the display list commands are generated into the display list buffer. By setting this register properly, the host can specify the starting address in the display list buffer for the coprocessor engine to generate display commands. The valid value range is from 0 to 8195. Note: . Register Definition 55 Address: 0x1024E8 REG_CMD_WRITE Definition Reset Value: 0x0 Bit 0 - 11 : These bits are updated by the host MCU to inform the coprocessor engine of the ending address of valid data feeding into its FIFO. Typically, the host will update this register after it has downloaded the coprocessor commands into its FIFO. The valid range is from 0 to 4095, i.e. within the size of the FIFO. Note: FIFO size of command buffer is 4096 bytes and each co-processor instruction is of 4 bytes in size. The value to be written into this register must be 4 bytes aligned. Copyright © 2014 Future Technology Devices International Limited 68 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 56 Clearance No.: FTDI#349 REG_CMD_READ Definition 31 12 11 Address: 0x1024E4 Reset Value: 0 0x000 Bit 0 - 11 : These bits are updated by the coprocessor engine as long as the coprocessor engine fetched the command from its FIFO. The host can read this register to determine the FIFO fullness of the coprocessor engine. The valid value range is from 0 to 4095. In the case of error, the coprocessor engine writes 0xFFF to this register. Note: The host shall not write into this register unless in error recovery case. Its default value is zero after the coprocessor engine is reset. Register Definition 57 REG_TRACKER Definition REG_TRACK Definition Read Only Track Value 31 Address: Tag Value 16 15 0x109000 0 Reset Value: 0x0 Bit0 - 15: These bits are set to indicate the tag value of a graphics object which is being touched. Bit 16 - 31: These bits are set to indicate the tracking value for the tracked graphics objects. The coprocessor caculates how much the current touching points take within the predefined range. Please check the CMD_TRACK for more details. Note: NONE Copyright © 2014 Future Technology Devices International Limited 69 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 3.5 Miscellaneous Registers In this chapter, the miscellaneous registers covers backlight control, interrupt, GPIO, and other functionality registers. Register Definition 58 REG_PWM_DUTY Definition REG_PWM_DUTY Definition Reserved R/W 31 Address: 87 0x1024C4 Reset Value: 0 0x80 Bit 0 - 7 : These bits define the backlight PWM output duty cycle. The valid range is from 0 to 128. 0 means backlight complete off, 128 means backlight in max brightness. Note: Copyright © 2014 Future Technology Devices International Limited 70 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 59 Clearance No.: FTDI#349 REG_PWM_HZ Definition REG_PWM_HZ Definition Reserved R/W 31 Address: 14 13 0x1024C0 0 Reset Value: 0xFA Bit 0 - 13 : These bits define the backlight PWM output frequency in HZ. The default is 250 Hz after reset. The valid frequency is from 250Hz to 10000Hz. Note: Register Definition 60 REG_INT_MASK Definition REG_INT_MASK Definition Reserved R/W 31 Address: 87 0x1024A0 0 Reset Value: 0xFF Bit 0 - 7 : These bits are used to mask the corresponding interrupt. 1 means to enable the corresponding interrupt source, 0 means to disable the corresponding interrupt source. After reset , all the interrupt source are eligible to trigger interrupt by default. Note: Please read the datasheet section "Interrupts" for more details. Copyright © 2014 Future Technology Devices International Limited 71 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 61 Clearance No.: FTDI#349 REG_INT_EN Definition REG_INT_EN Definition Reserved 31 Address: R/W 1 0 0x10249C Reset Value: 0x0 Bit 0 : The host can set this bit to 1 to enable the global interrupt of FT800. To disable the global interrupt of FT800, the host can set this bit to 0. Note: Please refer to the datasheet section "Interrupts" for the details of this register. Copyright © 2014 Future Technology Devices International Limited 72 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 62 Clearance No.: FTDI#349 REG_INT_FLAGS Definition REG_INT_FLAGS Definition Reserved R/C 31 Address: 87 0x102498 0 Reset Value: 0x00 Bit 0 - 7 : These bits are interrupt flags set by the FT800. The host can read these bits to determine which interrupt takes place. These bits are cleared automatically by reading. The host shall not write this register. After reset, there are no interrupts happen by default , therefore, it is 0x00. Note: Please read the datasheet section "Interrupts" for more details. Register Definition 63 REG_GPIO Definition REG_GPIO Definition Reserved R/W 31 Address: 87 0x102490 0 Reset Value: 0x00 Bit 0 - 7 : These bits are versatile. Bit 0 , 1, 7 are used to control GPIO pin values. Bit 2 - 6 : These are used to configure the drive strength of the pins. Note: Please read the datasheet section "General Purpose IO pins" for more details. Copyright © 2014 Future Technology Devices International Limited 73 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 64 Clearance No.: FTDI#349 REG_GPIO_DIR Definition REG_GPIO_DIR Definition Reserved R/W 31 8 7 Address: 0x10248C Reset Value: 0 0x80 Bit 0 - 7 : These bits configure the direction of GPIO pins of the FT800. Bit 0 controls the direction of GPIO0 and Bit 7 controls the direction of GPIO7. The bit value 1 means the GPIO pin is set as an output, otherwise it means an input. After reset, only the GPIO7 is set to output by default. Register Definition 65 REG_CPURESET Definition REG_CPURESET Definition Reserved RW 31 1 Address: 0x10241C Reset Value: 0 0x00 Bit 0: Write this bit to 1 will set the coprocessor engines of the FT800 into the reset state. Write this bit to 0 will resume from reset state to normal operational mode. If this bit is read as 1, the FT800 coprocessor engines are in reset state. Otherwise, FT800 corpocessor engines are in normal state. Bit 1 - 31: Reserved Copyright © 2014 Future Technology Devices International Limited 74 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 66 Clearance No.: FTDI#349 REG_SCREENSHOT_READ Definition REG_SCREENSHOT_READ Definition Reserved R/W 31 Address: 1 0x102554 Reset Value: 0 0x0 Bit 0 : Set this bit to enable the readout of screenshot of selected Y line. Bit 1~31: Reserved. Note: After the REG_SCREENSHOT_BUSY register is clear, this register is required to set before reading out the screenshot of selected Y lines. The screenshot resides in RAM_SCREENSHOT and the format of each pixel is in 32 bit BGRA format: Blue channel is in lowest address and Alpha is in highest address. Register Definition 67 REG_SCREENSHOT_BUSY Definition REG_SCREENSHOT_BUSY Definition Read Only 63 Address: 0 0x1024D8 Reset Value: 0x0 Bit 0~63: Screen shot busy flag. Any non-zero value in these 64 bits represents the busy status of screen shot. Zero value in these 64 bits represents the screen shot is done. Note: After the screen shot is started, host shall read this register to determine when the screen shot is complete. Register Definition 68 REG_SCREENSHOT_START Definition REG_SCREENSHOT_START Definition Reserved R/W 31 Address: 1 0x102418 Reset Value: 0 0x0 Bit 0 : Set this bit to start screen shot if screen shot is already enabled. Screen shot is automatically stopped when screen shot is disabled. Bit 1~31: Reserved. Note: NONE Copyright © 2014 Future Technology Devices International Limited 75 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 69 Clearance No.: FTDI#349 REG_SCREENSHOT_Y Definition REG_SCREENSHOT_Y Definition Reserved R/W 31 Address: 9 0x102414 Reset Value: 8 0 0x000 Bit 0~8 : The value of these 9 bits specifies the line number to capture in horizontal direction when screen shot is enabled. Bit 9~31: Reserved. Note: NONE Register Definition 70 REG_SCREENSHOT_EN Definition REG_SCREENSHOT_EN Definition Reserved R/W 31 Address: 1 0x102410 Reset Value: 0 0x0 Bit 0 : Set this bit to enable screen shot for current frame. Clear this bit to disable the screen shot. Bit 1-31: Reserved. Register Definition 71 REG_FREQUENCY Definition REG_FREQUENCY Definition Read / Write 31 Address: 0 0x10240C Reset Value: 0x2DC6C00 Bit0 - 31: These bits are set 0x2DC6C00 after reset, i.e. The main clock frequency is 48MHz by default. The value is in HZ. If the host selects the alternative frequency by using host command CLK36M, this register must be updated accordingly. Copyright © 2014 Future Technology Devices International Limited 76 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 72 Clearance No.: FTDI#349 REG_CLOCK Definition REG_CLOCK Definition Read Only 31 Address: 0 0x102408 Reset Value: 0x00000000 Bit0 - 31: These bits are set to zero after reset. The register counts the number of FT800 main clock cycles since reset. If the FT800 main clock's frequency is 48Mhz, it will wrap around after about 89 seconds. Copyright © 2014 Future Technology Devices International Limited 77 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 73 Clearance No.: FTDI#349 REG_FRAMES Definition REG_FRAMES Definition Read Only 31 Address: 0 0x102404 Reset Value: 0x00000000 Bit0 - 31: These bits are set to zero after reset. The register counts the number of screen frames. If the refresh rate is 60Hz, it will wrap up till about 828 days after reset. Register Definition 74 REG_ID Definition REG_ID Definition Reserved RO 31 Address: 8 7 0x102400 Reset Value: 0 0x7C Bit0 - 7: These bits are the built-in register ID. The host can read it to determine if the chip is FT800. The value shall always be 0x7C. Copyright © 2014 Future Technology Devices International Limited 78 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 75 Clearance No.: FTDI#349 REG_TRIM Definition REG_TRIM Definition Reserved R/W 31 Address: 5 4 0x10256C Reset Value: 0 0x0 Bit 0 - 4: These bits are set to trim the interanl clock. Bit 5 - 31: Reserved Note: Please check the application note AN_299_FT800_FT801_Internal_Clock_Trimming for more details. Copyright © 2014 Future Technology Devices International Limited 79 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4 Display list commands The graphics engine of FT800 takes the instructions from display list memory RAM_DL in the form of commands. Each command is 4 bytes long and one display list can be filled up to 2048 commands since the size of RAM_DL is 8K bytes. The graphics engine of the FT800 performs respective operation according to the definition of commands. 4.1 Graphics State The graphics state which controls drawing is stored in the graphics context. Individual pieces of state can be changed by the appropriate display list commands (e.g. COLOR_RGB) and the entire state can be saved and restored using the SAVE_CONTEXT and RESTORE_CONTEXT commands. Note that the bitmap drawing state is special: Although the bitmap handle is part of the graphics context, the parameters for each bitmap handle are not part of the graphics context. They are neither saved nor restored by SAVE_CONTEXT and RESTORE_CONTEXT. These parameters are changed using the BITMAP_SOURCE, BITMAP_LAYOUT, and BITMAP_SIZE commands. Once these parameters are set up, they can be utilized at any display list until they were changed. SAVE_CONTEXT and RESTORE_CONTEXT are comprised of a 4 level stack in addition to the current graphics context. The table below details the various parameters in the graphics context. Table 3 Graphics Context Parameters Default values Commands func & ref ALWAYS, 0 ALPHA_FUNC func & ref ALWAYS, 0 STENCIL_FUNC Src & dst SRC_ALPHA, ONE_MINUS_SRC_ALPHA BLEND_FUNC Cell value 0 CELL Alpha value 0 COLOR_A Red, Blue, Green colors (255,255,255) COLOR_RGB Line width in 1/16 pixels 16 LINE_WIDTH Point size in 1/16 pixels 16 POINT_SIZE Width & height of scissor 512,512 SCISSOR_SIZE (x, y) = (0,0) SCISSOR_XY Current bitmap handle 0 BITMAP_HANDLE Bitmap transform +1.0,0,0,0,+1.0,0 BITMAP_TRANSFORM_A-F Starting scissor coordinates of Copyright © 2014 Future Technology Devices International Limited 80 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 Parameters coefficients Default values Commands Stencil clear value 0 CLEAR_STENCIL Tag clear value 0 CLEAR_TAG Mask value of stencil 255 STENCIL_MASK spass and sfail KEEP,KEEP STENCIL_OP Tag buffer value 255 TAG Tag mask value 1 TAG_MASK Alpha clear value 0 CLEAR_COLOR_A RGB clear color (0,0,0) CLEAR_COLOR_RGB Each display list command in this section lists any graphics context it sets. 4.2 Command encoding Each display list command has a 32-bit encoding. The most significant bits of the code determine the command. Command parameters (if any) are present in the least significant bits. Any bits marked reserved must be zero. The graphics primitives supported by FT800 and their respective values are mentioned below Table 4 FT800 Graphics Primitives list Graphics Primitive Primitive value BITMAPS 1 POINTS 2 LINES 3 LINE_STRIP 4 EDGE_STRIP_R 5 EDGE_STRIP_L 6 EDGE_STRIP_A 7 EDGE_STRIP_B 8 RECTS 9 Various bitmap formats supported by FT800 and their respective values are mentioned below Copyright © 2014 Future Technology Devices International Limited 81 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 Table 5 Graphics Bitmap Format table Bitmap format Bitmap format value ARGB1555 0 L1 1 L4 2 L8 3 RGB332 4 ARGB2 5 ARGB4 6 RGB565 7 PALETTED 8 TEXT8X8 9 TEXTVGA 10 BARGRAPH 11 4.3 Command groups 4.3.1 Setting Graphics state ALPHA_FUNC set the alpha test function BITMAP_HANDLE set the bitmap handle BITMAP_LAYOUT set the source bitmap memory format and layout for the current handle BITMAP_SIZE set the screen drawing of bitmaps for the current handle BITMAP_SOURCE set the source address for bitmap graphics BITMAP_TRANSFORM_A-F set the components of the bitmap transform matrix BLEND_FUNC set pixel arithmetic CELL set the bitmap cell number for the VERTEX2F command CLEAR clear buffers to preset values CLEAR_COLOR_A set clear value for the alpha channel CLEAR_COLOR_RGB set clear values for red, green and blue channels CLEAR_STENCIL set clear value for the stencil buffer CLEAR_TAG set clear value for the tag buffer COLOR_A set the current color alpha Copyright © 2014 Future Technology Devices International Limited 82 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 COLOR_MASK enable or disable writing of color components COLOR_RGB set the current color red, green and blue LINE_WIDTH set the line width POINT_SIZE set point size RESTORE_CONTEXT restore the current graphics context from the context stack SAVE_CONTEXT push the current graphics context on the context stack SCISSOR_SIZE set the size of the scissor clip rectangle SCISSOR_XY set the top left corner of the scissor clip rectangle STENCIL_FUNC set function and reference value for stencil testing STENCIL_MASK control the writing of individual bits in the stencil planes STENCIL_OP set stencil test actions TAG set the current tag value TAG_MASK control the writing of the tag buffer 4.3.2 Drawing actions BEGIN start drawing a graphics primitive END finish drawing a graphics primitive VERTEX2F supply a vertex with fractional coordinates VERTEX2II supply a vertex with positive integer coordinates 4.3.3 Execution control JUMP execute commands at another location in the display list MACRO execute a single command from a macro register CALL execute a sequence of commands at another location in the display list RETURN return from a previous CALL command DISPLAY end the display list Copyright © 2014 Future Technology Devices International Limited 83 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.4 ALPHA_FUNC Specify the alpha test function Encoding 31 24 0x09 23 11 10 Reserved 8 func 7 6 5 4 3 2 1 0 ref Parameters func Specifies the test function, one of NEVER, LESS, LEQUAL, GREATER, GEQUAL, EQUAL, NOTEQUAL, or ALWAYS. The initial value is ALWAYS (7) NAME NEVER LESS LEQUAL GREATER GEQUAL EQUAL NOTEQUAL ALWAYS VALUE 0 1 2 3 4 5 6 7 Figure 8: The constants of ALPHA_FUNC ref Specifies the reference value for the alpha test. The initial value is 0 Graphics context The values of func and ref are part of the graphics context, as described in section 4.1 See also None Copyright © 2014 Future Technology Devices International Limited 84 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.5 BEGIN Begin drawing a graphics primitive Encoding 31 24 23 4 0x1F Reserved 3 2 1 0 prim Parameters prim Graphics primitive. The valid value is defined as below: Table 6 FT800 graphics primitive operation definition NAME BITMAPS POINTS LINES VALUE 1 2 3 LINE_STRIP 4 EDGE_STRIP_R 5 EDGE_STRIP_L 6 EDGE_STRIP_A 7 EDGE_STRIP_B 8 RECTS 9 Description Bitmap drawing primitive Point drawing primitive Line drawing primitive Line strip drawing primitive Edge strip right side drawing primitive Edge strip left side drawing primitive Edge strip above drawing primitive Edge strip below side drawing primitive Rectangle drawing primitive Description All primitives supported by the FT800 are defined in the table above. The primitive to be drawn is selected by the BEGIN command. Once the primitive is selected, it will be valid till the new primitive is selected by the BEGIN command. Please note that the primitive drawing operation will not be performed until VERTEX2II or VERTEX2F is executed. Examples Copyright © 2014 Future Technology Devices International Limited 85 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 Drawing points, lines and bitmaps: dl( BEGIN(POINTS) ); dl( VERTEX2II(50, 5, 0, 0) ); dl( VERTEX2II(110, 15, 0, 0) ); dl( BEGIN(LINES) ); dl( VERTEX2II(50, 45, 0, 0) ); dl( VERTEX2II(110, 55, 0, 0) ); dl( BEGIN(BITMAPS) ); dl( VERTEX2II(50, 65, 31, 0x45) ); dl( VERTEX2II(110, 75, 31, 0x46) ); Graphics context None See also END Copyright © 2014 Future Technology Devices International Limited 86 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.6 BITMAP_HANDLE Specify the bitmap handle Encoding 31 24 23 0x05 5 reserved 4 3 2 1 0 handle Parameters handle Bitmap handle. The initial value is 0. The valid value range is from 0 to 31. Description Handles 16 to 31 are defined by the FT800 for built-in font and handle 15 is defined in the co-processor engine commands CMD_GRADIENT, CMD_BUTTON and CMD_KEYS. Users can define new bitmaps using handles from 0 to 14. If there is no co-processor engine command CMD_GRADIENT, CMD_BUTTON and CMD_KEYS in the current display list, users can even define a bitmap using handle 15. Graphics context The value of handle is part of the graphics context, as described in section 4.1 See also BITMAP_LAYOUT, BITMAP_SIZE Copyright © 2014 Future Technology Devices International Limited 87 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.7 BITMAP_LAYOUT Specify the source bitmap memory format and layout for the current handle. Encoding 31 24 0x07 23 22 21 20 19 18 format 9 linestride 8 0 Height Parameters format Bitmap pixel format. The valid range is from 0 to 11 and defined as per the table below. Table 7 BITMAP_LAYOUT format list NAME ARGB1555 L1 L4 L8 RGB332 ARGB2 ARGB4 RGB565 PALETTED TEXT8X8 TEXTVGA BARGRAPH VALUE 0 1 2 3 4 5 6 7 8 9 10 11 Various bitmap formats supported are: Copyright © 2014 Future Technology Devices International Limited 88 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 BARGRAPH - render data as a bar graph. Looks up the x coordinate in a byte array, then gives an opaque pixel if the byte value is less than y, otherwise a transparent pixel. The result is a bar graph of the bitmap data. A maximum of 256x256 size bitmap can be drawn using the BARGRAPH format. Orientation, width and height of the graph can be altered using the bitmap transform matrix. TEXT8X8 - lookup in a fixed 8x8 font. The bitmap is a byte array present in the graphics ram and each byte indexes into an internal 8x8 CP437 [2] font (inbuilt font bitmap handles 16 & 17 are used for drawing TEXT8X8 format). The result is that the bitmap acts like a character grid. A single bitmap can be drawn which covers all or part of the display; each byte in the bitmap data corresponds to one 8x8 pixel character cell. Copyright © 2014 Future Technology Devices International Limited 89 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 TEXTVGA – lookup in a fixed 8x16 font with TEXTVGA syntax. The bitmap is a TEXTVGA array present in the graphics ram, each element indexes into an internal 8x16 CP437 [2] font (inbuilt font bitmap handles 18 & 19 are used for drawing TEXTVGA format with control information such as background color, foreground color and cursor etc). The result is that the bitmap acts like a TEXTVGA grid. A single bitmap can be drawn which covers all or part of the display; each TEXTVGA data type in the bitmap corresponds to one 8x16 pixel character cell. PALETTED - bitmap bytes are indices into a palette table. By using a palette table which contains 32-bit RGBA colors - a significant amount of memory can be saved. The 256 color palette is stored in a dedicated 1K (256x4) byte RAM_PAL. linestride Bitmap linestride, in bytes. Please note the alignment requirement which is described below. height Bitmap height, in lines Description The bitmap formats supported are L1, L4, L8, RGB332, ARGB2, ARGB4, ARGB1555, RGB565 and Palette. For L1 format, the line stride must be a multiple of 8 bits; For L4 format the line stride must be multiple of 2 nibbles. (Aligned to byte) For more details about alignment, please refer to the figures below: Copyright © 2014 Future Technology Devices International Limited 90 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 L1 format layout Pixel 0 Bit 7 Pixel 1 Bit 6 …… Clearance No.: FTDI#349 Byte Order Byte 0 Pixel 7 Bit 0 L4 format layout Pixel 0 Bit 7-4 Pixel 1 Bit 3-0 L8 format layout Pixel 0 Bit 7-0 pixel 1 Bit 15-8 pixel 2 Bit 23-16 Byte Order Byte 0 Byte Order Byte 0 Byte 1 Byte 2 Figure 9: Pixel format for L1/L4/L8 ARGB2 format layout A R G B Bit 7-6 Bit 5-4 Bit 3-2 Bit 1-0 ARGB1555 format layout A R G B Bit 15 Bit 14-10 Bit 9- 5 Bit 4-0 Byte Order Byte 0 Byte Order Byte 1 Byte 0 Figure 10: Pixel format for ARGB2/1555 Copyright © 2014 Future Technology Devices International Limited 91 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 ARGB4 format layout A R G B Bit 15-12 Bit 11-8 Bit 7-4 Bit 3-0 RGB332 pixel layout R G B Bit 7-5 Bit 4-2 Bit 1-0 RGB565 format layout R G B A R G B Bit 15-11 Bit 10-5 Bit 4-0 Palette format layout Bit 31-24 Bit 23-16 Bit 15-8 Bit 7-0 Clearance No.: FTDI#349 Byte Order Byte 1 Byte 0 Byte Order Byte 0 Byte Order Byte 1 Byte 0 Byte Order Byte 3 Byte 2 Byte 1 Byte 0 Figure 11: Pixel format for ARGB4, RGB332, RGB565 and Palette Graphics context None See also BITMAP_HANDLE, BITMAP_SIZE, BITMAP_SOURCE Copyright © 2014 Future Technology Devices International Limited 92 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.8 BITMAP_SIZE Specify the screen drawing of bitmaps for the current handle Encoding 31 24 0x08 23 21 reserved 20 19 18 filter wrapx wrapy 17 9 width 8 0 height Parameters filter Bitmap filtering mode, one of NEAREST or BILINEAR The value of NEAREST is 0 and the value of BILINEAR is 1. wrapx Bitmap x wrap mode, one of REPEAT or BORDER The value of BORDER is 0 and the value of REPEAT is 1. wrapy Bitmap y wrap mode, one of REPEAT or BORDER width Drawn bitmap width, in pixels height Drawn bitmap height, in pixels Description This command controls the drawing of bitmaps: the on-screen size of the bitmap, the behavior for wrapping, and the filtering function. Please note that if wrapx or wrapy is REPEAT then the corresponding memory layout dimension (BITMAP_LAYOUT line stride or height) must be power of two, otherwise the result is undefined. For parameter width and height, the value from 1 to 511 means the bitmap width and height in pixel. The value of zero means the 512 pixels in width or height. Copyright © 2014 Future Technology Devices International Limited 93 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 Examples Drawing a 64 x 64 bitmap: dl( BITMAP_SOURCE(0) ); dl( BITMAP_LAYOUT(RGB565, 128, 64) ); dl( BITMAP_SIZE(NEAREST, BORDER, 64, 64) ); BORDER, dl( BEGIN(BITMAPS) ); dl( VERTEX2II(48, 28, 0, 0) ); Reducing the size to 32 x 50: dl( BITMAP_SOURCE(0) ); dl( BITMAP_LAYOUT(RGB565, 128, 64) ); dl( BITMAP_SIZE(NEAREST, BORDER, 32, 50) ); BORDER, dl( BEGIN(BITMAPS) ); dl( VERTEX2II(48, 28, 0, 0) ); Using the REPEAT wrap mode to tile the bitmap: dl( BITMAP_SOURCE(0) ); dl( BITMAP_LAYOUT(RGB565, 128, 64) ); dl( BITMAP_SIZE(NEAREST, REPEAT, 160, 120) ); REPEAT, dl( BEGIN(BITMAPS) ); dl( VERTEX2II(0, 0, 0, 0) ); 4X zoom - 128 X 128 - using a bitmap transform: Copyright © 2014 Future Technology Devices International Limited 94 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 dl( BITMAP_SOURCE(0) ); dl( BITMAP_LAYOUT(RGB565, 128, 64) ); dl( BITMAP_TRANSFORM_A(128) ); dl( BITMAP_TRANSFORM_E(128) ); dl( BITMAP_SIZE(NEAREST, BORDER, 128, 128) ); BORDER, dl( BEGIN(BITMAPS) ); dl( VERTEX2II(16, 0, 0, 0) ); Using a bilinear filter makes the zoomed image a little smoother: dl( BITMAP_SOURCE(0) ); dl( BITMAP_LAYOUT(RGB565, 128, 64) ); dl( BITMAP_TRANSFORM_A(128) ); dl( BITMAP_TRANSFORM_E(128) ); dl( BITMAP_SIZE(BILINEAR, BORDER, 128, 128) ); BORDER, dl( BEGIN(BITMAPS) ); dl( VERTEX2II(16, 0, 0, 0) ); Graphics context None See also BITMAP_HANDLE, BITMAP_LAYOUT, BITMAP_SOURCE Copyright © 2014 Future Technology Devices International Limited 95 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.9 BITMAP_SOURCE Specify the source address of bitmap data in FT800 graphics memory RAM_G. Encoding 31 24 0x01 23 20 Reserved 19 0 addr Parameters addr Bitmap address in graphics SRAM FT800, aligned with respect to the bitmap format. For example, if the bitmap format is RGB565/ARGB4/ARGB1555, the bitmap source shall be aligned to 2 bytes. Description The bitmap source address is normally the address in main memory where the bitmap graphic data is loaded. Examples Drawing a 64 x 64 bitmap, loaded at address 0: dl( BITMAP_SOURCE(0) ); dl( BITMAP_LAYOUT(RGB565, 128, 64) ); dl( BITMAP_SIZE(NEAREST, BORDER, 64, 64) ); BORDER, dl( BEGIN(BITMAPS) ); dl( VERTEX2II(48, 28, 0, 0) ); Using the same graphics data, but with source and size changed to show only a 32 x 32 detail: dl( BITMAP_SOURCE(128 * 16 + 32) ); dl( BITMAP_LAYOUT(RGB565, 128, 64) ); dl( BITMAP_SIZE(NEAREST, BORDER, 32, 32) ); BORDER, dl( BEGIN(BITMAPS) ); dl( VERTEX2II(48, 28, 0, 0) ); Copyright © 2014 Future Technology Devices International Limited 96 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 Graphics context None See also BITMAP_LAYOUT, BITMAP_SIZE Copyright © 2014 Future Technology Devices International Limited 97 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.10 BITMAP_TRANSFORM_A Specify the A coefficient of the bitmap transform matrix. Encoding 31 24 0x15 23 17 16 Reserved 0 a Parameters a Coefficient A of the bitmap transform matrix, in signed 8.8 bit fixed-point form. The initial value is 256. Description BITMAP_TRANSFORM_A-F coefficients are used to perform bitmap transform functionalities such as scaling, rotation and translation. These are similar to openGL transform functionality. Examples A value of 0.5 (128) causes the bitmap appear double width: dl( BITMAP_SOURCE(0) ); dl( BITMAP_LAYOUT(RGB565, 128, 64) ); dl( BITMAP_TRANSFORM_A(128) ); dl( BITMAP_SIZE(NEAREST, BORDER, 128, 128) ); BORDER, dl( BEGIN(BITMAPS) ); dl( VERTEX2II(16, 0, 0, 0) ); A value of 2.0 (512) gives a half-width bitmap: dl( BITMAP_SOURCE(0) ); dl( BITMAP_LAYOUT(RGB565, 128, 64) ); dl( BITMAP_TRANSFORM_A(512) ); dl( BITMAP_SIZE(NEAREST, BORDER, 128, 128) ); BORDER, dl( BEGIN(BITMAPS) ); dl( VERTEX2II(16, 0, 0, 0) ); Graphics context Copyright © 2014 Future Technology Devices International Limited 98 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 The value of a is part of the graphics context, as described in section 4.1 See also None Copyright © 2014 Future Technology Devices International Limited 99 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.11 BITMAP_TRANSFORM_B Specify the B coefficient of the bitmap transform matrix Encoding 31 24 0x16 23 17 Reserved 16 0 b Parameters b Coefficient B of the bitmap transform matrix, in signed 8.8 bit fixed-point form. The initial value is 0 Description BITMAP_TRANSFORM_A-F coefficients are used to perform bitmap transform functionalities such as scaling, rotation and translation. These are similar to openGL transform functionality. Graphics context The value of B is part of the graphics context, as described in section 4.1 See also None Copyright © 2014 Future Technology Devices International Limited 100 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.12 BITMAP_TRANSFORM_C Specify the C coefficient of the bitmap transform matrix Encoding 31 24 0x17 23 0 c Parameters c Coefficient C of the bitmap transform matrix, in signed 15.8 bit fixed-point form. The initial value is 0 Description BITMAP_TRANSFORM_A-F coefficients are used to perform bitmap transform functionalities such as scaling, rotation and translation. These are similar to openGL transform functionality. Graphics context The value of c is part of the graphics context, as described in section 4.1 See also None Copyright © 2014 Future Technology Devices International Limited 101 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.13 BITMAP_TRANSFORM_D Specify the D coefficient of the bitmap transform matrix Encoding 31 24 0x18 23 17 Reserved 16 0 d Parameters d Coefficient D of the bitmap transform matrix, in signed 8.8 bit fixed-point form. The initial value is 0 Description BITMAP_TRANSFORM_A-F coefficients are used to perform bitmap transform functionalities such as scaling, rotation and translation. These are similar to openGL transform functionality. Graphics context The value of d is part of the graphics context, as described in section 4.1 See also None Copyright © 2014 Future Technology Devices International Limited 102 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.14 BITMAP_TRANSFORM_E Specify the E coefficient of the bitmap transform matrix Encoding 31 24 0x19 23 17 16 Reserved 0 e Parameters e Coefficient E of the bitmap transform matrix, in signed 8.8 bit fixed-point form. The initial value is 256 Description BITMAP_TRANSFORM_A-F coefficients are used to perform bitmap transform functionalities such as scaling, rotation and translation. These are similar to openGL transform functionality. Examples A value of 0.5 (128) causes the bitmap appear double height: dl( BITMAP_SOURCE(0) ); dl( BITMAP_LAYOUT(RGB565, 128, 64) ); dl( BITMAP_TRANSFORM_E(128) ); dl( BITMAP_SIZE(NEAREST, BORDER, 128, 128) ); BORDER, dl( BEGIN(BITMAPS) ); dl( VERTEX2II(16, 0, 0, 0) ); A value of 2.0 (512) gives a half-height bitmap: dl( BITMAP_SOURCE(0) ); dl( BITMAP_LAYOUT(RGB565, 128, 64) ); dl( BITMAP_TRANSFORM_E(512) ); dl( BITMAP_SIZE(NEAREST, BORDER, 128, 128) ); BORDER, dl( BEGIN(BITMAPS) ); dl( VERTEX2II(16, 0, 0, 0) ); Graphics context Copyright © 2014 Future Technology Devices International Limited 103 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 The value of e is part of the graphics context, as described in section 4.1 See also None Copyright © 2014 Future Technology Devices International Limited 104 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.15 BITMAP_TRANSFORM_F Specify the F coefficient of the bitmap transform matrix Encoding 31 24 0x1A 23 0 f Parameters f Coefficient F of the bitmap transform matrix, in signed 15.8 bit fixed-point form. The initial value is 0 Description BITMAP_TRANSFORM_A-F coefficients are used to perform bitmap transform functionalities such as scaling, rotation and translation. These are similar to openGL transform functionality. Graphics context The value of f is part of the graphics context, as described in section 4.1 See also None Copyright © 2014 Future Technology Devices International Limited 105 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.16 BLEND_FUNC Specify pixel arithmetic Encoding 31 24 23 6 0x0B reserved 5 3 src 2 0 dst Parameters src Specifies how the source blending factor is computed. One of ZERO, ONE, SRC_ALPHA, DST_ALPHA, ONE_MINUS_SRC_ALPHA or ONE_MINUS_DST_ALPHA. The initial value is SRC_ALPHA (2). dst Specifies how the destination blending factor is computed, one of the same constants as src. The initial value is ONE_MINUS_SRC_ALPHA(4) Table 8 BLEND_FUNC constant value definition NAME ZERO ONE SRC_ALPHA DST_ALPHA ONE_MINUS_SRC_ALPHA ONE_MINUS_DST_ALPHA VALUE 0 1 2 3 4 5 Description Check openGL definition Check openGL definition Check openGL definition Check openGL definition Check openGL definition Check openGL definition Description The blend function controls how new color values are combined with the values already in the color buffer. Given a pixel value source and a previous value in the color buffer destination, the computed color is: source × src + destination × dst for each color channel: red, green, blue and alpha. Examples The default blend function of (SRC_ALPHA, ONE_MINUS_SRC_ALPHA) causes drawing to overlay the destination using the alpha value: Copyright © 2014 Future Technology Devices International Limited 106 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 dl( BEGIN(BITMAPS) ); dl( VERTEX2II(50, 30, 31, 0x47) ); dl( COLOR_A( 128 ) ); dl( VERTEX2II(60, 40, 31, 0x47) ); A destination factor of zero means that destination pixels are not used: dl( BEGIN(BITMAPS) ); dl( BLEND_FUNC(SRC_ALPHA, ZERO) ); dl( VERTEX2II(50, 30, 31, 0x47) ); dl( COLOR_A( 128 ) ); dl( VERTEX2II(60, 40, 31, 0x47) ); Using the source alpha to control how much of the destination to keep: dl( BEGIN(BITMAPS) ); dl( BLEND_FUNC(ZERO, SRC_ALPHA) ); dl( VERTEX2II(50, 30, 31, 0x47) ); Graphics context The values of src and dst are part of the graphics context, as described in section 4.1 See also COLOR_A Copyright © 2014 Future Technology Devices International Limited 107 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.17 CALL Execute a sequence of commands at another location in the display list Encoding 31 24 0x1D 23 16 Reserved 15 0 dest Parameters dest The destination address in RAM_DL which the display command is to be switched. FT800 has the stack to store the return address. To come back to the next command of source address, the RETURN command can help. Description CALL and RETURN have a 4 level stack in addition to the current pointer. Any additional CALL/RETURN done will lead to unexpected behavior. Graphics context None See also JUMP, RETURN Copyright © 2014 Future Technology Devices International Limited 108 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.18 CELL Specify the bitmap cell number for the VERTEX2F command. Encoding 31 24 0x06 23 7 6 Reserved 0 Cell Parameters cell bitmap cell number. The initial value is 0 Graphics context The value of cell is part of the graphics context, as described in section 4.1 See also None Copyright © 2014 Future Technology Devices International Limited 109 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.19 CLEAR Clear buffers to preset values Encoding 31 24 23 0x26 3 Reserved 2 1 0 C S T Parameters c Clear color buffer. Setting this bit to 1 will clear the color buffer of the FT800 to the preset value. Setting this bit to 0 will maintain the color buffer of the FT800 with an unchanged value. The preset value is defined in command CLEAR_COLOR_RGB for RGB channel and CLEAR_COLOR_A for alpha channel. s Clear stencil buffer. Setting this bit to 1 will clear the stencil buffer of the FT800 to the preset value. Setting this bit to 0 will maintain the stencil buffer of the FT800 with an unchanged value. The preset value is defined in command CLEAR_STENCIL. t Clear tag buffer. Setting this bit to 1 will clear the tag buffer of the FT800 to the preset value. Setting this bit to 0 will maintain the tag buffer of the FT800 with an unchanged value. The preset value is defined in command CLEAR_TAG. Description The scissor test and the buffer write masks affect the operation of the clear. Scissor limits the cleared rectangle, and the buffer write masks limit the affected buffers. The state of the alpha function, blend function, and stenciling do not affect the clear. Examples To clear the screen to bright blue: dl( CLEAR_COLOR_RGB(0, 0, 255) ); dl( CLEAR(1, 0, 0) ); To clear part of the screen to gray, part to blue using scissor rectangles: Copyright © 2014 Future Technology Devices International Limited 110 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 dl( CLEAR_COLOR_RGB(100, 100, 100) ); dl( CLEAR(1, 1, 1) ); dl( CLEAR_COLOR_RGB(0, 0, 255) ); dl( SCISSOR_SIZE(30, 120) ); dl( CLEAR(1, 1, 1) ); Graphics context None See also CLEAR_COLOR_A, CLEAR_STENCIL, CLEAR_TAG, CLEAR_COLOR_RGB Copyright © 2014 Future Technology Devices International Limited 111 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.20 CLEAR_COLOR_A Specify clear value for the alpha channel Encoding 32 24 23 0x0F 8 Reserved 7 0 Alpha Parameters alpha Alpha value used when the color buffer is cleared. The initial value is 0 Graphics context The value of alpha is part of the graphics context, as described in section 4.1 See also CLEAR_COLOR_RGB, CLEAR Copyright © 2014 Future Technology Devices International Limited 112 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.21 CLEAR_COLOR_RGB Specify clear values for red, green and blue channels Encoding 31 24 0x02 23 16 Red 15 8 7 Blue 0 Green Parameters red Red value used when the color buffer is cleared. The initial value is 0 green Green value used when the color buffer is cleared. The initial value is 0 blue Blue value used when the color buffer is cleared. The initial value is 0 Description Sets the color values used by a following CLEAR. Examples To clear the screen to bright blue: dl( CLEAR_COLOR_RGB(0, 0, 255) ); dl( CLEAR(1, 1, 1) ); To clear part of the screen to gray, part to blue using scissor rectangles: dl( CLEAR_COLOR_RGB(100, 100, 100) ); dl( CLEAR(1, 1, 1) ); dl( CLEAR_COLOR_RGB(0, 0, 255) ); dl( SCISSOR_SIZE(30, 120) ); dl( CLEAR(1, 1, 1) ); Copyright © 2014 Future Technology Devices International Limited 113 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 Graphics context The values of red, green and blue are part of the graphics context, as described in section 4.1 See also CLEAR_COLOR_A, CLEAR Copyright © 2014 Future Technology Devices International Limited 114 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.22 CLEAR_STENCIL Specify clear value for the stencil buffer Encoding 31 24 0x11 23 8 Reserved 7 0 s Parameters s Value used when the stencil buffer is cleared. The initial value is 0 Graphics context The value of s is part of the graphics context, as described in section 4.1 See also CLEAR Copyright © 2014 Future Technology Devices International Limited 115 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.23 CLEAR_TAG Specify clear value for the tag buffer Encoding 31 24 23 0x12 8 7 Reserved 0 t Parameters t Value used when the tag buffer is cleared. The initial value is 0. Graphics context The value of s is part of the graphics context, as described in section 4.1 See also TAG, TAG_MASK, CLEAR Copyright © 2014 Future Technology Devices International Limited 116 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.24 COLOR_A Set the current color alpha Encoding 31 24 23 0x10 8 7 Reserved 0 alpha Parameters alpha Alpha for the current color. The initial value is 255 Description Sets the alpha value applied to drawn elements - points, lines, and bitmaps. How the alpha value affects image pixels depends on BLEND_FUNC; the default behavior is a transparent blend. Examples Drawing three characters with transparency 255, 128, and 64: dl( BEGIN(BITMAPS) ); dl( VERTEX2II(50, 30, 31, 0x47) ); dl( COLOR_A( 128 ) ); dl( VERTEX2II(58, 38, 31, 0x47) ); dl( COLOR_A( 64 ) ); dl( VERTEX2II(66, 46, 31, 0x47) ); Graphics context The value of alpha is part of the graphics context, as described in section 4.1 See also COLOR_RGB, BLEND_FUNC Copyright © 2014 Future Technology Devices International Limited 117 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.25 COLOR_MASK Enable or disable writing of color components Encoding 31 24 0x20 23 4 reserved 3 2 1 0 r g b a Parameters r Enable or disable the red channel update of the FT800 color buffer. The initial value is 1 and means enable. g Enable or disable the green channel update of the FT800 color buffer. The initial value is 1 and means enable. b Enable or disable the blue channel update of the FT800 color buffer. The initial value is 1 and means enable. a Enable or disable the alpha channel update of the FT800 color buffer. The initial value is 1 and means enable. Description The color mask controls whether the color values of a pixel are updated. Sometimes it is used to selectively update only the red, green, blue or alpha channels of the image. More often, it is used to completely disable color updates while updating the tag and stencil buffers. Examples Draw a '8' digit in the middle of the screen. Then paint an invisible 40-pixel circular touch area into the tag buffer: dl( BEGIN(BITMAPS) ); dl( VERTEX2II(68, 40, 31, 0x38) ); dl( POINT_SIZE(40 * 16) ); dl( COLOR_MASK(0, 0, 0, 0) ); dl( BEGIN(POINTS) ); dl( TAG( 0x38 ) ); dl( VERTEX2II(80, 60, 0, 0) ); Copyright © 2014 Future Technology Devices International Limited 118 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 Graphics context The values of r, g, b and a are part of the graphics context, as described in section 4.1 See also TAG_MASK Copyright © 2014 Future Technology Devices International Limited 119 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.26 COLOR_RGB Set the current color red, green and blue Encoding 31 24 0x04 23 Red 16 15 8 Blue 7 0 Green Parameters red Red value for the current color. The initial value is 255 green Green value for the current color. The initial value is 255 blue Blue value for the current color. The initial value is 255 Description Sets red, green and blue values of the FT800 color buffer which will be applied to the following draw operation. Examples Drawing three characters with different colors: dl( BEGIN(BITMAPS) ); dl( VERTEX2II(50, 38, 31, 0x47) ); dl( COLOR_RGB( 255, 100, 50 ) ); dl( VERTEX2II(80, 38, 31, 0x47) ); dl( COLOR_RGB( 50, 100, 255 ) ); dl( VERTEX2II(110, 38, 31, 0x47) ); Graphics context The values of red, green and blue are part of the graphics context, as described in section 4.1 See also COLOR_A Copyright © 2014 Future Technology Devices International Limited 120 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.27 DISPLAY End the display list. FT800 will ignore all the commands following this command. Encoding 31 24 0x0 23 0 Reserved Parameters None Graphics context None See also None Copyright © 2014 Future Technology Devices International Limited 121 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.28 END End drawing a graphics primitive. Encoding 31 24 0x21 23 0 Reserved Parameters None Description It is recommended to have an END for each BEGIN. Whereas advanced users can avoid the usage of END in order to save extra graphics instructions in the display list RAM. Graphics context None See also BEGIN Copyright © 2014 Future Technology Devices International Limited 122 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.29 JUMP Execute commands at another location in the display list Encoding 31 24 0x1E 23 16 Reserved 15 0 dest Parameters dest Display list address to be jumped. Graphics context None See also CALL Copyright © 2014 Future Technology Devices International Limited 123 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.30 LINE_WIDTH Specify the width of lines to be drawn with primitive LINES in 1/16th pixel precision. Encoding 31 24 0x0E 23 12 11 Reserved 0 width Parameters width Line width in 1/16 pixel. The initial value is 16. Description Sets the width of drawn lines. The width is the distance from the center of the line to the outermost drawn pixel, in units of 1/16 pixel. The valid range is from 16 to 4095 in terms of 1/16th pixel units. Please note the LINE_WIDTH command will affect the LINES, LINE_STRIP, RECTS, EDGE_STRIP_A/B/R/L primitives. Examples The second line is drawn with a width of 80, for a 5 pixel radius: dl( BEGIN(LINES) ); dl( VERTEX2F(16 * 10, 16 * 30) ); dl( VERTEX2F(16 * 150, 16 * 40) ); dl( LINE_WIDTH(80) ); dl( VERTEX2F(16 * 10, 16 * 80) ); dl( VERTEX2F(16 * 150, 16 * 90) ); Graphics context The value of width is part of the graphics context, as described in section 4.1 See also None Copyright © 2014 Future Technology Devices International Limited 124 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.31 MACRO Execute a single command from a macro register. Encoding 31 24 0x25 23 1 Reserved 0 m Parameters m Macro register to read. Value 0 means the FT800 will fetch the command from REG_MACRO_0 to execute. Value 1 means the FT800 will fetch the command from REG_MACRO_1 to execute. The content of REG_MACRO_0 or REG_MACRO_1 shall be a valid display list command, otherwise the behavior is undefined. Graphics context None See also None Copyright © 2014 Future Technology Devices International Limited 125 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.32 POINT_SIZE Specify the radius of points Encoding 31 24 0x0D 23 17 16 Reserved 0 Size Parameters size Point radius in 1/16 pixel. The initial value is 16. Description Sets the size of drawn points. The width is the distance from the center of the point to the outermost drawn pixel, in units of 1/16 pixels. The valid range is from 16 to 8191 with respect to 1/16th pixel unit. Examples The second point is drawn with a width of 160, for a 10 pixel radius: dl( BEGIN(POINTS) ); dl( VERTEX2II(40, 30, 0, 0) ); dl( POINT_SIZE(160) ); dl( VERTEX2II(120, 90, 0, 0) ); Graphics context The value of size is part of the graphics context, as described in section 4.1 See also None Copyright © 2014 Future Technology Devices International Limited 126 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.33 RESTORE_CONTEXT Restore the current graphics context from the context stack Encoding 31 24 0x23 23 0 Reserved Parameters None Description Restores the current graphics context, as described in section 4.1. Four (4) levels of SAVE and RESTORE are available in the FT800. Any extra RESTORE_CONTEXT will load the default values into the present context. Examples Saving and restoring context means that the second 'G' is drawn in red, instead of blue: dl( BEGIN(BITMAPS) ); dl( COLOR_RGB( 255, 0, 0 ) ); dl( SAVE_CONTEXT() ); dl( COLOR_RGB( 50, 100, 255 ) ); dl( VERTEX2II(80, 38, 31, 0x47) ); dl( RESTORE_CONTEXT() ); dl( VERTEX2II(110, 38, 31, 0x47) ); Graphics context None See also SAVE_CONTEXT Copyright © 2014 Future Technology Devices International Limited 127 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.34 RETURN Return from a previous CALL command. Encoding 31 24 0x24 23 0 Reserved Parameters None Description CALL and RETURN have 4 levels of stack in addition to the current pointer. Any additional CALL/RETURN done will lead to unexpected behavior. Graphics context None See also CALL Copyright © 2014 Future Technology Devices International Limited 128 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.35 SAVE CONTEXT Push the current graphics context on the context stack Encoding 31 24 23 0x22 0 Reserved Parameters None Description Saves the current graphics context, as described in section 4.1. Any extra SAVE_CONTEXT will throw away the earliest saved context. Examples Saving and restoring context means that the second 'G' is drawn in red, instead of blue: dl( BEGIN(BITMAPS) ); dl( COLOR_RGB( 255, 0, 0 ) ); dl( SAVE_CONTEXT() ); dl( COLOR_RGB( 50, 100, 255 ) ); dl( VERTEX2II(80, 38, 31, 0x47) ); dl( RESTORE_CONTEXT() ); dl( VERTEX2II(110, 38, 31, 0x47) ); Graphics context None See also RESTORE_CONTEXT Copyright © 2014 Future Technology Devices International Limited 129 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.36 SCISSOR_SIZE Specify the size of the scissor clip rectangle Encoding 31 24 0x1C 23 20 Reserved 19 10 9 Width 0 Height Parameters width The width of the scissor clip rectangle, in pixels. The initial value is 512. The valid value range is from 0 to 512. height The height of the scissor clip rectangle, in pixels. The initial value is 512. The valid value range is from 0 to 512. Description Sets the width and height of the scissor clip rectangle, which limits the drawing area. Examples Setting a 40 x 30 scissor rectangle clips the clear and bitmap drawing: dl( SCISSOR_XY(40, 30) ); dl( SCISSOR_SIZE(80, 60) ); dl( CLEAR_COLOR_RGB(0, 0, 255) ); dl( CLEAR(1, 1, 1) ); dl( BEGIN(BITMAPS) ); dl( VERTEX2II(35, 20, 31, 0x47) ); Graphics context The values of width and height are part of the graphics context 4.1 See also None Copyright © 2014 Future Technology Devices International Limited 130 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.37 SCISSOR_XY Specify the top left corner of the scissor clip rectangle Encoding 31 24 0x1B 23 19 Reserved 17 9 8 x 0 y Parameters x The x coordinate of the scissor clip rectangle, in pixels. The initial value is 0 y The y coordinate of the scissor clip rectangle, in pixels. The initial value is 0 Description Sets the top-left position of the scissor clip rectangle, which limits the drawing area. Examples Setting a 40 x 30 scissor rectangle clips the clear and bitmap drawing: dl( SCISSOR_XY(40, 30) ); dl( SCISSOR_SIZE(80, 60) ); dl( CLEAR_COLOR_RGB(0, 0, 255) ); dl( CLEAR(1, 1, 1) ); dl( BEGIN(BITMAPS) ); dl( VERTEX2II(35, 20, 31, 0x47) ); Graphics context The values of x and y are part of the graphics context 4.1 See also None Copyright © 2014 Future Technology Devices International Limited 131 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.38 STENCIL_FUNC Set function and reference value for stencil testing Encoding 31 24 0x0A 23 20 Reserved 19 16 func 15 8 7 ref 0 mask Parameters func Specifies the test function, one of NEVER, LESS, LEQUAL, GREATER, GEQUAL, EQUAL, NOTEQUAL, or ALWAYS. The initial value is ALWAYS. About the value of these constants, please check Figure 8: The constants of ALPHA_FUNC ref Specifies the reference value for the stencil test. The initial value is 0 mask Specifies a mask that is ANDed with the reference value and the stored stencil value. The initial value is 255 Description Stencil test rejects or accepts pixels depending on the result of the test function defined in func parameter, which operates on the current value in the stencil buffer against the reference value. Examples Draw two points, incrementing stencil at each pixel, then draw the pixels with value 2 in red: dl( STENCIL_OP(INCR, INCR) ); dl( POINT_SIZE(760) ); dl( BEGIN(POINTS) ); dl( VERTEX2II(50, 60, 0, 0) ); dl( VERTEX2II(110, 60, 0, 0) ); dl( STENCIL_FUNC(EQUAL, 2, 255) ); dl( COLOR_RGB(100, 0, 0) ); dl( VERTEX2II(80, 60, 0, 0) ); Graphics context The values of func, ref and mask are part of the graphics context, as described in section 4.1 See also STENCIL_OP, STENCIL_MASK Copyright © 2014 Future Technology Devices International Limited 132 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.39 STENCIL_MASK Control the writing of individual bits in the stencil planes Encoding 31 24 0x13 23 8 reserved 7 0 mask Parameters mask The mask used to enable writing stencil bits. The initial value is 255 Graphics context The value of mask is part of the graphics context, as described in section 4.1 See also STENCIL_FUNC, STENCIL_OP, TAG_MASK Copyright © 2014 Future Technology Devices International Limited 133 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.40 STENCIL_OP Set stencil test actions Encoding 31 24 0x0C 23 6 reserved 5 3 sfail 2 0 spass Parameters sfail Specifies the action to take when the stencil test fails, one of KEEP, ZERO, REPLACE, INCR, DECR, and INVERT. The initial value is KEEP (1) spass Specifies the action to take when the stencil test passes, one of the same constants as sfail. The initial value is KEEP (1) NAME ZERO KEEP REPLACE INCR DECR INVERT VALUE 0 1 2 3 4 5 Figure 12: STENCIL_OP constants definition Description The stencil operation specifies how the stencil buffer is updated. The operation selected depends on whether the stencil test passes or not. Copyright © 2014 Future Technology Devices International Limited 134 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 Examples Draw two points, incrementing stencil at each pixel, then draw the pixels with value 2 in red: dl( STENCIL_OP(INCR, INCR) ); dl( POINT_SIZE(760) ); dl( BEGIN(POINTS) ); dl( VERTEX2II(50, 60, 0, 0) ); dl( VERTEX2II(110, 60, 0, 0) ); dl( STENCIL_FUNC(EQUAL, 2, 255) ); dl( COLOR_RGB(100, 0, 0) ); dl( VERTEX2II(80, 60, 0, 0) ); Graphics context The values of sfail and spass are part of the graphics context, as described in section 4.1 See also STENCIL_FUNC, STENCIL_MASK Copyright © 2014 Future Technology Devices International Limited 135 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.41 TAG Attach the tag value for the following graphics objects drawn on the screen. The initial tag buffer value is 255. Encoding 31 24 23 0x03 8 7 Reserved 0 s Parameters s Tag value. Valid value range is from 1 to 255. Description The initial value of the tag buffer of the FT800 is specified by command CLEAR_TAG and taken effect by command CLEAR. TAG command can specify the value of the tag buffer of the FT800 that applies to the graphics objects when they are drawn on the screen. This TAG value will be assigned to all the following objects, unless the TAG_MASK command is used to disable it. Once the following graphics objects are drawn, they are attached with the tag value successfully. When the graphics objects attached with the tag value are touched, the register REG_TOUCH_TAG will be updated with the tag value of the graphics object being touched. If there is no TAG commands in one display list, all the graphics objects rendered by the display list will report tag value as 255 in REG_TOUCH_TAG when they were touched. Graphics context The value of s is part of the graphics context, as described in section 4.1 See also CLEAR_TAG, TAG_MASK Copyright © 2014 Future Technology Devices International Limited 136 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.42 TAG_MASK Control the writing of the tag buffer Encoding 31 24 1 Reserved 0 mask 0x14 23 Parameters mask Allow updates to the tag buffer. The initial value is one and it means the tag buffer of the FT800 is updated with the value given by the TAG command. Therefore, the following graphics objects will be attached to the tag value given by the TAG command. The value zero means the tag buffer of the FT800 is set as the default value, rather than the value given by TAG command in the display list. Description Every graphics object drawn on screen is attached with the tag value which is defined in the FT800 tag buffer. The FT800 tag buffer can be updated by TAG command. The default value of the FT800 tag buffer is determined by CLEAR_TAG and CLEAR commands. If there is no CLEAR_TAG command present in the display list, the default value in tag buffer shall be 0. TAG_MASK command decides whether the FT800 tag buffer takes the value from the default value of the FT800 tag buffer or the TAG command of the display list. Graphics context The value of mask is part of the graphics context, as described in section 4.1 See also TAG, CLEAR_TAG, STENCIL_MASK, COLOR_MASK Copyright © 2014 Future Technology Devices International Limited 137 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.43 VERTEX2F Start the operation of graphics primitives at the specified screen coordinate, in 1/16th pixel precision. Encoding 31 30 29 0b’01 15 14 X 0 Y Parameters x Signed x-coordinate in 1/16 pixel precision y Signed y-coordinate in 1/16 pixel precision Description The range of coordinates is from -16384 to +16383 in terms of 1/16th pixel units. The negative x coordinate value means the coordinate in the left virtual screen from (0, 0), while the negative y coordinate value means the coordinate in the upper virtual screen from (0, 0). If drawing on the negative coordinate position, the drawing operation will not be visible. Graphics context None See also None Copyright © 2014 Future Technology Devices International Limited 138 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 4.44 VERTEX2II Start the operation of graphics primitive at the specified coordinates in pixel precision. Encoding 31 30 29 0b’10 21 20 X 12 Y 11 7 6 handle 0 cell Parameters x x-coordinate in pixels, from 0 to 511. y y-coordinate in pixels, from 0 to 511. handle Bitmap handle. The valid range is from 0 to 31. From 16 to 31, the bitmap handle is dedicated to the FT800 built-in font. cell Cell number. Cell number is the index of bitmap with same bitmap layout and format. For example, for handle 31, the cell 65 means the character "A" in the largest built in font. Description The range of coordinates is from -16384 to +16383 in terms of pixel unit. The handle and cell parameters are ignored unless the graphics primitive is specified as bitmap by command BEGIN, prior to this command. Graphics context None See also None Copyright © 2014 Future Technology Devices International Limited 139 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5 Co-Processor Engine commands CMD_TEXT - draw text CMD_BUTTON - draw a button CMD_CLOCK - draw an analog clock CMD_GAUGE - draw a gauge CMD_GRADIENT gradient - draw a smooth color CMD_KEYS - draw a row of key CMD_PROGRESS - draw a progress bar CMD_SLIDER - draw a slider CMD_SCROLLBAR - draw a scroll bar CMD_DIAL - draw a rotary dial control CMD_TOGGLE - draw a toggle switch CMD_NUMBER - draw a decimal number The co-processor engine is fed via a 4 Kbyte FIFO in FT800 memory at RAM_CMD. The MCU writes commands into the FIFO, and the co-processor engine reads and executes Copyright © 2014 Future Technology Devices International Limited 140 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 the commands. The MCU updates register REG_CMD_WRITE to indicate that there are new commands in the FIFO, and the co-processor engine updates REG_CMD_READ after commands have been executed. So to compute the available free space in the FIFO, the MCU can compute: fullness = (REG_CMD_WRITE -REG_CMD_READ) mod 4096 freespace = (4096 - 4) -fullness; This calculation does not report 4096 bytes of free space, to prevent completely wrapping the FIFO and making it appear empty. If enough space is available in the FIFO, the MCU writes the commands at the appropriate location in the FIFO RAM, then updates REG_CMD_WRITE. To simplify the MCU code, the FT800 hardware automatically wraps continuous writes from (RAM_CMD + 4095) back to (RAM_CMD + 0). FIFO entries are always 4 bytes wide - it is an error for either REG_CMD_READ or REG_CMD_WRITE to have a value that is not a multiple of 4 bytes. Each command issued to the co-processor engine may take 1 or more words: the length depends on the command itself, and any appended data. Some commands are followed by variablelength data, so the command size may not be a multiple of 4 bytes. In this case the coprocessor engine ignores the extra 1, 2 or 3 bytes and continues reading the next command at the following 4 byte boundary. 5.1 Co-processor handling of Display list commands Most co-processor engine commands write to the current display list. The current write location in the display list is held in REG_CMD_DL. Whenever the co-processor engine writes a word to the display list, it does so at REG_CMD_DL then increments REG_CMD_DL. The special command CMD_DLSTART sets REG_CMD_DL to zero, for the start of a new display list. Copyright © 2014 Future Technology Devices International Limited 141 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 All display list commands can be written as co-processor engine commands. The coprocessor engine copies these commands into the current display list at REG_CMD_DL. For example, this series of co-processor engine commands writes a small display list: cmd(CMD_DLSTART); // start a new display list cmd(CLEAR_COLOR_RGB(255, 100, 100)); // set clear color cmd(CLEAR(1, 1, 1)); // clear screen cmd(DISPLAY()); // display Of course, this display list could have been written directly to RAM_DL. The advantage of this technique is that you can mix low-level operations and high level co-processor engine commands in a single stream: cmd(CMD_DLSTART); // start a new display list cmd(CLEAR_COLOR_RGB(255, 100, 100)); // set clear color cmd(CLEAR(1, 1, 1)); // clear screen cmd_button(20, 20, // x, y 60, 60, // width, height in pixels 30, // font 30 0, // default options "OK!"); cmd(DISPLAY()); // display 5.2 Synchronization At some points, it is necessary to wait until the co-processor engine has processed all outstanding commands. When the co-processor engine completes the last outstanding command in the command buffer, it raises the INT_CMDEMPTY interrupt. Another approach is that the MCU can poll REG_CMD_READ until it is equal to REG_CMD_WRITE. One situation that requires synchronization is to read the value of REG_CMD_DL, when the MCU needs to do direct writes into the display list. In this situation the MCU should wait until the co-processor engine is idle before reading REG_CMD_DL. 5.3 ROM and RAM Fonts The graphics engine hardware draws bitmap graphics, and it is useful for software to treat these graphics as fonts. Font metrics - e.g. character height and width - are used by software when placing font characters. For the ROM character bitmaps, these font metrics are in ROM. The coprocessor engine uses these metrics when drawing text in any of the 16 built-in ROM Copyright © 2014 Future Technology Devices International Limited 142 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 fonts, numbered 16-31. Users can load similar font metrics into RAM, and hence create additional user-defined fonts in bitmap handles 0-14. Bitmap handle 15 is reserved for co-processor command CMD_Button/CMD_Keys/CMD_Gradient. Each 148-byte font metric block has this format: Copyright © 2014 Future Technology Devices International Limited 143 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 Table 9 FT800 Font metrics block format Address Size Value p+0 128 width of each font character, in pixels p + 128 4 font bitmap format, for example L1, L4 or L8 p + 132 4 font line stride, in bytes p + 136 4 font width, in pixels p + 140 4 font height, in pixels p + 144 4 pointer to font graphic data in memory For the ROM fonts, these blocks are also in ROM, in an array of length 16. The address of this array is held in ROM location 0xffffc. For example to find the width of character 'g' (ASCII 0x67) in font 31: read 32-bit pointer p from 0xffffc widths = p + (148 * (31 - 16)) (table starts at font 16) read byte from memory at widths[0x67] For the built-in ROM font of the FT800, the valid character range for one bitmap handle is printable ASCII code, i.e., from 32 to 127, both inclusive. For custom RAM font, the ASCII code range of valid characters is from 1 to 127. To use a custom font in the user-interface objects: Select a bitmap handle from 0 to 14 Load the font bitmap into memory Set the bitmap parameters using commands BITMAP_SOURCE, BITMAP_LAYOUT and BITMAP_SIZE. Create and download a font metric block in RAM. The address of metric block shall be 4 bytes aligned. Use command CMD_SETFONT to register the new font with the selected handle. Use the selected handle in any co-processor command font argument. 5.4 Cautions For some of the widgets, if the input parameter values are more than 512 pixel resolution, the generated widgets may not be proper. Behavior of CMD_TRACK is not defined if the center of the track object (in case of rotary track) or top left of the track object (in case of linear track) is outside the display region. Only signed and unsigned integers are supported in CMD_NUMBER (fractional part is not supported). Copyright © 2014 Future Technology Devices International Limited 144 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 The behavior of widgets is not defined if the input parameters values are outside the valid range. 5.5 Fault Scenarios Some commands can cause co-processor engine faults. These faults arise because the co-processor engine cannot continue. For example: An invalid JPEG is supplied to CMD_LOADIMAGE An invalid data stream is supplied to CMD_INFLATE An attempt is made to write more than 2048 instructions into a display list In the fault condition, the co-processor engine sets REG_CMD_READ to 0xfff (an illegal value because all command buffer data shall be 32-bit aligned), raises the INT_CMDEMPTY interrupt, and stops accepting new commands. When the host MCU recognizes the fault condition, it should recover as follows: Set REG_CPURESET to 1, to hold the co-processor engine in the reset condition Set REG_CMD_READ and REG_CMD_WRITE to zero Set REG_CPURESET to 0, to restart the co-processor engine 5.6 widgets physical dimension This section contains the common physical dimensions of the widgets. All rounded corners have a radius that is computed from the font used for the widget (curvature of lowercase 'o' character). The radius is computed as Font height*3/16 All 3D shadows are drawn with: (1) highlight offset 0.5 pixels above and left of the object (2) shadow offset 1.0 pixel below and right of the object. For widgets such as progress bar, scrollbar and slider, the output widget will be a vertical widget in case width and height are of same value. 5.7 widgets color settings Co-processor engine widgets are drawn with the color designated by the precedent commands: CMD_FGCOLOR, CMD_BGCOLOR and COLOR_RGB. According to these commands, the co-processor engine will determine to render the different area of coprocessor engine widgets in different color. Usually, CMD_FGCOLOR affects the interaction area of co-processor engine widgets if they are designed for interactive UI element, for example, CMD_BUTTON, CMD_DIAL. CMD_BGCOLOR applies to the co-processor engine widgets with background. Please see the table below for more details. Table 10 Widgets color setup table Copyright © 2014 Future Technology Devices International Limited 145 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Widget CMD_FGCOLOR Clearance No.: FTDI#349 CMD_BGCOLOR COLOR_RGB CMD_TEXT NO NO YES CMD_BUTTON YES NO YES(label) CMD_GAUGE NO YES YES(needle and mark) CMD_KEYS YES NO YES(text) CMD_PROGRESS NO YES YES CMD_SCROLLBAR YES(Inner bar) YES(Outer bar) NO CMD_SLIDER YES(Knob) YES(Right bar of knob) YES(Left bar of knob) CMD_DIAL YES(Knob) NO YES(Marker) CMD_TOGGLE YES(Knob) YES(Bar) YES(Text) CMD_NUMBER NO NO YES CMD_CALIBRATE YES(Animating dot) YES(Outer dot) NO CMD_SPINNER NO NO YES 5.8 Co-processor engine graphics state The co-processor engine maintains a small amount of internal states for graphics drawing. This state is set to the default at co-processor engine reset, and by CMD_COLDSTART. The state values are not affected by CMD_DLSTART or CMD_SWAP, so an application need only set them once at startup. Table 11 Co-processor engine graphics state State Default Commands background color dark blue (0x002040) CMD_BGCOLOR foreground color light blue (0x003870) CMD_FGCOLOR gradient color white (0xffffff) CMD_GRADCOLOR spinner None CMD_SPINNER object trackers all disabled CMD_TRACK interrupt timer None CMD_INTERRUPT CMD_LOADIDENTITY, Bitmap transform matrix: [ ] Bitmap Handle [ 15 ] CMD_TRANSLATE, CMD_ROTATE, etc. CMD_GRADCOLOR, CMD_KEYS, CMD_BUTTON Copyright © 2014 Future Technology Devices International Limited 146 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5.9 Definition of parameter OPTION The following table defines the parameter OPTION mentioned in this chapter. Table 12 Parameter OPTION definition Name Value Description Commands 0 Co-processor widget is drawn in 3D effect. The default option. 0 Co-processor option to decode the JPEG image to RGB565 format CMD_IMAGE 1 Co-processor option to decode the JPEG image to L8 format, i.e., monochrome CMD_IMAGE 2 No display list commands generated for bitmap decoded from JPEG image CMD_IMAGE OPT_FLAT 256 Co-processor widget is drawn without 3D effect CMD_BUTTON,CMD_CLOCK,CMD_KEYS, CMD_GAUGE,CMD_SLIDER, CMD_DIAL, CMD_TOGGLE,CMD_PROGRESS, CMD_SCROLLBAR OPT_SIGNED 256 The number is treated as 32 bit signed integer OPT_CENTERX 512 Co-processor widget centers horizontally CMD_KEYS,CMD_TEXT, CMD_NUMBER OPT_CENTERY 1024 Co-processor widget centers vertically CMD_KEYS,CMD_TEXT, CMD_NUMBER OPT_CENTER 1536 Co-processor widget centers horizontally and vertically. CMD_KEYS,CMD_TEXT, CMD_NUMBER OPT_RIGHTX 2048 The label on the Coprocessor widget is CMD_KEYS,CMD_TEXT, CMD_NUMBER OPT_3D OPT_RGB565 OPT_MONO OPT_NODL CMD_BUTTON,CMD_CLOCK,CMD_KEYS, CMD_GAUGE,CMD_SLIDER, CMD_DIAL, CMD_TOGGLE,CMD_PROGRESS, CMD_SCROLLBAR CMD_NUMBER Copyright © 2014 Future Technology Devices International Limited 147 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Name Value Description right justified Clearance No.: FTDI#349 Commands 4096 Co-processor widget has no background drawn CMD_CLOCK, CMD_GAUGE 8192 Co-processor clock widget is drawn without hour ticks. Gauge widget is drawn without major and minor ticks CMD_CLOCK, CMD_GAUGE OPT_NOHM 16384 Co-processor clock widget is drawn without hour and minutes hands, only seconds hand is drawn CMD_CLOCK OPT_NOPOINTER 16384 The Co-processor gauge has no pointer CMD_GAUGE 32768 Co-processor clock widget is drawn without seconds hand CMD_CLOCK 49152 Co-processor clock widget is drawn without hour, minutes and seconds hands CMD_CLOCK OPT_NOBACK OPT_NOTICKS OPT_NOSECS OPT_NOHANDS 5.10 Co-processor engine resources The co-processor engine does not change hardware graphics state. That is, graphics states such as color and line width are not to be changed by co-processor engine. However, the widgets do reserve some hardware resources, which user programs need take into account: Bitmap handle 15 is used by the 3D-effect buttons, keys and gradient. One graphics context is used by objects, so the effective stack depth for SAVE_CONTEXT and RESTORE_CONTEXT commands is 3 levels. 5.11 Command groups These commands begin and finish the display list: Copyright © 2014 Future Technology Devices International Limited 148 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 CMD_DLSTART - start a new display list CMD_SWAP - swap the current display list Commands to draw graphics objects: CMD_TEXT - draw text CMD_BUTTON - draw a button CMD_CLOCK - draw an analog clock CMD_BGCOLOR - set the background color CMD_FGCOLOR - set the foreground color CMD_GRADCOLOR - set the 3D effects for CMD_BUTTON and CMD_KEYS highlight color CMD_GAUGE - draw a gauge CMD_GRADIENT - draw a smooth color gradient CMD_KEYS - draw a row of keys CMD_PROGRESS - draw a progress bar CMD_SCROLLBAR - draw a scroll bar CMD_SLIDER - draw a slider CMD_DIAL - draw a rotary dial control CMD_TOGGLE - draw a toggle switch CMD_NUMBER - draw a decimal number Commands to operate on memory: CMD_MEMCRC - compute a CRC-32 for memory CMD_MEMZERO - write zero to a block of memory CMD_MEMSET - fill memory with a byte value CMD_MEMWRITE - write bytes into memory CMD_MEMCPY - copy a block of memory CMD_APPEND - append memory to display list Commands for loading image data into FT800 memory: CMD_INFLATE - decompress data into memory CMD_LOADIMAGE - load a JPEG image Copyright © 2014 Future Technology Devices International Limited 149 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 Commands for setting the bitmap transform matrix: CMD_LOADIDENTITY - set the current matrix to identity CMD_TRANSLATE - apply a translation to the current matrix CMD_SCALE - apply a scale to the current matrix CMD_ROTATE - apply a rotation to the current matrix CMD_SETMATRIX - write the current matrix as a bitmap transform CMD_GETMATRIX - retrieves the current matrix coefficients Other commands: CMD_COLDSTART - set co-processor engine state to default values CMD_INTERRUPT - trigger interrupt INT_CMDFLAG CMD_REGREAD - read a register value CMD_CALIBRATE - execute the touch screen calibration routine CMD_SPINNER - start an animated spinner CMD_STOP - stop any spinner, screensaver or sketch CMD_SCREENSAVER - start an animated screensaver CMD_SKETCH - start a continuous sketch update CMD_SNAPSHOT - take a snapshot of the current screen CMD_LOGO - play device logo animation Copyright © 2014 Future Technology Devices International Limited 150 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5.12 CMD_DLSTART - start a new display list When the co-processor engine executes this command, it waits until the current display list is scanned out, then sets REG_CMD_DL to zero. C prototype void cmd_dlstart( ); Command layout +0 CMD_DLSTART (0xffffff00) Examples cmd_dlstart(); ... cmd_dlswap(); Copyright © 2014 Future Technology Devices International Limited 151 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5.13 CMD_SWAP - swap the current display list When the co-processor engine executes this command, it requests a display list swap immediately after current display list is scanned out. Internally, the co-processor engine implements this command by writing to REG_DLSWAP. Please see REG_DLSWAP Definition. This co-processor engine command will not generate any display list command into display list memory RAM_DL. C prototype void cmd_swap( ); Command layout +0 CMD_DLSWAP(0xffffff01) Examples None 5.14 CMD_COLDSTART - set co-processor engine state to default values This command sets co-processor engine to reset default states. C prototype void cmd_coldstart( ); Command layout +0 CMD_COLDSTART(0xffffff32) Examples Change to a custom color scheme, and then restore the default colors: cmd_fgcolor(0x00c040); cmd_gradcolor(0x000000); cmd_button( "custom"); 2, 32, 76, 56, 26, 0, cmd_coldstart(); cmd_button( 82, 32, 76, 56, 26, 0, "default"); Copyright © 2014 Future Technology Devices International Limited 152 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5.15 CMD_INTERRUPT - trigger interrupt INT_CMDFLAG When the co-processor INT_CMDFLAG. engine executes this command, it triggers interrupt C prototype void cmd_interrupt( uint32_t ms ); Parameters ms Delay before interrupt triggers, in milliseconds. The interrupt is guaranteed not to fire before this delay. If ms is zero, the interrupt fires immediately. Command layout +0 CMD_INTERRUPT(0xffffff02) +4 ms Examples To trigger an interrupt after a JPEG has finished loading: cmd_loadimage(); ... cmd_interrupt(0); // previous load image complete, trigger interrupt To trigger an interrupt in 0.5 seconds: cmd_interrupt(500); ... Copyright © 2014 Future Technology Devices International Limited 153 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5.16 CMD_APPEND - append memory to display list Appends a block of memory to the current display list memory address where the offset is specified in REG_CMD_DL. C prototype void cmd_append( uint32_t ptr, uint32_t num ); Parameters ptr Start of source commands in main memory num Number of bytes to copy. This must be a multiple of 4. Command layout +0 CMD_APPEND(0xffffff1e) +4 Ptr +8 Num Description After appending is done, the co-processor engine will increase the REG_CMD_DL by num to make sure the display list is in order. Examples ... cmd_dlstart(); cmd_append(0, 40); // copy 10 commands from main memory address 0 cmd(DISPLAY); // finish the display list cmd_swap(); Copyright © 2014 Future Technology Devices International Limited 154 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5.17 CMD_REGREAD - read a register value C prototype void cmd_regread( uint32_t ptr, uint32_t result ); Parameters ptr Address of register to read result The register value to be read at ptr address. Command layout +0 CMD_REGREAD(0xffffff19) +4 Ptr +8 Result Examples To capture the exact time when a command completes: uint16_t x = rd16(REG_CMD_WRITE); cmd_regread(REG_CLOCK, 0); ... printf("%08x\n", rd32(RAM_CMD + x + 8)); Copyright © 2014 Future Technology Devices International Limited 155 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5.18 CMD_MEMWRITE - write bytes into memory Writes the following bytes into the FT800 memory. This command can be used to set register values, or to update memory contents at specific times. C prototype void cmd_memwrite( uint32_t ptr, uint32_t num ); Parameters Ptr The memory address to be written num Number of bytes to be written. Description The data byte should immediately follow in the command buffer. If the number of bytes is not a multiple of 4, then 1, 2 or 3 bytes should be appended to ensure 4-byte alignment of the next command, these padding bytes can have any value. The completion of this function can be detected when the value of REG_CMD_READ is equal to REG_CMD_WRITE. Caution: if using this command, it may corrupt the memory of the FT800 if used improperly. Command layout +0 CMD_MEMWRITE(0xffffff1a) +4 ptr +8 Num +12 Byte0 +13 Byte1 .. .. +n .. Examples To change the backlight brightness to 64 (half intensity) for a particular screen shot: ... cmd_swap(); // finish the display list cmd_dlstart(); // wait until after the swap cmd_memwrite(REG_PWM_DUTY, 4); // write to the PWM_DUTY register cmd(100); Copyright © 2014 Future Technology Devices International Limited 156 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5.19 CMD_INFLATE - decompress data into memory Decompress the following compressed data into the FT800 memory, RAM_G. The data should have been compressed with the DEFLATE algorithm, e.g. with the ZLIB library. This is particularly useful for loading graphics data. C prototype void cmd_inflate( uint32_t ptr ); Parameters ptr Destination address. The data byte should immediate follow in the command buffer. Description If the number of bytes is not a multiple of 4, then 1, 2 or 3 bytes should be appended to ensure 4-byte alignment of the next command. These padding bytes can have any value Command layout +0 CMD_INFLATE(0xffffff22) +4 ptr +8 Byte0 +9 Byte1 .. .. +n .. Examples To load graphics data to main memory address 0x8000: cmd_inflate(0x8000); ... // zlib-compressed data follows Copyright © 2014 Future Technology Devices International Limited 157 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5.20 CMD_LOADIMAGE - load a JPEG image Decompress the following JPEG image data into an FT800 bitmap, in main memory. The image data should be a regular baseline JPEG (JFIF) image. C prototype void cmd_loadimage( uint32_t ptr, uint32_t options ); Parameters ptr Destination address options By default, option OPT_RGB565 means the loaded bitmap is in RGB565 format. Option OPT_MONO means the loaded bitmap to be monochrome, in L8 format. The command appends display list commands to set the source, layout and size of the resulting image. Option OPT_NODL prevents this nothing is written to the display list. OPT_NODL can be OR'ed with OPT_MONO or OPT_RGB565. Description The data byte should immediately follow in the command buffer. If the number of bytes is not a multiple of 4, then 1, 2 or 3 bytes should be appended to ensure 4-byte alignment of the next command. These padding bytes can have any value. The application on the host processor has to parse the JPEG header to get the properties of the JPEG image and decide to decode. Behavior is unpredictable in cases of non baseline jpeg images or the output data generated is more than the RAM_G size. Command layout +0 CMD_LOADIMAGE(0xffffff24) +4 Ptr +8 Options +12 Byte0 +13 Byte1 .. .. +n .. Copyright © 2014 Future Technology Devices International Limited 158 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 Examples To load a JPEG image at address 0 then draw the bitmap at (10,20) and (100,20): cmd_loadimage(0, 0); ... // JPEG file data follows cmd(BEGIN(BITMAPS)) cmd(VERTEX2II(10, 20, 0, 0)); // draw bitmap at (10,20) cmd(VERTEX2II(100, 20, 0, 0)); // draw bitmap at (100,20) Copyright © 2014 Future Technology Devices International Limited 159 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5.21 CMD_MEMCRC - compute a CRC-32 for memory Computes a CRC-32 for a block of FT800 memory C prototype void cmd_memcrc( uint32_t ptr, uint32_t num, uint32_t result ); Parameters ptr Starting address of the memory block num Number of bytes in the source memory block result Output parameter; written with the CRC-32 after command execution. The completion of this function is detected when the value of REG_CMD_READ is equal to REG_CMD_WRITE. Command layout +0 CMD_MEMCRC(0xffffff18) +4 Ptr +8 Num +12 Result Examples To compute the CRC-32 of the first 1K byte of FT800 memory, first record the value of REG_CMD_WRITE, execute the command, wait for completion, then read the 32bit value at result: uint16_t x = rd16(REG_CMD_WRITE); cmd_crc(0, 1024, 0); ... printf("%08x\n", rd32(RAM_CMD + x + 12)); Copyright © 2014 Future Technology Devices International Limited 160 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5.22 CMD_MEMZERO - write zero to a block of memory C prototype void cmd_memzero( uint32_t ptr, uint32_t num ); Parameters ptr Starting address of the memory block num Number of bytes in the memory block The completion of this function is detected when the value of REG_CMD_READ is equal to REG_CMD_WRITE. Command layout +0 CMD_MEMZERO(0xffffff1c) +4 ptr +8 num Examples To erase the first 1K of main memory: cmd_memzero(0, 1024); Copyright © 2014 Future Technology Devices International Limited 161 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5.23 CMD_MEMSET - fill memory with a byte value C prototype void cmd_memset( uint32_t ptr, uint32_t value, uint32_t num ); Parameters ptr Starting address of the memory block value Value to be written to memory num Number of bytes in the memory block The completion of this function is detected when the value of REG_CMD_READ is equal to REG_CMD_WRITE. Command layout +0 CMD_MEMSET(0xffffff1b) +4 ptr +8 Value +12 num Examples To write 0xff the first 1K of main memory: cmd_memset(0, 0xff, 1024); Copyright © 2014 Future Technology Devices International Limited 162 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5.24 CMD_MEMCPY - copy a block of memory C prototype void cmd_memcpy( uint32_t dest, uint32_t src, uint32_t num ); Parameters dest address of the destination memory block src address of the source memory block num number of bytes to copy The completion of this function is detected when the value of REG_CMD_READ is equal to REG_CMD_WRITE. Command layout +0 CMD_MEMCPY(0xffffff1d) +4 dst +8 src +12 num Examples To copy 1K byte of memory from 0 to 0x8000: cmd_memcpy(0x8000, 0, 1024); Copyright © 2014 Future Technology Devices International Limited 163 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5.25 CMD_BUTTON - draw a button C prototype void cmd_button( int16_t x, int16_t y, int16_t w, int16_t h, int16_t font, uint16_t options, const char* s ); Parameters x x-coordinate of button top-left, in pixels y y-coordinate of button top-left, in pixels font bitmap handle to specify the font used in button label. See ROM and RAM Fonts. options By default, the button is drawn with a 3D effect and the value is zero. OPT_FLAT removes the 3D effect. The value of OPT_FLAT is 256. s button label. It must be one string terminated with null character, i.e. '\0' in C language. For built-in ROM font of FT800, the valid character inside of s is printable ASCII code, i.e., from 32 to 127, both inclusive. For custom RAM font, the ASCII code of valid character inside of s is from 1 to 127. Description Refer to Co-processor engine widgets physical dimensions for more information. Command layout +0 CMD_BUTTON(0xffffff0d) +4 X +6 Y +8 W +10 H +12 Font Copyright © 2014 Future Technology Devices International Limited 164 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 +14 Options +16 S +17 .. .. .. +n 0 Clearance No.: FTDI#349 Examples A 140x00 pixel button with large text: cmd_button(10, 10, 140, 100, 31, 0, "Press!"); Without the 3D look: cmd_button(10, 10, OPT_FLAT, "Press!"); 140, 100, 31, Several smaller buttons: cmd_button(10, "One"); 10, 50, 25, 26, 0, cmd_button(10, "Two"); 40, 50, 25, 26, 0, cmd_button(10, "Three"); 70, 50, 25, 26, 0, Changing button color Copyright © 2014 Future Technology Devices International Limited 165 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 cmd_fgcolor(0xb9b900), cmd_button(10, "Banana"); 10, 50, 25, 26, 0, 25, 26, 0, 25, 26, 0, cmd_fgcolor(0xb97300), cmd_button(10, "Orange"); 40, 50, cmd_fgcolor(0xb90007), cmd_button(10, "Cherry"); 70, 50, Copyright © 2014 Future Technology Devices International Limited 166 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5.26 CMD_CLOCK - draw an analog clock C prototype void cmd_clock( int16_t x, int16_t y, int16_t r, uint16_t options, uint16_t h, uint16_t m, uint16_t s, uint16_t ms ); Parameters x x-coordinate of clock center, in pixels y y-coordinate of clock center, in pixels options By default the clock dial is drawn with a 3D effect and the name of this option is OPT_3D. Option OPT_FLAT removes the 3D effect. With option OPT_NOBACK, the background is not drawn. With option OPT_NOTICKS, the twelve hour ticks are not drawn. With option OPT_NOSECS, the seconds hand is not drawn. With option OPT_NOHANDS, no hands are drawn. With option OPT_NOHM, no hour and minutes hands are drawn. h hours m minutes s seconds Copyright © 2014 Future Technology Devices International Limited 167 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 ms milliseconds Description The details of physical dimension are The 12 tick marks are placed on a circle of radius r*(200/256). Each tick is a point of radius r*(10/256) The seconds hand has length r*(200/256) and width r*(3/256) The minutes hand has length r*(150/256) and width r*(9/256) The hours hand has length r*(100/256) and width r*(12/256) Refer to Co-processor engine widgets physical dimensions for more information. Command layout +0 CMD_CLOCK(0xffffff14) +4 X +6 Y +8 R +10 Options +12 H +14 M +16 S +18 Ms Examples A clock with radius 50 pixels, showing a time of 8.15: cmd_clock(80, 60, 50, 0, 8, 15, 0, 0); Setting the background color Copyright © 2014 Future Technology Devices International Limited 168 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 cmd_bgcolor(0x401010); cmd_clock(80, 60, 50, 0, 8, 15, 0, 0); Without the 3D look: cmd_clock(80, 60, 50, OPT_FLAT, 8, 15, 0, 0); The time fields can have large values. Here the hours are (7 x 3600s) and minutes are (38 x 60s), and seconds is 59. Creating a clock face showing the time as 7.38.59: cmd_clock( 80, 60, 50, 0, 0, 0, (7 * 3600) + (38 * 60) + 59, 0); No seconds hand: Copyright © 2014 Future Technology Devices International Limited 169 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 cmd_clock(80, 60, 50, OPT_NOSECS, 8, 15, 0, 0); No background: cmd_clock(80, 60, 50, OPT_NOBACK, 8, 15, 0, 0); No ticks: cmd_clock(80, 60, 50, OPT_NOTICKS, 8, 15, 0, 0); No hands: Copyright © 2014 Future Technology Devices International Limited 170 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 cmd_clock(80, 60, 50, OPT_NOHANDS, 8, 15, 0, 0); Copyright © 2014 Future Technology Devices International Limited 171 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5.27 CMD_FGCOLOR - set the foreground color C prototype void cmd_fgcolor( uint32_t c ); Parameters c New foreground color, as a 24-bit RGB number. Red is the most significant 8 bits, blue is the least. So 0xff0000 is bright red. Foreground color is applicable for things that the user can move such as handles and buttons ("affordances"). Command layout +0 CMD_FGCOLOR(0xffffff0a) +4 C Examples The top scrollbar uses the default foreground color, the others with a changed color: cmd_scrollbar(20, 30, 120, 8, 0, 10, 40, 100); cmd_fgcolor(0x703800); cmd_scrollbar(20, 60, 120, 8, 0, 30, 40, 100); cmd_fgcolor(0x387000); cmd_scrollbar(20, 90, 120, 8, 0, 50, 40, 100); Copyright © 2014 Future Technology Devices International Limited 172 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5.28 CMD_BGCOLOR - set the background color C prototype void cmd_bgcolor( uint32_t c ); Parameters c New background color, as a 24-bit RGB number. Red is the most significant 8 bits, blue is the least. So 0xff0000 is bright red. Background color is applicable for things that the user cannot move. Example behind gauges and sliders etc. Command layout +0 CMD_BGCOLOR(0xffffff09) +4 C Examples The top scrollbar uses the default background color, the others with a changed color: cmd_scrollbar(20, 30, 120, 8, 0, 10, 40, 100); cmd_bgcolor(0x402000); cmd_scrollbar(20, 60, 120, 8, 0, 30, 40, 100); cmd_bgcolor(0x202020); cmd_scrollbar(20, 90, 120, 8, 0, 50, 40, 100); Copyright © 2014 Future Technology Devices International Limited 173 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5.29 CMD_GRADCOLOR - set the 3D button highlight color C prototype void cmd_gradcolor( uint32_t c ); Parameters c New highlight gradient color, as a 24-bit RGB number. Red is the most significant 8 bits, blue is the least. So 0xff0000 is bright red. Gradient is supported only for Button and Keys widgets. Command layout +0 CMD_GRADCOLOR(0xffffff34) +4 C Examples Changing the gradient color: white (the default), red, green and blue cmd_fgcolor(0x101010); cmd_button( 2, 2, 76, 56, 31, 0, "W"); cmd_gradcolor(0xff0000); cmd_button( 82, 2, 76, 56, 31, 0, "R"); cmd_gradcolor(0x00ff00); cmd_button( 2, 62, 76, 56, 31, 0, "G"); cmd_gradcolor(0x0000ff); cmd_button( 82, 62, 76, 56, 31, 0, "B"); Copyright © 2014 Future Technology Devices International Limited 174 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 The gradient color is also used for keys: cmd_fgcolor(0x101010); cmd_keys(10, "abcde"); 10, 140, 30, 26, 0, 30, 26, 0, cmd_gradcolor(0xff0000); cmd_keys(10, "fghij"); 50, 140, Copyright © 2014 Future Technology Devices International Limited 175 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5.30 CMD_GAUGE - draw a gauge C prototype void cmd_gauge( int16_t x, int16_t y, int16_t r, uint16_t options, uint16_t major, uint16_t minor, uint16_t val, uint16_t range ); Parameters x X-coordinate of gauge center, in pixels y Y-coordinate of gauge center, in pixels r Radius of the gauge, in pixels options By default the gauge dial is drawn with a 3D effect and the value of options is zero. OPT_FLAT removes the 3D effect. With option OPT_NOBACK, the background is not drawn. With option OPT_NOTICKS, the tick marks are not drawn. With option OPT_NOPOINTER, the pointer is not drawn. Copyright © 2014 Future Technology Devices International Limited 176 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 major Number of major subdivisions on the dial, 1-10 minor Number of minor subdivisions on the dial, 1-10 val Gauge indicated value, between 0 and range, inclusive range Maximum value Description The details of physical dimension are The tick marks are placed on a 270 degree arc, clockwise starting at southwest position Minor ticks are lines of width r*(2/256), major r*(6/256) Ticks are drawn at a distance of r*(190/256) to r*(200/256) The pointer is drawn with lines of width r*(4/256), to a point r*(190/256)from the center The other ends of the lines are each positioned 90 degrees perpendicular to the pointer direction, at a distance r*(3/256) from the center Refer to Co-processor engine widgets physical dimensions for more information. Command layout +0 CMD_GAUGE(0xffffff13) +4 X +6 Y +8 R +10 Options +12 Major +14 Minor +16 Value +18 Range Examples Copyright © 2014 Future Technology Devices International Limited 177 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 A gauge with radius 50 pixels, five divisions of four ticks each, indicating 30%: cmd_gauge(80, 60, 50, 0, 5, 4, 30, 100); Without the 3D look: cmd_gauge(80, 60, 50, OPT_FLAT, 5, 4, 30, 100); Ten major divisions with two minor divisions each: cmd_gauge(80, 60, 50, 0, 10, 2, 30, 100); Copyright © 2014 Future Technology Devices International Limited 178 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 Setting the minor divisions to 1 makes them disappear: cmd_gauge(80, 60, 50, 0, 10, 1, 30, 100); Setting the major divisions to 1 gives minor divisions only: cmd_gauge(80, 60, 50, 0, 1, 10, 30, 100); A smaller gauge with a brown background: cmd_bgcolor(0x402000); cmd_gauge(80, 60, 25, 0, 5, 4, 30, 100); Copyright © 2014 Future Technology Devices International Limited 179 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 Scale 0-1000, indicating 1000: cmd_gauge(80, 60, 50, 0, 5, 2, 1000, 1000); Scaled 0-65535, indicating 49152: cmd_gauge(80, 60, 50, 0, 4, 4, 49152, 65535); No background: cmd_gauge(80, 60, 50, OPT_NOBACK, 4, 4, 49152, 65535); Copyright © 2014 Future Technology Devices International Limited 180 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 No tick marks: cmd_gauge(80, 60, 50, OPT_NOTICKS, 4, 4, 49152, 65535); No pointer: cmd_gauge(80, 60, 50, OPT_NOPOINTER, 4, 4, 49152, 65535); Drawing the gauge in two passes, with bright red for the pointer: GAUGE_0 = OPT_NOPOINTER; GAUGE_1 = OPT_NOTICKS; OPT_NOBACK | cmd_gauge(80, 60, 50, GAUGE_0, 4, 4, 49152, 65535); cmd(COLOR_RGB(255, 0, 0)); cmd_gauge(80, 60, 50, GAUGE_1, 4, 4, 49152, 65535); Copyright © 2014 Future Technology Devices International Limited 181 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 Add a custom graphic to the gauge by drawing its background, a bitmap, then its foreground: GAUGE_0 = OPT_NOTICKS; OPT_NOPOINTER | GAUGE_1 = OPT_NOBACK; cmd_gauge(80, 60, 50, GAUGE_0, 4, 4, 49152, 65535); cmd(COLOR_RGB(130, 130, 130)); cmd(BEGIN(BITMAPS)); cmd(VERTEX2II(80 - 32, 60 -32, 0, 0)); cmd(COLOR_RGB(255, 255, 255)); cmd_gauge(80, 60, 50, GAUGE_1, 4, 4, 49152, 65535); Copyright © 2014 Future Technology Devices International Limited 182 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5.31 CMD_GRADIENT - draw a smooth color gradient C prototype void cmd_gradient( int16_t x0, int16_t y0, uint32_t rgb0, int16_t x1, int16_t y1, uint32_t rgb1 ); Parameters x0 x-coordinate of point 0, in pixels y0 y-coordinate of point 0, in pixels rgb0 Color of point 0, as a 24-bit RGB number. R is the most significant8 bits, B is the least. So 0xff0000 is bright red. x1 x-coordinate of point 1, in pixels y1 y-coordinate of point 1, in pixels Copyright © 2014 Future Technology Devices International Limited 183 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 rgb1 Color of point 1 Description All the color's step values are calculated based on smooth curve interpolated from the RGB0 to RGB1 parameter. The smooth curve equation is independently calculated for all three colors and the equation used is R0 + t * (R1 - R0), where t is interpolated between 0 and 1. Gradient must be used with Scissor function to get the intended gradient display. Command layout +0 CMD_GRAGIENT(0xffffff0b) +4 X0 +6 Yo +8 RGB0 +12 X1 +14 Y1 +16 RGB1 Examples A horizontal gradient from blue to red cmd_gradient(0, 0, 0x0000ff, 160, 0, 0xff0000); A vertical gradient Copyright © 2014 Future Technology Devices International Limited 184 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 cmd_gradient(0, 0, 0x808080, 0, 120, 0x80ff40); The same colors in a diagonal gradient cmd_gradient(0, 0, 0x808080, 160, 120, 0x80ff40); Using a scissor rectangle to draw a gradient stripe as a background for a title: cmd(SCISSOR_XY(20, 40)); cmd(SCISSOR_SIZE(120, 32)); cmd_gradient(20, 0, 0x606060, 140, 0, 0x404080); cmd_text(23, 40, 29, 0, "Heading 1"); Copyright © 2014 Future Technology Devices International Limited 185 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5.32 CMD_KEYS - draw a row of keys C prototype void cmd_keys( int16_t x, int16_t y, int16_t w, int16_t h, int16_t font, uint16_t options, const char* s ); Parameters x x-coordinate of keys top-left, in pixels y y-coordinate of keys top-left, in pixels font Bitmap handle to specify the font used in key label. The valid range is from 0 to 31 options By default the keys are drawn with a 3D effect and the value of option is zero. OPT_FLAT removes the 3D effect. If OPT_CENTER is given the keys are drawn at minimum size centered within the w x h rectangle. Otherwise the keys are expanded so that they completely fill the available space. If an ASCII code is specified, that key is drawn 'pressed' - i.e. in background color with any 3D effect removed. Copyright © 2014 Future Technology Devices International Limited 186 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 w The width of the keys h The height of the keys s key labels, one character per key. The TAG value is set to the ASCII value of each key, so that key presses can be detected using the REG_TOUCH_TAG register. Description The details of physical dimension are The gap between keys is 3 pixels For OPT_CENTERX case, the keys are (font width + 1.5) pixels wide ,otherwise keys are sized to fill available width Refer to Co-processor engine widgets physical dimensions for more information. Command layout +0 CMD_KEYS(0xffffff0e) +4 X +6 Y +8 W +10 H +12 Font +14 Options +16 S .. .. +n 0 Copyright © 2014 Future Technology Devices International Limited 187 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 Examples A row of keys: cmd_keys(10, "12345"); 10, 140, 30, 26, 0, Without the 3D look: cmd_keys(10, 10, OPT_FLAT, "12345"); 140, 30, 26, Default vs. centered: cmd_keys(10, "12345"); 10, 140, 30, cmd_keys(10, 60, 140, OPT_CENTER, "12345"); Copyright © 2014 Future Technology Devices International Limited 26, 30, 0, 26, 188 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 Setting the options to show '2' key pressed ('2' is ASCII code 0x32): cmd_keys(10, 10, 140, 30, 26, 0x32, "12345"); A calculator-style keyboard using font 29: cmd_keys(22, 1, 116, 28, 29, 0, "789"); cmd_keys(22, 31, 116, 28, 29, 0, "456"); cmd_keys(22, 61, 116, 28, 29, 0, "123"); cmd_keys(22, 91, 116, 28, 29, 0, "0."); A compact keyboard drawn in font 20: cmd_keys(2, 2, 156, OPT_CENTER, "qwertyuiop"); 21, 20, cmd_keys(2, 26, 156, OPT_CENTER, "asdfghijkl"); 21, 20, cmd_keys(2, 50, 156, OPT_CENTER, "zxcvbnm"); 21, 20, cmd_button(2, 74, 156, 21, 20, 0, ""); Showing the f (ASCII 0x66) Copyright © 2014 Future Technology Devices International Limited key 189 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 pressed: k = 0x66; cmd_keys(2, 2, 156, 21, OPT_CENTER, "qwertyuiop"); 20, k | cmd_keys(2, 26, 156, 21, OPT_CENTER, "asdfghijkl"); 20, k | cmd_keys(2, 50, 156, 21, OPT_CENTER, "zxcvbnm"); 20, k | cmd_button(2, 74, 156, 21, 20, 0, ""); Copyright © 2014 Future Technology Devices International Limited 190 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5.33 CMD_PROGRESS - draw a progress bar C prototype void cmd_progress( int16_t x, int16_t y, int16_t w, int16_t h, uint16_t options, uint16_t val, uint16_t range ); Parameters x x-coordinate of progress bar top-left, in pixels y y-coordinate of progress bar top-left, in pixels w width of progress bar, in pixels h height of progress bar, in pixels options By default the progress bar is drawn with a 3D effect and the value of options is zero. Options OPT_FLAT removes the 3D effect and its value is 256 val Displayed value of progress bar, between 0 and range inclusive Copyright © 2014 Future Technology Devices International Limited 191 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 range Maximum value Description The details of physical dimensions are x,y,w,h give outer dimensions of progress bar. Radius of bar (r) is min(w,h)/2 Radius of inner progress line is r*(7/8) Refer to Co-processor engine widgets physical dimensions for more information. Command layout +0 CMD_PROGRESS(0xffffff0f) +4 X +6 Y +8 W +10 H +12 options +14 val +16 range Examples A progress bar showing 50% completion: cmd_progress(20, 50, 120, 12, 0, 50, 100); Copyright © 2014 Future Technology Devices International Limited 192 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 Without the 3D look: cmd_progress(20, 50, OPT_FLAT, 50, 100); 120, 12, A 4 pixel high bar, range 0-65535, with a brown background: cmd_bgcolor(0x402000); cmd_progress(20, 50, 120, 4, 0, 9000, 65535); Copyright © 2014 Future Technology Devices International Limited 193 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5.34 CMD_SCROLLBAR – draw a scroll bar C prototype void cmd_scrollbar( int16_t x, int16_t y, int16_t w, int16_t h, uint16_t options, uint16_t val, uint16_t size, uint16_t range ); Parameters x x-coordinate of scroll bar top-left, in pixels y y-coordinate of scroll bar top-left, in pixels w Width of scroll bar, in pixels. If width is greater than height, the scroll bar is drawn horizontally h Height of scroll bar, in pixels. If height is greater than width, the scroll bar is drawn vertically options Copyright © 2014 Future Technology Devices International Limited 194 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 By default the scroll bar is drawn with a 3D effect and the value of options is zero. Options OPT_FLAT removes the 3D effect and its value is 256 val Displayed value of scroll bar, between 0 and range inclusive range Maximum value Description Refer to CMD_PROGRESS for more information on physical dimension. Command layout +0 CMD_SCROLLBAR(0xffffff11) +4 X +6 Y +8 W +10 H +12 options +14 val +16 Size +18 Range Examples A scroll bar indicating 10-50%: cmd_scrollbar(20, 50, 120, 8, 0, 10, 40, 100); Without the 3D look: Copyright © 2014 Future Technology Devices International Limited 195 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 cmd_scrollbar(20, 50, 120, 8, OPT_FLAT, 10, 40, 100); A brown-themed vertical scroll bar: cmd_bgcolor(0x402000); cmd_fgcolor(0x703800); cmd_scrollbar(140, 10, 8, 100, 0, 10, 40, 100); Copyright © 2014 Future Technology Devices International Limited 196 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5.35 CMD_SLIDER – draw a slider C prototype void cmd_slider( int16_t x, int16_t y, int16_t w, int16_t h, uint16_t options, uint16_t val, uint16_t range ); Parameters x x-coordinate of slider top-left, in pixels y y-coordinate of slider top-left, in pixels w width of slider, in pixels. If width is greater than height, the scroll bar is drawn horizontally h height of slider, in pixels. If height is greater than width, the scroll bar is drawn vertically options By default the slider is drawn with a 3D effect. OPT_FLAT removes the 3D effect val Displayed value of slider, between 0 and range inclusive range Copyright © 2014 Future Technology Devices International Limited 197 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 Maximum value Description Refer to CMD_PROGRESS for more information on physical Dimension. Command layout +0 CMD_SLIDER(0xffffff10) +4 X +6 Y +8 W +10 H +12 options +14 val +16 Range Examples A slider set to 50%: cmd_slider(20, 50, 120, 8, 0, 50, 100); Without the 3D look: cmd_slider(20, 50, 120, 8, OPT_FLAT, 50, 100); A brown-themed vertical slider with range 0- Copyright © 2014 Future Technology Devices International Limited 198 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 65535: cmd_bgcolor(0x402000); cmd_fgcolor(0x703800); cmd_slider(76, 10, 8, 100, 0, 20000, 65535); Copyright © 2014 Future Technology Devices International Limited 199 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5.36 CMD_DIAL – draw a rotary dial control C prototype void cmd_dial( int16_t x, int16_t y, int16_t r, uint16_t options, uint16_t val ); Parameters x x-coordinate of dial center, in pixels y y-coordinate of dial center, in pixels r radius of dial, in pixels. Options By default the dial is drawnwith a 3D effect and the value of options is zero. Options OPT_FLAT removes the 3D effect and its value is 256 val Specify the position of dial points by setting value between 0 and 65535 inclusive. 0 means that the dial points straight down, 0x4000 left, 0x8000 up, and0xc000 right. Copyright © 2014 Future Technology Devices International Limited 200 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 Description The details of physical dimension are The marker is a line of width r*(12/256), drawn at a distance r*(140/256)to r*(210/256) from the center Refer to Co-processor engine widgets physical dimensions for more information. Command layout +0 CMD_DIAL(0xffffff2d) +4 X +6 Y +8 r +10 options +12 val Examples A dial set to 50%: cmd_dial(80, 60, 55, 0, 0x8000); Without the 3D look: cmd_dial(80, 60, 55, OPT_FLAT, 0x8000); Dials set to 0%, 33% and 66%: Copyright © 2014 Future Technology Devices International Limited 201 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 cmd_dial(28, 60, 24, 0, 0x0000); cmd_text(28, “0%”); 100, 26, OPT_CENTER, cmd_dial(80, 60, 24, 0, 0x5555); cmd_text(80, “33%”); 100, 26, OPT_CENTER, cmd_dial(132, 60, 24, 0, 0xaaaa); cmd_text(132, 100, 26, OPT_CENTER, “66%”); Copyright © 2014 Future Technology Devices International Limited 202 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5.37 CMD_TOGGLE – draw a toggle switch C prototype void cmd_toggle( int16_t x, int16_t y, int16_t w, int16_t font, uint16_t options, uint16_t state, const char* s ); Parameters x x-coordinate of top-left of toggle, in pixels y y-coordinate of top-left of toggle, in pixels w width of toggle, in pixels font font to use for text, 0-31. See ROM and RAM Fonts options By default the toggle is drawn with a 3D effect and the value of options is zero. Options OPT_FLAT removes the 3D effect and its value is 256 Copyright © 2014 Future Technology Devices International Limited 203 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 state state of the toggle: 0 is off, 65535 is on. S String label for toggle. A character value of 255 (in C it can be written as \xff) separates the two labels. Description The details of physical dimension are Outer bar radius I is font height*(20/16) Knob radius is r-1.5 Refer to Co-processor engine widgets physical dimensions for more information. Command layout +0 CMD_TOGGLE(0xffffff12) +4 X +6 Y +8 W +10 Font +12 Options +14 State +16 S .. .. .. 0 Examples Using a medium font, in the two states cmd_toggle(60, 20, 33, 27, 0, 0, “no” “ \xff” “yes”); cmd_toggle(60, 60, 33, 27, 0, 65535, “no” “\xff" “yes”); Copyright © 2014 Future Technology Devices International Limited 204 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 Without the 3D look cmd_toggle(60, 20, 33, 27, OPT_FLAT, 0, “no” “\xff” “yes”); cmd_toggle(60, 60, 33, 27, OPT_FLAT, 65535, “no” “\xff” “yes”); With different background and foreground colors: cmd_bgcolor(0x402000); cmd_fgcolor(0x703800); cmd_toggle(60, 20, 33, 27, 0, 0, “no” “\xff” “yes”); cmd_toggle(60, 60, 33, 27, 0, 65535, “no” “\xff” “yes”); Copyright © 2014 Future Technology Devices International Limited 205 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5.38 CMD_TEXT - draw text C prototype void cmd_text( int16_t x, int16_t y, int16_t font, uint16_t options, const char* s ); Parameters x x-coordinate of text base, in pixels y y-coordinate of text base, in pixels font Font to use for text, 0-31. See ROM and RAM Fonts options By default (x,y) is the top-left pixel of the text and the value of options is zero. OPT_CENTERX centers the text horizontally, OPT_CENTERY centers it vertically. OPT_CENTER centers the text in both directions. OPT_RIGHTX right-justifies the text, so that the x is the rightmost pixel. The value of OPT_RIGHTX is 2048. Text string The text string itself which should be terminated by a null character Copyright © 2014 Future Technology Devices International Limited 206 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 Command layout +0 CMD_TEXT(0xffffff0c) +4 X +6 Y +8 Font +10 Options +12 S .. .. .. 0 (null character to terminate string) Examples Plain text at (0,0) in the largest font: cmd_text(0, 0, 31, 0, “Text!”); Using a smaller font: cmd_text(0, 0, 26, 0, “Text!”); Copyright © 2014 Future Technology Devices International Limited 207 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 Centered horizontally: cmd_text(80, 60, 31, OPT_CENTERX, “Text!”); Right-justified: cmd_text(80, 60, 31, OPT_RIGHTX, “Text!”); Centered vertically: cmd_text(80, 60, 31, OPT_CENTERY, “Text!”); Copyright © 2014 Future Technology Devices International Limited 208 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 Centered both horizontally and vertically: cmd_text(80, 60, 31, OPT_CENTER, “Text!”); Copyright © 2014 Future Technology Devices International Limited 209 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5.39 CMD_NUMBER - draw a decimal number C prototype void cmd_number( int16_t x, int16_t y, int16_t font, uint16_t options, int32_t n ); Parameters x x-coordinate of text base, in pixels y y-coordinate of text base, in pixels font font to use for text, 0-31. See ROM and RAM Fonts options By default (x,y) is the top-left pixel of the text. OPT_CENTERX centers the text horizontally, OPT_CENTERY centers it vertically. OPT_CENTER centers the text in both directions. OPT_RIGHTX right-justifies the text, so that the x is the rightmost pixel. By default the number is displayed with no leading zeroes, but if a width 1-9 is specified in the options, then the number is padded if necessary with leading zeroes so that it has the given width. If OPT_SIGNED is given, the number is treated as signed, and prefixed by a minus sign if negative. n The number to display, either unsigned or signed 32-bit Copyright © 2014 Future Technology Devices International Limited 210 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 Command layout +0 CMD_NUMBER(0xffffff2e) +4 X +6 Y +8 Font +10 Options +12 n Examples A number: cmd_number(20, 60, 31, 0, 42); Centered: cmd_number(80, 60, 31, OPT_CENTER, 42); Copyright © 2014 Future Technology Devices International Limited 211 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 Signed output of positive and negative numbers: cmd_number(20, 20, 31, OPT_SIGNED, 42); cmd_number(20, 60, 31, OPT_SIGNED, -42); Forcing width to 3 digits, right-justified cmd_number(150, 20, 31, OPT_RIGHTX | 3, 42); cmd_number(150, 60, 31, OPT_SIGNED | OPT_RIGHTX | 3, -1); Copyright © 2014 Future Technology Devices International Limited 212 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 CMD_LOADIDENTI–Y - Set the current matrix to the identity matrix This command instructs the co-processor engine of the FT800 to set the current matrix to the identity matrix, so that co-processor engine is able to form the new matrix as requested by CMD_SCALE, CMD_ROTATE,CMD_TRANSLATE command. For more information on the identity matrix, please see Bitmap transformation matrix section. C prototype void cmd_loadidentity( ); Command layout +0 CMD_LOADIDENTITY(0xffffff26) 5.40 CMD_SETMATRIX - write the current matrix to the display list The co-processor engine assigns the value of the current matrix to the bitmap transform matrix of the graphics engine by generating display list commands, i.e., BITMAP_TRANSFORM_A-F. After this command, the following bitmap rendering operation will be affected by the new transform matrix. C prototype void cmd_setmatrix( ); Command layout +0 CMD_SETMATRIX(0xffffff2a) Parameter None 5.41 CMD_GETMATRIX coefficients - retrieves the current matrix To retrieve the current matrix within the context of co-processor engine. Please note the matrix within the context of co-processor engine will not apply to the bitmap transformation until it is passed to graphics engine through CMD_SETMATRIX. C prototype void cmd_getmatrix( int32_t a, int32_t b, Copyright © 2014 Future Technology Devices International Limited 213 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 int32_t c, int32_t d, int32_t e, int32_t f ); Parameters a output parameter; written with matrix coefficient a. See the parameter a of the command BITMAP_TRANSFORM_A for formatting. b output parameter; written with matrix coefficient b. See the parameter b of the command BITMAP_TRANSFORM_B for formatting. c output parameter; written with matrix coefficient c. See the parameter c of the command BITMAP_TRANSFORM_C for formatting. d output parameter; written with matrix coefficient d. See the parameter d of the command BITMAP_TRANSFORM_D for formatting. e output parameter; written with matrix coefficient e. See the parameter e of the command BITMAP_TRANSFORM_E for formatting. f output parameter; written with matrix coefficient f. See the parameter f of the command BITMAP_TRANSFORM_F for formatting. Command layout +0 CMD_GETMATRIX(0xffffff33) +4 A +8 B +12 C +16 D +20 E +24 F Copyright © 2014 Future Technology Devices International Limited 214 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5.42 CMD_GETPTR - get the end memory address of inflated data C prototype void cmd_getptr( uint32_t result ); Parameters result The end address of decompressed data done by CMD_INFLATE. The starting address of decompressed data as was specified by CMD_INFLATE, while the end address of decompressed data can be retrieved by this command. It is one out parameter and can be passed in as any value with CMD_GETPTR to RAM_CMD. Command layout +0 CMD_GETPTR (0xffffff23) +4 result Examples cmd_inflate(1000); //Decompress the data into RAM_G + 1000 ...... //Following the zlib compressed data While(rd16(REG_CMD_WRITE) != rd16(REG_CMD_READ)); //Wait compression was done till the uint16_t x = rd16(REG_CMD_WRITE); uint32_t ending_address = 0; cmd_getptr(0); ending_address = rd32(RAM_CMD + x + 4); Code snippet 13 CMD_GETPTR command example Copyright © 2014 Future Technology Devices International Limited 215 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 5.43 CMD_GETPROPS get the decompressed by CMD_LOADIMAGE Clearance No.: FTDI#349 image properties C prototype void cmd_getprops( uint32_t &ptr, uint32_t &width, uint32_t &height); Parameters ptr The address of image in RAM_G which was decompressed by last CMD_LOADIMAGE before this command. It is an output parameter. width The width of image which was decompressed by last CMD_LOADIMAGE before this command. It is an output parameter. height The height of image which was decompressed by last CMD_LOADIMAGE before this command. It is an output parameter. Command layout +0 CMD_GETPROPS (0xffffff25) +4 ptr +8 width +12 Height Description This command is used to retrieve properties of image which was decompressed by CMD_LOADIMAGE. All the parameters will be filled out by coprocessor after this command is executed successfully. Examples Please refer to the CMD_GETPTR 5.44 CMD_SCALE - apply a scale to the current matrix C prototype void cmd_scale( int32_t sx, int32_t sy ); Parameters sx x scale factor, in signed 16. 16 bit fixed-point form. sy y scale factor, in signed 16. 16 bit fixed-point form. Copyright © 2014 Future Technology Devices International Limited 216 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 Command layout +0 CMD_SCALE(0xffffff28) +4 sx +8 sy Examples To zoom a bitmap 2X: cmd(BEGIN(BITMAPS)); cmd_loadidentity(); cmd_scale(2 * 65536, 2 * 65536); cmd_setmatrix(); cmd(VERTEX2II(68, 28, 0, 0)); Copyright © 2014 Future Technology Devices International Limited 217 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 To zoom a bitmap 2X around its center: cmd(BEGIN(BITMAPS)); cmd_loadidentity(); cmd_translate(65536 * 32, 65536 * 32); cmd_scale(2 * 65536, 2 * 65536); cmd_translate(65536 * -32, 65536 * 32); cmd_setmatrix(); cmd(VERTEX2II(68, 28, 0, 0)); Copyright © 2014 Future Technology Devices International Limited 218 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5.45 CMD_ROTATE - apply a rotation to the current matrix C prototype void cmd_rotate( int32_t a ); Parameters a Clockwise rotation angle, in units of 1/65536 of a circle Command layout +0 CMD_ROTATE(0xffffff29) +4 a Examples To rotate the bitmap clockwise by 10 degrees with respect to the top left of the bitmap: cmd(BEGIN(BITMAPS)); cmd_loadidentity(); cmd_rotate(10 * 65536 / 360); cmd_setmatrix(); cmd(VERTEX2II(68, 28, 0, 0)); To rotate the bitmap counter clockwise by 33 degrees wrt top left of the bitmap: cmd(BEGIN(BITMAPS)); cmd_loadidentity(); cmd_rotate(-33 * 65536 / 360); cmd_setmatrix(); cmd(VERTEX2II(68, 28, 0, 0)); Copyright © 2014 Future Technology Devices International Limited 219 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 Rotating a 64 x 64 bitmap around its center: cmd(BEGIN(BITMAPS)); cmd_loadidentity(); cmd_translate(65536 * 32, 65536 * 32); cmd_rotate(90 * 65536 / 360); cmd_translate(65536 * -32, 65536 * 32); cmd_setmatrix(); cmd(VERTEX2II(68, 28, 0, 0)); Copyright © 2014 Future Technology Devices International Limited 220 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5.46 CMD_TRANSLATE - apply a translation to the current matrix C prototype void cmd_translate( int32_t tx, int32_t ty ); Parameters tx x translate factor, in signed 16.16 bit fixed-point form. ty y translate factor, in signed 16.16 bit fixed-point form. Command layout +0 CMD_TRANSLATE(0xffffff27) +4 Tx +8 Ty Examples To translate the bitmap 20 pixels to the right: cmd(BEGIN(BITMAPS)); cmd_loadidentity(); cmd_translate(20 * 65536, 0); cmd_setmatrix(); cmd(VERTEX2II(68, 28, 0, 0)); Copyright © 2014 Future Technology Devices International Limited 221 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 To translate the bitmap 20 pixels to the left: cmd(BEGIN(BITMAPS)); cmd_loadidentity(); cmd_translate(-20 * 65536, 0); cmd_setmatrix(); cmd(VERTEX2II(68, 28, 0, 0)); Copyright © 2014 Future Technology Devices International Limited 222 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5.47 CMD_CALIBRATE - execute the touch screen calibration routine The calibration procedure collects three touches from the touch screen, then computes and loads an appropriate matrix into REG_TOUCH_TRANSFORM_A-F. To use it, create a display list and then use CMD_CALIBRATE. The co-processor engine overlays the touch targets on the current display list, gathers the calibration input and updates REG_TOUCH_TRANSFORM_A-F. C prototype void cmd_calibrate( uint32_t result ); Parameters result output parameter; written with 0 on failure of calibration. The completion of this function is detected when the value of REG_CMD_READ is equal to REG_CMD_WRITE. Command layout +0 CMD_CALIBRATE(0xffffff15) +4 result Examples cmd_dlstart(); cmd(CLEAR(1,1,1)); cmd_text(80, 30, 27, OPT_CENTER, "Please tap on the dot"); cmd_calibrate(); Code snippet 14 CMD_CALIBRATE example Copyright © 2014 Future Technology Devices International Limited 223 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5.48 CMD_SPINNER - start an animated spinner The spinner is an animated overlay that shows the user that some task is continuing. To trigger the spinner, create a display list and then use CMD_SPINNER. The co-processor engine overlays the spinner on the current display list, swaps the display list to make it visible, then continuously animates until it receives CMD_STOP. REG_MACRO_0 and REG_MACRO_1 registers are utilized to perform the animation kind of effect. The frequency of points movement is with respect to the display frame rate configured. Typically for 480x272 display panels the display rate is ~60fps. For style 0 and 60fps, the point repeats the sequence within 2 seconds. For style 1 and 60fps, the point repeats the sequence within 1.25 seconds. For style 2 and 60fps, the clock hand repeats the sequence within 2 seconds. For style 3 and 60fps, the moving dots repeat the sequence within 1 second. Note that only one of CMD_SKETCH, CMD_SCREENSAVER, or CMD_SPINNER can be active at one time. C prototype void cmd_spinner( int16_t x, int16_t y, uint16_t style, uint16_t scale ); Command layout +0 CMD_SPINNER(0xffffff16) +4 X +6 Y +8 Style +10 Scale Copyright © 2014 Future Technology Devices International Limited 224 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 Parameters X The X coordinate of top left of spinner Y The Y coordinate of top left of spinner Style The style of spinner. Valid range is from 0 to 3. Scale The scaling coefficient of spinner. 0 means no scaling. Examples Create a display list, then start the spinner: cmd_dlstart(); cmd(CLEAR(1,1,1)); cmd_text(80, 30, 27, OPT_CENTER, "Please wait..."); cmd_spinner(80, 60, 0, 0); Spinner style 0, a circle of dots: cmd_spinner(80, 60, 0, 0); Style 1, a line of dots: Copyright © 2014 Future Technology Devices International Limited 225 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 cmd_spinner(80, 60, 1, 0); Style 2, a rotating clock hand: cmd_spinner(80, 60, 2, 0); Style 3, two orbiting dots: cmd_spinner(80, 60, 3, 0); Half screen, scale 1: Copyright © 2014 Future Technology Devices International Limited 226 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 cmd_spinner(80, 60, 0, 1); Full screen, scale 2: cmd_spinner(80, 60, 0, 2); Copyright © 2014 Future Technology Devices International Limited 227 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5.49 CMD_SCREENSAVER - start an animated screensaver After the screensaver command, the co-processor engine continuously updates REG_MACRO_0 with VERTEX2F with varying (x,y) coordinates. With an appropriate display list, this causes a bitmap to move around the screen without any MCU work. Command CMD_STOP stops the update process. Note that only one of CMD_SKETCH, CMD_SCREENSAVER, or CMD_SPINNER can be active at one time. C prototype void cmd_screensaver( ); Description REG_MACRO_0 is updated with respect to frequency of frames displayed (depending on the display registers configuration). Typically for 480x272 display the frame rate is around 60 frame per second. Command layout +0 CMD_SCREENSAVER(0xffffff2f) Examples To start the screensaver, create a display list using a MACRO instruction – the coprocessor engine will update it continuously: cmd_screensaver(); cmd(BITMAP_SOURCE(0)); cmd(BITMAP_LAYOUT(RGB565, 128, 64)); cmd(BITMAP_SIZE(NEAREST,BORDER,BORDER, 40, 30)); cmd(BEGIN(BITMAPS)); cmd(MACRO(0)); cmd(DISPLAY()); Code snippet 15 CMD_SCREENSAVER example Here is the result: Copyright © 2014 Future Technology Devices International Limited 228 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5.50 CMD_SKETCH - start a continuous sketch update After the sketch command, the co-processor engine continuously samples the touch inputs and paints pixels into a bitmap, according to the touch (x, y). This means that the user touch inputs are drawn into the bitmap without any need for MCU work. Command CMD_STOP stops the sketch process. Note that only one of CMD_SKETCH, CMD_SCREENSAVER, or CMD_SPINNER can be active at one time. This command is applicable for FT800 and FT801 users is recommended to use CMD_CSKETCH since the optimization has been done for capacitive touch. C prototype void cmd_sketch( int16_t x, int16_t y, uint16_t w, uint16_t h, uint32_t ptr, uint16_t format ); Parameters x x-coordinate of sketch area top-left, in pixels y y-coordinate of sketch area top-left, in pixels w Width of sketch area, in pixels h Height of sketch area, in pixels ptr Base address of sketch bitmap format Format of sketch bitmap, either L1 or L8 Description Please note that update frequency of bitmap data in graphics memory depends on sampling frequency of ADC built-in circuit of FT800, which is up to 1000 Hz. Command layout Copyright © 2014 Future Technology Devices International Limited 229 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 +0 CMD_SKETCH(0xffffff30) +4 X +6 Y +8 W +10 H +12 Ptr +16 Format Clearance No.: FTDI#349 Examples To start sketching into a 480x272 L1 bitmap: cmd_memzero(0, 480 * 272 / 8); cmd_sketch(0, 0, 480, 272, 0, L1); //Then to display the bitmap cmd(BITMAP_SOURCE(0)); cmd(BITMAP_LAYOUT(L1, 60, 272)); cmd(BITMAP_SIZE(NEAREST, BORDER, BORDER, 480, 272)); cmd(BEGIN(BITMAPS)); cmd(VERTEX2II(0, 0, 0, 0)); //Finally, to stop sketch updates cmd_stop(); Code snippet 16 CMD_SKETCH example Copyright © 2014 Future Technology Devices International Limited 230 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5.51 CMD_STOP - stop any of spinner, screensaver or sketch This command is to inform the co-processor engine to stop the periodic operation, which is triggered by CMD_SKETCH , CMD_SPINNER or CMD_SCREENSAVER. C prototype void cmd_stop( ); Command layout +0 CMD_STOP(0xffffff17) Parameters None Description For CMD_SPINNER and CMD_SCREENSAVER, REG_MACRO_0 and REG_MACRO_1 will be stopped updating. For CMD_SKETCH or CMD_CSKETCH, the bitmap data in RAM_G will be stopped updating. Examples See CMD_SKETCH,CMD_CSKETCH, CMD_SPINNER, CMD_SCREENSAVER Copyright © 2014 Future Technology Devices International Limited 231 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5.52 CMD_SETFONT - set up a custom font CMD_SETFONT is used to register one custom defined bitmap font into the FT800 coprocessor engine. After registration, the FT800 co-processor engine is able to use the bitmap font with its co-processor command. About the details about how to set up custom font, please refer to ROM and RAM Fonts. C prototype void cmd_setfont( uint32_t font, uint32_t ptr ); Command layout +0 CMD_SETFONT(0xffffff2b) +4 font +8 ptr Parameters font The bitmap handle from 0 to 14. Bitmap handle 15 can be used conditionally. Please see 4.6 ptr The metric block address in RAM. 4 bytes aligned is required. Examples With a suitable font metric block loaded in RAM at address 1000, to set it up for use with objects as font 7: cmd_setfont(7, 1000); cmd_button(20, 20, 120, 40, 7, 0, "custom font!"); // // // // x,y width,height in pixels font 7, just loaded default options,3D style Code snippet 17 CMD_SETFONT example Copyright © 2014 Future Technology Devices International Limited 232 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5.53 CMD_TRACK - track touches for a graphics object This command will enable co-processor engine to track the touch on the particular graphics object with one valid tag value assigned. Then, co-processor engine will update the REG_TRACKER periodically with the frame rate of LCD display panel. Co-processor engine tracks the graphics object in rotary tracker mode and linear tracker mode: rotary tracker mode – Track the angle between the touching point and the center of graphics object specified by tag value. The value is in units of 1/65536 of a circle. 0 means that the angle is straight down, 0x4000 left, 0x8000 up, and 0xC000 right from the center. Linear tracker mode – If parameter w is greater than h, track the relative distance of touching point to the width of graphics object specified by tag value. If parameter w is not greater than h, Track the relative distance of touching point to the height of graphics object specified by tag value. The value is in units of 1/65536 of the width or height of graphics object. The distance of touching point refers to the distance from the top left pixel of graphics object to the coordinate of touching point. C prototype void cmd_track( int16_t x, int16_t y, int16_t w, int16_t h, int16_t tag ); Parameters x For linear tracker functionality, x-coordinate of track area top-left, in pixels. For rotary tracker functionality, x-coordinate of track area center, in pixels. y For linear tracker functionality, y-coordinate of track area top-left, in pixels. For rotary tracker functionality, y-coordinate of track area center, in pixels. w Width of track area, in pixels. h Height of track area, in pixels. Please note: A w and h of (1,1) means that the tracker is rotary, and reports an Copyright © 2014 Future Technology Devices International Limited 233 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 angle value in REG_TRACKER. A w and h of functionality of co-processor engine. Clearance No.: FTDI#349 (0,0) disables the track tag tag of the graphics object to be tracked, 1-255 Command layout +0 CMD_TRACK(0xffffff2c) +4 X +6 Y +8 W +10 h +12 tag Examples Horizontal track of rectangle dimension 40x12pixels and the present touch is at 50%: dl( CLEAR_COLOR_RGB(5, 45, 110) ); dl( COLOR_RGB(255, 168, 64) ); dl( CLEAR(1 ,1 ,1) ); dl( BEGIN(RECTS) ); dl( VERTEX2F(60 * 16,50 * 16) ); dl( VERTEX2F(100 * 16,62 * 16) ); dl( COLOR_RGB(255, 0, 0) ); dl( VERTEX2F(60 * 16,50 * 16) ); dl( VERTEX2F(80 * 16,62 * 16) ); dl( COLOR_MASK(0 ,0 ,0 ,0) ); dl( TAG(1) ); dl( VERTEX2F(60 * 16,50 * 16) ); dl( VERTEX2F(100 * 16,62 * 16) ); cmd_track(60 * 16, 50 * 16, 40, 12, 1); Copyright © 2014 Future Technology Devices International Limited 234 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 Vertical track of rectangle dimension 12x40 pixels and the present touch is at 50%: dl( CLEAR_COLOR_RGB(5, 45, 110) ); dl( COLOR_RGB(255, 168, 64) ); dl( CLEAR(1 ,1 ,1) ); dl( BEGIN(RECTS) ); dl( VERTEX2F(70 * 16,40 * 16) ); dl( VERTEX2F(82 * 16,80 * 16) ); dl( COLOR_RGB(255, 0, 0) ); dl( VERTEX2F(70 * 16,40 * 16) ); dl( VERTEX2F(82 * 16,60 * 16) ); dl( COLOR_MASK(0 ,0 ,0 ,0) ); dl( TAG(1) ); dl( VERTEX2F(70 * 16,40 * 16) ); dl( VERTEX2F(82 * 16,80 * 16) ); cmd_track(70 * 16, 40 * 16, 12, 40, 1); Circular track centered at (80,60) display location dl( CLEAR_COLOR_RGB(5, 45, 110) ); dl( COLOR_RGB(255, 168, 64) ); dl( CLEAR(1 ,1 ,1) ); dl( TAG(1) ); dl( BEGIN(POINTS) ); dl( POINT_SIZE(20 * 16) ); dl( VERTEX2F(80 * 16, 60 * 16) ); cmd_track(80 * 16, 60 * 16, 1, 1, 1); To draw a dial with tag 33 centered at (80, 60), adjustable by touch: uint16_t angle = 0x8000; Copyright © 2014 Future Technology Devices International Limited 235 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 cmd_track(80, 60, 1, 1, 33); while (1) { ... cmd(TAG(33)); cmd_dial(80, 60, 55, 0, angle); ... uint32_t tracker = rd32(REG_TRACKER); if ((tracker & 0xff) == 33) angle = trackeI> 16; ... } To make an adjustable slider with tag 34: uint16_t val = 0x8000; cmd_track(20, 50, 120, 8, 34); Ile (1) { ... cmd(TAG(34)); cmd_slider(20, 50, 120, 8, val, 65535); ... uint32_t tracker = rd32(REG_TRACKER); if ((tracker & 0xff) == 33) val = tracker >> 16; ... } – Copyright © 2014 Future Technology Devices International Limited 236 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 5.54 CMD_SNAPSHOT - take a snapshot of the current screen This command causes the co-processor engine to take a snapshot of the current screen, and write the result into RAM_G as a ARGB4 bitmap. The size of the bitmap is the size of the screen, given by the REG_HSIZE and REG_VSIZE registers. During the snapshot process, the display should be disabled by setting REG_PCLK to 0 to avoid display glitch. Because co-processor engine needs to write the result into the destination address, the destination address must be never used or referenced by graphics engine. C prototype void cmd_snapshot( uint32_t ptr ); Parameters ptr Snapshot destination address, in RAM_G Command layout +0 CMD_SNAPSHOT(0xffffff1f) +4 ptr Examples To take a snapshot of the current 160 x 120 screen, then use it as a bitmap in the new display list: wr(REG_PCLK,0);//Turn off the PCLK wr16(REG_HSIZE,120); wr16(REG_WSIZE,160); cmd_snapshot(0);//Taking snapshot. wr(REG_PCLK,5);//Turn on the PCLK wr16(REG_HSIZE,272); wr16(REG_WSIZE,480); cmd_dlstart(); cmd(CLEAR(1,1,1)); cmd(BITMAP_SOURCE(0)); cmd(BITMAP_LAYOUT(ARGB4, 2 * 160, 120)); cmd(BITMAP_SIZE(NEAREST, BORDER, BORDER, 160, 120)); cmd(BEGIN(BITMAPS)); cmd(VERTEX2II(10, 10, 0, 0)); Code snippet 18 CMD_SNAPSHOT 160x120–screen 5.55 CMD_LOGO - play FTDI logo animation Copyright © 2014 Future Technology Devices International Limited 237 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 The logo command causes the co-processor engine to play back a short animation of the FTDI logo. During logo playback the MCU should not access any FT800 resources. After 2.5 seconds have elapsed, the co-processor engine writes zero to REG_CMD_READ and REG_CMD_WRITE, and starts waiting for commands. After this command is complete, the MCU shall write the next command to the starting address of RAM_CMD. C prototype void cmd_logo( ); Command layout +0 CMD_LOGO(0xffffff31) Examples To play back the logo animation: cmd_logo(); delay(3000); // Optional to wait While( (0 != rd16(REG_CMD_WRITE)) && (rd16(REG_CMD_WRITE) != rd16(REG_CMD_READ) ));//Wait till both read & write pointer register are equal to zero Code snippet 19 CMD_LOGO command example Copyright © 2014 Future Technology Devices International Limited 238 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 6 FT801 operation 6.1 FT801 introduction FT800 and FT801 share exactly the same graphics and audio feature sets. The touch capabilities of the FT800 devices are designed for controlling touch on a resistive panel, while FT801 is for capacitive touch and allows up to 5 touch points. Therefore, the FT801 has a different touch engine and touch control register set from the FT800. All the registers which name starts with “REG_TOUCH” have been assigned to new name “REG_CTOUCH”. 6.2 FT801 touch engine The FT801 has the new Capacitive Touch Screen Engine(CTSE) built in with the following features: I2C interface to Capacitive Touch Panel Module(CTPM) Support up to 5 touching points at the same time Support CTPM with Focaltech FT5x06 series or Azotech IQS5xx series drive chip Compatibility mode and Extended mode By default, the FT801 touch engine works in compatibility mode and only one touching point is detected. In extended mode, the FT801 touch engine can detect up to 5 touching points simultaneously. 6.3 FT801 touch registers FT801 has re-defined the touch registers of the FT800 as below: Register Definition 76 REG_CTOUCH_MODE Definition REG_CTOUCH_MODE Definition Reserved R/W 31 Address: 2 1 0 0x1024F0 Reset Value: 0x3 Bit 0 - 1 : The host can set these two bits to control the touch screen sampling mode of the FT801 touch engine, as per: 00: Off mode. No sampling happens. 01: Not defined. 10: Not defined. 11: On Mode. Bit 2 - 31: Reserved Copyright © 2014 Future Technology Devices International Limited 239 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 77 Clearance No.: FTDI#349 REG_CTOUCH_EXTENDED Definition REG_CTOUCH_EXTEND Definition Reserved R/W 31 Address: 1 0x1024F4 Reset Value: 0 0x1 Bit 0 : This bit controls the detection mode of the FT801 touch engine, as per: 0: Extended mode, multi-touch detection mode, up to 5 touch points 1: Compability mode, single touch detection mode Register Definition 78 REG_CTOUCH_TOUCH0_XY Definition REG_CTOUCH_TOUCH0_XY Definition RO 31 Address: RO 16 15 0x102510 0 Reset Value: 0x80008000 Bit 0 - 15 : The value of these bits are the Y coordinates of the first touch point. Bit 16 - 31: The value of these bits are X coordinates of the first touch point. Note: This register is applicable for extended mode and compability mode. For compability mode, this register reflects the position of the only touch point. Copyright © 2014 Future Technology Devices International Limited 240 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 79 Clearance No.: FTDI#349 REG_CTOUCH_TOUCH1_XY Definition REG_CTOUCH_TOUCH1_XY Definition RO RO 31 Address: 16 15 0x102508 0 Reset Value: 0x80008000 Bit 0 - 15 : The value of these bits are the Y coordinates of the second touch point. Bit 16 - 31: The value of these bits are X coordinates of the second touch point. Note: This register is only applicable in the extended mode Register Definition 80 REG_CTOUCH_TOUCH2_XY Definition REG_CTOUCH_TOUCH2_XY Definition RO 31 Address: RO 16 15 0x102574 0 Reset Value: 0x80008000 Bit 0 - 15 : The value of these bits are the Y coordinates of the third touch point. Bit 16 - 31: The value of these bits are X coordinates of the third touch point. Note: This register is only applicable in the extended mode Copyright © 2014 Future Technology Devices International Limited 241 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 81 Clearance No.: FTDI#349 REG_CTOUCH_TOUCH3_XY Definition REG_CTOUCH_TOUCH3_XY Definition RO RO 31 Address: 16 15 0x102578 0 Reset Value: 0x80008000 Bit 0 - 15 : The value of these bits are the Y coordinates of the fourth touch point. Bit 16 - 31: The value of these bits are X coordinates of the fourth touch point. Note: This register is only applicable in the extended mode Register Definition 82 REG_CTOUCH_TOUCH4_X Definition REG_CTOUCH_TOUCH4_X Definition RO 15 Address: 0 0x102538 Reset Value: 0x8000 Bit 0 - 15 : The value of these bits are the X coordinates of the fifth touch point. Note: This register is only applicable in the extended mode Copyright © 2014 Future Technology Devices International Limited 242 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Register Definition 83 Clearance No.: FTDI#349 REG_CTOUCH_TOUCH4_Y Definition REG_CTOUCH_TOUCH4_Y Definition RO 15 0 Address: 0x10250C Reset Value: 0x8000 Bit 0 - 15 : The value of these bits are the Y coordinates of the fifth touch point. Note: This register is only applicable in the extended mode REG_CTOUCH_TRANSFORM_A Definition REG_CTOUCH_TRANSFORM_A has the same definition with REG_TOUCH_TRANSFORM_A. See REG_TOUCH_TRANSFORM_A for more details REG_CTOUCH_TRANSFORM_B Definition REG_CTOUCH_TRANSFORM_B has the same definition with REG_TOUCH_TRANSFORM_B. See REG_TOUCH_TRANSFORM_B for more details REG_CTOUCH_TRANSFORM_C Definition REG_CTOUCH_TRANSFORM_C has the same definition with REG_TOUCH_TRANSFORM_C. See REG_TOUCH_TRANSFORM_C for more details REG_CTOUCH_TRANSFORM_D Definition REG_CTOUCH_TRANSFORM_D has the same definition with REG_TOUCH_TRANSFORM_D. See REG_TOUCH_TRANSFORM_D for more details REG_CTOUCH_TRANSFORM_E Definition REG_CTOUCH_TRANSFORM_E has the same definition with REG_TOUCH_TRANSFORM_E. See REG_TOUCH_TRANSFORM_E for more details REG_CTOUCH_TRANSFORM_F Definition REG_CTOUCH_TRANSFORM_F has the same definition with REG_TOUCH_TRANSFORM_F. See REG_TOUCH_TRANSFORM_F for more details Note: Calibration should only be performed in compatibility mode (default), in the same way as with resistive displays. REG_CTOUCH_RAW_XY Definition Copyright © 2014 Future Technology Devices International Limited 243 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 REG_CTOUCH_RAW_XY Definition RO 31 RO 16 15 Address: 0x102508 0 Reset Value: 0xFFFFFFFF Bit 0 - 15 : The value of these bits are Y coordinates of touch point but before going through transform matrix Bit 16 - 31: The value of these bits are X coordinates of touch point but before going through transform matrix Note: This register is only available in compatibility mode REG_CTOUCH_TAG Definition This register is available in both mode. In extended mode, only the first touch point, i.e., REG_CTOUCH_TOUCH0_XY is used to query the tag value and update this register with the result. It shares the same definition with REG_TOUCH_TAG. 6.4 Register summary Copyright © 2014 Future Technology Devices International Limited 244 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 Table 13 Touch Registers map table FT801- C Mode FT801 – E Mode Default Value (C Mode) Default Value (Extend Mode) FT800 Default Value Address Bit width REG _ CTO UCH_ EX TEND REG _ CTO UCH_ EX TEND 0x1 0x0 REG _ TO UCH_ ADC_ MO DE 0x01 1058036 4 bytes REG _ CTO UCH_ TO UCH0 _ X Y REG _ CTO UCH_ TO UCH0 _ X Y 0x80008000 0x80008000 REG _ TO UCH_ S CREEN_ X Y 0x80008000 1058064 4 bytes RE G _CT O UCH_RAW _X Y RE G _CT O UCH_T O UCH1_ XY 0xFFFFFFFF 0x80008000 REG _ TO UCH_ RAW_ X Y 0xFFFFFFFF 1058056 4 bytes NA RE G _CT O UCH_T O UCH2_ XY 0x0 0x80008000 REG _ TO UCH_ DIRECT_ X Y 0x0 1058164 4 bytes NA RE G _CT O UCH_T O UCH3_ XY NA 0x80008000 REG _ TO UCH_ DIRECT_ Z1Z2 NA 1058168 4 bytes NA RE G _CT O UCH_T O UCH4_ X 0x0 0x8000 REG _ ANALO G 0x0 1058104 2 bytes NA RE G _CT O UCH_T O UCH4_ Y 0x7FFF 0x8000 REG _ TO UCH_ RZ 0x7FFF 1058060 2 bytes RE G _CT O UCH_T RANS F O RM _A RE G _CT O UCH_T RANS F O RM _A 0x10000 0x10000 RE G _T O UCH_T RANS F O R M _A 0x10000 1058076 4 bytes RE G _CT O UCH_T RANS F O RM _B RE G _CT O UCH_T RANS F O RM _B 0x0 0x0 RE G _T O UCH_T RANS F O R M _B 0x0 1058080 4 bytes RE G _CT O UCH_T RANS F O RM _C RE G _CT O UCH_T RANS F O RM _C 0x0 0x0 RE G _T O UCH_T RANS F O R M _C 0x0 1058084 4 bytes RE G _CT O UCH_T RANS F O RM _D RE G _CT O UCH_T RANS F O RM _D 0x0 0x0 RE G _T O UCH_T RANS F O R M _D 0x0 1058088 4 bytes RE G _CT O UCH_T RANS F O RM _E RE G _CT O UCH_T RANS F O RM _E 0x10000 0x10000 RE G _T O UCH_T RANS F O R M _E 0x10000 1058092 4 bytes RE G _CT O UCH_T RANS F O RM _F RE G _CT O UCH_T RANS F O RM _F 0x0 0x0 RE G _T O UCH_T RANS F O R M _F 0x0 1058096 4 bytes RE G _CT O UCH_T AG 0x0 0x0 RE G _T O UCH_T AG 0x0 1058072 4 bytes RE G _CT O UCH_T AG Note: C Mode: Compatibility Mode, default mode after FT801 reset E Mode: Extented Mode 6.5 Calibration Calibration process initiated by CMD_CALIBRATE is only available in the compatibility mode. However, the results of calibration process are applicable to both compatibility mode and extended mode. As such, users are recommended to finish the calibration process before entering into extended mode. After calibration process is done, the registers REG_CTOUCH_TRANSFORM_A~F will be updated as coefficient of transformation matrix. 6.6 CMD_CSKETCH – Capacitive touch specific sketch This command has the same functionality as CMD_SKETCH except it has done the optimization for a capacitive touch panel. Because capacitive touch panels have lower sampling frequencies (around 100Hz) to report the coordinates, the sketch functionality updates less frequently compared to resistive touch. CMD_CSKETCH introduces a linear interpolation algorithm to provide a smoother effect when drawing the output line. Copyright © 2014 Future Technology Devices International Limited 245 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 Please note this command is not applicable to FT800 silicon. C prototype void cmd_csketch( int16_t x, int16_t y, uint16_t w, uint16_t h, uint32_t ptr, uint16_t format, uint16_t freq); Command layout +0 CMD_CSKETCH(0xffffff35) +4 X +6 Y +8 W +10 H +12 Ptr +16 Format +18 Freq Parameters x x-coordinate of sketch area top-left, in pixels y y-coordinate of sketch area top-left, in pixels w Width of sketch area, in pixels h Height of sketch area, in pixels ptr Base address of sketch bitmap format Copyright © 2014 Future Technology Devices International Limited 246 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 Format of sketch bitmap, either L1 or L8 freq The oversampling frequency. The typical value is 1500 to make sure the lines are connected smoothly. The value zero means no oversampling operation. Description This command is only valid for FT801 silicon. FT801 co-processor will oversample the coordinates reported by the capacitive touch panel in the frequency of ‘freq’ and forms the lines with a smoother effect. Examples Check the CMD_SKETCH example Copyright © 2014 Future Technology Devices International Limited 247 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 Appendix A – Document References 1) 2) 3) 4) FT800 Datasheet: DS_FT800_Embedded_Video_Engine OpenGL Reference Manual: The Official Reference Document to OpenGL, Version 1.4 FT801 Datasheet: DS_FT801 Application note of FT800 FT801 Internal Clock Trimming: AN_299_FT800_FT801_Internal_Clock_Trimming Copyright © 2014 Future Technology Devices International Limited 248 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 Appendix B – Acronyms and Abbreviations Terms Description CS Chip select DL/dl Display list EVE Embedded Video Engine GPIO General Purpose Input/output Hz/KHz/MHz Hertz/Kilo Hertz/Mega Hertz I2C Inter-Integrated Circuit LSB least significant bit MCU Micro controller unit MSB most significant bit OS operating system PWM Pulse-width modulation PWR Power RAM Random access memory RGB Red Blue Green SPI Serial Peripheral Interface USB Universal Serial Bus USB-IF USB Implementers Forum RO Read only fps Frame per second Copyright © 2014 Future Technology Devices International Limited 249 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 Appendix C – Memory Map Start Address End Address Size NAME Description 00 0000h 03 FFFFh 256 kB RAM_G Main graphics RAM 0C 0000h 0C 0003h 4B ROM_CHIPID FT800 chip identification and revision information: Byte [0:1] Chip ID: “0800” Byte [2:3] Version ID: “0100” FT801 chip identification and revision information: Byte [0:1] Chip ID: “0801” Byte [2:3] Version ID: “0100” 0B B23Ch 0F FFFBh 275 kB ROM_FONT Font table and bitmap 0F FFFCh 0F FFFFh 4B ROM_FONT_ADDR Font table pointer address 10 0000h 10 1FFFh 8 kB RAM_DL Display List RAM 10 2000h 10 23FFh 1 kB RAM_PAL Palette RAM 10 2400h 10 257Fh 380 B REG_* Registers 10 8000 h 10 8FFFh 4 kB RAM_CMD Graphics Engine Command Buffer 1C 2000 h 1C 27FFh 2 kB RAM_SCREENSHOT Screenshot readout buffer Note 1: The addresses beyond this table are reserved and shall not be read or written unless otherwise specified. Note 2: The ROM_CHIPID utilizes a part of shadow address from ROM_FONT address space. Copyright © 2014 Future Technology Devices International Limited 250 FT800 Series Programmer Guide Version 2.0 Document Reference No.: FT_000793 Clearance No.: FTDI#349 Appendix D – Revision History Document Title: FT800 Series Programmer Guide Document Reference No.: FT_000793 Clearance No.: FTDI#349 Product Page: http://www.ftdichip.com/FTProducts.htm Document Feedback: Send Feedback Revision Changes Date 0.1 Initial Draft Release 2012-08-01 2.0 FT801 content added 2014-08-01 Copyright © 2014 Future Technology Devices International Limited 251