x

Dependents:   20180621_FT813

Fork of FT810 by Curtis Mattull

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers FT_Gpu_Hal.h Source File

FT_Gpu_Hal.h

00001 /*!
00002  * \file FT_GPU_HAL.h
00003  *
00004  
00005  Curt added Load_raw 7/22/16
00006  
00007  
00008  
00009  * \author FTDI
00010  * \date 2013.04.24
00011  *
00012  * Copyright 2013 Future Technology Devices International Limited
00013  *
00014  * Project: FT813 or EVE compatible silicon
00015  * File Description:
00016  *    This file defines the generic APIs of host access layer for the FT813 or EVE compatible silicon.
00017  *    Application shall access FT813 or EVE resources over these APIs. In addition, there are
00018  *    some helper functions defined for FT813 coprocessor engine as well as host commands.
00019  * Rivision History:
00020  * ported to mbed by Peter Drescher, DC2PD 2014
00021  *
00022  */
00023  
00024 #ifndef FT_GPU_HAL_H
00025 #define FT_GPU_HAL_H
00026  
00027 #include "mbed.h"
00028 #include "FT_DataTypes.h"
00029  
00030 typedef enum {
00031     FT_GPU_I2C_MODE = 0,
00032     FT_GPU_SPI_MODE,
00033  
00034     FT_GPU_MODE_COUNT,
00035     FT_GPU_MODE_UNKNOWN = FT_GPU_MODE_COUNT
00036 } FT_GPU_HAL_MODE_E;
00037  
00038 typedef enum {
00039     OPENED,
00040     READING,
00041     WRITING,
00042     CLOSED,
00043     STATUS_COUNT,
00044     STATUS_ERROR = STATUS_COUNT
00045 } FT_GPU_HAL_STATUS_E;
00046  
00047 typedef struct {
00048     ft_uint8_t reserved;
00049 } Ft_Gpu_App_Context_t;
00050  
00051 typedef struct {
00052     /* Total number channels for libmpsse */
00053     ft_uint32_t TotalChannelNum;
00054 } Ft_Gpu_HalInit_t;
00055  
00056 typedef enum {
00057     FT_GPU_READ = 0,
00058     FT_GPU_WRITE,
00059 } FT_GPU_TRANSFERDIR_T;
00060  
00061  
00062 typedef struct {
00063     ft_uint32_t length; //IN and OUT
00064     ft_uint32_t address;
00065     ft_uint8_t  *buffer;
00066 } Ft_Gpu_App_Transfer_t;
00067 
00068 typedef struct {
00069     char name[50];
00070     uint32_t addr;
00071     uint32_t size;
00072     uint16_t fmt;
00073     uint16_t w;
00074     uint16_t h;
00075 } Ft_Gpu_App_Bitmap_t;
00076 
00077 class FT813
00078 {
00079 public:
00080     FT813(PinName mosi,
00081           PinName miso,
00082           PinName sck,
00083           PinName ss,
00084           PinName intr,
00085           PinName pd);
00086  
00087 private:
00088     SPI _spi;
00089     DigitalOut  _ss;
00090     DigitalOut  _pd;
00091     InterruptIn _f800_isr;
00092     ft_uint16_t _count;
00093     ft_uint32_t _address;
00094     ft_uint32_t _addresses[64];
00095     ft_uint16_t _bitmap_count;
00096     ft_uint32_t _orientation;
00097     ft_uint16_t _bitmapCount;
00098     ft_uint32_t _bitmapAddress;
00099 
00100 Ft_Gpu_App_Bitmap_t _bitmaps[64];
00101 
00102 //uint32_t screenshot[800*480];
00103 
00104     
00105 public:
00106     /* Global used for buffer optimization */
00107     //Ft_Gpu_Hal_Context_t host,*phost;
00108     Ft_Gpu_App_Context_t        app_header;
00109     ft_uint16_t cmd_fifo_wp; //coprocessor fifo write pointer
00110     ft_uint16_t dl_buff_wp;  //display command memory write pointer
00111     FT_GPU_HAL_STATUS_E        status;            //OUT
00112     ft_void_t*                 hal_handle;        //IN/OUT
00113     ft_uint32_t CmdBuffer_Index;
00114     ft_uint32_t DlBuffer_Index;
00115     ft_int16_t DispWidth;
00116     ft_int16_t DispHeight;
00117     ft_int16_t DispHCycle;
00118     ft_int16_t DispHOffset;
00119     ft_int16_t DispHSync0;
00120     ft_int16_t DispHSync1;
00121     ft_int16_t DispVCycle;
00122     ft_int16_t DispVOffset;
00123     ft_int16_t DispVSync0;
00124     ft_int16_t DispVSync1;
00125     ft_uint8_t DispPCLK;
00126     ft_char8_t DispSwizzle;
00127     ft_char8_t DispPCLKPol;
00128  
00129  
00130     ft_void_t BootupConfig(void);
00131     ft_bool_t Bootup(void);
00132  
00133  
00134     /*The basic APIs Level 1*/
00135     ft_bool_t              Init();
00136     ft_bool_t              Open();
00137  
00138     /*The APIs for reading/writing transfer continuously only with small buffer system*/
00139     ft_void_t              StartTransfer(FT_GPU_TRANSFERDIR_T rw,ft_uint32_t addr);
00140     ft_uint8_t             Transfer8(ft_uint8_t value);
00141     ft_uint16_t            Transfer16(ft_uint16_t value);
00142     ft_uint32_t            Transfer32(ft_uint32_t value);
00143     ft_void_t              EndTransfer();
00144  
00145     /*Read & Write APIs for both burst and single transfer,depending on buffer size*/
00146     ft_void_t              Read(Ft_Gpu_App_Transfer_t *transfer);
00147     ft_void_t              Write(Ft_Gpu_App_Transfer_t *transfer);
00148  
00149     ft_void_t              Close();
00150     ft_void_t              DeInit();
00151  
00152     /*Helper function APIs Read*/
00153     ft_uint8_t  Rd8(ft_uint32_t addr);
00154     ft_uint16_t Rd16(ft_uint32_t addr);
00155     ft_uint32_t Rd32(ft_uint32_t addr);
00156  
00157     /*Helper function APIs Write*/
00158     ft_void_t Wr8(ft_uint32_t addr, ft_uint8_t v);
00159     ft_void_t Wr16(ft_uint32_t addr, ft_uint16_t v);
00160     ft_void_t Wr32(ft_uint32_t addr, ft_uint32_t v);
00161  
00162     /*******************************************************************************/
00163     /*******************************************************************************/
00164     /*APIs for coprocessor Fifo read/write and space management*/
00165     ft_void_t Updatecmdfifo(ft_uint16_t count);
00166     ft_void_t WrCmd32(ft_uint32_t cmd);
00167     ft_void_t WrCmdBuf(ft_uint8_t *buffer,ft_uint16_t count);
00168     ft_void_t WaitCmdfifo_empty();
00169     ft_void_t ResetCmdFifo();
00170     ft_void_t CheckCmdBuffer(ft_uint16_t count);
00171     ft_void_t ResetDLBuffer();
00172  
00173     ft_void_t StartCmdTransfer(FT_GPU_TRANSFERDIR_T rw, ft_uint16_t count);
00174     ft_void_t Powercycle(ft_bool_t up);
00175  
00176  
00177     /*******************************************************************************/
00178     /*******************************************************************************/
00179     /*APIs for Host Commands*/
00180     typedef enum {
00181         FT_GPU_INTERNAL_OSC = 0x48, //default
00182         FT_GPU_EXTERNAL_OSC = 0x44,
00183     } FT_GPU_PLL_SOURCE_T;
00184     typedef enum {
00185         FT_GPU_PLL_48M = 0x62,  //default
00186         FT_GPU_PLL_36M = 0x61,
00187         FT_GPU_PLL_24M = 0x64,
00188     } FT_GPU_PLL_FREQ_T;
00189  
00190     typedef enum {
00191         FT_GPU_ACTIVE_M =  0x00,
00192         FT_GPU_STANDBY_M = 0x41,//default
00193         FT_GPU_SLEEP_M =   0x42,
00194         FT_GPU_POWERDOWN_M = 0x50,
00195     } FT_GPU_POWER_MODE_T;
00196  
00197 #define FT_GPU_CORE_RESET  (0x68)
00198  
00199     ft_int32_t hal_strlen(const ft_char8_t *s);
00200     ft_void_t Sleep(ft_uint16_t ms);
00201     ft_void_t ClockSelect(FT_GPU_PLL_SOURCE_T pllsource);
00202     ft_void_t PLL_FreqSelect(FT_GPU_PLL_FREQ_T freq);
00203     ft_void_t PowerModeSwitch(FT_GPU_POWER_MODE_T pwrmode);
00204     ft_void_t CoreReset();
00205 //ft_void_t Ft_Gpu_Hal_StartTransfer( ,FT_GPU_TRANSFERDIR_T rw,ft_uint32_t addr);
00206     ft_void_t WrMem(ft_uint32_t addr, const ft_uint8_t *buffer, ft_uint32_t length);
00207     ft_void_t WrMemFromFlash(ft_uint32_t addr,const ft_prog_uchar8_t *buffer, ft_uint32_t length);
00208     ft_void_t WrCmdBufFromFlash(FT_PROGMEM ft_prog_uchar8_t *buffer,ft_uint16_t count);
00209     ft_void_t RdMem(ft_uint32_t addr, ft_uint8_t *buffer, ft_uint32_t length);
00210     ft_void_t WaitLogo_Finish();
00211     ft_uint8_t TransferString(const ft_char8_t *string);
00212     ft_void_t HostCommand(ft_uint8_t cmd);
00213     ft_int32_t Dec2Ascii(ft_char8_t *pSrc,ft_int32_t value);
00214  
00215 
00216     ft_void_t DLstart();
00217     ft_void_t Swap();
00218     ft_void_t ColdStart();
00219     ft_void_t Interrupt(ft_uint32_t ms);
00220     ft_void_t Append(ft_uint32_t ptr, ft_uint32_t num);
00221     ft_void_t RegRead(ft_uint32_t ptr, ft_uint32_t result);
00222     ft_void_t MemWrite(ft_uint32_t ptr, ft_uint32_t num);
00223     ft_void_t Inflate(ft_uint32_t ptr);
00224     ft_void_t LoadImage(ft_uint32_t ptr, ft_uint32_t options);
00225     ft_void_t MediaFifo(ft_uint32_t ptr, ft_uint32_t size);
00226     ft_void_t PlayVideo(ft_uint32_t opts);
00227     ft_void_t VideoStart();
00228     ft_void_t VideoFrame(ft_uint32_t dst, ft_uint32_t ptr);
00229     ft_void_t Memcrc(ft_uint32_t ptr, ft_uint32_t num, ft_uint32_t result);
00230     ft_void_t MemZero(ft_uint32_t ptr, ft_uint32_t num);
00231     ft_void_t MemSet(ft_uint32_t ptr, ft_uint32_t value, ft_uint32_t num);
00232     ft_void_t Memcpy(ft_uint32_t dest, ft_uint32_t src, ft_uint32_t num);
00233     ft_void_t Button(ft_int16_t x, ft_int16_t y, ft_int16_t w, ft_int16_t h, ft_int16_t font, ft_uint16_t options, const ft_char8_t* s);
00234     ft_void_t Clock(ft_int16_t x, ft_int16_t y, ft_int16_t r, ft_uint16_t options, ft_uint16_t h, ft_uint16_t m, ft_uint16_t s, ft_uint16_t ms);
00235     ft_void_t FgColor(ft_uint32_t c);
00236     ft_void_t BgColor(ft_uint32_t c);
00237     ft_void_t GradColor(ft_uint32_t c);
00238     ft_void_t Gauge(ft_int16_t x, ft_int16_t y, ft_int16_t r, ft_uint16_t options, ft_uint16_t major, ft_uint16_t minor, ft_uint16_t val, ft_uint16_t range);
00239     ft_void_t Gradient(ft_int16_t x0, ft_int16_t y0, ft_uint32_t rgb0, ft_int16_t x1, ft_int16_t y1, ft_uint32_t rgb1);
00240     ft_void_t Keys(ft_int16_t x, ft_int16_t y, ft_int16_t w, ft_int16_t h, ft_int16_t font, ft_uint16_t options, const ft_char8_t* s);
00241     ft_void_t Progress(ft_int16_t x, ft_int16_t y, ft_int16_t w, ft_int16_t h, ft_uint16_t options, ft_uint16_t val, ft_uint16_t range);
00242     ft_void_t Scrollbar(ft_int16_t x, ft_int16_t y, ft_int16_t w, ft_int16_t h, ft_uint16_t options, ft_uint16_t val, ft_uint16_t size, ft_uint16_t range);
00243     ft_void_t Slider(ft_int16_t x, ft_int16_t y, ft_int16_t w, ft_int16_t h, ft_uint16_t options, ft_uint16_t val, ft_uint16_t range);
00244     ft_void_t Dial(ft_int16_t x, ft_int16_t y, ft_int16_t r, ft_uint16_t options, ft_uint16_t val);
00245     ft_void_t Toggle(ft_int16_t x, ft_int16_t y, ft_int16_t w, ft_int16_t font, ft_uint16_t options, ft_uint16_t state, const ft_char8_t* s);
00246     ft_void_t Text(ft_int16_t x, ft_int16_t y, ft_int16_t font, ft_uint16_t options, const ft_char8_t* s);
00247     ft_void_t SetBase(ft_uint32_t base);
00248     ft_void_t Number(ft_int16_t x, ft_int16_t y, ft_int16_t font, ft_uint16_t options, ft_int32_t n);
00249     ft_void_t LoadIdentity();
00250     ft_void_t SetMatrix();
00251     ft_void_t GetMatrix(ft_int32_t a, ft_int32_t b, ft_int32_t c, ft_int32_t d, ft_int32_t e, ft_int32_t f);
00252     ft_void_t GetPtr(ft_uint32_t result);
00253     ft_void_t GetProps(ft_uint32_t ptr, ft_uint32_t w, ft_uint32_t h);
00254     ft_void_t Scale(ft_int32_t sx, ft_int32_t sy);
00255     ft_void_t Rotate(ft_int32_t a);
00256     ft_void_t Translate(ft_int32_t tx, ft_int32_t ty);
00257     ft_void_t Calibrate(ft_uint32_t result);
00258     ft_void_t SetRotate(ft_uint32_t r);
00259     ft_void_t Spinner(ft_int16_t x, ft_int16_t y, ft_uint16_t style, ft_uint16_t scale);
00260     ft_void_t ScreenSaver();
00261     ft_void_t Sketch(ft_int16_t x, ft_int16_t y, ft_uint16_t w, ft_uint16_t h, ft_uint32_t ptr, ft_uint16_t format);
00262     ft_void_t Stop();
00263     ft_void_t SetFont(ft_uint32_t font, ft_uint32_t ptr);
00264     ft_void_t SetFont2(ft_uint32_t font, ft_uint32_t ptr, ft_uint32_t firstchar);
00265     ft_void_t SetScratch(ft_uint32_t handle);
00266     ft_void_t RomFont(ft_uint32_t font, ft_uint32_t rom_slot);
00267     ft_void_t Track(ft_int16_t x, ft_int16_t y, ft_int16_t w, ft_int16_t h, ft_int16_t tag);
00268     ft_void_t Snapshot(ft_uint32_t ptr);
00269     ft_void_t Snapshot2(ft_uint32_t fmt, ft_uint32_t ptr, ft_int16_t x, ft_int16_t y, ft_int16_t w, ft_int16_t h);
00270     ft_void_t SetBitmap(ft_int32_t addr, ft_int16_t fmt, ft_uint16_t width, ft_uint16_t height);
00271     ft_void_t Logo();
00272 
00273     ft_void_t Bitmap_Transform(ft_int32_t x0, ft_int32_t y0, ft_int32_t x1, ft_int32_t y1, ft_int32_t x2, ft_int32_t y2, ft_int32_t tx0, ft_int32_t ty0, ft_int32_t tx1, ft_int32_t ty1, ft_int32_t tx2, ft_int32_t ty2, ft_uint16_t result);
00274  
00275  
00276     ft_void_t SendCmd(ft_uint32_t cmd);
00277     ft_void_t SendStr(const ft_char8_t *s);
00278     ft_void_t StartFunc(ft_uint16_t count);
00279 //    ft_void_t EndFunc(ft_uint16_t count);
00280     ft_void_t EndFunc();
00281     
00282     ft_void_t TouchTransform(ft_int32_t x0, ft_int32_t y0, ft_int32_t x1, ft_int32_t y1, ft_int32_t x2, ft_int32_t y2, ft_int32_t tx0, ft_int32_t ty0, ft_int32_t tx1, ft_int32_t ty1, ft_int32_t tx2, ft_int32_t ty2, ft_uint16_t result);
00283     ft_void_t BitmapTransform(ft_int32_t x0, ft_int32_t y0, ft_int32_t x1, ft_int32_t y1, ft_int32_t x2, ft_int32_t y2, ft_int32_t tx0, ft_int32_t ty0, ft_int32_t tx1, ft_int32_t ty1, ft_int32_t tx2, ft_int32_t ty2, ft_uint16_t result);
00284     ft_void_t MemCrc(ft_uint32_t ptr, ft_uint32_t num, ft_uint32_t result);
00285  
00286     ft_uint16_t fifo_Freespace();
00287  
00288     ft_void_t DL(ft_uint32_t cmd);
00289     ft_void_t WrDlCmd_Buffer(ft_uint32_t cmd);
00290     ft_void_t Flush_DL_Buffer();
00291     ft_void_t Flush_Co_Buffer();
00292     ft_void_t fadeout();
00293     ft_void_t fadein();
00294     ft_void_t DLSwap(ft_uint8_t DL_Swap_Type);
00295  
00296     ft_void_t Point(ft_int16_t x, ft_int16_t y, ft_uint16_t size);
00297     ft_void_t Line(ft_int16_t x0, ft_int16_t y0, ft_int16_t x1, ft_int16_t y1, ft_int16_t width);
00298     ft_void_t Rect(ft_int16_t x0, ft_int16_t y0, ft_int16_t x1, ft_int16_t y1, ft_int16_t corner);
00299     ft_void_t RectWH(ft_int16_t x0, ft_int16_t y0, ft_int16_t w, ft_int16_t h, ft_int16_t corner);
00300     ft_uint8_t LoadJpg(char* filename, ft_int16_t* x_size, ft_int16_t* y_size);
00301     ft_uint8_t LoadPng(char* filename, ft_int16_t* x_size, ft_int16_t* y_size);
00302     //Curt added Load_raw 7/22/16
00303     int LoadRaw(char* filename);
00304     int LoadRawFile(ft_uint32_t address, char* filename);
00305 
00306     void FillBitmap(ft_int16_t bitmap_number);
00307     void ClearBitmapCount(void);
00308     ft_uint32_t ReadBigInt32(unsigned char* data, ft_uint32_t offset);
00309 
00310     ft_uint8_t Jpg(char *jpg_filename, int x, int y);
00311     ft_uint8_t Png(char *png_filename, int x, int y);
00312     ft_uint8_t Png(char *png_filename, int x, int y, ft_int32_t address);
00313 
00314     ft_uint8_t JpgSplash(char *jpg_filename, ft_uint8_t r, ft_uint8_t g, ft_uint8_t b);
00315 
00316     ft_uint16_t CoProFIFO_FreeSpace(void);
00317     void Wait4CoProFIFO(ft_uint32_t room);
00318     void Wait4CoProFIFOEmpty(void);
00319     ft_uint8_t CheckIfCoProFIFOEmpty(void);
00320     ft_uint32_t WriteBlockRAM(ft_uint32_t Add, const ft_uint8_t *buff, ft_uint32_t count);
00321 
00322 
00323     ft_void_t Sound_ON();
00324     ft_void_t Sound_OFF();
00325     
00326 //    int Load_jpg(char* filename, ft_int16_t* x_size, ft_int16_t* y_size,ft_uint32_t address);
00327         
00328     ft_void_t Calibrate();
00329     ft_uint8_t read_calibrate_reg(ft_uint8_t i);
00330     ft_uint32_t read_calibrate_reg32(ft_uint8_t i);
00331     ft_void_t read_calibrate(ft_uint8_t data[24]);
00332     ft_void_t write_calibrate(ft_uint8_t data[24]);
00333     ft_void_t write_calibrate32(ft_uint32_t data[6]);
00334     
00335     ft_uint32_t color_rgb(ft_uint8_t red,ft_uint8_t green, ft_uint8_t blue);
00336     ft_uint32_t clear_color_rgb(ft_uint8_t red,ft_uint8_t green, ft_uint8_t blue);
00337 
00338     void SetBacklight(ft_uint16_t brightness);
00339 
00340     void Tag(ft_uint8_t s);
00341     void ClearTag(ft_uint8_t s);
00342     void TagMask(ft_uint8_t mask);
00343     void BitmapLayoutH(ft_uint8_t linestride, ft_uint8_t height);
00344     void BitmapSizeH(ft_uint8_t width, ft_uint8_t height);
00345 
00346     ft_void_t SetLoadAddress(ft_uint32_t address);
00347     ft_void_t SetBitmapCount(ft_uint8_t count);
00348     ft_uint32_t GetBitmapAddress(ft_uint8_t count);
00349     void SetThemeDefaultColor(void);
00350     void SetThemeColor(ft_uint32_t c);
00351     void ShowCalibrationInCode(void);
00352     void SetOrientation(ft_uint8_t orientation);
00353     void ShowBitmap(ft_uint8_t bitmap, ft_int16_t fmt, ft_uint16_t x, ft_uint16_t y, ft_uint16_t width, ft_uint16_t height);
00354     void ShowBitmapAtAddress(ft_uint32_t addr, ft_int16_t fmt, ft_uint16_t x, ft_uint16_t y, ft_uint16_t width, ft_uint16_t height);
00355     int GetImageIndexFromName(char *name);
00356     int ResetInflateFileBitmap(void);
00357     uint32_t GetRamUsage(void);
00358     uint16_t GetRamNoOfBitmaps(void);
00359     int LoadInflateFileBitmap(char *name, uint16_t fmt, uint16_t w, uint16_t h);
00360     int ShowBitmapByName(char *name, uint16_t w, uint16_t h);
00361     uint16_t GetTouchedTag(void);
00362     uint16_t GetTouchedTag(uint8_t point_number);
00363     uint8_t GetTag(void);
00364     uint16_t GetTagX(void);
00365     uint16_t GetTagY(void);
00366     uint8_t GetTouchTag(void);
00367     uint16_t GetTouchTagX(void);
00368     uint16_t GetTouchTagY(void);
00369     uint16_t GetTouchConfig(void);
00370     void SetTouchConfig(uint16_t TouchConfigVal);
00371     
00372     void screenShot(void);
00373     
00374     int LoadRawFile(ft_uint32_t address, const char *filename);
00375     int LoadInflateFile(ft_uint32_t address, const char *filename);
00376     int LoadImageFile(ft_uint32_t address, const char *filename);
00377     ft_void_t SetEndAddressForSize(ft_uint32_t addr);
00378 
00379     ft_void_t Wr8s(ft_uint32_t addr, ft_uint8_t *buffer, ft_uint8_t length);
00380 
00381 };  // end of class
00382  
00383 #endif  /*FT_GPU_HAL_H*/