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[];
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 \n",USBDevice->DeviceCount());//USB总线上USB设备数量 for (int i=; i < USBDevice->DeviceCount(); i++)
{
if (USBDevice->Open(i))
{
USBDevice->GetDeviceDescriptor(&descr);//设备描述符 printf("设备描述符GetDeviceDescriptor\n");//DeviceDscr
printf("bLength \t\t 0x%02x\n",descr.bLength);//设备描述符的长度 18 参考圈圈教你学USB(Page 78)
printf("bDescriptorType \t 0x%02x\n",descr.bDescriptorType);//设备描述符的类型 01
printf("bcdUSB \t\t\t 0x%04x\n",descr.bcdUSB);//本设备所使用的USB协议,它使用的是BCD码表示 USB2.0协议就是0x0200,USB1.1协议就是0x0110,USB协议中使用的是小端模式
printf("bDeviceClass \t\t 0x%02x\n",descr.bDeviceClass);//类代码,
printf("bDeviceSubClass \t 0x%02x\n",descr.bDeviceSubClass);//子类代码
printf("bDeviceProtocol \t 0x%02x\n",descr.bDeviceProtocol);//设备使用的协议
printf("bMaxPacketSize0 \t 0x%02x\n",descr.bMaxPacketSize0);//端点0最大包长
printf("idVendor \t\t 0x%04x\n",descr.idVendor);//厂商的ID
printf("idProduct \t\t 0x%04x\n",descr.idProduct);//产品ID
printf("bcdDevice \t\t 0x%04x\n",descr.bcdDevice);//设备版本号
printf("iManufacturer \t\t 0x%02x\n",descr.iManufacturer);//描述厂商的字符串索引
printf("iProduct \t\t 0x%02x\n",descr.iProduct);//产品的字符串索引
printf("iSerialNumber \t\t 0x%02x\n",descr.iSerialNumber);//产品序列号字符串索引
printf("bNumConfigurations \t 0x%02x\n\n",descr.bNumConfigurations);//配置数
printf("\n"); USBDevice-> GetConfigDescriptor(&ConfigurationDes); printf("配置描述符GetConfigDescriptor\n");//
printf("bLength \t\t 0x%02x\n",ConfigurationDes.bLength);//配置描述符的长度 09
printf("bDescriptorType \t\t 0x%02x\n",ConfigurationDes.bDescriptorType);//描述符的类型 02 配置描述符为02
printf("wTotalLength \t\t 0x%04x\n",ConfigurationDes.wTotalLength);//整个配置描述符的总长度
printf("bNumInterfaces \t\t 0x%02x\n",ConfigurationDes.bNumInterfaces);
printf("bConfigurationValue \t\t 0x%02x\n",ConfigurationDes.bConfigurationValue);
printf("iConfiguration \t\t 0x%02x\n",ConfigurationDes.iConfiguration);
printf("bmAttributes \t\t 0x%02x\n",ConfigurationDes.bmAttributes);//D6表示供电方式 1表示设备自供电,0表示总线供电,D5=1时,支持远程唤醒
printf("MaxPower \t\t 0x%02x\n",ConfigurationDes.MaxPower);//表示设备需要从总线上获取的电流值,单位为2ma
printf("\n"); USBDevice->GetIntfcDescriptor(&InterfaceDescr); printf("接口描述符GetIntfcDescriptor\n");//;; Interface Descriptor
printf("bLength \t\t 0x%02x\n",InterfaceDescr.bLength);//接口描述符的长度 09
printf("bDescriptorType \t\t 0x%02x\n",InterfaceDescr.bDescriptorType);//描述符的类型 04
printf("bInterfaceNumber \t\t 0x%02x\n",InterfaceDescr.bInterfaceNumber);//接口的编号
printf("bAlternateSetting \t\t 0x%02x\n",InterfaceDescr.bAlternateSetting);//接口的备用编号
printf("bNumEndpoints \t\t 0x%02x\n",InterfaceDescr.bNumEndpoints);//该接口使用的端点数(不包括0端点)
printf("bInterfaceClass \t\t 0x%02x\n",InterfaceDescr.bInterfaceClass);////接口所使用的类 子类 以及协议
printf("bInterfaceSubClass \t\t 0x%02x\n",InterfaceDescr.bInterfaceSubClass);
printf("bInterfaceProtocol \t\t 0x%02x\n",InterfaceDescr.bInterfaceProtocol);
printf("iInterface \t\t 0x%02x\n",InterfaceDescr.iInterface);//字符串的索引值
printf("\n"); UCHAR num=USBDevice->EndPointCount();//返回接口的端点数,加1(包括0端点)
printf("接口端点数num \t\t 0x%02x\n",num);
printf("\n"); UCHAR i=;
CCyBulkEndPoint *BulkInEpt=NULL;//建立一个端点对象
CCyBulkEndPoint *BulkOutEpt=NULL;
printf("传输方向\n");
for(i=;i<num;i++)
{
bool bIn=USBDevice->EndPoints[i]->Address&0x80;//D7=1代表Input D7=0代表OutPut;
bool bBulk=(USBDevice->EndPoints[i]->Attributes==);/*是否批量传输 D1-D0代表传输类型 0控制传输 1为等时传输 2为批量传输 3为中断传输*/ if(bIn && bBulk)//
{
BulkInEpt=(CCyBulkEndPoint *)USBDevice->EndPoints[i];
printf("输入端点BulkInEpt= \t\t 0x%02x\n",USBDevice->EndPoints[i]->Address);
}
if(!bIn && bBulk)
{
BulkOutEpt=(CCyBulkEndPoint *)USBDevice->EndPoints[i];
printf("输出端点BulkOutEpt= \t\t 0x%02x\n",USBDevice->EndPoints[i]->Address);
} }
printf("\n"); CCyUSBConfig cfg = USBDevice->GetUSBConfig(i);//获取配置描述符中的信息
printf("bLength: 0x%x\n",cfg.bLength);;
printf("bDescriptorType: %d\n",cfg.bDescriptorType);
printf("wTotalLength: %d (0x%x)\n",cfg.wTotalLength,cfg.wTotalLength);
printf("bNumInterfaces: %d\n",cfg.bNumInterfaces);
printf("bConfigurationValue: %d\n",cfg.bConfigurationValue);
printf("iConfiguration: %d\n",cfg.iConfiguration);
printf("bmAttributes: 0x%x\n",cfg.bmAttributes);
printf("MaxPower: %d\n",cfg.MaxPower); printf("DeviceName: %s\n",USBDevice->DeviceName);//返回USB设备名称 USBDevice->Close();
}
else
{
printf("unable to open device\n");
}
} USBDevice->Close();//关闭USB设备
_getch(); }
CYUSB的更多相关文章
- 26.68013 烧录方式 及iic生成
硬件程序烧录 1)因为本产品要求将二进制代码和硬件PID/VID烧录在EEPROM,而不是使用CYPRESS推荐的在线下载方式,所以外部采用了8K的EEPROM.上电后68013A会将EEPROM中的 ...
- 13.首次安装CY7C68013A驱动失败记(结果竟然是这样)
原文地址:首次安装CY7C68013A驱动失败记(结果竟然是这样)作者:孙茂多 今天把68013A-56焊接在CCD2的CPLD PCB上,配套的EEPROM存储器还没有焊接上,所以想用它试验一下Cy ...
- WinDbg调试命令汇总
一. 1. !address eax 查看对应内存页的属性 2. vertarget 显示当前进程的大致信息 3 !peb 显示process Environment Block 4. lmvm 可以 ...
- EZ-USB FX2(68013)固件研究
原始资料来自网络 整理日: 2015年2月12日 1. Welcome 算是给所有正在学习USB,还徘徊着不得其门而入的朋友一个入门的契机吧,我也深知入门的痛苦,有些人入门就是抱着那什么USB协议,包 ...
- C#基于LibUsbDotNet实现USB通信(一)
网上C#USB通信的资料比较少, 基本上都是基于LibUsbDotNet 和 CyUsb, 关于打印机设备的还有一个OPOS. 本篇文章基于LibUsbDotNet. 1. 下载并安装 LibUsbD ...
- CY7C68013 USB接口相机开发记录 - 第四天:上位机编写1
前面学习了USB相机硬件固件.设备驱动,可以实现USB设备识别.数据发送的功能.然后,非常重要的一部分,USB设备发出的数据,我要怎么接受,怎么查看发送的数据是否是正确的.网上百度了下,大部分人都使用 ...
- CY7C68013 USB接口相机开发记录 - 第二天:驱动修改
上次写了资料的下载,并对资料进行了分类,分完类看起来就比较清晰.同时通过强大的百度,也可以得到不少资料. 这里对比较关键的几个文件进行罗列: 一.驱动相关 cyusb.inf: 修改CYUSB.INF ...
- CY7C68013 USB接口相机开发记录 - 第一天:资料下载
一直觉得从头开发一套东西出来会极大的提升自己的自信心,能够最大化的开发自己的潜能.所以在犹豫很久之后决定学习下CY7C68013 USB接口相机的开发. 通过在网上查找多份资料后,觉得工欲善其事必先利 ...
- Windows网络命令
如何查看系统端口 Windows中要查看系统端口,可以使用netstat命令,点击开始---运行---键入cmd,打开命令提示符窗口,在命令提示符状态下键入“netstat -an”,按下回车键后就可 ...
随机推荐
- 使用pods添加第三方的时候,出现ld: library not found for -lpop
ld: library not found for -lpop 错误,是在使用pods添加第三方的时候,出现的编译错误,同时伴随着的是error: linker command failed with ...
- SSM+Druid的搭建
SSM+druid开发配置 工程目录 1.先从pom文件开始吧 <project xmlns="http://maven.apache.org/POM/4.0.0" xmln ...
- MySQL常用配置和性能压力测试:MySQL系列之十五
一.MySQL常用配置 以下所有配置参数以32G内存的服务器为基 1.打开独立的表空间 innodb_file_per_table = 1 2.MySQL服务所允许的同时会话数的上限,默认为151,经 ...
- ECharts 上手
一.获取 ECharts 你可以通过以下几种方式获取 ECharts. 从官网下载界面选择你需要的版本下载,根据开发者功能和体积上的需求,我们提供了不同打包的下载,如果你在体积上没有要求,可以直接下载 ...
- Hystrix使用小结
通过服务熔断实现服务降级 @HystrixCommand(fallbackMethod = "reliable", commandProperties = { @HystrixPr ...
- JS——封闭函数、闭包、内置对象
封闭函数:时javascript中匿名函数的另一种写法,创建一个一开始就执行而不用命名的函数 示例: 1) (function(){ var str = '欢迎访问我的主页'; alert(str); ...
- Win10创建还原点
Win + E打开任务管理器 右击此电脑,选择属性 单击高级系统设置 选择系统保护 单击系统还原 按照提示操作,OK.
- jdbc 开启事务
package com.itheima.tx; import java.sql.Connection; import java.sql.PreparedStatement; import java.s ...
- Zookeeper启动失败:java.net.BindException: Address already in use
错误日志如下: [hadoop@master zookeeper-3.4.5-cdh5.10.0]$ cat zookeeper.out 2018-05-15 01:29:21,036 [myid:] ...
- onclientclick与onclick的问题.
<script language="javascript" type="text/javascript"> document.getElementB ...