【笔记分享】Android TV 红外&蓝牙遥控器添加

记录RTK平台上适配红外&蓝牙遥控器,以便以后查看。

红外遥控器

遥控器流程图
RTK平台遥控器按键流程

物理按键的定义是在ir_table.config
如:遥控器物理按键对应图
NEC编码: 1
RCA编码: 8
0xE31CC738 :scancode
KEY_POWER : keycode

其中三个头文件分别对解析 scancode 进行了转换,路径如下:

  1. kernel\system\lib\develop\ir_bin_create\input-event-custom-codes.h
  2. kernel\linux\linux-4.14\include\uapi\linux\input-event-custom-codes.h
  3. kernel\linux\linux-4.14\include\uapi\linux\input-event-codes.h

由上述编译文件进行编译,生成对应的ir_table.bin

编译方法:

./ir_bin_create generate  ir_table.config ir_table.bin

验证是否成功编译到.bin文件

./ir_bin_create print ir_table.bin

ir_table.bin ——> bootcode

在bootcode中,由 uboot\arch\arm\cpu\armv7\rtd285o\bootparam.c 的 get_factory_ir_table_from_factory()函数来读取 ir_table.bin的地址将其传给kernel

在串口使用cat /proc/cmdline命令可以看到地址

bootcode ——> kernel

在kernel中 odin2k\kernel\linux\linux-4.14\drivers\rtk_kdriver\ir\ir_table\ir_table_user.c 会去拿这个传过来的地址

static int __init venus_ir_input_table_addr_parse(char *options)
{
   
   	
    unsigned long ir_table_phy_address = 0;
    
    if(options == NULL)
        return 0;  
  
    if (sscanf(options, "%lx", &ir_table_phy_address) != 1)
        return 0;
	
    g_ir_boot_memory_address = ir_table_phy_address;
    IR_INFO("g_ir_boot_memory_address == %lx\n", g_ir_boot_memory_address);
    return 0;
}

early_param("ir_table", venus_ir_input_table_addr_parse);

之后在 kernel\linux\linux-4.14\drivers\rtk_kdriver\ir\irrc_core.c 文件中

  1. 判断协议是否正确,并解析出 scancode
static int examine_ir_avail(uint32_t *which, uint32_t *regValue, uint32_t 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值