当前位置: 首页 > news >正文

OrangePi Zero 3学习笔记(Android篇)11 - IR遥控器

目录

1. 查询IR信息

1.1.1 sunxi-ir-uinput

1.1.2 sunxi-ir

2. 调试键值

3. 匹配遥控器

4. Power键的特殊处理

5. 验证


ir的接口在13pin接口上,需要使用到扩展板。

1. 查询IR信息

在shell的界面输入命令:

dumpsys input

分析返回信息,可以看到有3个输入事件设备,其中有一个是虚拟设备,另外2个分别是:sunxi-ir-uinput和sunxi-ir。

1.1.1 sunxi-ir-uinput

该设备的类型是键盘、字母键、光标控制键和方向键。键盘布局文件是/system/usr/keylayout/sunxi-ir-uinput.kl,键盘字符映射文件是/system/usr/keychars/Generic.kcm

1.1.2 sunxi-ir

该设备的类型是键盘,键盘布局文件是/system/usr/keylayout/sunxi-ir.kl。

2. 调试键值

在/device/softwinner/apollo/common/system/ueventd.sun50iw9p1.rc里面添加权限

/dev/input/event0           0777    system      system
/dev/input/event1           0777    system      system

烧录编译后,shell中运行:getevent -l

找一个遥控器按键测试(注意不是所有遥控器都支持,应该是只勾选了NEC和RC-5的协议)

console:/ $ getevent -l
add device 1: /dev/input/event1name:     "sunxi-ir-uinput"
add device 2: /dev/input/event0name:     "sunxi-ir"
/dev/input/event0: EV_REP       REP_DELAY            00000000
/dev/input/event0: EV_REP       REP_PERIOD           00000000
/dev/input/event0: EV_MSC       MSC_SCAN             012c401c
/dev/input/event0: EV_SYN       SYN_REPORT           00000000
/dev/input/event0: EV_MSC       MSC_SCAN             002c401c
/dev/input/event0: EV_SYN       SYN_REPORT           00000000

在/system/core/toolbox/getevent.c里面找到这个打印信息的源代码

static void print_event(int type, int code, int value, int print_flags)

以“EV_MSC       MSC_SCAN             012c401c”为例,第一个值表示type,第二个值表示code,第三个则为value,这里因为没有匹配遥控器,所以信息只是简单的值。

3. 匹配遥控器

示例中中0x2c40是遥控器的用户码(头码),在/vendor/aw/homlet/hardware/input/multi_ir/keylayout/里面添加一个新文件customer_ir_2c40.kl(默认是NEC协议,如果是其他,则需要在文件名上指定协议,例如rc5协议,那么文件名可能是customer_rc5_ir_04.kl)。

而value中的低字节是键值,示例中的按键是ENTER键,对应键值为0x1c(十进制28),所以在customer_ir_2c40.kl添加键值:

key  28  ENTER

power键需要特殊处理,这里也添加这个键。

key  3  ENTER

其他按键可以采用相同的方式添加。

在文件/vendor/aw/homlet/hardware/input/multi_ir/multiir.mk中添加这个文件

BASE_KL_COPY_LIST += customer_ir_9f00.kl \customer_ir_dd22.kl \customer_ir_fb04.kl \customer_ir_ff00.kl \customer_ir_4cb3.kl \customer_ir_bc00.kl \customer_ir_fc00.kl \customer_ir_2992.kl \customer_ir_4040.kl \customer_ir_7f00.kl \customer_ir_bf00.kl \customer_ir_2c40.kl \

4. Power键的特殊处理

Power是特殊的,因为需要待机时能响应,需要修改到2个文件

/longan/device/config/chips/h618/configs/p2/linux-5.4/board.dts

&s_cir0 {s_cir0_used = <1>;pinctrl-names = "default", "sleep";pinctrl-0 = <&s_cir0_pins_a>;pinctrl-1 = <&s_cir0_pins_b>;
...ir_power_key_code9 = <0x03>;ir_addr_code9 = <0x2c40>;wakeup-source;status = "okay";
};

添加第10个power键,同理/longan/device/config/chips/h618/configs/p2/uboot-board.dts

&s_cir0 {pinctrl-names = "default","sleep";pinctrl-0 = <&s_cir0_pins_a>;pinctrl-1 = <&s_cir0_pins_b>;s_cir0_used = <1>;
...ir_power_key_code9 = <0x03>;ir_addr_code9 = <0x2c40>;wakeup-source;status = "okay";
};

5. 验证

如果配置成功后,通过getevent -l可以看到不同的打印结果

console:/ $ getevent -l
add device 1: /dev/input/event1name:     "sunxi-ir-uinput"
add device 2: /dev/input/event0name:     "sunxi-ir"
/dev/input/event0: EV_REP       REP_DELAY            00000000
/dev/input/event1: EV_REP       REP_DELAY            00000000
/dev/input/event0: EV_REP       REP_PERIOD           00000000
/dev/input/event1: EV_REP       REP_PERIOD           00000000
/dev/input/event0: EV_MSC       MSC_SCAN             012c401c
/dev/input/event1: EV_KEY       KEY_F8               DOWN
/dev/input/event0: EV_SYN       SYN_REPORT           00000000
/dev/input/event1: EV_SYN       SYN_REPORT           00000000
/dev/input/event0: EV_MSC       MSC_SCAN             002c401c
/dev/input/event1: EV_KEY       KEY_F8               UP
/dev/input/event0: EV_SYN       SYN_REPORT           00000000
/dev/input/event1: EV_SYN       SYN_REPORT           00000000

http://www.dtcms.com/a/194070.html

相关文章:

  • python自学笔记2 数据类型
  • 汉诺塔超算堆栈结构编码和流程详细设计(附源代码)
  • [SpringBoot]Spring MVC(2.0)
  • Android native崩溃问题分析
  • Python基础:集合(Set)
  • 今日积累:若依框架配置QQ邮箱,来发邮件,注册账号使用
  • MySQL高可用
  • Kubernetes 1.28 无 Docker 运行时环境下的容器化构建实践:Kaniko + Jenkins 全链路详解
  • Web服务器怎么压测?可用什么软件?
  • 嵌入式故障码管理系统设计实现
  • Unity3D Overdraw性能优化详解
  • CMS(plone / joomla 搭建测试)
  • 如何让 Google 收录 Github Pages 个人博客
  • Java 泛型与类型擦除:为什么解析对象时能保留泛型信息?
  • redis数据结构-12(配置 RDB 快照:保存间隔和压缩)
  • 事件响应策略规范模版
  • 宇宙中是否存在量子现象?
  • Volcano 在 Kubernetes 生态中的介绍
  • rust语言,与c,go语言一样也是编译成二进制文件吗?
  • TLS 1.3黑魔法:从协议破解到极致性能调优
  • mac的Cli为什么输入python3才有用python --version显示无效,pyenv入门笔记,如何查看mac自带的标准库模块
  • 基于Scrapy-Redis的分布式景点数据爬取与热力图生成
  • GTS-400 系列运动控制器板卡介绍(三十六)--- 电机到位检测功能
  • TCP/IP 知识体系
  • STM32外设AD-DMA+定时读取模板
  • IHttpHandler和Tcp Listener的web服务器接收上传文件有什么区别
  • 在哪一个终端下运行有影响吗?pip install pillow
  • 【全网首发】解决coze工作流批量上传excel数据文档数据重复的问题
  • ChatGPT再升级!
  • Linux——一键部署应用脚本