vc关于USB BULK 读写问题

寒竹凌冬 2010-12-17 11:09:28
目前,小弟用VC做了一个小程序,读写USB设备,然遇到了以下问题,高手知道的,指点一下:

本人使用SetupDiGetClassDevs、SetupDiEnumDeviceInterfaces、SetupDiGetDeviceInterfaceDetail几个函数,可以查询到USB设备的路径,设备路径是:\\?\usb#vid_096e&pid_0403#5&3029f02&0&2#{a5dcbf10-6530-11d2-901f-00c04fb91ed} 。
但是网上说,针对USB BULK的设备,需要添加PIPE命名管道,所以我在路径后添加了“\\\\PIPE00”,使用CreateFile打开此路径,成功获得了句柄 。
因是USB BULK类型的设备,很多网上的讨论,加之我也问了一些人,读写这种设备,似乎不能用WriteFile和ReadFile,所以,我根据他们提供和网上找到的信息,使用DeviceIoControl来进行读写,可是第二个参数,IOCTL控制码,用了好几个,似乎总不对,DeviceIoControl的GetLastError返回0x32
发送DeviceIOControl的代码如下:

unsigned char databuf[512];
//组织为SCSI命令格式
memset(databuf, 0, 64);
databuf[0] = 0xAA;
databuf[1] = 0x00;
databuf[2] = 0x00;
databuf[3] = 0x00;
databuf[4] = 0x00;
databuf[5] = 0x81;
databuf[6] = 0x00;
databuf[7] = 0x00;
databuf[8] = 0x00;
databuf[9] = 0x0A;
databuf[10] = 0x00;
databuf[11] = 0x00;
ULONG nBytes;
PUSB_NODE_CONNECTION_INFORMATION connectionInfo;
nBytes = sizeof(USB_NODE_CONNECTION_INFORMATION) + sizeof(USB_PIPE_INFO) * 30;
connectionInfo = (PUSB_NODE_CONNECTION_INFORMATION)malloc(nBytes);

connectionInfo->ConnectionIndex = 2;

success = DeviceIoControl(hCard,
IOCTL_BULKUSB_WRITE,
connectionInfo,
nBytes,
databuf,
16,
&nlRBytes,
NULL);

if (success)
{
char chTip[512];
memset(chTip,0x00,sizeof(chTip));
sprintf(chTip, "outBuffer returns: %s\n",nlRBytes);
MessageBox(NULL,chTip,"error",MB_OK);

}
else
{
char chTip[512];
memset(chTip,0x00,sizeof(chTip));
sprintf(chTip, "DeviceIoControl failed,GetLastError() returns: 0x%x\n",GetLastError());
MessageBox(NULL,chTip,"error",MB_OK);
}


各位帮忙看下,看问题到底出在哪儿 ?谢谢@@
...全文
177 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
寒竹凌冬 2010-12-17
  • 打赏
  • 举报
回复
哈哈哈,谢了谢了,但是还是有懂的大侠们积极参与讨论啊@@@
wumingweihao 2010-12-17
  • 打赏
  • 举报
回复
我找到个例子,先去试试,可以的话再发给你哈~~~~
寒竹凌冬 2010-12-17
  • 打赏
  • 举报
回复
这个只是一部分,我走到这儿,怎么就是不能进行设备读写,好郁闷啊@@
wumingweihao 2010-12-17
  • 打赏
  • 举报
回复
LZ好巧啊!我也在研究USB读写数据,我的是USB条码枪,不懂啊!先研究研究你的代码,看看有什么灵感

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧