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”,按下回车键后就可 ...
随机推荐
- bzoj2229: [Zjoi2011]最小割(最小割树)
传送门 这题是用最小割树做的(不明白最小割树是什么的可以去看看这一题->这里) 有了最小割树就很简单了……点数那么少……每次跑出一个最大流就暴力搞一遍就好了 //minamoto #includ ...
- 今天来记录一下关于ajax跨域的一些问题。以备不时之需。
今天来记录一下关于ajax跨域的一些问题.以备不时之需. 跨域 同源策略限制 同源策略阻止从一个域上加载的脚本获取或操作另一个域上的文档属性.也就是说,受到请求的 URL 的域必须与当前 Web 页面 ...
- 安装篇:MySQL系列之一
环境:CentOS6.9系统安装MariaDB-10.2.15 一.yum包管理器安装MariaDB-server 1)配置yum源(MariaDB官方源) [root@centos6 ~]# v ...
- PHPExcel探索之旅---阶段四 导入文件
步骤就是:实例化excel读取对象=> 加载excel文件 => 读取excel文件(全部读取.逐行读取) <?php header("Content Type :text ...
- 根据不同环境配置pom
clean install clean package -P jt808_dev clean package -P tanway_test -X gps-parent <?xml version ...
- C/C++规范学习:
一 关于浮点数: 1.1浮点数是否等于0判断:因为浮点数都有精度,不能拿浮点数直接和0.0f进行比较,而应该采用以下方法: if (f32Data == 0.0f) // 隐含错误的比较 #defin ...
- CodeForces - 589B
题目链接:https://vjudge.net/contest/242578#problem/B Dasha decided to bake a big and tasty layer cake. I ...
- C. Glass Carving 正着做或者倒着做都可以
http://codeforces.com/problemset/problem/527/C 这题总体思路就是,每画一条线,然后就找到x间距的最max值和y间距的最max值,相乘就是当前的ans 那么 ...
- oop典型应用:实体类
1. 要知道这个图三者的关系 2.实体类属性类型与数据库类型 3.readonly与const的对比 两者的区别如下: ①const能修饰类中的字段(field)或者局部变量(local variab ...
- 7天学完Java基础之0/7
笔记-7天学完Java基础之0/7 1.常用命令提示符(cmd) 启动:Win+R,输入cmd