电视红外/蓝牙遥控器键值定义和适配

这篇具有很好参考价值的文章主要介绍了电视红外/蓝牙遥控器键值定义和适配。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

遥控器键值适配

一般来说,遥控器分蓝牙遥控器和红外遥控器。红外遥控器是指遥控器通过红外发射器把信号进行发射,接收设备则通过红外接收器进行信号接收;蓝牙遥控器是指遥控器通过蓝牙方式进行交互,遥控器和被连接设备均支持蓝牙则可以进行蓝牙操作。
每个遥控器的每个按键都有独特的物理码,这是遥控器出厂时就已经具备的,而且不同的遥控器厂商也有单独的用户码。我们通过已知的条件,需要在SDK里做出相应的适配和映射。

  • 遥控器红外键值没定义
    1.第一步:要知道这个遥控器的按键对应的scancode码是什么?有两种方式可以知道这个scancode没定义的值是什么。一、使用命令dmesg -c;二、使用echo 8 > /proc/sys/kernel/printk;这两种方式都可以查询到遥控器某个按键没定义的物理码。以下我用音量键减没定义为例。
    通过使用dmesg -c查询如下:
    电视红外/蓝牙遥控器键值定义和适配
    如上图所示,很明显可以看到音量键减没定义的物理码是154,这个是十进制的数值,需要转换为十六进制,转换之后为9A,这个值先保留记住,之后适配时需要用上。

    2.第二步:需要知道遥控器的用户码,每款遥控器都有独特的用户码,就好像每个人都有自己的身份证一样,用户码就是遥控器身份证。使用cat /sys/devices/virtual/remote/amremote/customcode命令进行查看遥控器用户码,在串口执行该命令后,按下遥控器的任意键,再次执行该命令就可以看到你使用这款遥控器的用户码了。

    3.第三步:进行定义。需要定义该用户码相关的remote配置文件,该文件是主要映射物理码和安卓键码的,是联系底层和上层的一个枢纽文件。知道了用户码和物理码即可开始配置remote配置文件,配置内容如下:

    // remote配置文件
    custom_name = test-remote-1
    custom_code = 0xc43b
    release_delay = 80
    key_begin
        0x9a    114   #VOLUME_DOWN
    key_end
    

    此时使用getevent命令,再按压音量键减,则会有相应的输出,如下:
    电视红外/蓝牙遥控器键值定义和适配
    但此时音量键的功能还没能正常使用,需要把remote文件和kl文件关联起来。

    4.第四步:需要知道遥控器对应的kl是哪个,需要知道遥控器的pid和vid是什么?也可以知道目前遥控器使用的是哪个kl文件?从上面步骤可得知,目前遥控器使用的event是/dev/input/event1,可以使用getevent -v来得知/dev/input/event1对应的是哪个pid和vid,使用getevent -v得出结果如下:
    电视红外/蓝牙遥控器键值定义和适配
    红色框住的就是pid和vid,我们可以通过pid和vid直接配置kl文件,放置文件到指定目录下。可以使用dumpsys input命令查询到目前/dev/input/event1对应的kl文件,如下:
    电视红外/蓝牙遥控器键值定义和适配
    目前知道了kl文件,文件名字也和pid、vid对应,则无须新建,直接通过vi修改文件,把音量键减的逻辑添加进去,刚才在remote文件中定义0x9a对应的是114,所以在kl文件里面则是通过114这个id来做标识,在kl文件里面添加逻辑如下:

    key 114   VOLUME_DOWN
    

    此时音量键减功能已生效,肯定还有看官会很疑惑为什么音量键减功能就会生效了,其实关键就在VOLUME_DOWN这个值里,这个不是随便写的,是有底层文件与之相对应的。

    5.第五步:要查找KeyEvent.java文件相关定义,路径为frameworks/base/core/java/android/view/,查看到相关代码如下:

        /** Key code constant: Volume Down key.
     	* Adjusts the speaker volume down. */
        public static final int KEYCODE_VOLUME_DOWN     = 25;
    

    数值25则是映射成最上层的安卓键值,可通过命令logcat -s WindowManager进行查询,按压音量键减,logcat -s WindowManager结果输出如下:
    电视红外/蓝牙遥控器键值定义和适配
    按下和弹起则是一个轮回,可以看到输出结果就是25,和KeyEvent.java文件里面的值对应了起来。
    重点:一般定义的键值涉及三个文件(attrs.xml、keycodes.h、InputEventLabels.h),在这三个文件里都会得到音量键减的相关的一些逻辑,如下:

    //路径为:frameworks/base/core/res/res/values/attrs.xml
    <enum name="KEYCODE_VOLUME_DOWN" value="25" />
    
    //路径为:frameworks/native/include/android/keycodes.h
    /** Volume Down key.
     * Adjusts the speaker volume down. */
    AKEYCODE_VOLUME_DOWN     = 25,
    
    //路径为:frameworks/native/include/input/InputEventLabels.h
    DEFINE_KEYCODE(VOLUME_DOWN),
    

    之后需要自定义键值在该四个文件里进行定义即可。
    小知识:可在hotkey.properties文件下配置热键,一般预置在设备的/system/etc目录下。
    至此,红外遥控器的键值简单适配和定义讲诉完毕,下面讲蓝牙遥控器的键值适配和定义。

  • 遥控器蓝牙键值没定义
    1.第一步:通过蓝牙连接好蓝牙遥控器和设备。
    2.第二步:需要知道没定义遥控器的蓝牙HID键码值Usage ID,如果是自定义的Usage ID,一般需要遥控器厂商提供,一般是根据规范定义出来的。我以蓝牙遥控器#键为例,目前蓝牙遥控器#键没有效果,通过getevent命令也没有任何输出,通过查询可知#键的Usage ID为0x304,这个需要记住,下面适配需要用上。
    小知识:HID键码值不止Usage ID,还有Usage Page,Usage Page一般为0x07和0x0C两个数值,0x07代表已经定义好的键码,0x0C代表用户自定义的键码。
    3.第三步:适配HID键值,首先需要修改hid-input.c,这个文件先用Usage ID和input.h先关联起来,用户自定义的键值一般需要修改hid-input.c中hidinput_configure_usage方法,然后找到方法里的HID_UP_CONSUMER里面进行添加,代码添加如下:

    //common/drivers/hid/hid-input.c
    case 0x304: map_key_clear(KEY_POUND);		break;
    

    input.h文件也须添加相关代码,input.h里面对应的值,到时候getevent也会输出对应的值,添加代码如下:

    //common/include/uapi/linux/input.h
    #define KEY_POUND		0x2f1
    

    注意:在input.h里面也可知道定义的最大值不能超过0x2ff,不然溢出则定义失败。
    小知识:0x07的HID键码表如下:

    	static const unsigned char hid_keyboard[256] = {
    	  0,  0,  0,  0, 30, 48, 46, 32, 18, 33, 34, 35, 23, 36, 37, 38,
    	 50, 49, 24, 25, 16, 19, 31, 20, 22, 47, 17, 45, 21, 44,  2,  3,
    	  4,  5,  6,  7,  8,  9, 10, 11, 28,  1, 14, 15, 57, 12, 13, 26,
    	 27, 43, 43, 39, 40, 41, 51, 52, 53, 58, 59, 60, 61, 62, 63, 64,
    	 65, 66, 67, 68, 87, 88, 99, 70,119,110,102,104,111,107,109,106,
    	105,108,103, 69, 98, 55, 74, 78, 96, 79, 80, 81, 75, 76, 77, 71,
    	 72, 73, 82, 83, 86,127,116,117,183,184,185,186,187,188,189,190,
    	191,192,193,194,134,138,130,132,128,129,131,137,133,135,136,113,
    	115,114,unk,unk,unk,121,unk, 89, 93,124, 92, 94, 95,unk,unk,unk,
    	122,123, 90, 91, 85,unk,unk,unk,unk,unk,unk,unk,111,unk,unk,unk,
    	unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,
    	unk,unk,unk,unk,unk,unk,179,180,unk,unk,unk,unk,unk,unk,unk,unk,
    	unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,
    	unk,unk,unk,unk,unk,unk,unk,unk,111,unk,unk,unk,unk,unk,unk,unk,
    	 29, 42, 56,125, 97, 54,100,126,164,166,165,163,161,115,114,113,
    	150,158,159,128,136,177,178,176,142,152,173,140,unk,unk,unk,unk
    };
    

    4.第四步:getevent有值并且知道值为0x2f1,需要转换为十进制为753,需要到对应kl文件里进行相关配置,通过getevent -v得知蓝牙遥控器的pid和vid,如下:
    电视红外/蓝牙遥控器键值定义和适配
    所以通过pid和vid配置相关kl即可。使用dumpsys input知道目前使用的kl是默认的,如下:
    电视红外/蓝牙遥控器键值定义和适配
    通过pid和vid配置kl,名称为Vendor_0508_Product_0110.kl,配置后和内容如下:
    电视红外/蓝牙遥控器键值定义和适配

    ///system/usr/keylayout/Vendor_0508_Product_0110.kl
    key 753  POUND
    

    至此,蓝牙键值定义完成。

    由上,红外遥控器和蓝牙遥控器的键值定义和适配完成了,有疑问联系。文章来源地址https://www.toymoban.com/news/detail-447308.html

到了这里,关于电视红外/蓝牙遥控器键值定义和适配的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于51单片机设计的红外遥控器

    遥控器是现代生活中必不可少的电子产品之一,目前市面上的遥控器种类繁多,应用范围广泛。而 NEC 红外遥控器协议则是目前应用最为广泛的一种协议之一,几乎所有的电视、空调等家用电器都支持该协议。 本项目是基于 51 单片机设计支持 NEC 协议的红外遥控器,实现接收

    2024年02月09日
    浏览(33)
  • 探索控制领域:从电视遥控器到自动驾驶【基础概念理解、应用实例】

    当谈到控制学和控制系统时,你可能会联想到电视遥控器、自动驾驶汽车、飞机自动驾驶系统以及许多其他自动化系统。但控制学是一个更广泛的学科,它涵盖了各种领域,从工程到生物学,从经济学到环境科学。让我们深入了解控制学的基本概念以及它在各个领域的应用。

    2024年02月08日
    浏览(30)
  • android系统中定义的按键码(包含键盘,游戏手柄,TV遥控器)

    数据来源:android sdk. KEYCODE_UNKNOWN         0 KEYCODE_SOFT_LEFT       1 KEYCODE_SOFT_RIGHT      2 KEYCODE_HOME            3 KEYCODE_BACK            4 KEYCODE_CALL            5 KEYCODE_ENDCALL         6 KEYCODE_0               7 KEYCODE_1               8 KEYCODE_2 

    2024年02月12日
    浏览(37)
  • 433M遥控器无线解码1527协议

    433M遥控器无线解码1527协议,定时器轮询法 1527协议,最前面是引导码,紧接着前20位为地址码,每个遥控器不一样,后4位是按键码,每个遥控器都是一样的, 逻辑分析仪捕捉图形如下图: 分别按下遥控器的四个按键结果如下图: ev1527.c文件 ev1527.h文件

    2024年02月15日
    浏览(28)
  • 无人机遥控器方案定制_MTK平台无人设备手持遥控终端PCB板开发

    随着科技的不断发展和无人机技术的逐步成熟,无人机越来越受到人们的关注。作为一种高新技术,无人机的应用范围不断拓展,包括农业、环境监测、城市规划、运输物流等领域。同时,无人机的飞行控制技术也得到了不断的优化和提升。 早期,无人机的飞行控制大多以机

    2024年02月03日
    浏览(32)
  • DJI A3飞控 遥控器信号中断 会导致什么问题?

    在使用DJI A3 飞控的过程中,希望用OSDK完成自动化的任务。 DJI A3要求必须连接遥控器,可以是大疆Lightbridge的遥控器,也可以是SBUS协议的遥控器,比如航模的支持SBUS协议的遥控器即可。 当运行OSDK的过程中,遥控器出现问题,或者遥控器的信号出现干扰,导致出现连接问题时

    2024年02月04日
    浏览(56)
  • 小米手机怎么开空调?3步让你的手机成为空调遥控器

    大家家里或者公司、学校宿舍等地方有空调吗?当你找不到空调遥控器或者空调遥控器损坏了的话该怎么办?这时候小米手机的红外线功能就派上用场了,小米手机怎么开空调? 没错,小米手机的红外线功能是可以连接大部分家用设备的,空调仅仅是其中一种,包括风扇、电

    2024年02月13日
    浏览(28)
  • 大疆无人机 MobileSDK(遥控器/手机端)开发 v4版<1>

    刚刚结束了项目交付,趁热打铁分享一下这次遇到的新东西。首先了解一下大疆的无人机,它大致可以分为三级。 入门级 :适合新手,没事干在野外飞一飞拍拍风景啥的。操作也简单,基本上看飞行教程都能懂,也不需要太高的专业性,飞机也相对较小安全系数相对较高。

    2024年02月06日
    浏览(37)
  • 大疆无人机 MobileSDK(遥控器/手机端)开发 v5版<2>

    v5.x版本的功能与v4.x基本相同,都是获取飞机的姿态信息、获取无人机多媒体文件、操作多媒体文件、航线规划等。不过在上一章节中也大致说了一些两个版本的中API的差别,下面是根据一些API使用所完成的一些功能,因为项目原因只能提供部分代码供参考,后续如果有这方

    2024年02月14日
    浏览(33)
  • 无人机基本知识,无人机遥控器功能详解与调试方法

    无人机作为一种新兴的飞行器,近年来在各个领域得到了广泛的应用。而无人机遥控器则是控制无人机飞行的重要工具。 无人机遥控器是一种无线设备,通过它来远程控制无人机的飞行。遥控器通常包括一个或多个摇杆,用于控制无人机的各种动作,如起飞、降落、前进、后

    2024年02月21日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包