最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

IR遥控器配置

IT圈 admin 23浏览 0评论

2024年10月25日发(作者:承紫南)

第一步:

:通过service remotecfg /system/bin/remotecfg /system/etc/在开机init阶

段,将中的配置通过ioctl赋值到ir驱动的变量中(用户空间—>内核空间),

这样遥控定制化配置才会生效。

remotecfg程序代码位于external/remoteconf/irremote.c,可以在设备的/system/bin/下找到

它并手动运行

#./system/bin/remotecfg /system/etc/

第二步:

红外驱动(Linux内核层):

Linux irremote driver将依照红外驱动配置文件,将红外键值ircode映射为Linux标准键

盘扫描码scancode。这个过程即将红外遥控器的按键事件转换为Linux的标准input event。

a) 红外驱动配置文件/system/etc/

b)标准键盘扫描码kernel/include/linux/input.h(在几次遥控器定制化中,尚未修改过该文

件)

第三步:

Andriod层:

windows manager从irremote driver中读出key event,再通过

/system/usr/keylayout/aml_文件,将标准input设备的scan code映射为Andriod

API按键KEYCODE字符串。最终scancode和keycode被window manager发送到应用程

序,被其focus view消化处理。

例如:key 113 SEARCH

官方称.kl为key layout map file。

映射/配置文件说明

ircode映射为scan code: device/amlogic/xxx/

#amlogic NEC remote

factory_code = 0xfb040001 //每个设备都有独特的factory code. 格式

custom_code(16bit)+index_code(16bit)

//例子: 0xfb040001= 0xfb04(客户码) + 0001 (低16位可填

写任意值)

key_begin //按键映射表

0x47 11 //0x47是红外键值,11是对应的标准按键scancode,可以多个键值对应一个

scancode

0x5C 97

……

key_end //按键映射表结束

mouse_begin //鼠标方向映射表,每行

0 0x10 //0是方向数字表示符(Left),对应红外按键键值0x10

1 0x11 //方向键右

2 0x0b //方向键上

3 0x0e //方向键下

mouse_end //鼠标方向映射表结束

scancode与KEYCODE字符串映射:

在M1 2.3系统中,位于源码目录的device/amlogic/xxx/ aml_

在M3 4.0系统中,位于源

device/amlogic/xxx/Vendor_0001_Product_

.....................

key 9 8

码目录的

key 10 9

key 11 0

key 228 POUND

key 227 STAR

key 231 CALL

key 61 CALL

key 97 DPAD_CENTER

key 108 DPAD_DOWN

key 103 DPAD_UP

key 102 HOME

key 114 VOLUME_DOWN

KEYCODE字符串转换为Andriod

frameworks/base/include/ui/KeycodeLabels.h

static const KeycodeLabel KEYCODES[] = {

{ "SOFT_LEFT", 1 },

{ "HOME", 3 },

{ "BACK", 4 },

{ "CALL", 5 },

{ "ENDCALL", 6 },

{ "0", 7 },

{ "1", 8 },

{ "2", 9 },

UI键值:

{ "3", 10 },

{ "4", 11 },

{ "5", 12 },

{ "STAR", 17 },

{ "POUND", 18 },

{ "DPAD_UP", 19 },

{ "VOLUME_UP", 24 },

.........................................

键盘scancode定义:kernel/include/linux/input.h

......

#define KEY_SPACE 57

#define KEY_CAPSLOCK 58

#define KEY_F1 59

#define KEY_F2 60

#define KEY_F3 61

#define KEY_F4 62

#define KEY_F5 63

#define KEY_F6 64

#define KEY_F7 65

#define KEY_F8 66

#define KEY_F9 67

#define KEY_F10 68

........

案例一:Amlogic新平台增加/移植遥控器代码

mid产品往往没有遥控器,如果要增加遥控器的支持,需要从mbox代码中拷贝以下文

件和目录:

1)遥控器驱动:kerneldriversamlogicinputirremote

2)Andriod 遥控器service:externalremoteconf目录

3)中启动service remotecfg

# remote

service remotecfg /system/bin/remotecfg /system/etc/

class main

oneshot

4)拷贝定制化与kl两个文件

案例二:遥控器静音键改为设置键(不新增按键)

1) 按下遥控静音键,观察串口打印出的ircode

2) 在板子的/system/etc/文件中找到静音键的ircode与scancode对应行,如下:

0x0c 113

3) 在板子的/system/usr/keylayout/aml_或Vendor_0001_Product_中找到

scancode 113所在行:

key 113 SEARCH

4) 将keycode ‘SEARCH’ 修改为需要的KEYCODE字符串。

5) 重新编译

案例三:遥控器增加新按键功能(IPTV)

新增按键的遥控器往往不是我们公版遥控器,不能利用现有按键实现特定功能,需要在

系统中新增以支持特定APK应用场景。

1) 通过打印找出新增按键的ircode

2) 在找到ircode对应行,或新建一行。这个文件中需要

注意factory_code = 0xfd020001 是遥控器的客户码,必须与实体遥控器对应。

3) 修改deviceamlogicxxxaml_或Vendor_0001_Product_

添加时依照上下文的格式:例如 key 1 BACK这行中,"1"对应 中的

scancode,"BACK" 就是需要在后面keycodeLabels.h中定义的字串,新增按键可以自定

义这个字串,比如RED。

4) frameworks/base/include/ui/KeycodeLabels.h,在KEYCODES[]数组后面顺序添加:

...

{ "RED", 141},

{ NULL, 0 }

注意:

a) 追加的按键须在末行的{ NULL, 0 }前面。 在这个地方,会将RED等这些字符串转换

成数值、键值,传送到中。

b) RED后面的数值,需要与客户协商,客户APK应该专门处理这个新建的141值。

c) 141的值不应与其他keycode重复,建议新增键的取值依照上文的值,依次累加。

5)在frameworks/base/core/res/res/values/中追加:

6)在frameworks/base/core/java/android/view/中添加:

public static final int KEYCODE_RED = 141;

中添加的数值要与上面中的数值保持一致,如果是在最后面追

加的话,需要注意修改LAST_KEYCODE的值 为最后一个。

7)修改完后,需要在根目录下先执行make update-api更新文件,再进行编译,

否则会报错。

2024年10月25日发(作者:承紫南)

第一步:

:通过service remotecfg /system/bin/remotecfg /system/etc/在开机init阶

段,将中的配置通过ioctl赋值到ir驱动的变量中(用户空间—>内核空间),

这样遥控定制化配置才会生效。

remotecfg程序代码位于external/remoteconf/irremote.c,可以在设备的/system/bin/下找到

它并手动运行

#./system/bin/remotecfg /system/etc/

第二步:

红外驱动(Linux内核层):

Linux irremote driver将依照红外驱动配置文件,将红外键值ircode映射为Linux标准键

盘扫描码scancode。这个过程即将红外遥控器的按键事件转换为Linux的标准input event。

a) 红外驱动配置文件/system/etc/

b)标准键盘扫描码kernel/include/linux/input.h(在几次遥控器定制化中,尚未修改过该文

件)

第三步:

Andriod层:

windows manager从irremote driver中读出key event,再通过

/system/usr/keylayout/aml_文件,将标准input设备的scan code映射为Andriod

API按键KEYCODE字符串。最终scancode和keycode被window manager发送到应用程

序,被其focus view消化处理。

例如:key 113 SEARCH

官方称.kl为key layout map file。

映射/配置文件说明

ircode映射为scan code: device/amlogic/xxx/

#amlogic NEC remote

factory_code = 0xfb040001 //每个设备都有独特的factory code. 格式

custom_code(16bit)+index_code(16bit)

//例子: 0xfb040001= 0xfb04(客户码) + 0001 (低16位可填

写任意值)

key_begin //按键映射表

0x47 11 //0x47是红外键值,11是对应的标准按键scancode,可以多个键值对应一个

scancode

0x5C 97

……

key_end //按键映射表结束

mouse_begin //鼠标方向映射表,每行

0 0x10 //0是方向数字表示符(Left),对应红外按键键值0x10

1 0x11 //方向键右

2 0x0b //方向键上

3 0x0e //方向键下

mouse_end //鼠标方向映射表结束

scancode与KEYCODE字符串映射:

在M1 2.3系统中,位于源码目录的device/amlogic/xxx/ aml_

在M3 4.0系统中,位于源

device/amlogic/xxx/Vendor_0001_Product_

.....................

key 9 8

码目录的

key 10 9

key 11 0

key 228 POUND

key 227 STAR

key 231 CALL

key 61 CALL

key 97 DPAD_CENTER

key 108 DPAD_DOWN

key 103 DPAD_UP

key 102 HOME

key 114 VOLUME_DOWN

KEYCODE字符串转换为Andriod

frameworks/base/include/ui/KeycodeLabels.h

static const KeycodeLabel KEYCODES[] = {

{ "SOFT_LEFT", 1 },

{ "HOME", 3 },

{ "BACK", 4 },

{ "CALL", 5 },

{ "ENDCALL", 6 },

{ "0", 7 },

{ "1", 8 },

{ "2", 9 },

UI键值:

{ "3", 10 },

{ "4", 11 },

{ "5", 12 },

{ "STAR", 17 },

{ "POUND", 18 },

{ "DPAD_UP", 19 },

{ "VOLUME_UP", 24 },

.........................................

键盘scancode定义:kernel/include/linux/input.h

......

#define KEY_SPACE 57

#define KEY_CAPSLOCK 58

#define KEY_F1 59

#define KEY_F2 60

#define KEY_F3 61

#define KEY_F4 62

#define KEY_F5 63

#define KEY_F6 64

#define KEY_F7 65

#define KEY_F8 66

#define KEY_F9 67

#define KEY_F10 68

........

案例一:Amlogic新平台增加/移植遥控器代码

mid产品往往没有遥控器,如果要增加遥控器的支持,需要从mbox代码中拷贝以下文

件和目录:

1)遥控器驱动:kerneldriversamlogicinputirremote

2)Andriod 遥控器service:externalremoteconf目录

3)中启动service remotecfg

# remote

service remotecfg /system/bin/remotecfg /system/etc/

class main

oneshot

4)拷贝定制化与kl两个文件

案例二:遥控器静音键改为设置键(不新增按键)

1) 按下遥控静音键,观察串口打印出的ircode

2) 在板子的/system/etc/文件中找到静音键的ircode与scancode对应行,如下:

0x0c 113

3) 在板子的/system/usr/keylayout/aml_或Vendor_0001_Product_中找到

scancode 113所在行:

key 113 SEARCH

4) 将keycode ‘SEARCH’ 修改为需要的KEYCODE字符串。

5) 重新编译

案例三:遥控器增加新按键功能(IPTV)

新增按键的遥控器往往不是我们公版遥控器,不能利用现有按键实现特定功能,需要在

系统中新增以支持特定APK应用场景。

1) 通过打印找出新增按键的ircode

2) 在找到ircode对应行,或新建一行。这个文件中需要

注意factory_code = 0xfd020001 是遥控器的客户码,必须与实体遥控器对应。

3) 修改deviceamlogicxxxaml_或Vendor_0001_Product_

添加时依照上下文的格式:例如 key 1 BACK这行中,"1"对应 中的

scancode,"BACK" 就是需要在后面keycodeLabels.h中定义的字串,新增按键可以自定

义这个字串,比如RED。

4) frameworks/base/include/ui/KeycodeLabels.h,在KEYCODES[]数组后面顺序添加:

...

{ "RED", 141},

{ NULL, 0 }

注意:

a) 追加的按键须在末行的{ NULL, 0 }前面。 在这个地方,会将RED等这些字符串转换

成数值、键值,传送到中。

b) RED后面的数值,需要与客户协商,客户APK应该专门处理这个新建的141值。

c) 141的值不应与其他keycode重复,建议新增键的取值依照上文的值,依次累加。

5)在frameworks/base/core/res/res/values/中追加:

6)在frameworks/base/core/java/android/view/中添加:

public static final int KEYCODE_RED = 141;

中添加的数值要与上面中的数值保持一致,如果是在最后面追

加的话,需要注意修改LAST_KEYCODE的值 为最后一个。

7)修改完后,需要在根目录下先执行make update-api更新文件,再进行编译,

否则会报错。

发布评论

评论列表 (0)

  1. 暂无评论