当前位置: 首页 > 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

相关文章:

  • 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黑魔法:从协议破解到极致性能调优
  • 马上评|重病老人取款身亡,如何避免类似悲剧?
  • 王伟妻子人民日报撰文:81192,一架永不停航的战机
  • 吉利汽车一季度净利润大增264%,称整合极氪后实现整体效益超5%
  • 马上评|清理“滥竽充数者”,为医者正名
  • 苏轼“胡为适南海”?
  • 光明日报:家长孩子共同“息屏”,也要保证高质量陪伴