mirror of
https://github.com/AlexandreRouma/SDRPlusPlus.git
synced 2026-04-22 16:02:43 +00:00
603 lines
19 KiB
C++
603 lines
19 KiB
C++
/*
|
|
## 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
|