CYUSB
Posted csczq54
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CYUSB相关的知识,希望对你有一定的参考价值。
/*Summary The application cydesc is used to open the device with cypress GUID and get the device descriptor */ //参考CyAPI.pdf和圈圈教你学USB #include <windows.h> #include <stdio.h> #include "cyapi.h" #include <conio.h> #include <iostream> #include <string> using namespace std; /*------------------------------------------ 设备描述符(DEVICE) 1 配置描述符(CONFIGURATION) 2 字符串描述符(STRING) 3 接口描述符(INTERFACE) 4 端点描述符(ENDPOINT) 5 -------------------------------------------*/ void main() { char buf[512]; string s; string DevName; CCyUSBDevice *USBDevice; USB_DEVICE_DESCRIPTOR descr; USB_INTERFACE_DESCRIPTOR InterfaceDescr; USB_CONFIGURATION_DESCRIPTOR ConfigurationDes; USBDevice = new CCyUSBDevice(NULL); // Create an instance of CCyUSBDevice printf("device count = %d ",USBDevice->DeviceCount());//USB总线上USB设备数量 for (int i=0; i < USBDevice->DeviceCount(); i++) { if (USBDevice->Open(i)) { USBDevice->GetDeviceDescriptor(&descr);//设备描述符 printf("设备描述符GetDeviceDescriptor ");//DeviceDscr printf("bLength 0x%02x ",descr.bLength);//设备描述符的长度 18 参考圈圈教你学USB(Page 78) printf("bDescriptorType 0x%02x ",descr.bDescriptorType);//设备描述符的类型 01 printf("bcdUSB 0x%04x ",descr.bcdUSB);//本设备所使用的USB协议,它使用的是BCD码表示 USB2.0协议就是0x0200,USB1.1协议就是0x0110,USB协议中使用的是小端模式 printf("bDeviceClass 0x%02x ",descr.bDeviceClass);//类代码, printf("bDeviceSubClass 0x%02x ",descr.bDeviceSubClass);//子类代码 printf("bDeviceProtocol 0x%02x ",descr.bDeviceProtocol);//设备使用的协议 printf("bMaxPacketSize0 0x%02x ",descr.bMaxPacketSize0);//端点0最大包长 printf("idVendor 0x%04x ",descr.idVendor);//厂商的ID printf("idProduct 0x%04x ",descr.idProduct);//产品ID printf("bcdDevice 0x%04x ",descr.bcdDevice);//设备版本号 printf("iManufacturer 0x%02x ",descr.iManufacturer);//描述厂商的字符串索引 printf("iProduct 0x%02x ",descr.iProduct);//产品的字符串索引 printf("iSerialNumber 0x%02x ",descr.iSerialNumber);//产品序列号字符串索引 printf("bNumConfigurations 0x%02x ",descr.bNumConfigurations);//配置数 printf(" "); USBDevice-> GetConfigDescriptor(&ConfigurationDes); printf("配置描述符GetConfigDescriptor ");// printf("bLength 0x%02x ",ConfigurationDes.bLength);//配置描述符的长度 09 printf("bDescriptorType 0x%02x ",ConfigurationDes.bDescriptorType);//描述符的类型 02 配置描述符为02 printf("wTotalLength 0x%04x ",ConfigurationDes.wTotalLength);//整个配置描述符的总长度 printf("bNumInterfaces 0x%02x ",ConfigurationDes.bNumInterfaces); printf("bConfigurationValue 0x%02x ",ConfigurationDes.bConfigurationValue); printf("iConfiguration 0x%02x ",ConfigurationDes.iConfiguration); printf("bmAttributes 0x%02x ",ConfigurationDes.bmAttributes);//D6表示供电方式 1表示设备自供电,0表示总线供电,D5=1时,支持远程唤醒 printf("MaxPower 0x%02x ",ConfigurationDes.MaxPower);//表示设备需要从总线上获取的电流值,单位为2ma printf(" "); USBDevice->GetIntfcDescriptor(&InterfaceDescr); printf("接口描述符GetIntfcDescriptor ");//;; Interface Descriptor printf("bLength 0x%02x ",InterfaceDescr.bLength);//接口描述符的长度 09 printf("bDescriptorType 0x%02x ",InterfaceDescr.bDescriptorType);//描述符的类型 04 printf("bInterfaceNumber 0x%02x ",InterfaceDescr.bInterfaceNumber);//接口的编号 printf("bAlternateSetting 0x%02x ",InterfaceDescr.bAlternateSetting);//接口的备用编号 printf("bNumEndpoints 0x%02x ",InterfaceDescr.bNumEndpoints);//该接口使用的端点数(不包括0端点) printf("bInterfaceClass 0x%02x ",InterfaceDescr.bInterfaceClass);////接口所使用的类 子类 以及协议 printf("bInterfaceSubClass 0x%02x ",InterfaceDescr.bInterfaceSubClass); printf("bInterfaceProtocol 0x%02x ",InterfaceDescr.bInterfaceProtocol); printf("iInterface 0x%02x ",InterfaceDescr.iInterface);//字符串的索引值 printf(" "); UCHAR num=USBDevice->EndPointCount();//返回接口的端点数,加1(包括0端点) printf("接口端点数num 0x%02x ",num); printf(" "); UCHAR i=0; CCyBulkEndPoint *BulkInEpt=NULL;//建立一个端点对象 CCyBulkEndPoint *BulkOutEpt=NULL; printf("传输方向 "); for(i=0;i<num;i++) { bool bIn=USBDevice->EndPoints[i]->Address&0x80;//D7=1代表Input D7=0代表OutPut; bool bBulk=(USBDevice->EndPoints[i]->Attributes==2);/*是否批量传输 D1-D0代表传输类型 0控制传输 1为等时传输 2为批量传输 3为中断传输*/ if(bIn && bBulk)// { BulkInEpt=(CCyBulkEndPoint *)USBDevice->EndPoints[i]; printf("输入端点BulkInEpt= 0x%02x ",USBDevice->EndPoints[i]->Address); } if(!bIn && bBulk) { BulkOutEpt=(CCyBulkEndPoint *)USBDevice->EndPoints[i]; printf("输出端点BulkOutEpt= 0x%02x ",USBDevice->EndPoints[i]->Address); } } printf(" "); CCyUSBConfig cfg = USBDevice->GetUSBConfig(i);//获取配置描述符中的信息 printf("bLength: 0x%x ",cfg.bLength);; printf("bDescriptorType: %d ",cfg.bDescriptorType); printf("wTotalLength: %d (0x%x) ",cfg.wTotalLength,cfg.wTotalLength); printf("bNumInterfaces: %d ",cfg.bNumInterfaces); printf("bConfigurationValue: %d ",cfg.bConfigurationValue); printf("iConfiguration: %d ",cfg.iConfiguration); printf("bmAttributes: 0x%x ",cfg.bmAttributes); printf("MaxPower: %d ",cfg.MaxPower); printf("DeviceName: %s ",USBDevice->DeviceName);//返回USB设备名称 USBDevice->Close(); } else { printf("unable to open device "); } } USBDevice->Close();//关闭USB设备 _getch(); }
以上是关于CYUSB的主要内容,如果未能解决你的问题,请参考以下文章
方寸微 T630 USB3.0超高速接口芯片 替换 CYUSB3014