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”,按下回车键后就可 ...
随机推荐
- mysql之SQL入门与提升(二)
在mysql之SQL入门与提升(一)我们已经有了些许基础,今天继续深化 先造表 SET NAMES utf8;SET FOREIGN_KEY_CHECKS = 0; -- -------------- ...
- [Inside HotSpot] Epsilon GC
1. Epsilon GC简介 Epsilon GC源于RedHat开发者Aleksey Shipilëv提交的一份JEP 318: Epsilon: A No-Op Garbage Collecto ...
- Sqlyog问题
Sqlyog没有架构设计器的解决方法 更换注册码即可
- shell学习(13)- vim
其中部分内容是转载的. 在命令状态下对当前行用== (连按=两次), 或对多行用n==(n是自然数)表示自动缩进从当前行起的下面n行.你可以试试把代码缩进任意打乱再用n==排版,相当于一般IDE里的c ...
- 微信小程序-修改单选框和复选框大小的方法
方法有两种: 一:采用css的zoom属性 zoom缩放会将元素保持在左上角,并且会有毛边,可能会稍稍改变元素原来的形状. 二:采用css3的transform:scale属性 zoom缩放会将元素保 ...
- LeetCode 088 Merge Sorted Array 合并两个有序数组
Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.Note:You ...
- C. Glass Carving 正着做或者倒着做都可以
http://codeforces.com/problemset/problem/527/C 这题总体思路就是,每画一条线,然后就找到x间距的最max值和y间距的最max值,相乘就是当前的ans 那么 ...
- Notepad++代码函数快速提示设置
设置——首选项——自动完成
- SpringBoot | 第零章:前言
缘起 前段时间公司领导叫编写一两课关于springboot的基础知识培训课程,说实话,也是今年年初才开始接触了SpringBoot这个脚手架,使用了之后才发现打开了一个新世界.再之后也没有一些系统的学 ...
- java获得文件扩展名
java获得文件扩展名: public static void main(String[] args) throws Exception { String name = ""; S ...