808
Dependents: Chromatograph_Mobile
src/FT_CoPro_Cmds.cpp
- Committer:
- JackB
- Date:
- 2018-07-23
- Revision:
- 10:6a81aeca25e3
- Parent:
- 7:3b4d59de6398
File content as of revision 10:6a81aeca25e3:
/* mbed Library for FTDI FT813 Enbedded Video Engine "EVE" * based on Original Code Sample from FTDI * ported to mbed by Peter Drescher, DC2PD 2014 * Released under the MIT License: http://mbed.org/license/mit */ #include "FT_Platform.h" ft_void_t FT813::SendCmd(ft_uint32_t cmd) { Transfer32(cmd); } ft_void_t FT813::SendStr(const ft_char8_t *s) { TransferString(s); } ft_void_t FT813::StartFunc(ft_uint16_t count) { _count = count; CheckCmdBuffer(_count); StartCmdTransfer(FT_GPU_WRITE, _count); } ft_void_t FT813::EndFunc() { EndTransfer(); Updatecmdfifo(_count); } // Start a new display list // FT81x Series Programmers Guide Section 5.11 ft_void_t FT813::DLstart() { // _address = 0; StartFunc(FT_CMD_SIZE); SendCmd(CMD_DLSTART); EndFunc(); } // Swap the current display list with the new display list // FT81x Series Programmers Guide Section 5.12 ft_void_t FT813::Swap() { StartFunc(FT_CMD_SIZE); SendCmd(CMD_SWAP); EndFunc(); } // Set co-processor engine state to default values // FT81x Series Programmers Guide Section 5.13 ft_void_t FT813::ColdStart() { StartFunc(FT_CMD_SIZE); SendCmd(CMD_COLDSTART); EndFunc(); } // Trigger interrupt INT_CMDFLAG // FT81x Series Programmers Guide Section 5.14 ft_void_t FT813::Interrupt(ft_uint32_t ms) { StartFunc(FT_CMD_SIZE*2); SendCmd(CMD_INTERRUPT); SendCmd(ms); EndFunc(); } // Append more commands to current display list // FT81x Series Programmers Guide Section 5.15 ft_void_t FT813::Append(ft_uint32_t ptr, ft_uint32_t num) { StartFunc(FT_CMD_SIZE*3); SendCmd(CMD_APPEND); SendCmd(ptr); SendCmd(num); EndFunc(); } // Read a register value // FT81x Series Programmers Guide Section 5.16 ft_void_t FT813::RegRead(ft_uint32_t ptr, ft_uint32_t result) { StartFunc(FT_CMD_SIZE*3); SendCmd(CMD_REGREAD); SendCmd(ptr); SendCmd(0); EndFunc(); } /* commands to operate on memory: */ // Write bytes into memory // FT81x Series Programmers Guide Section 5.17 ft_void_t FT813::MemWrite(ft_uint32_t ptr, ft_uint32_t num) { StartFunc(FT_CMD_SIZE*3); SendCmd(CMD_MEMWRITE); SendCmd(ptr); SendCmd(num); EndFunc(); } // Decompress data into memory // FT81x Series Programmers Guide Section 5.18 ft_void_t FT813::Inflate(ft_uint32_t ptr) { StartFunc(FT_CMD_SIZE*2); SendCmd(CMD_INFLATE); SendCmd(ptr); EndFunc(); } // Load a JPEG or PNG image // FT81x Series Programmers Guide Section 5.19 ft_void_t FT813::LoadImage(ft_uint32_t ptr, ft_uint32_t options) { StartFunc(FT_CMD_SIZE*3); SendCmd(CMD_LOADIMAGE); SendCmd(ptr); SendCmd(options); EndFunc(); } // Set up a streaming media FIFO in RAM_G // FT81x Series Programmers Guide Section 5.20 ft_void_t FT813::MediaFifo(ft_uint32_t ptr, ft_uint32_t size) { StartFunc(FT_CMD_SIZE*3); SendCmd(CMD_MEDIAFIFO); SendCmd(ptr); SendCmd(size); EndFunc(); } // Video playback // FT81x Series Programmers Guide Section 5.21 ft_void_t FT813::PlayVideo(ft_uint32_t opts) { StartFunc(FT_CMD_SIZE*2); SendCmd(CMD_PLAYVIDEO); SendCmd(opts); EndFunc(); } // Initialize video frame decoder // FT81x Series Programmers Guide Section 5.22 ft_void_t FT813::VideoStart() { StartFunc(FT_CMD_SIZE); SendCmd(CMD_VIDEOSTART); EndFunc(); } // Load the next frame of video // FT81x Series Programmers Guide Section 5.23 ft_void_t FT813::VideoFrame(ft_uint32_t dst, ft_uint32_t ptr) { StartFunc(FT_CMD_SIZE*3); SendCmd(CMD_VIDEOFRAME); SendCmd(dst); SendCmd(ptr); EndFunc(); } // Compute a CRC-32 for memory // FT81x Series Programmers Guide Section 5.24 ft_void_t FT813::MemCrc(ft_uint32_t ptr, ft_uint32_t num, ft_uint32_t result) { StartFunc(FT_CMD_SIZE*4); SendCmd(CMD_MEMCRC); SendCmd(ptr); SendCmd(num); SendCmd(result); EndFunc(); } // Write zero to a block of memory // FT81x Series Programmers Guide Section 5.25 ft_void_t FT813::MemZero(ft_uint32_t ptr, ft_uint32_t num) { StartFunc(FT_CMD_SIZE*3); SendCmd(CMD_MEMZERO); SendCmd(ptr); SendCmd(num); EndFunc(); } // Fill memory with a byte value // FT81x Series Programmers Guide Section 5.26 ft_void_t FT813::MemSet(ft_uint32_t ptr, ft_uint32_t value, ft_uint32_t num) { StartFunc(FT_CMD_SIZE*4); SendCmd(CMD_MEMSET); SendCmd(ptr); SendCmd(value); SendCmd(num); EndFunc(); } // Cmd_Memcpy - background copy a block of data // FT81x Series Programmers Guide Section 5.27 ft_void_t FT813::Memcpy(ft_uint32_t dest, ft_uint32_t src, ft_uint32_t num) { StartFunc(FT_CMD_SIZE*4); SendCmd(CMD_MEMCPY); SendCmd(dest); SendCmd(src); SendCmd(num); EndFunc(); } /* commands to draw graphics objects: */ // ******************** Screen Object Creation CoProcessor Command Functions ****************************** // Draw a button // FT81x Series Programmers Guide Section 5.28 ft_void_t FT813::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) { StartFunc(FT_CMD_SIZE*4 + strlen(s) + 1); SendCmd(CMD_BUTTON); SendCmd((((ft_uint32_t)y<<16)|(x & 0xffff))); SendCmd((((ft_uint32_t)h<<16)|w)); SendCmd((((ft_uint32_t)options<<16)|font)); // patch from Ivano Pelicella to draw flat buttons SendStr(s); EndFunc(); } // Draw an analog clock // FT81x Series Programmers Guide Section 5.29 ft_void_t FT813::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) { StartFunc(FT_CMD_SIZE*5); SendCmd(CMD_CLOCK); SendCmd((((ft_uint32_t)y<<16)|(x & 0xffff))); SendCmd((((ft_uint32_t)options<<16)|r)); SendCmd((((ft_uint32_t)m<<16)|h)); SendCmd((((ft_uint32_t)ms<<16)|s)); EndFunc(); } // Set the foreground color // FT81x Series Programmers Guide Section 5.30 ft_void_t FT813::FgColor(ft_uint32_t c) { StartFunc(FT_CMD_SIZE*2); SendCmd(CMD_FGCOLOR); SendCmd(c); EndFunc(); } // Set the background color // FT81x Series Programmers Guide Section 5.31 ft_void_t FT813::BgColor(ft_uint32_t c) { StartFunc(FT_CMD_SIZE*2); SendCmd(CMD_BGCOLOR); SendCmd(c); EndFunc(); } // Set the 3D button highlight color - Set Highlight Gradient Color // FT81x Series Programmers Guide Section 5.32 ft_void_t FT813::GradColor(ft_uint32_t c) { StartFunc(FT_CMD_SIZE*2); SendCmd(CMD_GRADCOLOR); SendCmd(c); EndFunc(); } // Draw a gauge // FT81x Series Programmers Guide Section 5.33 /* Error handling for val is not done, so better to always use range of 65535 in order that needle is drawn within display region */ ft_void_t FT813::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) { StartFunc(FT_CMD_SIZE*5); SendCmd(CMD_GAUGE); SendCmd((((ft_uint32_t)y<<16)|(x & 0xffff))); SendCmd((((ft_uint32_t)options<<16)|r)); SendCmd((((ft_uint32_t)minor<<16)|major)); SendCmd((((ft_uint32_t)range<<16)|val)); EndFunc(); } // Draw a smooth color gradient // FT81x Series Programmers Guide Section 5.34 ft_void_t FT813::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) { StartFunc(FT_CMD_SIZE*5); SendCmd(CMD_GRADIENT); SendCmd((((ft_uint32_t)y0<<16)|(x0 & 0xffff))); SendCmd(rgb0); SendCmd((((ft_uint32_t)y1<<16)|(x1 & 0xffff))); SendCmd(rgb1); EndFunc(); } // Draw a row of keys // FT81x Series Programmers Guide Section 5.35 ft_void_t FT813::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) { StartFunc(FT_CMD_SIZE*4 + strlen(s) + 1); SendCmd(CMD_KEYS); SendCmd((((ft_uint32_t)y<<16)|(x & 0xffff))); SendCmd((((ft_uint32_t)h<<16)|w)); SendCmd((((ft_uint32_t)options<<16)|font)); SendStr(s); EndFunc(); } // Draw a progress bar // FT81x Series Programmers Guide Section 5.36 ft_void_t FT813::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) { StartFunc(FT_CMD_SIZE*5); SendCmd(CMD_PROGRESS); SendCmd((((ft_uint32_t)y<<16)|(x & 0xffff))); SendCmd((((ft_uint32_t)h<<16)|w)); SendCmd((((ft_uint32_t)val<<16)|options)); SendCmd(range); EndFunc(); } // Draw a scroll bar // FT81x Series Programmers Guide Section 5.37 ft_void_t FT813::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) { StartFunc(FT_CMD_SIZE*5); SendCmd(CMD_SCROLLBAR); SendCmd((((ft_uint32_t)y<<16)|(x & 0xffff))); SendCmd((((ft_uint32_t)h<<16)|w)); SendCmd((((ft_uint32_t)val<<16)|options)); SendCmd((((ft_uint32_t)range<<16)|size)); EndFunc(); } // Draw a slider // FT81x Series Programmers Guide Section 5.38 ft_void_t FT813::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) { StartFunc(FT_CMD_SIZE*5); SendCmd(CMD_SLIDER); SendCmd((((ft_uint32_t)y<<16)|(x & 0xffff))); SendCmd((((ft_uint32_t)h<<16)|w)); SendCmd((((ft_uint32_t)val<<16)|options)); SendCmd(range); EndFunc(); } // Draw a rotary dial control // FT81x Series Programmers Guide Section 5.39 // This is much like a Gauge except for the helpful range parameter. For some reason, all dials are 65535 around. ft_void_t FT813::Dial(ft_int16_t x, ft_int16_t y, ft_int16_t r, ft_uint16_t options, ft_uint16_t val) { StartFunc(FT_CMD_SIZE*4); SendCmd(CMD_DIAL); SendCmd((((ft_uint32_t)y<<16)|(x & 0xffff))); SendCmd((((ft_uint32_t)options<<16)|r)); SendCmd(val); EndFunc(); } // Draw a toggle switch // FT81x Series Programmers Guide Section 5.40 ft_void_t FT813::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) { StartFunc(FT_CMD_SIZE*4 + strlen(s) + 1); SendCmd(CMD_TOGGLE); SendCmd((((ft_uint32_t)y<<16)|(x & 0xffff))); SendCmd((((ft_uint32_t)font<<16)|w)); SendCmd((((ft_uint32_t)state<<16)|options)); SendStr(s); EndFunc(); } // Draw Text // FT81x Series Programmers Guide Section 5.41 ft_void_t FT813::Text(ft_int16_t x, ft_int16_t y, ft_int16_t font, ft_uint16_t options, const ft_char8_t* s) { StartFunc(FT_CMD_SIZE*3 + strlen(s) + 1); SendCmd(CMD_TEXT); //Copro_SendCmd((((ft_uint32_t)y<<16)|(ft_uint32_t)x)); SendCmd((((ft_uint32_t)y<<16)|(x & 0xffff))); SendCmd((((ft_uint32_t)options<<16)|(ft_uint32_t)font)); SendStr(s); EndFunc(); } // Set the base for number output // FT81x Series Programmers Guide Section 5.42 ft_void_t FT813::SetBase(ft_uint32_t base) { StartFunc(FT_CMD_SIZE*2); SendCmd(CMD_SETBASE); SendCmd(base); EndFunc(); } // Draw number // FT81x Series Programmers Guide Section 5.43 ft_void_t FT813::Number(ft_int16_t x, ft_int16_t y, ft_int16_t font, ft_uint16_t options, ft_int32_t n) { StartFunc(FT_CMD_SIZE*4); SendCmd(CMD_NUMBER); SendCmd((((ft_uint32_t)y<<16)|(x & 0xffff))); SendCmd((((ft_uint32_t)options<<16)|font)); SendCmd(n); EndFunc(); } // Set the current matrix to the identity matrix // FT81x Series Programmers Guide Section 5.44 ft_void_t FT813::LoadIdentity() { StartFunc(FT_CMD_SIZE); SendCmd(CMD_LOADIDENTITY); EndFunc(); } // Write the current matrix to the display list // FT81x Series Programmers Guide Section 5.45 ft_void_t FT813::SetMatrix() { StartFunc(FT_CMD_SIZE); SendCmd(CMD_SETMATRIX); EndFunc(); } // Retrieves the current matrix coefficients // FT81x Series Programmers Guide Section 5.46 ft_void_t FT813::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) { StartFunc(FT_CMD_SIZE*7); SendCmd(CMD_GETMATRIX); SendCmd(a); SendCmd(b); SendCmd(c); SendCmd(d); SendCmd(e); SendCmd(f); EndFunc(); } // Get the end memory address of data inflated by CMD_INFLATE - Get the last used address from CoPro operation // FT81x Series Programmers Guide Section 5.47 ft_void_t FT813::GetPtr(ft_uint32_t result) { StartFunc(FT_CMD_SIZE*2); SendCmd(CMD_GETPTR); SendCmd(result); EndFunc(); } // Get the image properties decompressed by CMD_LOADIMAGE // FT81x Series Programmers Guide Section 5.48 // Jack ft_void_t FT813::GetProps(ft_uint32_t ptr, ft_uint32_t w, ft_uint32_t h) { StartFunc(FT_CMD_SIZE*4); SendCmd(CMD_GETPROPS); SendCmd(ptr); SendCmd(w); SendCmd(h); EndFunc(); } // Apply a scale to the current matrix // FT81x Series Programmers Guide Section 5.49 ft_void_t FT813::Scale(ft_int32_t sx, ft_int32_t sy) { StartFunc(FT_CMD_SIZE*3); SendCmd(CMD_SCALE); SendCmd(sx); SendCmd(sy); EndFunc(); } // Apply a rotation to the current matrix // FT81x Series Programmers Guide Section 5.50 ft_void_t FT813::Rotate(ft_int32_t a) { StartFunc(FT_CMD_SIZE*2); SendCmd(CMD_ROTATE); SendCmd(a); EndFunc(); } // Apply a translation to the current matrix // FT81x Series Programmers Guide Section 5.51 ft_void_t FT813::Translate(ft_int32_t tx, ft_int32_t ty) { StartFunc(FT_CMD_SIZE*3); SendCmd(CMD_TRANSLATE); SendCmd(tx); SendCmd(ty); EndFunc(); } // Execute the touch screen calibration routine // FT81x Series Programmers Guide Section 5.52 // * This business about "result" in the manual really seems to be simply leftover cruft of no purpose - send zero ft_void_t FT813::Calibrate(ft_uint32_t result) { StartFunc(FT_CMD_SIZE*2); SendCmd(CMD_CALIBRATE); SendCmd(result); EndFunc(); WaitCmdfifo_empty(); } // Rotate the screen // FT81x Series Programmers Guide Section 5.53 ft_void_t FT813::SetRotate(ft_uint32_t r) { StartFunc(FT_CMD_SIZE*2); SendCmd(CMD_SETROTATE); SendCmd(r); EndFunc(); } // Start an animated spinner // FT81x Series Programmers Guide Section 5.54 ft_void_t FT813::Spinner(ft_int16_t x, ft_int16_t y, ft_uint16_t style, ft_uint16_t scale) { StartFunc(FT_CMD_SIZE*3); SendCmd(CMD_SPINNER); SendCmd((((ft_uint32_t)y<<16)|(x & 0xffff))); SendCmd((((ft_uint32_t)scale<<16)|style)); EndFunc(); } // Start an animated screensaver // FT81x Series Programmers Guide Section 5.55 ft_void_t FT813::ScreenSaver() { StartFunc(FT_CMD_SIZE); SendCmd(CMD_SCREENSAVER); EndFunc(); } // Start a continuous sketch update // FT81x Series Programmers Guide Section 5.56 ft_void_t FT813::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) { StartFunc(FT_CMD_SIZE*5); SendCmd(CMD_SKETCH); SendCmd((((ft_uint32_t)y<<16)|(x & 0xffff))); SendCmd((((ft_uint32_t)h<<16)|w)); SendCmd(ptr); SendCmd(format); EndFunc(); } // Stop any of spinner, screensaver or sketch // FT81x Series Programmers Guide Section 5.57 ft_void_t FT813::Stop() { StartFunc(FT_CMD_SIZE); SendCmd(CMD_STOP); EndFunc(); } // Set up a custom font // FT81x Series Programmers Guide Section 5.58 ft_void_t FT813::SetFont(ft_uint32_t font, ft_uint32_t ptr) { StartFunc(FT_CMD_SIZE*3); SendCmd(CMD_SETFONT); SendCmd(font); SendCmd(ptr); EndFunc(); } // Set up a custom font // FT81x Series Programmers Guide Section 5.59 ft_void_t FT813::SetFont2(ft_uint32_t font, ft_uint32_t ptr, ft_uint32_t firstchar) { StartFunc(FT_CMD_SIZE*4); SendCmd(CMD_SETFONT2); SendCmd(font); SendCmd(ptr); SendCmd(firstchar); EndFunc(); } // Set the scratch bitmap for widget use // FT81x Series Programmers Guide Section 5.60 ft_void_t FT813::SetScratch(ft_uint32_t handle) { StartFunc(FT_CMD_SIZE*2); SendCmd(CMD_SETSCRATCH); SendCmd(handle); EndFunc(); } // Load a ROM font into bitmap handle // FT81x Series Programmers Guide Section 5.61 ft_void_t FT813::RomFont(ft_uint32_t rom_slot, ft_uint32_t font) { StartFunc(FT_CMD_SIZE*3); SendCmd(CMD_ROMFONT); SendCmd(rom_slot); SendCmd(font); EndFunc(); } // Track touches for a graphics object - Make Track (for a slider) // FT81x Series Programmers Guide Section 5.62 // tag refers to the tag # previously assigned to the object that this track is tracking. ft_void_t FT813::Track(ft_int16_t x, ft_int16_t y, ft_int16_t w, ft_int16_t h, ft_int16_t tag) { StartFunc(FT_CMD_SIZE*4); SendCmd(CMD_TRACK); SendCmd((((ft_uint32_t)y<<16)|(x & 0xffff))); SendCmd((((ft_uint32_t)h<<16)|w)); SendCmd(tag); EndFunc(); } // Take a snapshot of the current screen // FT81x Series Programmers Guide Section 5.63 ft_void_t FT813::Snapshot(ft_uint32_t ptr) { StartFunc(FT_CMD_SIZE*2); SendCmd(CMD_SNAPSHOT); SendCmd(ptr); EndFunc(); } // Take a snapshot of part of the current screen // FT81x Series Programmers Guide Section 5.64 ft_void_t FT813::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) { StartFunc(FT_CMD_SIZE*5); SendCmd(CMD_SNAPSHOT2); SendCmd(fmt); SendCmd(ptr); SendCmd((((ft_uint32_t)y<<16)|(x & 0xffff))); SendCmd((((ft_uint32_t)h<<16)|(w & 0xffff))); EndFunc(); } // Set up display list for bitmap - Cmd_SetBitmap - generate DL commands for bitmap parms // FT81x Series Programmers Guide Section 5.65 ft_void_t FT813::SetBitmap(ft_int32_t addr, ft_int16_t fmt, ft_uint16_t width, ft_uint16_t height) { StartFunc(FT_CMD_SIZE*4); SendCmd(CMD_SETBITMAP); SendCmd(addr); SendCmd((((ft_uint32_t)width<<16)|(fmt & 0xffff))); SendCmd((((ft_uint32_t)0<<16)|(height & 0xffff))); EndFunc(); } // Play FTDI logo animation // FT81x Series Programmers Guide Section 5.66 ft_void_t FT813::Logo() { StartFunc(FT_CMD_SIZE); SendCmd(CMD_LOGO); EndFunc(); } // ******************** Miscellaneous Operation CoProcessor Command Functions ****************************** // ? // FT81x Series Programmers Guide Section ? ft_void_t FT813::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) { StartFunc(FT_CMD_SIZE*6*2+FT_CMD_SIZE*2); SendCmd(CMD_TOUCH_TRANSFORM); SendCmd(x0); SendCmd(y0); SendCmd(x1); SendCmd(y1); SendCmd(x2); SendCmd(y2); SendCmd(tx0); SendCmd(ty0); SendCmd(tx1); SendCmd(ty1); SendCmd(tx2); SendCmd(ty2); SendCmd(result); EndFunc(); } // ? // FT81x Series Programmers Guide Section ? ft_void_t FT813::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) { StartFunc(FT_CMD_SIZE*6*2+FT_CMD_SIZE*2); SendCmd(CMD_BITMAP_TRANSFORM); SendCmd(x0); SendCmd(y0); SendCmd(x1); SendCmd(y1); SendCmd(x2); SendCmd(y2); SendCmd(tx0); SendCmd(ty0); SendCmd(tx1); SendCmd(ty1); SendCmd(tx2); SendCmd(ty2); SendCmd(result); EndFunc(); } ft_void_t FT813::DL(ft_uint32_t cmd) { WrCmd32(cmd); /* Increment the command index */ CmdBuffer_Index += FT_CMD_SIZE; } ft_void_t FT813::WrDlCmd_Buffer(ft_uint32_t cmd) { Wr32((RAM_DL+DlBuffer_Index), cmd); /* Increment the command index */ DlBuffer_Index += FT_CMD_SIZE; } ft_void_t FT813::Flush_DL_Buffer() { DlBuffer_Index = 0; } ft_void_t FT813::Flush_Co_Buffer() { CmdBuffer_Index = 0; } /* API to check the status of previous DLSWAP and perform DLSWAP of new DL */ /* Check for the status of previous DLSWAP and if still not done wait for few ms and check again */ ft_void_t FT813::DLSwap(ft_uint8_t DL_Swap_Type) { ft_uint8_t Swap_Type = DLSWAP_FRAME, Swap_Done = DLSWAP_FRAME; if(DL_Swap_Type == DLSWAP_LINE) { Swap_Type = DLSWAP_LINE; } /* Perform a new DL swap */ Wr8(REG_DLSWAP, Swap_Type); /* Wait till the swap is done */ while(Swap_Done) { Swap_Done = Rd8(REG_DLSWAP); if(DLSWAP_DONE != Swap_Done) { Sleep(10);//wait for 10ms } } } /* Nothing beyond this */