usb客户驱动程序及应用程序
来源:互联网 发布:centos ftp传文件 编辑:程序博客网 时间:2024/05/01 19:14
向一块USB的测试板子发送数据.请问怎么以中断的方式进行块传输?
usb设备的访问分为三个部分,usb固件驱动程序 usb客户驱动程序 usb应用程序.
---------------------------------------------------------------
推荐:
http://www.usb.org/developers
http://www.lvr.com/usbcode.htm
---------------------------------------------------------------
HANDLE OpenDevice(LPGUID pGuid, char *outNameBuf)
{
HANDLE hOut = INVALID_HANDLE_VALUE;
HDEVINFO hardwareDeviceInfo;
SP_INTERFACE_DEVICE_DATA deviceInfoData;
hardwareDeviceInfo = SetupDiGetClassDevs (pGuid, NULL, NULL, (DIGCF_PRESENT ¦ DIGCF_INTERFACEDEVICE));
deviceInfoData.cbSize = sizeof (SP_INTERFACE_DEVICE_DATA);
if (SetupDiEnumDeviceInterfaces (hardwareDeviceInfo, 0, pGuid, 0, &deviceInfoData))
{
hOut = OpenOneDevice (hardwareDeviceInfo, &deviceInfoData, outNameBuf);
if (hOut==INVALID_HANDLE_VALUE)
return INVALID_HANDLE_VALUE;
}
DWORD reErr = GetLastError( );
SetupDiDestroyDeviceInfoList (hardwareDeviceInfo);
return hOut;
}
HANDLE OpenOneDevice(HDEVINFO HardwareDeviceInfo, PSP_INTERFACE_DEVICE_DATA DeviceInfoData, char *devName)
{
PSP_INTERFACE_DEVICE_DETAIL_DATA functionClassDeviceData = NULL;
ULONG predictedLength = 0;
ULONG requiredLength = 0;
HANDLE hOut = INVALID_HANDLE_VALUE;
// allocate a function class device data structure to receive the goods about this particular device.
SetupDiGetInterfaceDeviceDetail (HardwareDeviceInfo, DeviceInfoData, NULL, 0, &requiredLength, NULL);
predictedLength = requiredLength;
// sizeof (SP_FNCLASS_DEVICE_DATA) + 512;
functionClassDeviceData = (PSP_INTERFACE_DEVICE_DETAIL_DATA)malloc (predictedLength);
functionClassDeviceData->cbSize = sizeof (SP_INTERFACE_DEVICE_DETAIL_DATA);
// Retrieve the information from Plug and Play.
if (!SetupDiGetInterfaceDeviceDetail(
HardwareDeviceInfo,
DeviceInfoData,
functionClassDeviceData,
predictedLength,
&requiredLength,
NULL))
{
free(functionClassDeviceData);
return INVALID_HANDLE_VALUE;
}
strcpy(devName,functionClassDeviceData->DevicePath);
printf("Attempting to open %s/n", devName);
hOut = CreateFile (functionClassDeviceData->DevicePath,
GENERIC_READ ¦ GENERIC_WRITE,
FILE_SHARE_READ ¦ FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
0,
NULL);
if (INVALID_HANDLE_VALUE == hOut)
printf("FAILED to open %s/n", devName);
free(functionClassDeviceData);
return hOut;
}
HANDLE hDEV = OpenDevice((LPGUID)&GUID_BUS_UMSS, completeDeviceName);
if (hDEV==INVALID_HANDLE_VALUE)
return;
DeviceIoControl (
hDEV,
IOCTL_Vender_VCMD_WRITE,
buf,
31, //CBW
buf,
13, // Data + CSW
(LPDWORD)&nBytes,
NULL
);
上面的OpenDevice函数就是演示如何根据设备GUID打开一个USB接口的设备,和设备读写通讯的时候就需要了解设备的驱动到底都支持什么方式了。可以使用UsbView工具查看USB设备到底支持几个Endpoint,每个都以什么方式读写。
如果你的设备支持3个EndPoint,0号是控制的,1号是读,2号是写,那你直接读取0号Endpoint,搞不好就会发生重起的问题。仔细看看DDK中的一些例子代码可以解决你的问题
- usb客户驱动程序及应用程序
- USB应用程序调用驱动程序的例子
- Led驱动程序及应用程序编写
- USB驱动程序
- usb驱动程序
- USB驱动程序
- USB 驱动程序
- USB驱动程序
- USB驱动程序
- USB驱动程序之USB设备驱动程序
- USB驱动程序之USB总线驱动程序
- Linux驱动USB驱动程序-USB总线驱动程序
- USB驱动----USB总线驱动程序
- USB驱动(一、概念介绍及USB总线驱动程序代码分析)
- usb应用程序
- DriverStudio 开发USB驱动程序
- usb驱动程序设计摘要
- USB驱动程序打包
- 浮点数值的内存结构
- 电子
- javax.ejb.ObjectNotFoundException翻译
- J2ME中使用pauseApp控制手机临时退出JAVA程序
- session详解-[http://blog.csdn.net/dazern/]
- usb客户驱动程序及应用程序
- J2EE开发平台的软件测试技术(转贴)
- 【统筹养老】养老黑洞+只生一个,中国的未来令人担忧!zt
- 这些不是面向对象设计
- 哈佛成功金句-----25则
- 10天学会ASP.net之第一天
- 有没有做过考勤软件的同行在线啊,帮个忙指教一下
- javax.ejb.SessionBean翻译
- 10天学会ASP.net之第二天