当前位置: 首页 > 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.xdnf.cn/news/477307.html

相关文章:

  • 现在环保方面有什么新的技术动态
  • Qt/C++编写音视频实时通话程序/画中画/设备热插拔/支持本地摄像头和桌面
  • MySQL 8.0 OCP 1Z0-908 121-130题
  • 蓝牙协议架构与调试工具详解(含 BLE、HCI 命令、调试命令)
  • Prometheus实战教程:k8s平台-Mysql监控案例
  • 记一次缓存填坑省市区级联获取的操作
  • 自学嵌入式 day19-数据结构 链表
  • 【前端】构建关系图谱的前端组件推荐
  • SqlHelper 实现类,支持多数据库,提供异步操作、自动重试、事务、存储过程、分页、缓存等功能。
  • 使用哈希表封装myunordered_set和myunordered_map
  • 【Python CGI编程】
  • go-中间件的使用
  • Spring MVC 对 JavaWeb 的优化:从核心组件到注解
  • CentOS系统中升级Python 3.12.2版本
  • 数据通信原理 光纤通信 期末速成
  • 【Umi】项目初始化配置和用户权限
  • Chrome拓展(Chrome Extension)开发定时任务插件
  • 掌握 Kotlin Android 单元测试:MockK 框架深度实践指南
  • npm cross-env工具包介绍(跨平台环境变量设置工具)
  • A2A vs MCP vs AG-UI
  • 在微创手术中使用Kinova轻型机械臂进行多视图图像采集和3D重建
  • CSS实现文本自动平衡text-wrap: balance
  • 容器化-k8s-使用和部署
  • 能源数字化转型关键引擎:Profinet转Modbus TCP网关驱动设备协同升级
  • 从XSS到“RCE“的PC端利用链构建
  • 消防应急处置管理的全流程概述
  • 软件架构风格系列(3):管道 - 过滤器架构
  • 顶层架构 - 消息集群推送方案
  • 【风控】用户特征画像体系
  • 第一次做逆向