要做个usb应用程序,求方法
觉得不错,转载过来留着有用。
今天需要写一个类似于DNW的USB下载工具,用来与EBOOT通信传输CE的镜像文件,从网上找来的DNW源码编译生成的DNW无法检测到USB已经连接,分析应该是通过USB驱动的GUID打开设备导致的问题,于是想查找secusb2.sys的GUID是多少,找到下边这篇文章,第2节有相关信息,通过此方法找到GUID后修改源文件已经能够检查到USB连接OK。
作者:skdev1 前言USB开发跟其他文件设备(如串口)开发一样,难点是找到该USB设备的路径,本文以DDK里src\usb\bulkusb例子为参考,阐述一个非HID的USB调试器软件的开发过程。
2 设备GUID一般设备会有两个GUID, 一个为Class GUID, 在INF文件中,另一个为Device GUID,在SYS文件中。
CreateFile使用的是SYS中的GUID,想得到它有两个办法: 1 跟设备的提供者索要。
2在注册表里找,一般在:HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\DeviceClasses\3 设备路径根据设备GUID,枚举所有USB HOST,找匹配的USB设备,然后获取其路径。
3.1 头文件 usbport.h#define WINVER 0x0500#include #include #include #include #include #include #pragma comment(lib,"setupapi.lib")#pragma comment(lib,"hid.lib")#pragma comment(lib,"comctl32.lib")#ifndef BULKUSBH_INC#define BULKUSBH_INC#define BULKUSB_IOCTL_INDEX 0x0000#define IOCTL_BULKUSB_GET_CONFIG_DESCRIPTOR CTL_CODE(FILE_DEVICE_UNKNOWN, \BULKUSB_IOCTL_INDEX,\METHOD_BUFFERED, \FILE_ANY_ACCESS)#define IOCTL_BULKUSB_RESET_DEVICE CTL_CODE(FILE_DEVICE_UNKNOWN, \BULKUSB_IOCTL_INDEX+1,\METHOD_BUFFERED, \FILE_ANY_ACCESS) #define IOCTL_BULKUSB_RESET_PIPE CTL_CODE(FILE_DEVICE_UNKNOWN, \BULKUSB_IOCTL_INDEX+2,\METHOD_BUFFERED, \FILE_ANY_ACCESS) extern HANDLE open_file(char *filename);extern int GetUsbPath(char *path);extern int WriteUsb(HANDLE hUsb,char *Outbuff, int len);extern int ReadUsb(HANDLE hUsb,BYTE inbuff[],DWORD &nBytesRead,int nToRead);
如何编写应用程序与USB HID 设备通讯
(Em78p612),WT65F51, 纯HID类,符合 HID1.1 协议,USB1.1 FIFO长度为: 8 bytes2, HT82k96E, 有 3 endpoints (除了Controll endpoint), 每个endpoint 可定义为双向端点EM78M611 有2 endpoints (除了Controll endpoint), 每个endpoint 不能定义为双向端点Em78p612 仅有1 endpoint(除了Controll endpoint),只能 IN (Device to PC)若要实现 OUT功能,请参考本网站”HID类应用” Em78M611(EM78M612), 内带枚举时标准协定实际上, Em78M611与EM78M612 价格相差不大,所以建议还是用 EM78M611 其中带AD功能,非常适宜做Joystick, AD转换速度高达20Us.PWM功能适宜驱动马达,也是在Joystick上应用外部中断与计时器配合,适宜解码(IR,RF)3,HID报表,通常定义为:a Keyboard (包括多键同时压下与抬起)b, Mouse (能实现加速移动游标,短距离移动游标)c,电源管理 (电脑关机,待机,唤醒), 开机要主板配合d,消费类,在影音设备常常用到.如(像手机耳机):Play,Rec,Pause,Stop,Next,skip,Mute,e,FFBC类,也是影音设备常常用到概念上,相当於快捷键例如:直接进入MCE,My Music,My Pictruef, 自定义IN OUT通道例如OUT Report: (PC to Device)0x06,0xa2,0xff,0x09,0xb0,0xa1,0x01,0x09,0xa9,0x15,0x80,0x25,0x7f,0x75,0x08,0x95,0x08,0x91,0x02,0x09, 0x01,0x15, 0x81,0x25, 0x7f,0x75, 0x08,0x95, 0x08,0xb1, 0x02,0xc0PC 实现送8 bytes 给 Device4, 上层软体:由於属HID类,不用 Driver, OS自动识别.如果要实现自定义通信,需要开发应用软体若是MOUSE,Keyboard,Joystic 其中之一,或两者组合,也可以不用写应用软体 言下之意,只要写MCU Firmwae 即可所以,USB HID类是易於实现方案,其他类,多数要Driver支持 跟别的设备API,应用类似.Writerfile(); 实现写资料Readfile() ; 实现读数据, 通常设为非同步通信
转载请注明出处51数据库 » usb hid调试软件