summaryrefslogtreecommitdiff
path: root/include/qhy/CyAPI.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/qhy/CyAPI.h')
-rw-r--r--include/qhy/CyAPI.h600
1 files changed, 600 insertions, 0 deletions
diff --git a/include/qhy/CyAPI.h b/include/qhy/CyAPI.h
new file mode 100644
index 0000000..2ec4f77
--- /dev/null
+++ b/include/qhy/CyAPI.h
@@ -0,0 +1,600 @@
+/*
+ ## Cypress CyAPI C++ library header file (CyAPI.h)
+ ## =======================================================
+ ##
+ ## Copyright Cypress Semiconductor Corporation, 2009-2012,
+ ## All Rights Reserved
+ ## UNPUBLISHED, LICENSED SOFTWARE.
+ ##
+ ## CONFIDENTIAL AND PROPRIETARY INFORMATION
+ ## WHICH IS THE PROPERTY OF CYPRESS.
+ ##
+ ## Use of this file is governed
+ ## by the license agreement included in the file
+ ##
+ ## <install>/license/license.rtf
+ ##
+ ## where <install> is the Cypress software
+ ## install root directory path.
+ ##
+ ## =======================================================
+*/
+
+#ifndef CyUSBH
+#define CyUSBH
+
+#include "cyusb30_def.h"
+
+/* Data straucture for the Vendor request and data */
+typedef struct vendorCmdData
+{
+ UCHAR *buf; /* Pointer to the data */
+ UCHAR opCode; /* Vendor request code */
+ UINT addr; /* Read/Write address */
+ long size; /* Size of the read/write */
+ bool isRead; /* Read or write */
+} vendorCmdData ;
+
+#ifndef __USB200_H__
+#define __USB200_H__
+#pragma pack(push,1)
+typedef struct _USB_DEVICE_DESCRIPTOR {
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ USHORT bcdUSB;
+ UCHAR bDeviceClass;
+ UCHAR bDeviceSubClass;
+ UCHAR bDeviceProtocol;
+ UCHAR bMaxPacketSize0;
+ USHORT idVendor;
+ USHORT idProduct;
+ USHORT bcdDevice;
+ UCHAR iManufacturer;
+ UCHAR iProduct;
+ UCHAR iSerialNumber;
+ UCHAR bNumConfigurations;
+} USB_DEVICE_DESCRIPTOR, *PUSB_DEVICE_DESCRIPTOR;
+
+typedef struct _USB_ENDPOINT_DESCRIPTOR {
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ UCHAR bEndpointAddress;
+ UCHAR bmAttributes;
+ USHORT wMaxPacketSize;
+ UCHAR bInterval;
+} USB_ENDPOINT_DESCRIPTOR, *PUSB_ENDPOINT_DESCRIPTOR;
+
+typedef struct _USB_CONFIGURATION_DESCRIPTOR {
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ USHORT wTotalLength;
+ UCHAR bNumInterfaces;
+ UCHAR bConfigurationValue;
+ UCHAR iConfiguration;
+ UCHAR bmAttributes;
+ UCHAR MaxPower;
+} USB_CONFIGURATION_DESCRIPTOR, *PUSB_CONFIGURATION_DESCRIPTOR;
+
+typedef struct _USB_INTERFACE_DESCRIPTOR {
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ UCHAR bInterfaceNumber;
+ UCHAR bAlternateSetting;
+ UCHAR bNumEndpoints;
+ UCHAR bInterfaceClass;
+ UCHAR bInterfaceSubClass;
+ UCHAR bInterfaceProtocol;
+ UCHAR iInterface;
+} USB_INTERFACE_DESCRIPTOR, *PUSB_INTERFACE_DESCRIPTOR;
+
+typedef struct _USB_STRING_DESCRIPTOR {
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ WCHAR bString[1];
+} USB_STRING_DESCRIPTOR, *PUSB_STRING_DESCRIPTOR;
+
+typedef struct _USB_COMMON_DESCRIPTOR {
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+} USB_COMMON_DESCRIPTOR, *PUSB_COMMON_DESCRIPTOR;
+#pragma pack(pop)
+#endif
+
+/*******************************************************************************/
+class CCyIsoPktInfo {
+public:
+ LONG Status;
+ LONG Length;
+};
+
+/*******************************************************************************/
+
+
+/* {AE18AA60-7F6A-11d4-97DD-00010229B959} */
+static GUID CYUSBDRV_GUID = {0xae18aa60, 0x7f6a, 0x11d4, 0x97, 0xdd, 0x0, 0x1, 0x2, 0x29, 0xb9, 0x59};
+
+typedef enum {TGT_DEVICE, TGT_INTFC, TGT_ENDPT, TGT_OTHER } CTL_XFER_TGT_TYPE;
+typedef enum {REQ_STD, REQ_CLASS, REQ_VENDOR } CTL_XFER_REQ_TYPE;
+typedef enum {DIR_TO_DEVICE, DIR_FROM_DEVICE } CTL_XFER_DIR_TYPE;
+typedef enum {XMODE_BUFFERED, XMODE_DIRECT } XFER_MODE_TYPE;
+
+const int MAX_ENDPTS = 32;
+const int MAX_INTERFACES = 255;
+const int USB_STRING_MAXLEN = 256;
+
+#define BUFSIZE_UPORT 2048 //4096 - CDT 130492
+typedef enum { RAM = 1, I2CE2PROM, SPIFLASH } FX3_FWDWNLOAD_MEDIA_TYPE ;
+typedef enum { SUCCESS = 0, FAILED, INVALID_MEDIA_TYPE, INVALID_FWSIGNATURE, DEVICE_CREATE_FAILED, INCORRECT_IMAGE_LENGTH, INVALID_FILE, SPILASH_ERASE_FAILED, CORRUPT_FIRMWARE_IMAGE_FILE,I2CE2PROM_UNKNOWN_I2C_SIZE } FX3_FWDWNLOAD_ERROR_CODE;
+
+#define CYWB_BL_4_BYTES_COPY(destination,source) {memcpy((void *)(destination), (void *)(source), 4);}
+
+/********************************************************************************
+*
+* The CCyEndPoint ABSTRACT Class
+*
+********************************************************************************/
+class CCyUSBEndPoint
+{
+protected:
+ bool WaitForIO(OVERLAPPED *ovLapStatus);
+
+ virtual PUCHAR BeginDirectXfer(PUCHAR buf, LONG bufLen, OVERLAPPED *ov);
+ virtual PUCHAR BeginBufferedXfer(PUCHAR buf, LONG bufLen, OVERLAPPED *ov);
+
+public:
+
+ CCyUSBEndPoint(void);
+ CCyUSBEndPoint(CCyUSBEndPoint& ept);
+ CCyUSBEndPoint(HANDLE h, PUSB_ENDPOINT_DESCRIPTOR pEndPtDescriptor);
+ CCyUSBEndPoint(HANDLE hDev, PUSB_ENDPOINT_DESCRIPTOR pEndPtDescriptor,USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR* SSEndPtDescriptor);
+
+ HANDLE hDevice;
+
+ /* The fields of an EndPoint Descriptor */
+ UCHAR DscLen;
+ UCHAR DscType;
+ UCHAR Address;
+ UCHAR Attributes;
+ USHORT MaxPktSize;
+ USHORT PktsPerFrame;
+ UCHAR Interval;
+ /* This are the fields for Super speed endpoint */
+ UCHAR ssdscLen;
+ UCHAR ssdscType;
+ UCHAR ssmaxburst; /* Maximum number of packets endpoint can send in one burst */
+ UCHAR ssbmAttribute; /* store endpoint attribute like for bulk it will be number of streams */
+ USHORT ssbytesperinterval;
+
+ /* Other fields */
+ ULONG TimeOut;
+ ULONG UsbdStatus;
+ ULONG NtStatus;
+
+ DWORD bytesWritten;
+ DWORD LastError;
+ bool bIn;
+
+ XFER_MODE_TYPE XferMode;
+
+ bool XferData(PUCHAR buf, LONG &len, CCyIsoPktInfo* pktInfos = NULL);
+ bool XferData(PUCHAR buf, LONG &bufLen, CCyIsoPktInfo* pktInfos, bool pktMode);
+ virtual PUCHAR BeginDataXfer(PUCHAR buf, LONG len, OVERLAPPED *ov) = 0;
+ virtual bool FinishDataXfer(PUCHAR buf, LONG &len, OVERLAPPED *ov, PUCHAR pXmitBuf, CCyIsoPktInfo* pktInfos = NULL);
+ bool WaitForXfer(OVERLAPPED *ov, ULONG tOut);
+ ULONG GetXferSize(void);
+ void SetXferSize(ULONG xfer);
+
+ bool Reset(void);
+ bool Abort(void);
+};
+
+
+/********************************************************************************
+*
+* The Control Endpoint Class
+*
+********************************************************************************/
+class CCyControlEndPoint : public CCyUSBEndPoint
+{
+public:
+ CCyControlEndPoint(void);
+ CCyControlEndPoint(CCyControlEndPoint& ept);
+ CCyControlEndPoint(HANDLE h, PUSB_ENDPOINT_DESCRIPTOR pEndPtDescriptor);
+
+ CTL_XFER_TGT_TYPE Target;
+ CTL_XFER_REQ_TYPE ReqType;
+ CTL_XFER_DIR_TYPE Direction;
+
+ UCHAR ReqCode;
+ WORD Value;
+ WORD Index;
+
+ bool Read(PUCHAR buf, LONG &len);
+ bool Write(PUCHAR buf, LONG &len);
+ PUCHAR BeginDataXfer(PUCHAR buf, LONG len, OVERLAPPED *ov);
+};
+
+
+/********************************************************************************
+*
+* The Isoc Endpoint Class
+*
+********************************************************************************/
+class CCyIsocEndPoint : public CCyUSBEndPoint
+{
+
+protected:
+ virtual PUCHAR BeginDirectXfer(PUCHAR buf, LONG bufLen, OVERLAPPED *ov);
+ virtual PUCHAR BeginBufferedXfer(PUCHAR buf, LONG bufLen, OVERLAPPED *ov);
+
+public:
+ CCyIsocEndPoint(void);
+ CCyIsocEndPoint(HANDLE h, PUSB_ENDPOINT_DESCRIPTOR pEndPtDescriptor);
+ CCyIsocEndPoint(HANDLE h, PUSB_ENDPOINT_DESCRIPTOR pEndPtDescriptor,USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR* SSEndPtDescriptor);
+
+ PUCHAR BeginDataXfer(PUCHAR buf, LONG len, OVERLAPPED *ov);
+ CCyIsoPktInfo* CreatePktInfos(LONG bufLen, int &packets);
+};
+
+
+/********************************************************************************
+*
+* The Bulk Endpoint Class
+*
+********************************************************************************/
+class CCyBulkEndPoint : public CCyUSBEndPoint
+{
+public:
+ CCyBulkEndPoint(void);
+ CCyBulkEndPoint(HANDLE h, PUSB_ENDPOINT_DESCRIPTOR pEndPtDescriptor);
+ CCyBulkEndPoint(HANDLE h, PUSB_ENDPOINT_DESCRIPTOR pEndPtDescriptor,USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR* SSEndPtDescriptor);
+
+ PUCHAR BeginDataXfer(PUCHAR buf, LONG len, OVERLAPPED *ov);
+};
+
+
+/********************************************************************************
+*
+* The Interrupt Endpoint Class
+*
+********************************************************************************/
+class CCyInterruptEndPoint : public CCyUSBEndPoint
+{
+public:
+ CCyInterruptEndPoint(void);
+ CCyInterruptEndPoint(HANDLE h, PUSB_ENDPOINT_DESCRIPTOR pEndPtDescriptor);
+ CCyInterruptEndPoint(HANDLE h, PUSB_ENDPOINT_DESCRIPTOR pEndPtDescriptor,USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR* SSEndPtDescriptor);
+
+ PUCHAR BeginDataXfer(PUCHAR buf, LONG len, OVERLAPPED *ov);
+};
+
+
+/********************************************************************************
+*
+* The Interface Class
+*
+********************************************************************************/
+class CCyUSBInterface
+{
+public:
+ CCyUSBEndPoint *EndPoints[MAX_ENDPTS]; /* Holds pointers to all the interface's endpoints,
+ plus a pointer to the Control endpoint zero */
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ UCHAR bInterfaceNumber;
+ UCHAR bAlternateSetting;
+ UCHAR bNumEndpoints; /* Not counting the control endpoint */
+ UCHAR bInterfaceClass;
+ UCHAR bInterfaceSubClass;
+ UCHAR bInterfaceProtocol;
+ UCHAR iInterface;
+
+ UCHAR bAltSettings;
+ USHORT wTotalLength; /* Needed in case Intfc has additional (non-endpt) descriptors */
+
+ CCyUSBInterface(HANDLE handle, PUSB_INTERFACE_DESCRIPTOR pIntfcDescriptor,UCHAR usb30Dummy);
+ CCyUSBInterface(HANDLE h, PUSB_INTERFACE_DESCRIPTOR pIntfcDescriptor);
+ CCyUSBInterface(CCyUSBInterface& ifc); /* Copy Constructor */
+ ~CCyUSBInterface(void);
+
+};
+
+
+/********************************************************************************
+*
+* The Config Class
+*
+********************************************************************************/
+class CCyUSBConfig
+{
+public:
+ CCyUSBInterface *Interfaces[MAX_INTERFACES];
+
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ USHORT wTotalLength;
+ UCHAR bNumInterfaces;
+ UCHAR bConfigurationValue;
+ UCHAR iConfiguration;
+ UCHAR bmAttributes;
+ UCHAR MaxPower;
+
+ UCHAR AltInterfaces;
+
+ CCyUSBConfig(void);
+ CCyUSBConfig(CCyUSBConfig& cfg); /* Copy Constructor */
+ CCyUSBConfig(HANDLE h, PUSB_CONFIGURATION_DESCRIPTOR pConfigDescr);
+ CCyUSBConfig(HANDLE h, PUSB_CONFIGURATION_DESCRIPTOR pConfigDescr,UCHAR usb30Dummy);
+ ~CCyUSBConfig(void);
+};
+
+
+/********************************************************************************
+*
+* The Bos USB20 Extesnion Class
+*
+********************************************************************************/
+class CCyBosUSB20Extesnion
+{
+public:
+ UCHAR bLength; /* Descriptor length */
+ UCHAR bDescriptorType; /* Descriptor Type */
+ UCHAR bDevCapabilityType; /* Device capability type */
+ UINT bmAttribute; /* Bitmap encoding for supprted feature and Link power managment supprted if set */
+
+ CCyBosUSB20Extesnion(void);
+ CCyBosUSB20Extesnion(HANDLE h,PUSB_BOS_USB20_DEVICE_EXTENSION BosUsb20ExtDesc);
+};
+
+
+/********************************************************************************
+*
+* The Bos SuperSpeed Capability Class
+*
+********************************************************************************/
+class CCyBosSuperSpeedCapability
+{
+public:
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ UCHAR bDevCapabilityType;
+ UCHAR bmAttribute;
+ USHORT SpeedsSuported;
+ UCHAR bFunctionalitySupporte;
+ UCHAR bU1DevExitLat;
+ USHORT bU2DevExitLat;
+
+ CCyBosSuperSpeedCapability(void);
+ CCyBosSuperSpeedCapability(HANDLE h,PUSB_BOS_SS_DEVICE_CAPABILITY pUSB_SuperSpeedUsb);
+
+};
+
+
+/********************************************************************************
+*
+* The Bos Container ID Class
+*
+********************************************************************************/
+class CCyBosContainerID
+{
+public:
+ UCHAR bLength; /* Descriptor length */
+ UCHAR bDescriptorType; /* Descriptor Type */
+ UCHAR bDevCapabilityType; /* Device capability type */
+ UCHAR bReserved; /* no use */
+ UCHAR ContainerID[USB_BOS_CAPABILITY_TYPE_CONTAINER_ID_SIZE]; /* UUID */
+
+ CCyBosContainerID(void);
+ CCyBosContainerID(HANDLE h,PUSB_BOS_CONTAINER_ID pContainerID);
+};
+
+
+/********************************************************************************
+*
+* The USB BOS Class
+*
+********************************************************************************/
+class CCyUSBBOS
+{
+public:
+
+ CCyBosContainerID *pContainer_ID;
+ CCyBosUSB20Extesnion *pUSB20_DeviceExt;
+ CCyBosSuperSpeedCapability *pSS_DeviceCap;
+
+ UCHAR bLength; /* Descriptor length */
+ UCHAR bDescriptorType; /* Descriptor Type */
+ USHORT wTotalLength; /* Total length of descriptor ( icluding device capabilty */
+ UCHAR bNumDeviceCaps; /* Number of device capability descriptors in BOS */
+
+ CCyUSBBOS(void);
+ CCyUSBBOS(HANDLE h,PUSB_BOS_DESCRIPTOR pBosDescrData);
+ ~CCyUSBBOS();
+};
+
+/*********************************************************************************
+*
+* The USB Device Class - This is the main class that contains members of all the
+* other classes.
+*
+* To use the library, create an instance of this Class and call it's Open method.
+*
+*********************************************************************************/
+class CCyUSBDevice
+{
+ /* The public members are accessible (i.e. corruptible) by the user of the library
+ * Algorithms of the class don't rely on any public members. Instead, they use the
+ * private members of the class for their calculations. */
+
+public:
+
+ CCyUSBDevice(HANDLE hnd = NULL, GUID guid = CYUSBDRV_GUID, BOOL bOpen = true);
+ ~CCyUSBDevice(void);
+
+ CCyUSBEndPoint **EndPoints; /* Shortcut to USBCfgs[CfgNum]->Interfaces[IntfcIndex]->Endpoints */
+ CCyUSBEndPoint *EndPointOf(UCHAR addr);
+
+ CCyUSBBOS *UsbBos;
+ CCyIsocEndPoint *IsocInEndPt;
+ CCyIsocEndPoint *IsocOutEndPt;
+ CCyBulkEndPoint *BulkInEndPt;
+ CCyBulkEndPoint *BulkOutEndPt;
+ CCyControlEndPoint *ControlEndPt;
+ CCyInterruptEndPoint *InterruptInEndPt;
+ CCyInterruptEndPoint *InterruptOutEndPt;
+
+
+ USHORT StrLangID;
+ ULONG LastError;
+ ULONG UsbdStatus;
+ ULONG NtStatus;
+ ULONG DriverVersion;
+ ULONG USBDIVersion;
+ char DeviceName[USB_STRING_MAXLEN];
+ char FriendlyName[USB_STRING_MAXLEN];
+ wchar_t Manufacturer[USB_STRING_MAXLEN];
+ wchar_t Product[USB_STRING_MAXLEN];
+ wchar_t SerialNumber[USB_STRING_MAXLEN];
+
+ CHAR DevPath[USB_STRING_MAXLEN];
+
+ USHORT BcdUSB;
+ USHORT VendorID;
+ USHORT ProductID;
+ UCHAR USBAddress;
+ UCHAR DevClass;
+ UCHAR DevSubClass;
+ UCHAR DevProtocol;
+ INT MaxPacketSize;
+ USHORT BcdDevice;
+
+ UCHAR ConfigValue;
+ UCHAR ConfigAttrib;
+ UCHAR MaxPower;
+
+ UCHAR IntfcClass;
+ UCHAR IntfcSubClass;
+ UCHAR IntfcProtocol;
+ bool bHighSpeed;
+ bool bSuperSpeed;
+
+ DWORD BytesXfered;
+
+ UCHAR DeviceCount(void);
+ UCHAR ConfigCount(void);
+ UCHAR IntfcCount(void);
+ UCHAR AltIntfcCount(void);
+ UCHAR EndPointCount(void);
+
+ void SetConfig(UCHAR cfg);
+ UCHAR Config(void) { return CfgNum; } /* Normally 0 */
+ UCHAR Interface(void) { return IntfcNum; } /* Usually 0 */
+
+ /* No SetInterface method since only 1 intfc per device (per Windows) */
+ UCHAR AltIntfc(void);
+ bool SetAltIntfc(UCHAR alt);
+
+ GUID DriverGUID(void) { return DrvGuid; }
+ HANDLE DeviceHandle(void) { return hDevice; }
+ void UsbdStatusString(ULONG stat, PCHAR s);
+ bool CreateHandle(UCHAR dev);
+ void DestroyHandle();
+
+ bool Open(UCHAR dev);
+ void Close(void);
+ bool Reset(void);
+ bool ReConnect(void);
+ bool Suspend(void);
+ bool Resume(void);
+ bool IsOpen(void) { return (hDevice != INVALID_HANDLE_VALUE); }
+
+ UCHAR PowerState(void);
+
+ bool GetBosDescriptor(PUSB_BOS_DESCRIPTOR descr);
+ bool GetBosUSB20DeviceExtensionDescriptor(PUSB_BOS_USB20_DEVICE_EXTENSION descr);
+ bool GetBosContainedIDDescriptor(PUSB_BOS_CONTAINER_ID descr);
+ bool GetBosSSCapabilityDescriptor(PUSB_BOS_SS_DEVICE_CAPABILITY descr);
+
+ void GetDeviceDescriptor(PUSB_DEVICE_DESCRIPTOR descr);
+ void GetConfigDescriptor(PUSB_CONFIGURATION_DESCRIPTOR descr);
+ void GetIntfcDescriptor(PUSB_INTERFACE_DESCRIPTOR descr);
+ CCyUSBConfig GetUSBConfig(int index);
+
+private:
+
+ USB_DEVICE_DESCRIPTOR USBDeviceDescriptor;
+ PUSB_CONFIGURATION_DESCRIPTOR USBConfigDescriptors[2];
+ PUSB_BOS_DESCRIPTOR pUsbBosDescriptor;
+
+ CCyUSBConfig *USBCfgs[2];
+
+ HANDLE hWnd;
+ HANDLE hDevice;
+ HANDLE hDevNotification;
+ HANDLE hHndNotification;
+
+ GUID DrvGuid;
+
+ UCHAR Devices;
+ UCHAR Interfaces;
+ UCHAR AltInterfaces;
+ UCHAR Configs;
+
+ UCHAR DevNum;
+ UCHAR CfgNum;
+ UCHAR IntfcNum; /* The current selected interface's bInterfaceNumber */
+ UCHAR IntfcIndex; /* The entry in the Config's interfaces table matching to IntfcNum and AltSetting */
+
+ bool GetInternalBosDescriptor();
+ void GetDevDescriptor(void);
+ void GetCfgDescriptor(int descIndex);
+ void GetString(wchar_t *s, UCHAR sIndex);
+ void SetStringDescrLanguage(void);
+ void SetAltIntfcParams(UCHAR alt);
+ bool IoControl(ULONG cmd, PUCHAR buf, ULONG len);
+
+ void SetEndPointPtrs(void);
+ void GetDeviceName(void);
+ void GetFriendlyName(void);
+ void GetDriverVer(void);
+ void GetUSBDIVer(void);
+ void GetSpeed(void);
+ void GetUSBAddress(void);
+ //void CloseEndPtHandles(void);
+
+ bool RegisterForPnpEvents(HANDLE h);
+};
+
+
+/********************************************************************************
+*
+* The FX3 Device Class
+*
+********************************************************************************/
+class CCyFX3Device: public CCyUSBDevice
+{
+public:
+ CCyFX3Device(void);
+ ~CCyFX3Device(void);
+ bool IsBootLoaderRunning();
+ FX3_FWDWNLOAD_ERROR_CODE DownloadFw(char *fileName, FX3_FWDWNLOAD_MEDIA_TYPE enMediaType);
+
+private:
+
+ bool Ep0VendorCommand(vendorCmdData cmdData);
+ bool SetProgramEntry(UCHAR opCode,UINT start_addr);
+
+ bool DownloadBufferToDevice(UINT start_addr, USHORT count, UCHAR *data_buf, UCHAR opCode);
+ bool UploadBufferFromDevice(UINT start_addr, USHORT count, UCHAR *data_buf, UCHAR opCode);
+
+ FX3_FWDWNLOAD_ERROR_CODE DownloadFwToRam(PUCHAR buffer_p, UINT fw_size, UCHAR opCode);
+ FX3_FWDWNLOAD_ERROR_CODE DownloadUserIMGtoI2CE2PROM(PUCHAR buffer_p, UINT fw_size, UCHAR opCode);
+ FX3_FWDWNLOAD_ERROR_CODE DownloadUserIMGtoSPIFLASH(PUCHAR buffer_p, UINT fw_size, UCHAR opCode);
+
+ FX3_FWDWNLOAD_ERROR_CODE EraseSectorOfSPIFlash(UINT SectorNumber, UCHAR opCode);
+ bool WriteToSPIFlash(PUCHAR Buf, UINT buflen, UINT ByteAddress, UCHAR opCode);
+};
+
+/********************************************************************************/
+
+#endif \ No newline at end of file