6.4物联网RK3399项目开发实录-驱动开发之IR 红外遥控使用(wulianjishu666)

嵌入式物联网项目开发源码:

链接:https://pan.baidu.com/s/1gVC0kaFIv9CpBjLhp20Fxg?pwd=jj18

=========================================================

IR 使用

红外遥控配置

AIO-3399J 开发板上使用红外收发传感器 IR (在 mic 接口和喇叭接口之间)实现遥控功能,在 IR 接口处接上红外接收器。本文主要描述在开发板上如何配置红外遥控器。

其配置步骤可分为两个部分:

修改内核驱动:内核空间修改,Linux 和 Android 都要修改这部分的内容。

修改键值映射:用户空间修改(仅限 Android 系统)。

内核驱动

在 Linux 内核中,IR 驱动仅支持 NEC 编码格式。以下是在内核中配置红外遥控的方法。

所涉及到的文件:

kernel/arch/arm64/boot/dts/rockchip/rk3399-firefly-port.dtsi

kernel/drivers/input/remotectl/rockchip_pwm_remotectl.c

定义相关数据结构

添加键值表结构体数组和配置对应如下:

&pwm3 {

status = "okay";

interrupts = ;

compatible = "rockchip,remotectl-pwm";

remote_pwm_id = ;

handle_cpu_id = ;

ir_key1{

rockchip,usercode = ;

rockchip,key_table = {

{0xeb, KEY_POWER}, // Power

//Control

{0xa3, 250}, // Settings

{0xec, KEY_MENU}, // Menu

{0xfc, KEY_UP}, // Up

{0xfd, KEY_DOWN}, // Down

{0xf1, KEY_LEFT}, // Left

{0xe5, KEY_RIGHT}, // Right

{0xf8, KEY_REPLY}, // Ok

{0xb7, KEY_HOME}, // Home

{0xfe, KEY_BACK}, // Back

// Vol

{0xa7, KEY_VOLUMEDOWN}, // Vol-

{0xf4, KEY_VOLUMEUP}, // Vol+

};

注:第一列为键值,第二列为要响应的按键码。

如何获取用户码和IR 键值

在 remotectl_do_something 函数中获取用户码和键值:

case RMC_USERCODE:

{

//ddata->scanData <<= 1;

//ddata->count ++;

if ((RK_PWM_TIME_BIT1_MIN < ddata->period) && (ddata->period < RK_PWM_TIME_BIT1_MAX)){

ddata->scanData |= (0x01<<ddata->count);;

}

ddata->count ++;

if (ddata->count == 0x10){//16 bit user code

DBG_CODE("GET USERCODE=0x%x\n",((ddata->scanData) & 0xffff));

if (remotectl_keybdNum_lookup(ddata)){

ddata->state = RMC_GETDATA;

ddata->scanData = 0;

ddata->count = 0;

}else{ //user code error

ddata->state = RMC_PRELOAD;

}

}

}

注:用户可以使用 DBG_CODE() 函数打印用户码。

使用下面命令可以使能 DBG_CODE 打印:

echo 1 > /sys/module/rockchip_pwm_remotectl/parameters/code_print

将 IR 驱动编译进内核

将 IR 驱动编译进内核的步骤如下所示:

(1)、向配置文件 kernel/drivers/input/remotectl/Kconfig 中添加如下配置:

config ROCKCHIP_REMOTECTL_PWM

bool "rockchip remoctrl pwm capture"

default n

(2)、修改 kernel/drivers/input/remotectl/Makefile 文件,添加如下编译选项:

obj-$(CONFIG_ROCKCHIP_REMOTECTL_PWM) += rockchip_pwm_remotectl.o

(3)、在 kernel 路径下使用 make menuconfig ,按照如下方法将 IR 驱动选中。

Device Drivers

--->Input device support

-----> [*] rockchip remotectl

------->[*] rockchip remoctrl pwm capture

保存后,执行 make 命令即可将该驱动编进内核。

Android 键值映射

文件 /system/usr/keylayout/ff420030_pwm.kl 用于将 Linux 层获取的键值映射到 Android 上对应的键值。用户可以添加或者修改该文件的内容以实现不同的键值映射。

该文件内容如下所示:

key 28 ENTER

key 116 POWER WAKE

key 158 BACK

key 139 MENU

key 217 SEARCH

key 232 DPAD_CENTER

key 108 DPAD_DOWN

key 103 DPAD_UP

key 102 HOME

key 105 DPAD_LEFT

key 106 DPAD_RIGHT

key 115 VOLUME_UP

key 114 VOLUME_DOWN

key 143 NOTIFICATION WAKE

key 113 VOLUME_MUTE

key 388 TV_KEYMOUSE_MODE_SWITCH

key 400 TV_MEDIA_MULT_BACKWARD

key 401 TV_MEDIA_MULT_FORWARD

key 402 TV_MEDIA_PLAY_PAUSE

key 64 TV_MEDIA_PLAY

key 65 TV_MEDIA_PAUSE

key 66 TV_MEDIA_STOP

注:通过 ADB 修改该文件重启后即可生效。

IR 使用

如下图是通过按红外遥控器按钮,所产生的波形,主要由 head, Control, information, signed free 这四部分组成,具体可以参考 RC6 Protocol。

相关推荐
虾..8 小时前
Linux 软硬链接和动静态库
linux·运维·服务器
Evan芙8 小时前
Linux常见的日志服务管理的常见日志服务
linux·运维·服务器
hkhkhkhkh12310 小时前
Linux设备节点基础知识
linux·服务器·驱动开发
棒棒的皮皮10 小时前
【OpenCV】Python图像处理几何变换之翻转
图像处理·python·opencv·计算机视觉
青软青之LIMS10 小时前
新质生产力视野下:解析LIMS实施目标与设计原则如何重塑实验室检测新范式
物联网·实验室信息管理系统·实验室数智化管理系统·实验室数字化管理系统·实验室综合管理平台
无能者狂怒10 小时前
YOLO C++ Onnx Opencv项目配置指南
c++·opencv·yolo
劈星斩月10 小时前
OpenCV 学习9-灰度转黑白二值图像
opencv·转二值图像·threshold函数
CodeCraft Studio10 小时前
国产化PPT处理控件Spire.Presentation教程:使用Python将图片批量转换为PPT
python·opencv·powerpoint·ppt文档开发·ppt组件库·ppt api
云里物里11 小时前
物联网基站版本的电子标签有哪些优势?
物联网·电子价签·电子标签·电子墨水屏标签·电子标签系统
HZero.chen11 小时前
Linux字符串处理
linux·string