11185|18

66

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

[ pc 与usb 传输 writefile问题 ]vc 6.0关于usb传输的几个问题 [复制链接]

1我们用的是usbaudio.sys驱动程序
2vc 6.0开发pc端程序 已用createfile(异步打开)成功获取usb句柄在writefile的时候出现问题
返回的错误代码是87

下面是可能出现的错误代码,请各位指教下出错的地方
另外就是如何获取usbaudio.sys提供的函数接口
用google怎么也搜不到合适的


/***********************************************************************************/

        DWORD  dwWrite=0;
        DWORD  dwTimerout=20;
        OVERLAPPED  ovInternal;
       
        ovInternal.Offset  =  0;   
        ovInternal.OffsetHigh  = 0;       
       
        memset(&ovInternal,0,sizeof(OVERLAPPED));
       
        //set up  a  overlapped  event
        //创建异步标志
        ovInternal.hEvent=CreateEvent(
                NULL,
                TRUE,
                FALSE,
                NULL);
        if(NULL==ovInternal.hEvent)
        {
                return ;
        }
        LPOVERLAPPED  lpOverlapped;
        lpOverlapped=&ovInternal;

//给pData指向的内存赋值
        int* pData=NULL;
        int iLen=200;

        pData=new int[200];
        memset(pData,256,4);
        int a[200]={1,7,20,3,5,6,7,10,20,30,56,12,98,89,78,17,0,1,18};
   
        pData=a;
       
        for(int i=0;i<200;i++)
        {
           *pData++=a;
        }

        int p=*pData;
        pData=a;

        BOOL  b;
       
        LPDWORD pdwWrite=NULL;

//write data to usb
//串口的异步通信
        COMSTAT ComStat;                     
        DWORD dwErrorFlags;                  
    ClearCommError(hwrite,&dwErrorFlags,&ComStat);
        //出错的地方
        if(!WriteFile(hwrite,pData,iLen,&dwWrite,lpOverlapped))
        {
                long lLastError=::GetLastError();
                if(lLastError!=ERROR_IO_PENDING)
                {
                        int o=0;
                        return;
                }

/***********************************************************************/
                else
                //
                {
                        switch(::WaitForSingleObject(ovInternal.hEvent,dwTimerout))
                               
                        {
                                //返回指定的异步操作对象的结果
                                b=::GetOverlappedResult(hwrite,lpOverlapped,pdwWrite,TRUE);
                        //指定的对象处于有信号状态       
                        case WAIT_OBJECT_0:
                                if(!b)
                                {
                                        return ;
                                }
                                break;
                                //时间超时指定对象处于无信号状态
                        case  WAIT_TIMEOUT:
                               
                                ::CancelIo(hwrite);
                                break;
                        default:
                                ::CancelIo(hwrite);
                                break;
                               
                               
                        }
                }
        }
//        if( pData!=NULL)   
//                delete pData;
        CloseHandle(hwrite);
}

最新回复

我也遇到同样的问题...WriteFile和ReadFile返回87错误  详情 回复 发表于 2010-2-28 21:39
点赞 关注

回复
举报

76

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
另外用createfile打开的是自适应同步传输out端点1
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
把代码再写的全点吧,比如CreateFile怎么写的
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

4
 
{
                MessageBox("somethings errror !")
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

5
 
汗。。
你WRITE前有判断设备当前状态吗?
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

6
 
汗。。
你WRITE前有判断设备当前状态吗?
==============================
能说的更清除点吗?
用createfile已经获得设备句柄 难道设备还不可用?
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(初级)

7
 
我也想用deviceiocontrol的 可是usbaudio提供的接口函数我
找不到
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

8
 
deviceiocontrol还需要控制代码,你肯定没有吧。
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

9
 
deviceiocontrol还需要控制代码,你肯定没有吧
==================
是啊  我们用的是usbaudio.sys  所以控制码就基本找不到

对了我看你在好多关于usb通信的帖子里都回复了 能聊聊吗?
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

10
 
更加郁闷的是  网上基本所有的帖子都是说
createfile打开端口
writefile写端口
以前没试验板 以为ok了
后来发现writefile返回的一值是87 说是参数错误。
搞得我现在是非常糊涂了。
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

11
 
现在晕的事情多了
一说是guid是设备的唯一表示  另外又有资料说guid是驱动程序给的那如果是不同的驱动那么同一个usb设备的guid会不会不同呢?  例如hid设备类的驱动和usbaudio设备类的驱动不同那guid是不是也不同?

2看过好多vc的程序利用createfile只是打开设备路径 并没有打开固定端点
如何进行同步的数据传输呢(假设是需求同步音频数据流)不同的端点传输的方式是不同的
直接createfile就可以传输?

3假设有两个或者多个自适应的同步传输端点难道用createfile(pipe1 )  createfile(pipe2 )....(简略参数)
这样实现通信?

4如何提高通信效率是用过驱动程序实现还是通过pc端的控制程序实现?  

 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

12
 
guid是驱动程序作为标识的,提供给用户使用的,用户怎么来访问硬件,是通过驱动程序,怎么去打开设备一种方法是:硬符号,一个guid,正常来说,不同的设备类,guid是不同的。驱动与硬件的关联是通过PID、VID等。

没有打开固定端点,那是与驱动程序保持一致的,比如一个固定端口发送,一个固定端口接收,则可以不需要端口,直接在驱动程序中固定就行了。

同步传输,在驱动中是一种机制,传输通讯机制。多个端点,也可以使用多个createfile(pipe1   )来实现。

提高通讯效率,这个问题,三个方面都要考虑:固件、驱动程序、用户态程序。


随便说说,嘿嘿。
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

13
 
谢谢 逸帆同志
此问题暂时不揭帖,给新人点提示
等我的程序搞定了 写点东西给后来人。
再次感谢逸帆。
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

14
 
不用感谢我,我也不是高手,再说,我也是从网上得到这些信息,相当于回报吧。
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

15
 
用第三方 软件写的驱动
利用deviceiocontrol来对读写进行控制
在此感谢逸帆。
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

16
 
更加郁闷的是     网上基本所有的帖子都是说
createfile打开端口
writefile写端口
以前没试验板   以为ok了
后来发现writefile返回的一值是87   说是参数错误。
搞得我现在是非常糊涂了。
============================================
在此解释下这个问题  给以后遇到的人点提示
是驱动程序的问题
跟应用程序唯一的关联就是pipe的对应有问题
在驱动程序打开的时候已经出错。
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

17
 
deviceiocontrol还需要控制代码
----------------------------
我装了一个usb转串口驱动,我也想用deviceiocontrol函数与usb接口交换数据,可不知道怎样得到控制码?
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

18
 
引用 16 楼 sunflower_88 的回复:
deviceiocontrol还需要控制代码
----------------------------
我装了一个usb转串口驱动,我也想用deviceiocontrol函数与usb接口交换数据,可不知道怎样得到控制码?

======================
deviceiocontrol需要看驱动函数提供什么操作码,如果用通用功能就看MSDN, 如果不是通用驱动就看驱动提供什么IO控制码
如果没有资料的话就找找看。GOODLUCK
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

19
 
我也遇到同样的问题...WriteFile和ReadFile返回87错误
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表