duyuanyuan
驱动牛犊
驱动牛犊
  • 注册日期2005-01-07
  • 最后登录2005-11-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2588回复:15

请教大家,如何探测usb插口上的扫描仪发送来的硬件消息?

楼主#
更多 发布于:2005-01-07 10:41
如题,谢谢阿
hglzw
驱动小牛
驱动小牛
  • 注册日期2001-06-12
  • 最后登录2006-03-03
  • 粉丝0
  • 关注0
  • 积分19分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-01-20 16:05
只能开一中断管道,然后driver用一个线程不停的read....
[img]http://www.kinboh.com/images/5130.jpg[/img]
nibblebit
驱动牛犊
驱动牛犊
  • 注册日期2004-07-26
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-01-28 19:39
用Windows Message的 Device Notification。
caesun
驱动小牛
驱动小牛
  • 注册日期2001-12-10
  • 最后登录2006-12-01
  • 粉丝0
  • 关注0
  • 积分290分
  • 威望30点
  • 贡献值393点
  • 好评度21点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-02-02 18:37
usb的话 用polling查问比较多吧
duyuanyuan
驱动牛犊
驱动牛犊
  • 注册日期2005-01-07
  • 最后登录2005-11-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-03-24 10:20
这个问题还没解决.  请问还有高手指点我吗??  
我的问题是:  按一下扫描仪上的按钮, 我的应用程序捕获到这个按钮事件. 我该如何响应这个事件? 谢谢阿!
leehan
驱动牛犊
驱动牛犊
  • 注册日期2001-12-26
  • 最后登录2016-10-11
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望72点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2005-03-25 20:57
用一个线程或Timer查询是否按键了/按键的值,然后自己判断处理
或者:
打开中断管道句柄,设置一个event,用一个线程等待event,收到event通知后取出按键值,自己判断处理.

以上中断方式需要你的扫描仪有中断endpoint
duyuanyuan
驱动牛犊
驱动牛犊
  • 注册日期2005-01-07
  • 最后登录2005-11-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-03-26 12:01
楼上你好,  
1: 我该如何打开中断管道? 打开谁的中断管道? 是扫描仪自带驱动还是windows提供的类驱动的管道??
2: 设置事件,所使用的函数应该是那些?
3: 扫描仪的\"endpoint\", 是不是指扫描仪驱动要开一个\"endpoint\"? 但是驱动不是我做的, 我该如何知道驱动开了那些\"endpoint\"?? 谢谢你
leehan
驱动牛犊
驱动牛犊
  • 注册日期2001-12-26
  • 最后登录2016-10-11
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望72点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2005-03-26 13:37
如果扫描仪本身的按键的实现方式是用USB中断传输方式实现的话,则扫描仪会有一个中断endpoint,在连接到PC后,PC的驱动程序中会有一个中断管道被打开(用于与设备的中断endpoint通讯)
AP可以用CreateFile将该中断管道作为另外的设备去打开,就可以访问它了.访问的方法,请看usbscan.h文件(DDK中).
设置event: CreateEvent, SetEvent, ResetEvent, WaitFor..Object..,等函数
duyuanyuan
驱动牛犊
驱动牛犊
  • 注册日期2005-01-07
  • 最后登录2005-11-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-03-27 13:29
楼上的你好, 我采用的方法就是这样的.
问题1:  我CreateFile(hDevice).  如何确定这个hDevice?  我使用HDEVINFO SetupDiCreateDeviceInfoList 等此类函数得到hDevice, 然后打开. 使用 deviceIocontrol函数, 使用usbscan.h里面的 CTRL_WAIT_ON_EVENT 控制码, 但是操作总是不成功.  返回值是 \"参数无效\".  这是怎么回事??
问题2: 对于usb扫描仪, App-- sti---驱动.   sti作为一个接口层, 是否每个扫描仪程序都兼容实现sti的接口. 经过测试, 我这里2台不同产品的扫描仪都没有实现sti接口.  
问题3: 对于问题1, 你有更好的解决办法吗? 是否我使用的参数有问题?  能给我一些例子吗? 谢谢你. 回答后,我会另外开帖给分的.
duyuanyuan
驱动牛犊
驱动牛犊
  • 注册日期2005-01-07
  • 最后登录2005-11-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-03-28 10:02
leehan你好, 我已经给你发mail了, 可以讨论一下吗? 我的mail: dupenf@163.com 谢谢你. 另外我会开贴给分的.
snowStart
驱动老牛
驱动老牛
  • 注册日期2004-04-06
  • 最后登录2011-06-02
  • 粉丝0
  • 关注0
  • 积分95分
  • 威望19点
  • 贡献值177点
  • 好评度1点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2005-03-28 18:28
这应该是类似usb打印机的打印监视器的东东了
学习,关注,交流中... [email=fengyu@163.com]Email:snowstarth@163.com[/email] [url]http://bbs.zndev.com/?a=snowStart[/url]
leehan
驱动牛犊
驱动牛犊
  • 注册日期2001-12-26
  • 最后登录2016-10-11
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望72点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
  • 社区居民
11楼#
发布于:2005-03-29 16:44
sti不是必需的.
把代码贴出来看看
duyuanyuan
驱动牛犊
驱动牛犊
  • 注册日期2005-01-07
  • 最后登录2005-11-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2005-03-29 18:45
楼上你好, 我得邮箱是 dupenf@163.com 你的是多少??

怎么做还没弄明白, 只有测试代码.
1: 使用 控制码的测试代码:
//下面这个值是根据 枚举得到的.
char* sz = \"\\\\\\\\?\\\\usb#vid_07b3&pid_0413#5&1a4e37f7&1&3#
{6bdd1fc6-810f-11d0-bec7-08002be2092f}\";
hDevice = CreateFile(sz,// \"\\\\\\\\.\\\\device\\\\usbfdo-1\",//sz,//\"\\\\\\\\.\\\\usb\\vid_07b3&pid_0413\",
0, // Access mask
FILE_SHARE_READ | FILE_SHARE_WRITE,//0,                            // Share mode
NULL,                         // SA
OPEN_EXISTING,                // Create disposition
FILE_ATTRIBUTE_SYSTEM|FILE_FLAG_OVERLAPPED,        // Attributes
NULL );


if (hDevice == INVALID_HANDLE_VALUE) // we can\'t open the drive
{
dwError = GetLastError();
return (FALSE);
}

OVERLAPPED Overlapped;
memset(&Overlapped,0,sizeof(Overlapped));
Overlapped.hEvent = CreateEvent( NULL, TRUE, TRUE, NULL );

BYTE byInterData[1024];
memset(byInterData,0,sizeof(byInterData));
    BOOL bRet = DeviceIoControl( hDevice,
                        (DWORD)IOCTL_WAIT_ON_DEVICE_EVENT,
                        NULL,
                      0,
                        byInterData,
                        sizeof(byInterData),
                        &junk,
                        (LPOVERLAPPED)&Overlapped);

if(bRet) //这里bRet一直返回0, 请问为什么?
........
leehan
驱动牛犊
驱动牛犊
  • 注册日期2001-12-26
  • 最后登录2016-10-11
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望72点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
  • 社区居民
13楼#
发布于:2005-03-31 21:51
你没有扫描仪厂商提供的minidriver么?
你用的扫描仪是我公司产的,能告诉我你想用来做什么事情吗?说不定我可以帮助你.
我的邮箱: televixiob@21cn.com
leehan
驱动牛犊
驱动牛犊
  • 注册日期2001-12-26
  • 最后登录2016-10-11
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望72点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
  • 社区居民
14楼#
发布于:2005-03-31 21:53
地址错了.
televixion@21cn.com
duyuanyuan
驱动牛犊
驱动牛犊
  • 注册日期2005-01-07
  • 最后登录2005-11-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2005-04-01 09:04
地址错了.
televixion@21cn.com
 


我已经给你发mail,收到没有??  我得是:  dupenf@163.com
游客

返回顶部