为了能够注册成功需要搞定需要的参数
首先必须定义USB设备 USBDevice = new CCyUSBDevice(m_hWnd); // Create an instance of CCyUSBDevice
接下来是获取USBDevice的设备数量USBDevice->DeviceCount(),通过调用这个API获取插在主机上面的USB3.0的设备数量
接着根据数量一一的打开USB设备,打开需要使用USBDevice->Open(i);接着是获取USB3.0的设备信息然后作出相关的操作
USB_CONFIGURATION_DESCRIPTOR ConfDesc;
USBDevice->GetConfigDescriptor(&ConfDesc);这两句是获取当前的USB3.0的设备的设备信息,需要判断ConfDesc.bNumInterfaces==1,关于这个bNumInterfaces的field信息的具体含义手册中是这么说的
是在IntfcCount函数里面提出来的,也就说IntfcCount的返回值是bNumInterfaces,根据下面的讲解:说这个参数说这个数字不包含可能作为当前配置一部分的备用接口的数量。导致这个数值是1的原因是由于windows的特性同一类设备的接口是唯一的!所以返回时1,换句话说如果返回不为一就说明有可能有问题!
所以需要if(ConfDesc.bNumInterfaces==1)判断一下。接下来需要做的是获取这个InterFace的Description这个过程和上面的一样需要定一个结构体然后调用对应的函数USBDevice->GetConfigDescriptor(&ConfDesc);意在填充ConfDesc这个结构体。此结构体有一个field需要注意就是bAlternateSetting应该为0;接下来做的就是将获取到的设备名字加到ComBox里面m_DeviceListComBox.AddString(USBDevice->DeviceName);以上都是从插在Host上面的从设备上面获取的信息。下面需要在上位机里面做host的东西。就是将这个已知的设备注册到
系统中。首先是定义一个DEV_BROADCAST_DEVICEINTERFACE这个类型的结构体dbch,DEV_BROADCAST_DEVICEINTERFACE dbch;下一步需要的是初始化这个结构体,注意之前的结构是由特定的cypress的API函数获取的自动的填满的。现在需要咱们手动的赋值。这个结构体的成员是
系统中。首先是定义一个DEV_BROADCAST_DEVICEINTERFACE这个类型的结构体dbch,DEV_BROADCAST_DEVICEINTERFACE dbch;下一步需要的是初始化这个结构体,注意之前的结构是由特定的cypress的API函数获取的自动的填满的。现在需要咱们手动的赋值。这个结构体的成员是
DWORD dbcc_size;
DWORD dbcc_devicetype;
DWORD dbcc_reserved;
GUID dbcc_classguid;
char dbcc_name[1];这些首先配置他的大小,dbch.dbcc_size = sizeof(dbch);接着是dbcc_devicetype, dbch.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE; DBT_DEVTYP_DEVICEINTERFACE这个参数具体需要进一步确认是什么作用(此处暂略100字),下面是注册设备,在注册之前需要赋值 dbcc_classguid,这是一个list存在一个数组里面需要一一的配置。 for
(int i = 0; i < sizeof(GuidInterfaceList); i++)
{
//dbch.dbcc_classguid = FTDI_D2XX_GUID;//FTDI_VCP_GUID;
dbch.dbcc_classguid = GuidInterfaceList[i];
dbch.dbcc_name[0] = '\0';
NotificationHandle = RegisterDeviceNotification( GetSafeHwnd(), &dbch, DEVICE_NOTIFY_WINDOW_HANDLE);
}
DWORD dbcc_devicetype;
DWORD dbcc_reserved;
GUID dbcc_classguid;
char dbcc_name[1];这些首先配置他的大小,dbch.dbcc_size = sizeof(dbch);接着是dbcc_devicetype, dbch.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE; DBT_DEVTYP_DEVICEINTERFACE这个参数具体需要进一步确认是什么作用(此处暂略100字),下面是注册设备,在注册之前需要赋值 dbcc_classguid,这是一个list存在一个数组里面需要一一的配置。 for
(int i = 0; i < sizeof(GuidInterfaceList); i++)
{
//dbch.dbcc_classguid = FTDI_D2XX_GUID;//FTDI_VCP_GUID;
dbch.dbcc_classguid = GuidInterfaceList[i];
dbch.dbcc_name[0] = '\0';
NotificationHandle = RegisterDeviceNotification( GetSafeHwnd(), &dbch, DEVICE_NOTIFY_WINDOW_HANDLE);
}
RegisterDeviceNotification
功能:注册设备或者设备类型,在指定的窗口返回相关的信息
HDEVNOTIFY WINAPI RegisterDeviceNotification(
__in HANDLE hRecipient,
__in LPVOID NotificationFilter,
__in DWORD Flags
);