当前位置:  技术问答>linux和unix

请问一个关于Linux的Input子系统的丢失发送数据的问题

    来源: 互联网  发布时间:2017-03-21

    本文导语:  这几天被老板弄来搞Android下的I2C设备驱动,读取的坐标数据需要用Input子系统上报应用。但是代码写好以后测试中发现上报的三个坐标值经常会丢失1-2个,有时连input_sync都没发。我的代码:     相关代码:     ...

这几天被老板弄来搞Android下的I2C设备驱动,读取的坐标数据需要用Input子系统上报应用。但是代码写好以后测试中发现上报的三个坐标值经常会丢失1-2个,有时连input_sync都没发。我的代码:

    相关代码: 
    input子系统注册: 
        bma->input_dev = input_allocate_device(); 
        if (!bma->input_dev) 
        { 
                err = -ENOMEM; 
                printk(KERN_DEBUG "Input Request Error.n"); 
                goto probe_err_reg;       
        } 
        printk(KERN_DEBUG "Input Request Successful.n"); 
        
        bma->input_dev->open       = input_open; 
        bma->input_dev->close      = input_release; 
        bma->input_dev->name       = SXA_I2C_NAME; 
        bma->input_dev->phys       = "sxa/input0"; 
        bma->input_dev->id.bustype = BUS_I2C; 
        bma->input_dev->id.vendor  = SXA_VENDOR; 
        bma->input_dev->id.product = 1; 
        bma->input_dev->id.version = 1; 

        __set_bit(EV_ABS,    bma->input_dev->evbit); 
        __set_bit(ABS_X,     bma->input_dev->absbit); 
        __set_bit(ABS_Y,     bma->input_dev->absbit); 
        __set_bit(ABS_Z,     bma->input_dev->absbit); 
        __set_bit(ABS_MISC,  bma->input_dev->absbit); 

        err = input_register_device(bma->input_dev); 

    工作队列内发送坐标数据: 
        input_report_abs(dd->input_dev, ABS_X, x); 
        input_report_abs(dd->input_dev, ABS_Y, y); 
        input_report_abs(dd->input_dev, ABS_Z, z); 
        input_sync(dd->input_dev); 

    在工作队列内发送数据时,上层报告数据丢失。采用evbug.ko调试发现数据确定丢失,以下是报告: 
        [ 3224.267441] Enter irq. 
        [ 3224.267484] dd has get. 
        [ 3224.267529] work scheduled. 
        [ 3224.267589] work_q Entered. 
        [ 3224.268473] X Regs: -3. 
        [ 3224.268504] Y Regs: 31. 
        [ 3224.268519] Z Regs: 2. 
        [ 3224.268534] TILT Regs: 96. 
        [ 3224.268551] ******************************* 
        [ 3224.268669] evbug.c: Event. Dev: input3, Type: 3, Code: 0, Value: -3             
        [ 3224.270979] evbug.c: Event. Dev: input3, Type: 3, Code: 2, Value: 2 
        [ 3224.272001] evbug.c: Event. Dev: input3, Type: 0, Code: 0, Value: 0 

        应该有3个数据,-3、31、2,结果31丢失 

        另外,发现同事正常应用的触摸屏上报的坐标数据也是有丢失的,不过似乎没影响正常使用……迷惑中……

        还望高手们能指点迷津,谢谢!

|
采用EV_ABS方式传送,input机制会过滤掉相同的值,所以会出现丢值的现象。如果采用EV_REL方式就可以解决这个问题了。

|
你每秒上报的次数降下来。默认好像是80,改成40

应该是上报速度太快,中间件处理不过来,所以丢失

|
楼上正解,相同的值就不会往上传了,可以看一下linux的input设备的实现代码

|
我记得采用EV_ABS类型进行传送,好像有个范围值,你要查查范围值,使用EV_ABS类型进行report的时候细节必须要谨慎,不然会出现很难查的BUG。如果用EV_REL还会出现丢失的情况,这个时候你就要跟踪下,你__set_bit和调用report进行数据传送的时候是否类型一致。一般正确使用EV_REL方式,不会出现丢数据的情况的。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • *** 高分, 请问如何发送一个事件, 比如发送一个Tab键? ***
  • 请问在netfilter的forward点上怎么将原来从eth0发送的数据包转向由eth1发送啊?
  • 请问网络连接断开,如何让数据在联网后连续发送?
  • 请问在文本终端下,怎么用shell命令使网卡发送数据?
  • 请问使用SELECT()函数怎么监测串口发送数据?
  • 请问如何从串口发送字符串"102a34"?
  • 请问怎样把数据发送到网页?
  • 请问各位大虾,不用javaMail如何才能发送附件。
  • 请问怎么通过Socket发送一个int数值?急,谢谢!!
  • [求助]请问socket编程中send()函数可以发送整形数据吗?
  • 请问如何向servlet发送消息。源可以是applet或application或其他的什么东东。
  • 请问linux下socket编程服务器数据只能发送不能接收吗?
  • 请问如何判断从raw socket发出的包是哪个进程发送的?
  • 请问怎样用JAVAMAIL实现自动给用户发送邮件的功能?弄好了送100分
  • 请问怎样发送键盘信号?
  • 请问发送数据成功后返回的ack是在内核的什么地方处理的?
  • 我想用jsp做个发送邮件的程序,请问需要什么服务器?怎样配置?最好还能提供一个简单的测试程序!谢谢!
  • 请问RST在什么情况下发送?? 使用TCP socket编程的话是否会引起这种TCP包的发送?
  • 请问新浪,网易,263上面的给手机发送图片,短信,铃声的Web是用什么做的?
  • 请问一个使用JMS发送消息的问题:
  • 请问:我知道路由器的telnet密码,但忘记了enable 密码,请问如何是好?
  • 请问那里有SYBASE的jbdb 2.0下载;jspsmartupload可以直接将文件上传到数据库,请问如何使用
  • 请问最新的reahat9.0是基于什么核心的?2.4?2.6?请问那里能下载?
  • 请问:请问哪里有关于linux基本操作命令讲解的资料下载,最好是幻灯片格式的.
  • 请问,我试图用#admintool&图形工具命令来安装sun workshop5.0,为什么进入的却是用户管理界面?请问具体该如何在solaris下安装应用软件
  • 请问在Redhat 9里,我从登录就是图形介面,请问如何在图形介面内进入命令行方式呢,谢谢
  • 请问玩过SOLARIS的高手门,在不正常关机后,就不能启动到windows公用桌面了,只能在命令提示模式下了,请问怎么解决这个问题啊?急~!~!
  • 请问:我在redhat下装了bochs-2.2.1-1.rpm,.装了后,想设置一下,但找不到bochsrc.fda.bxrc,请问这个文件在哪个曰录下啊。
  • 请问:在配置Qt时,很多文档都说在.profile,.login里加东西,但是我好像没有发现有这两个文件上,请问这些文件在哪个目录下啊
  • 请问:在GCC里的C程序里的变量的声明是不是只能在前面,而且相同类型的变量的声明只能放在一起?如果不是,请问怎么样可以解决这个问题.
  • 请问各位大虾,小弟今天开始学jsp了,这学期我们有java课,所以已经下载了jdk(好象是1.2),请问我的98环境怎么配置jsp环境呀?我的jdk可以运行.java程序,别的我就不知道了....谢谢!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3