• android中kl布局文件加载失败解决办法


    涉及的代码文件

      input驱动程序

        1、input_dev->name                                                    是自定义的,可以根据实际函数确定,是确定kl文件的条件之一

        2、input_dev->evbit[0] = BIT_MASK(EV_KEY)           该条代码可有可无,目前还不清楚

          set_bit(EV_KEY, input_dev->evbit)                          用来确定驱动上报的设备类型,此处为key

      通用Generic.kl布局文件

        通用布局文件是系统提供的一个比较全面的kl文件,主要用于系统的鼠标、键盘、触摸屏等输入设备使用

      自己创建的devicename.kl布局文件

        可以参考Generic.kl布局文件,添加自己需要的键值

      inputdevice.cpp布局文件路径搜索

        根据的文件后缀名进行搜索,.idc, .kl, .kcm, 只有在.kl和.kcm文件同时存在时,才表示搜索成功

      eventhub.cpp输入事件获取,识别以及加载

        使用getevent函数获取event事件后,更具device的name和id进行搜索.idc, .kl, .kcm, 同时通过ioctl函数获取驱动中的输入设备类型,以及具体事件,例如KEY_HOME, KEY_BACK, KEY_ENTER等事件,最终决定加载哪个kl和kcm

      keyboard.cpp加载map

        根据搜索到的路劲加载kl和kcm

    主要流程和注意事项

      在原生uart串口驱动已有的前提下,通过编写应用程序去读串口接收的数据(这里采用select方式比较多,非阻塞模式),根据串口通信协议检测接收的数据是否正确且完整,将接受的数据进行相应的逻辑处理后将结果通过系统函数进行上报,上报的数据通过android输入系统进入内核,内核通过eventhub程序中的getevent函数获取上报的数据(一般为键值),通过根据对应输入设备驱动传入(ioctl函数)的设备事件类型以及相关具体键值事件进行匹配kl文件,然后keyboard程序中的loadmap函数对kl文件进行加载,加载后的键值数据映射android层的键值并传入android层供上层使用,上层具体操作这里不再赘述。

      注意:输入设备驱动中的设备name和设备id是确定加载哪个kl的关键,自定义后,一定要检查系统中的kl文件名要与之对应

           一般情况下,系统加载kl文件的优先级为:设备name>设备id>Generic.kl>最后尝试虚拟kl文件

          kl文件的格式说明:key     158(linux系统层的键值)    BACK(android层对应的按键功能,其字符串对应android层的键值)

          输入设备驱动input_dev中设定的键值范围一定不能超过Generic.kl中现有键值的范围,否则kl会加载失败,其中可以单独set_bit(); 也可for循环进行一段范围的set_bit

          在现有android系统中Generic.kl默认给系统的鼠标、键盘、和触摸屏,以及虚拟设备;当自定义的keyboard输入设备(如遥控器)匹配Generic.kl文件时,系统键盘将无法正常使用,会产生冲突(具体原因不明)

         

  • 相关阅读:
    ArcGIS 网络分析[8.1] 资料1 使用AO打开或创建网络数据集之【打开】
    【AO笔记】Addins的Toolbar 添加一条分割线
    ArcGIS 网络分析[4] 网络数据集深入浅出之连通性、网络数据集的属性及转弯要素
    ArcGIS 网络分析[2.5] VRP(车辆配送)【较难】
    ArcGIS 网络分析[2.4] OD成本矩阵
    Python中time模块详解
    python 读取文件、并以十六进制的方式写入到新文件
    【C++程序员学 python】python 之奇葩地方
    【C++程序员学 python】python 之变量
    校验值的计算----移位算法
  • 原文地址:https://www.cnblogs.com/goahead--linux/p/13048263.html
Copyright © 2020-2023  润新知